René Scharfe [off-list ref] writes:
Subject: revision: let --full-history keep half-interesting merges
Don't simplify merges away that have at least one parent with changes in
the interesting subset of files if --full-history has been specified.
The previous behaviour hid merges with one uninteresting parent, which
could lead to history that removed code to become undetectable.
I think this patch makes a lot more sense than what I've seen in this
thread (including mine).
E.g., this command run against the Linux kernel repo only found one
merge that brought the specified function in (and the regular commit
which added it in the first place), but missed the 92 merges that
removed it, as well as 67 other merges that added it back:
$ git log -m --full-history -Sblacklist_iommu \
v2.6.26..v2.6.29 -- drivers/pci/intel-iommu.c
Reported-by: Francis Moreau <redacted>
Signed-off-by: Rene Scharfe <redacted>
Thanks.
quoted hunk ↗ jump to hunk
---
revision.c | 2 ++
t/t6016-rev-list-graph-simplify-history.sh | 1 +
2 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/revision.c b/revision.c
index 7b9eaef..84c231b 100644
--- a/revision.c
+++ b/revision.c
@@ -434,6 +434,8 @@ static void try_to_simplify_commit(struct rev_info *revs, struct commit *commit)
case REV_TREE_OLD:
case REV_TREE_DIFFERENT:
tree_changed = 1;
+ if (!revs->simplify_history)
+ return;
pp = &parent->next;
continue;
}
diff --git a/t/t6016-rev-list-graph-simplify-history.sh b/t/t6016-rev-list-graph-simplify-history.sh
index f7181d1..50ffcf4 100755
--- a/t/t6016-rev-list-graph-simplify-history.sh
+++ b/t/t6016-rev-list-graph-simplify-history.sh
@@ -168,6 +168,7 @@ test_expect_success '--graph --full-history --simplify-merges -- bar.txt' '
echo "|\\ " >> expected &&
echo "| * $C4" >> expected &&
echo "* | $A5" >> expected &&
+ echo "* | $A4" >> expected &&
echo "* | $A3" >> expected &&
echo "|/ " >> expected &&
echo "* $A2" >> expected &&
--
1.7.3.4