mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-01-18 10:46:24 +00:00
setup: remove misc/make-version.py and invoke "darcsver" from the pyutil library
misc/make-version.py has a limitation which prevents it from generating version stamps from our current darcs history. This limitation has been fixed in pyutil's "darcsver". Rather than copy the fix from there to misc/make-version.py, I'm making it so that you have to install pyutil if you want to automatically generate _version.py files from the current darcs history.
This commit is contained in:
parent
c00ab7c5ea
commit
cbd6881a47
12
Makefile
12
Makefile
@ -63,11 +63,15 @@ endif
|
|||||||
PP=PYTHONPATH="$(SRCPATH)$(PATHSEP)$(EGGSPATH)$(PATHSEP)$(PYTHONPATH)"
|
PP=PYTHONPATH="$(SRCPATH)$(PATHSEP)$(EGGSPATH)$(PATHSEP)$(PYTHONPATH)"
|
||||||
|
|
||||||
.PHONY: make-version build
|
.PHONY: make-version build
|
||||||
# N.B.: the first argument to make-version.py is used to find darcs tags that
|
|
||||||
# represent released versions, so it needs to match whatever release
|
# The 'darcsver' executable comes in the 'pyutil' package:
|
||||||
# conventions are in use.
|
# http://pypi.python.org/pypi/pyutil It is necessary only if you want to
|
||||||
|
# automatically produce a new _version.py file from the current darcs history.
|
||||||
|
# N.B.: the first argument to darcsver is used to find darcs tags that represent
|
||||||
|
# released versions, so it needs to match whatever release conventions are in
|
||||||
|
# use.
|
||||||
make-version:
|
make-version:
|
||||||
$(PYTHON) misc/make-version.py "allmydata-tahoe" "src/allmydata/_version.py"
|
darcsver "allmydata-tahoe" "src/allmydata/_version.py"
|
||||||
|
|
||||||
.built:
|
.built:
|
||||||
$(MAKE) build
|
$(MAKE) build
|
||||||
|
@ -1,138 +0,0 @@
|
|||||||
#! /usr/bin/env python
|
|
||||||
|
|
||||||
"""
|
|
||||||
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 script 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*$
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
import os, sys, re
|
|
||||||
import xml.dom.minidom
|
|
||||||
from subprocess import Popen, PIPE
|
|
||||||
|
|
||||||
try:
|
|
||||||
# If we can import allmydata.util.version_class then use its regex.
|
|
||||||
from allmydata.util 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-08-11.
|
|
||||||
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 = '''
|
|
||||||
from allmydata.util.version_class import Version
|
|
||||||
|
|
||||||
# This is the version of this tree, as created by scripts/make-version.py 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. Please see
|
|
||||||
# allmydata.util.version_class for a description of what the different fields
|
|
||||||
# mean.
|
|
||||||
|
|
||||||
verstr = "%s"
|
|
||||||
__version__ = Version(verstr)
|
|
||||||
'''
|
|
||||||
|
|
||||||
def write_version_py(verstr, outfname):
|
|
||||||
f = open(outfname, "wt+")
|
|
||||||
f.write(VERSION_BODY % (verstr,))
|
|
||||||
f.close()
|
|
||||||
|
|
||||||
def update(pkgname, verfilename):
|
|
||||||
rc = -1
|
|
||||||
if not os.path.isdir("_darcs"):
|
|
||||||
if os.path.exists(verfilename):
|
|
||||||
print "No _darcs directory, and %s already exists, so leaving it alone." % (verfilename,)
|
|
||||||
return 0
|
|
||||||
print "No _darcs directory, no %s, so version is unknown." % (verfilename,)
|
|
||||||
return 1
|
|
||||||
cmd = ["darcs", "changes", "--from-tag=^%s" % (pkgname,), "--xml-output"]
|
|
||||||
try:
|
|
||||||
p = Popen(cmd, stdout=PIPE)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
output = p.communicate()[0]
|
|
||||||
rc = p.returncode
|
|
||||||
if rc != 0:
|
|
||||||
cmd = ["realdarcs.exe", "changes", "--from-tag=^%s" % (pkgname,), "--xml-output"]
|
|
||||||
p = Popen(cmd, stdout=PIPE)
|
|
||||||
output = p.communicate()[0]
|
|
||||||
rc = p.returncode
|
|
||||||
if rc != 0:
|
|
||||||
if os.path.exists(verfilename):
|
|
||||||
print "Failure from attempt to find version tags with 'darcs changes', and %s already exists, so leaving it alone." % (verfilename,)
|
|
||||||
return 0
|
|
||||||
else:
|
|
||||||
print "Failure from attempt to find version tags with 'darcs changes', and %s doesn't exist." % (verfilename,)
|
|
||||||
return rc
|
|
||||||
|
|
||||||
doc = xml.dom.minidom.parseString(output)
|
|
||||||
changelog = doc.getElementsByTagName("changelog")[0]
|
|
||||||
patches = changelog.getElementsByTagName("patch")
|
|
||||||
count = 0
|
|
||||||
regexstr = "^TAG %s-(%s)" % (pkgname, VERSION_BASE_RE_STR,)
|
|
||||||
version_re = re.compile(regexstr)
|
|
||||||
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("ascii")
|
|
||||||
break
|
|
||||||
count += 1
|
|
||||||
else:
|
|
||||||
print "I'm unable to find a tag in the darcs history matching \"%s\", so I'm leaving %s alone." % (regexstr, verfilename,)
|
|
||||||
return 0
|
|
||||||
|
|
||||||
if count:
|
|
||||||
# this is an interim version
|
|
||||||
verstr = "%s-%d" % (last_tag, count)
|
|
||||||
else:
|
|
||||||
# this is a release
|
|
||||||
verstr = last_tag
|
|
||||||
|
|
||||||
write_version_py(verstr, verfilename)
|
|
||||||
print "wrote '%s' into %s" % (verstr, verfilename,)
|
|
||||||
return 0
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
if len(sys.argv) >= 2:
|
|
||||||
pkgname = sys.argv[1]
|
|
||||||
else:
|
|
||||||
pkgname = os.path.basename(os.getcwd())
|
|
||||||
print "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\"" % (pkgname,)
|
|
||||||
|
|
||||||
if len(sys.argv) >= 3:
|
|
||||||
verfilename = sys.argv[2]
|
|
||||||
else:
|
|
||||||
verfilename = os.path.join(pkgname, "_version.py")
|
|
||||||
print "You didn't pass a verfilename on the command-line, so I'm going to build one from the name of the package: \"%s\"" % (verfilename,)
|
|
||||||
|
|
||||||
rc = update(pkgname=pkgname, verfilename=verfilename)
|
|
||||||
sys.exit(rc)
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user