diff --git a/core/src/registry/package/signer.rs b/core/src/registry/package/signer.rs index a91e139c2..47ec7b13d 100644 --- a/core/src/registry/package/signer.rs +++ b/core/src/registry/package/signer.rs @@ -58,6 +58,9 @@ pub struct AddPackageSignerParams { #[arg(long, help = "help.arg.version-range")] #[ts(type = "string | null")] pub versions: Option, + #[arg(long, help = "help.arg.merge")] + #[ts(optional)] + pub merge: Option, } pub async fn add_package_signer( @@ -66,6 +69,7 @@ pub async fn add_package_signer( id, signer, versions, + merge, }: AddPackageSignerParams, ) -> Result<(), Error> { ctx.db @@ -76,13 +80,22 @@ pub async fn add_package_signer( "unknown signer {signer}" ); + let versions = versions.unwrap_or_default(); db.as_index_mut() .as_package_mut() .as_packages_mut() .as_idx_mut(&id) .or_not_found(&id)? .as_authorized_mut() - .insert(&signer, &versions.unwrap_or_default())?; + .upsert(&signer, || Ok(VersionRange::None))? + .mutate(|existing| { + *existing = if merge.unwrap_or(false) { + VersionRange::or(existing.clone(), versions) + } else { + versions + }; + Ok(()) + })?; Ok(()) }) diff --git a/sdk/base/lib/osBindings/AddPackageSignerParams.ts b/sdk/base/lib/osBindings/AddPackageSignerParams.ts index 2ca630678..e9a7788ff 100644 --- a/sdk/base/lib/osBindings/AddPackageSignerParams.ts +++ b/sdk/base/lib/osBindings/AddPackageSignerParams.ts @@ -6,4 +6,5 @@ export type AddPackageSignerParams = { id: PackageId signer: Guid versions: string | null + merge?: boolean }