Hi,

did the parameter names change by that? If yes, you need to fix the build.xml 
in the root folder to pass right params in "nigtly-smoke".

Uwe

-----
Uwe Schindler
H.-H.-Meier-Allee 63, D-28213 Bremen
http://www.thetaphi.de
eMail: [email protected]

> -----Original Message-----
> From: [email protected] [mailto:[email protected]]
> Sent: Thursday, August 28, 2014 10:02 AM
> To: [email protected]
> Subject: svn commit: r1621085 - in /lucene/dev/trunk/dev-tools/scripts:
> buildAndPushRelease.py smokeTestRelease.py
> 
> Author: rjernst
> Date: Thu Aug 28 08:01:50 2014
> New Revision: 1621085
> 
> URL: http://svn.apache.org/r1621085
> Log:
> Change buildAndPushRelease and smokeTestRelease scripts to use argparse
> 
> Modified:
>     lucene/dev/trunk/dev-tools/scripts/buildAndPushRelease.py
>     lucene/dev/trunk/dev-tools/scripts/smokeTestRelease.py
> 
> Modified: lucene/dev/trunk/dev-tools/scripts/buildAndPushRelease.py
> URL: http://svn.apache.org/viewvc/lucene/dev/trunk/dev-
> tools/scripts/buildAndPushRelease.py?rev=1621085&r1=1621084&r2=162108
> 5&view=diff
> ==========================================================
> ====================
> --- lucene/dev/trunk/dev-tools/scripts/buildAndPushRelease.py (original)
> +++ lucene/dev/trunk/dev-tools/scripts/buildAndPushRelease.py Thu Aug
> 28
> +++ 08:01:50 2014
> @@ -13,6 +13,7 @@
>  # See the License for the specific language governing permissions and  #
> limitations under the License.
> 
> +import argparse
>  import datetime
>  import re
>  import time
> @@ -20,16 +21,7 @@ import shutil
>  import os
>  import sys
>  import subprocess
> -
> -# Usage: python3.2 -u buildAndPushRelease.py [-sign gpgKey(eg:
> 6E68DA61)] [-prepare] [-push userName] [-pushLocal dirName] [-smoke
> tmpDir] /path/to/checkout version(eg: 3.4.0) rcNum(eg: 0) -# -# EG:
> python3.2 -u buildAndPushRelease.py -prepare -push mikemccand -sign
> 6E68DA61 /path/to/lucene_solr_4_7 4.7.0 0
> -
> -# NOTE: if you specify -sign, you have to type in your gpg password at -#
> some point while this runs; it's VERY confusing because the output -# is
> directed to /tmp/release.log, so, you have to tail that and when -# GPG
> wants your password, type it!  Also sometimes you have to type -# it twice in
> a row!
> +import textwrap
> 
>  LOG = '/tmp/release.log'
> 
> @@ -226,94 +218,89 @@ def pushLocal(version, root, rev, rcNum,
> 
>    print('  done!')
>    return 'file://%s/%s' % (os.path.abspath(localDir), dir)
> -
> -def main():
> -  doPrepare = '-prepare' in sys.argv
> -  if doPrepare:
> -    sys.argv.remove('-prepare')
> 
> -  try:
> -    idx = sys.argv.index('-push')
> -  except ValueError:
> -    doPushRemote = False
> -  else:
> -    doPushRemote = True
> -    username = sys.argv[idx+1]
> -    del sys.argv[idx:idx+2]
> +def read_version(path):
> +  version_props_file = os.path.join(path, 'lucene',
> +'version.properties')
> +  return re.search(r'version\.base=(.*)',
> +open(version_props_file).read()).group(1)
> +
> +def parse_config():
> +  epilogue = textwrap.dedent('''
> +    Example usage for a Release Manager:
> +    python3.2 -u buildAndPushRelease.py --push-remote mikemccand --sign
> +6E68DA61 --rc-num 1 --version 4.7.0 /path/to/lucene_solr_4_7
> +  ''')
> +  description = 'Utility to build, push, and test a release.'
> +  parser = argparse.ArgumentParser(description=description,
> epilog=epilogue,
> +
> +formatter_class=argparse.RawDescriptionHelpFormatter)
> +  parser.add_argument('--no-prepare', dest='prepare', default=True,
> action='store_false',
> +                      help='Use the already built release in the
> +provided checkout')
> +  parser.add_argument('--push-remote', metavar='USERNAME',
> +                      help='Push the release to people.apache.org for
> +the given user')
> +  parser.add_argument('--push-local', metavar='PATH',
> +                      help='Push the release to the local path')
> +  parser.add_argument('--sign', metavar='KEYID',
> +                      help='Sign the release with the given gpg key')
> +  parser.add_argument('--rc-num', metavar='NUM', type=int, default=1,
> +                      help='Release Candidate number, required')
> +  parser.add_argument('--smoke-test', metavar='PATH',
> +                      help='Run the smoker tester on the release in the
> +given directory')
> +  parser.add_argument('root', metavar='checkout_path',
> +                      help='Root of SVN checkout for lucene-solr')
> +  config = parser.parse_args()
> +
> +  if config.push_remote is not None and config.push_local is not None:
> +    parser.error('Cannot specify --push-remote and --push-local
> + together')  if not config.prepare and config.sign:
> +    parser.error('Cannot sign already built release')  if
> + config.push_local is not None and os.path.exists(config.push_local):
> +    parser.error('Cannot push to local path that already exists')  if
> + config.rc_num <= 0:
> +    parser.error('Release Candidate number must be a positive integer')
> + if not os.path.isdir(config.root):
> +    # TODO: add additional svn check to ensure dir is a real lucene-solr
> checkout
> +    parser.error('Root path is not a valid lucene-solr checkout')  if
> + config.smoke_test is not None and os.path.exists(config.smoke_test):
> +    parser.error('Smoke test path already exists')
> 
> -  try:
> -    idx = sys.argv.index('-smoke')
> -  except ValueError:
> -    smokeTmpDir = None
> -  else:
> -    smokeTmpDir = sys.argv[idx+1]
> -    del sys.argv[idx:idx+2]
> -    if os.path.exists(smokeTmpDir):
> -      print()
> -      print('ERROR: smoke tmpDir "%s" exists; please remove first' %
> smokeTmpDir)
> -      print()
> -      sys.exit(1)
> -
> -  try:
> -    idx = sys.argv.index('-pushLocal')
> -  except ValueError:
> -    doPushLocal = False
> -  else:
> -    doPushLocal = True
> -    localStagingDir = sys.argv[idx+1]
> -    del sys.argv[idx:idx+2]
> -    if os.path.exists(localStagingDir):
> -      print()
> -      print('ERROR: pushLocal dir "%s" exists; please remove first' %
> localStagingDir)
> -      print()
> -      sys.exit(1)
> -
> -  if doPushRemote and doPushLocal:
> -    print()
> -    print('ERROR: specify at most one of -push or -pushLocal (got both)')
> -    print()
> -    sys.exit(1)
> -
> -  try:
> -    idx = sys.argv.index('-sign')
> -  except ValueError:
> -    gpgKeyID = None
> -  else:
> -    gpgKeyID = sys.argv[idx+1]
> -    del sys.argv[idx:idx+2]
> +  config.version = read_version(config.root)  print('Building version:
> + %s' % config.version)
> 
> +  if config.sign:
>      sys.stdout.flush()
>      import getpass
> -    gpgPassword = getpass.getpass('Enter GPG keystore password: ')
> +    config.key_id = config.sign
> +    config.key_password = getpass.getpass('Enter GPG keystore password:
> + ')
> +  else:
> +    config.gpg_password = None
> 
> -  root = os.path.abspath(sys.argv[1])
> -  version = sys.argv[2]
> -  rcNum = int(sys.argv[3])
> +  return config
> +
> +def main():
> +  c = parse_config()
> 
> -  if doPrepare:
> -    rev = prepare(root, version, gpgKeyID, gpgPassword, smokeTmpDir is
> None)
> +  if c.prepare:
> +    rev = prepare(c.root, c.version, c.key_id, c.key_password,
> + key.smoke_test is None)
>    else:
>      os.chdir(root)
>      rev = open('rev.txt', encoding='UTF-8').read()
> 
> -  if doPushRemote:
> +  if c.push_remote:
>      url = push(version, root, rev, rcNum, username)
> -  elif doPushLocal:
> -    url = pushLocal(version, root, rev, rcNum, localStagingDir)
> +  elif c.push_local:
> +    url = pushLocal(version, root, rev, c.rc_num, c.push_local)
>    else:
>      url = None
> 
>    if url is not None:
>      print('  URL: %s' % url)
> 
> -  if smokeTmpDir is not None:
> +  if c.smoke_test is not None:
>      import smokeTestRelease
>      smokeTestRelease.DEBUG = False
> -    smokeTestRelease.smokeTest(url, rev, version, smokeTmpDir, gpgKeyID
> is not None, '')
> +    smokeTestRelease.smokeTest(url, rev, c.version, c.smoke_test,
> + c.sign is not None, '')
> 
>  if __name__ == '__main__':
>    try:
>      main()
> -  except:
> -    import traceback
> -    traceback.print_exc()
> +  except KeyboardInterrupt:
> +    print('Keyboard interrupt...exiting')
> +
> 
> Modified: lucene/dev/trunk/dev-tools/scripts/smokeTestRelease.py
> URL: http://svn.apache.org/viewvc/lucene/dev/trunk/dev-
> tools/scripts/smokeTestRelease.py?rev=1621085&r1=1621084&r2=1621085&
> view=diff
> ==========================================================
> ====================
> --- lucene/dev/trunk/dev-tools/scripts/smokeTestRelease.py (original)
> +++ lucene/dev/trunk/dev-tools/scripts/smokeTestRelease.py Thu Aug 28
> +++ 08:01:50 2014
> @@ -13,6 +13,7 @@
>  # See the License for the specific language governing permissions and  #
> limitations under the License.
> 
> +import argparse
>  import os
>  import zipfile
>  import codecs
> @@ -40,6 +41,7 @@ import checkJavaDocs
>  import checkJavadocLinks
>  import io
>  import codecs
> +import textwrap
> 
>  # This tool expects to find /lucene and /solr off the base URL.  You  # must
> have a working gpg, tar, unzip in your path.  This has been @@ -1248,55
> +1250,60 @@ def crawl(downloadedFiles, urlString, ta
>          downloadedFiles.append(path)
>          sys.stdout.write('.')
> 
> -reAllowedVersion = re.compile(r'^\d+\.\d+\.\d+(-ALPHA|-BETA)?$')
> -
> -def main():
> -
> -  if len(sys.argv) < 5:
> -    print()
> -    print('Usage python -u %s BaseURL SvnRevision version tmpDir [
> isSigned(True|False) ] [ -testArgs "-Dwhat=ever [ ... ]" ]'
> -          % sys.argv[0])
> -    print()
> -    print('  example: python3.2 -u dev-tools/scripts/smokeTestRelease.py
> http://people.apache.org/~whoever/staging_area/lucene-solr-4.3.0-RC1-
> rev1469340 1469340 4.3.0 /path/to/a/tmp/dir')
> -    print()
> -    sys.exit(1)
> -
> -  baseURL = sys.argv[1]
> -  svnRevision = sys.argv[2]
> -  version = sys.argv[3]
> +version_re = re.compile(r'(\d+\.\d+\.\d+(-ALPHA|-BETA)?)')
> +revision_re = re.compile(r'rev(\d+)')
> +def parse_config():
> +  epilogue = textwrap.dedent('''
> +    Example usage:
> +    python3.2 -u dev-tools/scripts/smokeTestRelease.py
> +http://people.apache.org/~whoever/staging_area/lucene-solr-4.3.0-RC1-
> re
> +v1469340')
> +  ''')
> +  description = 'Utility to test a release.'
> +  parser = argparse.ArgumentParser(description=description,
> epilog=epilogue,
> +
> +formatter_class=argparse.RawDescriptionHelpFormatter)
> +  parser.add_argument('--tmp-dir', metavar='PATH',
> +                      help='Temporary directory to test inside,
> +defaults to /tmp/smoke_lucene_$version_$revision')
> +  parser.add_argument('--not-signed', dest='is_signed',
> action='store_false', default=True,
> +                      help='Indicates the release is not signed')
> +  parser.add_argument('--revision',
> +                      help='SVN revision number that release was built
> +with, defaults to that in URL')
> +  parser.add_argument('--version', metavar='X.Y.Z(-ALPHA|-BETA)?',
> +                      help='Version of the release, defaults to that in
> +URL')
> +  parser.add_argument('url', help='Url pointing to release to test')
> +  parser.add_argument('test_args', nargs=argparse.REMAINDER,
> metavar='ARGS',
> +                      help='Arguments to pass to ant for testing, e.g.
> +-Dwhat=ever')
> +  c = parser.parse_args()
> +
> +  if c.version is not None:
> +    if not version_re.match(c.version):
> +      parser.error('version "%s" does not match format
> + X.Y.Z[-ALPHA|-BETA]' % c.version)
> +  else:
> +    version_match = version_re.search(c.url)
> +    if version_match is None:
> +      parser.error('Could not find version in URL')
> +    c.version = version_match.group(1)
> +
> +  if c.revision is None:
> +    revision_match = revision_re.search(c.url)
> +    if revision_match is None:
> +      parser.error('Could not find revision in URL')
> +    c.revision = revision_match.group(1)
> 
> -  if not reAllowedVersion.match(version):
> -    raise RuntimeError('version "%s" does not match format X.Y.Z[-ALPHA|-
> BETA]' % version)
> -
> -  tmpDirArgNum = 4
> -  tmpDir = os.path.abspath(sys.argv[tmpDirArgNum])
> +  if c.tmp_dir:
> +    c.tmp_dir = os.path.abspath(c.tmp_dir)
> +  else:
> +    tmp = '/tmp/smoke_lucene_%s_%s' % (c.version, c.revision)
> +    c.tmp_dir = tmp
> +    i = 1
> +    while os.path.exists(c.tmp_dir):
> +      c.tmp_dir = tmp + '_%d' % i
> +      i += 1
> 
> -  # TODO: yuck: positional-only args with more than one optional arg totally
> sucks
> -  # TODO: consider naming all args
> -  isSigned = True
> -  testArgs = ''
> -  lastArgNum = len(sys.argv) - 1
> -  if lastArgNum > tmpDirArgNum:
> -    nextArgNum = tmpDirArgNum + 1
> -    if sys.argv[nextArgNum] == '-testArgs':
> -      if nextArgNum == lastArgNum:
> -        raise RuntimeError('missing expected argument to -testArgs')
> -      else:
> -        # TODO: should there be arg validation here?  E.g. starts with '-D'?
> -        testArgs = sys.argv[nextArgNum + 1]
> -        nextArgNum += 2
> -    if nextArgNum <= lastArgNum:
> -      isSigned = (sys.argv[nextArgNum].lower() == "true")
> -      nextArgNum += 1
> -    if nextArgNum <= lastArgNum and testArgs == '':
> -      if sys.argv[nextArgNum] == '-testArgs':
> -        if nextArgNum == lastArgNum:
> -          raise RuntimeError('missing expected argument to -testArgs')
> -        else:
> -          # TODO: should there be arg validation here?  E.g. starts with 
> '-D'?
> -          testArgs = sys.argv[nextArgNum + 1]
> +  return c
> 
> -  smokeTest(baseURL, svnRevision, version, tmpDir, isSigned, testArgs)
> +def main():
> +  c = parse_config()
> +  print('NOTE: output encoding is %s' % sys.stdout.encoding)
> +  smokeTest(c.url, c.revision, c.version, c.tmp_dir, c.is_signed, '
> +'.join(c.test_args))
> 
>  def smokeTest(baseURL, svnRevision, version, tmpDir, isSigned, testArgs):
> 
> @@ -1350,10 +1357,8 @@ def smokeTest(baseURL, svnRevision, vers
>    print('\nSUCCESS! [%s]\n' % (datetime.datetime.now() - startTime))
> 
>  if __name__ == '__main__':
> -  print('NOTE: output encoding is %s' % sys.stdout.encoding)
>    try:
>      main()
> -  except:
> -    traceback.print_exc()
> -    sys.exit(1)
> -  sys.exit(0)
> +  except KeyboardInterrupt:
> +    print('Keyboard interrupt...exiting')
> +



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to