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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 30/08/2019 14:23, Dmitry Nikulin wrote:
On Fri, 30 Aug 2019 at 13:16, Phillip Wood <phillip.wood123@xxxxxxxxx> 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?

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.

     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




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux