diff options
Diffstat (limited to 'b4/__init__.py')
-rw-r--r-- | b4/__init__.py | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/b4/__init__.py b/b4/__init__.py index 05bd9bb..432a8cd 100644 --- a/b4/__init__.py +++ b/b4/__init__.py @@ -2021,6 +2021,15 @@ def git_temp_worktree(gitdir=None, commitish=None): @contextmanager def git_temp_clone(gitdir=None): """Context manager that creates a temporary shared clone.""" + if gitdir is None: + topdir = git_get_toplevel() + if topdir and os.path.isdir(os.path.join(topdir, '.git')): + gitdir = os.path.join(topdir, '.git') + + if not gitdir: + logger.critical('Current directory is not a git checkout. Try using -g.') + return None + with TemporaryDirectory() as dfn: gitargs = ['clone', '--mirror', '--shared', gitdir, dfn] git_run_command(None, gitargs) @@ -2352,6 +2361,16 @@ def git_branch_contains(gitdir, commit_id): return lines +def git_get_toplevel(path=None): + topdir = None + # Are we in a git tree and if so, what is our toplevel? + gitargs = ['rev-parse', '--show-toplevel'] + lines = git_get_command_lines(path, gitargs) + if len(lines) == 1: + topdir = lines[0] + return topdir + + def format_addrs(pairs): addrs = set() for pair in pairs: |