X-Git-Url: http://git.scottworley.com/git-cache/blobdiff_plain/50c43b5553643d2962bcde3d9ce5d5c78d6e3a0a..2fa3bb5bb8683e2b29cfbea31bf8ecff50a8c25f:/git_cache.py diff --git a/git_cache.py b/git_cache.py index 8171b48..76c0ed4 100644 --- a/git_cache.py +++ b/git_cache.py @@ -79,7 +79,7 @@ def is_ancestor(repo: Repo, descendant: RefOrRev, ancestor: RefOrRev) -> bool: 'merge-base', '--is-ancestor', ancestor, - descendant], + descendant.removeprefix('tag ')], check=False) return process.returncode == 0 @@ -178,9 +178,12 @@ def _git_fetch( repo: Repo, ref: Ref, force: bool = False) -> None: + refargs = (['tag', ref.removeprefix('tag ')] + if ref.startswith('tag ') + else [f'{ref}:{ref}']) subprocess.run(['git', '-C', cachedir, 'fetch'] + (['--force'] if force else []) + - [repo, f'{ref}:{ref}'], check=True) + [repo] + refargs, check=True) def fetch(repo: Repo, ref: Ref, force: bool = False) -> Tuple[Path, Rev]: @@ -201,7 +204,10 @@ def fetch(repo: Repo, ref: Ref, force: bool = False) -> Tuple[Path, Rev]: logging.debug('Fetching ref "%s" from %s', ref, repo) _git_fetch(cachedir, repo, ref, force=force) - with open(os.path.join(cachedir, 'refs', 'heads', ref), encoding='utf-8') as rev_file: + rev_path = (['tags', ref.removeprefix('tag ')] + if ref.startswith('tag ') + else ['heads', ref]) + with open(os.path.join(cachedir, 'refs', *rev_path), encoding='utf-8') as rev_file: rev = Rev(rev_file.read(999).strip()) verify_ancestry(repo, ref, rev, force=force) _log_fetch(repo, ref, rev, force=force)