mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-01-03 03:36:44 +00:00
setup: bundle a copy of darcsver in unzipped egg form in the root of the Tahoe-LAFS source tree
This is to work-around this Distribute issue: http://bitbucket.org/tarek/distribute/issue/55/revision-control-plugin-automatically-installed-as-a-build-dependency-is-not-present-when-another-build-dependency-is-being
This commit is contained in:
parent
aa258b5800
commit
aff500c01c
32
darcsver-1.5.1-py2.6.egg/EGG-INFO/PKG-INFO
Normal file
32
darcsver-1.5.1-py2.6.egg/EGG-INFO/PKG-INFO
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
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
|
16
darcsver-1.5.1-py2.6.egg/EGG-INFO/SOURCES.txt
Normal file
16
darcsver-1.5.1-py2.6.egg/EGG-INFO/SOURCES.txt
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
README.txt
|
||||||
|
TODO
|
||||||
|
setup.cfg
|
||||||
|
setup.py
|
||||||
|
darcsver/__init__.py
|
||||||
|
darcsver/_version.py
|
||||||
|
darcsver/darcsvermodule.py
|
||||||
|
darcsver/setuptools_command.py
|
||||||
|
darcsver.egg-info/PKG-INFO
|
||||||
|
darcsver.egg-info/SOURCES.txt
|
||||||
|
darcsver.egg-info/dependency_links.txt
|
||||||
|
darcsver.egg-info/entry_points.txt
|
||||||
|
darcsver.egg-info/not-zip-safe
|
||||||
|
darcsver.egg-info/top_level.txt
|
||||||
|
scripts/__init__.py
|
||||||
|
scripts/darcsverscript.py
|
1
darcsver-1.5.1-py2.6.egg/EGG-INFO/dependency_links.txt
Normal file
1
darcsver-1.5.1-py2.6.egg/EGG-INFO/dependency_links.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
|
6
darcsver-1.5.1-py2.6.egg/EGG-INFO/entry_points.txt
Normal file
6
darcsver-1.5.1-py2.6.egg/EGG-INFO/entry_points.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[console_scripts]
|
||||||
|
darcsver = scripts.darcsverscript:main
|
||||||
|
|
||||||
|
[distutils.commands]
|
||||||
|
darcsver = darcsver.setuptools_command:DarcsVer
|
||||||
|
|
1
darcsver-1.5.1-py2.6.egg/EGG-INFO/not-zip-safe
Normal file
1
darcsver-1.5.1-py2.6.egg/EGG-INFO/not-zip-safe
Normal file
@ -0,0 +1 @@
|
|||||||
|
|
2
darcsver-1.5.1-py2.6.egg/EGG-INFO/top_level.txt
Normal file
2
darcsver-1.5.1-py2.6.egg/EGG-INFO/top_level.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
darcsver
|
||||||
|
scripts
|
8
darcsver-1.5.1-py2.6.egg/darcsver/__init__.py
Normal file
8
darcsver-1.5.1-py2.6.egg/darcsver/__init__.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
__version__ = "unknown"
|
||||||
|
try:
|
||||||
|
from _version import __version__
|
||||||
|
except ImportError:
|
||||||
|
# We're running in a tree that hasn't run darcsver, and didn't come with a
|
||||||
|
# _version.py, so we don't know what our version is. This should not happen
|
||||||
|
# very often.
|
||||||
|
pass
|
16
darcsver-1.5.1-py2.6.egg/darcsver/_version.py
Normal file
16
darcsver-1.5.1-py2.6.egg/darcsver/_version.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
|
||||||
|
# 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"
|
||||||
|
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)
|
178
darcsver-1.5.1-py2.6.egg/darcsver/darcsvermodule.py
Normal file
178
darcsver-1.5.1-py2.6.egg/darcsver/darcsvermodule.py
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
import os, string, sys, re
|
||||||
|
import xml.dom.minidom
|
||||||
|
import xml.parsers.expat
|
||||||
|
from subprocess import Popen, PIPE
|
||||||
|
from distutils import log
|
||||||
|
|
||||||
|
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:
|
||||||
|
# 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+))?"
|
||||||
|
|
||||||
|
def get_text(nodelist):
|
||||||
|
rc = ""
|
||||||
|
for node in nodelist:
|
||||||
|
if node.nodeType == node.TEXT_NODE:
|
||||||
|
rc = rc + node.data
|
||||||
|
return rc
|
||||||
|
|
||||||
|
VERSION_BODY = '''
|
||||||
|
# This is the version of this tree, as created by %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"
|
||||||
|
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)
|
||||||
|
'''
|
||||||
|
|
||||||
|
def write_version_py(verstr, outfname, EXE_NAME):
|
||||||
|
f = open(outfname, "wt+")
|
||||||
|
f.write(VERSION_BODY % (EXE_NAME, verstr,))
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
def read_version_py(infname):
|
||||||
|
try:
|
||||||
|
verstrline = open(infname, "rt").read()
|
||||||
|
except EnvironmentError:
|
||||||
|
return None
|
||||||
|
else:
|
||||||
|
VSRE = r"^verstr = ['\"]([^'\"]*)['\"]"
|
||||||
|
mo = re.search(VSRE, verstrline, re.M)
|
||||||
|
if mo:
|
||||||
|
return mo.group(1)
|
||||||
|
|
||||||
|
def update(pkgname, verfilename, revision_number=False, loud=False, abort_if_snapshot=False, EXE_NAME="darcsver"):
|
||||||
|
"""
|
||||||
|
@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
|
||||||
|
release tag.
|
||||||
|
|
||||||
|
Returns a tuple of (exit code, new version string).
|
||||||
|
"""
|
||||||
|
rc = -1
|
||||||
|
cmd = ["changes", "--xml-output"]
|
||||||
|
if not revision_number:
|
||||||
|
cmd.append("--from-tag=^%s" % (pkgname,))
|
||||||
|
|
||||||
|
errput = None
|
||||||
|
try:
|
||||||
|
p = Popen(["darcs"] + 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: 'darcs' 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,))
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
(output, errput) = p.communicate()
|
||||||
|
rc = p.returncode
|
||||||
|
if rc != 0:
|
||||||
|
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,))
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
(output, errput) = p.communicate()
|
||||||
|
rc = p.returncode
|
||||||
|
if rc != 0:
|
||||||
|
if 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)
|
||||||
|
|
||||||
|
# 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.)
|
||||||
|
allbadchars = "".join([chr(i) for i in range(0x0a) + [0x0b, 0x0c] + range(0x0e, 0x20) + range(0x7f,0x100)])
|
||||||
|
tt = string.maketrans(allbadchars, "-"*len(allbadchars))
|
||||||
|
output = output.translate(tt)
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
changelog = doc.getElementsByTagName("changelog")[0]
|
||||||
|
patches = changelog.getElementsByTagName("patch")
|
||||||
|
regexstr = "^TAG %s-(%s)" % (pkgname, VERSION_BASE_RE_STR,)
|
||||||
|
version_re = re.compile(regexstr)
|
||||||
|
last_tag = None
|
||||||
|
count_since_last_patch = 0
|
||||||
|
if abort_if_snapshot:
|
||||||
|
for patch in patches:
|
||||||
|
name = get_text(patch.getElementsByTagName("name")[0].childNodes)
|
||||||
|
m = version_re.match(name)
|
||||||
|
if m:
|
||||||
|
last_tag = m.group(1)
|
||||||
|
last_tag = last_tag.encode("utf-8")
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
sys.exit(0) # because abort_if_snapshot
|
||||||
|
else:
|
||||||
|
for patch in patches:
|
||||||
|
name = get_text(patch.getElementsByTagName("name")[0].childNodes)
|
||||||
|
m = version_re.match(name)
|
||||||
|
if m:
|
||||||
|
last_tag = m.group(1)
|
||||||
|
last_tag = last_tag.encode("utf-8")
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
count_since_last_patch += 1
|
||||||
|
|
||||||
|
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))
|
||||||
|
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,))
|
||||||
|
return (0, None)
|
||||||
|
|
||||||
|
if revision_number:
|
||||||
|
if count_since_last_patch:
|
||||||
|
# this is an interim version
|
||||||
|
verstr = "%s-r%d" % (last_tag, len(patches))
|
||||||
|
else:
|
||||||
|
# this is a release
|
||||||
|
verstr = last_tag
|
||||||
|
else:
|
||||||
|
if count_since_last_patch:
|
||||||
|
# this is an interim version
|
||||||
|
verstr = "%s-%d" % (last_tag, count_since_last_patch)
|
||||||
|
else:
|
||||||
|
# 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,))
|
||||||
|
return (0, verstr)
|
70
darcsver-1.5.1-py2.6.egg/darcsver/setuptools_command.py
Normal file
70
darcsver-1.5.1-py2.6.egg/darcsver/setuptools_command.py
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
import os
|
||||||
|
|
||||||
|
import setuptools
|
||||||
|
|
||||||
|
from darcsver import darcsvermodule
|
||||||
|
|
||||||
|
class DarcsVer(setuptools.Command):
|
||||||
|
description = "generate a version number from darcs history"
|
||||||
|
user_options = [
|
||||||
|
('project-name', None, "name of the project as it appears in the project's release tags (default's the to the distribution name)"),
|
||||||
|
('version-file', None, "path to file into which the version number should be written (defaults to the package directory's _version.py)"),
|
||||||
|
('count-all-patches', None, "If true, count the total number of patches in all history. If false, count the total number of patches since the most recent release tag."),
|
||||||
|
('abort-if-snapshot', None, "If true, the if the current version is a snapshot (not a release tag), then immediately exit the process with exit code 0."),
|
||||||
|
]
|
||||||
|
|
||||||
|
def initialize_options(self):
|
||||||
|
self.project_name = None
|
||||||
|
self.version_file = None
|
||||||
|
self.count_all_patches = None
|
||||||
|
self.abort_if_snapshot = None
|
||||||
|
|
||||||
|
def finalize_options(self):
|
||||||
|
if self.project_name is None:
|
||||||
|
self.project_name = self.distribution.get_name()
|
||||||
|
|
||||||
|
if self.version_file 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.
|
||||||
|
packagedir = None
|
||||||
|
if self.distribution.packages and self.project_name in self.distribution.packages:
|
||||||
|
toppackage = self.project_name
|
||||||
|
srcdir = ''
|
||||||
|
if self.distribution.package_dir:
|
||||||
|
srcdir = self.distribution.package_dir.get(toppackage)
|
||||||
|
if not srcdir is None:
|
||||||
|
srcdir = self.distribution.package_dir.get('', '')
|
||||||
|
packagedir = os.path.join(srcdir, toppackage)
|
||||||
|
|
||||||
|
if packagedir is None or not os.path.isdir(packagedir):
|
||||||
|
# Else, if there is a singly-rooted tree of packages, use the
|
||||||
|
# root of that.
|
||||||
|
if self.distribution.packages:
|
||||||
|
for package in self.distribution.packages:
|
||||||
|
if not toppackage:
|
||||||
|
toppackage = package
|
||||||
|
else:
|
||||||
|
if toppackage.startswith(package+"."):
|
||||||
|
toppackage = package
|
||||||
|
else:
|
||||||
|
if not package.startswith(toppackage+"."):
|
||||||
|
# Not singly-rooted
|
||||||
|
toppackage = ''
|
||||||
|
break
|
||||||
|
|
||||||
|
srcdir = ''
|
||||||
|
if self.distribution.package_dir:
|
||||||
|
srcdir = self.distribution.package_dir.get(toppackage)
|
||||||
|
if srcdir is None:
|
||||||
|
srcdir = self.distribution.package_dir.get('', '')
|
||||||
|
packagedir = os.path.join(srcdir, toppackage)
|
||||||
|
|
||||||
|
self.version_file = os.path.join(packagedir, '_version.py')
|
||||||
|
|
||||||
|
if self.abort_if_snapshot is None:
|
||||||
|
self.abort_if_snapshot=False
|
||||||
|
|
||||||
|
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")
|
||||||
|
self.distribution.metadata.version = verstr
|
0
darcsver-1.5.1-py2.6.egg/scripts/__init__.py
Normal file
0
darcsver-1.5.1-py2.6.egg/scripts/__init__.py
Normal file
46
darcsver-1.5.1-py2.6.egg/scripts/darcsverscript.py
Normal file
46
darcsver-1.5.1-py2.6.egg/scripts/darcsverscript.py
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#! /usr/bin/env python
|
||||||
|
|
||||||
|
from optparse import OptionParser
|
||||||
|
import os, sys
|
||||||
|
|
||||||
|
from darcsver import darcsvermodule, __version__
|
||||||
|
|
||||||
|
try:
|
||||||
|
EXE_NAME=os.path.basename(sys.argv[0])
|
||||||
|
except:
|
||||||
|
EXE_NAME="darcsver"
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = OptionParser(usage="Usage: %prog [options] [pkgname [verfilename]]",
|
||||||
|
version="%prog " + str(__version__),
|
||||||
|
prog=EXE_NAME)
|
||||||
|
parser.add_option("-q", "--quiet", default=False, action="store_true",
|
||||||
|
help="Be quiet, do the job without any output.")
|
||||||
|
parser.add_option("--count-all-patches", "--revision-number", default=False,
|
||||||
|
action="store_true", dest="count_all_patches",
|
||||||
|
help="By default %s counts the number of patches since the "
|
||||||
|
"most recent release tag. With this option, it counts "
|
||||||
|
"all the patches in the repository." % EXE_NAME)
|
||||||
|
|
||||||
|
options, args = parser.parse_args()
|
||||||
|
|
||||||
|
if args:
|
||||||
|
pkgname = args.pop(0)
|
||||||
|
else:
|
||||||
|
pkgname = os.path.basename(os.getcwd())
|
||||||
|
if not options.quiet:
|
||||||
|
print "%s: You didn't pass a pkg-name on the command-line, so I'm going to take the name of the current working directory: \"%s\"" % (EXE_NAME, pkgname,)
|
||||||
|
|
||||||
|
if args:
|
||||||
|
verfilename = args.pop(0)
|
||||||
|
else:
|
||||||
|
verfilename = os.path.join(pkgname, "_version.py")
|
||||||
|
if not options.quiet:
|
||||||
|
print "%s: You didn't pass a verfilename on the command-line, so I'm going to build one from the name of the package: \"%s\"" % (EXE_NAME, verfilename,)
|
||||||
|
|
||||||
|
(rc, newverstr) = darcsvermodule.update(pkgname=pkgname, verfilename=verfilename, revision_number=options.count_all_patches, quiet=options.quiet, EXE_NAME=EXE_NAME)
|
||||||
|
return rc
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
rc = main()
|
||||||
|
sys.exit(rc)
|
@ -0,0 +1,91 @@
|
|||||||
|
|
||||||
|
What Does It Do
|
||||||
|
---------------
|
||||||
|
|
||||||
|
Create _version.py, 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:
|
||||||
|
|
||||||
|
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)(\d+)?)?\w*$
|
||||||
|
|
||||||
|
|
||||||
|
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.
|
Loading…
Reference in New Issue
Block a user