summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonny Pfannschmidt <opensource@ronnypfannschmidt.de>2022-06-19 22:38:24 +0200
committerRonny Pfannschmidt <opensource@ronnypfannschmidt.de>2022-06-21 12:06:03 +0200
commit6707c4fde80b222ff9b98e26da4736d0eeb9560d (patch)
treef81bca60c8661412bc1b223146290302da613fe4
parent56a9d52d78d943eacbb200a31d31da2059dd992b (diff)
downloadsetuptools-scm-6707c4fde80b222ff9b98e26da4736d0eeb9560d.tar.gz
FIXUP: restore hg-git support
-rw-r--r--src/setuptools_scm/git.py4
-rw-r--r--src/setuptools_scm/hg_git.py43
-rw-r--r--src/setuptools_scm/version.py3
-rw-r--r--testing/conftest.py11
-rw-r--r--testing/test_hg_git.py3
5 files changed, 34 insertions, 30 deletions
diff --git a/src/setuptools_scm/git.py b/src/setuptools_scm/git.py
index e417be0..18a9de3 100644
--- a/src/setuptools_scm/git.py
+++ b/src/setuptools_scm/git.py
@@ -74,10 +74,10 @@ class GitWorkdir(Workdir):
return bool(out)
def get_branch(self) -> str | None:
- branch, err, ret = self.do_ex("git rev-parse --abbrev-ref HEAD")
+ branch, err, ret = self.do_ex("git rev-parse --abbrev-ref HEAD --")
if ret:
trace("branch err", branch, err, ret)
- branch, err, ret = self.do_ex("git symbolic-ref --short HEAD")
+ branch, err, ret = self.do_ex("git symbolic-ref --short HEAD --")
if ret:
trace("branch err (symbolic-ref)", branch, err, ret)
return None
diff --git a/src/setuptools_scm/hg_git.py b/src/setuptools_scm/hg_git.py
index 28c5a36..3f860e9 100644
--- a/src/setuptools_scm/hg_git.py
+++ b/src/setuptools_scm/hg_git.py
@@ -1,6 +1,7 @@
from __future__ import annotations
import os
+from contextlib import suppress
from datetime import date
from datetime import datetime
@@ -21,7 +22,7 @@ class GitWorkdirHgClient(GitWorkdir, HgWorkdir):
@classmethod
def from_potential_worktree(cls, wd: _t.PathT) -> GitWorkdirHgClient | None:
require_command(cls.COMMAND)
- root, _, ret = do_ex("hg root", wd)
+ root, _, ret = do_ex(["hg", "root"], wd)
if ret:
return None
return cls(root)
@@ -58,13 +59,13 @@ class GitWorkdirHgClient(GitWorkdir, HgWorkdir):
return None
def _hg2git(self, hg_node: str) -> str | None:
- git_node = None
- with open(os.path.join(self.path, ".hg/git-mapfile")) as file:
- for line in file:
- if hg_node in line:
- git_node, hg_node = line.split()
- break
- return git_node
+ with suppress(FileNotFoundError):
+ with open(os.path.join(self.path, ".hg/git-mapfile")) as map_items:
+ for item in map_items:
+ if hg_node in item:
+ git_node, hg_node = item.split()
+ return git_node
+ return None
def node(self) -> str | None:
hg_node = self.get_hg_node()
@@ -90,7 +91,7 @@ class GitWorkdirHgClient(GitWorkdir, HgWorkdir):
return git_node[:7]
def count_all_nodes(self) -> int:
- revs, _, _ = self.do_ex("hg log -r 'ancestors(.)' -T '.'")
+ revs, _, _ = self.do_ex(["hg", "log", "-r", "ancestors(.)", "-T", "."])
return len(revs)
def default_describe(self) -> _t.CmdResult:
@@ -105,30 +106,28 @@ class GitWorkdirHgClient(GitWorkdir, HgWorkdir):
"hg",
"log",
"-r",
- "(reverse(ancestors(.)) and tag(r're:[0-9]'))",
+ "(reverse(ancestors(.)) and tag(r're:v?[0-9].*'))",
"-T",
"{tags}{if(tags, ' ', '')}",
]
)
if ret:
return _FAKE_GIT_DESCRIBE_ERROR
- hg_tags: set[str] = set(hg_tags_str.split())
+ hg_tags: list[str] = hg_tags_str.split()
if not hg_tags:
return _FAKE_GIT_DESCRIBE_ERROR
- node: str | None = None
-
with open(os.path.join(self.path, ".hg/git-tags")) as fp:
+ git_tags: dict[str, str] = dict(line.split()[::-1] for line in fp)
- git_tags: dict[str, str] = dict(line.split() for line in fp)
-
- tag: str | None = next(
- # find the first hg tag which is also a git tag
- (tag for tag in hg_tags if tag in git_tags),
- None,
- )
- if tag is None:
+ tag: str
+ for hg_tag in hg_tags:
+ if hg_tag in git_tags:
+ tag = hg_tag
+ break
+ else:
+ trace("tag not found", hg_tags, git_tags)
return _FAKE_GIT_DESCRIBE_ERROR
out, _, ret = self.do_ex(["hg", "log", "-r", f"'{tag}'::.", "-T", "."])
@@ -142,5 +141,5 @@ class GitWorkdirHgClient(GitWorkdir, HgWorkdir):
if self.is_dirty():
desc += "-dirty"
-
+ trace("desc", desc)
return _t.CmdResult(desc, "", 0)
diff --git a/src/setuptools_scm/version.py b/src/setuptools_scm/version.py
index 2086b45..528171f 100644
--- a/src/setuptools_scm/version.py
+++ b/src/setuptools_scm/version.py
@@ -162,7 +162,8 @@ class ScmVersion:
def __repr__(self) -> str:
return self.format_with(
- "<ScmVersion {tag} d={distance} n={node} d={dirty} b={branch}>"
+ "<ScmVersion {tag} dist={distance} "
+ "node={node} dirty={dirty} branch={branch}>"
)
def format_with(self, fmt: str, **kw: object) -> str:
diff --git a/testing/conftest.py b/testing/conftest.py
index 89f124d..c881042 100644
--- a/testing/conftest.py
+++ b/testing/conftest.py
@@ -10,10 +10,13 @@ import pytest
from .wd_wrapper import WorkDir
-# 2009-02-13T23:31:30+00:00
-os.environ["SOURCE_DATE_EPOCH"] = "1234567890"
-os.environ["SETUPTOOLS_SCM_DEBUG"] = "1"
-VERSION_PKGS = ["setuptools", "setuptools_scm"]
+def pytest_configure() -> None:
+ # 2009-02-13T23:31:30+00:00
+ os.environ["SOURCE_DATE_EPOCH"] = "1234567890"
+ os.environ["SETUPTOOLS_SCM_DEBUG"] = "1"
+
+
+VERSION_PKGS = ["setuptools", "setuptools_scm", "packaging"]
def pytest_report_header() -> list[str]:
diff --git a/testing/test_hg_git.py b/testing/test_hg_git.py
index cf64bbe..476016f 100644
--- a/testing/test_hg_git.py
+++ b/testing/test_hg_git.py
@@ -30,9 +30,10 @@ def test_base(repositories_hg_git: tuple[WorkDir, WorkDir]) -> None:
assert wd.version == "0.1.dev0"
wd_git.commit_testfile()
+ version_git = wd_git.version
+
wd("hg pull -u")
- version_git = wd_git.version
version = wd.version
assert version_git.startswith("0.1.dev1+g")