dulwich-users team mailing list archive
-
dulwich-users team
-
Mailing list archive
-
Message #00312
[PATCH] repo: fix error in repo.init{, _bare} where all repositories were marked bare
# HG changeset patch
# User Augie Fackler <durin42@xxxxxxxxx>
# Date 1290987945 -21600
# Node ID 93fdf6e95f5115e811d3d15fdce9f3730c1c2e84
# Parent 1acb5f1c39c3873890372f9f76d873d35f576002
repo: fix error in repo.init{,_bare} where all repositories were marked bare
Includes simple tests to verify bare = (true|false) in .git/config is
correct.
Change-Id: I607d16ae845c61eb1d3de4753dd810476735b5f1
diff --git a/dulwich/repo.py b/dulwich/repo.py
--- a/dulwich/repo.py
+++ b/dulwich/repo.py
@@ -763,13 +763,13 @@
self.object_store = object_store
self.refs = refs
- def _init_files(self):
+ def _init_files(self, bare):
"""Initialize a default set of named files."""
self._put_named_file('description', "Unnamed repository")
self._put_named_file('config', ('[core]\n'
'repositoryformatversion = 0\n'
'filemode = true\n'
- 'bare = ' + str(self.bare).lower() + '\n'
+ 'bare = ' + str(bare).lower() + '\n'
'logallrefupdates = true\n'))
self._put_named_file(os.path.join('info', 'exclude'), '')
@@ -1187,23 +1187,27 @@
return "<Repo at %r>" % self.path
@classmethod
+ def _init_maybe_bare(cls, path, bare):
+ for d in BASE_DIRECTORIES:
+ os.mkdir(os.path.join(path, *d))
+ DiskObjectStore.init(os.path.join(path, OBJECTDIR))
+ ret = cls(path)
+ ret.refs.set_symbolic_ref("HEAD", "refs/heads/master")
+ ret._init_files(bare)
+ return ret
+
+ @classmethod
def init(cls, path, mkdir=False):
if mkdir:
os.mkdir(path)
controldir = os.path.join(path, ".git")
os.mkdir(controldir)
- cls.init_bare(controldir)
+ cls._init_maybe_bare(controldir, False)
return cls(path)
@classmethod
def init_bare(cls, path):
- for d in BASE_DIRECTORIES:
- os.mkdir(os.path.join(path, *d))
- DiskObjectStore.init(os.path.join(path, OBJECTDIR))
- ret = cls(path)
- ret.refs.set_symbolic_ref("HEAD", "refs/heads/master")
- ret._init_files()
- return ret
+ return cls._init_maybe_bare(path, True)
create = init_bare
@@ -1254,5 +1258,5 @@
ret.object_store.add_object(obj)
for refname, sha in refs.iteritems():
ret.refs[refname] = sha
- ret._init_files()
+ ret._init_files(True)
return ret
diff --git a/dulwich/tests/test_repository.py b/dulwich/tests/test_repository.py
--- a/dulwich/tests/test_repository.py
+++ b/dulwich/tests/test_repository.py
@@ -66,24 +66,35 @@
finally:
f.close()
- def _check_repo_contents(self, repo):
- self.assertTrue(repo.bare)
+ def _check_repo_contents(self, repo, expect_bare):
+ self.assertEquals(expect_bare, repo.bare)
self.assertFileContentsEqual('Unnamed repository', repo, 'description')
self.assertFileContentsEqual('', repo, os.path.join('info', 'exclude'))
self.assertFileContentsEqual(None, repo, 'nonexistent file')
+ barestr = 'bare = %s' % str(expect_bare).lower()
+ self.assertTrue(barestr in repo.get_named_file('config').read())
- def test_create_disk(self):
+ def test_create_disk_bare(self):
tmp_dir = tempfile.mkdtemp()
try:
repo = Repo.init_bare(tmp_dir)
self.assertEquals(tmp_dir, repo._controldir)
- self._check_repo_contents(repo)
+ self._check_repo_contents(repo, True)
+ finally:
+ shutil.rmtree(tmp_dir)
+
+ def test_create_disk_non_bare(self):
+ tmp_dir = tempfile.mkdtemp()
+ try:
+ repo = Repo.init(tmp_dir)
+ self.assertEquals(os.path.join(tmp_dir, '.git'), repo._controldir)
+ self._check_repo_contents(repo, False)
finally:
shutil.rmtree(tmp_dir)
def test_create_memory(self):
repo = MemoryRepo.init_bare([], {})
- self._check_repo_contents(repo)
+ self._check_repo_contents(repo, True)
class RepositoryTests(TestCase):
Follow ups
References