                  :branch branch}))
             (partition 2 1 (concat commits [:end]))))))
 
-;; Add metadata pinning (how big to bump? all? minor? sha?) -- warn about not updating
-;; Opt-in autobump  -- default to no major auto
-(defn get-fresh-versions []
-  (let [dirs (all-repos-dirs)
-        _ (fetch-checkout-all dirs)]
-    (into {}
-          (for [dir dirs
-                prj-file (find-project-files dir)]
-            (let [{:keys [group name version] :as prj} (project/read prj-file)
-                  gver (get-voom-version (:root prj) :gitdir dir)
-                  qual (format-voom-ver gver timestamp-fmt)
-                  new-ver (str (s/replace version #"-SNAPSHOT" "") qual)]
-              [(symbol group name) new-ver])))))
-
-(defn fresh-version [fresh-versions-map [prj ver :as dep]]
-  (if-let [new-ver (get fresh-versions-map prj)]
-    (assoc dep 1 new-ver)
-    (do
-      (when (ver-parse ver)
-        (println "Warning: didn't find or freshen voom-version dep" dep))
-      dep)))
+(defn fresh-version [[prj ver :as dep]]
+  (let [voom-meta (:voom-bump (meta dep))
+        ver-spec (or (:version voom-meta)
+                     (re-find #"^[^.]+." ver))
+        groups (->> (newest-voom-ver-by-spec prj ver-spec voom-meta)
+                    (map #(assoc % :voom-ver (format-voom-ver
+                                              (update-in % [:sha] subs 0 7))))
+                    (group-by :voom-ver))]
+    (case (count groups)
+     0 (do (println "No matching version found for" prj (pr-str ver-spec))
+           dep)
+     1 (assoc dep 1 (key (first groups)))
+     (do (println "\nMultiple bump resolutions for:"
+                  prj (pr-str ver-spec) (pr-str voom-meta))
+         (doseq [[voom-ver group] groups]
+           (prn voom-ver (map #(select-keys % [:gitdir :branch :path :ctime]) group)))
+         dep))))
 
 (defn rewrite-project-file [input-str replacement-map]
   (reduce (fn [^String text [[prj old-ver :as old-dep] [_ new-ver]]]

(defn freshen [project & args]
  (let [prj-file-name (str (:root project) "/project.clj")
        old-deps (:dependencies project)
        fresh-versions-map (get-fresh-versions)
        desired-new-deps (map #(fresh-version fresh-versions-map %) old-deps)]
    (doseq [[[prj old-ver] [_ new-ver]] (map list old-deps desired-new-deps)]
      (println (format "%-40s" prj)
               (str old-ver

    {:ctime ctime :sha sha}))

(defn format-voom-ver
  [gver]
  (let [{:keys [ver ctime sha]} gver]
    (str (s/replace ver #"-SNAPSHOT" "")
         "-" (formatted-timestamp timestamp-fmt ctime) "-g" sha)))

(defn update-proj-version
  [project long-sha?]
  (let [gver (-> project :root (get-voom-version :long-sha? long-sha?))
        upfn #(format-voom-ver (assoc gver :ver %))
        nproj (update-in project [:version] upfn)
        nmeta (update-in (meta project) [:without-profiles :version] upfn)
        nnproj (with-meta nproj nmeta)]
