Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package melange for openSUSE:Factory checked in at 2025-12-16 15:53:43 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/melange (Old) and /work/SRC/openSUSE:Factory/.melange.new.1939 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "melange" Tue Dec 16 15:53:43 2025 rev:127 rq:1322901 version:0.37.0 Changes: -------- --- /work/SRC/openSUSE:Factory/melange/melange.changes 2025-12-11 18:43:06.045908445 +0100 +++ /work/SRC/openSUSE:Factory/.melange.new.1939/melange.changes 2025-12-16 16:00:06.152565476 +0100 @@ -1,0 +2,11 @@ +Mon Dec 15 05:53:14 UTC 2025 - Johannes Kastl <[email protected]> + +- Update to version 0.37.0: + * linter:tempdir: Relax check for /run directories slightly + * linter:tempdir: Consider directories too + * linter: Refactor so that individual linters can consider + directories + * feat: add TESTING environment variable feature gate for + microvm-init (#2264) + +------------------------------------------------------------------- Old: ---- melange-0.36.0.obscpio New: ---- melange-0.37.0.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ melange.spec ++++++ --- /var/tmp/diff_new_pack.grh3J5/_old 2025-12-16 16:00:08.376658815 +0100 +++ /var/tmp/diff_new_pack.grh3J5/_new 2025-12-16 16:00:08.376658815 +0100 @@ -17,7 +17,7 @@ Name: melange -Version: 0.36.0 +Version: 0.37.0 Release: 0 Summary: Build APKs from source code License: Apache-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.grh3J5/_old 2025-12-16 16:00:08.428660997 +0100 +++ /var/tmp/diff_new_pack.grh3J5/_new 2025-12-16 16:00:08.432661165 +0100 @@ -3,7 +3,7 @@ <param name="url">https://github.com/chainguard-dev/melange</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v0.36.0</param> + <param name="revision">v0.37.0</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.grh3J5/_old 2025-12-16 16:00:08.460662340 +0100 +++ /var/tmp/diff_new_pack.grh3J5/_new 2025-12-16 16:00:08.464662508 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/chainguard-dev/melange</param> - <param name="changesrevision">c32e57daa58da05d589ec801b6c5c4c3086a83f9</param></service></servicedata> + <param name="changesrevision">70848dbbf4972daa018e43ce951faacc75a60a86</param></service></servicedata> (No newline at EOF) ++++++ melange-0.36.0.obscpio -> melange-0.37.0.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/melange-0.36.0/pkg/container/qemu_runner.go new/melange-0.37.0/pkg/container/qemu_runner.go --- old/melange-0.36.0/pkg/container/qemu_runner.go 2025-12-09 09:15:58.000000000 +0100 +++ new/melange-0.37.0/pkg/container/qemu_runner.go 2025-12-11 19:04:59.000000000 +0100 @@ -717,7 +717,22 @@ // panic=-1 ensures that if the init fails, we immediately exit the machine // Add default SSH keys to the VM sshkey := base64.StdEncoding.EncodeToString(pubKey) - baseargs = append(baseargs, "-append", kernelConsole+" nomodeset random.trust_cpu=on panic=-1 sshkey="+sshkey+" melange_qemu_runner=1") + + // Build kernel command line arguments + kernelArgs := kernelConsole + " nomodeset random.trust_cpu=on panic=-1 sshkey=" + sshkey + " melange_qemu_runner=1" + + // Check for TESTING environment variable and pass it to microvm-init + // TESTING must be a number (0 for disabled, non-zero for enabled) + if testingValue, ok := os.LookupEnv("TESTING"); ok { + if _, err := strconv.Atoi(testingValue); err == nil { + log.Infof("qemu: TESTING env set to %s, passing to microvm-init via kernel cmdline", testingValue) + kernelArgs += " melange.testing=" + testingValue + } else { + log.Warnf("qemu: TESTING env must be a number, ignoring invalid value: %s", testingValue) + } + } + + baseargs = append(baseargs, "-append", kernelArgs) // we will *not* mount workspace using qemu, this will use 9pfs which is network-based, and will // kill all performances (lots of small files) // instead we will copy back the finished workspace artifacts when done. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/melange-0.36.0/pkg/linter/linter.go new/melange-0.37.0/pkg/linter/linter.go --- old/melange-0.36.0/pkg/linter/linter.go 2025-12-09 09:15:58.000000000 +0100 +++ new/melange-0.37.0/pkg/linter/linter.go 2025-12-11 19:04:59.000000000 +0100 @@ -101,7 +101,7 @@ }, "tempdir": { LinterFunc: linters.TempDirLinter, - Explain: "Remove any offending files in temporary dirs in the pipeline", + Explain: "Remove any offending files in temporary dirs in the pipeline, or add a /usr/lib/tmpfiles.d/ snippet in the case of dirs under /run/", defaultBehavior: Require, }, "usrlocal": { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/melange-0.36.0/pkg/linter/linters/common.go new/melange-0.37.0/pkg/linter/linters/common.go --- old/melange-0.36.0/pkg/linter/linters/common.go 2025-12-09 09:15:58.000000000 +0100 +++ new/melange-0.37.0/pkg/linter/linters/common.go 2025-12-11 19:04:59.000000000 +0100 @@ -30,14 +30,14 @@ IsDocumentationFileRegex = regexp.MustCompile(`(?:READ(?:\.?ME)?|TODO|CREDITS|\.(?:md|docx?|rst|[0-9][a-z]))$`) IsObjectFileRegex = regexp.MustCompile(`\.(a|so|dylib)(\..*)?`) IsSharedObjectFileRegex = regexp.MustCompile(`\.so(?:\.[0-9]+)*$`) - IsTempDirRegex = regexp.MustCompile("^(var/)?(tmp|run)/") + IsTempDirRegex = regexp.MustCompile("^(var/)?tmp/") ManRegex = regexp.MustCompile(`^usr/(?:local/)?share/man(?:/man[0-9][^/]*)?(?:/[^/]+\.[0-9][^/]*(?:\.(?:gz|bz2|xz|lzma|Z))?)?$|^usr/man(?:/man[0-9][^/]*)?(?:/[^/]+\.[0-9][^/]*(?:\.(?:gz|bz2|xz|lzma|Z))?)?$`) PkgconfDirRegex = regexp.MustCompile("^usr/(lib|share)/pkgconfig/") ) // AllPaths walks the filesystem and collects all paths matching the predicate, // returning a structured error if any paths are found. -func AllPaths(ctx context.Context, pkgname string, fsys fs.FS, predicate func(path string) bool, messageFunc func(pkgname string, paths []string) string) error { +func AllPaths(ctx context.Context, pkgname string, fsys fs.FS, predicate func(path string, d fs.DirEntry) bool, messageFunc func(pkgname string, paths []string) string) error { var matchedPaths []string err := fs.WalkDir(fsys, ".", func(path string, d fs.DirEntry, err error) error { @@ -47,10 +47,7 @@ if err != nil { return err } - if d.IsDir() { - return nil - } - if predicate(path) { + if predicate(path, d) { matchedPaths = append(matchedPaths, path) } return nil diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/melange-0.36.0/pkg/linter/linters/cuda.go new/melange-0.37.0/pkg/linter/linters/cuda.go --- old/melange-0.36.0/pkg/linter/linters/cuda.go 2025-12-09 09:15:58.000000000 +0100 +++ new/melange-0.37.0/pkg/linter/linters/cuda.go 2025-12-11 19:04:59.000000000 +0100 @@ -24,7 +24,7 @@ func CudaDriverLibLinter(ctx context.Context, _ *config.Configuration, pkgname string, fsys fs.FS) error { return AllPaths(ctx, pkgname, fsys, - func(path string) bool { return IsCudaDriverLibRegex.MatchString(path) }, + func(path string, d fs.DirEntry) bool { return !d.IsDir() && IsCudaDriverLibRegex.MatchString(path) }, func(pkgname string, paths []string) string { return fmt.Sprintf("%s contains CUDA driver-specific libraries", pkgname) }, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/melange-0.36.0/pkg/linter/linters/dev.go new/melange-0.37.0/pkg/linter/linters/dev.go --- old/melange-0.36.0/pkg/linter/linters/dev.go 2025-12-09 09:15:58.000000000 +0100 +++ new/melange-0.37.0/pkg/linter/linters/dev.go 2025-12-11 19:04:59.000000000 +0100 @@ -25,7 +25,7 @@ func DevLinter(ctx context.Context, _ *config.Configuration, pkgname string, fsys fs.FS) error { return AllPaths(ctx, pkgname, fsys, - func(path string) bool { return strings.HasPrefix(path, "dev/") }, + func(path string, d fs.DirEntry) bool { return !d.IsDir() && strings.HasPrefix(path, "dev/") }, func(pkgname string, paths []string) string { return fmt.Sprintf("%s writes to /dev", pkgname) }, ) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/melange-0.36.0/pkg/linter/linters/dll.go new/melange-0.37.0/pkg/linter/linters/dll.go --- old/melange-0.36.0/pkg/linter/linters/dll.go 2025-12-09 09:15:58.000000000 +0100 +++ new/melange-0.37.0/pkg/linter/linters/dll.go 2025-12-11 19:04:59.000000000 +0100 @@ -29,7 +29,7 @@ return nil } return AllPaths(ctx, pkgname, fsys, - func(path string) bool { return filepath.Ext(path) == ".dll" }, + func(path string, d fs.DirEntry) bool { return !d.IsDir() && filepath.Ext(path) == ".dll" }, func(pkgname string, paths []string) string { fileWord := "file" if len(paths) > 1 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/melange-0.36.0/pkg/linter/linters/documentation.go new/melange-0.37.0/pkg/linter/linters/documentation.go --- old/melange-0.36.0/pkg/linter/linters/documentation.go 2025-12-09 09:15:58.000000000 +0100 +++ new/melange-0.37.0/pkg/linter/linters/documentation.go 2025-12-11 19:04:59.000000000 +0100 @@ -28,7 +28,7 @@ return nil } return AllPaths(ctx, pkgname, fsys, - func(path string) bool { return IsDocumentationFileRegex.MatchString(path) }, + func(path string, d fs.DirEntry) bool { return !d.IsDir() && IsDocumentationFileRegex.MatchString(path) }, func(pkgname string, paths []string) string { fileWord := "file" if len(paths) > 1 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/melange-0.36.0/pkg/linter/linters/dylib.go new/melange-0.37.0/pkg/linter/linters/dylib.go --- old/melange-0.36.0/pkg/linter/linters/dylib.go 2025-12-09 09:15:58.000000000 +0100 +++ new/melange-0.37.0/pkg/linter/linters/dylib.go 2025-12-11 19:04:59.000000000 +0100 @@ -29,7 +29,7 @@ return nil } return AllPaths(ctx, pkgname, fsys, - func(path string) bool { return filepath.Ext(path) == ".dylib" }, + func(path string, d fs.DirEntry) bool { return !d.IsDir() && filepath.Ext(path) == ".dylib" }, func(pkgname string, paths []string) string { fileWord := "file" if len(paths) > 1 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/melange-0.36.0/pkg/linter/linters/infodir.go new/melange-0.37.0/pkg/linter/linters/infodir.go --- old/melange-0.36.0/pkg/linter/linters/infodir.go 2025-12-09 09:15:58.000000000 +0100 +++ new/melange-0.37.0/pkg/linter/linters/infodir.go 2025-12-11 19:04:59.000000000 +0100 @@ -25,7 +25,9 @@ func InfodirLinter(ctx context.Context, _ *config.Configuration, pkgname string, fsys fs.FS) error { return AllPaths(ctx, pkgname, fsys, - func(path string) bool { return strings.HasPrefix(path, "usr/share/info/dir/") }, + func(path string, d fs.DirEntry) bool { + return !d.IsDir() && strings.HasPrefix(path, "usr/share/info/dir/") + }, func(pkgname string, paths []string) string { return fmt.Sprintf("%s writes to /usr/share/info/dir/", pkgname) }, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/melange-0.36.0/pkg/linter/linters/lddcheck.go new/melange-0.37.0/pkg/linter/linters/lddcheck.go --- old/melange-0.36.0/pkg/linter/linters/lddcheck.go 2025-12-09 09:15:58.000000000 +0100 +++ new/melange-0.37.0/pkg/linter/linters/lddcheck.go 2025-12-11 19:04:59.000000000 +0100 @@ -59,7 +59,7 @@ // Collect all shared object files return AllPaths(ctx, pkgname, fsys, - func(path string) bool { return IsSharedObjectFileRegex.MatchString(path) }, + func(path string, d fs.DirEntry) bool { return !d.IsDir() && IsSharedObjectFileRegex.MatchString(path) }, func(pkgname string, paths []string) string { if cfg == nil { return fmt.Sprintf("%s contains shared objects but missing .melange.yaml", pkgname) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/melange-0.36.0/pkg/linter/linters/maninfo.go new/melange-0.37.0/pkg/linter/linters/maninfo.go --- old/melange-0.36.0/pkg/linter/linters/maninfo.go 2025-12-09 09:15:58.000000000 +0100 +++ new/melange-0.37.0/pkg/linter/linters/maninfo.go 2025-12-11 19:04:59.000000000 +0100 @@ -28,7 +28,9 @@ return nil } return AllPaths(ctx, pkgname, fsys, - func(path string) bool { return ManRegex.MatchString(path) || InfoRegex.MatchString(path) }, + func(path string, d fs.DirEntry) bool { + return !d.IsDir() && (ManRegex.MatchString(path) || InfoRegex.MatchString(path)) + }, func(pkgname string, paths []string) string { fileWord := "file" if len(paths) > 1 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/melange-0.36.0/pkg/linter/linters/object.go new/melange-0.37.0/pkg/linter/linters/object.go --- old/melange-0.36.0/pkg/linter/linters/object.go 2025-12-09 09:15:58.000000000 +0100 +++ new/melange-0.37.0/pkg/linter/linters/object.go 2025-12-11 19:04:59.000000000 +0100 @@ -25,7 +25,7 @@ func ObjectLinter(ctx context.Context, _ *config.Configuration, pkgname string, fsys fs.FS) error { return AllPaths(ctx, pkgname, fsys, - func(path string) bool { return filepath.Ext(path) == ".o" }, + func(path string, d fs.DirEntry) bool { return !d.IsDir() && filepath.Ext(path) == ".o" }, func(pkgname string, paths []string) string { fileWord := "file" if len(paths) > 1 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/melange-0.36.0/pkg/linter/linters/opt.go new/melange-0.37.0/pkg/linter/linters/opt.go --- old/melange-0.36.0/pkg/linter/linters/opt.go 2025-12-09 09:15:58.000000000 +0100 +++ new/melange-0.37.0/pkg/linter/linters/opt.go 2025-12-11 19:04:59.000000000 +0100 @@ -28,7 +28,7 @@ return nil } return AllPaths(ctx, pkgname, fsys, - func(path string) bool { return strings.HasPrefix(path, "opt/") }, + func(path string, d fs.DirEntry) bool { return !d.IsDir() && strings.HasPrefix(path, "opt/") }, func(pkgname string, paths []string) string { return fmt.Sprintf("%s writes to /opt", pkgname) }, ) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/melange-0.36.0/pkg/linter/linters/pkgconf.go new/melange-0.37.0/pkg/linter/linters/pkgconf.go --- old/melange-0.36.0/pkg/linter/linters/pkgconf.go 2025-12-09 09:15:58.000000000 +0100 +++ new/melange-0.37.0/pkg/linter/linters/pkgconf.go 2025-12-11 19:04:59.000000000 +0100 @@ -59,7 +59,7 @@ // Collect all pkgconfig files return AllPaths(ctx, pkgname, fsys, - func(path string) bool { return PkgconfDirRegex.MatchString(path) }, + func(path string, d fs.DirEntry) bool { return !d.IsDir() && PkgconfDirRegex.MatchString(path) }, func(pkgname string, paths []string) string { if cfg == nil { return fmt.Sprintf("%s contains pkgconfig files but missing .melange.yaml", pkgname) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/melange-0.36.0/pkg/linter/linters/sbom.go new/melange-0.37.0/pkg/linter/linters/sbom.go --- old/melange-0.36.0/pkg/linter/linters/sbom.go 2025-12-09 09:15:58.000000000 +0100 +++ new/melange-0.37.0/pkg/linter/linters/sbom.go 2025-12-11 19:04:59.000000000 +0100 @@ -26,8 +26,8 @@ func SbomLinter(ctx context.Context, _ *config.Configuration, pkgname string, fsys fs.FS) error { return AllPaths(ctx, pkgname, fsys, - func(path string) bool { - return filepath.Dir(path) == "var/lib/db/sbom" && !strings.HasSuffix(path, ".spdx.json") + func(path string, d fs.DirEntry) bool { + return !d.IsDir() && filepath.Dir(path) == "var/lib/db/sbom" && !strings.HasSuffix(path, ".spdx.json") }, func(pkgname string, paths []string) string { return fmt.Sprintf("%s writes to var/lib/db/sbom", pkgname) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/melange-0.36.0/pkg/linter/linters/srv.go new/melange-0.37.0/pkg/linter/linters/srv.go --- old/melange-0.36.0/pkg/linter/linters/srv.go 2025-12-09 09:15:58.000000000 +0100 +++ new/melange-0.37.0/pkg/linter/linters/srv.go 2025-12-11 19:04:59.000000000 +0100 @@ -28,7 +28,7 @@ return nil } return AllPaths(ctx, pkgname, fsys, - func(path string) bool { return strings.HasPrefix(path, "srv/") }, + func(path string, d fs.DirEntry) bool { return !d.IsDir() && strings.HasPrefix(path, "srv/") }, func(pkgname string, paths []string) string { return fmt.Sprintf("%s writes to /srv", pkgname) }, ) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/melange-0.36.0/pkg/linter/linters/staticarchive.go new/melange-0.37.0/pkg/linter/linters/staticarchive.go --- old/melange-0.36.0/pkg/linter/linters/staticarchive.go 2025-12-09 09:15:58.000000000 +0100 +++ new/melange-0.37.0/pkg/linter/linters/staticarchive.go 2025-12-11 19:04:59.000000000 +0100 @@ -30,7 +30,7 @@ return nil } return AllPaths(ctx, pkgname, fsys, - func(path string) bool { return filepath.Ext(path) == ".a" }, + func(path string, d fs.DirEntry) bool { return !d.IsDir() && filepath.Ext(path) == ".a" }, func(pkgname string, paths []string) string { fileWord := "archive" if len(paths) > 1 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/melange-0.36.0/pkg/linter/linters/tempdir.go new/melange-0.37.0/pkg/linter/linters/tempdir.go --- old/melange-0.36.0/pkg/linter/linters/tempdir.go 2025-12-09 09:15:58.000000000 +0100 +++ new/melange-0.37.0/pkg/linter/linters/tempdir.go 2025-12-11 19:04:59.000000000 +0100 @@ -18,13 +18,50 @@ "context" "fmt" "io/fs" + "strings" "chainguard.dev/melange/pkg/config" ) func TempDirLinter(ctx context.Context, _ *config.Configuration, pkgname string, fsys fs.FS) error { + hasTmpFilesSnippet := false + err := fs.WalkDir(fsys, ".", func(path string, d fs.DirEntry, err error) error { + if err := ctx.Err(); err != nil { + return err + } + if err != nil { + return err + } + if strings.HasPrefix(path, "usr/lib/tmpfiles.d/") { + hasTmpFilesSnippet = true + return fs.SkipAll + } + return nil + }) + if err != nil { + return err + } + return AllPaths(ctx, pkgname, fsys, - func(path string) bool { return IsTempDirRegex.MatchString(path) }, + func(path string, d fs.DirEntry) bool { + // Non-directories in /tmp/ or /var/tmp/ are errors. + if !d.IsDir() && IsTempDirRegex.MatchString(path) { + return true + } + // Anything in /var/run/ is an error. + if strings.HasPrefix(path, "var/run/") { + return true + } + if strings.HasPrefix(path, "run/") { + // Non-directories in /run/ are an error. + if !d.IsDir() { + return true + } + // Directories in /run/ are an error if there are no tmpfiles.d snippets. + return !hasTmpFilesSnippet + } + return false + }, func(pkgname string, paths []string) string { return fmt.Sprintf("%s writes to a temp dir", pkgname) }, ) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/melange-0.36.0/pkg/linter/linters/usrlocal.go new/melange-0.37.0/pkg/linter/linters/usrlocal.go --- old/melange-0.36.0/pkg/linter/linters/usrlocal.go 2025-12-09 09:15:58.000000000 +0100 +++ new/melange-0.37.0/pkg/linter/linters/usrlocal.go 2025-12-11 19:04:59.000000000 +0100 @@ -28,7 +28,7 @@ return nil } return AllPaths(ctx, pkgname, fsys, - func(path string) bool { return strings.HasPrefix(path, "usr/local/") }, + func(path string, d fs.DirEntry) bool { return !d.IsDir() && strings.HasPrefix(path, "usr/local/") }, func(pkgname string, paths []string) string { return fmt.Sprintf("%s contains /usr/local path in non-compat package", pkgname) }, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/melange-0.36.0/pkg/linter/linters/varempty.go new/melange-0.37.0/pkg/linter/linters/varempty.go --- old/melange-0.36.0/pkg/linter/linters/varempty.go 2025-12-09 09:15:58.000000000 +0100 +++ new/melange-0.37.0/pkg/linter/linters/varempty.go 2025-12-11 19:04:59.000000000 +0100 @@ -25,7 +25,7 @@ func VarEmptyLinter(ctx context.Context, _ *config.Configuration, pkgname string, fsys fs.FS) error { return AllPaths(ctx, pkgname, fsys, - func(path string) bool { return strings.HasPrefix(path, "var/empty/") }, + func(path string, d fs.DirEntry) bool { return !d.IsDir() && strings.HasPrefix(path, "var/empty/") }, func(pkgname string, paths []string) string { return fmt.Sprintf("%s writes to /var/empty", pkgname) }, ) } ++++++ melange.obsinfo ++++++ --- /var/tmp/diff_new_pack.grh3J5/_old 2025-12-16 16:00:09.304697762 +0100 +++ /var/tmp/diff_new_pack.grh3J5/_new 2025-12-16 16:00:09.308697930 +0100 @@ -1,5 +1,5 @@ name: melange -version: 0.36.0 -mtime: 1765268158 -commit: c32e57daa58da05d589ec801b6c5c4c3086a83f9 +version: 0.37.0 +mtime: 1765476299 +commit: 70848dbbf4972daa018e43ce951faacc75a60a86 ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/melange/vendor.tar.gz /work/SRC/openSUSE:Factory/.melange.new.1939/vendor.tar.gz differ: char 133, line 2
