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

Re: [PATCH v3] diff.c: keep arrow(=>) on show_stats()'s shortened filename part to make rename visible.

From
Thomas Rast <tr@thomasrast.ch>
Date
Oct 13, 2013, 20:29 UTC
Message-ID
<877gdg7w46.fsf@linux-k42r.v.cablecom.net>
In-Reply-To
<660A536D-9993-4B81-B6FF-A113F9111570@gmail.com>
Hi,
Yoshioka Tsuneo <yoshiokatsuneo@gmail.com> writes:
> "git diff -M --stat" can detect rename and show renamed file name like
> "foofoofoo => barbarbar", but if destination filename is long the line
> is shortened like "...barbarbar" so there is no way to know whether the
> file is renamed or existed in the source commit.

Thanks for your patch! I think this is indeed something that should be fixed.

Can you explain the algorithm chosen in the commit message or a block comment in the code? I find it much easier to follow large code blocks (like the one you added) with a prior notion of what it tries to do.

  [As an aside, Documentation/SubmittingPatches says
    The body should provide a meaningful commit message, which:
      . explains the problem the change tries to solve, iow, what is wrong
        with the current code without the change.
      . justifies the way the change solves the problem, iow, why the
        result with the change is better.
      . alternate solutions considered but discarded, if any.
  Observe that you explained the first item very well, but not the
  others.]
> This commit makes it visible like "...foo => ...bar".
Also, you should rewrite this to be in the imperative mood:
  Make sure there is always an arrow, e.g., "...foo => ...bar".
or some such.
  [Again from SubmittingPatches:
    Describe your changes in imperative mood, e.g. "make xyzzy do frotz"
    instead of "[This patch] makes xyzzy do frotz" or "[I] changed xyzzy
    to do frotz", as if you are giving orders to the codebase to change
    its behaviour.]
> Signed-off-by: Tsuneo Yoshioka <yoshiokatsuneo@gmail.com>
> ---
>  diff.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++-------
>  1 file changed, 51 insertions(+), 7 deletions(-)

Can you add a test? Perhaps like the one below. (You can squash it into your commit if you like it.)

Note that in the test, the generated line looks like this:
 {..._does_not_fit_in_a_single_line => .../path1                          | 0

I don't want to go all bikesheddey, but I think it's somewhat unfortunate that the elided parts do not correspond to each other. In particular, I think the closing brace should not be omitted. Perhaps something like this would be ideal (making it up on the spot, don't count characters):

 {...a_single_line => ..._as_the_first}/path1                          | 0
diff --git a/t/t4001-diff-rename.sh b/t/t4001-diff-rename.sh
index 2f327b7..03d6371 100755
--- a/t/t4001-diff-rename.sh
+++ b/t/t4001-diff-rename.sh
@@ -156,4 +156,16 @@ test_expect_success 'rename pretty print common prefix and suffix overlap' '
 	test_i18ngrep " d/f/{ => f}/e " output
 '
 
+test_expect_success 'rename of very long path shows =>' '
+	mkdir long_dirname_that_does_not_fit_in_a_single_line &&
+	mkdir another_extremely_long_path_but_not_the_same_as_the_first &&
+	cp path1 long_dirname*/ &&
+	git add long_dirname*/path1 &&
+	test_commit add_long_pathname &&
+	git mv long_dirname*/path1 another_extremely_*/ &&
+	test_commit move_long_pathname &&
+	git diff -M --stat HEAD^ HEAD >output &&
+	test_i18ngrep "=>.*path1" output
+'
+
 test_done
-- 
Thomas Rast
tr@thomasrast.ch
Previous: Yoshioka TsuneoNext: Yoshioka Tsuneo
Message 7 of 31 in “diff.c: keep arrow(=>) on show_stats()'s shortened filename part to make rename visible.”
  1. diff.c: keep arrow(=>) on show_stats()'s shortened filename part to make rename visible.Yoshioka Tsuneo, Oct 11, 2013
  2. diff.c: keep arrow(=>) on show_stats()'s shortened filename part to make rename visible.Yoshioka Tsuneo, Oct 11, 2013
  3. Sam VilainOct 11, 2013
  4. Keshav KiniOct 12, 2013
  5. Yoshioka TsuneoOct 12, 2013
  6. diff.c: keep arrow(=>) on show_stats()'s shortened filename part to make rename visible.Yoshioka Tsuneo, Oct 12, 2013
  7. Thomas RastOct 13, 2013
  8. Yoshioka TsuneoOct 15, 2013
  9. Duy NguyenOct 14, 2013
  10. Yoshioka TsuneoOct 15, 2013
  11. diff.c: keep arrow(=>) on show_stats()'s shortened filename part to make rename visible.Yoshioka Tsuneo, Oct 15, 2013
  12. Felipe ContrerasOct 15, 2013
  13. Yoshioka TsuneoOct 15, 2013
  14. diff.c: keep arrow(=>) on show_stats()'s shortened filename part to make rename visible.Yoshioka Tsuneo, Oct 15, 2013
  15. Junio C HamanoOct 15, 2013
  16. Keshav KiniOct 15, 2013
  17. Yoshioka TsuneoOct 16, 2013
  18. diff.c: keep arrow(=>) on show_stats()'s shortened filename part to make rename visible.Yoshioka Tsuneo, Oct 16, 2013
  19. Junio C HamanoOct 17, 2013
  20. Yoshioka TsuneoOct 17, 2013
  21. Junio C HamanoOct 17, 2013
  22. Yoshioka TsuneoOct 18, 2013
  23. Junio C HamanoOct 17, 2013
  24. diff.c: keep arrow(=>) on show_stats()'s shortened filename part to make rename visibleYoshioka Tsuneo, Oct 17, 2013
  25. diff.c: keep arrow(=>) on show_stats()'s shortened filename part to make rename visibleYoshioka Tsuneo, Oct 18, 2013
  26. Thomas RastOct 19, 2013
  27. Yoshioka TsuneoOct 20, 2013
  28. Junio C HamanoOct 22, 2013
  29. Yoshioka TsuneoOct 22, 2013
  30. Junio C HamanoOct 22, 2013
  31. diff.c: keep arrow(=>) on show_stats()'s shortened filename part to make rename visible.Yoshioka Tsuneo, Oct 12, 2013

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.