Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 16 additions & 1 deletion scmrepo/git/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ def add_commit(
_stash_push = partialmethod(_backend_func, "_stash_push")
_stash_apply = partialmethod(_backend_func, "_stash_apply")
_stash_drop = partialmethod(_backend_func, "_stash_drop")
describe = partialmethod(_backend_func, "describe")
_describe = partialmethod(_backend_func, "_describe")
diff = partialmethod(_backend_func, "diff")
reset = partialmethod(_backend_func, "reset")
checkout_index = partialmethod(_backend_func, "checkout_index")
Expand Down Expand Up @@ -397,3 +397,18 @@ def stash_workspace(self, **kwargs):

def _reset(self) -> None:
self.backends.reset_all()

def describe(
self,
rev: str,
base: Optional[str] = None,
match: Optional[str] = None,
exclude: Optional[str] = None,
) -> Optional[str]:
if (
base == "refs/heads"
and self.get_rev() == rev
and self.get_ref("HEAD", follow=False).startswith(base)
):
return self.get_ref("HEAD", follow=False)
return self._describe(rev, base, match, exclude)
2 changes: 1 addition & 1 deletion scmrepo/git/backend/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,7 @@ def _stash_drop(self, ref: str, index: int):
"""Drop the specified stash revision."""

@abstractmethod
def describe(
def _describe(
self,
rev: str,
base: Optional[str] = None,
Expand Down
2 changes: 1 addition & 1 deletion scmrepo/git/backend/dulwich/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -590,7 +590,7 @@ def _stash_drop(self, ref: str, index: int):
except ValueError as exc:
raise SCMError("Failed to drop stash entry") from exc

def describe(
def _describe(
self,
rev: str,
base: Optional[str] = None,
Expand Down
2 changes: 1 addition & 1 deletion scmrepo/git/backend/gitpython.py
Original file line number Diff line number Diff line change
Expand Up @@ -552,7 +552,7 @@ def _stash_drop(self, ref: str, index: int):
except GitCommandError:
self.remove_ref(ref)

def describe(
def _describe(
self,
rev: str,
base: Optional[str] = None,
Expand Down
2 changes: 1 addition & 1 deletion scmrepo/git/backend/pygit2.py
Original file line number Diff line number Diff line change
Expand Up @@ -459,7 +459,7 @@ def _stash_drop(self, ref: str, index: int):

self.repo.stash_drop(index)

def describe(
def _describe(
self,
rev: str,
base: Optional[str] = None,
Expand Down
27 changes: 27 additions & 0 deletions tests/test_git.py
Original file line number Diff line number Diff line change
Expand Up @@ -607,3 +607,30 @@ def test_checkout_subdir(tmp_dir: TmpDir, scm: Git, git: Git):
with (tmp_dir / "dir").chdir():
git.checkout(rev)
assert not (tmp_dir / "dir" / "bar").exists()


@pytest.mark.skip_git_backend("pygit2", "gitpython")
def test_describe(tmp_dir: TmpDir, scm: Git, git: Git):
tmp_dir.gen({"foo": "foo"})
scm.add_commit("foo", message="foo")
rev_foo = scm.get_rev()

tmp_dir.gen({"foo": "bar"})
scm.add_commit("foo", message="bar")
rev_bar = scm.get_rev()

assert git.describe(rev_foo, "refs/heads") is None

scm.checkout("branch", create_new=True)
assert git.describe(rev_bar, "refs/heads") == "refs/heads/branch"

tmp_dir.gen({"foo": "foobar"})
scm.add_commit("foo", message="foobar")
rev_foobar = scm.get_rev()

scm.checkout("master")
assert git.describe(rev_bar, "refs/heads") == "refs/heads/master"
assert git.describe(rev_foobar, "refs/heads") == "refs/heads/branch"

scm.tag("tag")
assert git.describe(rev_bar) == "refs/tags/tag"