Hello community, here is the log from the commit of package python-setuptools_scm for openSUSE:Factory checked in at 2018-04-22 14:29:41 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-setuptools_scm (Old) and /work/SRC/openSUSE:Factory/.python-setuptools_scm.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-setuptools_scm" Sun Apr 22 14:29:41 2018 rev:13 rq:596488 version:2.0.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-setuptools_scm/python-setuptools_scm.changes 2018-03-29 11:48:15.834265812 +0200 +++ /work/SRC/openSUSE:Factory/.python-setuptools_scm.new/python-setuptools_scm.changes 2018-04-22 14:29:44.054476229 +0200 @@ -1,0 +2,13 @@ +Thu Apr 12 20:42:08 UTC 2018 - a...@gmx.de + +- update to version 2.0.0: + * fix #237 - correct imports in code examples + * improve mercurial commit detection (thanks Aaron) + * breaking change: remove support for setuptools before parsed + versions + * reintroduce manifest as the travis deploy cant use the file finder + * reconfigure flake8 for future compatibility with black + * introduce support for branch name in version metadata and support + a opt-in simplified semver version scheme + +------------------------------------------------------------------- Old: ---- setuptools_scm-1.17.0.tar.gz New: ---- setuptools_scm-2.0.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-setuptools_scm.spec ++++++ --- /var/tmp/diff_new_pack.HeMBwv/_old 2018-04-22 14:29:44.630455382 +0200 +++ /var/tmp/diff_new_pack.HeMBwv/_new 2018-04-22 14:29:44.634455237 +0200 @@ -16,10 +16,10 @@ # -%bcond_with test %{?!python_module:%define python_module() python-%{**} python3-%{**}} +%bcond_with test Name: python-setuptools_scm -Version: 1.17.0 +Version: 2.0.0 Release: 0 Summary: Manage your versions by scm tags License: MIT @@ -29,20 +29,18 @@ BuildRequires: %{python_module devel} BuildRequires: %{python_module setuptools} BuildRequires: python-rpm-macros +Requires: python-setuptools +BuildArch: noarch %if %{with test} # Testing requirements BuildRequires: %{python_module pytest} BuildRequires: git BuildRequires: mercurial %endif -Requires: python-setuptools %if 0%{?suse_version} >= 1000 || 0%{?fedora_version} >= 24 Recommends: git Recommends: mecurial %endif -BuildRoot: %{_tmppath}/%{name}-%{version}-build -BuildArch: noarch - %python_subpackages %description @@ -63,9 +61,9 @@ %python_expand PYTHONPATH=%{buildroot}%{$python_sitelib} py.test-%{$python_bin_suffix} %endif -%files %python_files -%defattr(-,root,root,-) -%doc README.rst LICENSE CHANGELOG.rst +%files %{python_files} +%license LICENSE +%doc README.rst CHANGELOG.rst %{python_sitelib}/* %changelog ++++++ setuptools_scm-1.17.0.tar.gz -> setuptools_scm-2.0.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.17.0/.gitignore new/setuptools_scm-2.0.0/.gitignore --- old/setuptools_scm-1.17.0/.gitignore 2018-03-20 11:15:19.000000000 +0100 +++ new/setuptools_scm-2.0.0/.gitignore 2018-04-10 10:27:36.000000000 +0200 @@ -37,6 +37,7 @@ .coverage .coverage.* .cache +.pytest_cache nosetests.xml coverage.xml *,cover diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.17.0/CHANGELOG.rst new/setuptools_scm-2.0.0/CHANGELOG.rst --- old/setuptools_scm-1.17.0/CHANGELOG.rst 2018-03-20 11:15:19.000000000 +0100 +++ new/setuptools_scm-2.0.0/CHANGELOG.rst 2018-04-10 10:27:36.000000000 +0200 @@ -1,3 +1,13 @@ +v2.0.0 +======== + +* fix #237 - correct imports in code examples +* improve mercurial commit detection (thanks Aaron) +* breaking change: remove support for setuptools before parsed versions +* reintroduce manifest as the travis deploy cant use the file finder +* reconfigure flake8 for future compatibility with black +* introduce support for branch name in version metadata and support a opt-in simplified semver version scheme + v1.17.0 ======== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.17.0/MANIFEST.in new/setuptools_scm-2.0.0/MANIFEST.in --- old/setuptools_scm-1.17.0/MANIFEST.in 1970-01-01 01:00:00.000000000 +0100 +++ new/setuptools_scm-2.0.0/MANIFEST.in 2018-04-10 10:27:36.000000000 +0200 @@ -0,0 +1,8 @@ +exclude *.nix +exclude appveyor.yml +exclude .travis.yaml +include *.py +include testing/*.py +include tox.ini +include *.rst +include LICENSE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.17.0/PKG-INFO new/setuptools_scm-2.0.0/PKG-INFO --- old/setuptools_scm-1.17.0/PKG-INFO 2018-03-20 11:15:44.000000000 +0100 +++ new/setuptools_scm-2.0.0/PKG-INFO 2018-04-10 10:28:15.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.2 Name: setuptools_scm -Version: 1.17.0 +Version: 2.0.0 Summary: the blessed package to manage your versions by scm tags Home-page: https://github.com/pypa/setuptools_scm/ Author: Ronny Pfannschmidt @@ -293,9 +293,9 @@ .. code:: python def myversion(): - from setuptools_scm.version import dirty_tag + from setuptools_scm.version import get_local_dirty_tag def clean_scheme(version): - return dirty_tag(version) if version.dirty else '+clean' + return get_local_dirty_tag(version) if version.dirty else '+clean' return {'local_scheme': clean_scheme} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.17.0/README.rst new/setuptools_scm-2.0.0/README.rst --- old/setuptools_scm-1.17.0/README.rst 2018-03-20 11:15:19.000000000 +0100 +++ new/setuptools_scm-2.0.0/README.rst 2018-04-10 10:27:36.000000000 +0200 @@ -285,9 +285,9 @@ .. code:: python def myversion(): - from setuptools_scm.version import dirty_tag + from setuptools_scm.version import get_local_dirty_tag def clean_scheme(version): - return dirty_tag(version) if version.dirty else '+clean' + return get_local_dirty_tag(version) if version.dirty else '+clean' return {'local_scheme': clean_scheme} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.17.0/appveyor.yml new/setuptools_scm-2.0.0/appveyor.yml --- old/setuptools_scm-1.17.0/appveyor.yml 2018-03-20 11:15:19.000000000 +0100 +++ new/setuptools_scm-2.0.0/appveyor.yml 1970-01-01 01:00:00.000000000 +0100 @@ -1,45 +0,0 @@ -environment: - matrix: - - PYTHON: "C:\\Python27" - TOX_ENV: "py-test" - - - PYTHON: "C:\\Python27-x64" - TOX_ENV: "py-test" - - - PYTHON: "C:\\Python34" - TOX_ENV: "py-test" - - - PYTHON: "C:\\Python34-x64" - TOX_ENV: "py-test" - -init: - - "SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%" - - - ECHO "Updating Environment" - - python -m pip install -U setuptools - - python -m pip install -U pip - - python -m pip install -U wheel - - python -m pip install -U tox - - -install: - # Check that we have the expected version and architecture for Python - - python -c "import sys, os;sys.stdout.write(str(sys.version) + os.linesep)" - - "python -c \"import struct; print(struct.calcsize('P') * 8)\"" - - python -m pip list - -build: false # Not a C# project, build stuff at the test step instead. - -test_script: - # Build the compiled extension and run the project tests - - python -m tox -e %TOX_ENV%" - -after_test: - # If tests are successful, create a whl package for the project. - - "%CMD_IN_ENV% python setup.py bdist_wheel" - - ps: "ls dist" - -artifacts: - # Archive the generated wheel package in the ci.appveyor.com build report. - - path: dist\* - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.17.0/default.nix new/setuptools_scm-2.0.0/default.nix --- old/setuptools_scm-1.17.0/default.nix 2018-03-20 11:15:19.000000000 +0100 +++ new/setuptools_scm-2.0.0/default.nix 1970-01-01 01:00:00.000000000 +0100 @@ -1,15 +0,0 @@ -{pkgs ? import <nixpkgs> {}}: -with pkgs.pythonPackages; -buildPythonPackage { - name = "setuptools_scm"; - src = ./.; - version = "git"; - buildInputs = [ - setuptools - pip - pytest - pkgs.git - pkgs.mercurial - ]; -} - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.17.0/setup.py new/setuptools_scm-2.0.0/setup.py --- old/setuptools_scm-1.17.0/setup.py 2018-03-20 11:15:19.000000000 +0100 +++ new/setuptools_scm-2.0.0/setup.py 2018-04-10 10:27:36.000000000 +0200 @@ -87,6 +87,7 @@ [setuptools_scm.version_scheme] guess-next-dev = setuptools_scm.version:guess_next_dev_version post-release = setuptools_scm.version:postrelease_version + python-simplified-semver = setuptools_scm.version:simplified_semver_version [setuptools_scm.local_scheme] node-and-date = setuptools_scm.version:get_local_node_and_date diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.17.0/setuptools_scm/__main__.py new/setuptools_scm-2.0.0/setuptools_scm/__main__.py --- old/setuptools_scm-1.17.0/setuptools_scm/__main__.py 2018-03-20 11:15:19.000000000 +0100 +++ new/setuptools_scm-2.0.0/setuptools_scm/__main__.py 2018-04-10 10:27:36.000000000 +0200 @@ -4,9 +4,14 @@ from setuptools_scm.integration import find_files from setuptools_scm.version import _warn_if_setuptools_outdated -if __name__ == '__main__': + +def main(): _warn_if_setuptools_outdated() print('Guessed Version', get_version()) if 'ls' in sys.argv: for fname in find_files('.'): print(fname) + + +if __name__ == '__main__': + main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.17.0/setuptools_scm/git.py new/setuptools_scm-2.0.0/setuptools_scm/git.py --- old/setuptools_scm-1.17.0/setuptools_scm/git.py 2018-03-20 11:15:19.000000000 +0100 +++ new/setuptools_scm-2.0.0/setuptools_scm/git.py 2018-04-10 10:27:36.000000000 +0200 @@ -39,6 +39,13 @@ out, _, _ = self.do_ex("git status --porcelain --untracked-files=no") return bool(out) + def get_branch(self): + branch, err, ret = self.do_ex("git rev-parse --abbrev-ref HEAD") + if ret: + trace("branch err", branch, err, ret) + return + return branch + def is_shallow(self): return isfile(join(self.path, '.git/shallow')) @@ -89,7 +96,7 @@ if pre_parse: pre_parse(wd) - out, err, ret = do_ex(describe_command, root) + out, err, ret = wd.do_ex(describe_command) if ret: # If 'git describe' failed, try to get the information otherwise. rev_node = wd.node() @@ -103,6 +110,7 @@ distance=wd.count_all_nodes(), node='g' + rev_node, dirty=dirty, + branch=wd.get_branch(), ) # 'out' looks e.g. like 'v1.5.0-0-g4060507' or @@ -115,10 +123,11 @@ tag, number, node = out.rsplit('-', 2) number = int(number) + branch = wd.get_branch() if number: - return meta(tag, distance=number, node=node, dirty=dirty) + return meta(tag, distance=number, node=node, dirty=dirty, branch=branch) else: - return meta(tag, node=node, dirty=dirty) + return meta(tag, node=node, dirty=dirty, branch=branch) def list_files_in_archive(path): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.17.0/setuptools_scm/hg.py new/setuptools_scm-2.0.0/setuptools_scm/hg.py --- old/setuptools_scm-1.17.0/setuptools_scm/hg.py 2018-03-20 11:15:19.000000000 +0100 +++ new/setuptools_scm-2.0.0/setuptools_scm/hg.py 2018-04-10 10:27:36.000000000 +0200 @@ -5,7 +5,7 @@ FILES_COMMAND = 'hg locate -I .' -def _hg_tagdist_normalize_tagcommit(root, tag, dist, node): +def _hg_tagdist_normalize_tagcommit(root, tag, dist, node, branch): dirty = node.endswith('+') node = 'h' + node.strip('+') @@ -17,13 +17,14 @@ " and not tag({tag!r}))" # ignore the tagged commit itself ).format(tag=tag) if tag != '0.0': - commits = do(['hg', 'log', '-r', revset, '--template', '{node|short}'], + commits = do(['hg', 'log', '-r', revset, + '--template', '{node|short}'], root) else: commits = True trace('normalize', locals()) if commits or dirty: - return meta(tag, distance=dist, node=node, dirty=dirty) + return meta(tag, distance=dist, node=node, dirty=dirty, branch=branch) else: return meta(tag) @@ -31,37 +32,50 @@ def parse(root): if not has_command('hg'): return - identity_data = do('hg id -i -t', root).split() + identity_data = do('hg id -i -b -t', root).split() if not identity_data: return node = identity_data.pop(0) + branch = identity_data.pop(0) 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) + return meta(tags[0], dirty=dirty, branch=branch) - if node.strip('+') == '0'*12: + if node.strip('+') == '0' * 12: trace('initial node', root) - return meta('0.0', dirty=dirty) + return meta('0.0', dirty=dirty, branch=branch) - # the newline is needed for merge stae, see issue 72 - cmd = 'hg parents --template "{latesttag} {latesttagdistance}\n"' - out = do(cmd, root) try: - # in merge state we assume parent 1 is fine - tags, dist = out.splitlines()[0].split() - # pick latest tag from tag list - tag = tags.split(':')[-1] + tag = get_latest_normalizable_tag(root) + dist = get_graph_distance(root, tag) if tag == 'null': tag = '0.0' dist = int(dist) + 1 - return _hg_tagdist_normalize_tagcommit(root, tag, dist, node) + return _hg_tagdist_normalize_tagcommit(root, tag, dist, node, branch) except ValueError: pass # unpacking failed, old hg +def get_latest_normalizable_tag(root): + # Gets all tags containing a '.' (see #229) from oldest to newest + cmd = ['hg', 'log', + '-r', "ancestors(.) and tag('re:\.')", '--template', "{tags}\n"] + outlines = do(cmd, root).split() + if not outlines: + return 'null' + tag = outlines[-1].split()[-1] + return tag + + +def get_graph_distance(root, rev1, rev2='.'): + cmd = ['hg', 'log', '-q', '-r', '%s::%s' % (rev1, rev2)] + out = do(cmd, root) + return len(out.strip().splitlines()) - 1 + + def archival_to_version(data): trace('data', data) node = data.get('node', '')[:12] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.17.0/setuptools_scm/version.py new/setuptools_scm-2.0.0/setuptools_scm/version.py --- old/setuptools_scm-1.17.0/setuptools_scm/version.py 2018-03-20 11:15:19.000000000 +0100 +++ new/setuptools_scm-2.0.0/setuptools_scm/version.py 2018-04-10 10:27:36.000000000 +0200 @@ -2,13 +2,23 @@ import datetime import warnings import re +from itertools import chain, repeat, islice + from .utils import trace from pkg_resources import iter_entry_points -from distutils import log from pkg_resources import parse_version +SEMVER_MINOR = 2 +SEMVER_PATCH = 3 +SEMVER_LEN = 3 + + +def _pad(iterable, size, padding=None): + padded = chain(iterable, repeat(padding)) + return list(islice(padded, size)) + def _get_version_class(): modern_version = parse_version("1.0") @@ -21,10 +31,17 @@ VERSION_CLASS = _get_version_class() +class SetuptoolsOutdatedWarning(Warning): + pass + + +# append so integrators can disable the warning +warnings.simplefilter('error', SetuptoolsOutdatedWarning, append=1) + + def _warn_if_setuptools_outdated(): if VERSION_CLASS is None: - log.warn("your setuptools is too old (<12)") - log.warn("setuptools_scm functionality is degraded") + warnings.warn("your setuptools is too old (<12)", SetuptoolsOutdatedWarning) def callable_or_entrypoint(group, callable_or_name): @@ -64,6 +81,7 @@ def __init__(self, tag_version, distance=None, node=None, dirty=False, preformatted=False, + branch=None, **kw): if kw: trace("unknown args", kw) @@ -76,6 +94,7 @@ self.extra = kw self.dirty = dirty self.preformatted = preformatted + self.branch = branch @property def exact(self): @@ -84,16 +103,22 @@ def __repr__(self): return self.format_with( '<ScmVersion {tag} d={distance}' - ' n={node} d={dirty} x={extra}>') + ' n={node} d={dirty} b={branch} x={extra}>') - def format_with(self, fmt): + def format_with(self, fmt, **kw): return fmt.format( time=self.time, tag=self.tag, distance=self.distance, - node=self.node, dirty=self.dirty, extra=self.extra) + node=self.node, dirty=self.dirty, extra=self.extra, + branch=self.branch, **kw) + + def format_choice(self, clean_format, dirty_format, **kw): + return self.format_with( + dirty_format if self.dirty else clean_format, **kw) - def format_choice(self, clean_format, dirty_format): - return self.format_with(dirty_format if self.dirty else clean_format) + def format_next_version(self, guess_next, fmt="{guessed}.dev{distance}", **kw): + guessed = guess_next(self.tag, **kw) + return self.format_with(fmt, guessed=guessed) def _parse_tag(tag, preformatted): @@ -111,11 +136,9 @@ return ScmVersion(tag, distance, node, dirty, preformatted, **kw) -def guess_next_version(tag_version, distance): +def guess_next_version(tag_version): version = _strip_local(str(tag_version)) - bumped = _bump_dev(version) or _bump_regex(version) - suffix = '.dev%s' % distance - return bumped + suffix + return _bump_dev(version) or _bump_regex(version) def _strip_local(version_string): @@ -133,7 +156,7 @@ def _bump_regex(version): - prefix, tail = re.match('(.*?)(\d+)$', version).groups() + prefix, tail = re.match(r'(.*?)(\d+)$', version).groups() return '%s%d' % (prefix, int(tail) + 1) @@ -141,28 +164,49 @@ if version.exact: return version.format_with("{tag}") else: - return guess_next_version(version.tag, version.distance) + return version.format_next_version(guess_next_version) -def get_local_node_and_date(version): - if version.exact or version.node is None: - return version.format_choice("", "+d{time:%Y%m%d}") +def guess_next_simple_semver(version, retain, increment=True): + parts = map(int, str(version).split('.')) + parts = _pad(parts, retain, 0) + if increment: + parts[-1] += 1 + parts = _pad(parts, SEMVER_LEN, 0) + return '.'.join(map(str, parts)) + + +def simplified_semver_version(version): + if version.exact: + return guess_next_simple_semver( + version.tag, retain=SEMVER_LEN, increment=False) else: - return version.format_choice("+{node}", "+{node}.d{time:%Y%m%d}") + if version.branch is not None and 'feature' in version.branch: + return version.format_next_version( + guess_next_simple_semver, retain=SEMVER_MINOR) + else: + return version.format_next_version( + guess_next_simple_semver, retain=SEMVER_PATCH) -def get_local_node_and_timestamp(version, fmt='%Y%m%d%H%M%S'): +def _format_local_with_time(version, time_format): + if version.exact or version.node is None: - return version.format_choice("", - "+d{time:" - + "{fmt}".format(fmt=fmt) - + "}") + return version.format_choice( + "", "+d{time:{time_format}}", + time_format=time_format) else: - return version.format_choice("+{node}", - "+{node}" - + ".d{time:" - + "{fmt}".format(fmt=fmt) - + "}") + return version.format_choice( + "+{node}", "+{node}.d{time:{time_format}}", + time_format=time_format) + + +def get_local_node_and_date(version): + return _format_local_with_time(version, time_format="%Y%m%d") + + +def get_local_node_and_timestamp(version, fmt='%Y%m%d%H%M%S'): + return _format_local_with_time(version, time_format=fmt) def get_local_dirty_tag(version): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.17.0/setuptools_scm.egg-info/PKG-INFO new/setuptools_scm-2.0.0/setuptools_scm.egg-info/PKG-INFO --- old/setuptools_scm-1.17.0/setuptools_scm.egg-info/PKG-INFO 2018-03-20 11:15:44.000000000 +0100 +++ new/setuptools_scm-2.0.0/setuptools_scm.egg-info/PKG-INFO 2018-04-10 10:28:15.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.2 Name: setuptools-scm -Version: 1.17.0 +Version: 2.0.0 Summary: the blessed package to manage your versions by scm tags Home-page: https://github.com/pypa/setuptools_scm/ Author: Ronny Pfannschmidt @@ -293,9 +293,9 @@ .. code:: python def myversion(): - from setuptools_scm.version import dirty_tag + from setuptools_scm.version import get_local_dirty_tag def clean_scheme(version): - return dirty_tag(version) if version.dirty else '+clean' + return get_local_dirty_tag(version) if version.dirty else '+clean' return {'local_scheme': clean_scheme} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.17.0/setuptools_scm.egg-info/SOURCES.txt new/setuptools_scm-2.0.0/setuptools_scm.egg-info/SOURCES.txt --- old/setuptools_scm-1.17.0/setuptools_scm.egg-info/SOURCES.txt 2018-03-20 11:15:44.000000000 +0100 +++ new/setuptools_scm-2.0.0/setuptools_scm.egg-info/SOURCES.txt 2018-04-10 10:28:15.000000000 +0200 @@ -2,9 +2,8 @@ .travis.yml CHANGELOG.rst LICENSE +MANIFEST.in README.rst -appveyor.yml -default.nix setup.cfg setup.py tox.ini @@ -31,4 +30,6 @@ testing/test_git.py testing/test_main.py testing/test_mercurial.py -testing/test_regressions.py \ No newline at end of file +testing/test_regressions.py +testing/test_setuptools_support.py +testing/test_version.py \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.17.0/setuptools_scm.egg-info/entry_points.txt new/setuptools_scm-2.0.0/setuptools_scm.egg-info/entry_points.txt --- old/setuptools_scm-1.17.0/setuptools_scm.egg-info/entry_points.txt 2018-03-20 11:15:44.000000000 +0100 +++ new/setuptools_scm-2.0.0/setuptools_scm.egg-info/entry_points.txt 2018-04-10 10:28:15.000000000 +0200 @@ -21,6 +21,7 @@ [setuptools_scm.version_scheme] guess-next-dev = setuptools_scm.version:guess_next_dev_version post-release = setuptools_scm.version:postrelease_version + python-simplified-semver = setuptools_scm.version:simplified_semver_version [setuptools_scm.local_scheme] node-and-date = setuptools_scm.version:get_local_node_and_date diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.17.0/testing/test_functions.py new/setuptools_scm-2.0.0/testing/test_functions.py --- old/setuptools_scm-1.17.0/testing/test_functions.py 2018-03-20 11:15:19.000000000 +0100 +++ new/setuptools_scm-2.0.0/testing/test_functions.py 2018-04-10 10:27:36.000000000 +0200 @@ -14,14 +14,14 @@ @pytest.mark.parametrize('tag, expected', [ - ('1.1', '1.2.dev0'), - ('1.2.dev', '1.2.dev0'), - ('1.1a2', '1.1a3.dev0'), - ('23.24.post2+deadbeef', '23.24.post3.dev0'), - ]) + ('1.1', '1.2'), + ('1.2.dev', '1.2'), + ('1.1a2', '1.1a3'), + ('23.24.post2+deadbeef', '23.24.post3'), +]) def test_next_tag(tag, expected): version = pkg_resources.parse_version(tag) - assert guess_next_version(version, 0) == expected + assert guess_next_version(version) == expected VERSIONS = { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.17.0/testing/test_git.py new/setuptools_scm-2.0.0/testing/test_git.py --- old/setuptools_scm-1.17.0/testing/test_git.py 2018-03-20 11:15:19.000000000 +0100 +++ new/setuptools_scm-2.0.0/testing/test_git.py 2018-04-10 10:27:36.000000000 +0200 @@ -99,7 +99,7 @@ def test_find_files_stop_at_root_git(wd): wd.commit_testfile() wd.cwd.ensure('project/setup.cfg') - assert integration.find_files(str(wd.cwd/'project')) == [] + assert integration.find_files(str(wd.cwd / 'project')) == [] @pytest.mark.issue(128) @@ -133,3 +133,13 @@ wd('git add foobar') wd.commit() assert integration.find_files(str(wd.cwd)) == ['foobar/test1.txt'] + + +def test_git_feature_branch_increments_major(wd): + wd.commit_testfile() + wd("git tag 1.0.0") + wd.commit_testfile() + assert wd.get_version(version_scheme="python-simplified-semver").startswith("1.0.1") + wd("git checkout -b feature/fun") + wd.commit_testfile() + assert wd.get_version(version_scheme="python-simplified-semver").startswith("1.1.0") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.17.0/testing/test_mercurial.py new/setuptools_scm-2.0.0/testing/test_mercurial.py --- old/setuptools_scm-1.17.0/testing/test_mercurial.py 2018-03-20 11:15:19.000000000 +0100 +++ new/setuptools_scm-2.0.0/testing/test_mercurial.py 2018-04-10 10:27:36.000000000 +0200 @@ -18,10 +18,10 @@ '1.1.dev3+h000000000000': { 'latesttag': '1.0', 'latesttagdistance': '3', - 'node': '0'*20, + 'node': '0' * 20, }, '0.0': { - 'node': '0'*20, + 'node': '0' * 20, }, '1.2.2': {'tag': 'release-1.2.2'}, '1.2.2.dev0': {'tag': 'release-1.2.2.dev'}, @@ -41,7 +41,7 @@ def test_find_files_stop_at_root_hg(wd): wd.commit_testfile() wd.cwd.ensure('project/setup.cfg') - assert integration.find_files(str(wd.cwd/'project')) == [] + assert integration.find_files(str(wd.cwd / 'project')) == [] # XXX: better tests for tag prefixes @@ -114,7 +114,7 @@ def version_1_0(wd): wd('hg branch default') wd.commit_testfile() - wd('hg tag 1.0 -u test -d "0 0"') + wd('hg tag 1.0.0 -u test -d "0 0"') return wd @@ -131,14 +131,14 @@ @pytest.mark.usefixtures("pre_merge_commit_after_tag") def test_version_bump_before_merge_commit(wd): - assert wd.version.startswith('1.1.dev1+') + assert wd.version.startswith('1.0.1.dev1+') @pytest.mark.issue(219) @pytest.mark.usefixtures("pre_merge_commit_after_tag") def test_version_bump_from_merge_commit(wd): wd.commit() - assert wd.version.startswith('1.1.dev3+') # issue 219 + assert wd.version.startswith('1.0.1.dev3+') # issue 219 @pytest.mark.usefixtures("version_1_0") @@ -149,6 +149,25 @@ tagfile.write('0 0\n') wd.write('branchfile', 'branchtext') wd(wd.add_command) - assert wd.version.startswith('1.1.dev1+') # bump from dirty version + assert wd.version.startswith('1.0.1.dev1+') # bump from dirty version wd.commit() # commits both the testfile _and_ .hgtags - assert wd.version.startswith('1.1.dev2+') + assert wd.version.startswith('1.0.1.dev2+') + + +@pytest.mark.issue(229) +@pytest.mark.usefixtures("version_1_0") +def test_latest_tag_detection(wd): + """ Tests that tags not containing a "." are ignored, the same as for git. + Note that will be superceded by the fix for pypa/setuptools_scm/issues/235 + """ + wd('hg tag some-random-tag') + assert wd.version == '1.0.0' + + +@pytest.mark.usefixtures("version_1_0") +def test_feature_branch_increments_major(wd): + + wd.commit_testfile() + assert wd.get_version(version_scheme="python-simplified-semver").startswith("1.0.1") + wd("hg branch feature/fun") + assert wd.get_version(version_scheme="python-simplified-semver").startswith("1.1.0") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.17.0/testing/test_setuptools_support.py new/setuptools_scm-2.0.0/testing/test_setuptools_support.py --- old/setuptools_scm-1.17.0/testing/test_setuptools_support.py 1970-01-01 01:00:00.000000000 +0100 +++ new/setuptools_scm-2.0.0/testing/test_setuptools_support.py 2018-04-10 10:27:36.000000000 +0200 @@ -0,0 +1,60 @@ +""" +integration tests that check setuptools version support +""" +import sys +import os +import subprocess +import pytest +pytestmark = pytest.mark.skipif( + "sys.version_info >= (3,6,0)", + reason="integration with old versions no longer needed on py3.6+") + + +@pytest.fixture(scope='session') +def get_setuptools_packagedir(request): + targets = request.config.cache.makedir('setuptools_installs') + + def makeinstall(version): + target = targets.ensure(version, dir=1) + subprocess.check_call([ + sys.executable, '-m', 'pip', + 'install', '--no-binary', 'setuptools', 'setuptools==' + version, + '-t', str(target), + ]) + return target + return makeinstall + + +SCRIPT = """ +import setuptools +print(setuptools.__version__) +import setuptools_scm.version +from setuptools_scm.__main__ import main +main() +""" + + +def check(packagedir, **env): + subprocess.check_call( + [sys.executable, '-c', SCRIPT], + env=dict(os.environ, PYTHONPATH=".:" + str(packagedir), **env)) + + +def test_old_setuptools_fails(get_setuptools_packagedir): + packagedir = get_setuptools_packagedir("0.9.8") + with pytest.raises(subprocess.CalledProcessError): + check(packagedir) + + +def test_old_setuptools_allows_with_warnings(get_setuptools_packagedir): + + packagedir = get_setuptools_packagedir("0.9.8") + # filter using warning since in the early python startup + check( + packagedir, + PYTHONWARNINGS="once::Warning") + + +def test_distlib_setuptools_works(get_setuptools_packagedir): + packagedir = get_setuptools_packagedir("12.0.1") + check(packagedir) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.17.0/testing/test_version.py new/setuptools_scm-2.0.0/testing/test_version.py --- old/setuptools_scm-1.17.0/testing/test_version.py 1970-01-01 01:00:00.000000000 +0100 +++ new/setuptools_scm-2.0.0/testing/test_version.py 2018-04-10 10:27:36.000000000 +0200 @@ -0,0 +1,23 @@ +import pytest +from setuptools_scm.version import meta, simplified_semver_version + + +@pytest.mark.parametrize('version, expected_next', [ + pytest.param(meta("1.0.0"), "1.0.0", id='exact'), + + pytest.param(meta("1.0"), "1.0.0", id='short_tag'), + pytest.param(meta("1.0.0", distance=2, branch='default'), "1.0.1.dev2", + id='normal_branch'), + + pytest.param(meta("1.0", distance=2, branch='default'), "1.0.1.dev2", + id='normal_branch_short_tag'), + pytest.param(meta("1.0.0", distance=2, branch='feature'), "1.1.0.dev2", + id='feature_branch'), + pytest.param(meta("1.0", distance=2, branch='feature'), "1.1.0.dev2", + id='feature_branch_short_tag'), + pytest.param(meta("1.0.0", distance=2, branch='features/test'), "1.1.0.dev2", + id='feature_in_branch'), +]) +def test_next_semver(version, expected_next): + computed = simplified_semver_version(version) + assert computed == expected_next diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.17.0/tox.ini new/setuptools_scm-2.0.0/tox.ini --- old/setuptools_scm-1.17.0/tox.ini 2018-03-20 11:15:19.000000000 +0100 +++ new/setuptools_scm-2.0.0/tox.ini 2018-04-10 10:27:36.000000000 +0200 @@ -3,7 +3,15 @@ [flake8] max-complexity = 10 - +max-line-length = 88 +exclude= + .git, + .tox, + .env, + .venv, + .pytest_cache, + __pycache__, + ./setuptools_scm/win_py31_compat.py [testenv] usedevelop=True @@ -22,11 +30,14 @@ [testenv:check_readme] skip_install=True +setenv = SETUPTOOLS_SCM_PRETEND_VERSION=2.0 deps= readme + check-manifest commands= python setup.py check -r -s rst2html.py README.rst {envlogdir}/README.html --strict [] + check-manifest [testenv:upload] deps=