Description
I am using the latest GitPython on pip and I have bumped into a weird behavior, that seems to be buggy. I have replicated the behavior both with Python 2.7 and 3.4 and has emerged after updating to newer versions of GitPython. Consider the following snippet (assumes a git repository on the current directory):
import time
from git import Repo, TagReference
repository = Repo('.')
current_commit = repository.head.commit
tag_object = TagReference.create(repository, 'test', message='msg')
try:
for i in range(10):
time.sleep(1)
except KeyboardInterrupt:
print("Interrupted. Exiting gracefully...")
data = tag_object.tag.message
If you interrupt (Ctrl+C) the loop, then the last statement fails with a broken pipe exception (full stack trace below). If the code is not interrupted everything succeeds. Also removing the current_commit = repository.head.commit
line, makes the problem go away, even if you interrupt a loop.
I presume that it has to do with the handling of the SIGTERM emitted with a Ctrl+C, but I am not sure if this is true.
The stack trace:
Traceback (most recent call last):
File "./bugreplicate.py", line 15, in <module>
data = tag_object.tag.message
File "/usr/local/lib/python2.7/dist-packages/git/refs/tag.py", line 40, in tag
obj = self.object
File "/usr/local/lib/python2.7/dist-packages/git/refs/symbolic.py", line 176, in _get_object
return Object.new_from_sha(self.repo, hex_to_bin(self.dereference_recursive(self.repo, self.path)))
File "/usr/local/lib/python2.7/dist-packages/git/objects/base.py", line 65, in new_from_sha
oinfo = repo.odb.info(sha1)
File "/usr/local/lib/python2.7/dist-packages/git/db.py", line 40, in info
hexsha, typename, size = self._git.get_object_header(bin_to_hex(sha))
File "/usr/local/lib/python2.7/dist-packages/git/cmd.py", line 984, in get_object_header
return self.__get_object_header(cmd, ref)
File "/usr/local/lib/python2.7/dist-packages/git/cmd.py", line 972, in __get_object_header
cmd.stdin.flush()
IOError: [Errno 32] Broken pipe
Some more context: I am using GitPython for experimenter
link and need a way to handle KeyboardInterruption
s. When a Ctrl+C is pressed, I want to be able to safely store data into the git repository.