1 ! Copyright (C) 2014 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: arrays combinators.short-circuit combinators.smart
4 io.directories io.pathnames kernel math math.parser sequences
5 sorting sorting.human splitting sets ;
8 CONSTANT: fdb-filename-base "fq"
10 : fdb-filename? ( path -- ? )
13 [ second fdb-filename-base = ]
14 [ first string>number ]
15 [ third string>number ]
18 ERROR: not-an-fdb-filename string ;
20 : ensure-fdb-filename ( string -- string )
21 dup fdb-filename? [ throw-not-an-fdb-filename ] unless ;
23 ERROR: not-a-string-number string ;
25 : ?string>number ( string -- n )
26 dup string>number dup [ nip ] [ throw-not-a-string-number ] if ;
28 : change-string-number ( string quot -- string' )
29 [ [ string>number ] dip call number>string ] 2keep drop
30 length CHAR: 0 pad-head ; inline
32 : next-vnode-name ( string -- string' )
35 first [ 1 + ] change-string-number
36 "." fdb-filename-base ".0"
37 ] "" append-outputs-as ;
39 : trim-head-zeros ( string -- string' )
40 [ CHAR: 0 = ] trim-head 1 CHAR: 0 pad-head ;
42 : canonical-fdb-name ( string -- string' )
47 [ trim-head-zeros ] tri* 3array "." join ;
49 : next-vnode-version-name ( string -- string' )
52 [ last [ 1 + ] change-string-number ] bi "." glue ;
54 : path>next-vnode-path ( path -- path' )
56 [ fdb-filename? ] filter
58 fdb-filename-base "0." ".0" surround append-path
60 last "." split first [ 1 + ] change-string-number
61 ".fq.0" append append-path
64 : path-has-fdb? ( path -- ? )
65 directory-files [ fdb-filename? ] filter length 0 > ;
67 : path-only-fdb? ( path -- ? )
70 [ [ fdb-filename? ] filter length ] bi = ;
72 : path-fdb-duplicates ( path -- seq )
73 directory-files [ canonical-fdb-name ] map members ;
75 : ensure-fdb-directory ( filename -- filename )
76 [ make-directories ] keep ;
78 : ensure-fdb-filename-directory ( filename -- filename )
79 [ parent-directory make-directories ] keep ;
81 ! : path>next-vnode-version-name ( path -- path' )