@@ -36,8 +36,11 @@ std::string minimum(std::string_view range) { return ""; }
36
36
37
37
std::expected<std::string, parse_error> inc (version input,
38
38
release_type release_type) {
39
+ version_weaver::version result;
40
+ std::string incremented;
39
41
switch (release_type) {
40
- case MAJOR: {
42
+ case MAJOR:
43
+ case PRE_MAJOR: {
41
44
int major_int;
42
45
auto [ptr, ec] =
43
46
std::from_chars (input.major .data (),
@@ -46,11 +49,12 @@ std::expected<std::string, parse_error> inc(version input,
46
49
return std::unexpected (parse_error::INVALID_MAJOR);
47
50
}
48
51
auto incremented_major_int = major_int + 1 ;
49
- auto major = std::to_string (incremented_major_int);
50
- auto new_version = version_weaver::version{major , " 0" , " 0" };
51
- return new_version ;
52
+ incremented = std::move ( std:: to_string (incremented_major_int) );
53
+ result = version_weaver::version{incremented , " 0" , " 0" };
54
+ break ;
52
55
}
53
- case MINOR: {
56
+ case MINOR:
57
+ case PRE_MINOR: {
54
58
int minor_int;
55
59
auto [ptr, ec] =
56
60
std::from_chars (input.minor .data (),
@@ -59,11 +63,13 @@ std::expected<std::string, parse_error> inc(version input,
59
63
return std::unexpected (parse_error::INVALID_MINOR);
60
64
}
61
65
auto incremented_minor_int = minor_int + 1 ;
62
- return version_weaver::version{
63
- input.major , std::to_string (incremented_minor_int), " 0" };
66
+ incremented = std::move (std::to_string (incremented_minor_int));
67
+ result = version_weaver::version{input.major , incremented, " 0" };
68
+ break ;
64
69
}
65
- case PATCH: {
66
- if (input.pre_release ) {
70
+ case PATCH:
71
+ case PRE_PATCH: {
72
+ if (input.pre_release && release_type != PRE_PATCH) {
67
73
return version_weaver::version{input.major , input.minor , input.patch };
68
74
}
69
75
int patch_int;
@@ -74,12 +80,20 @@ std::expected<std::string, parse_error> inc(version input,
74
80
return std::unexpected (parse_error::INVALID_PATCH);
75
81
}
76
82
auto incremented_patch_int = patch_int + 1 ;
77
- return version_weaver::version{input.major , input.minor ,
78
- std::to_string (incremented_patch_int)};
83
+ incremented = std::move (std::to_string (incremented_patch_int));
84
+ result = version_weaver::version{input.major , input.minor , incremented};
85
+ break ;
79
86
}
80
87
default :
81
88
return std::unexpected (parse_error::INVALID_RELEASE_TYPE);
82
89
}
90
+
91
+ if (release_type == PRE_MAJOR || release_type == PRE_MINOR ||
92
+ release_type == PRE_PATCH) {
93
+ result.pre_release = " 0" ;
94
+ }
95
+
96
+ return result;
83
97
}
84
98
85
99
constexpr inline void trim_whitespace (std::string_view* input) noexcept {
0 commit comments