1
0
Fork 0
mirror of https://github.com/restic/restic.git synced 2025-03-09 00:00:02 +01:00

Take last snapshot as parent by default and allow force re-reading

This commit is contained in:
Matthieu Rakotojaona 2015-04-03 21:18:09 +02:00
parent 094ca7e635
commit f451c7d0a6

View file

@ -13,7 +13,8 @@ import (
)
type CmdBackup struct {
Parent string `short:"p" long:"parent" description:"use this parent snapshot (default: not set)"`
Parent string `short:"p" long:"parent" description:"use this parent snapshot (default: last snapshot in repo)"`
AsNew bool `short:"n" long:"asnew" description:"consider the target as new and re-read it. Overrides the \"parent\" flag"`
}
func init() {
@ -190,20 +191,6 @@ func (cmd CmdBackup) Execute(args []string) error {
parentSnapshotID backend.ID
)
if cmd.Parent != "" {
parentSnapshot, err = s.FindSnapshot(cmd.Parent)
if err != nil {
return fmt.Errorf("invalid id %q: %v", cmd.Parent, err)
}
parentSnapshotID, err = backend.ParseID(parentSnapshot)
if err != nil {
return fmt.Errorf("invalid parent snapshot id %v", parentSnapshot)
}
fmt.Printf("found parent snapshot %v\n", parentSnapshotID)
}
fmt.Printf("scan %v\n", target)
stat, err := restic.Scan(target, newScanProgress())
@ -229,6 +216,47 @@ func (cmd CmdBackup) Execute(args []string) error {
return err
}
// Force using a parent
if cmd.Parent != "" {
parentSnapshot, err = s.FindSnapshot(cmd.Parent)
if err != nil {
return fmt.Errorf("invalid id %q: %v", cmd.Parent, err)
}
parentSnapshotID, err = backend.ParseID(parentSnapshot)
if err != nil {
return fmt.Errorf("invalid parent snapshot id %v", parentSnapshot)
}
fmt.Printf("found parent snapshot %v\n", parentSnapshotID)
}
// Find last snapshot to set it as parent, if not already set
if parentSnapshot == "" {
var latest time.Time
snapshots, err := arch.Cache().List(backend.Snapshot)
if err != nil {
return err
}
for _, entry := range snapshots {
snapshot, err := restic.LoadSnapshot(s, entry.ID)
if err != nil {
return err
}
if snapshot.Time.After(latest) {
latest = snapshot.Time
parentSnapshotID = snapshot.ID()
parentSnapshot = string(parentSnapshotID)
}
}
}
// Force re-reading by not setting a parent
if cmd.AsNew {
parentSnapshotID = backend.ID{}
parentSnapshot = ""
}
fmt.Printf("loading blobs\n")
err = arch.Preload()
if err != nil {