diff options
author | Jeff King <peff@peff.net> | 2014-09-18 06:49:43 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2014-09-18 09:21:16 -0700 |
commit | 8376a704419813c9af1d056cbd36b9ff6744c8bc (patch) | |
tree | b67a53407a6852e9ef405347afe883c6acdd73f0 /git-cvsserver.perl | |
parent | git-svn: delay term initialization (diff) | |
download | tgif-8376a704419813c9af1d056cbd36b9ff6744c8bc.tar.xz |
branch: clean up commit flags after merge-filter walk
When we run `branch --merged`, we use prepare_revision_walk
with the merge-filter marked as UNINTERESTING. Any branch
tips that are marked UNINTERESTING after it returns must be
ancestors of that commit. As we iterate through the list of
refs to show, we check item->commit->object.flags to see
whether it was marked.
This interacts badly with --verbose, which will do a
separate walk to find the ahead/behind information for each
branch. There are two bad things that can happen:
1. The ahead/behind walk may get the wrong results,
because it can see a bogus UNINTERESTING flag leftover
from the merge-filter walk.
2. We may omit some branches if their tips are involved in
the ahead/behind traversal of a branch shown earlier.
The ahead/behind walk carefully cleans up its commit
flags, meaning it may also erase the UNINTERESTING
flag that we expect to check later.
We can solve this by moving the merge-filter state for each
ref into its "struct ref_item" as soon as we finish the
merge-filter walk. That fixes (2). Then we are free to clear
the commit flags we used in the walk, fixing (1).
Note that we actually do away with the matches_merge_filter
helper entirely here, and inline it between the revision
walk and the flag-clearing. This ensures that nobody
accidentally calls it at the wrong time (it is only safe to
check in that instant between the setting and clearing of
the global flag).
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'git-cvsserver.perl')
0 files changed, 0 insertions, 0 deletions