diff options
author | Ronny Pfannschmidt <opensource@ronnypfannschmidt.de> | 2022-06-19 22:38:24 +0200 |
---|---|---|
committer | Ronny Pfannschmidt <opensource@ronnypfannschmidt.de> | 2022-06-21 12:06:03 +0200 |
commit | 6707c4fde80b222ff9b98e26da4736d0eeb9560d (patch) | |
tree | f81bca60c8661412bc1b223146290302da613fe4 | |
parent | 56a9d52d78d943eacbb200a31d31da2059dd992b (diff) | |
download | setuptools-scm-6707c4fde80b222ff9b98e26da4736d0eeb9560d.tar.gz |
FIXUP: restore hg-git support
-rw-r--r-- | src/setuptools_scm/git.py | 4 | ||||
-rw-r--r-- | src/setuptools_scm/hg_git.py | 43 | ||||
-rw-r--r-- | src/setuptools_scm/version.py | 3 | ||||
-rw-r--r-- | testing/conftest.py | 11 | ||||
-rw-r--r-- | testing/test_hg_git.py | 3 |
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") |