diff options
author | Jeremy Stribling <strib@alum.mit.edu> | 2017-09-08 17:51:38 -0700 |
---|---|---|
committer | Jeremy Stribling <strib@alum.mit.edu> | 2017-09-09 12:00:17 -0700 |
commit | 841b62a321b3739381b48aeea7364126d1c54520 (patch) | |
tree | 6d09c53325a7c31e15aa794631ec41c0b36b038c /repository.go | |
parent | bb3217ce5d5ed682a5c830c40ea031d3c92a8a7e (diff) | |
download | go-git-841b62a321b3739381b48aeea7364126d1c54520.tar.gz |
plumbing: the commit walker can skip externally-seen commits
When the revlist is computing the set of hashes needed to transfer, it
doesn't need to walk over commits it has already processed. So, it
can instruct the commit walker not to walk those commits by passing in
its own `seen` map.
For a 36K object repo, this brought the time for `revlist.Objects`
down from 50s to 30s.
Diffstat (limited to 'repository.go')
-rw-r--r-- | repository.go | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/repository.go b/repository.go index 8114740..6694517 100644 --- a/repository.go +++ b/repository.go @@ -720,7 +720,7 @@ func (r *Repository) Log(o *LogOptions) (object.CommitIter, error) { return nil, err } - return object.NewCommitPreorderIter(commit, nil), nil + return object.NewCommitPreorderIter(commit, nil, nil), nil } // Tags returns all the References from Tags. This method returns all the tag @@ -949,7 +949,7 @@ func (r *Repository) ResolveRevision(rev plumbing.Revision) (*plumbing.Hash, err commit = c } case revision.CaretReg: - history := object.NewCommitPreorderIter(commit, nil) + history := object.NewCommitPreorderIter(commit, nil, nil) re := item.(revision.CaretReg).Regexp negate := item.(revision.CaretReg).Negate @@ -979,7 +979,7 @@ func (r *Repository) ResolveRevision(rev plumbing.Revision) (*plumbing.Hash, err commit = c case revision.AtDate: - history := object.NewCommitPreorderIter(commit, nil) + history := object.NewCommitPreorderIter(commit, nil, nil) date := item.(revision.AtDate).Date |