   result is passed to the next handler in the pipeline. The fileset obtained
   from the next handler is then returned up the handler stack. The body must
   evaluate to a fileset object. Roughly equivalent to:
-  
+
       (fn [next-handler]
         (fn [binding]
           (next-handler (do ... ...))))

  handler is called with the current fileset, and the result is bound to
  binding. The body expressions are then evaluated for side effects and the
  bound fileset is returned up the handler stack. Roughly equivalent to:
  
      (fn [next-handler]
        (fn [fileset]
          (let [binding (next-handler fileset)]
            (do ... ...)
            binding)))
  
  where ... are the given body expressions."
  `(fn [next-task#]
     (fn [fileset#]

  corresponding temp dirs, reflecting any changes to :source-paths, etc."
  []
  (@src-watcher)
  (->>  (watch-dirs
          (fn [_]
            (sync-user-dirs!)
            (reset! last-file-change (System/currentTimeMillis)))
          (->> [:source-paths :resource-paths :asset-paths]
            (mapcat get-env)
            (filter #(.isDirectory (io/file %)))
            set)
          :debounce (get-env :watcher-debounce-interval))
        (reset! src-watcher))
  (set-fake-class-path!)
  (sync-user-dirs!))

