forked from OctoMap/octomap
-
Notifications
You must be signed in to change notification settings - Fork 0
/
increase_version.py
executable file
·112 lines (84 loc) · 3.3 KB
/
increase_version.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/usr/bin/env python
# Increases the version number of package.xml and CMakeLists.txt files in
# subfolders. The first argument specifies the version increase:
# major, minor, or patch (default, e.g. 1.6.2 --> 1.6.3)
#
# Borrows heaviliy from ROS / catkin release tools
import re
import sys
import copy
manifest_match = "<version>(\d+)\.(\d+)\.(\d+)</version>"
if __name__ == '__main__':
bump = "patch"
if len(sys.argv) > 1:
bump = sys.argv[1]
if bump not in {"major","minor","patch"}:
print sys.argv[0]+" [major|minor|patch] (default: patch)"
exit(-1)
manifests=["octomap/package.xml","octovis/package.xml","dynamicEDT3D/package.xml"]
cmakelists=["octomap/CMakeLists.txt","octovis/CMakeLists.txt","dynamicEDT3D/CMakeLists.txt"]
versions = []
# find versions in package.xml
for manifest in manifests:
with open(manifest, 'r') as f:
package_str = f.read()
match = re.search(manifest_match, package_str)
if match is None:
print "Error: no version tag found in %s" % manifest
exit(-1)
else:
v= match.groups()
v = [int(x) for x in v]
versions.append(v)
# find version in CMakeLists:
for cmake in cmakelists:
with open(cmake, 'r') as f:
cmake_str = f.read()
v = []
for m in ["MAJOR","MINOR","PATCH"]:
searchstr = "_%s_VERSION (\d+)\)" % m
match = re.search(searchstr, cmake_str)
if match is None:
print "Error: no version tag %s found in %s" % (searchstr,cmake)
exit(-1)
v.append(int(match.group(1)))
versions.append(v)
new_version = copy.deepcopy(versions[0])
for v in versions:
if v != versions[0]:
print "Error: check current versions, mismatch: %d.%d.%d vs. %d.%d.%d" %(tuple(v)+tuple(versions[0]))
exit(-1)
print "OctoMap component versions found: %d.%d.%d" % tuple(versions[0])
# "bump version" from catkin:
# find the desired index
idx = dict(major=0, minor=1, patch=2)[bump]
# increment the desired part
new_version[idx] += 1
# reset all parts behind the bumped part
new_version = new_version[:idx + 1] + [0 for x in new_version[idx + 1:]]
new_version_str = "%d.%d.%d" % tuple(new_version)
print 'Updating to new version: %s\n' % new_version_str
# adjust CMakeLists
for cmake in cmakelists:
with open(cmake, 'r') as f:
cmake_str = f.read()
idx = dict(MAJOR=0, MINOR=1, PATCH=2)
for m in ["MAJOR","MINOR","PATCH"]:
old_str = "_%s_VERSION %d)" % (m,versions[0][idx[m]])
new_str = "_%s_VERSION %d)" % (m,new_version[idx[m]])
cmake_str = cmake_str.replace(old_str, new_str)
with open(cmake, 'w') as f:
f.write(cmake_str)
# adjust package.xml
for manifest in manifests:
with open(manifest, 'r') as f:
package_str = f.read()
old_str = "<version>%d.%d.%d</version>" % tuple(versions[0])
new_str = "<version>%s</version>" % new_version_str
new_package_str = package_str.replace(old_str, new_str)
with open(manifest, 'w') as f:
f.write(new_package_str)
print "Finished writing package.xml and CMakeLists.txt files.\n"
print "Now check the output, adjust CHANGELOG, and \"git commit\".\nFinally, run:"
print " git checkout master && git merge --no-ff devel && git tag v%s" % new_version_str
print " git push && git push --tags"