On Fri, 30 Aug 2019 at 17:27, Jeff King <peff@xxxxxxxx> wrote: > I think you have an extra "old-filename" in the second list. Agreed. My misunderstanding was that I had thought that when documentation said "path", it meant "argv[0], the path to the diff executable". > Interesting. I _don't_ see that splitting when I run the same command in > your demo repo (nor, looking at Git's code, do I see how it could > happen; we always add the metainfo as a single argument). Szeder Gábor below has guessed at the cause. I have tested it a little more: # Test script to ensure that shell does not get in the way $ cat test.py import sys import subprocess subprocess.check_call([ 'python%s' % sys.argv[1], './print_argv.py', 'similarity index 90%\nrename from file1.txt\nrename to file1-mv.txt\nindex 2bef330..f8fd673 100644\n', ]) # Python 2, expected behavior $ python3 test.py 2 ['./print_argv.py', 'similarity index 90%\nrename from file1.txt\nrename to file1-mv.txt\nindex 2bef330..f8fd673 100644\n'] # Python 3, broken behavior observed before $ python3 test.py 3 ['./print_argv.py', 'similarity index 90%\n' 'rename from file1.txt\n' 'rename to file1-mv.txt\n' 'index 2bef330..f8fd673 100644\n'] # Directly via shell. Python 2, expected behavior $ python2 print_argv.py 'similarity index 90%\nrename from file1.txt\nrename to file1-mv.txt\nindex 2bef330..f8fd673 100644\n' ['print_argv.py', 'similarity index 90%\\nrename from file1.txt\\nrename to file1-mv.txt\\nindex 2bef330..f8fd673 100644\\n'] # Python 3, WTF $ python3 print_argv.py 'similarity index 90%\nrename from file1.txt\nrename to file1-mv.txt\nindex 2bef330..f8fd673 100644\n' ['print_argv.py', 'similarity index 90%\\nrename from file1.txt\\nrename to ' 'file1-mv.txt\\nindex 2bef330..f8fd673 100644\\n']