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.GetMtime().GetSeconds(), int64(f.GetMtime().GetNanos())) _, _ = fmt.Fprintf(mfa.Stdout, "%d\t%s\t%s%s", f.GetSize(), mtime.Format(time.RFC3339), f.GetPath(), lineEnd) } else { _, _ = fmt.Fprintf(mfa.Stdout, "%s%s", f.GetPath(), lineEnd) } } return nil }