Redo refresh-all
parent
9373df5c4c
commit
f6e73abc02
|
@ -110,6 +110,8 @@ IN: vocabs.loader.tests
|
||||||
] with-compilation-unit
|
] with-compilation-unit
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
[ ] [ "vocabs.loader.test.b" changed-vocab ] unit-test
|
||||||
|
|
||||||
[ ] [ "vocabs.loader.test.b" refresh ] unit-test
|
[ ] [ "vocabs.loader.test.b" refresh ] unit-test
|
||||||
|
|
||||||
[ 3 ] [ "count-me" get-global ] unit-test
|
[ 3 ] [ "count-me" get-global ] unit-test
|
||||||
|
|
|
@ -10,8 +10,7 @@ IN: tools.vocabs.monitor
|
||||||
{ { CHAR: / CHAR: . } { CHAR: \\ CHAR: . } } substitute ;
|
{ { CHAR: / CHAR: . } { CHAR: \\ CHAR: . } } substitute ;
|
||||||
|
|
||||||
: path>vocab-name ( path -- vocab )
|
: path>vocab-name ( path -- vocab )
|
||||||
dup ".factor" tail? [ parent-directory ] when
|
dup ".factor" tail? [ parent-directory ] when ;
|
||||||
;
|
|
||||||
|
|
||||||
: chop-vocab-root ( path -- path' )
|
: chop-vocab-root ( path -- path' )
|
||||||
"resource:" prepend-path (normalize-path)
|
"resource:" prepend-path (normalize-path)
|
||||||
|
@ -23,10 +22,6 @@ IN: tools.vocabs.monitor
|
||||||
: path>vocab ( path -- vocab )
|
: path>vocab ( path -- vocab )
|
||||||
chop-vocab-root path>vocab-name vocab-dir>vocab-name ;
|
chop-vocab-root path>vocab-name vocab-dir>vocab-name ;
|
||||||
|
|
||||||
: changed-vocab ( vocab -- )
|
|
||||||
dup vocab
|
|
||||||
[ dup changed-vocabs get-global set-at ] [ drop ] if ;
|
|
||||||
|
|
||||||
: monitor-thread ( monitor -- )
|
: monitor-thread ( monitor -- )
|
||||||
#! On OS X, monitors give us the full path, so we chop it
|
#! On OS X, monitors give us the full path, so we chop it
|
||||||
#! off if its there.
|
#! off if its there.
|
||||||
|
|
|
@ -32,43 +32,6 @@ IN: tools.vocabs
|
||||||
[ vocab-tests % ] tri
|
[ vocab-tests % ] tri
|
||||||
] { } make ;
|
] { } make ;
|
||||||
|
|
||||||
: source-modified? ( path -- ? )
|
|
||||||
dup source-files get at [
|
|
||||||
dup source-file-path
|
|
||||||
dup exists? [
|
|
||||||
utf8 file-lines lines-crc32
|
|
||||||
swap source-file-checksum = not
|
|
||||||
] [
|
|
||||||
2drop f
|
|
||||||
] if
|
|
||||||
] [
|
|
||||||
exists?
|
|
||||||
] ?if ;
|
|
||||||
|
|
||||||
: modified ( seq quot -- seq )
|
|
||||||
[ dup ] swap compose { } map>assoc
|
|
||||||
[ nip ] assoc-subset
|
|
||||||
[ nip source-modified? ] assoc-subset keys ; inline
|
|
||||||
|
|
||||||
: modified-sources ( vocabs -- seq )
|
|
||||||
[ vocab-source-path ] modified ;
|
|
||||||
|
|
||||||
: modified-docs ( vocabs -- seq )
|
|
||||||
[ vocab-docs-path ] modified ;
|
|
||||||
|
|
||||||
SYMBOL: changed-vocabs
|
|
||||||
|
|
||||||
[ f changed-vocabs set-global ] "tools.vocabs" add-init-hook
|
|
||||||
|
|
||||||
: filter-changed ( vocabs -- vocabs' )
|
|
||||||
changed-vocabs get [
|
|
||||||
[ delete-at* nip ] curry subset
|
|
||||||
] when* ;
|
|
||||||
|
|
||||||
: to-refresh ( prefix -- modified-sources modified-docs )
|
|
||||||
child-vocabs filter-changed
|
|
||||||
[ modified-sources ] [ modified-docs ] bi ;
|
|
||||||
|
|
||||||
: vocab-heading. ( vocab -- )
|
: vocab-heading. ( vocab -- )
|
||||||
nl
|
nl
|
||||||
"==== " write
|
"==== " write
|
||||||
|
@ -95,12 +58,87 @@ SYMBOL: failures
|
||||||
failures get
|
failures get
|
||||||
] with-compiler-errors ;
|
] with-compiler-errors ;
|
||||||
|
|
||||||
: do-refresh ( modified-sources modified-docs -- )
|
: source-modified? ( path -- ? )
|
||||||
|
dup source-files get at [
|
||||||
|
dup source-file-path
|
||||||
|
dup exists? [
|
||||||
|
utf8 file-lines lines-crc32
|
||||||
|
swap source-file-checksum = not
|
||||||
|
] [
|
||||||
|
2drop f
|
||||||
|
] if
|
||||||
|
] [
|
||||||
|
exists?
|
||||||
|
] ?if ;
|
||||||
|
|
||||||
|
SYMBOL: changed-vocabs
|
||||||
|
|
||||||
|
[ f changed-vocabs set-global ] "tools.vocabs" add-init-hook
|
||||||
|
|
||||||
|
: changed-vocab ( vocab -- )
|
||||||
|
dup vocab
|
||||||
|
[ dup changed-vocabs get-global set-at ] [ drop ] if ;
|
||||||
|
|
||||||
|
: unchanged-vocab ( vocab -- )
|
||||||
|
changed-vocabs get-global delete-at ;
|
||||||
|
|
||||||
|
: unchanged-vocabs ( vocabs -- )
|
||||||
|
[ unchanged-vocab ] each ;
|
||||||
|
|
||||||
|
: filter-changed ( vocabs -- vocabs' )
|
||||||
|
changed-vocabs get [
|
||||||
|
[ key? ] curry subset
|
||||||
|
] when* ;
|
||||||
|
|
||||||
|
SYMBOL: modified-sources
|
||||||
|
SYMBOL: modified-docs
|
||||||
|
|
||||||
|
: (to-refresh) ( vocab variable loaded? path -- )
|
||||||
|
dup [
|
||||||
|
swap [
|
||||||
|
pick changed-vocabs get key? [
|
||||||
|
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-sources get modified-docs get append swap seq-diff ] bi
|
||||||
|
] with-scope ;
|
||||||
|
|
||||||
|
: do-refresh ( modified-sources modified-docs unchanged -- )
|
||||||
|
unchanged-vocabs
|
||||||
[
|
[
|
||||||
[ [ f swap set-vocab-source-loaded? ] each ]
|
[ [ f swap set-vocab-source-loaded? ] each ]
|
||||||
[ [ f swap set-vocab-docs-loaded? ] each ] bi*
|
[ [ f swap set-vocab-docs-loaded? ] each ] bi*
|
||||||
]
|
]
|
||||||
[ append prune require-all load-failures. ] 2bi ;
|
[
|
||||||
|
append prune
|
||||||
|
[ unchanged-vocabs ]
|
||||||
|
[ require-all load-failures. ] bi
|
||||||
|
] 2bi ;
|
||||||
|
|
||||||
: refresh ( prefix -- ) to-refresh do-refresh ;
|
: refresh ( prefix -- ) to-refresh do-refresh ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue