Skip to content

Commit

Permalink
Merge pull request #216 from liquidz/dev
Browse files Browse the repository at this point in the history
Next release
  • Loading branch information
liquidz committed May 1, 2023
2 parents 0a6ce33 + 9a2b700 commit be88ff5
Show file tree
Hide file tree
Showing 28 changed files with 267 additions and 87 deletions.
12 changes: 12 additions & 0 deletions CHANGELOG.adoc
Original file line number Diff line number Diff line change
@@ -1,6 +1,18 @@
All notable changes to this project will be documented in this file. This change log follows the conventions of http://keepachangelog.com/[keepachangelog.com].

== Unreleased (dev)
// {{{
=== Added
* https://github.com/liquidz/antq/issues/212[#212]: Added support for exclusion by specifying version ranges.
** e.g.
*** Command line: `--exclude=foo/bar@1.2.x`
*** Meta data: `foo/bar ^{:antq/exclude "1.2.x"} {:mvn/version ...}`
** See link:./doc/exclusions.adoc[Exclusions] for more information.

=== Changed
* Bumped tools.deps to 0.18.1335.
* Bumped malli to 0.11.0.
// }}}

== 2.3.1043 (2023-04-01)
// {{{
Expand Down
2 changes: 2 additions & 0 deletions README.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,8 @@ E.g.
--exclude=com.github.liquidz/antq
# Exclude specific version of specified artifact
--exclude=com.github.liquidz/antq@0.13.0
# Exclude version range of specified artifact
--exclude=com.github.liquidz/antq@0.13.x
----

When you specified a version number, antq will report the latest version excluding only the specified version.
Expand Down
2 changes: 1 addition & 1 deletion build.clj
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

(def ^:private config
{:lib 'com.github.liquidz/antq
:version "2.3.{{git/commit-count}}"
:version "2.4.{{git/commit-count}}"
:description "Point out your outdated dependencies"
:main 'antq.core
:documents [{:file "CHANGELOG.adoc"
Expand Down
4 changes: 2 additions & 2 deletions deps.edn
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
org.clojure/data.zip {:mvn/version "1.0.0"}
org.clojure/tools.cli {:mvn/version "1.0.214"}
org.clojure/core.async {:mvn/version "1.6.673"}
org.clojure/tools.deps {:mvn/version "0.18.1331"}
org.clojure/tools.deps {:mvn/version "0.18.1335"}
org.clojure/data.json {:mvn/version "2.4.0"}
clj-commons/clj-yaml {:mvn/version "1.0.26"}
version-clj/version-clj {:mvn/version "2.0.2"}
Expand All @@ -23,7 +23,7 @@
{:extra-paths ["dev"
"test"
"test/resources"]
:extra-deps {metosin/malli {:mvn/version "0.10.4"}
:extra-deps {metosin/malli {:mvn/version "0.11.0"}
lambdaisland/kaocha {:mvn/version "1.82.1306"}
lambdaisland/deep-diff2 {:mvn/version "2.8.190"}}
:jvm-opts ["-Dclojure.core.async.go-checking=true"]}
Expand Down
26 changes: 26 additions & 0 deletions doc/exclusions.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,29 @@ Otherwise, the following ways are available.
----
{:deps {foo/bar ^:antq/exclude {:mvn/version "..."}}}
----

== Specify a version or version range via metadata

Please repalce `^:antq/exclude` as follows.

[source,clojure]
----
;; Specific version
^{:antq/exclude "1.2.3"}
^{:antq/exclude ["1.2.3" "1.2.4"]}
;; Version range
^{:antq/exclude "1.2.x"}
^{:antq/exclude ["1.2.x" "1.3.x"]}
----

=== Supported version ranges

[cols="50a,50a"]
|===
| Range | Description

| `1.2.x`
| Matches to `1.2.0`, `1.2.1`, etc.

|===
15 changes: 10 additions & 5 deletions src/antq/core.clj
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
[antq.upgrade.shadow]
[antq.util.exception :as u.ex]
[antq.util.maven :as u.maven]
[antq.util.ver :as u.ver]
[antq.ver :as ver]
[antq.ver.git-sha]
[antq.ver.git-tag-and-sha]
Expand Down Expand Up @@ -109,13 +110,17 @@
(contains? exclude-artifacts (:name dep)))))

(defn remove-skipping-versions
[versions dep-name options]
(let [skip-vers (->> (:exclude options)
[versions dep options]
(let [dep-name (:name dep)
skip-vers (->> (:exclude options)
(map #(str/split % #"@" 2))
(filter #(= dep-name (first %)))
(keep second)
(set))]
(remove skip-vers versions)))
(concat (or (:exclude-versions dep) []))
(distinct))]
(remove (fn [target-version]
(some #(u.ver/in-range? % target-version) skip-vers))
versions)))

(defn using-release-version?
[dep]
Expand Down Expand Up @@ -146,7 +151,7 @@
(let [vers (cond->> (:_versions dep)
(not (ver/under-development? (:version dep)))
(drop-while ver/under-development?))
vers (remove-skipping-versions vers (:name dep) options)
vers (remove-skipping-versions vers dep options)
latest-version (first vers)]
(assoc dep :latest-version latest-version)))

Expand Down
14 changes: 11 additions & 3 deletions src/antq/dep/boot.clj
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,14 @@
(defn- exclude?
[v]
(-> (meta v)
(contains? const/deps-exclude-key)))
(get const/deps-exclude-key)
(true?)))

(defn- exclude-version-range
[v]
(-> (meta v)
(get const/deps-exclude-key)
(u.dep/ensure-version-list)))

(defn extract-deps
{:malli/schema [:=>
Expand Down Expand Up @@ -42,7 +49,7 @@
form)
(read-string (str "(list " build-boot-content-str " )")))
(let [repositories (apply hash-map @repos)]
(for [[dep-name version] @deps
(for [[dep-name version :as dep] @deps
:when (and (string? version) (seq version))]
(r/map->Dependency {:project :boot
:type :java
Expand All @@ -51,7 +58,8 @@
(str dep-name)
(str dep-name "/" dep-name))
:version version
:repositories repositories})))))
:repositories repositories
:exclude-versions (seq (exclude-version-range dep))})))))

(defn load-deps
{:malli/schema [:function
Expand Down
15 changes: 12 additions & 3 deletions src/antq/dep/clojure.clj
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,15 @@
[dep]
(-> (second dep)
(meta)
(contains? const/deps-exclude-key)))
(get const/deps-exclude-key)
(true?)))

(defn- exclude-version-range
[dep]
(-> (second dep)
(meta)
(get const/deps-exclude-key)
(u.dep/ensure-version-list)))

(defn extract-deps
{:malli/schema [:=>
Expand All @@ -119,7 +127,7 @@
form)
edn)
(->> @deps
(mapcat (fn [[dep-name opt]]
(mapcat (fn [[dep-name opt :as dep]]
(let [opt (adjust-version-via-deduction dep-name opt)
type-and-version (extract-type-and-version opt)]
(cond
Expand All @@ -138,7 +146,8 @@
(str dep-name)
(str dep-name "/" dep-name))
:repositories (merge cross-project-repositories
(:mvn/repos edn))}
(:mvn/repos edn))
:exclude-versions (seq (exclude-version-range dep))}
(merge type-and-version)
(r/map->Dependency)
(vector))
Expand Down
14 changes: 11 additions & 3 deletions src/antq/dep/leiningen.clj
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,14 @@
(defn- exclude?
[v]
(-> (meta v)
(contains? const/deps-exclude-key)))
(get const/deps-exclude-key)
(true?)))

(defn- exclude-version-range
[v]
(-> (meta v)
(get const/deps-exclude-key)
(u.dep/ensure-version-list)))

(defn extract-deps
{:malli/schema [:=>
Expand Down Expand Up @@ -56,14 +63,15 @@
form)
(read-string (str "(list " project-clj-content-str " )")))
(let [repositories (normalize-repositories @repos)]
(for [[dep-name version] @deps
(for [[dep-name version :as dep] @deps
:when (acceptable-version? version)]
(r/map->Dependency {:project :leiningen
:type :java
:file file-path
:name (normalize-name dep-name)
:version version
:repositories repositories})))))
:repositories repositories
:exclude-versions (seq (exclude-version-range dep))})))))

(defn load-deps
{:malli/schema [:function
Expand Down
14 changes: 11 additions & 3 deletions src/antq/dep/shadow.clj
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,14 @@
(defn- exclude?
[v]
(-> (meta v)
(contains? const/deps-exclude-key)))
(get const/deps-exclude-key)
(true?)))

(defn- exclude-version-range
[v]
(-> (meta v)
(get const/deps-exclude-key)
(u.dep/ensure-version-list)))

(defn extract-deps
{:malli/schema [:=>
Expand All @@ -47,13 +54,14 @@
(swap! deps concat)))
form)
(edn/read-string readers shadow-cljs-edn-content-str))
(for [[dep-name version] @deps
(for [[dep-name version :as dep] @deps
:when (and (string? version) (seq version))]
(r/map->Dependency {:project :shadow-cljs
:type :java
:file file-path
:name (str dep-name)
:version version}))))
:version version
:exclude-versions (seq (exclude-version-range dep))}))))

(defn load-deps
{:malli/schema [:function
Expand Down
7 changes: 5 additions & 2 deletions src/antq/record.clj
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@
[:repositories [:maybe [:map-of 'string? ?repository]]]
[:changes-url [:maybe 'string?]]
[:latest-name [:maybe 'string?]]
[:only-newest-version? [:maybe 'boolean?]]])
[:only-newest-version? [:maybe 'boolean?]]
[:exclude-versions [:maybe [:sequential 'string?]]]])

(def ?dependencies
[:sequential ?dependency])
Expand Down Expand Up @@ -52,4 +53,6 @@
;; c.f. https://github.com/clojars/clojars-web/wiki/Verified-Group-Names
latest-name
;; Keep only the newest version in the same file.
only-newest-version?])
only-newest-version?
;; Ignore versions that match the specified version range
exclude-versions])
13 changes: 13 additions & 0 deletions src/antq/util/dep.clj
Original file line number Diff line number Diff line change
Expand Up @@ -119,3 +119,16 @@
;; Skip showing diff URL when POM file is not found
(catch java.io.FileNotFoundException _ nil)))
(def get-scm-url (u.fn/memoize-by get-scm-url* :name))

(defn ensure-version-list
[x]
(cond
(string? x)
[x]

(and (sequential? x)
(every? string? x))
x

:else
[]))
10 changes: 10 additions & 0 deletions src/antq/util/ver.clj
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,13 @@

:else
no-latest-version-error))

(defn in-range?
"e.g. '1.x' matches '1.0.0', '1.1.0' and so on."
[version-range target-version]
(let [re (-> version-range
(str/replace "." "\\.")
(str/replace "\\.x" "\\.+")
(->> (str "^"))
(re-pattern))]
(some? (re-seq re target-version))))
9 changes: 9 additions & 0 deletions src/antq/ver/git_tag_and_sha.clj
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,12 @@
[ex]
(throw ex)))))

(defmethod ver/latest? :git-tag-and-sha
[dep]
(and (:version dep)
(:latest-version dep)
(string? (:version dep))
(string? (:latest-version dep))
(<= 0 (version/version-compare
(u.ver/normalize-version (:version dep))
(u.ver/normalize-version (:latest-version dep))))))
59 changes: 37 additions & 22 deletions test/antq/core_test.clj
Original file line number Diff line number Diff line change
Expand Up @@ -118,30 +118,45 @@
:focus ["org.clojure/clojure"]})))))

(t/deftest remove-skipping-versions-test
(t/testing "there are no target to remove"
(t/is (= ["1" "2" "3"]
(sut/remove-skipping-versions ["1" "2" "3"] "foo" {})))
(t/is (= ["1" "2" "3"]
(sut/remove-skipping-versions ["1" "2" "3"] "foo" {:exclude ["foo@4"]}))))

(t/testing "only dep's name is matched"
(t/is (= ["1" "2" "3"]
(sut/remove-skipping-versions ["1" "2" "3"] "foo" {:exclude ["foo"]}))))

(t/testing "only version number is matched"
(t/is (= ["1" "2" "3"]
(sut/remove-skipping-versions ["1" "2" "3"] "foo" {:exclude ["bar@2"]}))))

(t/testing "dep's name and version number are matched"
(t/is (= ["1" "3"]
(sut/remove-skipping-versions ["1" "2" "3"] "foo" {:exclude ["foo@2"]})))
(t/is (= ["1"]
(sut/remove-skipping-versions ["1" "2" "3"] "foo" {:exclude ["foo@2"
(let [dep (r/map->Dependency {:name "foo"})]
(t/testing "there are no target to remove"
(t/is (= ["1" "2" "3"]
(sut/remove-skipping-versions ["1" "2" "3"] dep {})))
(t/is (= ["1" "2" "3"]
(sut/remove-skipping-versions ["1" "2" "3"] dep {:exclude ["foo@4"]}))))

(t/testing "only dep's name is matched"
(t/is (= ["1" "2" "3"]
(sut/remove-skipping-versions ["1" "2" "3"] dep {:exclude ["foo"]}))))

(t/testing "only version number is matched"
(t/is (= ["1" "2" "3"]
(sut/remove-skipping-versions ["1" "2" "3"] dep {:exclude ["bar@2"]}))))

(t/testing "dep's name and version number are matched"
(t/is (= ["1" "3"]
(sut/remove-skipping-versions ["1" "2" "3"] dep {:exclude ["foo@2"]})))
(t/is (= ["1"]
(sut/remove-skipping-versions ["1" "2" "3"] dep {:exclude ["foo@2"
"foo@3"]})))
(t/is (= []
(sut/remove-skipping-versions ["1" "2" "3"] "foo" {:exclude ["foo@1"
(t/is (= []
(sut/remove-skipping-versions ["1" "2" "3"] dep {:exclude ["foo@1"
"foo@2"
"foo@3"]})))))
"foo@3"]}))))

(t/testing "version range"
(let [vers ["1.0.0" "1.0.1" "1.1.0" "1.1.1" "1.2.0" "2.0.0"]]
(t/is (= ["2.0.0"]
(sut/remove-skipping-versions vers dep {:exclude ["foo@1.x"]})))
(t/is (= ["1.1.0" "1.1.1" "1.2.0" "2.0.0"]
(sut/remove-skipping-versions vers dep {:exclude ["foo@1.0.x"]})))
(t/is (= ["1.0.0" "1.0.1" "1.1.0" "1.1.1"]
(sut/remove-skipping-versions vers dep {:exclude ["foo@1.2.x"
"foo@2.x"]})))
(t/is (= ["1.0.0" "1.0.1" "1.1.0" "1.1.1" "1.2.0"]
(sut/remove-skipping-versions vers dep {:exclude ["foo@2.x"]})))
(t/is (= ["1.0.0" "1.0.1" "1.1.0" "1.1.1" "1.2.0" "2.0.0"]
(sut/remove-skipping-versions vers dep {:exclude ["foo@9.x"]})))))))

(t/deftest using-release-version?-test
(t/are [expected in] (= expected (sut/using-release-version?
Expand Down
Loading

0 comments on commit be88ff5

Please sign in to comment.