You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
import git fails when current working directory doesn't exist #1319
Traceback (most recent call last):
File "/home/me/.virtualenvs/default/lib/python3.8/site-packages/git/__init__.py", line 87, in <module>
refresh()
File "/home/me/.virtualenvs/default/lib/python3.8/site-packages/git/__init__.py", line 76, in refresh
if not Git.refresh(path=path):
File "/home/me/.virtualenvs/default/lib/python3.8/site-packages/git/cmd.py", line 243, in refresh
cls().version()
File "/home/me/.virtualenvs/default/lib/python3.8/site-packages/git/cmd.py", line 585, in <lambda>
return lambda *args, **kwargs: self._call_process(name, *args, **kwargs)
File "/home/me/.virtualenvs/default/lib/python3.8/site-packages/git/cmd.py", line 1124, in _call_process
return self.execute(call, **exec_kwargs)
File "/home/me/.virtualenvs/default/lib/python3.8/site-packages/git/cmd.py", line 782, in execute
cwd = self._working_dir or os.getcwd()
FileNotFoundError: [Errno 2] No such file or directory
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/home/me/.virtualenvs/default/lib/python3.8/site-packages/git/__init__.py", line 89, in <module>
raise ImportError('Failed to initialize: {0}'.format(exc)) from exc
ImportError: Failed to initialize: [Errno 2] No such file or directory
In general os.getcwd() needs to guarded against FileNotFoundError because of the possibility that there is no valid working directory.
GitPython version: 3.1.18
This is certainly not a big issue, but it can be very confusing, and there is (probabaly) not theoretical reason why GitPython cannot work in this case.
Thanks for the report. I understand that it's probably a bit strange that it needs the CWD to just be imported.
AFAIK it tries to get the git version string while initializing some global state. Maybe that could be done lazily instead to avoid this issue.
Yes lazily would probably be the most elegant solution, because it is in the Python-best-practices-spirit of not executing anything that can throw at import time.
If you want a quick-and-dirty solution though, it should also be sufficient to replace
This should work, because cwd is only used in subprocess.Popen and passing cwd=None would be fine. If running other git commands than version that actually require a cwd, git would error anyway because of the "broken" working directory.
Thanks a lot for the suggestion. Since it was added as is I assume this particular issue will be resolved. Maybe there are other stumbling blocks though, and if so please feel free to post here so the issue can be reopened.
Activity
Byron commentedon Aug 11, 2021
Thanks for the report. I understand that it's probably a bit strange that it needs the CWD to just be imported.
AFAIK it tries to get the git version string while initializing some global state. Maybe that could be done lazily instead to avoid this issue.
bluenote10 commentedon Aug 11, 2021
Yes lazily would probably be the most elegant solution, because it is in the Python-best-practices-spirit of not executing anything that can throw at import time.
If you want a quick-and-dirty solution though, it should also be sufficient to replace
GitPython/git/cmd.py
Line 784 in ea1a03a
with
This should work, because
cwdis only used insubprocess.Popenand passingcwd=Nonewould be fine. If running other git commands thanversionthat actually require acwd, git would error anyway because of the "broken" working directory.Don't fail on import if the working dir isn't valid (#1319)
Don't fail on import if the working dir isn't valid (#1319)
Byron commentedon Aug 11, 2021
Thanks a lot for the suggestion. Since it was added as is I assume this particular issue will be resolved. Maybe there are other stumbling blocks though, and if so please feel free to post here so the issue can be reopened.