diff options
Diffstat (limited to 'cli')
-rw-r--r-- | cli/tools/registry/mod.rs | 30 |
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" { |