git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: path limiting broken

From
Linus Torvalds <torvalds@osdl.org>
Date
Apr 16, 2006, 17:51 UTC
Message-ID
<Pine.LNX.4.64.0604161034290.3701@g5.osdl.org>
In-Reply-To
<Pine.LNX.4.63.0604161905010.18184@wbgn013.biozentrum.uni-wuerzburg.de>
On Sun, 16 Apr 2006, Johannes Schindelin wrote:
Show 16 quoted lines
> 
> just to make it clearer what I want:
> 
> 	git-whatchanged -p next | grep parse_whatchanged
> 
> as well as
> 
> 	git log -p next | grep parse_whatchanged
> 
> do not find that any line like
> 
> 	int parse_whatchanged_opt(int ac, [...]
> 
> was removed, but they find that this line was added. However, in the 
> working tree (which has a fresh checkout of next), there is no such line 
> in log-tree.c. So I really would like to know where it vanished!
It was removed by merge 43f934aa: "Merge branch 'lt/logopt' into next".

The "parse_whatchanged_opt()" function never existed in that lt/logopt branch, and merging it (manually, I assume) it doesn't exist in the result either.

General hint: if you don't find it in "--cc", then that means that it's almost certainly a merge. "--cc" will only find things that _clash_, ie the end result is different from either of the branches (and in this case, it wasn't different, since parse_whatchanged_opt() simply didn't exist in the branch that was merged).

Now, finding things in merges can be a bit painful, but the sure-fire safe way is the old one: use "-m -p" to show _all_ sides of a merge as a diff. That's a really inconvenient format for reading, but it literally shows all changes to all parents.

Again, "git log log-tree.c" actually does do the right thing: the current state of "log-tree.c" really has _all_ of its history coming from the lt/logopt branch, which is why when you do

	git log -m -p log-tree.c | grep int parse_whatchanged_opt

you won't get any result at all: the _current_ state of log-tree.c really has no history what-so-ever that involved parse_whatchanged_opt. That may sound strange, but it really is very true. Doing a "gitk log-tree.c" shows what the real history of the contents of that file is.

And this actually comes back to a very fundamental git issue: git tracks _contents_. It doesn't care one whit if there was another branch that had some other history for that file: if that other branch didn't affect the contents of the file, then that other branch simply doesn't exist as far as that particular file history is concerned. It only exists as a "bigger" issue.

But that "-m -p" thing can be useful when you do want to see the bigger issue. As might "--no-prune-merges".

		Linus
Previous: Johannes Schindelin
Message 13 of 13 in “path limiting broken”
  1. Johannes SchindelinApr 16, 2006
  2. Linus TorvaldsApr 16, 2006
  3. Johannes SchindelinApr 16, 2006
  4. Linus TorvaldsApr 16, 2006
  5. Johannes SchindelinApr 16, 2006
  6. Johannes SchindelinApr 16, 2006
  7. Linus TorvaldsApr 16, 2006
  8. Johannes SchindelinApr 16, 2006
  9. Linus TorvaldsApr 16, 2006
  10. Johannes SchindelinApr 16, 2006
  11. Linus TorvaldsApr 17, 2006
  12. Johannes SchindelinApr 16, 2006
  13. Linus TorvaldsApr 16, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.