2009-05-04 07:44:17 -04:00
|
|
|
! Copyright (C) 2009 Slava Pestov.
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
|
|
USING: accessors assocs checksums checksums.crc32
|
2015-06-07 19:12:20 -04:00
|
|
|
combinators.short-circuit io.encodings.utf8 io.files kernel
|
|
|
|
namespaces sequences sets source-files vocabs vocabs.errors
|
|
|
|
vocabs.loader ;
|
2010-02-26 16:01:01 -05:00
|
|
|
FROM: namespaces => set ;
|
2009-05-04 07:44:17 -04:00
|
|
|
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 -- )
|
2011-10-24 06:37:47 -04:00
|
|
|
dup lookup-vocab changed-vocabs get and
|
2009-05-04 07:44:17 -04:00
|
|
|
[ dup changed-vocabs get set-at ] [ drop ] if ;
|
|
|
|
|
2015-06-07 19:12:20 -04:00
|
|
|
: mark-unchanged-vocab ( vocab-name -- )
|
2009-05-04 07:44:17 -04:00
|
|
|
changed-vocabs get delete-at ;
|
|
|
|
|
2015-06-07 19:12:20 -04:00
|
|
|
: mark-unchanged-vocabs ( vocab-names -- )
|
|
|
|
[ mark-unchanged-vocab ] each ;
|
2009-05-04 07:44:17 -04:00
|
|
|
|
2015-06-07 19:12:20 -04:00
|
|
|
: changed-vocab-by-name? ( vocab -- ? )
|
2013-03-24 01:25:02 -04:00
|
|
|
changed-vocabs get [ key? ] [ drop t ] if* ;
|
2009-05-04 07:44:17 -04:00
|
|
|
|
2015-06-07 19:12:20 -04:00
|
|
|
: (to-refresh) ( vocab-name loaded? path -- ? )
|
|
|
|
[
|
|
|
|
swap [
|
|
|
|
swap changed-vocab-by-name? [
|
|
|
|
source-modified?
|
|
|
|
] [ drop f ] if
|
|
|
|
] [ 2drop t ] if
|
|
|
|
] [ 2drop f ] if* ;
|
2009-05-04 07:44:17 -04:00
|
|
|
|
2015-06-07 19:12:20 -04:00
|
|
|
: vocab-source-modified? ( vocab-name -- ? )
|
|
|
|
[ ]
|
|
|
|
[ lookup-vocab source-loaded?>> ]
|
|
|
|
[ vocab-source-path ] tri (to-refresh) ;
|
2009-05-04 07:44:17 -04:00
|
|
|
|
2015-06-07 19:12:20 -04:00
|
|
|
: vocab-docs-modified? ( vocab-name -- ? )
|
|
|
|
[ ]
|
|
|
|
[ lookup-vocab docs-loaded?>> ]
|
|
|
|
[ vocab-docs-path ] tri (to-refresh) ;
|
2009-05-04 07:44:17 -04:00
|
|
|
|
|
|
|
: to-refresh ( prefix -- modified-sources modified-docs unchanged )
|
2015-06-08 15:02:25 -04:00
|
|
|
loaded-child-vocab-names [ ".private" tail? ] reject
|
2009-05-04 07:44:17 -04:00
|
|
|
[
|
2015-06-07 19:12:20 -04:00
|
|
|
[ [ vocab-source-modified? ] filter ]
|
|
|
|
[ [ vocab-docs-modified? ] filter ] bi
|
|
|
|
] [
|
|
|
|
[ 2dup append ] dip swap diff
|
|
|
|
] bi ;
|
2009-05-04 07:44:17 -04:00
|
|
|
|
|
|
|
: do-refresh ( modified-sources modified-docs unchanged -- )
|
2015-06-07 19:12:20 -04:00
|
|
|
mark-unchanged-vocabs
|
2009-05-04 07:44:17 -04:00
|
|
|
[
|
2011-10-24 06:37:47 -04:00
|
|
|
[ [ lookup-vocab f >>source-loaded? drop ] each ]
|
|
|
|
[ [ lookup-vocab f >>docs-loaded? drop ] each ] bi*
|
2009-05-04 07:44:17 -04:00
|
|
|
]
|
|
|
|
[
|
2010-02-27 14:52:24 -05:00
|
|
|
union
|
2015-06-07 19:12:20 -04:00
|
|
|
[ mark-unchanged-vocabs ]
|
2009-05-04 07:44:17 -04:00
|
|
|
[ require-all load-failures. ] bi
|
|
|
|
] 2bi ;
|
|
|
|
|
2015-06-07 19:12:20 -04:00
|
|
|
|
2009-05-04 07:44:17 -04:00
|
|
|
: refresh ( prefix -- ) to-refresh do-refresh ;
|
|
|
|
|
2010-02-26 16:01:01 -05:00
|
|
|
: refresh-all ( -- ) "" refresh ;
|