Skip to content

Support GIT_OBJECT_DIRECTORY environment variable #1000

Description

@acbits

When using GIT_OBJECT_DIRECTORY to store git objects, a statement like
git.Repo('someproject') fails. This is due to is_git_dir() in git/repo/fun.py making an assumption that there will be a objects directory under .git which isn't the case when GIT_OBJECT_DIRECTORY is defined and being used.

A fix like the attached patch should solve the problem, though there might be more fixes needed in other places. This fix alone solves my particular workflow for now.

diff --git a/git/repo/fun.py b/git/repo/fun.py
index 784a70bf3..e3a7bc57a 100644
--- a/git/repo/fun.py
+++ b/git/repo/fun.py
@@ -35,7 +35,8 @@ def is_git_dir(d):
             There is the unlikely danger to throw if we see directories which just look like a worktree dir,
             but are none."""
     if osp.isdir(d):
-        if osp.isdir(osp.join(d, 'objects')) and osp.isdir(osp.join(d, 'refs')):
+        if (osp.isdir(osp.join(d, 'objects')) or os.environ.has_key('GIT_OBJECT_DIRECTORY')) \
+           and osp.isdir(osp.join(d, 'refs')):
             headref = osp.join(d, 'HEAD')
             return osp.isfile(headref) or \
                 (osp.islink(headref) and

Activity

  1. Byron commented on Apr 11, 2020

    @Byron
    Member

    Thanks a lot! You are probably right - the fix won't work in all cases, especially since GitPython has an optional pure-python object database implementation which certainly doesn't pick that up.

    However, I believe it's worth having this fix to improve the situation in the most common case.

    It looks like the patch fails on CI, but due to travis not being accessible from my current location, I don't really see what it is. Will keep you posted.

  2. added this to the v3.1.1 - Bugfixes milestone on Apr 11, 2020
  3. Byron commented on Apr 11, 2020

    @Byron
    Member

    Great, I moved the project to github actions, and now the patch is included.
    Today or tomorrow I will create a new release as well.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions