Skip to content

Commit

Permalink
Publish: Hint at --skip-existing -> --check-url transition (#8803)
Browse files Browse the repository at this point in the history
See #8531 (comment),
we hint users coming from twine to use `--check-url` instead.

> `uv publish` does not support `--skip-existing`, use `--check-url`
with the simple index URL instead.

---------

Co-authored-by: Zanie Blue <contact@zanie.dev>
  • Loading branch information
konstin and zanieb authored Nov 4, 2024
1 parent f8ec797 commit c39936e
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 2 deletions.
5 changes: 4 additions & 1 deletion crates/uv-cli/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4882,8 +4882,11 @@ pub struct PublishArgs {
/// file succeeds even without `--check-url`, while most other indexes error.
///
/// The index must provide one of the supported hashes (SHA-256, SHA-384, or SHA-512).
#[arg(long,env = EnvVars::UV_PUBLISH_CHECK_URL)]
#[arg(long, env = EnvVars::UV_PUBLISH_CHECK_URL)]
pub check_url: Option<IndexUrl>,

#[arg(long, hide = true)]
pub skip_existing: bool,
}

/// See [PEP 517](https://peps.python.org/pep-0517/) and
Expand Down
12 changes: 11 additions & 1 deletion crates/uv/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use std::path::Path;
use std::process::ExitCode;

use anstream::eprintln;
use anyhow::Result;
use anyhow::{bail, Result};
use clap::error::{ContextKind, ContextValue};
use clap::{CommandFactory, Parser};
use owo_colors::OwoColorize;
Expand Down Expand Up @@ -1130,6 +1130,16 @@ async fn run(mut cli: Cli) -> Result<ExitStatus> {
warn_user_once!("`uv publish` is experimental and may change without warning");
}

if args.skip_existing {
bail!(
"`uv publish` does not support `--skip-existing` because there is not a \
reliable way to identify when an upload fails due to an existing \
distribution. Instead, use `--check-url` to provide the URL to the simple \
API for your index. uv will check the index for existing distributions before \
attempting uploads."
);
}

// Resolve the settings from the command-line arguments and workspace configuration.
let PublishSettings {
files,
Expand Down
20 changes: 20 additions & 0 deletions crates/uv/tests/it/publish.rs
Original file line number Diff line number Diff line change
Expand Up @@ -142,3 +142,23 @@ fn no_credentials() {
"###
);
}

/// Hint people that it's not `--skip-existing` but `--check-url`.
#[test]
fn skip_existing_redirect() {
let context = TestContext::new("3.12");

uv_snapshot!(context.filters(), context.publish()
.arg("--skip-existing")
.arg("--publish-url")
.arg("https://test.pypi.org/legacy/"), @r###"
success: false
exit_code: 2
----- stdout -----
----- stderr -----
warning: `uv publish` is experimental and may change without warning
error: `uv publish` does not support `--skip-existing` because there is not a reliable way to identify when an upload fails due to an existing distribution. Instead, use `--check-url` to provide the URL to the simple API for your index. uv will check the index for existing distributions before attempting uploads.
"###
);
}

0 comments on commit c39936e

Please sign in to comment.