You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by pb...@apache.org on 2012/03/27 01:23:49 UTC
svn commit: r1305667 [7/7] - in /subversion/branches/inheritable-props: ./
subversion/bindings/swig/python/svn/ subversion/bindings/swig/python/tests/
subversion/bindings/swig/ruby/svn/ subversion/bindings/swig/ruby/test/
subversion/include/private/ su...
Propchange: subversion/branches/inheritable-props/tools/dist/make-deps-tarball.sh
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: subversion/branches/inheritable-props/tools/dist/make-deps-tarball.sh
------------------------------------------------------------------------------
svn:executable = *
Propchange: subversion/branches/inheritable-props/tools/dist/make-deps-tarball.sh
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Mon Mar 26 23:23:46 2012
@@ -0,0 +1,37 @@
+/subversion/branches/1.5.x-r30215/tools/dist/construct-rolling-environment.sh:870312
+/subversion/branches/bdb-reverse-deltas/tools/dist/construct-rolling-environment.sh:872050-872529
+/subversion/branches/diff-callbacks3/tools/dist/construct-rolling-environment.sh:870059-870761
+/subversion/branches/dont-save-plaintext-passwords-by-default/tools/dist/construct-rolling-environment.sh:870728-871118
+/subversion/branches/double-delete/tools/dist/construct-rolling-environment.sh:870511-872970
+/subversion/branches/explore-wc/tools/dist/construct-rolling-environment.sh:875486,875493,875497,875507,875511,875514,875559,875580-875581,875584,875587,875611,875627,875647,875667-875668,875711-875712,875733-875734,875736,875744-875748,875751,875758,875782,875795-875796,875830,875836,875838,875842,875852,875855,875864,875870,875873,875880,875885-875888,875890,875897-875898,875905,875907-875909,875935,875943-875944,875946,875979,875982-875983,875985-875986,875990,875997
+/subversion/branches/file-externals/tools/dist/construct-rolling-environment.sh:871779-873302
+/subversion/branches/fs-rep-sharing/tools/dist/construct-rolling-environment.sh:869036-873803
+/subversion/branches/fsfs-pack/tools/dist/construct-rolling-environment.sh:873717-874575
+/subversion/branches/gnome-keyring/tools/dist/construct-rolling-environment.sh:870558-871410
+/subversion/branches/http-protocol-v2/tools/dist/construct-rolling-environment.sh:874395-876041
+/subversion/branches/in-memory-cache/tools/dist/construct-rolling-environment.sh:869829-871452
+/subversion/branches/issue-2843-dev/tools/dist/construct-rolling-environment.sh:871432-874179
+/subversion/branches/issue-3000/tools/dist/construct-rolling-environment.sh:871713,871716-871719,871721-871726,871728,871734
+/subversion/branches/issue-3067-deleted-subtrees/tools/dist/construct-rolling-environment.sh:873375-874084
+/subversion/branches/issue-3148-dev/tools/dist/construct-rolling-environment.sh:875193-875204
+/subversion/branches/issue-3220-dev/tools/dist/construct-rolling-environment.sh:872210-872226
+/subversion/branches/issue-3242-dev/tools/dist/construct-rolling-environment.sh:879653-896436
+/subversion/branches/issue-3334-dirs/tools/dist/construct-rolling-environment.sh:875156-875867
+/subversion/branches/kwallet/tools/dist/construct-rolling-environment.sh:870785-871314
+/subversion/branches/log-g-performance/tools/dist/construct-rolling-environment.sh:870941-871032
+/subversion/branches/merge-skips-obstructions/tools/dist/construct-rolling-environment.sh:874525-874615
+/subversion/branches/ra_serf-digest-authn/tools/dist/construct-rolling-environment.sh:875693-876404
+/subversion/branches/reintegrate-improvements/tools/dist/construct-rolling-environment.sh:873853-874164
+/subversion/branches/subtree-mergeinfo/tools/dist/construct-rolling-environment.sh:876734-878766
+/subversion/branches/svn-mergeinfo-enhancements/tools/dist/construct-rolling-environment.sh:870119-870195,870197-870288
+/subversion/branches/svn-patch-improvements/tools/dist/construct-rolling-environment.sh:918519-934609
+/subversion/branches/svnpatch-diff/tools/dist/construct-rolling-environment.sh:865738-876477
+/subversion/branches/svnraisetc/tools/dist/construct-rolling-environment.sh:874709-875149
+/subversion/branches/svnserve-logging/tools/dist/construct-rolling-environment.sh:869828-870893
+/subversion/branches/tc-issue-3334/tools/dist/construct-rolling-environment.sh:874697-874773
+/subversion/branches/tc-merge-notify/tools/dist/construct-rolling-environment.sh:874017-874062
+/subversion/branches/tc-resolve/tools/dist/construct-rolling-environment.sh:874191-874239
+/subversion/branches/tc_url_rev/tools/dist/construct-rolling-environment.sh:874351-874483
+/subversion/branches/tree-conflicts/tools/dist/construct-rolling-environment.sh:868291-873154
+/subversion/branches/tree-conflicts-notify/tools/dist/construct-rolling-environment.sh:873926-874008
+/subversion/trunk/tools/dist/make-deps-tarball.sh:1304315-1305659
Modified: subversion/branches/inheritable-props/tools/dist/release.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/tools/dist/release.py?rev=1305667&r1=1305666&r2=1305667&view=diff
==============================================================================
--- subversion/branches/inheritable-props/tools/dist/release.py (original)
+++ subversion/branches/inheritable-props/tools/dist/release.py Mon Mar 26 23:23:46 2012
@@ -21,10 +21,10 @@
# About this script:
-# This script is intended to simplify creating Subversion releases, by
-# automating as much as is possible. It works well with our Apache
-# infrastructure, and should make rolling, posting, and announcing
-# releases dirt simple.
+# This script is intended to simplify creating Subversion releases for
+# any of the supported release lines of Subversion.
+# It works well with our Apache infrastructure, and should make rolling,
+# posting, and announcing releases dirt simple.
#
# This script may be run on a number of platforms, but it is intended to
# be run on people.apache.org. As such, it may have dependencies (such
@@ -39,6 +39,7 @@ import os
import re
import sys
import glob
+import fnmatch
import shutil
import urllib2
import hashlib
@@ -62,15 +63,31 @@ except ImportError:
import ezt
-# Our required / recommended versions
-autoconf_ver = '2.68'
-libtool_ver = '2.4'
-swig_ver = '2.0.4'
+# Our required / recommended release tool versions by release branch
+tool_versions = {
+ 'trunk' : {
+ 'autoconf' : '2.68',
+ 'libtool' : '2.4',
+ 'swig' : '2.0.4',
+ },
+ '1.7' : {
+ 'autoconf' : '2.68',
+ 'libtool' : '2.4',
+ 'swig' : '2.0.4',
+ },
+ '1.6' : {
+ 'autoconf' : '2.64',
+ 'libtool' : '1.5.26',
+ 'swig' : '1.3.36',
+ },
+}
# Some constants
repos = 'http://svn.apache.org/repos/asf/subversion'
-people_host = 'minotaur.apache.org'
-people_dist_dir = '/www/www.apache.org/dist/subversion'
+dist_repos = 'https://dist.apache.org/repos/dist'
+dist_dev_url = dist_repos + '/dev/subversion'
+dist_release_url = dist_repos + '/release/subversion'
+extns = ['zip', 'tar.gz', 'tar.bz2']
#----------------------------------------------------------------------
@@ -88,6 +105,7 @@ class Version(object):
self.pre = 'nightly'
self.pre_num = None
self.base = 'nightly'
+ self.branch = 'trunk'
return
match = self.regex.search(ver_str)
@@ -107,6 +125,7 @@ class Version(object):
self.pre_num = None
self.base = '%d.%d.%d' % (self.major, self.minor, self.patch)
+ self.branch = '%d.%d' % (self.major, self.minor)
def is_prerelease(self):
return self.pre != None
@@ -189,10 +208,6 @@ def download_file(url, target):
target_file = open(target, 'w')
target_file.write(response.read())
-def assert_people():
- if os.uname()[1] != people_host:
- raise RuntimeError('Not running on expected host "%s"' % people_host)
-
#----------------------------------------------------------------------
# Cleaning up the environment
@@ -255,10 +270,11 @@ class RollDep(object):
class AutoconfDep(RollDep):
- def __init__(self, base_dir, use_existing, verbose):
+ def __init__(self, base_dir, use_existing, verbose, autoconf_ver):
RollDep.__init__(self, base_dir, use_existing, verbose)
self.label = 'autoconf'
self._filebase = 'autoconf-' + autoconf_ver
+ self._autoconf_ver = autoconf_ver
self._url = 'http://ftp.gnu.org/gnu/autoconf/%s.tar.gz' % self._filebase
def have_usable(self):
@@ -266,7 +282,7 @@ class AutoconfDep(RollDep):
if not output: return False
version = output[0].split()[-1:][0]
- return version == autoconf_ver
+ return version == self._autoconf_ver
def use_system(self):
if not self._use_existing: return False
@@ -274,18 +290,18 @@ class AutoconfDep(RollDep):
class LibtoolDep(RollDep):
- def __init__(self, base_dir, use_existing, verbose):
+ def __init__(self, base_dir, use_existing, verbose, libtool_ver):
RollDep.__init__(self, base_dir, use_existing, verbose)
self.label = 'libtool'
self._filebase = 'libtool-' + libtool_ver
+ self._libtool_ver = libtool_ver
self._url = 'http://ftp.gnu.org/gnu/libtool/%s.tar.gz' % self._filebase
def have_usable(self):
output = self._test_version(['libtool', '--version'])
if not output: return False
- version = output[0].split()[-1:][0]
- return version == libtool_ver
+ return self._libtool_ver in output[0]
def use_system(self):
# We unconditionally return False here, to avoid using a borked
@@ -294,10 +310,11 @@ class LibtoolDep(RollDep):
class SwigDep(RollDep):
- def __init__(self, base_dir, use_existing, verbose, sf_mirror):
+ def __init__(self, base_dir, use_existing, verbose, swig_ver, sf_mirror):
RollDep.__init__(self, base_dir, use_existing, verbose)
self.label = 'swig'
self._filebase = 'swig-' + swig_ver
+ self._swig_ver = swig_ver
self._url = 'http://sourceforge.net/projects/swig/files/swig/%(swig)s/%(swig)s.tar.gz/download?use_mirror=%(sf_mirror)s' % \
{ 'swig' : self._filebase,
'sf_mirror' : sf_mirror }
@@ -308,7 +325,7 @@ class SwigDep(RollDep):
if not output: return False
version = output[1].split()[-1:][0]
- return version == swig_ver
+ return version == self._swig_ver
def use_system(self):
if not self._use_existing: return False
@@ -326,9 +343,12 @@ def build_env(args):
if not args.use_existing:
raise
- autoconf = AutoconfDep(args.base_dir, args.use_existing, args.verbose)
- libtool = LibtoolDep(args.base_dir, args.use_existing, args.verbose)
+ autoconf = AutoconfDep(args.base_dir, args.use_existing, args.verbose,
+ tool_versions[args.version.branch]['autoconf'])
+ libtool = LibtoolDep(args.base_dir, args.use_existing, args.verbose,
+ tool_versions[args.version.branch]['libtool'])
swig = SwigDep(args.base_dir, args.use_existing, args.verbose,
+ tool_versions[args.version.branch]['swig'],
args.sf_mirror)
# iterate over our rolling deps, and build them if needed
@@ -342,54 +362,37 @@ def build_env(args):
#----------------------------------------------------------------------
# Create release artifacts
-def fetch_changes(repos, branch, revision):
- changes_peg_url = '%s/%s/CHANGES@%d' % (repos, branch, revision)
- proc = subprocess.Popen(['svn', 'cat', changes_peg_url],
- stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
- (stdout, stderr) = proc.communicate()
- proc.wait()
- return stdout.split('\n')
-
-
def compare_changes(repos, branch, revision):
- # Compare trunk's version of CHANGES with that of the branch,
- # ignoring any lines in trunk's version precede what *should*
- # match the contents of the branch's version. (This allows us to
- # continue adding new stuff at the top of trunk's CHANGES that
- # might relate to the *next* major release line.)
- branch_CHANGES = fetch_changes(repos, branch, revision)
- trunk_CHANGES = fetch_changes(repos, 'trunk', revision)
- try:
- first_matching_line = trunk_CHANGES.index(branch_CHANGES[0])
- except ValueError:
- raise RuntimeError('CHANGES not synced between trunk and branch')
-
- trunk_CHANGES = trunk_CHANGES[first_matching_line:]
- saw_diff = False
- import difflib
- for diff_line in difflib.unified_diff(trunk_CHANGES, branch_CHANGES):
- saw_diff = True
- logging.debug('%s', diff_line)
- if saw_diff:
- raise RuntimeError('CHANGES not synced between trunk and branch')
-
+ mergeinfo_cmd = ['svn', 'mergeinfo', '--show-revs=eligible',
+ repos + '/trunk/CHANGES',
+ repos + '/' + branch + '/' + 'CHANGES']
+ proc = subprocess.Popen(mergeinfo_cmd, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ (stdout, stderr) = proc.communicate()
+ rc = proc.wait()
+ if stderr:
+ raise RuntimeError('svn mergeinfo failed: %s' % stderr)
+ if stdout:
+ raise RuntimeError('CHANGES has unmerged revisions: %s' % stdout)
def roll_tarballs(args):
'Create the release artifacts.'
- extns = ['zip', 'tar.gz', 'tar.bz2']
if args.branch:
branch = args.branch
else:
- branch = 'branches/' + args.version.base[:-1] + 'x'
+ branch = 'branches/%d.%d.x' % (args.version.major, args.version.minor)
logging.info('Rolling release %s from branch %s@%d' % (args.version,
branch, args.revnum))
# Ensure we've got the appropriate rolling dependencies available
- autoconf = AutoconfDep(args.base_dir, False, args.verbose)
- libtool = LibtoolDep(args.base_dir, False, args.verbose)
- swig = SwigDep(args.base_dir, False, args.verbose, None)
+ autoconf = AutoconfDep(args.base_dir, False, args.verbose,
+ tool_versions[args.version.branch]['autoconf'])
+ libtool = LibtoolDep(args.base_dir, False, args.verbose,
+ tool_versions[args.version.branch]['libtool'])
+ swig = SwigDep(args.base_dir, False, args.verbose,
+ tool_versions[args.version.branch]['swig'], None)
for dep in [autoconf, libtool, swig]:
if not dep.have_usable():
@@ -440,44 +443,47 @@ def roll_tarballs(args):
# And we're done!
-
#----------------------------------------------------------------------
-# Post the candidate release artifacts
+# Sign the candidate release artifacts
+
+def sign_candidates(args):
+ 'Sign candidate artifacts in the dist development directory.'
+
+ def sign_file(filename):
+ asc_file = open(filename + '.asc', 'a')
+ logging.info("Signing %s" % filename)
+ proc = subprocess.Popen(['gpg', '-ba', '-o', '-', filename],
+ stdout=asc_file)
+ proc.wait()
+ asc_file.close()
-def post_candidates(args):
- 'Post the generated tarballs to web-accessible directory.'
if args.target:
target = args.target
else:
- target = os.path.join(os.getenv('HOME'), 'public_html', 'svn',
- str(args.version))
+ target = get_deploydir(args.base_dir)
- logging.info('Moving tarballs to %s' % target)
- if os.path.exists(target):
- shutil.rmtree(target)
- shutil.copytree(get_deploydir(args.base_dir), target)
+ for e in extns:
+ filename = os.path.join(target, 'subversion-%s.%s' % (args.version, e))
+ sign_file(filename)
+ if args.version.major >= 1 and args.version.minor <= 6:
+ filename = os.path.join(target,
+ 'subversion-deps-%s.%s' % (args.version, e))
+ sign_file(filename)
- data = { 'version' : str(args.version),
- 'revnum' : args.revnum,
- }
- # Choose the right template text
- if args.version.is_prerelease():
- if args.version.pre == 'nightly':
- template_filename = 'nightly-candidates.ezt'
- else:
- template_filename = 'rc-candidates.ezt'
- else:
- template_filename = 'stable-candidates.ezt'
-
- template = ezt.Template()
- template.parse(get_tmplfile(template_filename).read())
- template.generate(open(os.path.join(target, 'HEADER.html'), 'w'), data)
+#----------------------------------------------------------------------
+# Post the candidate release artifacts
- template = ezt.Template()
- template.parse(get_tmplfile('htaccess.ezt').read())
- template.generate(open(os.path.join(target, '.htaccess'), 'w'), data)
+def post_candidates(args):
+ 'Post candidate artifacts to the dist development directory.'
+ logging.info('Importing tarballs to %s' % dist_dev_url)
+ proc = subprocess.Popen(['svn', 'import', '-m',
+ 'Add %s candidate release artifacts'
+ % args.version.base,
+ get_deploydir(args.base_dir), dist_dev_url])
+ (stdout, stderr) = proc.communicate()
+ proc.wait()
#----------------------------------------------------------------------
# Clean dist
@@ -485,28 +491,41 @@ def post_candidates(args):
def clean_dist(args):
'Clean the distribution directory of all but the most recent artifacts.'
- if not args.dist_dir:
- assert_people()
- args.dist_dir = people_dist_dir
+ proc = subprocess.Popen(['svn', 'list', dist_release_url],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ (stdout, stderr) = proc.communicate()
+ proc.wait()
+ if stderr:
+ raise RuntimeError(stderr)
- logging.info('Cleaning dist dir \'%s\'' % args.dist_dir)
+ filenames = stdout.split('\n')
+ tar_gz_archives = []
+ for entry in filenames:
+ if fnmatch.fnmatch(entry, 'subversion-*.tar.gz'):
+ tar_gz_archives.append(entry)
- filenames = glob.glob(os.path.join(args.dist_dir, 'subversion-*.tar.gz'))
versions = []
- for filename in filenames:
- versions.append(Version(filename))
+ for archive in tar_gz_archives:
+ versions.append(Version(archive))
+ svnmucc_cmd = ['svnmucc', '-m', 'Remove old Subversion releases.\n' +
+ 'They are still available at ' +
+ 'http://archive.apache.org/dist/subversion/']
for k, g in itertools.groupby(sorted(versions),
lambda x: (x.major, x.minor)):
releases = list(g)
logging.info("Saving release '%s'", releases[-1])
for r in releases[:-1]:
- for filename in glob.glob(os.path.join(args.dist_dir,
- 'subversion-%s.*' % r)):
+ for filename in filenames:
+ if fnmatch.fnmatch(filename, 'subversion-%s.*' % r):
logging.info("Removing '%s'" % filename)
- os.remove(filename)
+ svnmucc_cmd += ['rm', dist_release_url + '/' + filename]
+ # don't redirect stdout/stderr since svnmucc might ask for a password
+ proc = subprocess.Popen(svnmucc_cmd)
+ proc.wait()
#----------------------------------------------------------------------
# Move to dist
@@ -514,23 +533,29 @@ def clean_dist(args):
def move_to_dist(args):
'Move candidate artifacts to the distribution directory.'
- if not args.dist_dir:
- assert_people()
- args.dist_dir = people_dist_dir
-
- if args.target:
- target = args.target
- else:
- target = os.path.join(os.getenv('HOME'), 'public_html', 'svn',
- str(args.version))
+ proc = subprocess.Popen(['svn', 'list', dist_dev_url],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ (stdout, stderr) = proc.communicate()
+ proc.wait()
+ if stderr:
+ raise RuntimeError(stderr)
- logging.info('Moving %s to dist dir \'%s\'' % (str(args.version),
- args.dist_dir) )
- filenames = glob.glob(os.path.join(target,
- 'subversion-%s.*' % str(args.version)))
+ filenames = []
+ for entry in stdout.split('\n'):
+ if fnmatch.fnmatch(entry, 'subversion-%s.*' % str(args.version)):
+ filenames.append(entry)
+ svnmucc_cmd = ['svnmucc', '-m',
+ 'Publish Subversion-%s.' % str(args.version)]
+ svnmucc_cmd += ['rm', dist_dev_url + '/' + 'svn_version.h.dist']
for filename in filenames:
- shutil.copy(filename, args.dist_dir)
+ svnmucc_cmd += ['mv', dist_dev_url + '/' + filename,
+ dist_release_url + '/' + filename]
+ # don't redirect stdout/stderr since svnmucc might ask for a password
+ logging.info('Moving release artifacts to %s' % dist_release_url)
+ proc = subprocess.Popen(svnmucc_cmd)
+ proc.wait()
#----------------------------------------------------------------------
# Write announcements
@@ -539,7 +564,7 @@ def write_news(args):
'Write text for the Subversion website.'
data = { 'date' : datetime.date.today().strftime('%Y%m%d'),
'date_pres' : datetime.date.today().strftime('%Y-%m-%d'),
- 'major-minor' : args.version.base[:3],
+ 'major-minor' : '%d.%d' % (args.version.major, args.version.minor),
'version' : str(args.version),
'version_base' : args.version.base,
}
@@ -584,7 +609,8 @@ def write_announcement(args):
data = { 'version' : str(args.version),
'sha1info' : sha1info,
'siginfo' : open('getsigs-output', 'r').read(),
- 'major-minor' : args.version.base[:3],
+ 'major-minor' : '%d.%d' % (args.version.major,
+ args.version.minor),
'major-minor-patch' : args.version.base,
}
@@ -629,16 +655,16 @@ def check_sigs(args):
if args.target:
target = args.target
else:
- target = os.path.join(os.getenv('HOME'), 'public_html', 'svn',
- str(args.version))
+ target = get_deploydir(args.base_dir)
good_sigs = {}
- glob_pattern = os.path.join(target, 'subversion-%s*.asc' % args.version)
+ glob_pattern = os.path.join(target, 'subversion*-%s*.asc' % args.version)
for filename in glob.glob(glob_pattern):
text = open(filename).read()
keys = text.split(key_start)
+ logging.info("Checking %d sig(s) in %s" % (len(keys[1:]), filename))
for key in keys[1:]:
fd, fn = tempfile.mkstemp()
os.write(fd, key_start + key)
@@ -694,6 +720,8 @@ def main():
help='''Download release prerequisistes, including autoconf,
libtool, and swig.''')
subparser.set_defaults(func=build_env)
+ subparser.add_argument('version', type=Version,
+ help='''The release label, such as '1.7.0-alpha1'.''')
subparser.add_argument('--sf-mirror', default='softlayer',
help='''The mirror to use for downloading files from
SourceForge. If in the EU, you may want to use
@@ -713,25 +741,28 @@ def main():
subparser.add_argument('--branch',
help='''The branch to base the release on.''')
+ # Setup the parser for the sign-candidates subcommand
+ subparser = subparsers.add_parser('sign-candidates',
+ help='''Sign the release artifacts.''')
+ subparser.set_defaults(func=sign_candidates)
+ subparser.add_argument('version', type=Version,
+ help='''The release label, such as '1.7.0-alpha1'.''')
+ subparser.add_argument('--target',
+ help='''The full path to the directory containing
+ release artifacts.''')
+
# Setup the parser for the post-candidates subcommand
subparser = subparsers.add_parser('post-candidates',
- help='''Build the website to host the candidate tarballs.
- The default location is somewhere in ~/public_html.
- ''')
+ help='''Commit candidates to the release development area
+ of the dist.apache.org repository.''')
subparser.set_defaults(func=post_candidates)
subparser.add_argument('version', type=Version,
help='''The release label, such as '1.7.0-alpha1'.''')
- subparser.add_argument('revnum', type=int,
- help='''The revision number to base the release on.''')
- subparser.add_argument('--target',
- help='''The full path to the destination.''')
# The clean-dist subcommand
subparser = subparsers.add_parser('clean-dist',
help='''Clean the distribution directory (and mirrors) of
- all but the most recent MAJOR.MINOR release. If no
- dist-dir is given, this command will assume it is
- running on people.apache.org.''')
+ all but the most recent MAJOR.MINOR release.''')
subparser.set_defaults(func=clean_dist)
subparser.add_argument('--dist-dir',
help='''The directory to clean.''')
@@ -739,17 +770,11 @@ def main():
# The move-to-dist subcommand
subparser = subparsers.add_parser('move-to-dist',
help='''Move candiates and signatures from the temporary
- post location to the permanent distribution
- directory. If no dist-dir is given, this command
- will assume it is running on people.apache.org.''')
+ release dev location to the permanent distribution
+ directory.''')
subparser.set_defaults(func=move_to_dist)
subparser.add_argument('version', type=Version,
help='''The release label, such as '1.7.0-alpha1'.''')
- subparser.add_argument('--dist-dir',
- help='''The directory to clean.''')
- subparser.add_argument('--target',
- help='''The full path to the destination used in
- 'post-candiates'..''')
# The write-news subcommand
subparser = subparsers.add_parser('write-news',
@@ -781,8 +806,8 @@ def main():
subparser.add_argument('version', type=Version,
help='''The release label, such as '1.7.0-alpha1'.''')
subparser.add_argument('--target',
- help='''The full path to the destination used in
- 'post-candiates'..''')
+ help='''The full path to the directory containing
+ release artifacts.''')
# A meta-target
subparser = subparsers.add_parser('clean',