diff --git a/src/lioss/pom.clj b/src/lioss/pom.clj index 92c78db..2feac71 100644 --- a/src/lioss/pom.clj +++ b/src/lioss/pom.clj @@ -164,6 +164,29 @@ [:name "Clojars repository"] [:url "https://clojars.org/repo"]]]])) +(defn old-group-id-pom [opts] + (let [proj-name (:name opts) + version (:version opts) + old-group-id (:old-group-id opts) + group-id (:group-id opts)] + [:project {:xmlns "http://maven.apache.org/POM/4.0.0" + :xmlns:xsi "http://www.w3.org/2001/XMLSchema-instance" + :xsi:schemalocation "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"} + [:modelVersion "4.0.0"] + [:groupId old-group-id] + [:artifactId proj-name] + [:version version] + [:dependencies + [:dependency + [:groupId group-id] + [:artifactId proj-name] + [:version version]]] + [:distributionManagement + [:repository + [:id "clojars"] + [:name "Clojars repository"] + [:url "https://clojars.org/repo"]]]])) + (defn spit-pom [h] (util/spit-cwd "pom.xml" (hiccup->xml h))) @@ -174,3 +197,6 @@ (defn spit-relocation-poms [opts] (spit-pom (relocation-pom opts)) (util/do-modules opts (comp spit-pom relocation-pom))) + +(defn spit-old-group-id-pom [opts] + (spit-pom (old-group-id-pom opts))) diff --git a/src/lioss/release.clj b/src/lioss/release.clj index 465e11d..e3642de 100644 --- a/src/lioss/release.clj +++ b/src/lioss/release.clj @@ -96,6 +96,15 @@ (pom/spit-poms opts) (util/do-modules opts (fn [_] (mvn "deploy"))) (mvn "deploy") + + ;; if :old-group-id is defined, create a new pom (in temp dir) + ;; with :old-group-id (name, version same) and points to the + ;; package under actual :group-id as a single dependency + (when (:old-group-id opts) + (util/with-temp-cwd + (pom/spit-old-group-id-pom opts) + (mvn "deploy"))) + (prepend-changelog-placeholders) (git/git! "add" "pom.xml") (util/do-modules opts (fn [_] (git/git! "add" "pom.xml"))) diff --git a/src/lioss/util.clj b/src/lioss/util.clj index f28ab34..987c0ad 100644 --- a/src/lioss/util.clj +++ b/src/lioss/util.clj @@ -1,6 +1,16 @@ (ns lioss.util + (:require [clojure.java.io :as io]) (:import [java.io File])) +(defn delete-recursively + "Delete a directory recursively. + + Also deletes if given just a file." + [^java.io.File file] + (when (.isDirectory file) + (run! delete-recursively (.listFiles file))) + (io/delete-file file)) + (def ^:dynamic *cwd* (System/getProperty "user.dir")) (defmacro with-cwd [cwd & body] @@ -13,6 +23,19 @@ (finally (System/setProperty "user.dir" prev#)))))) +(defmacro with-temp-cwd + "Same as with-cwd except that it creates a temp dir + in *cwd* and evals the body inside it. + + It cleans up the temp dir afterwards also removing + any temp files created within it." + [& body] + `(let [cwd# ".temp" + dir# (File. *cwd* cwd#)] + (.mkdirs dir#) + (with-cwd cwd# ~@body) + (delete-recursively dir#))) + (defn slurp-cwd [f] (slurp (File. *cwd* f)))