diff --git a/basis/vocabs/refresh/monitor/monitor.factor b/basis/vocabs/refresh/monitor/monitor.factor index c9b664dc91..b72bae9d89 100644 --- a/basis/vocabs/refresh/monitor/monitor.factor +++ b/basis/vocabs/refresh/monitor/monitor.factor @@ -3,7 +3,8 @@ USING: accessors assocs command-line concurrency.messaging continuations init io.backend io.files io.monitors io.pathnames kernel namespaces sequences sets splitting threads fry -tr vocabs vocabs.loader vocabs.refresh vocabs.cache ; +tr vocabs vocabs.loader vocabs.refresh vocabs.cache +io.files.links ; IN: vocabs.refresh.monitor TR: convert-separators "/\\" ".." ; @@ -16,10 +17,15 @@ TR: convert-separators "/\\" ".." ; : path>vocab-name ( path -- vocab ) dup ".factor" tail? [ parent-directory ] when ; +: scrub-links-in-path ( path -- path' ) + normalize-path path-components "/" + [ append-path follow-links ] reduce ; + : chop-vocab-root ( path -- path' ) "resource:" prepend-path normalize-path dup vocab-roots get - [ normalize-path ] map + [ [ normalize-path ] map ] + [ [ scrub-links-in-path ] map ] bi append [ head? ] with find nip ?head drop ; @@ -29,7 +35,7 @@ TR: convert-separators "/\\" ".." ; : monitor-loop ( monitor -- ) #! On OS X, monitors give us the full path, so we chop it #! off if its there. - [ next-change path>> path>vocab changed-vocab reset-cache ] + [ next-change path>> P path>vocab changed-vocab reset-cache ] [ monitor-loop ] bi ;