packagewatcher.jl

Pollen/rewriters/packagewatcher.jl is a source file in module Pollen

			
			
			
			
			
			"""
			

			    PackageWatcher(modules) <: Rewriter

			

			

			Rebuild when a source file in one of `modules` changes.

			

			"""
			

			
			
			struct
			
			 

	
			PackageWatcher
			 
			<:
			 

	
			Rewriter
			
			
    
			
			modules
			::
			Any
			
    
			
			handler
			::
			Any
			

			end

FIXME: remove old constructor and handler field


			
			
			
			

	
			PackageWatcher
			(
			modules
			)
			 
			=
			 
			

	
			PackageWatcher
			(
			modules
			,
			 
			1
			)

TODO: update to work with event-based serving


			
			
			
			function
			 
			

	
			geteventhandler
			(
			
			pkgwatcher
			::

	
			PackageWatcher
			,
			 
			ch
			)
			
			
    
			
			watcher
			 
			=
			 
			
			
			LiveServer
			.
			
			SimpleWatcher
			(
			
			filename
			 
			->
			 
			

	
			onsourcefilechanged
			(
			
			Path
			(
			filename
			)
			,
			 
			ch
			)
			)
			
    
			
			for
			
			 
			m
			 
			in
			 
			
			pkgwatcher
			.
			
			modules
			
			
        
			
			srcdir
			 
			=
			 
			
			joinpath
			(
			
			Path
			(
			
			pkgdir
			(
			m
			)
			)
			,
			 
			
			"
			src
			"
			)
			
        
			
			for
			
			 
			p
			 
			in
			 
			
			walkpath
			(
			srcdir
			)
			
			
            
			
			
			LiveServer
			.
			
			watch_file!
			(
			watcher
			,
			 
			
			string
			(
			p
			)
			)
			
        
			end
			
    
			end
			
    
			
			return
			 
			watcher
			

			end
			

			

			
			
			struct
			
			 

	
			SourceFileUpdated
			 
			<:
			 

	
			Event
			
			
    
			
			p
			::
			AbstractPath
			

			end
			

			

			
			function
			 
			

	
			onsourcefilechanged
			(
			p
			,
			 
			ch
			)
			
			
    
			
			@
			info
			 
			
			"
			Source code file 
			$
			p
			 changed, revising and rebuilding...
			"
			
    
			
			
			Revise
			.
			
			revise
			(
			)
			
    
			
			event
			 
			=
			 
			

	
			SourceFileUpdated
			(
			p
			)
			
    
			
			put!
			(
			ch
			,
			 
			event
			)
			

			end
			

			

			
			function
			 
			

	
			handle
			(
			server
			,
			 
			
			::

	
			ServerMode
			,
			 
			
			::

	
			SourceFileUpdated
			)
			
			
    
			# clear executecode cache
			
    
			
			for
			
			 
			rewriter
			 
			in
			 
			
			
			server
			.
			
			project
			.
			
			rewriters
			
			
        
			
			if
			
			 
			rewriter
			 
			isa
			 

	
			ExecuteCode
			
			
            
			

	
			reset!
			(
			rewriter
			)
			
        
			end
			
    
			end
			
    
			
			for
			
			 
			p
			 
			in
			 
			
			keys
			(
			
			
			server
			.
			
			project
			.
			
			sources
			)
			
			
        
			# only REbuild
			
        
			
			if
			
			 
			p
			 
			in
			 
			
			keys
			(
			
			
			server
			.
			
			project
			.
			
			outputs
			)
			
			
            
			

	
			addrewrite!
			(
			server
			,
			 
			p
			)
			
            
			

	
			addbuild!
			(
			server
			,
			 
			p
			)
			
        
			end
			
    
			end
			

			end