summaryrefslogtreecommitdiff
path: root/morphlib/gitdir.py
diff options
context:
space:
mode:
authorSam Thursfield <sam.thursfield@codethink.co.uk>2014-11-04 12:56:53 +0000
committerSam Thursfield <sam.thursfield@codethink.co.uk>2014-11-05 13:21:04 +0000
commit509b1985807a308e31bdff595c939503b6d26a40 (patch)
treefb0e6e186ab4acf28d43bd6e3555fe1f2f3a289d /morphlib/gitdir.py
parentac9e6787cd2b82bc37b9ba71d09d44aac71f85b1 (diff)
downloadmorph-509b1985807a308e31bdff595c939503b6d26a40.tar.gz
Only search for repository root in GitDirectory constructor if told to
The GitDirectory() constructor, if passed a 'dirname' that doesn't contain a '.git' subdirectory, can search upwards to find the real root of the repository. This is used by the `add-binary`, `push`, and `pull` commands. This causes very confusing behaviour in the case that 'dirname' points to a directory that should be a Git repository, but isn't, and that directory is a path inside the working tree of another Git repository. Rather than raising an error, in this case the GitDirectory class would perform operations on a different repository to the one the caller expected. This 'search_for_root' behaviour is now opt-in, to avoid confusion.
Diffstat (limited to 'morphlib/gitdir.py')
-rw-r--r--morphlib/gitdir.py19
1 files changed, 13 insertions, 6 deletions
diff --git a/morphlib/gitdir.py b/morphlib/gitdir.py
index 9fef4f1e..a9837030 100644
--- a/morphlib/gitdir.py
+++ b/morphlib/gitdir.py
@@ -352,12 +352,19 @@ class GitDirectory(object):
'''
- def __init__(self, dirname):
- self.dirname = morphlib.util.find_root(dirname, '.git')
- # if we are in a bare repo, self.dirname will now be None
- # so we just use the provided dirname
- if not self.dirname:
- self.dirname = dirname
+ def __init__(self, dirname, search_for_root=False):
+ '''Set up a GitDirectory instance for the repository at 'dirname'.
+
+ If 'search_for_root' is set to True, 'dirname' may point to a
+ subdirectory inside the working tree of repository. Otherwise 'dirname'
+ must be the top directory.
+
+ '''
+
+ if search_for_root:
+ dirname = morphlib.util.find_root(dirname, '.git')
+
+ self.dirname = dirname
self._config = {}
def _runcmd(self, argv, **kwargs):