Skip to content

Commit 0791816

Browse files
committed
Simplify checking of eXist version dependencies
Remove versions:is-newer/older; use semver.xq
1 parent a954ed5 commit 0791816

File tree

1 file changed

+35
-56
lines changed

1 file changed

+35
-56
lines changed

modules/versions.xqm

Lines changed: 35 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,7 @@ declare function versions:find-compatible-packages(
3838
else if ($semver-min and $semver-max) then
3939
versions:find-version($packages, $semver-min, $semver-max)
4040
else if (exists($exist-version-semver)) then
41-
for $package in $packages
42-
return
43-
if
44-
(
45-
$exist-version-semver and
46-
versions:is-newer-or-same($exist-version-semver, $package/requires/@semver-min) and
47-
versions:is-older-or-same($exist-version-semver, $package/requires/@semver-max)
48-
) then
49-
$package
50-
else
51-
()
41+
versions:find-packages-satisfying-exist-version-requirements($packages, $exist-version-semver, $semver-min, $semver-max)
5242
else
5343
()
5444
};
@@ -78,18 +68,6 @@ declare function versions:find-newest-compatible-package(
7868
=> head()
7969
};
8070

81-
declare
82-
%private
83-
function versions:is-newer-or-same($version1 as xs:string, $version2 as xs:string?) {
84-
empty($version2) or semver:ge($version1, $version2, true())
85-
};
86-
87-
declare
88-
%private
89-
function versions:is-older-or-same($version1 as xs:string, $version2 as xs:string?) {
90-
empty($version2) or semver:le($version1, $version2, true())
91-
};
92-
9371
declare
9472
%private
9573
function versions:find-version($packages as element(package)*, $minVersion as xs:string?, $maxVersion as xs:string?) {
@@ -106,15 +84,16 @@ function versions:find-version($packages as element(package)*, $minVersion as xs
10684
$newest
10785
else
10886
let $package := head($packages)
109-
let $packageVersion := $package/version | $package/@version
87+
let $packageVersion := ($package/version, $package/@version)[1]
88+
let $newestVersion := ($newest/version, $newest/@version)[1]
11089
let $newer :=
11190
if (
11291
(
11392
empty($newest) or
114-
versions:is-newer($packageVersion, ($newest/version, $newest/@version))
93+
semver:ge($packageVersion, $newestVersion, true())
11594
) and
116-
versions:is-newer($packageVersion, $minVersion) and
117-
versions:is-older($packageVersion, $maxVersion)
95+
semver:ge($packageVersion, $minVersion, true()) and
96+
semver:le($packageVersion, $maxVersion, true())
11897
) then
11998
$package
12099
else
@@ -123,33 +102,33 @@ function versions:find-version($packages as element(package)*, $minVersion as xs
123102
versions:find-version(tail($packages), $minVersion, $maxVersion, $newer)
124103
};
125104

126-
declare
127-
%private
128-
function versions:is-newer($available as xs:string, $installed as xs:string) as xs:boolean {
129-
let $verInstalled := tokenize($installed, "\.")
130-
let $verAvailable := tokenize($available, "\.")
131-
return
132-
versions:compare-versions(
133-
$verInstalled,
134-
$verAvailable,
135-
function($version1, $version2) {
136-
number($version1) >= number($version2)
137-
}
138-
)
139-
};
140-
141-
declare
142-
%private
143-
function versions:is-older($available as xs:string, $installed as xs:string) as xs:boolean {
144-
let $verInstalled := tokenize($installed, "\.")
145-
let $verAvailable := tokenize($available, "\.")
105+
(:~
106+
: Find packages whose eXist version requirements meet the client's eXist version
107+
:
108+
: For example, via app.xqm or list.xq, a client may request the subset of a package's
109+
: releases that are compatible with eXist 5.3.0. The function examines each release's
110+
: eXist dependency declarations (if present) and returns all matching packages.
111+
:)
112+
declare function versions:find-packages-satisfying-exist-version-requirements(
113+
$packages as element(package)*,
114+
$exist-version-semver as xs:string,
115+
$min-version as xs:string?,
116+
$max-version as xs:string?
117+
) as element(package)* {
118+
for $package in $packages
119+
let $satisfies-semver-min-requirement :=
120+
if (exists($package/requires/@semver-min)) then
121+
semver:ge($exist-version-semver, $package/requires/@semver-min, true())
122+
else
123+
true()
124+
let $satisfies-semver-max-requirement :=
125+
if (exists($package/requires/@semver-max)) then
126+
semver:lt($exist-version-semver, $package/requires/@semver-max, true())
127+
else
128+
true()
146129
return
147-
versions:compare-versions(
148-
$verInstalled,
149-
$verAvailable,
150-
function($version1, $version2) {
151-
number($version1) <= number($version2)
152-
}
153-
)
154-
};
155-
130+
if ($satisfies-semver-min-requirement and $satisfies-semver-max-requirement) then
131+
$package
132+
else
133+
()
134+
};

0 commit comments

Comments
 (0)