Skip to content

Commit 9d46b40

Browse files
authored
Added option to patch the prerelease string of the cargo version. (#12)
1 parent be081dd commit 9d46b40

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

release/cargo-version.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# Utility for viewing and managing versions of cargo workspaces and crates.
44
# For workspaces, it assumes that all crate members use a single shared version.
55
#
6-
# usage: cargo-version.py [-h] [-p PROJECT] [-r] [-n {major,minor,patch}] [-s SET] [-o]
6+
# usage: cargo-version.py [-h] [-p PROJECT] [-r] [-n {major,minor,patch}] [-s SET] [-o] [-m PRERELEASE]
77
#
88
# Change versions of cargo projects.
99
#
@@ -16,6 +16,8 @@
1616
# Version
1717
# -s SET, --set SET Version
1818
# -o, --show Version
19+
# -m PRERELEASE, --prerelease PRERELEASE
20+
# Set pre-prelease string.
1921
#
2022

2123
import toml
@@ -49,6 +51,11 @@ def bump_level(cls, version, level):
4951
else:
5052
return str(v.bump_prerelease('nightly'))[:-2] ### remove the .1 suffix that semver always adds to the prererelease.
5153

54+
@classmethod
55+
def prerelease(cls, version, prerelease):
56+
v = semver.VersionInfo.parse(version)
57+
return str(semver.VersionInfo(v.major, v.minor, v.patch, prerelease))
58+
5259
def finalize_version(self):
5360
return Crate(self.path, self.name, Crate.finalize(self.version), self.dependencies.copy())
5461

@@ -58,6 +65,9 @@ def bump_version(self, level):
5865
def set_version(self, version):
5966
return Crate(self.path, self.name, version, self.dependencies.copy())
6067

68+
def set_prerelease(self, prerelease):
69+
return Crate(self.path, self.name, Crate.prerelease(self.version, prerelease), self.dependencies.copy())
70+
6171
def next_version(self):
6272
return Crate(self.path, self.name, str(semver.VersionInfo.parse(self.version).next_version('patch')), self.dependencies.copy())
6373

@@ -100,6 +110,10 @@ def set_version(self, version):
100110
crates = {c.name: c.set_version(version) for c in self.crates.values()}
101111
return Workspace(Workspace.update_dependencies(crates).values())
102112

113+
def set_prerelease(self, prerelease):
114+
crates = {c.name: c.set_prerelease(prerelease) for c in self.crates.values()}
115+
return Workspace(Workspace.update_dependencies(crates).values())
116+
103117
def next_version(self):
104118
crates = {c.name: c.next_version() for c in self.crates.values()}
105119
return Workspace(Workspace.update_dependencies(crates).values())
@@ -137,6 +151,7 @@ def parse_args():
137151
parser.add_argument("-n", "--next", help="Version", choices=['major', 'minor', 'patch'])
138152
parser.add_argument("-s", "--set", help="Version" )
139153
parser.add_argument("-o", "--show", help="Version", action="store_true")
154+
parser.add_argument("-m", "--prerelease", help="Set pre-prelease string." )
140155
return parser.parse_args()
141156

142157
if __name__ == "__main__":
@@ -155,6 +170,9 @@ def parse_args():
155170
semver.VersionInfo.parse(args.set)
156171
new = old.set_version(args.set)
157172
new.save(old)
173+
elif args.prerelease:
174+
new = old.set_prerelease(args.prerelease)
175+
new.save(old)
158176
elif args.show:
159177
print(old.show_version())
160178

0 commit comments

Comments
 (0)