]> git.proxmox.com Git - rustc.git/blame - src/tools/cargo/src/cargo/ops/mod.rs
New upstream version 1.76.0+dfsg1
[rustc.git] / src / tools / cargo / src / cargo / ops / mod.rs
CommitLineData
0a29b90c
FG
1use crate::sources::CRATES_IO_DOMAIN;
2
4b012472 3pub use self::cargo_clean::{clean, CleanContext, CleanOptions};
0a29b90c
FG
4pub use self::cargo_compile::{
5 compile, compile_with_exec, compile_ws, create_bcx, print, resolve_all_features, CompileOptions,
6};
7pub use self::cargo_compile::{CompileFilter, FilterRule, LibRule, Packages};
8pub use self::cargo_doc::{doc, DocOptions};
9pub use self::cargo_fetch::{fetch, FetchOptions};
10pub use self::cargo_generate_lockfile::generate_lockfile;
11pub use self::cargo_generate_lockfile::update_lockfile;
12pub use self::cargo_generate_lockfile::UpdateOptions;
13pub use self::cargo_install::{install, install_list};
14pub use self::cargo_new::{init, new, NewOptions, NewProjectKind, VersionControl};
15pub use self::cargo_output_metadata::{output_metadata, ExportInfo, OutputMetadataOptions};
16pub use self::cargo_package::{check_yanked, package, package_one, PackageOpts};
17pub use self::cargo_pkgid::pkgid;
18pub use self::cargo_read_manifest::{read_package, read_packages};
19pub use self::cargo_run::run;
20pub use self::cargo_test::{run_benches, run_tests, TestOptions};
21pub use self::cargo_uninstall::uninstall;
22pub use self::fix::{fix, fix_exec_rustc, fix_get_proxy_lock_addr, FixOptions};
23pub use self::lockfile::{load_pkg_lockfile, resolve_to_string, write_pkg_lockfile};
fe692bf9
FG
24pub use self::registry::modify_owners;
25pub use self::registry::publish;
26pub use self::registry::registry_login;
27pub use self::registry::registry_logout;
28pub use self::registry::search;
29pub use self::registry::yank;
30pub use self::registry::OwnersOptions;
31pub use self::registry::PublishOpts;
32pub use self::registry::RegistryCredentialConfig;
781aab86 33pub use self::registry::RegistryOrIndex;
0a29b90c
FG
34pub use self::resolve::{
35 add_overrides, get_resolved_packages, resolve_with_previous, resolve_ws, resolve_ws_with_opts,
36 WorkspaceResolve,
37};
38pub use self::vendor::{vendor, VendorOptions};
39
40pub mod cargo_add;
41mod cargo_clean;
42pub(crate) mod cargo_compile;
43pub mod cargo_config;
44mod cargo_doc;
45mod cargo_fetch;
46mod cargo_generate_lockfile;
47mod cargo_install;
48mod cargo_new;
49mod cargo_output_metadata;
50mod cargo_package;
51mod cargo_pkgid;
52mod cargo_read_manifest;
53pub mod cargo_remove;
54mod cargo_run;
55mod cargo_test;
56mod cargo_uninstall;
57mod common_for_install_and_uninstall;
58mod fix;
59pub(crate) mod lockfile;
60pub(crate) mod registry;
61pub(crate) mod resolve;
62pub mod tree;
63mod vendor;
64
65/// Returns true if the dependency is either git or path, false otherwise
66/// Error if a git/path dep is transitive, but has no version (registry source).
67/// This check is performed on dependencies before publishing or packaging
68fn check_dep_has_version(dep: &crate::core::Dependency, publish: bool) -> crate::CargoResult<bool> {
69 let which = if dep.source_id().is_path() {
70 "path"
71 } else if dep.source_id().is_git() {
72 "git"
73 } else {
74 return Ok(false);
75 };
76
77 if !dep.specified_req() && dep.is_transitive() {
78 let dep_version_source = dep.registry_id().map_or_else(
79 || CRATES_IO_DOMAIN.to_string(),
80 |registry_id| registry_id.display_registry_name(),
81 );
82 anyhow::bail!(
83 "all dependencies must have a version specified when {}.\n\
84 dependency `{}` does not specify a version\n\
85 Note: The {} dependency will use the version from {},\n\
86 the `{}` specification will be removed from the dependency declaration.",
87 if publish { "publishing" } else { "packaging" },
88 dep.package_name(),
89 if publish { "published" } else { "packaged" },
90 dep_version_source,
91 which,
92 )
93 }
94 Ok(true)
95}