 (defn tag-repo-projects
   [gitdir]
   (let [proj-shas (project-change-shas gitdir)]
-    (doseq [{:keys [sha refs ops]} (report-progress gitdir proj-shas)
+    (doseq [{:keys [sha refs parents ops]} (report-progress gitdir proj-shas)
             :when (not-any? #(.startsWith ^String % "tag: voom-") refs)
             {:keys [op path]} ops]
       (when-let [p (and (not= "D" op)
                         (robust-read-project gitdir sha path))]
-        (let [tag (s/join "--" ["voom"
-                                (str (:group p) "%" (:name p))
-                                (:version p)
-                                (s/replace (:root p) #"/" "%")
-                                (subs sha 0 7)])]
-          (git {:gitdir gitdir} "tag" tag sha))))))
+        (let [tag (s/join "--" (-> ["voom"
+                                    (str (:group p) "%" (:name p))
+                                    (:version p)
+                                    (s/replace (:root p) #"/" "%")
+                                    (subs sha 0 7)]
+                                   (cond-> (empty? parents)
+                                     (conj "no-parent"))))]
+          (git {:gitdir gitdir} "tag" "-f" tag sha))))))
 
 (defn clear-voom-tags
   [gitdir]

(defn parse-tag
  [tag]
  (->
   (zipmap [:prefix :proj :ver :path :sha] (s/split tag #"--"))
   (update-in [:path] (fnil s/replace "") #"%" "/")
   (update-in [:proj] (fnil s/replace "") #"%" "/")))


        found-branch (map #(.getName ^File %)
                          (glob (str gitdir "/refs/remotes/origin/*")))
        :when (or (= found-branch branch) (nil? branch))
        :let [tags-with-parents (remove #(.endsWith ^String % "--no-parent") tags)
              neg-tags (map #(str "^" % "^") tags-with-parents)
              commits
              , (map
                 parse-sha-refs
                 (:lines (apply git {:gitdir gitdir} "log"
                                "--pretty=format:%H,%cd,%p,%d" "--reverse"
                                (concat neg-tags [(str "origin/" found-branch) "--" found-path]))))]
        :when (seq commits)]
    (let [refs (-> commits first :refs)
