GitPython icon indicating copy to clipboard operation
GitPython copied to clipboard

gitconfig: mnemonicPrefix conflict with create_patch

Open ceccopierangiolieugenio opened this issue 9 months ago • 4 comments

the regex:

https://github.com/gitpython-developers/GitPython/blob/6d09bb610932d6081da7a516f8e7215414d953e5/git/diff.py#L372

is not able to match the diff generated if this flag is enabled in ~/.gitconfig:

[diff]
        mnemonicPrefix = true

because it is expecting [ab]/ as folder prefix for the diff but with mnemonicPrefix enabled it become [wc]/

Diff without mnemonicPrefix

diff --git a/.vscode/launch.json b/.vscode/launch.json
index xxxxxxx..xxxxxxxx
--- a/.vscode/launch.json
+++ b/.vscode/launch.json

Diff with mnemonicPrefix = true

diff --git c/.vscode/launch.json w/.vscode/launch.json
index xxxxxxx..xxxxxxxx
--- c/.vscode/launch.json
+++ w/.vscode/launch.json

Quick Test

repo = git.Repo('.')
branch_ref = repo.head
ancestor_ref = repo.merge_base(branch_ref, repo.refs["main"])
diff = ancestor_ref[0].diff(None, create_patch=True)
print(diff)

ceccopierangiolieugenio avatar Mar 12 '25 16:03 ceccopierangiolieugenio

Thanks a lot for reporting!

To fix this, GitPython should control for this flag and turn it off when invoking Git, i.e. with git -c mnemonicPrefix=false.

Byron avatar Mar 12 '25 23:03 Byron

thanks @Byron, is it there a workaround I can use in the meantime? something like:

diff = ancestor_ref[0].diff(None, create_patch=True, c='diff.mnemonicPrefix=false')

ceccopierangiolieugenio avatar Mar 13 '25 09:03 ceccopierangiolieugenio

So far a quick workaround is:

diff = ancestor_ref[0].diff(None, create_patch=True, **{'src-prefix':'a/','dst-prefix':'b/'})

ceccopierangiolieugenio avatar Mar 13 '25 11:03 ceccopierangiolieugenio