Skip to content

Commit ca4e31a

Browse files
committed
allow publishing relocatable and requires package columns
1 parent aee31ea commit ca4e31a

File tree

4 files changed

+53
-4
lines changed

4 files changed

+53
-4
lines changed

cli/src/client.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,8 @@ pub enum TokenType {
163163
pub struct PublishPackageRequest<'a> {
164164
pub package_name: &'a str,
165165
pub package_description: &'a Option<String>,
166+
pub relocatable: bool,
167+
pub requires: &'a [String],
166168
}
167169

168170
#[derive(Serialize)]

cli/src/commands/publish.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ fn create_publish_package_request(payload: &Payload) -> PublishPackageRequest {
7676
PublishPackageRequest {
7777
package_name: &payload.metadata.extension_name,
7878
package_description: &payload.metadata.comment,
79+
relocatable: payload.metadata.relocatable,
80+
requires: &payload.metadata.requires,
7981
}
8082
}
8183

cli/src/models.rs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ pub struct Metadata {
1414
pub extension_name: String,
1515
pub default_version: String,
1616
pub comment: Option<String>,
17-
pub requires: Option<Vec<String>>,
17+
pub relocatable: bool,
18+
pub requires: Vec<String>,
1819
}
1920

2021
impl Metadata {
@@ -23,6 +24,7 @@ impl Metadata {
2324
extension_name: control_file_ref.extension_name()?.clone(),
2425
default_version: control_file_ref.default_version()?.clone(),
2526
comment: control_file_ref.comment()?.clone(),
27+
relocatable: control_file_ref.relocatable()?,
2628
requires: control_file_ref.requires()?.clone(),
2729
})
2830
}
@@ -261,16 +263,26 @@ impl ControlFileRef {
261263

262264
// A list of names of extensions that this extension depends on, for example requires = 'foo,
263265
// bar'. Those extensions must be installed before this one can be installed.
264-
fn requires(&self) -> anyhow::Result<Option<Vec<String>>> {
266+
fn requires(&self) -> anyhow::Result<Vec<String>> {
265267
for line in self.contents.lines() {
266268
if line.starts_with("requires") {
267269
let value = self.read_control_line_value(line)?;
268270
let required_packages: Vec<String> =
269271
value.split(',').map(|x| x.trim().to_string()).collect();
270-
return Ok(Some(required_packages));
272+
return Ok(required_packages);
271273
}
272274
}
273-
Ok(None)
275+
Ok(vec![])
276+
}
277+
278+
fn relocatable(&self) -> anyhow::Result<bool> {
279+
for line in self.contents.lines() {
280+
if line.starts_with("relocatable") {
281+
let value: bool = self.read_control_line_value(line)?.parse()?;
282+
return Ok(value);
283+
}
284+
}
285+
Ok(false)
274286
}
275287

276288
fn default_version(&self) -> anyhow::Result<String> {
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
grant insert (partial_name, handle, control_description, control_relocatable, control_requires)
2+
on app.packages
3+
to authenticated;
4+
5+
grant update (control_description, control_relocatable, control_requires)
6+
on app.packages
7+
to authenticated;
8+
9+
create or replace function public.publish_package(
10+
package_name app.valid_name,
11+
package_description varchar(1000),
12+
relocatable bool default false,
13+
requires text[] default '{}'
14+
)
15+
returns void
16+
language plpgsql
17+
as $$
18+
declare
19+
account app.accounts = account from app.accounts account where id = auth.uid();
20+
begin
21+
if account.handle is null then
22+
raise exception 'user not logged in';
23+
end if;
24+
25+
insert into app.packages(handle, partial_name, control_description, control_relocatable, control_requires)
26+
values (account.handle, package_name, package_description, relocatable, requires)
27+
on conflict on constraint packages_handle_partial_name_key
28+
do update
29+
set control_description = excluded.control_description,
30+
control_relocatable = excluded.control_relocatable,
31+
control_requires = excluded.control_requires;
32+
end;
33+
$$;

0 commit comments

Comments
 (0)