forked from TrueCloudLab/restic
Add cat tree snapshot:subpath command
This command prints the tree for the given path.
This commit is contained in:
parent
85860e6e97
commit
233b841ad9
1 changed files with 25 additions and 2 deletions
|
@ -13,7 +13,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var cmdCat = &cobra.Command{
|
var cmdCat = &cobra.Command{
|
||||||
Use: "cat [flags] [pack|blob|snapshot|index|key|masterkey|config|lock] ID",
|
Use: "cat [flags] [masterkey|config|pack ID|blob ID|snapshot ID|index ID|key ID|lock ID|tree snapshot:path]",
|
||||||
Short: "Print internal objects to stdout",
|
Short: "Print internal objects to stdout",
|
||||||
Long: `
|
Long: `
|
||||||
The "cat" command is used to print internal objects to stdout.
|
The "cat" command is used to print internal objects to stdout.
|
||||||
|
@ -55,7 +55,7 @@ func runCat(ctx context.Context, gopts GlobalOptions, args []string) error {
|
||||||
tpe := args[0]
|
tpe := args[0]
|
||||||
|
|
||||||
var id restic.ID
|
var id restic.ID
|
||||||
if tpe != "masterkey" && tpe != "config" && tpe != "snapshot" {
|
if tpe != "masterkey" && tpe != "config" && tpe != "snapshot" && tpe != "tree" {
|
||||||
id, err = restic.ParseID(args[1])
|
id, err = restic.ParseID(args[1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Fatalf("unable to parse ID: %v\n", err)
|
return errors.Fatalf("unable to parse ID: %v\n", err)
|
||||||
|
@ -165,6 +165,29 @@ func runCat(ctx context.Context, gopts GlobalOptions, args []string) error {
|
||||||
|
|
||||||
return errors.Fatal("blob not found")
|
return errors.Fatal("blob not found")
|
||||||
|
|
||||||
|
case "tree":
|
||||||
|
sn, subpath, err := restic.FindSnapshot(ctx, repo.Backend(), repo, args[1])
|
||||||
|
if err != nil {
|
||||||
|
return errors.Fatalf("could not find snapshot: %v\n", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = repo.LoadIndex(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
sn.Tree, err = restic.FindTreeDirectory(ctx, repo, sn.Tree, subpath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
buf, err := repo.LoadBlob(ctx, restic.TreeBlob, *sn.Tree, nil)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err = globalOptions.stdout.Write(buf)
|
||||||
|
return err
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return errors.Fatal("invalid type")
|
return errors.Fatal("invalid type")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue