{ "1.3.3" } [ "1.3.2" >semver bump-patch semver>string ] unit-test
{ "0.1.5" } [ "0.1.5-rc.2" >semver bump-patch semver>string ] unit-test
-{ "0.1.5-dev.0" } [ "0.1.4" >semver bump-prerelease semver>string ] unit-test
-{ "0.1.5-dev.1" } [ "0.1.5-dev.0" >semver bump-prerelease semver>string ] unit-test
-
-{ "1.2.4-dev.0" } [ "1.2.3" >semver bump-prepatch semver>string ] unit-test
-
-{ "1.3.0-dev.0" } [ "1.2.3" >semver bump-preminor semver>string ] unit-test
-{ "1.3.0" } [ "1.2.3" >semver bump-minor semver>string ] unit-test
+{
+ "0.1.4"
+ "0.1.5-0"
+ "0.1.5-1"
+ "0.1.5-2"
+ "0.1.5-alpha.0"
+ "0.1.5-alpha.1"
+ "0.1.5-beta.0"
+ "0.1.5-beta.1"
+ "0.1.5-rc.0"
+ "0.1.5"
+} [
+ "0.1.4" >semver [ semver>string ] keep
+ bump-prepatch [ semver>string ] keep
+ 2 [ bump-prerelease [ semver>string ] keep ] times
+ 2 [ bump-alpha [ semver>string ] keep ] times
+ 2 [ bump-beta [ semver>string ] keep ] times
+ bump-rc [ semver>string ] keep
+ bump-patch semver>string
+] unit-test
-{ "2.0.0-dev.0" } [ "1.2.3" >semver bump-premajor semver>string ] unit-test
-{ "2.0.0-dev.1" } [ "1.2.3" >semver bump-premajor bump-prerelease semver>string ] unit-test
+{ "1.2.4-0" } [ "1.2.3" >semver bump-prepatch semver>string ] unit-test
+{ "1.3.0-0" } [ "1.2.3" >semver bump-preminor semver>string ] unit-test
+{ "2.0.0-0" } [ "1.2.3" >semver bump-premajor semver>string ] unit-test
+{ "2.0.0-1" } [ "1.2.3" >semver bump-premajor bump-prerelease semver>string ] unit-test
-{ "1.2.3-erg.0" } [ "1.2.3-dev.0" >semver "erg" bump-prerelease-id semver>string ] unit-test
+{ "1.2.3-erg.0" } [ "1.2.3-0" >semver "erg" bump-prerelease-id semver>string ] unit-test
{ "1.2.3-erg.1" } [ "1.2.3-erg.0" >semver "erg" bump-prerelease-id semver>string ] unit-test
{ "1.2.4-erg.0" } [ "1.2.3" >semver "erg" bump-prerelease-id semver>string ] unit-test
{ t } [
{
+ "1.0.0-0"
+ "1.0.0-12"
"1.0.0-alpha"
"1.0.0-alpha.1"
"1.0.0-alpha.beta"
USING: accessors arrays assocs.extras combinators
combinators.short-circuit combinators.smart io kernel math
math.order math.parser multiline peg.ebnf sequences
-sequences.deep sequences.extras sorting.human splitting strings
-;
+sequences.deep splitting strings ;
IN: semver
: bump-prerelease-id ( semver id -- semver )
over prerelease>> [
- [ bump-patch ] dip ".0" append
+ [ bump-patch ] dip [ "0" ] [ ".0" append ] if-empty
] [
2dup swap head? [
"." split
over [ string>number 1 + number>string ] change-nth
"." join nip
] [
- 2drop ".0" append
+ 2drop [ "0" ] [ ".0" append ] if-empty
] if
] [
- drop ".0" append
+ drop [ "0" ] [ ".0" append ] if-empty
] if
- ] if-empty >>prerelease
- f >>build ;
+ ] if-empty >>prerelease f >>build ;
-: bump-prerelease ( semver -- semver )
- "dev" bump-prerelease-id ;
+: bump-prerelease ( semver -- semver ) f bump-prerelease-id ;
-: bump-prepatch ( semver -- semver )
- [ 1 + ] change-patch
- "dev.0" >>prerelease
- f >>build ;
+: bump-alpha ( semver -- semver ) "alpha" bump-prerelease-id ;
-: bump-preminor ( semver -- semver )
- [ 1 + ] change-minor
- 0 >>patch
- "dev.0" >>prerelease
- f >>build ;
+: bump-beta ( semver -- semver ) "beta" bump-prerelease-id ;
+
+: bump-rc ( semver -- semver ) "rc" bump-prerelease-id ;
: bump-premajor ( semver -- semver )
- [ 1 + ] change-major
- 0 >>minor
- 0 >>patch
- "dev.0" >>prerelease
- f >>build ;
+ [ 1 + ] change-major 0 >>minor 0 >>patch "0" >>prerelease f >>build ;
+
+: bump-preminor ( semver -- semver )
+ [ 1 + ] change-minor 0 >>patch "0" >>prerelease f >>build ;
+
+: bump-prepatch ( semver -- semver )
+ [ 1 + ] change-patch "0" >>prerelease f >>build ;
: lower-range ( semver -- str )
semver>string ">=" prepend ;