From f7124667145d1f7c614d9fc644bc07bb6174454a Mon Sep 17 00:00:00 2001 From: Ophestra Date: Fri, 9 Jan 2026 01:51:39 +0900 Subject: internal/pkg: move dependency flooding to cache This imposes a hard upper limit to concurrency during dependency satisfaction and moves all dependency-related code out of individual implementations of Artifact. This change also includes ctx and msg as part of Cache. Signed-off-by: Ophestra --- internal/pkg/testdata/main.go | 64 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 53 insertions(+), 11 deletions(-) (limited to 'internal/pkg/testdata/main.go') diff --git a/internal/pkg/testdata/main.go b/internal/pkg/testdata/main.go index dc50f388..f883aec7 100644 --- a/internal/pkg/testdata/main.go +++ b/internal/pkg/testdata/main.go @@ -12,6 +12,7 @@ import ( "strings" "syscall" + "hakurei.app/container/check" "hakurei.app/container/fhs" "hakurei.app/container/vfs" ) @@ -20,14 +21,24 @@ func main() { log.SetFlags(0) log.SetPrefix("testtool: ") - var hostNet bool - wantArgs := []string{"testtool"} - if len(os.Args) == 2 { - hostNet = true - log.SetPrefix("testtool(net): ") - wantArgs = []string{"testtool", "net"} - } - if !slices.Equal(os.Args, wantArgs) { + var hostNet, layers bool + if len(os.Args) == 2 && os.Args[0] == "testtool" { + switch os.Args[1] { + case "net": + hostNet = true + log.SetPrefix("testtool(net): ") + break + + case "layers": + layers = true + log.SetPrefix("testtool(layers): ") + break + + default: + log.Fatalf("Args: %q", os.Args) + return + } + } else if wantArgs := []string{"testtool"}; !slices.Equal(os.Args, wantArgs) { log.Fatalf("Args: %q, want %q", os.Args, wantArgs) } @@ -35,7 +46,9 @@ func main() { wantEnv := []string{"HAKUREI_TEST=1"} if len(os.Environ()) == 2 { overlayRoot = true - log.SetPrefix("testtool(overlay root): ") + if !layers { + log.SetPrefix("testtool(overlay root): ") + } wantEnv = []string{"HAKUREI_TEST=1", "HAKUREI_ROOT=1"} } if !slices.Equal(wantEnv, os.Environ()) { @@ -116,8 +129,37 @@ func main() { lowerdir = o[len(lowerdirKey):] } } - if path.Base(lowerdir) != checksumEmptyDir { - log.Fatal("unexpected artifact checksum") + if !layers { + if path.Base(lowerdir) != checksumEmptyDir { + log.Fatal("unexpected artifact checksum") + } + } else { + ident = "o4z73RXEjkF5BBoXYg4WZ3c4VCjwvfJtPKFrstFHcEQxkVDoWTtdc5TMXigFvTsF" + + lowerdirsEscaped := strings.Split(lowerdir, ":") + lowerdirs := lowerdirsEscaped[:0] + // ignore the option separator since it does not appear in ident + for i, e := range lowerdirsEscaped { + if len(e) > 0 && + e[len(e)-1] == check.SpecialOverlayEscape[0] && + (len(e) == 1 || e[len(e)-2] != check.SpecialOverlayEscape[0]) { + // ignore escaped pathname separator since it does not + // appear in ident + + e = e[:len(e)-1] + if len(lowerdirsEscaped) != i { + lowerdirsEscaped[i+1] = e + lowerdirsEscaped[i+1] + continue + } + } + lowerdirs = append(lowerdirs, e) + } + + if len(lowerdirs) != 2 || + path.Base(lowerdirs[0]) != "MGWmEfjut2QE2xPJwTsmUzpff4BN_FEnQ7T0j7gvUCCiugJQNwqt9m151fm9D1yU" || + path.Base(lowerdirs[1]) != "nY_CUdiaUM1OL4cPr5TS92FCJ3rCRV7Hm5oVTzAvMXwC03_QnTRfQ5PPs7mOU9fK" { + log.Fatalf("unexpected lowerdirs %s", strings.Join(lowerdirs, ", ")) + } } } else { if hostNet { -- cgit v1.3.1