diff options
author | Jeremy Stribling <strib@users.noreply.github.com> | 2019-02-13 07:28:28 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-13 07:28:28 -0800 |
commit | 2ab6d5cd72b59cfd36b08078ddeebd1efb0d2254 (patch) | |
tree | a398b9df6d0d1afd13b6923393766a96b2a7af2d /plumbing/revlist/revlist.go | |
parent | dcc9f375f4daedfef61e7ff2fbbfd851d42a72d8 (diff) | |
parent | 3889c6446da5f9d658b9bfe317429196e25aa4b7 (diff) | |
download | go-git-2ab6d5cd72b59cfd36b08078ddeebd1efb0d2254.tar.gz |
Merge pull request #1066 from keybase/strib/909-git-push-speedup-when-local
remote: speed up pushes when the "remote" repo is local
Diffstat (limited to 'plumbing/revlist/revlist.go')
-rw-r--r-- | plumbing/revlist/revlist.go | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/plumbing/revlist/revlist.go b/plumbing/revlist/revlist.go index 0a9d1e8..7ad71ac 100644 --- a/plumbing/revlist/revlist.go +++ b/plumbing/revlist/revlist.go @@ -21,7 +21,20 @@ func Objects( objs, ignore []plumbing.Hash, ) ([]plumbing.Hash, error) { - ignore, err := objects(s, ignore, nil, true) + return ObjectsWithStorageForIgnores(s, s, objs, ignore) +} + +// ObjectsWithStorageForIgnores is the same as Objects, but a +// secondary storage layer can be provided, to be used to finding the +// full set of objects to be ignored while finding the reachable +// objects. This is useful when the main `s` storage layer is slow +// and/or remote, while the ignore list is available somewhere local. +func ObjectsWithStorageForIgnores( + s, ignoreStore storer.EncodedObjectStorer, + objs, + ignore []plumbing.Hash, +) ([]plumbing.Hash, error) { + ignore, err := objects(ignoreStore, ignore, nil, true) if err != nil { return nil, err } @@ -114,7 +127,6 @@ func reachableObjects( i := object.NewCommitPreorderIter(commit, seen, ignore) pending := make(map[plumbing.Hash]bool) addPendingParents(pending, visited, commit) - for { commit, err := i.Next() if err == io.EOF { |