Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.
Sign upUsing GitPython inside a pre-commit hook breaks (GIT_AUTHOR_DATE breaks) #963
Comments
Thanks for providing what’s needed to reproduce this issue, even though I didn’t thanks to writing this on an iPad. Something that would be nice to add to the issue is the stack trace that follows from executing the example. Something I wonder is if you already verified that not copying the environment in https://github.com/gitpython-developers/GitPython/blob/master/git/cmd.py#L699 will fix the issue. If I recall correctly, child processes always inherit from their parent process environment, and the copy is meant to allow idempotent changes to the env dict. |
Just for your info: if you use the env kwarg in Popen, the parent's env is not cloned, but you're right, it doesn't actually fix the issue. The after a bit more searching the root cause seems to be that GitPython tries to read a lot of enviroment variables when doing things like committing. In this case objects/commit.py#L345 and L354. It's good that this crash happened or GitPython would have silently used the env variables which is something we don't want in this case. That's why I would appreciate the ability to disable that completely, for example with a kwarg to Repo's Now for the GIT_AUTHOR_DATE parsing bug: This is the full traceback:
It seems that adding this: if timestamp.startswith('@'):
timestamp = timestamp[1:] in the Turns out the I can make that a part of my PR too if you like. |
Sorry for the late reply! |
I suspect the culprit of the crash is the GIT_AUTHOR_DATE. If I remove this before starting my script it works. I already pass
expand_vars=False
, but that isn't passed far enough down to make a differance.My current workaround is to nulke the enviroment variables when invoking my script by using
env -i <script>
from the commit hook.My ideal solution would be a flag to disable the copy of the os environ on git/cmd.py:699. This will not only eliminate this issue, but also any potential other interferance (think GIT_DIR and friends).
Replicate via:
Thanks,
Dries