1 ! Copyright (C) 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors assocs checksums checksums.crc32
4 io.encodings.utf8 io.files kernel namespaces sequences sets
5 source-files vocabs vocabs.errors vocabs.loader ;
6 FROM: namespaces => set ;
9 : source-modified? ( path -- ? )
10 dup source-files get at [
13 utf8 file-lines crc32 checksum-lines
22 SYMBOL: changed-vocabs
24 : changed-vocab ( vocab -- )
25 dup lookup-vocab changed-vocabs get and
26 [ dup changed-vocabs get set-at ] [ drop ] if ;
28 : unchanged-vocab ( vocab -- )
29 changed-vocabs get delete-at ;
31 : unchanged-vocabs ( vocabs -- )
32 [ unchanged-vocab ] each ;
34 : changed-vocab? ( vocab -- ? )
35 changed-vocabs get [ key? ] [ drop t ] if* ;
37 : filter-changed ( vocabs -- vocabs' )
38 [ changed-vocab? ] filter ;
40 SYMBOL: modified-sources
43 : (to-refresh) ( vocab variable loaded? path -- )
47 source-modified? [ get push ] [ 2drop ] if
49 ] [ drop get push ] if
52 : to-refresh ( prefix -- modified-sources modified-docs unchanged )
54 V{ } clone modified-sources set
55 V{ } clone modified-docs set
57 child-vocabs [ ".private" tail? ] reject [
61 [ lookup-vocab source-loaded?>> ]
66 [ lookup-vocab docs-loaded?>> ]
75 [ modified-docs get modified-sources get append diff ] bi
78 : do-refresh ( modified-sources modified-docs unchanged -- )
81 [ [ lookup-vocab f >>source-loaded? drop ] each ]
82 [ [ lookup-vocab f >>docs-loaded? drop ] each ] bi*
87 [ require-all load-failures. ] bi
90 : refresh ( prefix -- ) to-refresh do-refresh ;
92 : refresh-all ( -- ) "" refresh ;