Merge master.
[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             s = s[0:b]
27
28         p = s.split('.')
29         self.major = int(p[0])
30         self.minor = int(p[1])
31
32     def bump(self):
33         self.minor += 1
34         self.pre = False
35         self.beta = None
36
37     def to_pre(self):
38         self.pre = True
39         self.beta = None
40
41     def bump_and_to_pre(self):
42         self.bump()
43         self.pre = True
44         self.beta = None
45
46     def to_release(self):
47         self.pre = False
48         self.beta = None
49
50     def bump_beta(self):
51         if self.pre:
52             self.pre = False
53             self.beta = 1
54         elif self.beta is not None:
55             self.beta += 1
56         elif self.beta is None:
57             self.beta = 1
58
59     def __str__(self):
60         s = '%d.%02d' % (self.major, self.minor)
61         if self.beta is not None:
62             s += 'beta%d' % self.beta
63         elif self.pre:
64             s += 'pre'
65
66         return s
67         
68 def rewrite_wscript(method):
69     f = open('wscript', 'rw')
70     o = open('wscript.tmp', 'w')
71     version = None
72     while 1:
73         l = f.readline()
74         if l == '':
75             break
76
77         s = l.split()
78         if len(s) == 3 and s[0] == "VERSION":
79             version = Version(s[2])
80             method(version)
81             print "Writing %s" % version
82             print >>o,"VERSION = '%s'" % version
83         else:
84             print >>o,l,
85     f.close()
86     o.close()
87
88     os.rename('wscript.tmp', 'wscript')
89     return version
90
91 def append_to_changelog(version):
92     f = open('ChangeLog', 'r')
93     c = f.read()
94     f.close()
95
96     f = open('ChangeLog', 'w')
97     now = datetime.datetime.now()
98     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))
99     f.write(c)