package cli import ( "fmt" "time" "github.com/urfave/cli/v2" "sneak.berlin/go/mfer/internal/log" "sneak.berlin/go/mfer/mfer" ) func (mfa *CLIApp) listManifestOperation(ctx *cli.Context) error { // Default to ErrorLevel for clean output log.SetLevel(log.ErrorLevel) longFormat := ctx.Bool("long") print0 := ctx.Bool("print0") pathOrURL, err := mfa.resolveManifestArg(ctx) 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 { mtime := time.Unix(f.Mtime.Seconds, int64(f.Mtime.Nanos)) _, _ = fmt.Fprintf(mfa.Stdout, "%d\t%s\t%s%s", f.Size, mtime.Format(time.RFC3339), f.Path, lineEnd) } else { _, _ = fmt.Fprintf(mfa.Stdout, "%s%s", f.Path, lineEnd) } } return nil }