Hello community,

here is the log from the commit of package python-setuptools_scm for 
openSUSE:Factory checked in at 2018-03-29 11:48:14
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-setuptools_scm (Old)
 and      /work/SRC/openSUSE:Factory/.python-setuptools_scm.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-setuptools_scm"

Thu Mar 29 11:48:14 2018 rev:12 rq:590817 version:1.17.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-setuptools_scm/python-setuptools_scm.changes  
    2018-03-12 12:05:36.808589878 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-setuptools_scm.new/python-setuptools_scm.changes
 2018-03-29 11:48:15.834265812 +0200
@@ -1,0 +2,28 @@
+Fri Mar 23 23:59:40 UTC 2018 - [email protected]
+
+- update to version 1.17.0:
+  * fix regression in git support - use a function to ensure it works
+    in egg isntalled mode
+  * actually fail if file finding fails in order to see broken setups
+    instead of generating broken dists (thanks Mehdi ABAAKOUK for both)
+
+- changes from version 1.16.2:
+  * fix regression in handling git export ignores (thanks Mehdi
+    ABAAKOUK)
+
+- changes from version 1.16.1:
+  * fix regression in support for old setuptools versions (thanks
+    Marco Clemencic)
+
+- changes from version 1.16.0:
+  * drop support for eol python versions
+  * #214 - fix missuse in surogate-escape api
+  * add the node-and-timestamp local version sheme
+  * respect git export ignores
+  * avoid shlex.split on windows
+  * fix #218 - better handling of mercurial edge-cases with tag
+    commits being considered as the tagged commit
+  * fix #223 - remove the dependency on the interal SetupttoolsVersion
+    as it was removed after long-standing deprecation
+
+-------------------------------------------------------------------
@@ -9,0 +38,11 @@
+
+-------------------------------------------------------------------
+Sun Jan 28 18:50:36 UTC 2018 - [email protected]
+
+- specfile:
+  * update copyright year
+
+- update to version 1.15.7:
+  * Fix #174 with #207: Re-use samefile backport as developed in
+    jaraco.windows, and only use the backport where samefile is not
+    available.

Old:
----
  setuptools_scm-1.15.6.tar.gz

New:
----
  setuptools_scm-1.17.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-setuptools_scm.spec ++++++
--- /var/tmp/diff_new_pack.Pbz7LN/_old  2018-03-29 11:48:16.378246213 +0200
+++ /var/tmp/diff_new_pack.Pbz7LN/_new  2018-03-29 11:48:16.378246213 +0200
@@ -19,7 +19,7 @@
 %bcond_with test
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-setuptools_scm
-Version:        1.15.6
+Version:        1.17.0
 Release:        0
 Summary:        Manage your versions by scm tags
 License:        MIT

++++++ setuptools_scm-1.15.6.tar.gz -> setuptools_scm-1.17.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools_scm-1.15.6/.gitignore 
new/setuptools_scm-1.17.0/.gitignore
--- old/setuptools_scm-1.15.6/.gitignore        2017-06-15 21:24:23.000000000 
+0200
+++ new/setuptools_scm-1.17.0/.gitignore        2018-03-20 11:15:19.000000000 
+0100
@@ -6,6 +6,9 @@
 ## Directory-based project format:
 .idea/
 
+### Other editors
+.*.swp
+
 
 ### Python template
 # Byte-compiled / optimized
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools_scm-1.15.6/.travis.yml 
new/setuptools_scm-1.17.0/.travis.yml
--- old/setuptools_scm-1.15.6/.travis.yml       2017-06-15 21:24:23.000000000 
+0200
+++ new/setuptools_scm-1.17.0/.travis.yml       2018-03-20 11:15:19.000000000 
+0100
@@ -1,21 +1,20 @@
 language: python
 sudo: false
 python:
-- '2.6'
 - '2.7'
-- '3.3'
 - '3.4'
 - '3.5'
 - '3.6'
+#- '3.7'
 env:
 - TOXENV=py-test
 
 matrix:
   include:
-    - python: '2.7'
-      env: TOXENV=flake8
     - python: '3.5'
       env: TOXENV=flake8
+    - python: '3.5'
+      env: TOXENV=check_readme
     - python: '2.7'
       env: SELFINSTALL=1
     - python: '3.5'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools_scm-1.15.6/CHANGELOG.rst 
new/setuptools_scm-1.17.0/CHANGELOG.rst
--- old/setuptools_scm-1.15.6/CHANGELOG.rst     2017-06-15 21:24:23.000000000 
+0200
+++ new/setuptools_scm-1.17.0/CHANGELOG.rst     2018-03-20 11:15:19.000000000 
+0100
@@ -1,3 +1,44 @@
+v1.17.0
+========
+
+* fix regression in git support - use a function to ensure it works in egg 
isntalled mode
+* actually fail if file finding fails in order to see broken setups instead of 
generating broken dists
+
+  (thanks Mehdi ABAAKOUK for both)
+
+
+v1.16.2
+========
+
+* fix regression in handling git export ignores
+  (thanks Mehdi ABAAKOUK)
+
+v1.16.1
+=======
+
+* fix regression in support for old setuptools versions
+  (thanks Marco Clemencic)
+
+
+v1.16.0
+=======
+
+* drop support for eol python versions
+* #214 - fix missuse in surogate-escape api
+* add the node-and-timestamp local version sheme
+* respect git export ignores
+* avoid shlex.split on windows
+* fix #218 - better handling of mercurial edge-cases with tag commits
+  being considered as the tagged commit
+* fix #223 - remove the dependency on the interal SetupttoolsVersion
+  as it was removed after long-standing deprecation
+
+v1.15.7
+======
+
+* Fix #174 with #207: Re-use samefile backport as developed in
+  jaraco.windows, and only use the backport where samefile is
+  not available.
 
 v1.15.6
 =======
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools_scm-1.15.6/PKG-INFO 
new/setuptools_scm-1.17.0/PKG-INFO
--- old/setuptools_scm-1.15.6/PKG-INFO  2017-06-15 21:24:45.000000000 +0200
+++ new/setuptools_scm-1.17.0/PKG-INFO  2018-03-20 11:15:44.000000000 +0100
@@ -1,6 +1,6 @@
-Metadata-Version: 1.1
+Metadata-Version: 1.2
 Name: setuptools_scm
-Version: 1.15.6
+Version: 1.17.0
 Summary: the blessed package to manage your versions by scm tags
 Home-page: https://github.com/pypa/setuptools_scm/
 Author: Ronny Pfannschmidt
@@ -62,14 +62,14 @@
               try:
                   __version__ = get_distribution(__name__).version
               except DistributionNotFound:
-                 # package is not installed
-                 pass
+                  # package is not installed
+                  pass
         
         
         Programmatic usage
         ------------------
         
-        In order to use ``setuptools_scm`` from code that one directory deeper
+        In order to use ``setuptools_scm`` from code that is one directory 
deeper
         than the project's root, you can use:
         
         .. code:: python
@@ -314,10 +314,9 @@
 Classifier: Intended Audience :: Developers
 Classifier: License :: OSI Approved :: MIT License
 Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 2
 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
@@ -325,3 +324,4 @@
 Classifier: Topic :: Software Development :: Version Control
 Classifier: Topic :: System :: Software Distribution
 Classifier: Topic :: Utilities
+Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools_scm-1.15.6/README.rst 
new/setuptools_scm-1.17.0/README.rst
--- old/setuptools_scm-1.15.6/README.rst        2017-06-15 21:24:23.000000000 
+0200
+++ new/setuptools_scm-1.17.0/README.rst        2018-03-20 11:15:19.000000000 
+0100
@@ -54,14 +54,14 @@
       try:
           __version__ = get_distribution(__name__).version
       except DistributionNotFound:
-         # package is not installed
-         pass
+          # package is not installed
+          pass
 
 
 Programmatic usage
 ------------------
 
-In order to use ``setuptools_scm`` from code that one directory deeper
+In order to use ``setuptools_scm`` from code that is one directory deeper
 than the project's root, you can use:
 
 .. code:: python
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools_scm-1.15.6/appveyor.yml 
new/setuptools_scm-1.17.0/appveyor.yml
--- old/setuptools_scm-1.15.6/appveyor.yml      2017-06-15 21:24:23.000000000 
+0200
+++ new/setuptools_scm-1.17.0/appveyor.yml      2018-03-20 11:15:19.000000000 
+0100
@@ -6,12 +6,6 @@
     - PYTHON: "C:\\Python27-x64"
       TOX_ENV: "py-test"
 
-    - PYTHON: "C:\\Python33"
-      TOX_ENV: "py-test"
-      
-    - PYTHON: "C:\\Python33-x64"
-      TOX_ENV: "py-test"
-
     - PYTHON: "C:\\Python34"
       TOX_ENV: "py-test"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools_scm-1.15.6/setup.cfg 
new/setuptools_scm-1.17.0/setup.cfg
--- old/setuptools_scm-1.15.6/setup.cfg 2017-06-15 21:24:45.000000000 +0200
+++ new/setuptools_scm-1.17.0/setup.cfg 2018-03-20 11:15:44.000000000 +0100
@@ -13,5 +13,4 @@
 [egg_info]
 tag_build = 
 tag_date = 0
-tag_svn_revision = 0
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools_scm-1.15.6/setup.py 
new/setuptools_scm-1.17.0/setup.py
--- old/setuptools_scm-1.15.6/setup.py  2017-06-15 21:24:23.000000000 +0200
+++ new/setuptools_scm-1.17.0/setup.py  2018-03-20 11:15:19.000000000 +0100
@@ -82,7 +82,7 @@
 
         [setuptools_scm.files_command]
         .hg = setuptools_scm.hg:FILES_COMMAND
-        .git = setuptools_scm.git:FILES_COMMAND
+        .git = setuptools_scm.git:list_files_in_archive
 
         [setuptools_scm.version_scheme]
         guess-next-dev = setuptools_scm.version:guess_next_dev_version
@@ -90,6 +90,8 @@
 
         [setuptools_scm.local_scheme]
         node-and-date = setuptools_scm.version:get_local_node_and_date
+        node-and-timestamp = \
+        setuptools_scm.version:get_local_node_and_timestamp
         dirty-tag = setuptools_scm.version:get_local_dirty_tag
     """,
     classifiers=[
@@ -97,10 +99,9 @@
         'Intended Audience :: Developers',
         'License :: OSI Approved :: MIT License',
         'Programming Language :: Python',
+        'Programming Language :: Python :: 2',
         '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',
@@ -109,6 +110,7 @@
         'Topic :: System :: Software Distribution',
         'Topic :: Utilities',
     ],
+    python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*',
 )
 
 if __name__ == '__main__':
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools_scm-1.15.6/setuptools_scm/git.py 
new/setuptools_scm-1.17.0/setuptools_scm/git.py
--- old/setuptools_scm-1.15.6/setuptools_scm/git.py     2017-06-15 
21:24:23.000000000 +0200
+++ new/setuptools_scm-1.17.0/setuptools_scm/git.py     2018-03-20 
11:15:19.000000000 +0100
@@ -1,14 +1,19 @@
 from .utils import do_ex, trace, has_command
 from .version import meta
-from os.path import abspath, normcase, realpath, isfile, join
+
+from os.path import isfile, join
+import subprocess
+import tarfile
 import warnings
 
-FILES_COMMAND = 'git ls-files'
-DEFAULT_DESCRIBE = 'git describe --dirty --tags --long --match *.*'
 
+try:
+    from os.path import samefile
+except ImportError:
+    from .win_py31_compat import samefile
 
-def _normalized(path):
-    return normcase(abspath(realpath(path)))
+
+DEFAULT_DESCRIBE = 'git describe --dirty --tags --long --match *.*'
 
 
 class GitWorkdir(object):
@@ -25,7 +30,7 @@
         if ret:
             return
         trace('real root', real_wd)
-        if _normalized(real_wd) != _normalized(wd):
+        if not samefile(real_wd, wd):
             return
 
         return cls(real_wd)
@@ -114,3 +119,13 @@
         return meta(tag, distance=number, node=node, dirty=dirty)
     else:
         return meta(tag, node=node, dirty=dirty)
+
+
+def list_files_in_archive(path):
+    """List the files that 'git archive' generates.
+    """
+    cmd = ['git', 'archive', 'HEAD']
+    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, cwd=path)
+    tf = tarfile.open(fileobj=proc.stdout, mode='r|*')
+    return [member.name for member in tf.getmembers()
+            if member.type != tarfile.DIRTYPE]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools_scm-1.15.6/setuptools_scm/hg.py 
new/setuptools_scm-1.17.0/setuptools_scm/hg.py
--- old/setuptools_scm-1.15.6/setuptools_scm/hg.py      2017-06-15 
21:24:23.000000000 +0200
+++ new/setuptools_scm-1.17.0/setuptools_scm/hg.py      2018-03-20 
11:15:19.000000000 +0100
@@ -8,8 +8,14 @@
 def _hg_tagdist_normalize_tagcommit(root, tag, dist, node):
     dirty = node.endswith('+')
     node = 'h' + node.strip('+')
-    revset = ("(branch(.) and tag({tag!r})::. and file('re:^(?!\.hgtags).*$')"
-              " - tag({tag!r}))").format(tag=tag)
+
+    # Detect changes since the specified tag
+    revset = ("(branch(.)"  # look for revisions in this branch only
+              " and tag({tag!r})::."  # after the last tag
+              # ignore commits that only modify .hgtags and nothing else:
+              " and (merge() or file('re:^(?!\.hgtags).*$'))"
+              " 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}'],
                      root)
@@ -25,11 +31,11 @@
 def parse(root):
     if not has_command('hg'):
         return
-    l = do('hg id -i -t', root).split()
-    if not l:
+    identity_data = do('hg id -i -t', root).split()
+    if not identity_data:
         return
-    node = l.pop(0)
-    tags = tags_to_versions(l)
+    node = 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] == '+'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools_scm-1.15.6/setuptools_scm/integration.py 
new/setuptools_scm-1.17.0/setuptools_scm/integration.py
--- old/setuptools_scm-1.15.6/setuptools_scm/integration.py     2017-06-15 
21:24:23.000000000 +0200
+++ new/setuptools_scm-1.17.0/setuptools_scm/integration.py     2018-03-20 
11:15:19.000000000 +0100
@@ -36,10 +36,8 @@
             else:
                 return command(path)
         except Exception:
-            import traceback
             print("File Finder Failed for %s" % ep)
-            traceback.print_exc()
-            return []
+            raise
 
     else:
         return []
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools_scm-1.15.6/setuptools_scm/utils.py 
new/setuptools_scm-1.17.0/setuptools_scm/utils.py
--- old/setuptools_scm-1.15.6/setuptools_scm/utils.py   2017-06-15 
21:24:23.000000000 +0200
+++ new/setuptools_scm-1.17.0/setuptools_scm/utils.py   2018-03-20 
11:15:19.000000000 +0100
@@ -12,6 +12,8 @@
 
 
 DEBUG = bool(os.environ.get("SETUPTOOLS_SCM_DEBUG"))
+IS_WINDOWS = platform.system() == 'Windows'
+PY2 = sys.version_info < (3,)
 
 
 def trace(*k):
@@ -24,7 +26,7 @@
     if isinstance(str_or_bytes, str):
         return str_or_bytes.strip()
     else:
-        return str_or_bytes.decode('utf-8', 'surogate_escape').strip()
+        return str_or_bytes.decode('utf-8', 'surrogateescape').strip()
 
 
 def _always_strings(env_dict):
@@ -32,9 +34,7 @@
     On Windows and Python 2, environment dictionaries must be strings
     and not unicode.
     """
-    is_windows = platform.system == 'Windows'
-    PY2 = sys.version_info < (3,)
-    if is_windows or PY2:
+    if IS_WINDOWS or PY2:
         env_dict.update(
             (key, str(value))
             for (key, value) in env_dict.items()
@@ -61,7 +61,7 @@
 
 def do_ex(cmd, cwd='.'):
     trace('cmd', repr(cmd))
-    if not isinstance(cmd, (list, tuple)):
+    if os.name == "posix" and not isinstance(cmd, (list, tuple)):
         cmd = shlex.split(cmd)
 
     p = _popen_pipes(cmd, cwd)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools_scm-1.15.6/setuptools_scm/version.py 
new/setuptools_scm-1.17.0/setuptools_scm/version.py
--- old/setuptools_scm-1.15.6/setuptools_scm/version.py 2017-06-15 
21:24:23.000000000 +0200
+++ new/setuptools_scm-1.17.0/setuptools_scm/version.py 2018-03-20 
11:15:19.000000000 +0100
@@ -7,28 +7,36 @@
 from pkg_resources import iter_entry_points
 
 from distutils import log
+from pkg_resources import parse_version
 
-try:
-    from pkg_resources import parse_version, SetuptoolsVersion
-except ImportError as e:
-    parse_version = SetuptoolsVersion = None
+
+def _get_version_class():
+    modern_version = parse_version("1.0")
+    if isinstance(modern_version, tuple):
+        return None
+    else:
+        return type(modern_version)
+
+
+VERSION_CLASS = _get_version_class()
 
 
 def _warn_if_setuptools_outdated():
-    if parse_version is None:
+    if VERSION_CLASS is None:
         log.warn("your setuptools is too old (<12)")
         log.warn("setuptools_scm functionality is degraded")
 
 
 def callable_or_entrypoint(group, callable_or_name):
     trace('ep', (group, callable_or_name))
-    if isinstance(callable_or_name, str):
-        for ep in iter_entry_points(group, callable_or_name):
-            trace("ep found:", ep.name)
-            return ep.load()
-    else:
+
+    if callable(callable_or_name):
         return callable_or_name
 
+    for ep in iter_entry_points(group, callable_or_name):
+        trace("ep found:", ep.name)
+        return ep.load()
+
 
 def tag_to_version(tag):
     trace('tag', tag)
@@ -39,11 +47,11 @@
     # also required for old versions of setuptools
 
     version = tag.rsplit('-', 1)[-1].lstrip('v')
-    if parse_version is None:
+    if VERSION_CLASS is None:
         return version
     version = parse_version(version)
     trace('version', repr(version))
-    if isinstance(version, SetuptoolsVersion):
+    if isinstance(version, VERSION_CLASS):
         return version
 
 
@@ -91,7 +99,7 @@
 def _parse_tag(tag, preformatted):
     if preformatted:
         return tag
-    if SetuptoolsVersion is None or not isinstance(tag, SetuptoolsVersion):
+    if VERSION_CLASS is None or not isinstance(tag, VERSION_CLASS):
         tag = tag_to_version(tag)
     return tag
 
@@ -143,6 +151,20 @@
         return version.format_choice("+{node}", "+{node}.d{time:%Y%m%d}")
 
 
+def get_local_node_and_timestamp(version, fmt='%Y%m%d%H%M%S'):
+    if version.exact or version.node is None:
+        return version.format_choice("",
+                                     "+d{time:"
+                                     + "{fmt}".format(fmt=fmt)
+                                     + "}")
+    else:
+        return version.format_choice("+{node}",
+                                     "+{node}"
+                                     + ".d{time:"
+                                     + "{fmt}".format(fmt=fmt)
+                                     + "}")
+
+
 def get_local_dirty_tag(version):
     return version.format_choice('', '+dirty')
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/setuptools_scm-1.15.6/setuptools_scm/win_py31_compat.py 
new/setuptools_scm-1.17.0/setuptools_scm/win_py31_compat.py
--- old/setuptools_scm-1.15.6/setuptools_scm/win_py31_compat.py 1970-01-01 
01:00:00.000000000 +0100
+++ new/setuptools_scm-1.17.0/setuptools_scm/win_py31_compat.py 2018-03-20 
11:15:19.000000000 +0100
@@ -0,0 +1,214 @@
+"""
+Backport of os.path.samefile for Python prior to 3.2
+on Windows from jaraco.windows 3.8.
+
+DON'T EDIT THIS FILE!
+
+Instead, file tickets and PR's with `jaraco.windows
+<https://github.com/jaraco/jaraco.windows>`_ and request
+a port to setuptools_scm.
+"""
+
+import os
+import nt
+import posixpath
+import ctypes.wintypes
+import sys
+import __builtin__ as builtins
+
+
+##
+# From jaraco.windows.error
+
+def format_system_message(errno):
+       """
+       Call FormatMessage with a system error number to retrieve
+       the descriptive error message.
+       """
+       # first some flags used by FormatMessageW
+       ALLOCATE_BUFFER = 0x100
+       FROM_SYSTEM = 0x1000
+
+       # Let FormatMessageW allocate the buffer (we'll free it below)
+       # Also, let it know we want a system error message.
+       flags = ALLOCATE_BUFFER | FROM_SYSTEM
+       source = None
+       message_id = errno
+       language_id = 0
+       result_buffer = ctypes.wintypes.LPWSTR()
+       buffer_size = 0
+       arguments = None
+       bytes = ctypes.windll.kernel32.FormatMessageW(
+               flags,
+               source,
+               message_id,
+               language_id,
+               ctypes.byref(result_buffer),
+               buffer_size,
+               arguments,
+       )
+       # note the following will cause an infinite loop if GetLastError
+       #  repeatedly returns an error that cannot be formatted, although
+       #  this should not happen.
+       handle_nonzero_success(bytes)
+       message = result_buffer.value
+       ctypes.windll.kernel32.LocalFree(result_buffer)
+       return message
+
+
+class WindowsError(builtins.WindowsError):
+       """
+       More info about errors at
+       http://msdn.microsoft.com/en-us/library/ms681381(VS.85).aspx
+       """
+
+       def __init__(self, value=None):
+               if value is None:
+                       value = ctypes.windll.kernel32.GetLastError()
+               strerror = format_system_message(value)
+               if sys.version_info > (3, 3):
+                       args = 0, strerror, None, value
+               else:
+                       args = value, strerror
+               super(WindowsError, self).__init__(*args)
+
+       @property
+       def message(self):
+               return self.strerror
+
+       @property
+       def code(self):
+               return self.winerror
+
+       def __str__(self):
+               return self.message
+
+       def __repr__(self):
+               return 
'{self.__class__.__name__}({self.winerror})'.format(**vars())
+
+
+def handle_nonzero_success(result):
+       if result == 0:
+               raise WindowsError()
+
+
+##
+# From jaraco.windows.api.filesystem
+
+FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000
+FILE_FLAG_BACKUP_SEMANTICS = 0x2000000
+OPEN_EXISTING = 3
+FILE_ATTRIBUTE_NORMAL = 0x80
+FILE_READ_ATTRIBUTES = 0x80
+INVALID_HANDLE_VALUE = ctypes.wintypes.HANDLE(-1).value
+
+
+class BY_HANDLE_FILE_INFORMATION(ctypes.Structure):
+       _fields_ = [
+               ('file_attributes', ctypes.wintypes.DWORD),
+               ('creation_time', ctypes.wintypes.FILETIME),
+               ('last_access_time', ctypes.wintypes.FILETIME),
+               ('last_write_time', ctypes.wintypes.FILETIME),
+               ('volume_serial_number', ctypes.wintypes.DWORD),
+               ('file_size_high', ctypes.wintypes.DWORD),
+               ('file_size_low', ctypes.wintypes.DWORD),
+               ('number_of_links', ctypes.wintypes.DWORD),
+               ('file_index_high', ctypes.wintypes.DWORD),
+               ('file_index_low', ctypes.wintypes.DWORD),
+       ]
+
+       @property
+       def file_size(self):
+               return (self.file_size_high << 32) + self.file_size_low
+
+       @property
+       def file_index(self):
+               return (self.file_index_high << 32) + self.file_index_low
+
+
+class SECURITY_ATTRIBUTES(ctypes.Structure):
+       _fields_ = (
+               ('length', ctypes.wintypes.DWORD),
+               ('p_security_descriptor', ctypes.wintypes.LPVOID),
+               ('inherit_handle', ctypes.wintypes.BOOLEAN),
+       )
+
+
+LPSECURITY_ATTRIBUTES = ctypes.POINTER(SECURITY_ATTRIBUTES)
+
+
+CreateFile = ctypes.windll.kernel32.CreateFileW
+CreateFile.argtypes = (
+       ctypes.wintypes.LPWSTR,
+       ctypes.wintypes.DWORD,
+       ctypes.wintypes.DWORD,
+       LPSECURITY_ATTRIBUTES,
+       ctypes.wintypes.DWORD,
+       ctypes.wintypes.DWORD,
+       ctypes.wintypes.HANDLE,
+)
+CreateFile.restype = ctypes.wintypes.HANDLE
+
+GetFileInformationByHandle = ctypes.windll.kernel32.GetFileInformationByHandle
+GetFileInformationByHandle.restype = ctypes.wintypes.BOOL
+GetFileInformationByHandle.argtypes = (
+       ctypes.wintypes.HANDLE,
+       ctypes.POINTER(BY_HANDLE_FILE_INFORMATION),
+)
+
+
+##
+# From jaraco.windows.filesystem
+
+def compat_stat(path):
+       """
+       Generate stat as found on Python 3.2 and later.
+       """
+       stat = os.stat(path)
+       info = get_file_info(path)
+       # rewrite st_ino, st_dev, and st_nlink based on file info
+       return nt.stat_result(
+               (stat.st_mode,) +
+               (info.file_index, info.volume_serial_number, 
info.number_of_links) +
+               stat[4:]
+       )
+
+
+def samefile(f1, f2):
+       """
+       Backport of samefile from Python 3.2 with support for Windows.
+       """
+       return posixpath.samestat(compat_stat(f1), compat_stat(f2))
+
+
+def get_file_info(path):
+       # open the file the same way CPython does in posixmodule.c
+       desired_access = FILE_READ_ATTRIBUTES
+       share_mode = 0
+       security_attributes = None
+       creation_disposition = OPEN_EXISTING
+       flags_and_attributes = (
+               FILE_ATTRIBUTE_NORMAL |
+               FILE_FLAG_BACKUP_SEMANTICS |
+               FILE_FLAG_OPEN_REPARSE_POINT
+       )
+       template_file = None
+
+       handle = CreateFile(
+               path,
+               desired_access,
+               share_mode,
+               security_attributes,
+               creation_disposition,
+               flags_and_attributes,
+               template_file,
+       )
+
+       if handle == INVALID_HANDLE_VALUE:
+               raise WindowsError()
+
+       info = BY_HANDLE_FILE_INFORMATION()
+       res = GetFileInformationByHandle(handle, info)
+       handle_nonzero_success(res)
+
+       return info
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/setuptools_scm-1.15.6/setuptools_scm.egg-info/PKG-INFO 
new/setuptools_scm-1.17.0/setuptools_scm.egg-info/PKG-INFO
--- old/setuptools_scm-1.15.6/setuptools_scm.egg-info/PKG-INFO  2017-06-15 
21:24:45.000000000 +0200
+++ new/setuptools_scm-1.17.0/setuptools_scm.egg-info/PKG-INFO  2018-03-20 
11:15:44.000000000 +0100
@@ -1,6 +1,6 @@
-Metadata-Version: 1.1
+Metadata-Version: 1.2
 Name: setuptools-scm
-Version: 1.15.6
+Version: 1.17.0
 Summary: the blessed package to manage your versions by scm tags
 Home-page: https://github.com/pypa/setuptools_scm/
 Author: Ronny Pfannschmidt
@@ -62,14 +62,14 @@
               try:
                   __version__ = get_distribution(__name__).version
               except DistributionNotFound:
-                 # package is not installed
-                 pass
+                  # package is not installed
+                  pass
         
         
         Programmatic usage
         ------------------
         
-        In order to use ``setuptools_scm`` from code that one directory deeper
+        In order to use ``setuptools_scm`` from code that is one directory 
deeper
         than the project's root, you can use:
         
         .. code:: python
@@ -314,10 +314,9 @@
 Classifier: Intended Audience :: Developers
 Classifier: License :: OSI Approved :: MIT License
 Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 2
 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
@@ -325,3 +324,4 @@
 Classifier: Topic :: Software Development :: Version Control
 Classifier: Topic :: System :: Software Distribution
 Classifier: Topic :: Utilities
+Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/setuptools_scm-1.15.6/setuptools_scm.egg-info/SOURCES.txt 
new/setuptools_scm-1.17.0/setuptools_scm.egg-info/SOURCES.txt
--- old/setuptools_scm-1.15.6/setuptools_scm.egg-info/SOURCES.txt       
2017-06-15 21:24:45.000000000 +0200
+++ new/setuptools_scm-1.17.0/setuptools_scm.egg-info/SOURCES.txt       
2018-03-20 11:15:44.000000000 +0100
@@ -17,6 +17,7 @@
 setuptools_scm/integration.py
 setuptools_scm/utils.py
 setuptools_scm/version.py
+setuptools_scm/win_py31_compat.py
 setuptools_scm.egg-info/PKG-INFO
 setuptools_scm.egg-info/SOURCES.txt
 setuptools_scm.egg-info/dependency_links.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/setuptools_scm-1.15.6/setuptools_scm.egg-info/entry_points.txt 
new/setuptools_scm-1.17.0/setuptools_scm.egg-info/entry_points.txt
--- old/setuptools_scm-1.15.6/setuptools_scm.egg-info/entry_points.txt  
2017-06-15 21:24:45.000000000 +0200
+++ new/setuptools_scm-1.17.0/setuptools_scm.egg-info/entry_points.txt  
2018-03-20 11:15:44.000000000 +0100
@@ -16,7 +16,7 @@
 
         [setuptools_scm.files_command]
         .hg = setuptools_scm.hg:FILES_COMMAND
-        .git = setuptools_scm.git:FILES_COMMAND
+        .git = setuptools_scm.git:list_files_in_archive
 
         [setuptools_scm.version_scheme]
         guess-next-dev = setuptools_scm.version:guess_next_dev_version
@@ -24,5 +24,6 @@
 
         [setuptools_scm.local_scheme]
         node-and-date = setuptools_scm.version:get_local_node_and_date
+        node-and-timestamp =         
setuptools_scm.version:get_local_node_and_timestamp
         dirty-tag = setuptools_scm.version:get_local_dirty_tag
     
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools_scm-1.15.6/testing/test_functions.py 
new/setuptools_scm-1.17.0/testing/test_functions.py
--- old/setuptools_scm-1.15.6/testing/test_functions.py 2017-06-15 
21:24:23.000000000 +0200
+++ new/setuptools_scm-1.17.0/testing/test_functions.py 2018-03-20 
11:15:19.000000000 +0100
@@ -1,9 +1,12 @@
 import pytest
+import sys
 import pkg_resources
 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
 
+PY3 = sys.version_info > (2,)
+
 
 class MockTime(object):
     def __format__(self, *k):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools_scm-1.15.6/testing/test_git.py 
new/setuptools_scm-1.17.0/testing/test_git.py
--- old/setuptools_scm-1.15.6/testing/test_git.py       2017-06-15 
21:24:23.000000000 +0200
+++ new/setuptools_scm-1.17.0/testing/test_git.py       2018-03-20 
11:15:19.000000000 +0100
@@ -39,6 +39,12 @@
     assert wd.version.startswith('0.2')
 
 
[email protected](179)
+def test_unicode_version_scheme(wd):
+    scheme = b'guess-next-dev'.decode('ascii')
+    assert wd.get_version(version_scheme=scheme)
+
+
 @pytest.mark.issue(108)
 @pytest.mark.issue(109)
 def test_git_worktree(wd):
@@ -106,3 +112,24 @@
     wd.commit_testfile()
     wd('git tag newstyle-development-started')
     assert wd.version.startswith('0.1.dev1+g')
+
+
+def test_git_archive_export_ignore(wd):
+    wd.write('test1.txt', 'test')
+    wd.write('test2.txt', 'test')
+    wd.write('.git/info/attributes',
+             # Explicitly include test1.txt so that the test is not affected by
+             # a potentially global gitattributes file on the test machine.
+             '/test1.txt -export-ignore\n/test2.txt export-ignore')
+    wd('git add test1.txt test2.txt')
+    wd.commit()
+    assert integration.find_files(str(wd.cwd)) == ['test1.txt']
+
+
[email protected](228)
+def test_git_archive_subdirectory(wd):
+    wd('mkdir foobar')
+    wd.write('foobar/test1.txt', 'test')
+    wd('git add foobar')
+    wd.commit()
+    assert integration.find_files(str(wd.cwd)) == ['foobar/test1.txt']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools_scm-1.15.6/testing/test_mercurial.py 
new/setuptools_scm-1.17.0/testing/test_mercurial.py
--- old/setuptools_scm-1.15.6/testing/test_mercurial.py 2017-06-15 
21:24:23.000000000 +0200
+++ new/setuptools_scm-1.17.0/testing/test_mercurial.py 2018-03-20 
11:15:19.000000000 +0100
@@ -108,3 +108,47 @@
 def test_parse_no_worktree(tmpdir):
     ret = parse(str(tmpdir))
     assert ret is None
+
+
[email protected]
+def version_1_0(wd):
+    wd('hg branch default')
+    wd.commit_testfile()
+    wd('hg tag 1.0 -u test -d "0 0"')
+    return wd
+
+
[email protected]
+def pre_merge_commit_after_tag(wd, version_1_0):
+    wd('hg branch testbranch')
+    wd.write('branchfile', 'branchtext')
+    wd(wd.add_command)
+    wd.commit()
+    wd('hg update default')
+    wd('hg merge testbranch')
+    return wd
+
+
[email protected]("pre_merge_commit_after_tag")
+def test_version_bump_before_merge_commit(wd):
+    assert wd.version.startswith('1.1.dev1+')
+
+
[email protected](219)
[email protected]("pre_merge_commit_after_tag")
+def test_version_bump_from_merge_commit(wd):
+    wd.commit()
+    assert wd.version.startswith('1.1.dev3+')  # issue 219
+
+
[email protected]("version_1_0")
+def test_version_bump_from_commit_including_hgtag_mods(wd):
+    """ Test the case where a commit includes changes to .hgtags and other 
files
+    """
+    with wd.cwd.join('.hgtags').open('a') as tagfile:
+        tagfile.write('0  0\n')
+    wd.write('branchfile', 'branchtext')
+    wd(wd.add_command)
+    assert wd.version.startswith('1.1.dev1+')  # bump from dirty version
+    wd.commit()  # commits both the testfile _and_ .hgtags
+    assert wd.version.startswith('1.1.dev2+')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools_scm-1.15.6/tox.ini 
new/setuptools_scm-1.17.0/tox.ini
--- old/setuptools_scm-1.15.6/tox.ini   2017-06-15 21:24:23.000000000 +0200
+++ new/setuptools_scm-1.17.0/tox.ini   2018-03-20 11:15:19.000000000 +0100
@@ -1,5 +1,5 @@
 [tox]
-envlist=py{27,34}-test,flake8
+envlist=py{27,34,35,36,37}-test,flake8,check_readme
 
 [flake8]
 max-complexity = 10
@@ -18,7 +18,7 @@
     flake8
     mccabe
 commands =
-    flake8 setuptools_scm/ testing/ setup.py
+    flake8 setuptools_scm/ testing/ setup.py 
--exclude=setuptools_scm/win_py31_compat.py
 
 [testenv:check_readme]
 skip_install=True


Reply via email to