mirror of https://github.com/restic/restic.git
Merge pull request #515 from viric/fix_traverse_order
Traverse paths in the same order as parent snapshot
This commit is contained in:
commit
84f7d28abf
|
@ -621,12 +621,23 @@ func unique(items []string) []string {
|
|||
return items
|
||||
}
|
||||
|
||||
// baseNameSlice allows sorting paths by basename.
|
||||
//
|
||||
// Snapshots have contents sorted by basename, but we receive full paths.
|
||||
// For the archivePipe to advance them in pairs, we traverse the given
|
||||
// paths in the same order as the snapshot.
|
||||
type baseNameSlice []string
|
||||
|
||||
func (p baseNameSlice) Len() int { return len(p) }
|
||||
func (p baseNameSlice) Less(i, j int) bool { return filepath.Base(p[i]) < filepath.Base(p[j]) }
|
||||
func (p baseNameSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
|
||||
|
||||
// Snapshot creates a snapshot of the given paths. If parentID is set, this is
|
||||
// used to compare the files to the ones archived at the time this snapshot was
|
||||
// taken.
|
||||
func (arch *Archiver) Snapshot(p *Progress, paths []string, parentID *backend.ID) (*Snapshot, backend.ID, error) {
|
||||
paths = unique(paths)
|
||||
sort.Strings(paths)
|
||||
sort.Sort(baseNameSlice(paths))
|
||||
|
||||
debug.Log("Archiver.Snapshot", "start for %v", paths)
|
||||
|
||||
|
|
Loading…
Reference in New Issue