commit python3-setuptools_scm for openSUSE:Factory
![](https://seccdn.libravatar.org/avatar/e2145bc5cf53dda95c308a3c75e8fef3.jpg?s=120&d=mm&r=g)
Hello community, here is the log from the commit of package python3-setuptools_scm for openSUSE:Factory checked in at 2016-10-28 10:46:26 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python3-setuptools_scm (Old) and /work/SRC/openSUSE:Factory/.python3-setuptools_scm.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "python3-setuptools_scm" Changes: -------- --- /work/SRC/openSUSE:Factory/python3-setuptools_scm/python3-setuptools_scm.changes 2016-06-19 11:08:57.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.python3-setuptools_scm.new/python3-setuptools_scm.changes 2016-10-28 10:46:27.000000000 +0200 @@ -1,0 +2,49 @@ +Sat Oct 22 15:32:36 UTC 2016 - arun@gmx.de + +- update to version 1.15.0: + * more sophisticated ignoring of mercurial tag commits when + considering distance in commits (thanks Petre Mierlutiu) + * fix issue #114: stop trying to be smart for the sdist and ensure + its always correctly usign itself + * update trove classifiers + * fix issue #84: document using the installed package metadata for + sphinx + * fix issue #81: fail more gracious when git/hg are missing + * address issue #93: provide an experimental api to customize + behaviour on shallow git repos a custom parse function may pick + pre parse actions to do when using git + +- changes from version 1.14.1: + * fix #109: when detecting a dirty git workdir + * don't consider untracked file (this was a regression due to #86 in + v1.13.1) + * consider the distance 0 when the git node is unknown (happens when + you haven't commited anything) + +------------------------------------------------------------------- +Sat Oct 15 23:31:50 UTC 2016 - arun@gmx.de + +- update to version 1.14.0: + * publish bdist_egg for python 2.6, 2.7 and 3.3-3.5 + * fix issue #107 - dont use node if it is None + +------------------------------------------------------------------- +Wed Oct 12 15:51:22 UTC 2016 - arun@gmx.de + +- update to version 1.13.1: + * fix issue #86 - detect dirty git workdir without tags + +------------------------------------------------------------------- +Sat Oct 8 01:52:00 UTC 2016 - arun@gmx.de + +- update to version 1.13.0: + * fix regression caused by the fix of #101 * assert types for + version dumping * strictly pass all versions trough parsed version + metadata + +- changes from version 1.12.0: + * fix issue #97 - add support for mercurial plugins + * fix issue #101 - write version cache even for pretend version + (thanks anarcat for reporting and fixing) + +------------------------------------------------------------------- Old: ---- setuptools_scm-1.11.1.tar.gz New: ---- setuptools_scm-1.15.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python3-setuptools_scm.spec ++++++ --- /var/tmp/diff_new_pack.lJC71f/_old 2016-10-28 10:46:28.000000000 +0200 +++ /var/tmp/diff_new_pack.lJC71f/_new 2016-10-28 10:46:28.000000000 +0200 @@ -17,7 +17,7 @@ Name: python3-setuptools_scm -Version: 1.11.1 +Version: 1.15.0 Release: 0 Summary: The blessed package to manage your versions by scm tags License: MIT ++++++ setuptools_scm-1.11.1.tar.gz -> setuptools_scm-1.15.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.11.1/.travis.yml new/setuptools_scm-1.15.0/.travis.yml --- old/setuptools_scm-1.11.1/.travis.yml 2016-06-12 23:09:53.000000000 +0200 +++ new/setuptools_scm-1.15.0/.travis.yml 2016-10-20 23:55:22.000000000 +0200 @@ -6,21 +6,40 @@ - '3.3' - '3.4' - '3.5' +- '3.6-dev' +env: +- TOXENV=py-test + +matrix: + include: + - python: '2.7' + env: TOXENV=flake8 + - python: '3.5' + env: TOXENV=flake8 cache: files: - $HOME/.pip/cache - $Home/.cache/pip install: pip install tox script: -- tox -e py-test,flake8 -deploy: - provider: pypi - user: ronny - password: - secure: QGJhDXmfFDKysMJJV/ONGaHHzG/aImhU3DdhEP63d657iQSn/Cb4EG/l9YmVnRzpJ94nSDXZB8YwptR7rid0bOtidb32lxN8n6UiWILCXWeAN2FE+tT9/0xIct4HUJZ8OttD1gft/Di722Gy+s9PzFwjwrV4efkxCzgjfYOjkMeq3aO6NoG3ur0iZXJh7ODwLp4sRFep2NpIEaXm2qMdnnXpck6bJ1q/NtvPx9CAZivd9HYa0evg5j1ENTz1mXXafhgF+0vRCBXA33xJuysO6CKtk+2mizL1QHfosOERiKl9+zPyZw+VvSchbCVwgxrMSiRcpGag+4SegyHrj1M/2YqfFzMF/yuFGcqXl2VkEqlnBQOVMNW3Kdcmnm+caNbddnv+M384WFz4nV8nWjcsD5l27+XlMWfuvskDIvZKtVCXmmbtqgwM4tqoYd6uxbnooRfwINTGx8sNzKP10xkaesB3ZBCEpecOKA1AXUAZ74RfYWWExv6eIuVGwyIJmOcD8M/17N8g58GxxO+88gx50EuhyNiRjYZDUipfVydfJwBwpD+p695NixUMITuksucQftjHsQp+laGWJlDIPvFwI85wDJUYAyrzn6L1W+smkm1bGomuliW2MJfxeSZAmSk4CE5VOpIWQTBmDLR3pxBhcaqzwdd4mAWvMi/fpM4yJJI= - on: - tags: true - python: '2.7' +- tox -e $TOXENV + - distributions: "sdist bdist_wheel" +credentials: + - &pypi + provider: pypi + user: ronny + password: + secure: QGJhDXmfFDKysMJJV/ONGaHHzG/aImhU3DdhEP63d657iQSn/Cb4EG/l9YmVnRzpJ94nSDXZB8YwptR7rid0bOtidb32lxN8n6UiWILCXWeAN2FE+tT9/0xIct4HUJZ8OttD1gft/Di722Gy+s9PzFwjwrV4efkxCzgjfYOjkMeq3aO6NoG3ur0iZXJh7ODwLp4sRFep2NpIEaXm2qMdnnXpck6bJ1q/NtvPx9CAZivd9HYa0evg5j1ENTz1mXXafhgF+0vRCBXA33xJuysO6CKtk+2mizL1QHfosOERiKl9+zPyZw+VvSchbCVwgxrMSiRcpGag+4SegyHrj1M/2YqfFzMF/yuFGcqXl2VkEqlnBQOVMNW3Kdcmnm+caNbddnv+M384WFz4nV8nWjcsD5l27+XlMWfuvskDIvZKtVCXmmbtqgwM4tqoYd6uxbnooRfwINTGx8sNzKP10xkaesB3ZBCEpecOKA1AXUAZ74RfYWWExv6eIuVGwyIJmOcD8M/17N8g58GxxO+88gx50EuhyNiRjYZDUipfVydfJwBwpD+p695NixUMITuksucQftjHsQp+laGWJlDIPvFwI85wDJUYAyrzn6L1W+smkm1bGomuliW2MJfxeSZAmSk4CE5VOpIWQTBmDLR3pxBhcaqzwdd4mAWvMi/fpM4yJJI= + +deploy: + - <<: *pypi + on: + tags: true + python: '2.7' + distributions: "sdist bdist_wheel" + - <<: *pypi + on: + tags: true + distributions: "bdist_egg" \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.11.1/CHANGELOG.rst new/setuptools_scm-1.15.0/CHANGELOG.rst --- old/setuptools_scm-1.11.1/CHANGELOG.rst 2016-06-12 23:09:53.000000000 +0200 +++ new/setuptools_scm-1.15.0/CHANGELOG.rst 2016-10-20 23:55:22.000000000 +0200 @@ -1,9 +1,58 @@ +v1.15.0 +======= + +* more sophisticated ignoring of mercurial tag commits + when considering distance in commits + (thanks Petre Mierlutiu) +* fix issue #114: stop trying to be smart for the sdist + and ensure its always correctly usign itself +* update trove classifiers +* fix issue #84: document using the installed package metadata for sphinx +* fix issue #81: fail more gracious when git/hg are missing +* address issue #93: provide an experimental api to customize behaviour on shallow git repos + a custom parse function may pick pre parse actions to do when using git + + +v1.14.1 +======= + +* fix #109: when detecting a dirty git workdir + don't consider untracked file + (this was a regression due to #86 in v1.13.1) +* consider the distance 0 when the git node is unknown + (happens when you haven't commited anything) + +v1.14.0 +======= + +* publish bdist_egg for python 2.6, 2.7 and 3.3-3.5 +* fix issue #107 - dont use node if it is None + +v1.13.1 +======= + +* fix issue #86 - detect dirty git workdir without tags + +v1.13.0 +======= + +* fix regression caused by the fix of #101 + * assert types for version dumping + * strictly pass all versions trough parsed version metadata + +v1.12.0 +======= + +* fix issue #97 - add support for mercurial plugins +* fix issue #101 - write version cache even for pretend version + (thanks anarcat for reporting and fixing) + v1.11.1 ======== * fix issue #88 - better docs for sphinx usage (thanks Jason) * fix issue #89 - use normpath to deal with windows - (thanks Te-jé Rodgers for reporting and fixing) + (thanks Te-jé Rodgers for reporting and fixing) v1.11.0 ======= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.11.1/PKG-INFO new/setuptools_scm-1.15.0/PKG-INFO --- old/setuptools_scm-1.11.1/PKG-INFO 2016-06-12 23:10:13.000000000 +0200 +++ new/setuptools_scm-1.15.0/PKG-INFO 2016-10-20 23:55:36.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: setuptools_scm -Version: 1.11.1 +Version: 1.15.0 Summary: the blessed package to manage your versions by scm tags Home-page: https://github.com/pypa/setuptools_scm/ Author: Ronny Pfannschmidt @@ -43,8 +43,8 @@ Programmatic usage ------------------ - In order to use setuptools_scm for sphinx config, assuming the sphinx conf - is one directory deeper than the project's root, use:: + In order to use setuptools_scm from code + that one directory deeper than the project's root, you can use: .. code:: python @@ -52,11 +52,28 @@ version = get_version(root='..', relative_to=__file__) + Usage from sphinx + ----------------- + + It is discouraged to use setuptools_scm from sphinx itself, + instead use ``pkg_resources`` after editable/real installation: + + .. code:: python + + from pkg_resources import get_distribution + release = pkg_resources('myproject').version + # for the example take major/minor + version = '.'.join(release.split('.')[:2]) + + The underlying reason is, that services like readthedocs sometimes change + the workingdirectory for good reasons and using the installed metadata prevents + using needless volatile data there. + Notable Plugins ---------------- `setuptools_scm_git_archive https://pypi.python.org/pypi/setuptools_scm_git_archive`_ - provides partial support for obtaining versions from git archvies + provides partial support for obtaining versions from git archives that belong to tagged versions. The only reason for not including it in setuptools-scm itself is git/github not supporting sufficient metadata for untagged/followup commits, @@ -247,10 +264,7 @@ def myversion(): from setuptools_scm.version import dirty_tag def clean_scheme(version): - if not version.dirty: - return '+clean' - else: - return dirty_tag(version) + return dirty_tag(version) if version.dirty else '+clean' return {'local_scheme': clean_scheme} @@ -270,8 +284,12 @@ Classifier: License :: OSI Approved :: MIT License Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 2.6 Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3.3 Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 Classifier: Topic :: Software Development :: Libraries Classifier: Topic :: Software Development :: Version Control Classifier: Topic :: System :: Software Distribution diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.11.1/README.rst new/setuptools_scm-1.15.0/README.rst --- old/setuptools_scm-1.11.1/README.rst 2016-06-12 23:09:53.000000000 +0200 +++ new/setuptools_scm-1.15.0/README.rst 2016-10-20 23:55:22.000000000 +0200 @@ -35,8 +35,8 @@ Programmatic usage ------------------ -In order to use setuptools_scm for sphinx config, assuming the sphinx conf -is one directory deeper than the project's root, use:: +In order to use setuptools_scm from code +that one directory deeper than the project's root, you can use: .. code:: python @@ -44,11 +44,28 @@ version = get_version(root='..', relative_to=__file__) +Usage from sphinx +----------------- + +It is discouraged to use setuptools_scm from sphinx itself, +instead use ``pkg_resources`` after editable/real installation: + +.. code:: python + + from pkg_resources import get_distribution + release = pkg_resources('myproject').version + # for the example take major/minor + version = '.'.join(release.split('.')[:2]) + +The underlying reason is, that services like readthedocs sometimes change +the workingdirectory for good reasons and using the installed metadata prevents +using needless volatile data there. + Notable Plugins ---------------- `setuptools_scm_git_archive https://pypi.python.org/pypi/setuptools_scm_git_archive`_ -provides partial support for obtaining versions from git archvies +provides partial support for obtaining versions from git archives that belong to tagged versions. The only reason for not including it in setuptools-scm itself is git/github not supporting sufficient metadata for untagged/followup commits, @@ -239,10 +256,7 @@ def myversion(): from setuptools_scm.version import dirty_tag def clean_scheme(version): - if not version.dirty: - return '+clean' - else: - return dirty_tag(version) + return 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.11.1/default.nix new/setuptools_scm-1.15.0/default.nix --- old/setuptools_scm-1.11.1/default.nix 1970-01-01 01:00:00.000000000 +0100 +++ new/setuptools_scm-1.15.0/default.nix 2016-10-20 23:55:22.000000000 +0200 @@ -0,0 +1,9 @@ +{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.11.1/setup.py new/setuptools_scm-1.15.0/setup.py --- old/setuptools_scm-1.11.1/setup.py 2016-06-12 23:10:13.000000000 +0200 +++ new/setuptools_scm-1.15.0/setup.py 2016-10-20 23:55:22.000000000 +0200 @@ -13,7 +13,6 @@ import os import sys import setuptools -from setuptools.command.sdist import sdist as sdist_orig PROBLEMATIC_COMMANDS = 'install', 'develop', 'easy_install', 'bdist_egg' @@ -39,31 +38,12 @@ long_description = fp.read() -class sdist(sdist_orig): - def make_release_tree(self, base_dir, files): - sdist_orig.make_release_tree(self, base_dir, files) - target = os.path.join(base_dir, 'setup.py') - with open(__file__) as fp: - template = fp.read() - ver = self.distribution.version - if not ver: - from setuptools_scm import get_version - ver = get_version(**scm_config()) - - finalized = template.replace( - 'use_scm_version=scm_config,\n', - 'version="%s",\n' % ver) - os.remove(target) - with open(target, 'w') as fp: - fp.write(finalized) - - arguments = dict( name='setuptools_scm', url='https://github.com/pypa/setuptools_scm/', zip_safe=True, # pass here since entrypints are not yet registred - version="1.11.1", + use_scm_version=scm_config, author='Ronny Pfannschmidt', author_email='opensource@ronnypfannschmidt.de', description=('the blessed package to manage your versions by scm tags'), @@ -109,14 +89,17 @@ 'License :: OSI Approved :: MIT License', 'Programming Language :: Python', 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3.3', 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', 'Topic :: Software Development :: Libraries', 'Topic :: Software Development :: Version Control', 'Topic :: System :: Software Distribution', 'Topic :: Utilities', ], - cmdclass={'sdist': sdist} ) if __name__ == '__main__': diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.11.1/setuptools_scm/__init__.py new/setuptools_scm-1.15.0/setuptools_scm/__init__.py --- old/setuptools_scm-1.11.1/setuptools_scm/__init__.py 2016-06-12 23:09:53.000000000 +0200 +++ new/setuptools_scm-1.15.0/setuptools_scm/__init__.py 2016-10-20 23:55:22.000000000 +0200 @@ -4,9 +4,10 @@ """ import os import sys +import warnings from .utils import trace -from .version import format_version +from .version import format_version, meta, ScmVersion from .discover import find_matching_entrypoint PRETEND_KEY = 'SETUPTOOLS_SCM_PRETEND_VERSION' @@ -37,6 +38,7 @@ def dump_version(root, version, write_to, template=None): + assert isinstance(version, string_types) if not write_to: return target = os.path.normpath(os.path.join(root, write_to)) @@ -59,10 +61,21 @@ def _do_parse(root, parse): pretended = os.environ.get(PRETEND_KEY) if pretended: - return pretended + # we use meta here since the pretended version + # must adhere to the pep to begin with + return meta(pretended) if parse: - version = parse(root) or _version_from_entrypoint( + parse_result = parse(root) + if isinstance(parse_result, string_types): + warnings.warn( + "version parse result was a string\n" + "please return a parsed version", + category=DeprecationWarning) + # we use ScmVersion here in order to keep legacy code working + # for 2.0 we should use meta + parse_result = ScmVersion(parse_result) + version = parse_result or _version_from_entrypoint( root, 'setuptools_scm.parse_scm_fallback') else: # include fallbacks after dropping them from the main entrypoint @@ -101,18 +114,17 @@ root = os.path.abspath(root) trace('root', repr(root)) - version = _do_parse(root, parse) + parsed_version = _do_parse(root, parse) - if version: - if isinstance(version, string_types): - return version - version = format_version( - version, + if parsed_version: + version_string = format_version( + parsed_version, version_scheme=version_scheme, local_scheme=local_scheme) dump_version( root=root, - version=version, + version=version_string, write_to=write_to, template=write_to_template) - return version + + return version_string diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.11.1/setuptools_scm/git.py new/setuptools_scm-1.15.0/setuptools_scm/git.py --- old/setuptools_scm-1.11.1/setuptools_scm/git.py 2016-06-12 23:09:53.000000000 +0200 +++ new/setuptools_scm-1.15.0/setuptools_scm/git.py 2016-10-20 23:55:22.000000000 +0200 @@ -1,40 +1,103 @@ -from .utils import do, do_ex, trace +from .utils import do_ex, trace, has_command from .version import meta -from os.path import abspath, normcase, realpath - +from os.path import abspath, normcase, realpath, isfile, join +import warnings FILES_COMMAND = 'git ls-files' -DEFAULT_DESCRIBE = 'git describe --dirty --tags --long --match *.*' +DEFAULT_DESCRIBE = 'git describe --tags --long --match *.*' -def parse(root, describe_command=DEFAULT_DESCRIBE): - real_root, _, ret = do_ex('git rev-parse --show-toplevel', root) - if ret: - return - trace('real root', real_root) - if (normcase(abspath(realpath(real_root))) != - normcase(abspath(realpath(root)))): +def _normalized(path): + return normcase(abspath(realpath(path))) + + +class GitWorkdir(object): + """experimental, may change at any time""" + def __init__(self, path): + self.path = path + + def do_ex(self, cmd): + return do_ex(cmd, cwd=self.path) + + @classmethod + def from_potential_worktree(cls, wd): + real_wd, _, ret = do_ex('git rev-parse --show-toplevel', wd) + if ret: + return + trace('real root', real_wd) + if _normalized(real_wd) != _normalized(wd): + return + + return cls(real_wd) + + def is_dirty(self): + out, _, _ = self.do_ex("git status --porcelain --untracked-files=no") + return bool(out) + + def is_shallow(self): + return isfile(join(self.path, '.git/shallow')) + + def fetch_shallow(self): + self.do_ex("git fetch --unshallow") + + def node(self): + rev_node, _, ret = self.do_ex('git rev-parse --verify --quiet HEAD') + if not ret: + return rev_node[:7] + + def count_all_nodes(self): + revs, _, _ = self.do_ex('git rev-list HEAD') + return revs.count('\n') + 1 + + +def warn_on_shallow(wd): + """experimental, may change at any time""" + if wd.is_shallow(): + warnings.warn('"%s" is shallow and may cause errors' % (wd.path,)) + + +def fetch_on_shallow(wd): + """experimental, may change at any time""" + if wd.is_shallow(): + warnings.warn('"%s" was shallow, git fetch was used to rectify') + wd.fetch_shallow() + + +def fail_on_shallow(wd): + """experimental, may change at any time""" + if wd.is_shallow(): + raise ValueError( + '%r is shallow, please correct with ' + '"git fetch --unshallow"' % wd.path) + + +def parse(root, describe_command=DEFAULT_DESCRIBE, pre_parse=warn_on_shallow): + """ + :param pre_parse: experimental pre_parse action, may change at any time + """ + if not has_command('git'): return - rev_node, _, ret = do_ex('git rev-parse --verify --quiet HEAD', root) - if ret: - return meta('0.0') - rev_node = rev_node[:7] + wd = GitWorkdir(root) + if pre_parse: + pre_parse(wd) + rev_node = wd.node() + dirty = wd.is_dirty() + + if rev_node is None: + return meta('0.0', distance=0, dirty=dirty) + out, err, ret = do_ex(describe_command, root) - if '-' not in out and '.' not in out: - revs = do('git rev-list HEAD', root) - count = revs.count('\n') - if ret: - out = rev_node - return meta('0.0', distance=count + 1, node=out) if ret: - return - dirty = out.endswith('-dirty') - if dirty: - out = out.rsplit('-', 1)[0] + return meta( + '0.0', + distance=wd.count_all_nodes(), + node=rev_node, + dirty=dirty, + ) tag, number, node = out.rsplit('-', 2) number = int(number) if number: return meta(tag, distance=number, node=node, dirty=dirty) else: - return meta(tag, dirty=dirty, node=node) + return meta(tag, node=node, dirty=dirty) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.11.1/setuptools_scm/hacks.py new/setuptools_scm-1.15.0/setuptools_scm/hacks.py --- old/setuptools_scm-1.11.1/setuptools_scm/hacks.py 2016-06-12 23:09:53.000000000 +0200 +++ new/setuptools_scm-1.15.0/setuptools_scm/hacks.py 2016-10-20 23:55:22.000000000 +0200 @@ -1,5 +1,6 @@ import os from .utils import data_from_mime, trace +from .version import meta def parse_pkginfo(root): @@ -9,4 +10,4 @@ data = data_from_mime(pkginfo) version = data.get('Version') if version != 'UNKNOWN': - return version + return meta(version) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.11.1/setuptools_scm/hg.py new/setuptools_scm-1.15.0/setuptools_scm/hg.py --- old/setuptools_scm-1.11.1/setuptools_scm/hg.py 2016-06-12 23:09:53.000000000 +0200 +++ new/setuptools_scm-1.15.0/setuptools_scm/hg.py 2016-10-20 23:55:22.000000000 +0200 @@ -1,5 +1,5 @@ import os -from .utils import do, trace, data_from_mime +from .utils import do, trace, data_from_mime, has_command from .version import meta, tags_to_versions FILES_COMMAND = 'hg locate -I .' @@ -8,16 +8,23 @@ def _hg_tagdist_normalize_tagcommit(root, tag, dist, node): dirty = node.endswith('+') node = node.strip('+') - st = do('hg st --no-status --change %s' % str(node), root) - - trace('normalize', locals()) - if int(dist) == 1 and st == '.hgtags' and not dirty: - return meta(tag) + revset = ("(branch(.) and tag({tag!r})::. and file('re:^(?!\.hgtags).*$')" + " - tag({tag!r}))").format(tag=tag) + if tag != '0.0': + 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) + else: + return meta(tag) def parse(root): + if not has_command('hg'): + return l = do('hg id -i -t', root).split() node = l.pop(0) tags = tags_to_versions(l) @@ -36,7 +43,9 @@ out = do(cmd, root) try: # in merge state we assume parent 1 is fine - tag, dist = out.splitlines()[0].split() + tags, dist = out.splitlines()[0].split() + # pick latest tag from tag list + tag = tags.split(':')[-1] if tag == 'null': tag = '0.0' dist = int(dist) + 1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.11.1/setuptools_scm/utils.py new/setuptools_scm-1.15.0/setuptools_scm/utils.py --- old/setuptools_scm-1.11.1/setuptools_scm/utils.py 2016-06-12 23:09:53.000000000 +0200 +++ new/setuptools_scm-1.15.0/setuptools_scm/utils.py 2016-10-20 23:55:22.000000000 +0200 @@ -2,6 +2,7 @@ utils """ from __future__ import print_function, unicode_literals +import warnings import sys import shlex import subprocess @@ -41,17 +42,15 @@ return env_dict -def do_ex(cmd, cwd='.'): - trace('cmd', repr(cmd)) - p = subprocess.Popen( - shlex.split(cmd), +def _popen_pipes(cmd, cwd): + + return subprocess.Popen( + cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=str(cwd), env=_always_strings(dict( os.environ, - # disable hgrc processing other than .hg/hgrc - HGRCPATH='', # try to disable i18n LC_ALL='C', LANGUAGE='', @@ -59,6 +58,13 @@ )) ) + +def do_ex(cmd, cwd='.'): + trace('cmd', repr(cmd)) + if not isinstance(cmd, (list, tuple)): + cmd = shlex.split(cmd) + + p = _popen_pipes(cmd, cwd) out, err = p.communicate() if out: trace('out', repr(out)) @@ -72,7 +78,6 @@ def do(cmd, cwd='.'): out, err, ret = do_ex(cmd, cwd) if ret: - trace('ret', ret) print(err) return out @@ -88,3 +93,17 @@ if ': ' in x) trace('data', data) return data + + +def has_command(name): + try: + p = _popen_pipes([name, 'help'], '.') + except OSError: + trace(*sys.exc_info()) + res = False + else: + p.communicate() + res = not p.returncode + if not res: + warnings.warn("%r was not found" % name) + return res diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.11.1/setuptools_scm/version.py new/setuptools_scm-1.15.0/setuptools_scm/version.py --- old/setuptools_scm-1.11.1/setuptools_scm/version.py 2016-06-12 23:09:53.000000000 +0200 +++ new/setuptools_scm-1.15.0/setuptools_scm/version.py 2016-10-20 23:55:22.000000000 +0200 @@ -106,7 +106,7 @@ def get_local_node_and_date(version): - if version.exact: + if version.exact or version.node is None: return version.format_choice("", "+d{time:%Y%m%d}") else: return version.format_choice("+n{node}", "+n{node}.d{time:%Y%m%d}") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.11.1/setuptools_scm.egg-info/PKG-INFO new/setuptools_scm-1.15.0/setuptools_scm.egg-info/PKG-INFO --- old/setuptools_scm-1.11.1/setuptools_scm.egg-info/PKG-INFO 2016-06-12 23:10:13.000000000 +0200 +++ new/setuptools_scm-1.15.0/setuptools_scm.egg-info/PKG-INFO 2016-10-20 23:55:36.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: setuptools-scm -Version: 1.11.1 +Version: 1.15.0 Summary: the blessed package to manage your versions by scm tags Home-page: https://github.com/pypa/setuptools_scm/ Author: Ronny Pfannschmidt @@ -43,8 +43,8 @@ Programmatic usage ------------------ - In order to use setuptools_scm for sphinx config, assuming the sphinx conf - is one directory deeper than the project's root, use:: + In order to use setuptools_scm from code + that one directory deeper than the project's root, you can use: .. code:: python @@ -52,11 +52,28 @@ version = get_version(root='..', relative_to=__file__) + Usage from sphinx + ----------------- + + It is discouraged to use setuptools_scm from sphinx itself, + instead use ``pkg_resources`` after editable/real installation: + + .. code:: python + + from pkg_resources import get_distribution + release = pkg_resources('myproject').version + # for the example take major/minor + version = '.'.join(release.split('.')[:2]) + + The underlying reason is, that services like readthedocs sometimes change + the workingdirectory for good reasons and using the installed metadata prevents + using needless volatile data there. + Notable Plugins ---------------- `setuptools_scm_git_archive https://pypi.python.org/pypi/setuptools_scm_git_archive`_ - provides partial support for obtaining versions from git archvies + provides partial support for obtaining versions from git archives that belong to tagged versions. The only reason for not including it in setuptools-scm itself is git/github not supporting sufficient metadata for untagged/followup commits, @@ -247,10 +264,7 @@ def myversion(): from setuptools_scm.version import dirty_tag def clean_scheme(version): - if not version.dirty: - return '+clean' - else: - return dirty_tag(version) + return dirty_tag(version) if version.dirty else '+clean' return {'local_scheme': clean_scheme} @@ -270,8 +284,12 @@ Classifier: License :: OSI Approved :: MIT License Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 2.6 Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3.3 Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 Classifier: Topic :: Software Development :: Libraries Classifier: Topic :: Software Development :: Version Control Classifier: Topic :: System :: Software Distribution diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.11.1/setuptools_scm.egg-info/SOURCES.txt new/setuptools_scm-1.15.0/setuptools_scm.egg-info/SOURCES.txt --- old/setuptools_scm-1.11.1/setuptools_scm.egg-info/SOURCES.txt 2016-06-12 23:10:13.000000000 +0200 +++ new/setuptools_scm-1.15.0/setuptools_scm.egg-info/SOURCES.txt 2016-10-20 23:55:36.000000000 +0200 @@ -5,6 +5,7 @@ LICENSE README.rst appveyor.yml +default.nix setup.cfg setup.py tox.ini diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.11.1/testing/conftest.py new/setuptools_scm-1.15.0/testing/conftest.py --- old/setuptools_scm-1.11.1/testing/conftest.py 2016-06-12 23:09:53.000000000 +0200 +++ new/setuptools_scm-1.15.0/testing/conftest.py 2016-10-20 23:55:22.000000000 +0200 @@ -63,4 +63,4 @@ @pytest.fixture def wd(tmpdir): - return Wd(tmpdir) + return Wd(tmpdir.ensure('wd', dir=True)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.11.1/testing/test_basic_api.py new/setuptools_scm-1.15.0/testing/test_basic_api.py --- old/setuptools_scm-1.11.1/testing/test_basic_api.py 2016-06-12 23:09:53.000000000 +0200 +++ new/setuptools_scm-1.15.0/testing/test_basic_api.py 2016-10-20 23:55:22.000000000 +0200 @@ -74,7 +74,9 @@ ast.parse(content) -def test_parse_plain(): +def test_parse_plain(recwarn): def parse(root): return 'tricked you' assert setuptools_scm.get_version(parse=parse) == 'tricked you' + assert str(recwarn.pop().message) == \ + 'version parse result was a string\nplease return a parsed version' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.11.1/testing/test_functions.py new/setuptools_scm-1.15.0/testing/test_functions.py --- old/setuptools_scm-1.11.1/testing/test_functions.py 2016-06-12 23:09:53.000000000 +0200 +++ new/setuptools_scm-1.15.0/testing/test_functions.py 2016-10-20 23:55:22.000000000 +0200 @@ -1,7 +1,8 @@ import pytest import pkg_resources -from setuptools_scm import dump_version +from setuptools_scm import dump_version, get_version, PRETEND_KEY from setuptools_scm.version import guess_next_version, meta, format_version +from setuptools_scm.utils import has_command class MockTime(object): @@ -30,15 +31,15 @@ @pytest.mark.parametrize('version,scheme,expected', [ ('exact', 'guess-next-dev node-and-date', '1.1'), - ('zerodistance', 'guess-next-dev node-and-date', '1.2.dev0+nNone'), - ('dirty', 'guess-next-dev node-and-date', '1.2.dev0+nNone.dtime'), - ('distance', 'guess-next-dev node-and-date', '1.2.dev3+nNone'), - ('distancedirty', 'guess-next-dev node-and-date', '1.2.dev3+nNone.dtime'), + ('zerodistance', 'guess-next-dev node-and-date', '1.2.dev0'), + ('dirty', 'guess-next-dev node-and-date', '1.2.dev0+dtime'), + ('distance', 'guess-next-dev node-and-date', '1.2.dev3'), + ('distancedirty', 'guess-next-dev node-and-date', '1.2.dev3+dtime'), ('exact', 'post-release node-and-date', '1.1'), - ('zerodistance', 'post-release node-and-date', '1.1.post0+nNone'), - ('dirty', 'post-release node-and-date', '1.1.post0+nNone.dtime'), - ('distance', 'post-release node-and-date', '1.1.post3+nNone'), - ('distancedirty', 'post-release node-and-date', '1.1.post3+nNone.dtime'), + ('zerodistance', 'post-release node-and-date', '1.1.post0'), + ('dirty', 'post-release node-and-date', '1.1.post0+dtime'), + ('distance', 'post-release node-and-date', '1.1.post3'), + ('distancedirty', 'post-release node-and-date', '1.1.post3+dtime'), ]) def test_format_version(version, monkeypatch, scheme, expected): version = VERSIONS[version] @@ -52,7 +53,19 @@ def test_dump_version_doesnt_bail_on_value_error(tmpdir): write_to = "VERSION" - version = VERSIONS['exact'] + version = str(VERSIONS['exact'].tag) with pytest.raises(ValueError) as exc_info: dump_version(tmpdir.strpath, version, write_to) assert str(exc_info.value).startswith("bad file format:") + + +def test_dump_version_works_with_pretend(tmpdir, monkeypatch): + monkeypatch.setenv(PRETEND_KEY, '1.0') + get_version(write_to=str(tmpdir.join('VERSION.txt'))) + assert tmpdir.join('VERSION.txt').read() == '1.0' + + +def test_has_command(recwarn): + assert not has_command('yadayada_setuptools_aint_ne') + msg = recwarn.pop() + assert 'yadayada' in str(msg.message) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.11.1/testing/test_git.py new/setuptools_scm-1.15.0/testing/test_git.py --- old/setuptools_scm-1.11.1/testing/test_git.py 2016-06-12 23:09:53.000000000 +0200 +++ new/setuptools_scm-1.15.0/testing/test_git.py 2016-10-20 23:55:22.000000000 +0200 @@ -1,5 +1,8 @@ from setuptools_scm import integration +from setuptools_scm.utils import do +from setuptools_scm import git import pytest +from datetime import date @pytest.fixture @@ -13,7 +16,7 @@ def test_version_from_git(wd): - assert wd.version == '0.0' + assert wd.version == '0.1.dev0' wd.commit_testfile() assert wd.version.startswith('0.1.dev1+') @@ -32,6 +35,57 @@ assert wd.version.startswith('0.2') +@pytest.mark.issue(108) +@pytest.mark.issue(109) +def test_git_worktree(wd): + wd.write('test.txt', 'test2') + # untracked files dont change the state + assert wd.version == '0.1.dev0' + wd('git add test.txt') + assert wd.version.startswith('0.1.dev0+d') + + +@pytest.mark.issue(86) +def test_git_dirty_notag(wd): + wd.commit_testfile() + wd.write('test.txt', 'test2') + wd("git add test.txt") + assert wd.version.startswith('0.1.dev1') + today = date.today() + # we are dirty, check for the tag + assert today.strftime('.d%Y%m%d') in wd.version + + +@pytest.fixture +def shallow_wd(wd, tmpdir): + wd.commit_testfile() + wd.commit_testfile() + wd.commit_testfile() + target = tmpdir.join('wd_shallow') + do(['git', 'clone', "file://%s" % wd.cwd, str(target,), '--depth=1']) + return target + + +def test_git_parse_shallow_warns(shallow_wd, recwarn): + git.parse(str(shallow_wd)) + msg = recwarn.pop() + assert 'is shallow and may cause errors' in str(msg.message) + + +def test_git_parse_shallow_fail(shallow_wd): + with pytest.raises(ValueError) as einfo: + git.parse(str(shallow_wd), pre_parse=git.fail_on_shallow) + + assert 'git fetch' in str(einfo.value) + + +def test_git_shallow_autocorrect(shallow_wd, recwarn): + git.parse(str(shallow_wd), pre_parse=git.fetch_on_shallow) + msg = recwarn.pop() + assert 'git fetch was used to rectify' in str(msg.message) + git.parse(str(shallow_wd), pre_parse=git.fail_on_shallow) + + def test_find_files_stop_at_root_git(wd): wd.commit_testfile() wd.cwd.ensure('project/setup.cfg') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools_scm-1.11.1/testing/test_mercurial.py new/setuptools_scm-1.15.0/testing/test_mercurial.py --- old/setuptools_scm-1.11.1/testing/test_mercurial.py 2016-06-12 23:09:53.000000000 +0200 +++ new/setuptools_scm-1.15.0/testing/test_mercurial.py 2016-10-20 23:55:22.000000000 +0200 @@ -65,6 +65,12 @@ wd.commit_testfile() assert wd.version.startswith('0.2.dev1+') + # several tags + wd('hg up') + wd('hg tag v0.2 -u test -d "0 0"') + wd('hg tag v0.3 -u test -d "0 0" -r v0.2') + assert wd.version == '0.3' + def test_version_from_archival(wd): # entrypoints are unordered, @@ -93,5 +99,5 @@ wd.commit_testfile() wd('hg up 0') wd.commit_testfile() - wd('hg merge') + wd('hg merge --tool :merge') assert wd.version is not None
participants (1)
-
root@hilbert.suse.de