]> gitweb.factorcode.org Git - factor.git/blob - extra/semantic-versioning/semantic-versioning.factor
Reformat
[factor.git] / extra / semantic-versioning / semantic-versioning.factor
1 ! Copyright (C) 2010 Maximilian Lupke.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: arrays ascii kernel math math.order math.parser sequences
4 sorting.human splitting ;
5 IN: semantic-versioning
6
7 <PRIVATE
8
9 : number<=> ( obj1 obj2 -- <=> )
10     [ [ zero? ] trim-tail-slice ] bi@ <=> ;
11
12 : pre-release<=> ( obj1 obj2 -- <=> )
13     2dup [ empty? ] either?
14     [ [ length ] bi@ >=< ] [ human<=> ] if ;
15
16 PRIVATE>
17
18 : split-version ( string -- array )
19     "+" split1 [
20         dup [ [ digit? not ] [ CHAR: . = not ] bi and ] find [
21             [ cut ] [ CHAR: - = [ rest [ f ] when-empty ] when ] bi*
22         ] [ drop f ] if*
23         [ "." split [ string>number 0 or ] map 3 0 pad-tail ] dip
24     ] dip 3array ;
25
26 : version<=> ( version1 version2 -- <=> )
27     [ split-version ] bi@
28     2dup [ first ] bi@ number<=> dup +eq+ =
29     [ drop [ second ] bi@ pre-release<=> ] [ 2nip ] if ;
30
31 : version< ( version1 version2 -- ? )
32     version<=> +lt+ eq? ;
33
34 : version<= ( version1 version2 -- ? )
35     version<=> { +lt+ +eq+ } member-eq? ;
36
37 : version= ( version1 version2 -- ? )
38     version<=> +eq+ eq? ;
39
40 : version>= ( version1 version2 -- ? )
41     version<=> { +gt+ +eq+ } member-eq? ;
42
43 : version> ( version1 version2 -- ? )
44     version<=> +gt+ eq? ;