diff --git a/cli/command_manifest_show.go b/cli/command_manifest_show.go new file mode 100644 index 000000000..db76cd1b5 --- /dev/null +++ b/cli/command_manifest_show.go @@ -0,0 +1,44 @@ +package cli + +import ( + "bytes" + "fmt" + "os" + + "gopkg.in/alecthomas/kingpin.v2" +) + +var ( + manifestShowCommand = manifestCommands.Command("show", "Show manifest items").Hidden() + manifestShowItems = manifestShowCommand.Arg("item", "List of items").Required().Strings() +) + +func init() { + manifestShowCommand.Action(showManifestItems) +} + +func showManifestItems(context *kingpin.ParseContext) error { + rep := mustOpenRepository(nil) + + for _, it := range *manifestShowItems { + md, err := rep.Manifests.GetMetadata(it) + if err != nil { + return fmt.Errorf("error getting metadata for %q: %v", it, err) + } + + b, err := rep.Manifests.GetRaw(it) + if err != nil { + return fmt.Errorf("error showing %q: %v", it, err) + } + + fmt.Fprintf(os.Stderr, "// id: %v\n", it) + fmt.Fprintf(os.Stderr, "// length: %v\n", md.Length) + fmt.Fprintf(os.Stderr, "// modified: %v\n", md.ModTime.Format(timeFormat)) + for k, v := range md.Labels { + fmt.Fprintf(os.Stderr, "// label %v:%v\n", k, v) + } + showContentWithFlags(bytes.NewReader(b), false, true) + } + + return nil +} diff --git a/manifest/manifest_manager.go b/manifest/manifest_manager.go index 9da1867b5..3072d88c8 100644 --- a/manifest/manifest_manager.go +++ b/manifest/manifest_manager.go @@ -78,19 +78,28 @@ func (m *Manager) GetMetadata(id string) (*EntryMetadata, error) { } func (m *Manager) Get(id string, data interface{}) error { + b, err := m.GetRaw(id) + if err != nil { + return err + } + + if err := json.Unmarshal(b, data); err != nil { + return fmt.Errorf("unable to unmashal %q: %v", id, err) + } + + return nil +} + +func (m *Manager) GetRaw(id string) ([]byte, error) { m.mu.Lock() defer m.mu.Unlock() e := m.entries[id] if e == nil { - return ErrNotFound + return nil, ErrNotFound } - if err := json.Unmarshal(e.Content, data); err != nil { - return fmt.Errorf("unable to unmashal %q: %v", id, err) - } - - return nil + return e.Content, nil } func (m *Manager) Find(labels map[string]string) []*EntryMetadata {