Skip to content

Commit 391a662

Browse files
feat: support premajor, preminor and prepatch inc operations
1 parent ca0d871 commit 391a662

File tree

3 files changed

+41
-13
lines changed

3 files changed

+41
-13
lines changed

include/version_weaver.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,12 @@ enum release_type {
9595
MAJOR,
9696
MINOR,
9797
PATCH,
98+
PRE_MAJOR,
99+
PRE_MINOR,
100+
PRE_PATCH,
98101
// TODO: also support
99-
// - PRE_MAJOR
100-
// - PRE_MINOR
101-
// - PRE_PATCH
102-
// - PRE_RELEASE
103102
// - RELEASE
103+
// - PRE_RELEASE
104104
};
105105

106106
// Increment the version according to the provided release type.

src/version_weaver.cpp

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,10 @@ std::string minimum(std::string_view range) { return ""; }
3636

3737
std::expected<std::string, parse_error> inc(version input,
3838
release_type release_type) {
39+
version_weaver::version result;
3940
switch (release_type) {
40-
case MAJOR: {
41+
case MAJOR:
42+
case PRE_MAJOR: {
4143
int major_int;
4244
auto [ptr, ec] =
4345
std::from_chars(input.major.data(),
@@ -47,10 +49,11 @@ std::expected<std::string, parse_error> inc(version input,
4749
}
4850
auto incremented_major_int = major_int + 1;
4951
auto major = std::to_string(incremented_major_int);
50-
auto new_version = version_weaver::version{major, "0", "0"};
51-
return new_version;
52+
result = version_weaver::version{major, "0", "0"};
53+
break;
5254
}
53-
case MINOR: {
55+
case MINOR:
56+
case PRE_MINOR: {
5457
int minor_int;
5558
auto [ptr, ec] =
5659
std::from_chars(input.minor.data(),
@@ -59,11 +62,13 @@ std::expected<std::string, parse_error> inc(version input,
5962
return std::unexpected(parse_error::INVALID_MINOR);
6063
}
6164
auto incremented_minor_int = minor_int + 1;
62-
return version_weaver::version{
65+
result = version_weaver::version{
6366
input.major, std::to_string(incremented_minor_int), "0"};
67+
break;
6468
}
65-
case PATCH: {
66-
if (input.pre_release) {
69+
case PATCH:
70+
case PRE_PATCH: {
71+
if (input.pre_release && release_type != PRE_PATCH) {
6772
return version_weaver::version{input.major, input.minor, input.patch};
6873
}
6974
int patch_int;
@@ -74,12 +79,20 @@ std::expected<std::string, parse_error> inc(version input,
7479
return std::unexpected(parse_error::INVALID_PATCH);
7580
}
7681
auto incremented_patch_int = patch_int + 1;
77-
return version_weaver::version{input.major, input.minor,
78-
std::to_string(incremented_patch_int)};
82+
result = version_weaver::version{input.major, input.minor,
83+
std::to_string(incremented_patch_int)};
84+
break;
7985
}
8086
default:
8187
return std::unexpected(parse_error::INVALID_RELEASE_TYPE);
8288
}
89+
90+
if (release_type == PRE_MAJOR || release_type == PRE_MINOR ||
91+
release_type == PRE_PATCH) {
92+
result.pre_release = "0";
93+
}
94+
95+
return result;
8396
}
8497

8598
constexpr inline void trim_whitespace(std::string_view* input) noexcept {

tests/basictests.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,21 @@ std::vector<IncTestData> inc_values = {
229229
{version_weaver::version{"1", "2", "3", "alpha.0.beta"},
230230
"1.2.3-alpha.0.beta", version_weaver::release_type::PATCH, "1.2.3",
231231
version_weaver::version{"1", "2", "3"}},
232+
{version_weaver::version{"1", "2", "0"}, "1.2.0",
233+
version_weaver::release_type::PRE_MAJOR, "2.0.0-0",
234+
version_weaver::version{"2", "0", "0", "0"}},
235+
{version_weaver::version{"1", "2", "0"}, "1.2.0",
236+
version_weaver::release_type::PRE_MINOR, "1.3.0-0",
237+
version_weaver::version{"1", "3", "0", "0"}},
238+
{version_weaver::version{"1", "2", "3", "1"}, "1.2.3-1",
239+
version_weaver::release_type::PRE_MINOR, "1.3.0-0",
240+
version_weaver::version{"1", "3", "0", "0"}},
241+
{version_weaver::version{"1", "2", "0"}, "1.2.0",
242+
version_weaver::release_type::PRE_PATCH, "1.2.1-0",
243+
version_weaver::version{"1", "2", "1", "0"}},
244+
{version_weaver::version{"1", "2", "0", "1"}, "1.2.0-1",
245+
version_weaver::release_type::PRE_PATCH, "1.2.1-0",
246+
version_weaver::version{"1", "2", "1", "0"}},
232247
};
233248

234249
TEST(basictests, inc) {

0 commit comments

Comments
 (0)