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

Re: git-diff passes <rev>:<path> args to GIT_EXTERNAL_DIFF incorrectly?

From
PWPhillip Wood <phillip.wood123@gmail.com>
Date
Aug 30, 2019, 14:17 UTC
Message-ID
<968253c6-d517-3391-4790-9a07a03fb980@gmail.com>
In-Reply-To
<CAH53SykQWLtjt0gWVrz5KyH-9WyqaQ0GtkhmyLt09QEqcAS_dw@mail.gmail.com>
On 30/08/2019 14:23, Dmitry Nikulin wrote:
Show 21 quoted lines
> On Fri, 30 Aug 2019 at 13:16, Phillip Wood <phillip.wood123@gmail.com> wrote:
>> I'm not sure why the last argument is being split in
>> your example. It is not split in the example below
> 
> I have replicated the splitting issue on my small demo repo [1]:
> 
> $ env GIT_EXTERNAL_DIFF=./print_argv.py git diff -M origin/branch1
> origin/branch1-mv -- file1.txt file1-mv.txt
> ['./print_argv.py',
>   'file1.txt',
>   '/tmp/EWaCSc_file1.txt',
>   '2bef330804cb3f6962e45a72a12a3071ee9b5888',
>   '100644',
>   '/tmp/mtEiSc_file1-mv.txt',
>   'f8fd6737fbe5a45c97ba9c9de495dc46ff11eccd',
>   '100644',
>   'file1-mv.txt',
>   'similarity index 90%\n'
>   'rename from file1.txt\n'
>   'rename to file1-mv.txt\n'
>   'index 2bef330..f8fd673 100644\n']

That's strange - What OS are you using? Does python do any pre-processing of arguments with newlines in them?

Show 20 quoted lines
> This is, however, tangential to the original problem: documenting the
> external diff CLI interface for diffing two blobs. Here is what I am
> seeing:
> 
> $ env GIT_EXTERNAL_DIFF=./print_argv.py git diff
> origin/branch1:file1.txt origin/branch1-mv:file1-mv.txt
> ['./print_argv.py',
>   'file1.txt',
>   '/tmp/n9USvy_file1.txt',
>   '2bef330804cb3f6962e45a72a12a3071ee9b5888',
>   '100644',
>   '/tmp/Zst0uy_file1-mv.txt',
>   'f8fd6737fbe5a45c97ba9c9de495dc46ff11eccd',
>   '100644',
>   'file1-mv.txt',
>   'index 2bef330..f8fd673 100644\n']
> 
> The meaning and origin of the last arg remains mysterious, and the
> other args do not conform to the published documentation[2], which
> states that the args should be:

The documentation is incomplete it should document the extra fields passed when it detects renames.

Show 6 quoted lines
>      path old-file old-hex old-mode new-file new-hex new-mode
> 
> Instead the args that are passed are:
> 
>      path old-filename old-file old-hex old-mode new-file new-hex
> new-mode new-filename something
I think what is happening is that because you're passing different 
filenames in to get the blobs the 'pass rename information' code is 
being triggered so it shows the new filename as the name used to get the 
  second blob and then passes the header which only has an index line as 
there isn't any real rename information.
Best Wishes
Phillip
> [1]: https://github.com/dniku/git-external-diff-argv
> [2]: https://www.git-scm.com/docs/git#Documentation/git.txt-codeGITEXTERNALDIFFcode
> 
Previous: Dmitry NikulinNext: Jeff King
Message 7 of 12 in “git-diff passes <rev>:<path> args to GIT_EXTERNAL_DIFF incorrectly?”
  1. Dmitry NikulinAug 27, 2019
  2. Dmitry NikulinAug 27, 2019
  3. Junio C HamanoAug 29, 2019
  4. Dmitry NikulinAug 29, 2019
  5. Phillip WoodAug 30, 2019
  6. Dmitry NikulinAug 30, 2019
  7. Phillip WoodAug 30, 2019
  8. Jeff KingAug 30, 2019
  9. Dmitry NikulinAug 30, 2019
  10. Dmitry NikulinAug 30, 2019
  11. SZEDER GáborAug 30, 2019
  12. Junio C HamanoAug 30, 2019

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.