summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Deegan <bill@baddogconsulting.com>2020-02-10 19:40:45 (GMT)
committerWilliam Deegan <bill@baddogconsulting.com>2020-02-10 19:40:45 (GMT)
commita3e66db3f093c947ae4a080e1890cbfd831a6c83 (patch)
tree9be81f564b66f222e6095a752808c2c3d1a6f831
parent95312158803afd4648a83359840a263dc18dd0a2 (diff)
downloadSCons-a3e66db3f093c947ae4a080e1890cbfd831a6c83.zip
SCons-a3e66db3f093c947ae4a080e1890cbfd831a6c83.tar.gz
SCons-a3e66db3f093c947ae4a080e1890cbfd831a6c83.tar.bz2
fixed tests and some code to be testable
-rw-r--r--bin/update-release-info.py25
-rw-r--r--test/update-release-info/update-release-info.py184
2 files changed, 110 insertions, 99 deletions
diff --git a/bin/update-release-info.py b/bin/update-release-info.py
index e4d404b..1c83506 100644
--- a/bin/update-release-info.py
+++ b/bin/update-release-info.py
@@ -72,6 +72,7 @@ class ReleaseInfo(object):
self.config = {}
self.args = args
self.release_date = time.localtime()[:6]
+
self.unsupported_version = None
self.deprecated_version = None
@@ -86,7 +87,8 @@ class ReleaseInfo(object):
self.read_config()
self.process_config()
- self.set_new_date()
+ if not self.args.timestamp:
+ self.set_new_date()
def read_config(self):
# Get configuration information
@@ -109,7 +111,7 @@ class ReleaseInfo(object):
self.deprecated_version = self.config['deprecated_python_version']
except KeyError:
print('''ERROR: Config file must contain at least version_tuple,
- \tunsupported_python_version, and deprecated_python_version.''')
+\tunsupported_python_version, and deprecated_python_version.''')
sys.exit(1)
if 'release_date' in self.config:
@@ -123,10 +125,14 @@ class ReleaseInfo(object):
yyyy, mm, dd, h, m, s = self.release_date
date_string = "".join(["%.2d" % d for d in self.release_date])
+ if self.args.timestamp:
+ date_string = self.args.timestamp
+
if self.args.mode == 'develop' and self.version_tuple[3] != 'dev':
self.version_tuple == self.version_tuple[:3] + ('dev', 0)
+
if len(self.version_tuple) > 3 and self.version_tuple[3] != 'final':
- self.version_tuple = self.version_tuple[:4] + ((yyyy * 100 + mm) * 100 + dd,)
+ self.version_tuple = self.version_tuple[:4] + (date_string,)
self.version_string = '.'.join(map(str, self.version_tuple[:4])) + date_string
@@ -137,13 +143,16 @@ class ReleaseInfo(object):
if self.version_type not in ['dev', 'beta', 'candidate', 'final']:
print(("""ERROR: `%s' is not a valid release type in version tuple;
- \tit must be one of dev, beta, candidate, or final""" % self.version_type))
+\tit must be one of dev, beta, candidate, or final""" % self.version_type))
sys.exit(1)
try:
self.month_year = self.config['month_year']
except KeyError:
- self.month_year = time.strftime('%B %Y', self.release_date + (0, 0, 0))
+ if self.args.timestamp:
+ self.month_year = "MONTH YEAR"
+ else:
+ self.month_year = time.strftime('%B %Y', self.release_date + (0, 0, 0))
try:
self.copyright_years = self.config['copyright_years']
@@ -369,10 +378,10 @@ def parse_arguments():
"""
parser = argparse.ArgumentParser(prog='update-release-info.py')
- parser.add_argument('mode', choices=['develop', 'release', 'post'], default='develop')
+ parser.add_argument('mode', nargs='?', choices=['develop', 'release', 'post'], default='develop')
parser.add_argument('--verbose', dest='verbose', action='store_true', help='Enable verbose logging')
- parser.add_argument('--timestamp', dest='timestamp', help='Override the default current timestamp',
- default=time.localtime()[:6])
+
+ parser.add_argument('--timestamp', dest='timestamp', help='Override the default current timestamp')
args = parser.parse_args()
return args
diff --git a/test/update-release-info/update-release-info.py b/test/update-release-info/update-release-info.py
index d0242a8..a6ce5b4 100644
--- a/test/update-release-info/update-release-info.py
+++ b/test/update-release-info/update-release-info.py
@@ -32,65 +32,63 @@ import os, sys, time
import TestRuntest
# Needed to ensure we're using the correct year
-this_year=time.localtime()[0]
-
-TestSCons = 'testing/framework/TestSCons.py' .split('/')
-README = 'README.rst' .split('/')
-ReleaseConfig = 'ReleaseConfig' .split('/')
-SConstruct = 'SConstruct' .split('/')
-Announce = 'src/Announce.txt' .split('/')
-CHANGES = 'src/CHANGES.txt' .split('/')
-RELEASE = 'src/RELEASE.txt' .split('/')
-Main = 'src/engine/SCons/Script/Main.py' .split('/')
-main_in = 'doc/user/main.in' .split('/')
-main_xml = 'doc/user/main.xml' .split('/')
+this_year = time.localtime()[0]
+
+TestSCons = 'testing/framework/TestSCons.py'.split('/')
+README = 'README.rst'.split('/')
+ReleaseConfig = 'ReleaseConfig'.split('/')
+SConstruct = 'SConstruct'.split('/')
+Announce = 'src/Announce.txt'.split('/')
+CHANGES = 'src/CHANGES.txt'.split('/')
+RELEASE = 'src/RELEASE.txt'.split('/')
+Main = 'src/engine/SCons/Script/Main.py'.split('/')
+main_in = 'doc/user/main.in'.split('/')
+main_xml = 'doc/user/main.xml'.split('/')
test = TestRuntest.TestRuntest(
- program = os.path.join('bin', 'update-release-info.py'),
- things_to_copy = ['bin']
- )
+ program=os.path.join('bin', 'update-release-info.py'),
+ things_to_copy=['bin']
+)
+# test.verbose_set(1)
if not os.path.exists(test.program):
test.skip_test("update-release-info.py is not distributed in this package\n")
-test.run(arguments = 'bad', status = 1)
+expected_stderr = """usage: update-release-info.py [-h] [--verbose] [--timestamp TIMESTAMP]
+ [{develop,release,post}]
+update-release-info.py: error: argument mode: invalid choice: 'bad' (choose from 'develop', 'release', 'post')
+"""
+test.run(arguments='bad', stderr=expected_stderr, status=2)
# Strings to go in ReleaseConfig
combo_strings = [
-# Index 0: version tuple with bad release level
-"""version_tuple = (2, 0, 0, 'bad', 0)
-""",
-# Index 1: Python version tuple
-"""unsupported_python_version = (2, 6)
-""",
-# Index 2: Python version tuple
-"""deprecated_python_version = (2, 7)
-""",
-# Index 3: alpha version tuple
-"""version_tuple = (2, 0, 0, 'alpha', 0)
-""",
-# Index 4: final version tuple
-"""version_tuple = (2, 0, 0, 'final', 0)
-""",
-# Index 5: bad release date
-"""release_date = (%d, 12)
-"""%this_year,
-# Index 6: release date (hhhh, mm, dd)
-"""release_date = (%d, 12, 21)
-"""%this_year,
-# Index 7: release date (hhhh, mm, dd, hh, mm, ss)
-"""release_date = (%d, 12, 21, 12, 21, 12)
-"""%this_year,
+ # Index 0: version tuple with bad release level
+ """version_tuple = (2, 0, 0, 'bad', 0)\n""",
+ # Index 1: Python version tuple
+ """unsupported_python_version = (2, 6)\n""",
+ # Index 2: Python version tuple
+ """deprecated_python_version = (2, 7)\n""",
+ # Index 3: alpha version tuple
+ """version_tuple = (2, 0, 0, 'dev', 0)\n""",
+ # Index 4: final version tuple
+ """version_tuple = (2, 0, 0, 'final', 0)\n""",
+ # Index 5: bad release date
+ """release_date = (%d, 12)\n""" % this_year,
+ # Index 6: release date (hhhh, mm, dd)
+ """release_date = (%d, 12, 21)\n""" % this_year,
+ # Index 7: release date (hhhh, mm, dd, hh, mm, ss)
+ """release_date = (%d, 12, 21, 12, 21, 12)\n""" % this_year,
]
combo_error = \
-"""ERROR: Config file must contain at least version_tuple,
-\tunsupported_python_version, and deprecated_python_version.
-"""
+ """ERROR: Config file must contain at least version_tuple,
+\tunsupported_python_version, and deprecated_python_version.\n"""
+
def combo_fail(*args, **kw):
kw.setdefault('status', 1)
combo_run(*args, **kw)
+
def combo_run(*args, **kw):
t = '\n'
for a in args:
@@ -101,6 +99,7 @@ def combo_run(*args, **kw):
kw.setdefault('stdout', combo_error)
test.run(**kw)
+
combo_fail()
combo_fail(0)
combo_fail(1)
@@ -108,17 +107,17 @@ combo_fail(2)
combo_fail(0, 1)
combo_fail(0, 2)
combo_fail(1, 2)
-combo_fail(0, 1, 2, stdout =
+combo_fail(0, 1, 2, stdout=
"""ERROR: `bad' is not a valid release type in version tuple;
-\tit must be one of alpha, beta, candidate, or final
-""")
+\tit must be one of dev, beta, candidate, or final\n""")
# We won't need this entry again, so put in a default
combo_strings[0] = combo_strings[1] + combo_strings[2] + combo_strings[3]
-combo_fail(0, 5, stdout =
+combo_fail(0, 5, stdout=
"""ERROR: Invalid release date (%d, 12)
-"""%this_year )
+""" % this_year)
+
def pave(path):
path = path[:-1]
@@ -127,10 +126,12 @@ def pave(path):
pave(path)
test.subdir(path)
+
def pave_write(file, contents):
pave(file)
test.write(file, contents)
+
pave_write(CHANGES, """
RELEASE It doesn't matter what goes here...
""")
@@ -180,80 +181,81 @@ pave_write(main_xml, """
TODO
""")
+
def updating_run(*args):
stdout = ''
for file in args:
stdout += 'Updating %s...\n' % os.path.join(*file)
- combo_run(0, 7, stdout = stdout)
+ combo_run(0, 7, stdout=stdout, arguments=['--timestamp=yyyymmdd'])
+
updating_run(CHANGES, RELEASE, Announce, SConstruct, README, TestSCons, Main)
test.must_match(CHANGES, """
-RELEASE 2.0.0.alpha.yyyymmdd - NEW DATE WILL BE INSERTED HERE
-""", mode = 'r')
+RELEASE 2.0.0.devyyyymmdd - NEW DATE WILL BE INSERTED HERE
+""", mode='r')
test.must_match(RELEASE, """
-This file has a 2.0.0.alpha.yyyymmdd version string in it
-""", mode = 'r')
+This file has a 2.0.0.devyyyymmdd version string in it
+""", mode='r')
test.must_match(Announce, """
-RELEASE 2.0.0.alpha.yyyymmdd - NEW DATE WILL BE INSERTED HERE
-""", mode = 'r')
-
+RELEASE 2.0.0.devyyyymmdd - NEW DATE WILL BE INSERTED HERE
+""", mode='r')
-years = '2001 - %d'%(this_year + 1)
+years = '2001 - %d' % (this_year + 1)
test.must_match(SConstruct, """
month_year = 'MONTH YEAR'
copyright_years = %s
-default_version = '2.0.0.alpha.yyyymmdd'
-""" % repr(years), mode = 'r')
+default_version = '2.0.0.devyyyymmdd'
+""" % repr(years), mode='r')
test.must_match(README, """
These files are a part of 33.22.11:
- scons-2.0.0.alpha.yyyymmdd.tar.gz
- scons-2.0.0.alpha.yyyymmdd.win32.exe
- scons-2.0.0.alpha.yyyymmdd.zip
- scons-2.0.0.alpha.yyyymmdd.rpm
- scons-2.0.0.alpha.yyyymmdd.deb
+ scons-2.0.0.devyyyymmdd.tar.gz
+ scons-2.0.0.devyyyymmdd.win32.exe
+ scons-2.0.0.devyyyymmdd.zip
+ scons-2.0.0.devyyyymmdd.rpm
+ scons-2.0.0.devyyyymmdd.deb
- scons-2.0.0.alpha.yyyymmdd.suffix
-""", mode = 'r')
+ scons-2.0.0.devyyyymmdd.suffix
+""", mode='r')
# should get Python floors from TestSCons module.
test.must_match(TestSCons, """
copyright_years = '%s'
-default_version = '2.0.0.alpha.yyyymmdd'
+default_version = '2.0.0.devyyyymmdd'
python_version_unsupported = (2, 6)
python_version_deprecated = (2, 7)
-"""%years, mode = 'r')
+""" % years, mode='r')
# should get Python floors from TestSCons module.
test.must_match(Main, """
unsupported_python_version = (2, 6)
deprecated_python_version = (2, 7)
-""", mode = 'r')
-
-#TODO: Release option
-#TODO: ==============
-#TODO:
-#TODO: Dates in beta/candidate flow
-#TODO:
-#TODO: Dates in final flow
-#TODO:
-#TODO: Post option
-#TODO: ===========
-#TODO:
-#TODO: Dates in post flow
-#TODO:
-#TODO: Update minor or micro version
-#TODO:
-#TODO: ReleaseConfig - new version tuple
-#TODO:
-#TODO: CHANGES - new section
-#TODO:
-#TODO: RELEASE - new template
-#TODO:
-#TODO: Announce - new section
+""", mode='r')
+
+# TODO: Release option
+# TODO: ==============
+# TODO:
+# TODO: Dates in beta/candidate flow
+# TODO:
+# TODO: Dates in final flow
+# TODO:
+# TODO: Post option
+# TODO: ===========
+# TODO:
+# TODO: Dates in post flow
+# TODO:
+# TODO: Update minor or micro version
+# TODO:
+# TODO: ReleaseConfig - new version tuple
+# TODO:
+# TODO: CHANGES - new section
+# TODO:
+# TODO: RELEASE - new template
+# TODO:
+# TODO: Announce - new section
test.pass_test()