mirror of
				https://github.com/rust-lang/cargo.git
				synced 2025-11-03 13:12:53 +00:00 
			
		
		
		
	fix(publish): Downgrade version-exists error to warning on dry-run
This will get cherry-picked to beta Fixes #14721
This commit is contained in:
		
							parent
							
								
									ae6b279277
								
							
						
					
					
						commit
						947e1ffe3f
					
				@ -133,7 +133,7 @@ pub fn publish(ws: &Workspace<'_>, opts: &PublishOpts<'_>) -> CargoResult<()> {
 | 
				
			|||||||
            .acquire_package_cache_lock(CacheLockMode::DownloadExclusive)?;
 | 
					            .acquire_package_cache_lock(CacheLockMode::DownloadExclusive)?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for (pkg, _) in &pkgs {
 | 
					        for (pkg, _) in &pkgs {
 | 
				
			||||||
            verify_unpublished(pkg, &mut source, &source_ids)?;
 | 
					            verify_unpublished(pkg, &mut source, &source_ids, opts.dry_run, opts.gctx)?;
 | 
				
			||||||
            verify_dependencies(pkg, ®istry, source_ids.original)?;
 | 
					            verify_dependencies(pkg, ®istry, source_ids.original)?;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -368,6 +368,8 @@ fn verify_unpublished(
 | 
				
			|||||||
    pkg: &Package,
 | 
					    pkg: &Package,
 | 
				
			||||||
    source: &mut RegistrySource<'_>,
 | 
					    source: &mut RegistrySource<'_>,
 | 
				
			||||||
    source_ids: &RegistrySourceIds,
 | 
					    source_ids: &RegistrySourceIds,
 | 
				
			||||||
 | 
					    dry_run: bool,
 | 
				
			||||||
 | 
					    gctx: &GlobalContext,
 | 
				
			||||||
) -> CargoResult<()> {
 | 
					) -> CargoResult<()> {
 | 
				
			||||||
    let query = Dependency::parse(
 | 
					    let query = Dependency::parse(
 | 
				
			||||||
        pkg.name(),
 | 
					        pkg.name(),
 | 
				
			||||||
@ -383,6 +385,17 @@ fn verify_unpublished(
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    if !duplicate_query.is_empty() {
 | 
					    if !duplicate_query.is_empty() {
 | 
				
			||||||
 | 
					        // Move the registry error earlier in the publish process.
 | 
				
			||||||
 | 
					        // Since dry-run wouldn't talk to the registry to get the error, we downgrade it to a
 | 
				
			||||||
 | 
					        // warning.
 | 
				
			||||||
 | 
					        if dry_run {
 | 
				
			||||||
 | 
					            gctx.shell().warn(format!(
 | 
				
			||||||
 | 
					                "crate {}@{} already exists on {}",
 | 
				
			||||||
 | 
					                pkg.name(),
 | 
				
			||||||
 | 
					                pkg.version(),
 | 
				
			||||||
 | 
					                source.describe()
 | 
				
			||||||
 | 
					            ))?;
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
            bail!(
 | 
					            bail!(
 | 
				
			||||||
                "crate {}@{} already exists on {}",
 | 
					                "crate {}@{} already exists on {}",
 | 
				
			||||||
                pkg.name(),
 | 
					                pkg.name(),
 | 
				
			||||||
@ -390,6 +403,7 @@ fn verify_unpublished(
 | 
				
			|||||||
                source.describe()
 | 
					                source.describe()
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Ok(())
 | 
					    Ok(())
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -152,10 +152,19 @@ fn duplicate_version() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    p.cargo("publish --dry-run")
 | 
					    p.cargo("publish --dry-run")
 | 
				
			||||||
        .replace_crates_io(registry_dupl.index_url())
 | 
					        .replace_crates_io(registry_dupl.index_url())
 | 
				
			||||||
        .with_status(101)
 | 
					 | 
				
			||||||
        .with_stderr_data(str![[r#"
 | 
					        .with_stderr_data(str![[r#"
 | 
				
			||||||
[UPDATING] crates.io index
 | 
					[UPDATING] crates.io index
 | 
				
			||||||
[ERROR] crate foo@0.0.1 already exists on crates.io index
 | 
					[WARNING] crate foo@0.0.1 already exists on crates.io index
 | 
				
			||||||
 | 
					[WARNING] manifest has no documentation, homepage or repository.
 | 
				
			||||||
 | 
					See https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for more info.
 | 
				
			||||||
 | 
					[PACKAGING] foo v0.0.1 ([ROOT]/foo)
 | 
				
			||||||
 | 
					[PACKAGED] 4 files, [FILE_SIZE]B ([FILE_SIZE]B compressed)
 | 
				
			||||||
 | 
					[VERIFYING] foo v0.0.1 ([ROOT]/foo)
 | 
				
			||||||
 | 
					[WARNING] no edition set: defaulting to the 2015 edition while the latest is 2021
 | 
				
			||||||
 | 
					[COMPILING] foo v0.0.1 ([ROOT]/foo/target/package/foo-0.0.1)
 | 
				
			||||||
 | 
					[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
 | 
				
			||||||
 | 
					[UPLOADING] foo v0.0.1 ([ROOT]/foo)
 | 
				
			||||||
 | 
					[WARNING] aborting upload due to dry run
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"#]])
 | 
					"#]])
 | 
				
			||||||
        .run();
 | 
					        .run();
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user