← Back to team overview

dulwich-users team mailing list archive

Re: [PATCH] repo: fix error in repo.init{, _bare} where all repositories were marked bare

 

Bah, forgot --plain. Resending with that now.

On Dec 5, 2010, at 9:11 AM, Augie Fackler wrote:

> # 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):
> 
> _______________________________________________
> Mailing list: https://launchpad.net/~dulwich-users
> Post to     : dulwich-users@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~dulwich-users
> More help   : https://help.launchpad.net/ListHelp




References