[Note: CC main authors of the code surrounding the patch] On Mon, Jan 23, 2012 at 5:14 PM, Neal Groothuis <ngroot@xxxxxxxxxx> wrote: >> On 1/20/2012 3:35 PM, Neal Groothuis wrote: >>> I'm trying to find /all/ commits that change a file in the >>> repository...and its proving to be trickier than I thought. :-) > > On 1/21/2012 6:16 PM, Neal Kreitzinger wrote: >> Does git-log --all help? > > I don't see how it would. The commits are all reachable from HEAD, which > would seem to be the problem that --all would correct. > > What I'm trying to do is find the commits in which a file differs from > that same file in any of its parents. If you add parent rewriting (--parent, --graph or see it in gitk, with --full-history) you'll get your B2 commit as it adds commits to have a meaningful history. But I don't think this is what you are asking for. You could try the following patch (sorry for the whitespace damage, also attatched): Subject: [PATCH/RFC] revision: merging branches with different content is interesting in --full-history --- revision.c | 2 +- t/t6016-rev-list-graph-simplify-history.sh | 1 + 2 files changed, 2 insertions(+), 1 deletions(-) diff --git a/revision.c b/revision.c index 064e351..db97250 100644 --- a/revision.c +++ b/revision.c @@ -492,7 +492,7 @@ static void try_to_simplify_commit(struct rev_info *revs, struct commit *commit) } die("bad tree compare for commit %s", sha1_to_hex(commit->object.sha1)); } - if (tree_changed && !tree_same) + if ((tree_changed && !tree_same) || (!revs->simplify_history && tree_changed)) return; commit->object.flags |= TREESAME; } 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 && (I could rewrite the condition but I think it is cleaner). This patch changes the semantics of --full-history to consider all commits with at least one modified parent as an interesting commit (even for merges). This is almost as enabling --parent: git $ git rev-list --full-history HEAD Makefile | wc -l 1769 $ git rev-list --full-history --parents HEAD Makefile | wc -l 6732 git $ ./git rev-list --full-history HEAD Makefile | wc -l 6052 I think that --full-history should list these extra merges as you are asking for the full history and a merge merging two branches with different content is an interesting event in this case (full history). But maybe we should just add an extra flag... HTH, Santi
From 36a09f1a39212eb4b45268215cc9c336a7afebda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Santi=20B=C3=A9jar?= <santi@xxxxxxxxxxx> Date: Tue, 24 Jan 2012 00:46:23 +0100 Subject: [PATCH] revision: merging branches with different content is interesting in --full-history --- revision.c | 2 +- t/t6016-rev-list-graph-simplify-history.sh | 1 + 2 files changed, 2 insertions(+), 1 deletions(-) diff --git a/revision.c b/revision.c index 064e351..db97250 100644 --- a/revision.c +++ b/revision.c @@ -492,7 +492,7 @@ static void try_to_simplify_commit(struct rev_info *revs, struct commit *commit) } die("bad tree compare for commit %s", sha1_to_hex(commit->object.sha1)); } - if (tree_changed && !tree_same) + if ((tree_changed && !tree_same) || (!revs->simplify_history && tree_changed)) return; commit->object.flags |= TREESAME; } 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.4.rc3.8.gd2d4