Files
kopia/cli/command_manifest_show.go
Jarek Kowalski 6cb9b8fa4f repo: refactored public API (#318)
* This is 99% mechanical:

Extracted repo.Repository interface that only exposes high-level object and manifest management methods, but not blob nor content management.

Renamed old *repo.Repository to *repo.DirectRepository

Reviewed codebase to only depend on repo.Repository as much as possible, but added way for low-level CLI commands to use DirectRepository.

* PR fixes
2020-03-26 08:04:01 -07:00

57 lines
1.2 KiB
Go

package cli
import (
"bytes"
"context"
"encoding/json"
"github.com/pkg/errors"
"github.com/kopia/kopia/repo"
"github.com/kopia/kopia/repo/manifest"
)
var (
manifestShowCommand = manifestCommands.Command("show", "Show manifest items")
manifestShowItems = manifestShowCommand.Arg("item", "List of items").Required().Strings()
)
func init() {
manifestShowCommand.Action(repositoryAction(showManifestItems))
}
func toManifestIDs(s []string) []manifest.ID {
var result []manifest.ID
for _, it := range s {
result = append(result, manifest.ID(it))
}
return result
}
func showManifestItems(ctx context.Context, rep repo.Repository) error {
for _, it := range toManifestIDs(*manifestShowItems) {
var b json.RawMessage
md, err := rep.GetManifest(ctx, it, &b)
if err != nil {
return errors.Wrapf(err, "error getting metadata for %q", it)
}
printStderr("// id: %v\n", it)
printStderr("// length: %v\n", md.Length)
printStderr("// modified: %v\n", formatTimestamp(md.ModTime))
for k, v := range md.Labels {
printStderr("// label %v:%v\n", k, v)
}
if showerr := showContentWithFlags(bytes.NewReader(b), false, true); showerr != nil {
return showerr
}
}
return nil
}