check / check (push) Failing after 3s
Ported per the library's v2-to-v3 migration guide: the app is a root cli.Command, actions take a context and the command, and flag environment variables become value sources. -v, -q and the version flag are marked local so that, as before, only the commands that define them accept them. ErrWriter is stdout so usage errors print with their help, as before. go mod tidy raises testify to v1.12.1, which v3 requires. The urfave_cli_no_docs build tag is dropped; v3 has no such tag. v3 no longer refuses a flag given under two of its names, so -v --verbose now gives debug output, and the test that pinned the refusal becomes a TestVerboseCount case. Help text follows v3's templates. Model: opus-5-5
62 lines
1.3 KiB
Go
62 lines
1.3 KiB
Go
package cli
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/urfave/cli/v3"
|
|
"sneak.berlin/go/mfer/internal/log"
|
|
"sneak.berlin/go/mfer/mfer"
|
|
)
|
|
|
|
func (mfa *CLIApp) listManifestOperation(cmd *cli.Command) error {
|
|
// Default to ErrorLevel for clean output
|
|
log.SetLevel(log.ErrorLevel)
|
|
|
|
longFormat := cmd.Bool("long")
|
|
print0 := cmd.Bool("print0")
|
|
|
|
pathOrURL, err := mfa.resolveManifestArg(cmd)
|
|
if err != nil {
|
|
return fmt.Errorf("list: %w", err)
|
|
}
|
|
|
|
rc, err := mfa.openManifestReader(pathOrURL)
|
|
if err != nil {
|
|
return fmt.Errorf("list: %w", err)
|
|
}
|
|
|
|
defer func() { _ = rc.Close() }()
|
|
|
|
manifest, err := mfer.NewManifestFromReader(rc)
|
|
if err != nil {
|
|
return fmt.Errorf("list: failed to parse manifest: %w", err)
|
|
}
|
|
|
|
files := manifest.Files()
|
|
|
|
// Determine line ending
|
|
lineEnd := "\n"
|
|
if print0 {
|
|
lineEnd = "\x00"
|
|
}
|
|
|
|
for _, f := range files {
|
|
if longFormat {
|
|
// An entry may legitimately carry no mtime; render that as
|
|
// mtimeAbsent rather than as the Unix epoch.
|
|
mtimeStr := mtimeAbsent
|
|
if mtime, ok := entryMtime(f); ok {
|
|
mtimeStr = mtime.Format(time.RFC3339)
|
|
}
|
|
|
|
_, _ = fmt.Fprintf(mfa.Stdout, "%d\t%s\t%s%s",
|
|
f.GetSize(), mtimeStr, f.GetPath(), lineEnd)
|
|
} else {
|
|
_, _ = fmt.Fprintf(mfa.Stdout, "%s%s", f.GetPath(), lineEnd)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|