Skip to content

Commit 6b98ad9

Browse files
committed
[fix] convert strings to xs:anyURI when needed
1 parent 07a5e5f commit 6b98ad9

File tree

3 files changed

+42
-42
lines changed

3 files changed

+42
-42
lines changed

modules/db-utility.xqm

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ function dbu:ensure-collection($path as xs:string) as xs:string {
2020
then $path
2121
else
2222
tokenize($path, "/")
23-
=> tail()
23+
=> tail()
2424
=> fold-left("", dbu:create-collection-with-repo-permissions#2)
2525
};
2626

@@ -39,7 +39,7 @@ function dbu:ensure-collection($path as xs:string, $permissions as map(*)) as xs
3939
then $path
4040
else
4141
tokenize($path, "/")
42-
=> tail()
42+
=> tail()
4343
=> fold-left("", dbu:create-collection(?, ?, $permissions))
4444
};
4545

@@ -50,7 +50,7 @@ function dbu:ensure-collection($path as xs:string, $permissions as map(*)) as xs
5050
: @param $resource-or-collection xs:string
5151
: @returns the path that was entered
5252
:)
53-
declare
53+
declare
5454
function dbu:set-repo-permissions ($resource-or-collection as xs:string) as xs:string {
5555
dbu:set-permissions($resource-or-collection, $dbu:default-permissions)
5656
};
@@ -63,15 +63,15 @@ function dbu:set-repo-permissions ($resource-or-collection as xs:string) as xs:s
6363
: @param $permissions map(xs:string, xs:string) with "owner", "group", "mode"
6464
: @returns the path that was entered
6565
:)
66-
declare
66+
declare
6767
function dbu:set-permissions ($resource-or-collection as xs:string, $permissions as map(*)) as xs:string {
68-
sm:chown($resource-or-collection, $permissions?owner),
69-
sm:chgrp($resource-or-collection, $permissions?group),
68+
sm:chown(xs:anyURI($resource-or-collection), $permissions?owner),
69+
sm:chgrp(xs:anyURI($resource-or-collection), $permissions?group),
7070
sm:chmod(xs:anyURI($resource-or-collection), $permissions?mode),
7171
$resource-or-collection
7272
};
7373

74-
declare
74+
declare
7575
%private
7676
function dbu:create-collection-with-repo-permissions ($collection as xs:string, $next as xs:string) as xs:string {
7777
if (xmldb:collection-available(concat($collection, '/', $next)))
@@ -82,7 +82,7 @@ function dbu:create-collection-with-repo-permissions ($collection as xs:string,
8282
};
8383

8484

85-
declare
85+
declare
8686
%private
8787
function dbu:create-collection ($collection as xs:string, $next as xs:string, $permissions as map(*)) as xs:string {
8888
if (xmldb:collection-available(concat($collection, '/', $next)))

modules/scan.xqm

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,16 @@ declare namespace expath="http://expath.org/ns/pkg";
2323
declare function scanrepo:store($collection-uri as xs:string, $resource-name as xs:string, $contents as item()?) as xs:string {
2424
xmldb:store($collection-uri, $resource-name, $contents) !
2525
(
26-
sm:chgrp(., config:repo-permissions()?group),
27-
sm:chmod(., config:repo-permissions()?mode),
26+
sm:chgrp(xs:anyURI(.), config:repo-permissions()?group),
27+
sm:chmod(xs:anyURI(.), config:repo-permissions()?mode),
2828
.
2929
)
3030
};
3131

3232
(:~
3333
: Helper function to store a package's icon and transform its metadata into the format needed for raw-metadata
3434
:)
35-
declare
35+
declare
3636
%private
3737
function scanrepo:handle-icon($path as xs:string, $data as item()?, $param as item()*) as element(icon) {
3838
let $pkgName := substring-before($param, ".xar")
@@ -46,20 +46,20 @@ function scanrepo:handle-icon($path as xs:string, $data as item()?, $param as it
4646
(:~
4747
: Helper function to transform expath-pkg.xml metadata into the format needed for raw-metadata
4848
:)
49-
declare
49+
declare
5050
%private
5151
function scanrepo:handle-expath-pkg-metadata($root as element(expath:package)) as element()* {
52-
$root/(@name, expath:title, @abbrev, @version) !
52+
$root/(@name, expath:title, @abbrev, @version) !
5353
element { local-name(.) } { ./string() },
54-
$root/expath:dependency[@processor eq $config:exist-processor-name] !
54+
$root/expath:dependency[@processor eq $config:exist-processor-name] !
5555
element requires { ./@* }
5656
};
5757

5858
(:~
5959
: Helper function to transform repo.xml's changelog metadata into the format needed for raw-metadata
6060
:)
61-
declare
62-
%private
61+
declare
62+
%private
6363
function scanrepo:copy-changelog($nodes as node()*) {
6464
for $node in $nodes
6565
return
@@ -76,22 +76,22 @@ function scanrepo:copy-changelog($nodes as node()*) {
7676
(:~
7777
: Helper function to transform repo.xml metadata into the format needed for raw-metadata
7878
:)
79-
declare
79+
declare
8080
%private
8181
function scanrepo:handle-repo-metadata($root as element(repo:meta)) as element()+ {
82-
$root/(repo:author, repo:description, repo:website, repo:license, repo:type, repo:note) !
82+
$root/(repo:author, repo:description, repo:website, repo:license, repo:type, repo:note) !
8383
element { local-name(.) } { ./string() },
8484
element changelog { scanrepo:copy-changelog($root/repo:changelog/repo:change) }
8585
};
8686

8787
(:~
8888
: Helper function to handle transformation of icon and package metadata for extraction from the xar
8989
:)
90-
declare
90+
declare
9191
%private
9292
function scanrepo:entry-data($path as xs:anyURI, $type as xs:string, $data as item()?, $param as item()*) as item()*
9393
{
94-
if (starts-with($path, "icon")) then
94+
if (starts-with($path, "icon")) then
9595
scanrepo:handle-icon($path, $data, $param)
9696
else
9797
let $root := $data/*
@@ -108,38 +108,38 @@ function scanrepo:entry-data($path as xs:anyURI, $type as xs:string, $data as it
108108
(:~
109109
: Helper function to select assets from a package for extraction from the xar
110110
:)
111-
declare
112-
%private
111+
declare
112+
%private
113113
function scanrepo:entry-filter($path as xs:anyURI, $type as xs:string, $param as item()*) as xs:boolean {
114114
starts-with($path, "icon.") or $path = ("repo.xml", "expath-pkg.xml")
115115
};
116116

117117
(:~
118118
: Take a group of packages with the same package name (a URI) and generate a package-group
119119
:)
120-
declare
120+
declare
121121
(: %private:)
122122
function scanrepo:generate-package-group($packages as element(package)*) {
123123
if (count(distinct-values($packages/name)) gt 1) then
124124
error(QName("scanrepo", "group-error"), "Supplied packages do not have the same name")
125125
else
126126
(: Identify newest version of the package; sort previous versions newest to oldest; use SemVer 2.0 rules, coercing where needed :)
127127
let $versions := $packages/version
128-
let $version-maps :=
128+
let $version-maps :=
129129
$versions ! map:merge((
130-
map:entry("semver", semver:parse(., true()) => semver:serialize()),
130+
map:entry("semver", semver:parse(., true()) => semver:serialize()),
131131
map:entry("version", .)
132132
))
133133
let $sorted-semvers := semver:sort($version-maps?semver) => reverse()
134-
let $sorted-packages :=
134+
let $sorted-packages :=
135135
for $semver in $sorted-semvers
136136
return
137137
$version-maps[?semver eq $semver]?version/..
138138
let $newest-package := $sorted-packages => head()
139139
let $legacy-abbrevs := distinct-values($packages/abbrev)[not(. = $newest-package/abbrev)]
140140
return
141141
element package-group {
142-
$newest-package/(title, name, abbrev),
142+
$newest-package/(title, name, abbrev),
143143
$legacy-abbrevs ! element abbrev { attribute type { "legacy" }, . },
144144
element packages { $sorted-packages }
145145
}
@@ -155,9 +155,9 @@ declare function scanrepo:update-package-group($raw-package-name as xs:string) {
155155
let $package-groups := doc($config:package-groups-doc)/package-groups
156156
let $current-package-group := $package-groups/package-group[name eq $raw-package-name]
157157
return
158-
if (exists($current-package-group)) then
159-
update replace $current-package-group with scanrepo:generate-package-group($raw-packages-to-group)
160-
else
158+
if (exists($current-package-group)) then
159+
update replace $current-package-group with scanrepo:generate-package-group($raw-packages-to-group)
160+
else
161161
update insert scanrepo:generate-package-group($raw-packages-to-group) into $package-groups
162162
};
163163

@@ -168,9 +168,9 @@ declare function scanrepo:add-raw-package($raw-package as element(package)) {
168168
let $raw-packages := doc($config:raw-packages-doc)/raw-packages
169169
let $current-raw-package := $raw-packages/package[@path = $raw-package/@path]
170170
return
171-
if (exists($current-raw-package)) then
171+
if (exists($current-raw-package)) then
172172
update replace $current-raw-package with $raw-package
173-
else
173+
else
174174
update insert $raw-package into $raw-packages
175175
};
176176

@@ -183,7 +183,7 @@ declare function scanrepo:extract-raw-package($xar-filename as xs:string) as ele
183183
let $package-metadata :=
184184
compression:unzip(
185185
$xar-binary,
186-
scanrepo:entry-filter#3,
186+
scanrepo:entry-filter#3,
187187
(),
188188
scanrepo:entry-data#4,
189189
$xar-filename
@@ -218,8 +218,8 @@ declare function scanrepo:rebuild-package-groups() as xs:string {
218218
group by $name := $package/name
219219
return
220220
scanrepo:generate-package-group($package)
221-
let $package-groups :=
222-
element package-groups {
221+
let $package-groups :=
222+
element package-groups {
223223
for $group in $groups
224224
order by $group/abbrev[not(@type = "legacy")]
225225
return
@@ -233,8 +233,8 @@ declare function scanrepo:rebuild-package-groups() as xs:string {
233233
: Rebuild the raw-packages metadata from all stored packages
234234
:)
235235
declare function scanrepo:rebuild-raw-packages() as xs:string {
236-
let $raw-packages :=
237-
element raw-packages {
236+
let $raw-packages :=
237+
element raw-packages {
238238
for $package-xar in xmldb:get-child-resources($config:packages-col)[ends-with(., ".xar")]
239239
order by $package-xar collation "http://www.w3.org/2013/collation/UCA?numeric=yes"
240240
return

post-install.xq

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ xquery version "3.1";
22

33
(:~
44
: This post-install script sets permissions on the package data collection hierarchy.
5-
: When pre-install creates the public-repo-data collection, its permissions are admin/dba.
5+
: When pre-install creates the public-repo-data collection, its permissions are admin/dba.
66
: This ensures the collections are owned by the default user and group for the app.
77
: The script also builds the package metadata if it doesn't already exist.
88
:)
9-
9+
1010
import module namespace config="http://exist-db.org/xquery/apps/config" at "modules/config.xqm";
1111
import module namespace dbu="http://exist-db.org/xquery/utility/db" at "modules/db-utility.xqm";
1212
import module namespace scanrepo="http://exist-db.org/xquery/admin/scanrepo" at "modules/scan.xqm";
@@ -25,7 +25,7 @@ declare variable $dir external;
2525
declare variable $target external;
2626

2727
(: Configuration file for the logs collection :)
28-
declare variable $logs-xconf :=
28+
declare variable $logs-xconf :=
2929
<collection xmlns="http://exist-db.org/collection-config/1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
3030
<index>
3131
<range>
@@ -60,7 +60,7 @@ xmldb:reindex($config:logs-col),
6060
if (doc-available($config:raw-packages-doc) and doc-available($config:package-groups-doc)) then
6161
()
6262
else
63-
scanrepo:rebuild-all-package-metadata() ! sm:chown(., config:repo-permissions()?owner),
64-
63+
scanrepo:rebuild-all-package-metadata() ! sm:chown(xs:anyURI(.), config:repo-permissions()?owner),
64+
6565
(: Ensure get-package.xq is run as "repo:repo", so that logs will always be writable :)
6666
sm:chmod(xs:anyURI($target || "/modules/get-package.xq"), "rwsr-sr-x")

0 commit comments

Comments
 (0)