Browse Source

Revert 4b7f53da76 (simplify-merges: drop merge from irrelevant side branch, 2013-01-17)

Kevin Bracey reports that the change regresses a case shown in the
user manual.

Trading one fix with another breakage is not worth it.  Just keep
the test to document the existing breakage, and revert the change
for now.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Junio C Hamano 12 years ago
parent
commit
0290bf1250
  1. 27
      revision.c
  2. 12
      t/t6012-rev-list-simplify.sh

27
revision.c

@ -1970,22 +1970,6 @@ static struct merge_simplify_state *locate_simplify_state(struct rev_info *revs,
return st; return st;
} }


static void remove_treesame_parents(struct commit *commit)
{
struct commit_list **pp, *p;

pp = &commit->parents;
while ((p = *pp) != NULL) {
struct commit *parent = p->item;
if (parent->object.flags & TREESAME) {
*pp = p->next;
free(p);
continue;
}
pp = &p->next;
}
}

static struct commit_list **simplify_one(struct rev_info *revs, struct commit *commit, struct commit_list **tail) static struct commit_list **simplify_one(struct rev_info *revs, struct commit *commit, struct commit_list **tail)
{ {
struct commit_list *p; struct commit_list *p;
@ -2039,17 +2023,10 @@ static struct commit_list **simplify_one(struct rev_info *revs, struct commit *c
break; break;
} }


if (revs->first_parent_only) { if (revs->first_parent_only)
cnt = 1; cnt = 1;
} else { else
/*
* A merge with a tree-same parent is useless
*/
if (commit->parents && commit->parents->next)
remove_treesame_parents(commit);

cnt = remove_duplicate_parents(commit); cnt = remove_duplicate_parents(commit);
}


/* /*
* It is possible that we are a merge and one side branch * It is possible that we are a merge and one side branch

12
t/t6012-rev-list-simplify.sh

@ -77,14 +77,16 @@ test_expect_success setup '


FMT='tformat:%P %H | %s' FMT='tformat:%P %H | %s'


check_result () { check_outcome () {
outcome=$1
shift
for c in $1 for c in $1
do do
echo "$c" echo "$c"
done >expect && done >expect &&
shift && shift &&
param="$*" && param="$*" &&
test_expect_success "log $param" ' test_expect_$outcome "log $param" '
git log --pretty="$FMT" --parents $param | git log --pretty="$FMT" --parents $param |
unnote >actual && unnote >actual &&
sed -e "s/^.* \([^ ]*\) .*/\1/" >check <actual && sed -e "s/^.* \([^ ]*\) .*/\1/" >check <actual &&
@ -95,11 +97,15 @@ check_result () {
' '
} }


check_result () {
check_outcome success "$@"
}

check_result 'L K J I H G F E D C B A' --full-history check_result 'L K J I H G F E D C B A' --full-history
check_result 'K I H E C B A' --full-history -- file check_result 'K I H E C B A' --full-history -- file
check_result 'K I H E C B A' --full-history --topo-order -- file check_result 'K I H E C B A' --full-history --topo-order -- file
check_result 'K I H E C B A' --full-history --date-order -- file check_result 'K I H E C B A' --full-history --date-order -- file
check_result 'I E C B A' --simplify-merges -- file check_outcome failure 'I E C B A' --simplify-merges -- file
check_result 'I B A' -- file check_result 'I B A' -- file
check_result 'I B A' --topo-order -- file check_result 'I B A' --topo-order -- file
check_result 'H' --first-parent -- another-file check_result 'H' --first-parent -- another-file

Loading…
Cancel
Save