1 ! Copyright (C) 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors assocs checksums checksums.crc32
4 combinators.short-circuit io.encodings.utf8 io.files kernel
5 namespaces sequences sets source-files vocabs vocabs.errors
7 FROM: namespaces => set ;
10 : source-modified? ( path -- ? )
11 dup source-files get at [
14 utf8 file-lines crc32 checksum-lines
23 SYMBOL: changed-vocabs
25 : changed-vocab ( vocab -- )
26 dup lookup-vocab changed-vocabs get and
27 [ dup changed-vocabs get set-at ] [ drop ] if ;
29 : mark-unchanged-vocab ( vocab-name -- )
30 changed-vocabs get delete-at ;
32 : mark-unchanged-vocabs ( vocab-names -- )
33 [ mark-unchanged-vocab ] each ;
35 : changed-vocab-by-name? ( vocab -- ? )
36 changed-vocabs get [ key? ] [ drop t ] if* ;
38 : (to-refresh) ( vocab-name loaded? path -- ? )
41 swap changed-vocab-by-name? [
47 : vocab-source-modified? ( vocab-name -- ? )
49 [ lookup-vocab source-loaded?>> ]
50 [ vocab-source-path ] tri (to-refresh) ;
52 : vocab-docs-modified? ( vocab-name -- ? )
54 [ lookup-vocab docs-loaded?>> ]
55 [ vocab-docs-path ] tri (to-refresh) ;
57 : to-refresh ( prefix -- modified-sources modified-docs unchanged )
58 loaded-child-vocab-names [ ".private" tail? ] reject
60 [ [ vocab-source-modified? ] filter ]
61 [ [ vocab-docs-modified? ] filter ] bi
63 [ 2dup append ] dip swap diff
66 : do-refresh ( modified-sources modified-docs unchanged -- )
69 [ [ lookup-vocab f >>source-loaded? drop ] each ]
70 [ [ lookup-vocab f >>docs-loaded? drop ] each ] bi*
74 [ mark-unchanged-vocabs ]
75 [ require-all load-failures. ] bi
79 : refresh ( prefix -- ) to-refresh do-refresh ;
81 : refresh-all ( -- ) "" refresh ;