From 548e587d8685893a28ecbaf86cc8e4481f307389 Mon Sep 17 00:00:00 2001
From: Zooko O'Whielacronx <zooko@zooko.com>
Date: Tue, 21 Sep 2010 00:30:46 -0700
Subject: [PATCH] setup: upgrade bundled copy of darcsver to v1.6.3

---
 darcsver-1.5.1.egg/EGG-INFO/PKG-INFO          |  32 -----
 darcsver-1.5.1.egg/EGG-INFO/entry_points.txt  |   6 -
 darcsver-1.6.3.egg/EGG-INFO/PKG-INFO          | 121 ++++++++++++++++++
 .../EGG-INFO/SOURCES.txt                      |   3 +-
 .../EGG-INFO/dependency_links.txt             |   0
 darcsver-1.6.3.egg/EGG-INFO/entry_points.txt  |  10 ++
 .../EGG-INFO/not-zip-safe                     |   0
 .../EGG-INFO/top_level.txt                    |   0
 .../darcsver/__init__.py                      |   0
 .../darcsver/_version.py                      |   5 +-
 .../darcsver/darcsvermodule.py                | 106 ++++++++-------
 .../darcsver/setuptools_command.py            |  58 ++++++++-
 .../scripts/__init__.py                       |   0
 .../scripts/darcsverscript.py                 |   0
 .../share/doc/python-darcsver/README.txt      |  16 ++-
 15 files changed, 258 insertions(+), 99 deletions(-)
 delete mode 100644 darcsver-1.5.1.egg/EGG-INFO/PKG-INFO
 delete mode 100644 darcsver-1.5.1.egg/EGG-INFO/entry_points.txt
 create mode 100644 darcsver-1.6.3.egg/EGG-INFO/PKG-INFO
 rename {darcsver-1.5.1.egg => darcsver-1.6.3.egg}/EGG-INFO/SOURCES.txt (86%)
 rename {darcsver-1.5.1.egg => darcsver-1.6.3.egg}/EGG-INFO/dependency_links.txt (100%)
 create mode 100644 darcsver-1.6.3.egg/EGG-INFO/entry_points.txt
 rename {darcsver-1.5.1.egg => darcsver-1.6.3.egg}/EGG-INFO/not-zip-safe (100%)
 rename {darcsver-1.5.1.egg => darcsver-1.6.3.egg}/EGG-INFO/top_level.txt (100%)
 rename {darcsver-1.5.1.egg => darcsver-1.6.3.egg}/darcsver/__init__.py (100%)
 rename {darcsver-1.5.1.egg => darcsver-1.6.3.egg}/darcsver/_version.py (92%)
 rename {darcsver-1.5.1.egg => darcsver-1.6.3.egg}/darcsver/darcsvermodule.py (65%)
 rename {darcsver-1.5.1.egg => darcsver-1.6.3.egg}/darcsver/setuptools_command.py (57%)
 rename {darcsver-1.5.1.egg => darcsver-1.6.3.egg}/scripts/__init__.py (100%)
 rename {darcsver-1.5.1.egg => darcsver-1.6.3.egg}/scripts/darcsverscript.py (100%)
 rename {darcsver-1.5.1.egg => darcsver-1.6.3.egg}/share/doc/python-darcsver/README.txt (74%)

diff --git a/darcsver-1.5.1.egg/EGG-INFO/PKG-INFO b/darcsver-1.5.1.egg/EGG-INFO/PKG-INFO
deleted file mode 100644
index 1cc78cc7..00000000
--- a/darcsver-1.5.1.egg/EGG-INFO/PKG-INFO
+++ /dev/null
@@ -1,32 +0,0 @@
-Metadata-Version: 1.0
-Name: darcsver
-Version: 1.5.1
-Summary: generate a version number from darcs history
-Home-page: http://allmydata.org/trac/darcsver
-Author: Zooko O'Whielacronx
-Author-email: zooko@zooko.com
-License: BSD
-Description: UNKNOWN
-Keywords: distutils setuptools plugin setup darcs
-Platform: UNKNOWN
-Classifier: Framework :: Setuptools Plugin
-Classifier: Development Status :: 5 - Production/Stable
-Classifier: License :: OSI Approved :: BSD License
-Classifier: License :: DFSG approved
-Classifier: Intended Audience :: Developers
-Classifier: Operating System :: Microsoft
-Classifier: Operating System :: Microsoft :: Windows
-Classifier: Operating System :: Unix
-Classifier: Operating System :: POSIX :: Linux
-Classifier: Operating System :: POSIX
-Classifier: Operating System :: MacOS :: MacOS X
-Classifier: Operating System :: Microsoft :: Windows :: Windows NT/2000
-Classifier: Operating System :: OS Independent
-Classifier: Natural Language :: English
-Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.4
-Classifier: Programming Language :: Python :: 2.5
-Classifier: Programming Language :: Python :: 2.6
-Classifier: Topic :: Utilities
-Classifier: Topic :: Software Development :: Libraries
diff --git a/darcsver-1.5.1.egg/EGG-INFO/entry_points.txt b/darcsver-1.5.1.egg/EGG-INFO/entry_points.txt
deleted file mode 100644
index 23d63651..00000000
--- a/darcsver-1.5.1.egg/EGG-INFO/entry_points.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-[console_scripts]
-darcsver = scripts.darcsverscript:main
-
-[distutils.commands]
-darcsver = darcsver.setuptools_command:DarcsVer
-
diff --git a/darcsver-1.6.3.egg/EGG-INFO/PKG-INFO b/darcsver-1.6.3.egg/EGG-INFO/PKG-INFO
new file mode 100644
index 00000000..0bee80ff
--- /dev/null
+++ b/darcsver-1.6.3.egg/EGG-INFO/PKG-INFO
@@ -0,0 +1,121 @@
+Metadata-Version: 1.0
+Name: darcsver
+Version: 1.6.3
+Summary: generate a version number from darcs history
+Home-page: http://tahoe-lafs.org/trac/darcsver
+Author: Zooko O'Whielacronx
+Author-email: zooko@zooko.com
+License: BSD
+Description: darcsver - generate version numbers from darcs revision control history
+        =======================================================================
+        
+        What Does It Do
+        ---------------
+        
+        Create files containing version numbers, based upon the latest darcs
+        release tag.
+        
+        If your source tree is coming from darcs (i.e. it is in a darcs
+        repository), this tool will determine the most recent release tag,
+        count the patches that have been applied since then, and compute a
+        version number to be written into _version.py (and optionally other
+        version files). This version number will be available by doing:
+        
+        from your_package_name import __version__
+        
+        Source trees that do not come from darcs (e.g. release tarballs, nightly
+        tarballs) and are not within a darcs repository should instead, come with a
+        _version.py that was generated before the tarball was produced. In this case,
+        this tool will quietly exit without modifying the existing _version.py .
+        
+        'release tags' are tags in the source repository that match the following
+        regexp:
+        
+        ^your_package_name-(\d+)(\.(\d+)(\.(\d+))?)?((a|b|c|rc)(\d+))?
+        
+        
+        Installation
+        ------------
+        
+        With easy_install:
+        
+        easy_install darcsver
+        
+        Alternative manual installation:
+        
+        tar -zxvf darcsver-X.Y.Z.tar.gz
+        cd darcsver-X.Y.Z
+        python setup.py install
+        
+        Where X.Y.Z is a version number.
+        
+        Alternative to make a specific package use darcsver without installing
+        darcsver into the system:
+        
+        Put "setup_requires=['darcsver']" in the call to setup() in the
+        package's setup.py file.
+        
+        
+        Usage
+        -----
+        
+        There are two ways to use this: the command-line tool and the
+        setuptools plugin.
+        
+        To use the command-line tool, execute it as:
+        
+        darcsver $PACKAGE_NAME $PATH_TO_VERSION_PY
+        
+        
+        To use the setuptools plugin (which enables you to write "./setup.py
+        darcsver" and which cleverly figures out where the _version.py file
+        ought to go), you must first package your python module with
+        `setup.py` and use setuptools.
+        
+        The former is well documented in the distutils manual:
+        
+        http://docs.python.org/dist/dist.html
+        
+        To use setuptools instead of distutils, just edit `setup.py` and
+        change
+        
+        from distutils.core import setup
+        
+        to
+        
+        from setuptools import setup
+        
+        
+        References
+        ----------
+        
+        How to distribute Python modules with Distutils:
+        
+        http://docs.python.org/dist/dist.html
+        
+        
+        Setuptools complete manual:
+        
+        http://peak.telecommunity.com/DevCenter/setuptools
+        
+        
+        Thanks to Yannick Gingras for providing the prototype for this
+        README.txt.
+        
+Keywords: distutils setuptools plugin setup darcs
+Platform: UNKNOWN
+Classifier: Framework :: Setuptools Plugin
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: License :: OSI Approved :: BSD License
+Classifier: License :: DFSG approved
+Classifier: Intended Audience :: Developers
+Classifier: Operating System :: OS Independent
+Classifier: Natural Language :: English
+Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 2
+Classifier: Programming Language :: Python :: 2.4
+Classifier: Programming Language :: Python :: 2.5
+Classifier: Programming Language :: Python :: 2.6
+Classifier: Programming Language :: Python :: 2.7
+Classifier: Topic :: Utilities
+Classifier: Topic :: Software Development :: Libraries
diff --git a/darcsver-1.5.1.egg/EGG-INFO/SOURCES.txt b/darcsver-1.6.3.egg/EGG-INFO/SOURCES.txt
similarity index 86%
rename from darcsver-1.5.1.egg/EGG-INFO/SOURCES.txt
rename to darcsver-1.6.3.egg/EGG-INFO/SOURCES.txt
index e6b4b543..38380a44 100644
--- a/darcsver-1.5.1.egg/EGG-INFO/SOURCES.txt
+++ b/darcsver-1.6.3.egg/EGG-INFO/SOURCES.txt
@@ -1,6 +1,5 @@
 README.txt
 TODO
-setup.cfg
 setup.py
 darcsver/__init__.py
 darcsver/_version.py
@@ -12,5 +11,7 @@ darcsver.egg-info/dependency_links.txt
 darcsver.egg-info/entry_points.txt
 darcsver.egg-info/not-zip-safe
 darcsver.egg-info/top_level.txt
+darcsver/test/__init__.py
+darcsver/test/test_darcsver.py
 scripts/__init__.py
 scripts/darcsverscript.py
\ No newline at end of file
diff --git a/darcsver-1.5.1.egg/EGG-INFO/dependency_links.txt b/darcsver-1.6.3.egg/EGG-INFO/dependency_links.txt
similarity index 100%
rename from darcsver-1.5.1.egg/EGG-INFO/dependency_links.txt
rename to darcsver-1.6.3.egg/EGG-INFO/dependency_links.txt
diff --git a/darcsver-1.6.3.egg/EGG-INFO/entry_points.txt b/darcsver-1.6.3.egg/EGG-INFO/entry_points.txt
new file mode 100644
index 00000000..569b4e41
--- /dev/null
+++ b/darcsver-1.6.3.egg/EGG-INFO/entry_points.txt
@@ -0,0 +1,10 @@
+[distutils.setup_keywords]
+versionbodies = darcsver.setuptools_command:validate_versionbodies
+versionfiles = darcsver.setuptools_command:validate_versionfiles
+
+[console_scripts]
+darcsver = scripts.darcsverscript:main
+
+[distutils.commands]
+darcsver = darcsver.setuptools_command:DarcsVer
+
diff --git a/darcsver-1.5.1.egg/EGG-INFO/not-zip-safe b/darcsver-1.6.3.egg/EGG-INFO/not-zip-safe
similarity index 100%
rename from darcsver-1.5.1.egg/EGG-INFO/not-zip-safe
rename to darcsver-1.6.3.egg/EGG-INFO/not-zip-safe
diff --git a/darcsver-1.5.1.egg/EGG-INFO/top_level.txt b/darcsver-1.6.3.egg/EGG-INFO/top_level.txt
similarity index 100%
rename from darcsver-1.5.1.egg/EGG-INFO/top_level.txt
rename to darcsver-1.6.3.egg/EGG-INFO/top_level.txt
diff --git a/darcsver-1.5.1.egg/darcsver/__init__.py b/darcsver-1.6.3.egg/darcsver/__init__.py
similarity index 100%
rename from darcsver-1.5.1.egg/darcsver/__init__.py
rename to darcsver-1.6.3.egg/darcsver/__init__.py
diff --git a/darcsver-1.5.1.egg/darcsver/_version.py b/darcsver-1.6.3.egg/darcsver/_version.py
similarity index 92%
rename from darcsver-1.5.1.egg/darcsver/_version.py
rename to darcsver-1.6.3.egg/darcsver/_version.py
index b7045d2c..9d41f7dd 100644
--- a/darcsver-1.5.1.egg/darcsver/_version.py
+++ b/darcsver-1.6.3.egg/darcsver/_version.py
@@ -1,11 +1,12 @@
 
-# This is the version of this tree, as created by setup.py darcsver from the Darcs patch
+# This is the version of this tree, as created by setup.py darcsver from the darcs patch
 # information: the main version number is taken from the most recent release
 # tag. If some patches have been added since the last release, this will have a
 # -NN "build number" suffix, or else a -rNN "revision number" suffix. Please see
 # pyutil.version_class for a description of what the different fields mean.
 
-verstr = "1.5.1"
+__pkgname__ = "darcsver"
+verstr = "1.6.3"
 try:
     from pyutil.version_class import Version as pyutil_Version
     __version__ = pyutil_Version(verstr)
diff --git a/darcsver-1.5.1.egg/darcsver/darcsvermodule.py b/darcsver-1.6.3.egg/darcsver/darcsvermodule.py
similarity index 65%
rename from darcsver-1.5.1.egg/darcsver/darcsvermodule.py
rename to darcsver-1.6.3.egg/darcsver/darcsvermodule.py
index 6d1ded03..4f03572e 100644
--- a/darcsver-1.5.1.egg/darcsver/darcsvermodule.py
+++ b/darcsver-1.6.3.egg/darcsver/darcsvermodule.py
@@ -1,18 +1,25 @@
 import os, string, sys, re
 import xml.dom.minidom
-import xml.parsers.expat
-from subprocess import Popen, PIPE
+import subprocess
+PIPE=subprocess.PIPE
 from distutils import log
 
+def all(iterable):
+    for thing in iterable:
+        if not thing:
+            return False
+    return True
+
+OUR_VERSION_BASE_RE_STR="(\d+)(\.(\d+)(\.(\d+))?)?((a|b|c)(\d+))?(\.dev(\d+))?"
 try:
     # If we can import pyutil.version_class then use its regex.
     from pyutil import version_class
     VERSION_BASE_RE_STR = version_class.VERSION_BASE_RE_STR
-except ImportError:
+except (ImportError, AttributeError):
     # Else (perhaps a bootstrapping problem),then we'll use this
     # regex, which was copied from the pyutil source code on
-    # 2007-10-30.
-    VERSION_BASE_RE_STR="(\d+)(\.(\d+)(\.(\d+))?)?((a|b|c)(\d+))?"
+    # 2010-09-02.
+    VERSION_BASE_RE_STR=OUR_VERSION_BASE_RE_STR
 
 def get_text(nodelist):
     rc = ""
@@ -22,26 +29,30 @@ def get_text(nodelist):
     return rc
 
 VERSION_BODY = '''
-# This is the version of this tree, as created by %s from the Darcs patch
+# This is the version of this tree, as created by %(versiontool)s from the darcs patch
 # information: the main version number is taken from the most recent release
 # tag. If some patches have been added since the last release, this will have a
 # -NN "build number" suffix, or else a -rNN "revision number" suffix. Please see
 # pyutil.version_class for a description of what the different fields mean.
 
-verstr = "%s"
+__pkgname__ = "%(pkgname)s"
+verstr = "%(pkgversion)s"
 try:
     from pyutil.version_class import Version as pyutil_Version
     __version__ = pyutil_Version(verstr)
 except (ImportError, ValueError):
-    # Maybe there is no pyutil installed, or this may be an older version of
-    # pyutil.version_class which does not support SVN-alike revision numbers.
+    # Maybe there is no pyutil installed.
     from distutils.version import LooseVersion as distutils_Version
     __version__ = distutils_Version(verstr)
 '''
 
-def write_version_py(verstr, outfname, EXE_NAME):
+def write_version_py(verstr, outfname, EXE_NAME, version_body, pkgname):
     f = open(outfname, "wt+")
-    f.write(VERSION_BODY % (EXE_NAME, verstr,))
+    f.write(version_body % {
+            'versiontool': EXE_NAME,
+            'pkgversion': verstr,
+            'pkgname': pkgname,
+            })
     f.close()
 
 def read_version_py(infname):
@@ -55,7 +66,7 @@ def read_version_py(infname):
         if mo:
             return mo.group(1)
 
-def update(pkgname, verfilename, revision_number=False, loud=False, abort_if_snapshot=False, EXE_NAME="darcsver"):
+def update(pkgname, verfilename, revision_number=False, loud=False, abort_if_snapshot=False, EXE_NAME="darcsver", version_body=VERSION_BODY):
     """
     @param revision_number If true, count the total number of patches in all
     history.  If false, count the total number of patches since the most recent
@@ -63,14 +74,21 @@ def update(pkgname, verfilename, revision_number=False, loud=False, abort_if_sna
 
     Returns a tuple of (exit code, new version string).
     """
+    if isinstance(verfilename, basestring):
+        verfilenames = [verfilename]
+    else:
+        verfilenames = verfilename
+    if isinstance(version_body, basestring):
+        verbodies = [version_body]
+    else:
+        verbodies = version_body
     rc = -1
-    cmd = ["changes", "--xml-output"]
-    if not revision_number:
-        cmd.append("--from-tag=^%s" % (pkgname,))
 
-    errput = None
+    # First we try "darcs query repo" because if that fails then we
+    # won't try "darcs changes" at all, because "darcs changes" emits
+    # an ugly error message when run in not-a-repo.
     try:
-        p = Popen(["darcs"] + cmd, stdout=PIPE, stderr=PIPE, universal_newlines=True)
+        p = subprocess.Popen(["darcs", 'query', 'repo'], stdout=PIPE, stderr=PIPE, universal_newlines=True)
     except OSError, ose:
         if ose.errno == 2 and '~' in os.environ['PATH']:
             expanded_path = os.environ['PATH'].replace('~', os.path.expanduser('~'))
@@ -82,29 +100,28 @@ def update(pkgname, verfilename, revision_number=False, loud=False, abort_if_sna
     else:
         (output, errput) = p.communicate()
         rc = p.returncode
-    if rc != 0:
+
+    if rc == 0:
+        cmd = ["changes", "--xml-output"]
+        if not revision_number:
+            cmd.append("--from-tag=^%s" % (pkgname,))
+        errput = None
         try:
-            p = Popen(["realdarcs.exe"] + cmd, stdout=PIPE, stderr=PIPE, universal_newlines=True)
-        except OSError, ose:
-            if ose.errno == 2 and '~' in os.environ['PATH']:
-                expanded_path = os.environ['PATH'].replace('~', os.path.expanduser('~'))
-                msg = ("WARNING: 'realdarcs.exe' was not found. However '~' was found in your PATH. \n"
-                       "Please note that bugs in python cause it to fail to traverse '~' in \n"
-                       "the user's PATH.  Please fix your path, e.g. \nPATH=%s" )
-                log.warn(msg % (expanded_path,))
+            p = subprocess.Popen(["darcs"] + cmd, stdout=PIPE, stderr=PIPE, universal_newlines=True)
+        except OSError:
             pass
         else:
             (output, errput) = p.communicate()
             rc = p.returncode
-        if rc != 0:
-            if errput:
+            if rc != 0 and errput:
                 log.info("%s: darcs wrote to stderr: '%s'" % (EXE_NAME, errput,))
-            if os.path.exists(verfilename):
-                log.info("%s: Failure from attempt to find version tags with 'darcs changes', and %s already exists, so leaving it alone." % (EXE_NAME, verfilename,))
-                return (0, read_version_py(verfilename))
-            else:
-                log.warn("%s: Failure from attempt to find version tags with 'darcs changes', and %s doesn't exist." % (EXE_NAME, verfilename))
-            return (rc, None)
+    else:
+        if all([os.path.exists(vfn) for vfn in verfilenames]):
+            log.info("%s: using extant version file %s" % (EXE_NAME, verfilenames))
+            return (0, read_version_py(verfilenames[0]))
+        else:
+            log.warn("%s: didn't find version tags with darcs, and %s don't exist." % (EXE_NAME, verfilenames))
+        return (rc, None)
 
     # Filter out bad chars that can cause the XML parser to give up in despair.
     # (Thanks to lelit of the tailor project and ndurner and warner for this hack.)
@@ -115,15 +132,11 @@ def update(pkgname, verfilename, revision_number=False, loud=False, abort_if_sna
     # strip off trailing warning messages that darcs 2.3.1 writes to stdout
     endi = output.find("</changelog>")+len("</changelog>")
     output = output[:endi]
-    try:
-        doc = xml.dom.minidom.parseString(output)
-    except xml.parsers.expat.ExpatError, le:
-        le.args = tuple(le.args + (output,))
-        raise
+    doc = xml.dom.minidom.parseString(output)
 
     changelog = doc.getElementsByTagName("changelog")[0]
     patches = changelog.getElementsByTagName("patch")
-    regexstr = "^TAG %s-(%s)" % (pkgname, VERSION_BASE_RE_STR,)
+    regexstr = "^TAG %s-(%s)$" % (pkgname, VERSION_BASE_RE_STR)
     version_re = re.compile(regexstr)
     last_tag = None
     count_since_last_patch = 0
@@ -151,11 +164,11 @@ def update(pkgname, verfilename, revision_number=False, loud=False, abort_if_sna
     if not last_tag:
         if errput:
             log.info("%s: darcs wrote to stderr: '%s'" % (EXE_NAME, errput,))
-        if os.path.exists(verfilename):
-            log.warn("%s: I'm unable to find a tag in the darcs history matching \"%s\", so I'm leaving %s alone." % (EXE_NAME, regexstr, verfilename,))
-            return (0, read_version_py(verfilename))
+        if all([os.path.exists(vfn) for vfn in verfilenames]):
+            log.warn("%s: I'm unable to find a tag in the darcs history matching \"%s\", so I'm leaving %s alone." % (EXE_NAME, regexstr, verfilenames,))
+            return (0, read_version_py(verfilenames[0]))
         else:
-            log.warn("%s: I'm unable to find a tag in the darcs history matching \"%s\", and %s doesn't exist." % (EXE_NAME, regexstr, verfilename,))
+            log.warn("%s: I'm unable to find a tag in the darcs history matching \"%s\", and %s don't exist." % (EXE_NAME, regexstr, verfilenames,))
             return (0, None)
 
     if revision_number:
@@ -173,6 +186,7 @@ def update(pkgname, verfilename, revision_number=False, loud=False, abort_if_sna
             # this is a release
             verstr = last_tag
 
-    write_version_py(verstr, verfilename, EXE_NAME)
-    log.info("%s: wrote '%s' into %s" % (EXE_NAME, verstr, verfilename,))
+    for verfn, verbod in zip(verfilenames, verbodies):
+        write_version_py(verstr, verfn, EXE_NAME, verbod, pkgname)
+        log.info("%s: wrote '%s' into %s" % (EXE_NAME, verstr, verfn,))
     return (0, verstr)
diff --git a/darcsver-1.5.1.egg/darcsver/setuptools_command.py b/darcsver-1.6.3.egg/darcsver/setuptools_command.py
similarity index 57%
rename from darcsver-1.5.1.egg/darcsver/setuptools_command.py
rename to darcsver-1.6.3.egg/darcsver/setuptools_command.py
index d556d7b7..44fd50c7 100644
--- a/darcsver-1.5.1.egg/darcsver/setuptools_command.py
+++ b/darcsver-1.6.3.egg/darcsver/setuptools_command.py
@@ -4,6 +4,44 @@ import setuptools
 
 from darcsver import darcsvermodule
 
+from distutils.errors import DistutilsSetupError
+
+def validate_string_or_iter_of_strings(dist, attr, value):
+    # value is required to be a string or else a list of strings
+    if isinstance(value, basestring):
+        return
+    try:
+        for thing in value:
+            if not isinstance(thing, basestring):
+                raise DistutilsSetupError("%r is required to be a string or an iterable of strings (got %r)" % (attr, value))
+    except TypeError:
+        raise DistutilsSetupError("%r is required to be a string or an iterable of strings (got %r)" % (attr, value))
+
+def validate_versionfiles(dist, attr, value):
+    return validate_string_or_iter_of_strings(dist, attr, value)
+
+def validate_versionbodies(dist, attr, value):
+    return validate_string_or_iter_of_strings(dist, attr, value)
+
+PYTHON_VERSION_BODY='''
+# This is the version of this tree, as created by %(versiontool)s from the darcs patch
+# information: the main version number is taken from the most recent release
+# tag. If some patches have been added since the last release, this will have a
+# -NN "build number" suffix, or else a -rNN "revision number" suffix. Please see
+# pyutil.version_class for a description of what the different fields mean.
+
+__pkgname__ = "%(pkgname)s"
+verstr = "%(pkgversion)s"
+try:
+    from pyutil.version_class import Version as pyutil_Version
+    __version__ = pyutil_Version(verstr)
+except (ImportError, ValueError):
+    # Maybe there is no pyutil installed, or this may be an older version of
+    # pyutil.version_class which does not support SVN-alike revision numbers.
+    from distutils.version import LooseVersion as distutils_Version
+    __version__ = distutils_Version(verstr)
+'''
+
 class DarcsVer(setuptools.Command):
     description = "generate a version number from darcs history"
     user_options = [
@@ -23,7 +61,16 @@ class DarcsVer(setuptools.Command):
         if self.project_name is None:
             self.project_name = self.distribution.get_name()
 
-        if self.version_file is None:
+        # If the user passed --version-file on the cmdline, override
+        # the setup.py's versionfiles argument.
+        if self.version_file is not None:
+            self.distribution.versionfiles = [self.version_file]
+
+        if self.abort_if_snapshot is None:
+            self.abort_if_snapshot=False
+
+    def run(self):
+        if self.distribution.versionfiles is None:
             toppackage = ''
             # If there is a package with the same name as the project name and
             # there is a directory by that name then use that.
@@ -60,11 +107,10 @@ class DarcsVer(setuptools.Command):
                         srcdir = self.distribution.package_dir.get('', '')
                 packagedir = os.path.join(srcdir, toppackage)
 
-            self.version_file = os.path.join(packagedir, '_version.py')
+            self.distribution.versionfiles = [os.path.join(packagedir, '_version.py')]
 
-        if self.abort_if_snapshot is None:
-            self.abort_if_snapshot=False
+        if self.distribution.versionbodies is None:
+            self.distribution.versionbodies = [PYTHON_VERSION_BODY]
 
-    def run(self):
-        (rc, verstr) = darcsvermodule.update(self.project_name, self.version_file, self.count_all_patches, abort_if_snapshot=self.abort_if_snapshot, EXE_NAME="setup.py darcsver")
+        (rc, verstr) = darcsvermodule.update(self.project_name, self.distribution.versionfiles, self.count_all_patches, abort_if_snapshot=self.abort_if_snapshot, EXE_NAME="setup.py darcsver", version_body=self.distribution.versionbodies)
         self.distribution.metadata.version = verstr
diff --git a/darcsver-1.5.1.egg/scripts/__init__.py b/darcsver-1.6.3.egg/scripts/__init__.py
similarity index 100%
rename from darcsver-1.5.1.egg/scripts/__init__.py
rename to darcsver-1.6.3.egg/scripts/__init__.py
diff --git a/darcsver-1.5.1.egg/scripts/darcsverscript.py b/darcsver-1.6.3.egg/scripts/darcsverscript.py
similarity index 100%
rename from darcsver-1.5.1.egg/scripts/darcsverscript.py
rename to darcsver-1.6.3.egg/scripts/darcsverscript.py
diff --git a/darcsver-1.5.1.egg/share/doc/python-darcsver/README.txt b/darcsver-1.6.3.egg/share/doc/python-darcsver/README.txt
similarity index 74%
rename from darcsver-1.5.1.egg/share/doc/python-darcsver/README.txt
rename to darcsver-1.6.3.egg/share/doc/python-darcsver/README.txt
index e2e73812..8f0ffa76 100644
--- a/darcsver-1.5.1.egg/share/doc/python-darcsver/README.txt
+++ b/darcsver-1.6.3.egg/share/doc/python-darcsver/README.txt
@@ -1,13 +1,17 @@
+darcsver - generate version numbers from darcs revision control history
+=======================================================================
 
 What Does It Do
 ---------------
 
-Create _version.py, based upon the latest darcs release tag.
+Create files containing version numbers, based upon the latest darcs
+release tag.
 
-If your source tree is coming from darcs (i.e. it is in a darcs repository),
-this tool will determine the most recent release tag, count the patches that
-have been applied since then, and compute a version number to be written into
-_version.py . This version number will be available by doing:
+If your source tree is coming from darcs (i.e. it is in a darcs
+repository), this tool will determine the most recent release tag,
+count the patches that have been applied since then, and compute a
+version number to be written into _version.py (and optionally other
+version files). This version number will be available by doing:
 
  from your_package_name import __version__
 
@@ -19,7 +23,7 @@ this tool will quietly exit without modifying the existing _version.py .
 'release tags' are tags in the source repository that match the following
 regexp:
 
- ^your_package_name-\d+\.\d+(\.\d+)?((a|b|c)(\d+)?)?\w*$
+ ^your_package_name-(\d+)(\.(\d+)(\.(\d+))?)?((a|b|c|rc)(\d+))?
 
 
 Installation
-- 
2.45.2