         (add-user-asset    (first (user-asset-dirs)))
         (add-user-source   (first (user-source-dirs)))
         (add-user-resource (first (user-resource-dirs)))
-        (add-user-checkout (first (user-checkout-dirs)))
         (update-in [:tree] merge (:tree fileset)))))
 
 (defn reset-build!

        m (->> masks+ (map masks) (apply merge))
        in-fileset? (or (:input m) (:output m))]
    (util/with-let [d (tmp-dir* k)]
      (when in-fileset?
        (let [t (tmpd/map->TmpDir (assoc m :dir d))]
          (swap! tempdirs conj t)
          (when (:input t)
            (set-env! :directories #(conj % (.getPath (:dir t))))))))))

(defn- add-user-asset    [fileset dir] (tmpd/add fileset (get-add-dir fileset #{:user :asset}) dir {}))
(defn- add-user-source   [fileset dir] (tmpd/add fileset (get-add-dir fileset #{:user :source}) dir {}))
(defn- add-user-resource [fileset dir] (tmpd/add fileset (get-add-dir fileset #{:user :resource}) dir {}))
(defn- add-user-checkout [fileset dir] (tmpd/add fileset (get-add-dir fileset #{:user :checkout}) dir {}))

(defn- user-temp-dirs     [] (get-dirs {:dirs @tempdirs} #{:user}))
(defn- user-asset-dirs    [] (get-dirs {:dirs @tempdirs} #{:user :asset}))
(defn- user-source-dirs   [] (get-dirs {:dirs @tempdirs} #{:user :source}))
(defn- user-resource-dirs [] (get-dirs {:dirs @tempdirs} #{:user :resource}))
(defn- user-checkout-dirs [] (get-dirs {:dirs @tempdirs} #{:user :checkout}))
(defn- non-user-temp-dirs [] (->> [:asset :source :resource]
                                  (map #(get-dirs {:dirs @tempdirs} #{%}))
                                  (apply set/union)

   :asset    {:input nil :output true}
   :source   {:input true :output nil}
   :resource {:input true :output true}
   :checkout {:input nil :output nil :user nil :checkout true}})

(defn- genkw [& [prefix-string :as args]]
  (->> [(ns-name *ns*) (apply gensym args)] (map str) (apply keyword)))
