commit - dcec8734567b6d4542b94e00d8d9386d60c1acca
commit + 4294acbe9b0c0436858ad7d852a40ab1ef51313f
blob - 43ced4d67ba8e0cf0069e523d5112f6b9d8e6d77
blob + 13b839d893f897375de0e9464be3c3b29dadffc0
--- NEWS
+++ NEWS
* 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
["info"],
]
-DEFAULT_REF = b"refs/heads/master"
+DEFAULT_BRANCH = b"master"
class InvalidUserIdentity(Exception):
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:
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):
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.
"""
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
]
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,