Skip to content

Commit

Permalink
Merge branch 'jk/branch-verbose-merged'
Browse files Browse the repository at this point in the history
The "--verbose" option no longer breaks "git branch --merged $it".

* jk/branch-verbose-merged:
  branch: clean up commit flags after merge-filter walk
  • Loading branch information
Junio C Hamano committed Sep 26, 2014
2 parents 1c2ea2c + 8376a70 commit 5500095
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 14 deletions.
33 changes: 19 additions & 14 deletions builtin/branch.c
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,7 @@ struct ref_item {
char *dest;
unsigned int kind, width;
struct commit *commit;
int ignore;
};

struct ref_list {
Expand Down Expand Up @@ -385,6 +386,7 @@ static int append_ref(const char *refname, const unsigned char *sha1, int flags,
newitem->commit = commit;
newitem->width = utf8_strwidth(refname);
newitem->dest = resolve_symref(orig_refname, prefix);
newitem->ignore = 0;
/* adjust for "remotes/" */
if (newitem->kind == REF_REMOTE_BRANCH &&
ref_list->kinds != REF_REMOTE_BRANCH)
Expand Down Expand Up @@ -484,17 +486,6 @@ static void fill_tracking_info(struct strbuf *stat, const char *branch_name,
free(ref);
}

static int matches_merge_filter(struct commit *commit)
{
int is_merged;

if (merge_filter == NO_FILTER)
return 1;

is_merged = !!(commit->object.flags & UNINTERESTING);
return (is_merged == (merge_filter == SHOW_MERGED));
}

static void add_verbose_info(struct strbuf *out, struct ref_item *item,
int verbose, int abbrev)
{
Expand Down Expand Up @@ -522,10 +513,9 @@ static void print_ref_item(struct ref_item *item, int maxwidth, int verbose,
{
char c;
int color;
struct commit *commit = item->commit;
struct strbuf out = STRBUF_INIT, name = STRBUF_INIT;

if (!matches_merge_filter(commit))
if (item->ignore)
return;

switch (item->kind) {
Expand Down Expand Up @@ -575,7 +565,7 @@ static int calc_maxwidth(struct ref_list *refs)
{
int i, w = 0;
for (i = 0; i < refs->index; i++) {
if (!matches_merge_filter(refs->list[i].commit))
if (refs->list[i].ignore)
continue;
if (refs->list[i].width > w)
w = refs->list[i].width;
Expand Down Expand Up @@ -618,6 +608,7 @@ static void show_detached(struct ref_list *ref_list)
item.kind = REF_LOCAL_BRANCH;
item.dest = NULL;
item.commit = head_commit;
item.ignore = 0;
if (item.width > ref_list->maxwidth)
ref_list->maxwidth = item.width;
print_ref_item(&item, ref_list->maxwidth, ref_list->verbose, ref_list->abbrev, 1, "");
Expand Down Expand Up @@ -656,6 +647,20 @@ static int print_ref_list(int kinds, int detached, int verbose, int abbrev, stru

if (prepare_revision_walk(&ref_list.revs))
die(_("revision walk setup failed"));

for (i = 0; i < ref_list.index; i++) {
struct ref_item *item = &ref_list.list[i];
struct commit *commit = item->commit;
int is_merged = !!(commit->object.flags & UNINTERESTING);
item->ignore = is_merged != (merge_filter == SHOW_MERGED);
}

for (i = 0; i < ref_list.index; i++) {
struct ref_item *item = &ref_list.list[i];
clear_commit_marks(item->commit, ALL_REV_FLAGS);
}
clear_commit_marks(filter, ALL_REV_FLAGS);

if (verbose)
ref_list.maxwidth = calc_maxwidth(&ref_list);
}
Expand Down
29 changes: 29 additions & 0 deletions t/t3201-branch-contains.sh
Original file line number Diff line number Diff line change
Expand Up @@ -130,4 +130,33 @@ test_expect_success 'implicit --list conflicts with modification options' '
'

# We want to set up a case where the walk for the tracking info
# of one branch crosses the tip of another branch (and make sure
# that the latter walk does not mess up our flag to see if it was
# merged).
#
# Here "topic" tracks "master" with one extra commit, and "zzz" points to the
# same tip as master The name "zzz" must come alphabetically after "topic"
# as we process them in that order.
test_expect_success 'branch --merged with --verbose' '
git branch --track topic master &&
git branch zzz topic &&
git checkout topic &&
test_commit foo &&
git branch --merged topic >actual &&
cat >expect <<-\EOF &&
master
* topic
zzz
EOF
test_cmp expect actual &&
git branch --verbose --merged topic >actual &&
cat >expect <<-\EOF &&
master c77a0a9 second on master
* topic 2c939f4 [ahead 1] foo
zzz c77a0a9 second on master
EOF
test_cmp expect actual
'

test_done

0 comments on commit 5500095

Please sign in to comment.