91 lines
2.4 KiB
Factor
91 lines
2.4 KiB
Factor
! Copyright (C) 2009 Slava Pestov.
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: accessors assocs checksums checksums.crc32
|
|
io.encodings.utf8 io.files kernel namespaces sequences sets
|
|
source-files vocabs vocabs.errors vocabs.loader ;
|
|
IN: vocabs.refresh
|
|
|
|
: source-modified? ( path -- ? )
|
|
dup source-files get at [
|
|
dup path>>
|
|
dup exists? [
|
|
utf8 file-lines crc32 checksum-lines
|
|
swap checksum>> = not
|
|
] [
|
|
2drop f
|
|
] if
|
|
] [
|
|
exists?
|
|
] ?if ;
|
|
|
|
SYMBOL: changed-vocabs
|
|
|
|
: changed-vocab ( vocab -- )
|
|
dup vocab changed-vocabs get and
|
|
[ dup changed-vocabs get set-at ] [ drop ] if ;
|
|
|
|
: unchanged-vocab ( vocab -- )
|
|
changed-vocabs get delete-at ;
|
|
|
|
: unchanged-vocabs ( vocabs -- )
|
|
[ unchanged-vocab ] each ;
|
|
|
|
: changed-vocab? ( vocab -- ? )
|
|
changed-vocabs get dup [ key? ] [ 2drop t ] if ;
|
|
|
|
: filter-changed ( vocabs -- vocabs' )
|
|
[ changed-vocab? ] filter ;
|
|
|
|
SYMBOL: modified-sources
|
|
SYMBOL: modified-docs
|
|
|
|
: (to-refresh) ( vocab variable loaded? path -- )
|
|
dup [
|
|
swap [
|
|
pick changed-vocab? [
|
|
source-modified? [ get push ] [ 2drop ] if
|
|
] [ 3drop ] if
|
|
] [ drop get push ] if
|
|
] [ 2drop 2drop ] if ;
|
|
|
|
: to-refresh ( prefix -- modified-sources modified-docs unchanged )
|
|
[
|
|
V{ } clone modified-sources set
|
|
V{ } clone modified-docs set
|
|
|
|
child-vocabs [
|
|
[
|
|
[
|
|
[ modified-sources ]
|
|
[ vocab source-loaded?>> ]
|
|
[ vocab-source-path ]
|
|
tri (to-refresh)
|
|
] [
|
|
[ modified-docs ]
|
|
[ vocab docs-loaded?>> ]
|
|
[ vocab-docs-path ]
|
|
tri (to-refresh)
|
|
] bi
|
|
] each
|
|
|
|
modified-sources get
|
|
modified-docs get
|
|
]
|
|
[ modified-docs get modified-sources get append diff ] bi
|
|
] with-scope ;
|
|
|
|
: do-refresh ( modified-sources modified-docs unchanged -- )
|
|
unchanged-vocabs
|
|
[
|
|
[ [ vocab f >>source-loaded? drop ] each ]
|
|
[ [ vocab f >>docs-loaded? drop ] each ] bi*
|
|
]
|
|
[
|
|
append prune
|
|
[ unchanged-vocabs ]
|
|
[ require-all load-failures. ] bi
|
|
] 2bi ;
|
|
|
|
: refresh ( prefix -- ) to-refresh do-refresh ;
|
|
|
|
: refresh-all ( -- ) "" refresh ; |