func findInTree(repo *repository.Repository, pat findPattern, id restic.ID, path string) ([]findResult, error) { debug.Log("checking tree %v\n", id) tree, err := repo.LoadTree(id) if err != nil { return nil, err } results := []findResult{} for _, node := range tree.Nodes { debug.Log(" testing entry %q\n", node.Name) m, err := filepath.Match(pat.pattern, node.Name) if err != nil { return nil, err } if m { debug.Log(" pattern matches\n") if !pat.oldest.IsZero() && node.ModTime.Before(pat.oldest) { debug.Log(" ModTime is older than %s\n", pat.oldest) continue } if !pat.newest.IsZero() && node.ModTime.After(pat.newest) { debug.Log(" ModTime is newer than %s\n", pat.newest) continue } results = append(results, findResult{node: node, path: path}) } else { debug.Log(" pattern does not match\n") } if node.Type == "dir" { subdirResults, err := findInTree(repo, pat, *node.Subtree, filepath.Join(path, node.Name)) if err != nil { return nil, err } results = append(results, subdirResults...) } } return results, nil }
func printTree(prefix string, repo *repository.Repository, id restic.ID) error { tree, err := repo.LoadTree(id) if err != nil { return err } for _, entry := range tree.Nodes { Printf(printNode(prefix, entry) + "\n") if entry.Type == "dir" && entry.Subtree != nil { err = printTree(filepath.Join(prefix, entry.Name), repo, *entry.Subtree) if err != nil { return err } } } return nil }