diff --git a/scmrepo/git/backend/pygit2.py b/scmrepo/git/backend/pygit2.py index d95e338b..6849d575 100644 --- a/scmrepo/git/backend/pygit2.py +++ b/scmrepo/git/backend/pygit2.py @@ -317,9 +317,17 @@ def set_ref( ) def get_ref(self, name, follow: bool = True) -> Optional[str]: - from pygit2 import GIT_OBJ_COMMIT, GIT_REF_SYMBOLIC, Tag + from pygit2 import ( + GIT_OBJ_COMMIT, + GIT_REF_SYMBOLIC, + InvalidSpecError, + Tag, + ) - ref = self.repo.references.get(name) + try: + ref = self.repo.references.get(name) + except InvalidSpecError: + return None if not ref: return None if follow and ref.type == GIT_REF_SYMBOLIC: diff --git a/tests/test_git.py b/tests/test_git.py index cc1655be..34ef7e58 100644 --- a/tests/test_git.py +++ b/tests/test_git.py @@ -571,6 +571,7 @@ def test_resolve_rev( assert git.resolve_rev("refs/foo") == rev assert git.resolve_rev("bar") == rev assert git.resolve_rev("origin/baz") == rev + assert git.resolve_rev("HEAD~1") == init_rev with pytest.raises(RevError): git.resolve_rev("qux") @@ -578,6 +579,9 @@ def test_resolve_rev( with pytest.raises(RevError): git.resolve_rev("baz") + with pytest.raises(RevError): + git.resolve_rev("HEAD~3") + @pytest.mark.skip_git_backend("dulwich") def test_checkout(tmp_dir: TmpDir, scm: Git, git: Git):