Merge master.
[dcpomatic.git] / release
diff --git a/release b/release
index 29da203c128a4d32d73bab96177ebc84f5409c7b..e9a29ff002fd14bd06440a25ac5f958c2f6b32bc 100755 (executable)
--- a/release
+++ b/release
@@ -4,80 +4,53 @@ import os
 import sys
 import datetime
 import shutil
+import version
+import argparse
 
-def command(c):
-    os.system(c)
-    print c
-
-def release_version(s):
-    s = s[1:-1]
-    if s.endswith('pre'):
-        s = s[0:-3]
-    p = s.split('.')
-    return '0.%02d' % int(p[1])
-
-def new_pre_version(s):
-    s = s[1:-1]
-    p = s.split('.')
-    return '0.%02dpre' % (int(p[1]) + 1)
+parser = argparse.ArgumentParser(description = "Build and tag a release.")
+parser.add_argument('-f', '--full', dest='full', action='store_const', const=True, help="full release", default=False)
+parser.add_argument('-b', '--beta', dest='beta', action='store_const', const=True, help="beta release", default=False)
+parser.add_argument('-d', '--debug', dest='debug', action='store_const', const=True, help="show commands but don't do anything", default=False)
+args = parser.parse_args()
 
-def rewrite_wscript(version_maker):
-    f = open('wscript', 'rw')
-    o = open('wscript.tmp', 'w')
-    while 1:
-        l = f.readline()
-        if l == '':
-            break
-
-        s = l.split()
-        if len(s) == 3 and s[0] == "VERSION":
-            v = version_maker(s[2])
-            print "REWRITE %s -> %s" % (s[2], v)
-            print >>o,"VERSION = '%s'" % v
-        else:
-            print >>o,l,
-    f.close()
-    o.close()
+if not args.full and not args.beta:
+    print "%s: must specify --full or --beta" % sys.argv[0]
+    sys.exit(1)
 
-    os.rename('wscript.tmp', 'wscript')
-    return v
+def command(c):
+    if not args.debug:
+        os.system(c)
+    print c
 
-def append_to_changelog(version):
-    f = open('ChangeLog', 'r')
-    c = f.read()
-    f.close()
+def check_diff_with_user():
+    print "Planning to commit... ok? [y/n]"
+    command("git diff")
+    if (raw_input() != "y"):
+        command("git reset --hard")
+        print 'Aborted'
+        sys.exit(1)
 
-    f = open('ChangeLog', 'w')
-    now = datetime.datetime.now()
-    f.write('%d-%02d-%02d  Carl Hetherington  <cth@carlh.net>\n\n\t* Version %s released.\n\n' % (now.year, now.month, now.day, version))
-    f.write(c)
+if not args.debug and os.popen('git status -s').read() != '':
+    print '%s: uncommitted changes exist.' % sys.argv[0]
+    sys.exit(1)
 
-release_version_string = rewrite_wscript(release_version)
-append_to_changelog(release_version_string)
+m = version.Version.to_release
+if args.beta:
+    m = version.Version.bump_beta
 
-command("git diff")
-if (raw_input() != "y"):
-    command("git reset --hard")
-    print 'Aborted'
-    sys.exit(1)
+new_version = version.rewrite_wscript(m)
+version.append_to_changelog(new_version)
+command("dch -b -v %s-1 \"New upstream release.\"" % new_version)
 
-command("git commit -a -m \"Bump version\"")
-command("git tag -m \"v%s\" v%s" % (release_version_string, release_version_string))
 command("./waf clean")
-command("./waf")
-command("./waf configure")
 command("./waf dist")
-command("./builds/windows-32")
-shutil.copy(os.path.join('build', 'windows', 'DVD-o-matic %s 32-bit Installer.exe' % release_version_string), '.')
-command("./builds/windows-64")
-shutil.copy(os.path.join('build', 'windows', 'DVD-o-matic %s 64-bit Installer.exe' % release_version_string), '.')
 
-rewrite_wscript(new_pre_version)
-
-command("git diff")
-if (raw_input() != "y"):
-    command("git reset --hard")
-    print 'Aborted'
-    sys.exit(1)
+check_diff_with_user()
 
 command("git commit -a -m \"Bump version\"")
+command("git tag -m \"v%s\" v%s" % (new_version, new_version))
+
+if args.full:
+    version.rewrite_wscript(version.Version.bump_and_to_pre)
+    check_diff_with_user()
+    command("git commit -a -m \"Bump version\"")