]> git.proxmox.com Git - libgit2.git/commit
revwalk: don't try to find merge bases when there can be none
authorCarlos Martín Nieto <cmn@dwim.me>
Thu, 20 Mar 2014 19:24:11 +0000 (20:24 +0100)
committerCarlos Martín Nieto <cmn@dwim.me>
Thu, 20 Mar 2014 19:24:11 +0000 (20:24 +0100)
commit704b55cce33aa8665c558347c104041d3ec6e2f3
tree3aff39274e7b95b9ff6a6f493e1f4ce3dc7200fc
parentf29e48995e1af91127157a1eca4177c2f411b1bb
revwalk: don't try to find merge bases when there can be none

As a way to speed up the cases where we need to hide some commits, we
find out what the merge bases are so we know to stop marking commits as
uninteresting and avoid walking down a potentially very large amount of
commits which we will never see. There are however two oversights in
current code.

The merge-base finding algorithm fails to recognize that if it is only
given one commit, there can be no merge base. It instead walks down the
whole ancestor chain needlessly. Make it return an empty list
immediately in this situation.

The revwalk does not know whether the user has asked to hide any commits
at all. In situation where the user pushes multiple commits but doesn't
hide any, the above fix wouldn't do the trick. Keep track of whether the
user wants to hide any commits and only run the merge-base finding
algorithm when it's needed.
src/merge.c
src/revwalk.c
src/revwalk.h