From b969f35e01befdf05f7c6d089cd13a8c1504ab69 Mon Sep 17 00:00:00 2001 From: Maximilian Lupke Date: Mon, 22 Feb 2010 20:53:29 +0100 Subject: [PATCH 1/5] add "split-version" --- extra/semantic-versioning/authors.txt | 1 + .../semantic-versioning-tests.factor | 5 +++++ extra/semantic-versioning/semantic-versioning.factor | 10 ++++++++++ 3 files changed, 16 insertions(+) create mode 100644 extra/semantic-versioning/authors.txt create mode 100644 extra/semantic-versioning/semantic-versioning-tests.factor create mode 100644 extra/semantic-versioning/semantic-versioning.factor diff --git a/extra/semantic-versioning/authors.txt b/extra/semantic-versioning/authors.txt new file mode 100644 index 0000000000..28e54b92df --- /dev/null +++ b/extra/semantic-versioning/authors.txt @@ -0,0 +1 @@ +Maximilian Lupke \ No newline at end of file diff --git a/extra/semantic-versioning/semantic-versioning-tests.factor b/extra/semantic-versioning/semantic-versioning-tests.factor new file mode 100644 index 0000000000..9745cc94a2 --- /dev/null +++ b/extra/semantic-versioning/semantic-versioning-tests.factor @@ -0,0 +1,5 @@ +USING: semantic-versioning tools.test ; +IN: semantic-versioning.tests + +[ { 1 0 0 "dev1" } ] [ "1.0.0dev1" split-version ] unit-test +[ { 1 2 3 } ] [ "1.2.3" split-version ] unit-test diff --git a/extra/semantic-versioning/semantic-versioning.factor b/extra/semantic-versioning/semantic-versioning.factor new file mode 100644 index 0000000000..116d5a58a1 --- /dev/null +++ b/extra/semantic-versioning/semantic-versioning.factor @@ -0,0 +1,10 @@ +! Copyright (C) 2010 Maximilian Lupke. +! See http://factorcode.org/license.txt for BSD license. +USING: arrays ascii kernel math.parser sequences splitting ; +IN: semantic-versioning + +: split-version ( string -- array ) + "." split first3 dup [ digit? not ] find + [ cut [ [ string>number ] tri@ ] dip 4array ] + [ drop [ string>number ] tri@ 3array ] + if ; From 79e6738a07c4dbad364c5e56a78787930cc3132a Mon Sep 17 00:00:00 2001 From: Maximilian Lupke Date: Mon, 22 Feb 2010 21:23:43 +0100 Subject: [PATCH 2/5] add "version<=>" --- .../semantic-versioning-tests.factor | 7 ++++++- .../semantic-versioning/semantic-versioning.factor | 14 +++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/extra/semantic-versioning/semantic-versioning-tests.factor b/extra/semantic-versioning/semantic-versioning-tests.factor index 9745cc94a2..236e802458 100644 --- a/extra/semantic-versioning/semantic-versioning-tests.factor +++ b/extra/semantic-versioning/semantic-versioning-tests.factor @@ -1,5 +1,10 @@ -USING: semantic-versioning tools.test ; +USING: math.order semantic-versioning tools.test ; IN: semantic-versioning.tests [ { 1 0 0 "dev1" } ] [ "1.0.0dev1" split-version ] unit-test [ { 1 2 3 } ] [ "1.2.3" split-version ] unit-test + +[ +gt+ ] [ "1.2.0dev1" "0.12.1dev2" version<=> ] unit-test +[ +eq+ ] [ "2.0.0rc1" "2.0.0rc1" version<=> ] unit-test +[ +lt+ ] [ "1.0.0rc1" "1.0.0" version<=> ] unit-test +[ +lt+ ] [ "1.0.0rc1" "1.0.0rc2" version<=> ] unit-test \ No newline at end of file diff --git a/extra/semantic-versioning/semantic-versioning.factor b/extra/semantic-versioning/semantic-versioning.factor index 116d5a58a1..c21cca9a7e 100644 --- a/extra/semantic-versioning/semantic-versioning.factor +++ b/extra/semantic-versioning/semantic-versioning.factor @@ -1,6 +1,7 @@ ! Copyright (C) 2010 Maximilian Lupke. ! See http://factorcode.org/license.txt for BSD license. -USING: arrays ascii kernel math.parser sequences splitting ; +USING: arrays ascii combinators kernel math.order math.parser +sequences splitting ; IN: semantic-versioning : split-version ( string -- array ) @@ -8,3 +9,14 @@ IN: semantic-versioning [ cut [ [ string>number ] tri@ ] dip 4array ] [ drop [ string>number ] tri@ 3array ] if ; + +! okay, not beautiful +: version<=> ( version1 version2 -- <=> ) + [ split-version ] bi@ + { + { [ [ unclip ] bi@ swapd <=> dup +eq+ = not ] [ 2nip ] } + { [ drop [ unclip ] bi@ swapd <=> dup +eq+ = not ] [ 2nip ] } + { [ drop [ unclip ] bi@ swapd <=> dup +eq+ = not ] [ 2nip ] } + { [ drop 2dup [ length ] bi@ >=< dup +eq+ = not ] [ 2nip ] } + [ drop [ first ] bi@ <=> ] + } cond ; From e754cd893950b2c4d6ba04118b61e402c9e1915c Mon Sep 17 00:00:00 2001 From: Maximilian Lupke Date: Mon, 22 Feb 2010 21:29:37 +0100 Subject: [PATCH 3/5] add other comparison words --- .../semantic-versioning.factor | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/extra/semantic-versioning/semantic-versioning.factor b/extra/semantic-versioning/semantic-versioning.factor index c21cca9a7e..ab7478ac94 100644 --- a/extra/semantic-versioning/semantic-versioning.factor +++ b/extra/semantic-versioning/semantic-versioning.factor @@ -20,3 +20,18 @@ IN: semantic-versioning { [ drop 2dup [ length ] bi@ >=< dup +eq+ = not ] [ 2nip ] } [ drop [ first ] bi@ <=> ] } cond ; + +: version< ( version1 version2 -- ? ) + version<=> +lt+ = ; + +: version<= ( version1 version2 -- ? ) + version<=> [ +lt+ = ] [ +eq+ = ] either? ; + +: version= ( version1 version2 -- ? ) + version<=> +eq+ = ; + +: version>= ( version1 version2 -- ? ) + version<=> [ +gt+ = ] [ +eq+ = ] either? ; + +: version> ( version1 version2 -- ? ) + version<=> +gt+ = ; From e4d9993ec5377d48e318225af24134bdfdb15531 Mon Sep 17 00:00:00 2001 From: Maximilian Lupke Date: Mon, 22 Feb 2010 21:51:29 +0100 Subject: [PATCH 4/5] simplify "version<=>" --- .../semantic-versioning.factor | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/extra/semantic-versioning/semantic-versioning.factor b/extra/semantic-versioning/semantic-versioning.factor index ab7478ac94..86973688cb 100644 --- a/extra/semantic-versioning/semantic-versioning.factor +++ b/extra/semantic-versioning/semantic-versioning.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2010 Maximilian Lupke. ! See http://factorcode.org/license.txt for BSD license. -USING: arrays ascii combinators kernel math.order math.parser -sequences splitting ; +USING: arrays ascii kernel math.order math.parser sequences splitting +; IN: semantic-versioning : split-version ( string -- array ) @@ -10,16 +10,10 @@ IN: semantic-versioning [ drop [ string>number ] tri@ 3array ] if ; -! okay, not beautiful : version<=> ( version1 version2 -- <=> ) - [ split-version ] bi@ - { - { [ [ unclip ] bi@ swapd <=> dup +eq+ = not ] [ 2nip ] } - { [ drop [ unclip ] bi@ swapd <=> dup +eq+ = not ] [ 2nip ] } - { [ drop [ unclip ] bi@ swapd <=> dup +eq+ = not ] [ 2nip ] } - { [ drop 2dup [ length ] bi@ >=< dup +eq+ = not ] [ 2nip ] } - [ drop [ first ] bi@ <=> ] - } cond ; + [ split-version ] bi@ drop-prefix + 2dup [ length 0 = ] either? + [ [ length ] bi@ >=< ] [ [ first ] bi@ <=> ] if ; : version< ( version1 version2 -- ? ) version<=> +lt+ = ; From f6da57dda7e7dc41cd60564bb4c0ce6d42c42754 Mon Sep 17 00:00:00 2001 From: Maximilian Lupke Date: Mon, 22 Feb 2010 22:25:24 +0100 Subject: [PATCH 5/5] add basic documentation --- .../semantic-versioning-docs.factor | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 extra/semantic-versioning/semantic-versioning-docs.factor diff --git a/extra/semantic-versioning/semantic-versioning-docs.factor b/extra/semantic-versioning/semantic-versioning-docs.factor new file mode 100644 index 0000000000..6d10abcb93 --- /dev/null +++ b/extra/semantic-versioning/semantic-versioning-docs.factor @@ -0,0 +1,55 @@ +! Copyright (C) 2010 Maximilian Lupke. +! See http://factorcode.org/license.txt for BSD license. +USING: arrays help.markup help.syntax kernel strings ; +IN: semantic-versioning + +HELP: split-version +{ $values + { "string" string } + { "array" array } +} +{ $description "Splits the version string into a sequnece of major version, minor version, patch level and an alphanumeric identifier if given. See " { $url "http://semver.org/" } " for a detailed description." } ; + +HELP: version< +{ $values + { "version1" string } { "version2" string } + { "?" boolean } +} ; + +HELP: version<= +{ $values + { "version1" string } { "version2" string } + { "?" boolean } +} ; + +HELP: version<=> +{ $values + { "version1" string } { "version2" string } + { "<=>" string } +} ; + +HELP: version= +{ $values + { "version1" string } { "version2" string } + { "?" boolean } +} ; + +HELP: version> +{ $values + { "version1" string } { "version2" string } + { "?" boolean } +} ; + +HELP: version>= +{ $values + { "version1" string } { "version2" string } + { "?" boolean } +} ; + +ARTICLE: { "Versioning" "Semantic Versioning" } "Semantic Versioning" +{ $vocab-link "semantic-versioning" } +$nl +{ "See " { $url "http://semver.org/" } " for a detailed description of semantic versioning." } +; + +ABOUT: { "Versioning" "Semantic Versioning" }