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

Re: Possible bug with argument parsing in git blame

From
Jeff King <peff@peff.net>
Date
May 24, 2010, 06:46 UTC
Message-ID
<20100524064641.GA10858@coredump.intra.peff.net>
In-Reply-To
<AANLkTikEiRuitD7lrZQIaOruCBrL1Vu5K74Y4wGoiC1z@mail.gmail.com>
On Mon, May 24, 2010 at 11:47:02AM +0530, Debayan Banerjee wrote:
Show 6 quoted lines
> I used master too. The test cases you provided work fine for me too.
> It also seems that '/' is not a problem. I tested myself with some
> combinations and i could not reproduced the bug. But the strange
> behaviour i reported with my particular case still exists.  My repo
> structure can be cloned from http://github.com/debayan/git-blame-test
> .

OK, I see what is happening. The issue is that you are blaming a file from some revision, but that file doesn't exist in the working tree. You can recreate it with:

  git init
  echo contents >>foo && git add foo && git commit -m one
  echo contents >>foo && git add foo && git commit -m two
  echo contents >>foo && git add foo && git commit -m three
  git mv foo bar && git commit -m moved

Now "git blame HEAD~2..HEAD~1 -- foo" will work, but "git blame HEAD~2..HEAD~1 foo" will not work.

This is as expected. When parsing revision/filename combinations, if there is no explicit "--" separator, then we only allow filenames if the file exists in the working tree. The idea is to prevent typos. For example, in the same repo:

  git bar ;# works, we have bar in the working tree
  git log foo ;# complains, foo is not a revision and not a file, so
               # maybe a typo
  git log -- foo ;# works, filters on foo. The "--" makes it explicit
Things are a little bit funny with blame because:
  1. It should take exactly one filename, so it doesn't have this
     ambiguity.
  2. The error message isn't very helpful. I think this is because blame
     actually accepts several different combinations (like "<path>
     <rev>", and it ends up confused.

I would be tempted to improve this, but I think (1) may no longer be the case soon. As I understand it, some of Bo Yang's work in this area may mean that blame will soon accept multiple files, and the argument parsing may change.

-Peff
Previous: Debayan Banerjee
Message 5 of 5 in “Possible bug with argument parsing in git blame”
  1. Debayan BanerjeeMay 17, 2010
  2. Jeff KingMay 23, 2010
  3. Jeff KingMay 23, 2010
  4. Debayan BanerjeeMay 24, 2010
  5. Jeff KingMay 24, 2010

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.