Try to fix up beta generation.
[dcpomatic.git] / version.py
1 #!/usr/bin/python
2
3 import os
4 import sys
5 import datetime
6 import shutil
7 import copy
8
9 class Version:
10     def __init__(self, s):
11         self.pre = False
12         self.beta = None
13
14         if s.startswith("'"):
15             s = s[1:]
16         if s.endswith("'"):
17             s = s[0:-1]
18         
19         if s.endswith('pre'):
20             s = s[0:-3]
21             self.pre = True
22
23         b = s.find("beta")
24         if b != -1:
25             self.beta = int(s[b+4:])
26
27         p = s.split('.')
28         self.major = int(p[0])
29         self.minor = int(p[1])
30
31     def bump(self):
32         self.minor += 1
33         self.pre = False
34         self.beta = None
35
36     def to_pre(self):
37         self.pre = True
38         self.beta = None
39
40     def bump_and_to_pre(self):
41         self.bump()
42         self.pre = True
43         self.beta = None
44
45     def to_release(self):
46         self.pre = False
47         self.beta = None
48
49     def bump_beta(self):
50         if self.pre:
51             self.pre = False
52             self.beta = 1
53         elif self.beta is not None:
54             self.beta += 1
55         elif self.beta is None:
56             self.beta = 1
57
58     def __str__(self):
59         s = '%d.%02d' % (self.major, self.minor)
60         if self.beta is not None:
61             s += 'beta%d' % self.beta
62         elif self.pre:
63             s += 'pre'
64
65         return s
66         
67 def rewrite_wscript(method):
68     f = open('wscript', 'rw')
69     o = open('wscript.tmp', 'w')
70     version = None
71     while 1:
72         l = f.readline()
73         if l == '':
74             break
75
76         s = l.split()
77         if len(s) == 3 and s[0] == "VERSION":
78             version = Version(s[2])
79             method(version)
80             print "Writing %s" % version
81             print >>o,"VERSION = '%s'" % version
82         else:
83             print >>o,l,
84     f.close()
85     o.close()
86
87     os.rename('wscript.tmp', 'wscript')
88     return version
89
90 def append_to_changelog(version):
91     f = open('ChangeLog', 'r')
92     c = f.read()
93     f.close()
94
95     f = open('ChangeLog', 'w')
96     now = datetime.datetime.now()
97     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))
98     f.write(c)