summaryrefslogtreecommitdiff
path: root/cli/tools/registry/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/tools/registry/mod.rs')
-rw-r--r--cli/tools/registry/mod.rs30
1 files changed, 22 insertions, 8 deletions
diff --git a/cli/tools/registry/mod.rs b/cli/tools/registry/mod.rs
index c6508fd49..a86e15dd6 100644
--- a/cli/tools/registry/mod.rs
+++ b/cli/tools/registry/mod.rs
@@ -388,14 +388,28 @@ async fn perform_publish(
.send()
.await?;
- let mut task = parse_response::<PublishingTask>(response)
- .await
- .with_context(|| {
- format!(
- "Failed to publish @{}/{} at {}",
- package.scope, package.package, package.version
- )
- })?;
+ let res = parse_response::<PublishingTask>(response).await;
+ let mut task = match res {
+ Ok(task) => task,
+ Err(err) if err.code == "versionAlreadyExists" => {
+ println!(
+ "{} @{}/{}@{}",
+ colors::yellow("Skipping, already published"),
+ package.scope,
+ package.package,
+ package.version
+ );
+ continue;
+ }
+ Err(err) => {
+ return Err(err).with_context(|| {
+ format!(
+ "Failed to publish @{}/{} at {}",
+ package.scope, package.package, package.version
+ )
+ })
+ }
+ };
let interval = std::time::Duration::from_secs(2);
while task.status != "success" && task.status != "failure" {