Re: Bug in git log
- From
Linus Torvalds <torvalds@osdl.org>
- Date
- May 2, 2006, 15:26 UTC
- Message-ID
- <Pine.LNX.4.64.0605020817060.4086@g5.osdl.org>
- In-Reply-To
- <20060502134158.GC4592@spinlock.ch>
On Tue, 2 May 2006, Matthias Kestenholz wrote:
> > The "double dash" problem is not a big deal since it only happens > with the deprecated shellscript-version of whatchanged.
Simple enough to fix. Appended.
The problem was that "git-rev-parse --no-flags --no-revs" will show _just_ the filenames from the argument list. That means that it will also remove the "--" from the original. That's all well and proper, but git-whatchanged had a bug, and it wouldn't separate the filename arguments from the flags by adding its own "--".
That bug didn't matter back when we didn't check the parsing all that carefully. It does now.
> Does anyone get some output with the following command? That was the > bug I tried to report (sorry for my bad/convoluted english) > > $ git log -- unresolve.c
Now, this returns empty, and it actually does that for a reason.
Along the main path, "unresolve.c" has never existed. The modern "git-whatchanged" (and "git log") is a bit different from the old big-whatchanged.
The old git-whatchanged would go through _every_ commit, because it literally did
git-rev-list | git-diff-tree --stdin -- <paths>
and thus the revision list was generated without _any_ regard for the paths - and every single commit shows up, whether it is relevant or not.
The new revision is based on the revision parsing thing, and the semantics are a bit different: it semantically does the equivalent of
git-rev-list <paths> | git-diff-tree --stdin -- <paths>
which limits the revision list too on the paths.
And yes, "git log" does the same.
See the discussion a few weeks ago about "path limiting broken", and my patch that suggested a "--no-prune-merges" flag:
http://www.gelato.unsw.edu.au/archives/git/0604/19180.html
which gives more of an explanation.
Linus
--
diff --git a/git-whatchanged.sh b/git-whatchanged.sh index 1fb9feb..bb73cff 100755 --- a/git-whatchanged.sh +++ b/git-whatchanged.sh @@ -24,5 +24,5 @@ rev_list_args=$(git-rev-parse --sq --def diff_tree_args=$(git-rev-parse --sq --no-revs --no-flags "$@") && eval "git-rev-list $count $rev_list_args" | -eval "git-diff-tree --stdin --pretty -r $diff_tree_flags $diff_tree_args" | +eval "git-diff-tree --stdin --pretty -r $diff_tree_flags -- $diff_tree_args" | LESS="$LESS -S" ${PAGER:-less}