Skip to content

Commit

Permalink
Merge pull request #302 from RonnyPfannschmidt/prepare-3.1.0
Browse files Browse the repository at this point in the history
Prepare 3.1.0
  • Loading branch information
RonnyPfannschmidt authored Aug 9, 2018
2 parents 730aaf4 + a91b40c commit 19e3c8d
Show file tree
Hide file tree
Showing 10 changed files with 67 additions and 32 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ v3.1.0
=======

* fix #297 - correct the invocation in version_from_scm and deprecate it as its exposed by accident
* fix #298 - handle git file listing on empty repositories
* fix #268 - deprecate ScmVersion.extra

v3.0.6
======
Expand Down
5 changes: 3 additions & 2 deletions src/setuptools_scm/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ def _call_entrypoint_fn(config, fn):
warnings.warn(
"parse functions are required to provide a named argument"
" 'config' in the future.",
PendingDeprecationWarning,
category=PendingDeprecationWarning,
stacklevel=2,
)
return fn(config.absolute_root)

Expand Down Expand Up @@ -77,7 +78,7 @@ def _do_parse(config):
if pretended:
# we use meta here since the pretended version
# must adhere to the pep to begin with
return meta(tag=pretended, preformatted=True)
return meta(tag=pretended, preformatted=True, config=config)

if config.parse:
parse_result = _call_entrypoint_fn(config, config.parse)
Expand Down
3 changes: 2 additions & 1 deletion src/setuptools_scm/git.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,14 +108,15 @@ def parse(
dirty = wd.is_dirty()

if rev_node is None:
return meta("0.0", distance=0, dirty=dirty)
return meta("0.0", distance=0, dirty=dirty, config=config)

return meta(
"0.0",
distance=wd.count_all_nodes(),
node="g" + rev_node,
dirty=dirty,
branch=wd.get_branch(),
config=config,
)
else:
tag, number, node, dirty = _git_parse_describe(out)
Expand Down
8 changes: 4 additions & 4 deletions src/setuptools_scm/hacks.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,22 @@
from .version import meta


def parse_pkginfo(root):
def parse_pkginfo(root, config=None):

pkginfo = os.path.join(root, "PKG-INFO")
trace("pkginfo", pkginfo)
data = data_from_mime(pkginfo)
version = data.get("Version")
if version != "UNKNOWN":
return meta(version, preformatted=True)
return meta(version, preformatted=True, config=config)


def parse_pip_egg_info(root):
def parse_pip_egg_info(root, config=None):
pipdir = os.path.join(root, "pip-egg-info")
if not os.path.isdir(pipdir):
return
items = os.listdir(pipdir)
trace("pip-egg-info", pipdir, items)
if not items:
return
return parse_pkginfo(os.path.join(pipdir, items[0]))
return parse_pkginfo(os.path.join(pipdir, items[0]), config=config)
41 changes: 25 additions & 16 deletions src/setuptools_scm/hg.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from .version import meta, tags_to_versions


def _hg_tagdist_normalize_tagcommit(root, tag, dist, node, branch):
def _hg_tagdist_normalize_tagcommit(config, tag, dist, node, branch):
dirty = node.endswith("+")
node = "h" + node.strip("+")

Expand All @@ -19,14 +19,19 @@ def _hg_tagdist_normalize_tagcommit(root, tag, dist, node, branch):
tag=tag
)
if tag != "0.0":
commits = do(["hg", "log", "-r", revset, "--template", "{node|short}"], root)
commits = do(
["hg", "log", "-r", revset, "--template", "{node|short}"],
config.absolute_root,
)
else:
commits = True
trace("normalize", locals())
if commits or dirty:
return meta(tag, distance=dist, node=node, dirty=dirty, branch=branch)
return meta(
tag, distance=dist, node=node, dirty=dirty, branch=branch, config=config
)
else:
return meta(tag)
return meta(tag, config=config)


def parse(root, config=None):
Expand All @@ -40,12 +45,13 @@ def parse(root, config=None):
return
node = identity_data.pop(0)
branch = identity_data.pop(0)
if "tip" in identity_data:
# tip is not a real tag
identity_data.remove("tip")
tags = tags_to_versions(identity_data)
# filter tip in degraded mode on old setuptools
tags = [x for x in tags if x != "tip"]
dirty = node[-1] == "+"
if tags:
return meta(tags[0], dirty=dirty, branch=branch)
return meta(tags[0], dirty=dirty, branch=branch, config=config)

if node.strip("+") == "0" * 12:
trace("initial node", config.absolute_root)
Expand All @@ -57,9 +63,7 @@ def parse(root, config=None):
if tag == "null":
tag = "0.0"
dist = int(dist) + 1
return _hg_tagdist_normalize_tagcommit(
config.absolute_root, tag, dist, node, branch
)
return _hg_tagdist_normalize_tagcommit(config, tag, dist, node, branch)
except ValueError:
pass # unpacking failed, old hg

Expand All @@ -80,20 +84,25 @@ def get_graph_distance(root, rev1, rev2="."):
return len(out.strip().splitlines()) - 1


def archival_to_version(data):
def archival_to_version(data, config=None):
trace("data", data)
node = data.get("node", "")[:12]
if node:
node = "h" + node
if "tag" in data:
return meta(data["tag"])
return meta(data["tag"], config=config)
elif "latesttag" in data:
return meta(data["latesttag"], distance=data["latesttagdistance"], node=node)
return meta(
data["latesttag"],
distance=data["latesttagdistance"],
node=node,
config=config,
)
else:
return meta("0.0", node=node)
return meta("0.0", node=node, config=config)


def parse_archival(root):
def parse_archival(root, config=None):
archival = os.path.join(root, ".hg_archival.txt")
data = data_from_mime(archival)
return archival_to_version(data)
return archival_to_version(data, config=config)
14 changes: 11 additions & 3 deletions src/setuptools_scm/version.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,18 +141,27 @@ def __init__(
self.distance = distance
self.node = node
self.time = datetime.datetime.now()
self.extra = kw
self._extra = kw
self.dirty = dirty
self.preformatted = preformatted
self.branch = branch

@property
def extra(self):
warnings.warn(
"ScmVersion.extra is deprecated and will be removed in future",
category=DeprecationWarning,
stacklevel=2,
)
return self._extra

@property
def exact(self):
return self.distance is None

def __repr__(self):
return self.format_with(
"<ScmVersion {tag} d={distance}" " n={node} d={dirty} b={branch} x={extra}>"
"<ScmVersion {tag} d={distance} n={node} d={dirty} b={branch}>"
)

def format_with(self, fmt, **kw):
Expand All @@ -162,7 +171,6 @@ def format_with(self, fmt, **kw):
distance=self.distance,
node=self.node,
dirty=self.dirty,
extra=self.extra,
branch=self.branch,
**kw
)
Expand Down
5 changes: 4 additions & 1 deletion testing/test_git.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,10 @@ def test_version_from_git(wd):

wd.commit_testfile()
wd("git tag version-0.2.post210+gbe48adfpost3+g0cc25f2")
assert wd.version.startswith("0.2")
with pytest.warns(
UserWarning, match="tag '.*' will be stripped of its suffix '.*'"
):
assert wd.version.startswith("0.2")

wd.commit_testfile()
wd("git tag 17.33.0-rc")
Expand Down
5 changes: 3 additions & 2 deletions testing/test_mercurial.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from setuptools_scm import format_version
from setuptools_scm.hg import archival_to_version, parse
from setuptools_scm import integration

from setuptools_scm.config import Configuration
import pytest


Expand All @@ -26,7 +26,8 @@ def wd(wd):

@pytest.mark.parametrize("expected,data", sorted(archival_mapping.items()))
def test_archival_to_version(expected, data):
version = archival_to_version(data)
config = Configuration()
version = archival_to_version(data, config=config)
assert (
format_version(
version, version_scheme="guess-next-dev", local_scheme="node-and-date"
Expand Down
13 changes: 10 additions & 3 deletions testing/test_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,20 @@ def test_next_semver(version, expected_next):
],
)
def test_tag_regex1(tag, expected):
Configuration().tag_regex = r"^(?P<prefix>v)?(?P<version>[^\+]+)(?P<suffix>.*)?$"
result = meta(tag)
config = Configuration()
config.tag_regex = r"^(?P<prefix>v)?(?P<version>[^\+]+)(?P<suffix>.*)?$"
if "+" in tag:
# pytest bug wrt cardinality
with pytest.warns(UserWarning):
result = meta(tag, config=config)
else:
result = meta(tag, config=config)

assert result.tag.public == expected


@pytest.mark.issue("https://github.com/pypa/setuptools_scm/issues/286")
def test_tags_to_versions():
config = Configuration()
versions = tags_to_versions(["1", "2", "3"], config=config)
versions = tags_to_versions(["1.0", "2.0", "3.0"], config=config)
assert isinstance(versions, list) # enable subscription
3 changes: 3 additions & 0 deletions tox.ini
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
[tox]
envlist=py{27,34,35,36,37}-test,flake8,check_readme,py{27,36}-selfcheck

[pytest]
filterwarnings=error

[flake8]
max-complexity = 10
max-line-length = 88
Expand Down

0 comments on commit 19e3c8d

Please sign in to comment.