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

Output from "git blame A..B -- path" for the bottom commit is misleading

From
Junio C Hamano <gitster@pobox.com>
Date
May 8, 2014, 20:52 UTC
Message-ID
<xmqq8uqc2dt5.fsf@gitster.dls.corp.google.com>
If you run
    $ git blame -L103,107 v2.0.0-rc0..v2.0.0-rc2 t/t9117-git-svn-init-clone.sh
you will see something like this:
    ^cc29195 (Junio C Hamano 2014-04-18 11:21:43 -0700 103) 
    7bbc458b (Kyle J. McKay  2014-04-22 04:16:22 -0700 104) test_expect_...
    ^cc29195 (Junio C Hamano 2014-04-18 11:21:43 -0700 105)         test...
    7bbc458b (Kyle J. McKay  2014-04-22 04:16:22 -0700 106)         git ...
    ^cc29195 (Junio C Hamano 2014-04-18 11:21:43 -0700 107)         test...

It is correct to attribute these lines that have not changed since the bottom of the range (i.e. v2.0.0-rc0) to that commit, and it may be technically correct to show my name because I recorded the tree that contains these lines as v2.0.0-rc0 with that commit.

But I find it really misleading, as this is the true picture if we dug to the bottom of the history:

    $ git blame -L103,107 v2.0.0-rc2 t/t9117-git-svn-init-clone.sh
    f849bb6b (Johan Herland 2013-10-11 14:57:06 +0200 103) 
    7bbc458b (Kyle J. McKay 2014-04-22 04:16:22 -0700 104) test_expect_...
    f849bb6b (Johan Herland 2013-10-11 14:57:06 +0200 105)  test ! -d p...
    7bbc458b (Kyle J. McKay 2014-04-22 04:16:22 -0700 106)  git svn ini...
    f849bb6b (Johan Herland 2013-10-11 14:57:06 +0200 107)  test_must_f...

I do not expect Johan's name to appear in the output for the first one, because that would require us to dig deeper than the commit we were told to stop at, but I am wondering if we can do better than the existing "-b" option to reduce the confusion from the output.

The "-b" option blanks the commit object name, but still shows the name and timestamp for the bottom commit:

             (Junio C Hamano 2014-04-18 11:21:43 -0700 103) 
    7bbc458b (Kyle J. McKay  2014-04-22 04:16:22 -0700 104) test_expect_...
             (Junio C Hamano 2014-04-18 11:21:43 -0700 105)         test...
    7bbc458b (Kyle J. McKay  2014-04-22 04:16:22 -0700 106)         git ...
             (Junio C Hamano 2014-04-18 11:21:43 -0700 107)         test...
I am tempted to say "blame that is run without the --porcelain
option is a end-user facing Porcelain, and people should not be
reading its output in their scripts" and change the behaviour of the
"-b" option to instead show something like this instead:
    
    ^cc29195 (Unknown        2014-04-18 11:21:43 -0700 103) 
    7bbc458b (Kyle J. McKay  2014-04-22 04:16:22 -0700 104) test_expect_...
    ^cc29195 (Unknown        2014-04-18 11:21:43 -0700 105)         test...
    7bbc458b (Kyle J. McKay  2014-04-22 04:16:22 -0700 106)         git ...
    ^cc29195 (Unknown        2014-04-18 11:21:43 -0700 107)         test...

which shows the commit object name, its bottom-ness and the timestamp, or even

             (                                         103) 
    7bbc458b (Kyle J. McKay  2014-04-22 04:16:22 -0700 104) test_expect_...
             (                                         105)         test...
    7bbc458b (Kyle J. McKay  2014-04-22 04:16:22 -0700 106)         git ...
             (                                         107)         test...
which does away with the misleading information altogether.

I myself is leaning towards the latter between the two, and not overriding "-b" but introducing another "cleanse the output of useless bottom information even more" option.

Opinions?
Next: David Kastrup
Message 1 of 17 in “Output from "git blame A..B -- path" for the bottom commit is misleading”
  1. Junio C HamanoMay 8, 2014
  2. David KastrupMay 8, 2014
  3. Junio C HamanoMay 8, 2014
  4. Jeff KingMay 9, 2014
  5. Jeff KingMay 8, 2014
  6. David KastrupMay 8, 2014
  7. Jeff KingMay 9, 2014
  8. David KastrupMay 9, 2014
  9. Jeff KingMay 9, 2014
  10. Junio C HamanoMay 9, 2014
  11. David KastrupMay 9, 2014
  12. Duy NguyenMay 10, 2014
  13. John KeepingMay 8, 2014
  14. Junio C HamanoMay 8, 2014
  15. John KeepingMay 8, 2014
  16. John KeepingMay 8, 2014
  17. Junio C HamanoMay 8, 2014

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.