@@ -36,8 +36,11 @@ std::string minimum(std::string_view range) { return ""; }
3636
3737std::expected<std::string, parse_error> inc (version input,
3838 release_type release_type) {
39+ version_weaver::version result;
40+ std::string incremented;
3941 switch (release_type) {
40- case MAJOR: {
42+ case MAJOR:
43+ case PRE_MAJOR: {
4144 int major_int;
4245 auto [ptr, ec] =
4346 std::from_chars (input.major .data (),
@@ -46,11 +49,12 @@ std::expected<std::string, parse_error> inc(version input,
4649 return std::unexpected (parse_error::INVALID_MAJOR);
4750 }
4851 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 ;
5255 }
53- case MINOR: {
56+ case MINOR:
57+ case PRE_MINOR: {
5458 int minor_int;
5559 auto [ptr, ec] =
5660 std::from_chars (input.minor .data (),
@@ -59,11 +63,13 @@ std::expected<std::string, parse_error> inc(version input,
5963 return std::unexpected (parse_error::INVALID_MINOR);
6064 }
6165 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 ;
6469 }
65- case PATCH: {
66- if (input.pre_release ) {
70+ case PATCH:
71+ case PRE_PATCH: {
72+ if (input.pre_release && release_type != PRE_PATCH) {
6773 return version_weaver::version{input.major , input.minor , input.patch };
6874 }
6975 int patch_int;
@@ -74,12 +80,20 @@ std::expected<std::string, parse_error> inc(version input,
7480 return std::unexpected (parse_error::INVALID_PATCH);
7581 }
7682 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 ;
7986 }
8087 default :
8188 return std::unexpected (parse_error::INVALID_RELEASE_TYPE);
8289 }
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;
8397}
8498
8599constexpr inline void trim_whitespace (std::string_view* input) noexcept {
0 commit comments