mirror of https://github.com/restic/restic.git
Merge pull request #3905 from DRON-666/haspaths-linear
Reduce quadratic time complexity of `Snapshot.HasPaths`
This commit is contained in:
commit
6c69f08a7b
|
@ -0,0 +1,6 @@
|
|||
Enhancement: Improve speed of parent snapshot searching for `backup` command
|
||||
|
||||
Backing up a large number of files using `--files-from-verbatim` or `--files-from-raw`
|
||||
options could require a long time to find the parent snapshot. This has been improved.
|
||||
|
||||
https://github.com/restic/restic/pull/3905
|
|
@ -237,19 +237,14 @@ func (sn *Snapshot) HasTagList(l []TagList) bool {
|
|||
return false
|
||||
}
|
||||
|
||||
func (sn *Snapshot) hasPath(path string) bool {
|
||||
for _, snPath := range sn.Paths {
|
||||
if path == snPath {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// HasPaths returns true if the snapshot has all of the paths.
|
||||
func (sn *Snapshot) HasPaths(paths []string) bool {
|
||||
m := make(map[string]struct{}, len(sn.Paths))
|
||||
for _, snPath := range sn.Paths {
|
||||
m[snPath] = struct{}{}
|
||||
}
|
||||
for _, path := range paths {
|
||||
if !sn.hasPath(path) {
|
||||
if _, ok := m[path]; !ok {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue