commit 4294acbe9b0c0436858ad7d852a40ab1ef51313f from: Jelmer Vernooij date: Mon Mar 20 17:58:34 2023 UTC Support init.defaultBranch config option commit - dcec8734567b6d4542b94e00d8d9386d60c1acca commit + 4294acbe9b0c0436858ad7d852a40ab1ef51313f blob - 43ced4d67ba8e0cf0069e523d5112f6b9d8e6d77 blob + 13b839d893f897375de0e9464be3c3b29dadffc0 --- NEWS +++ NEWS @@ -4,6 +4,9 @@ * Fix fetching into MemoryRepo. (Jelmer Vernooij, #1157) + * Support ``init.defaultBranch`` config. + (Jelmer Vernooij) + 0.21.3 2023-02-17 * Add support for ``worktreeconfig`` extension. blob - a0839bdb675fbf5e928aa5ed3675169d4631af0c blob + f16c847baa1bffa22e2dbad42380c885e3745525 --- dulwich/repo.py +++ dulwich/repo.py @@ -85,7 +85,7 @@ BASE_DIRECTORIES = [ ["info"], ] -DEFAULT_REF = b"refs/heads/master" +DEFAULT_BRANCH = b"master" class InvalidUserIdentity(Exception): @@ -1590,18 +1590,28 @@ class Repo(BaseRepo): self._put_named_file("description", description) @classmethod - def _init_maybe_bare(cls, path, controldir, bare, object_store=None): + def _init_maybe_bare( + cls, path, controldir, bare, object_store=None, config=None, + default_branch=None): for d in BASE_DIRECTORIES: os.mkdir(os.path.join(controldir, *d)) if object_store is None: object_store = DiskObjectStore.init(os.path.join(controldir, OBJECTDIR)) ret = cls(path, bare=bare, object_store=object_store) - ret.refs.set_symbolic_ref(b"HEAD", DEFAULT_REF) + if default_branch is None: + if config is None: + from dulwich.config import StackedConfig + config = StackedConfig.default() + try: + default_branch = config.get("init", "defaultBranch") + except KeyError: + default_branch = DEFAULT_BRANCH + ret.refs.set_symbolic_ref(b"HEAD", LOCAL_BRANCH_PREFIX + default_branch) ret._init_files(bare) return ret @classmethod - def init(cls, path: str, mkdir: bool = False) -> "Repo": + def init(cls, path: str, *, mkdir: bool = False, config=None, default_branch=None) -> "Repo": """Create a new repository. Args: @@ -1614,7 +1624,9 @@ class Repo(BaseRepo): controldir = os.path.join(path, CONTROLDIR) os.mkdir(controldir) _set_filesystem_hidden(controldir) - return cls._init_maybe_bare(path, controldir, False) + return cls._init_maybe_bare( + path, controldir, False, config=config, + default_branch=default_branch) @classmethod def _init_new_working_directory(cls, path, main_repo, identifier=None, mkdir=False): @@ -1655,7 +1667,7 @@ class Repo(BaseRepo): return r @classmethod - def init_bare(cls, path, mkdir=False, object_store=None): + def init_bare(cls, path, *, mkdir=False, object_store=None, config=None, default_branch=None): """Create a new bare repository. ``path`` should already exist and be an empty directory. @@ -1666,7 +1678,7 @@ class Repo(BaseRepo): """ if mkdir: os.mkdir(path) - return cls._init_maybe_bare(path, path, True, object_store=object_store) + return cls._init_maybe_bare(path, path, True, object_store=object_store, config=config, default_branch=default_branch) create = init_bare blob - 6a9bbcf54b7d834597c5bda5a22f1446566cfb2c blob + c3f3a9d30ee15719a3dc3f242d33840bebd9727e --- dulwich/tests/__init__.py +++ dulwich/tests/__init__.py @@ -170,15 +170,33 @@ def tutorial_test_suite(): ] tutorial_files = [f"../../docs/tutorial/{name}.txt" for name in tutorial] + to_restore = [] + + def overrideEnv(name, value): + oldval = os.environ.get(name) + if value is not None: + os.environ[name] = value + else: + del os.environ[name] + to_restore.append((name, oldval)) + def setup(test): test.__old_cwd = os.getcwd() test.tempdir = tempfile.mkdtemp() test.globs.update({"tempdir": test.tempdir}) os.chdir(test.tempdir) + overrideEnv("HOME", "/nonexistent") + overrideEnv("GIT_CONFIG_NOSYSTEM", "1") def teardown(test): os.chdir(test.__old_cwd) shutil.rmtree(test.tempdir) + for name, oldval in to_restore: + if oldval is not None: + os.environ[name] = oldval + else: + del os.environ[name] + to_restore.clear() return doctest.DocFileSuite( module_relative=True,