mirror of
https://github.com/rust-lang/cargo.git
synced 2025-09-25 11:14:46 +00:00
feat(test): Snapshot .crate validation
This commit is contained in:
parent
5c25f7a9b8
commit
5b84fc99c5
@ -45,8 +45,11 @@ use crate::cross_compile::try_alternate;
|
||||
use crate::paths;
|
||||
use crate::{diff, rustc_host};
|
||||
use anyhow::{bail, Result};
|
||||
use snapbox::Data;
|
||||
use snapbox::IntoData;
|
||||
use std::fmt;
|
||||
use std::path::Path;
|
||||
use std::path::PathBuf;
|
||||
use std::str;
|
||||
use url::Url;
|
||||
|
||||
@ -428,46 +431,6 @@ fn substitute_macros(input: &str) -> String {
|
||||
result
|
||||
}
|
||||
|
||||
/// Compares one string against another, checking that they both match.
|
||||
///
|
||||
/// See [Patterns](index.html#patterns) for more information on pattern matching.
|
||||
///
|
||||
/// - `description` explains where the output is from (usually "stdout" or "stderr").
|
||||
/// - `other_output` is other output to display in the error (usually stdout or stderr).
|
||||
pub(crate) fn match_exact(
|
||||
expected: &str,
|
||||
actual: &str,
|
||||
description: &str,
|
||||
other_output: &str,
|
||||
cwd: Option<&Path>,
|
||||
) -> Result<()> {
|
||||
let expected = normalize_expected(expected, cwd);
|
||||
let actual = normalize_actual(actual, cwd);
|
||||
let e: Vec<_> = expected.lines().map(WildStr::new).collect();
|
||||
let a: Vec<_> = actual.lines().map(WildStr::new).collect();
|
||||
if e == a {
|
||||
return Ok(());
|
||||
}
|
||||
let diff = diff::colored_diff(&e, &a);
|
||||
bail!(
|
||||
"{} did not match:\n\
|
||||
{}\n\n\
|
||||
other output:\n\
|
||||
{}\n",
|
||||
description,
|
||||
diff,
|
||||
other_output,
|
||||
);
|
||||
}
|
||||
|
||||
/// Convenience wrapper around [`match_exact`] which will panic on error.
|
||||
#[track_caller]
|
||||
pub(crate) fn assert_match_exact(expected: &str, actual: &str) {
|
||||
if let Err(e) = match_exact(expected, actual, "", "", None) {
|
||||
crate::panic_error("", e);
|
||||
}
|
||||
}
|
||||
|
||||
/// Checks that the given string contains the given lines, ignoring the order
|
||||
/// of the lines.
|
||||
///
|
||||
@ -706,6 +669,145 @@ impl fmt::Debug for WildStr<'_> {
|
||||
}
|
||||
}
|
||||
|
||||
pub struct InMemoryDir {
|
||||
files: Vec<(PathBuf, Data)>,
|
||||
}
|
||||
|
||||
impl InMemoryDir {
|
||||
pub fn paths(&self) -> impl Iterator<Item = &Path> {
|
||||
self.files.iter().map(|(p, _)| p.as_path())
|
||||
}
|
||||
|
||||
#[track_caller]
|
||||
pub fn assert_contains(&self, expected: &Self) {
|
||||
use std::fmt::Write as _;
|
||||
let assert = assert_e2e();
|
||||
let mut errs = String::new();
|
||||
for (path, expected_data) in &expected.files {
|
||||
let actual_data = self
|
||||
.files
|
||||
.iter()
|
||||
.find_map(|(p, d)| (path == p).then(|| d.clone()))
|
||||
.unwrap_or_else(|| Data::new());
|
||||
if let Err(err) =
|
||||
assert.try_eq(Some(&path.display()), actual_data, expected_data.clone())
|
||||
{
|
||||
let _ = write!(&mut errs, "{err}");
|
||||
}
|
||||
}
|
||||
if !errs.is_empty() {
|
||||
panic!("{errs}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<P, D> FromIterator<(P, D)> for InMemoryDir
|
||||
where
|
||||
P: Into<std::path::PathBuf>,
|
||||
D: IntoData,
|
||||
{
|
||||
fn from_iter<I: IntoIterator<Item = (P, D)>>(files: I) -> Self {
|
||||
let files = files
|
||||
.into_iter()
|
||||
.map(|(p, d)| (p.into(), d.into_data()))
|
||||
.collect();
|
||||
Self { files }
|
||||
}
|
||||
}
|
||||
|
||||
impl<const N: usize, P, D> From<[(P, D); N]> for InMemoryDir
|
||||
where
|
||||
P: Into<PathBuf>,
|
||||
D: IntoData,
|
||||
{
|
||||
fn from(files: [(P, D); N]) -> Self {
|
||||
let files = files
|
||||
.into_iter()
|
||||
.map(|(p, d)| (p.into(), d.into_data()))
|
||||
.collect();
|
||||
Self { files }
|
||||
}
|
||||
}
|
||||
|
||||
impl<P, D> From<std::collections::HashMap<P, D>> for InMemoryDir
|
||||
where
|
||||
P: Into<PathBuf>,
|
||||
D: IntoData,
|
||||
{
|
||||
fn from(files: std::collections::HashMap<P, D>) -> Self {
|
||||
let files = files
|
||||
.into_iter()
|
||||
.map(|(p, d)| (p.into(), d.into_data()))
|
||||
.collect();
|
||||
Self { files }
|
||||
}
|
||||
}
|
||||
|
||||
impl<P, D> From<std::collections::BTreeMap<P, D>> for InMemoryDir
|
||||
where
|
||||
P: Into<PathBuf>,
|
||||
D: IntoData,
|
||||
{
|
||||
fn from(files: std::collections::BTreeMap<P, D>) -> Self {
|
||||
let files = files
|
||||
.into_iter()
|
||||
.map(|(p, d)| (p.into(), d.into_data()))
|
||||
.collect();
|
||||
Self { files }
|
||||
}
|
||||
}
|
||||
|
||||
impl From<()> for InMemoryDir {
|
||||
fn from(_files: ()) -> Self {
|
||||
let files = Vec::new();
|
||||
Self { files }
|
||||
}
|
||||
}
|
||||
|
||||
/// Create an `impl _ for InMemoryDir` for a generic tuple
|
||||
///
|
||||
/// Must pass in names for each tuple parameter for
|
||||
/// - internal variable name
|
||||
/// - `Path` type
|
||||
/// - `Data` type
|
||||
macro_rules! impl_from_tuple_for_inmemorydir {
|
||||
($($var:ident $path:ident $data:ident),+) => {
|
||||
impl<$($path: Into<PathBuf>, $data: IntoData),+> From<($(($path, $data)),+ ,)> for InMemoryDir {
|
||||
fn from(files: ($(($path, $data)),+,)) -> Self {
|
||||
let ($($var),+ ,) = files;
|
||||
let files = [$(($var.0.into(), $var.1.into_data())),+];
|
||||
files.into()
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/// Extend `impl_from_tuple_for_inmemorydir`` to generate for the specified tuple and all smaller
|
||||
/// tuples
|
||||
macro_rules! impl_from_tuples_for_inmemorydir {
|
||||
($var1:ident $path1:ident $data1:ident, $($var:ident $path:ident $data:ident),+) => {
|
||||
impl_from_tuples_for_inmemorydir!(__impl $var1 $path1 $data1; $($var $path $data),+);
|
||||
};
|
||||
(__impl $($var:ident $path:ident $data:ident),+; $var1:ident $path1:ident $data1:ident $(,$var2:ident $path2:ident $data2:ident)*) => {
|
||||
impl_from_tuple_for_inmemorydir!($($var $path $data),+);
|
||||
impl_from_tuples_for_inmemorydir!(__impl $($var $path $data),+, $var1 $path1 $data1; $($var2 $path2 $data2),*);
|
||||
};
|
||||
(__impl $($var:ident $path:ident $data:ident),+;) => {
|
||||
impl_from_tuple_for_inmemorydir!($($var $path $data),+);
|
||||
}
|
||||
}
|
||||
|
||||
// Generate for tuples of size `1..=7`
|
||||
impl_from_tuples_for_inmemorydir!(
|
||||
s1 P1 D1,
|
||||
s2 P2 D2,
|
||||
s3 P3 D3,
|
||||
s4 P4 D4,
|
||||
s5 P5 D5,
|
||||
s6 P6 D6,
|
||||
s7 P7 D7
|
||||
);
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use snapbox::assert_data_eq;
|
||||
|
@ -16,99 +16,6 @@ pub enum Change<T> {
|
||||
Keep(usize, usize, T),
|
||||
}
|
||||
|
||||
pub fn diff<'a, T>(a: &'a [T], b: &'a [T]) -> Vec<Change<&'a T>>
|
||||
where
|
||||
T: PartialEq,
|
||||
{
|
||||
if a.is_empty() && b.is_empty() {
|
||||
return vec![];
|
||||
}
|
||||
let mut diff = vec![];
|
||||
for (prev_x, prev_y, x, y) in backtrack(&a, &b) {
|
||||
if x == prev_x {
|
||||
diff.push(Change::Add(prev_y + 1, &b[prev_y]));
|
||||
} else if y == prev_y {
|
||||
diff.push(Change::Remove(prev_x + 1, &a[prev_x]));
|
||||
} else {
|
||||
diff.push(Change::Keep(prev_x + 1, prev_y + 1, &a[prev_x]));
|
||||
}
|
||||
}
|
||||
diff.reverse();
|
||||
diff
|
||||
}
|
||||
|
||||
fn shortest_edit<T>(a: &[T], b: &[T]) -> Vec<Vec<usize>>
|
||||
where
|
||||
T: PartialEq,
|
||||
{
|
||||
let max = a.len() + b.len();
|
||||
let mut v = vec![0; 2 * max + 1];
|
||||
let mut trace = vec![];
|
||||
for d in 0..=max {
|
||||
trace.push(v.clone());
|
||||
for k in (0..=(2 * d)).step_by(2) {
|
||||
let mut x = if k == 0 || (k != 2 * d && v[max - d + k - 1] < v[max - d + k + 1]) {
|
||||
// Move down
|
||||
v[max - d + k + 1]
|
||||
} else {
|
||||
// Move right
|
||||
v[max - d + k - 1] + 1
|
||||
};
|
||||
let mut y = x + d - k;
|
||||
// Step diagonally as far as possible.
|
||||
while x < a.len() && y < b.len() && a[x] == b[y] {
|
||||
x += 1;
|
||||
y += 1;
|
||||
}
|
||||
v[max - d + k] = x;
|
||||
// Return if reached the bottom-right position.
|
||||
if x >= a.len() && y >= b.len() {
|
||||
return trace;
|
||||
}
|
||||
}
|
||||
}
|
||||
panic!("finished without hitting end?");
|
||||
}
|
||||
|
||||
fn backtrack<T>(a: &[T], b: &[T]) -> Vec<(usize, usize, usize, usize)>
|
||||
where
|
||||
T: PartialEq,
|
||||
{
|
||||
let mut result = vec![];
|
||||
let mut x = a.len();
|
||||
let mut y = b.len();
|
||||
let max = x + y;
|
||||
for (d, v) in shortest_edit(a, b).iter().enumerate().rev() {
|
||||
let k = x + d - y;
|
||||
let prev_k = if k == 0 || (k != 2 * d && v[max - d + k - 1] < v[max - d + k + 1]) {
|
||||
k + 1
|
||||
} else {
|
||||
k - 1
|
||||
};
|
||||
let prev_x = v[max - d + prev_k];
|
||||
let prev_y = (prev_x + d).saturating_sub(prev_k);
|
||||
while x > prev_x && y > prev_y {
|
||||
result.push((x - 1, y - 1, x, y));
|
||||
x -= 1;
|
||||
y -= 1;
|
||||
}
|
||||
if d > 0 {
|
||||
result.push((prev_x, prev_y, x, y));
|
||||
}
|
||||
x = prev_x;
|
||||
y = prev_y;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
pub fn colored_diff<'a, T>(a: &'a [T], b: &'a [T]) -> String
|
||||
where
|
||||
T: PartialEq + fmt::Display,
|
||||
{
|
||||
let changes = diff(a, b);
|
||||
render_colored_changes(&changes)
|
||||
}
|
||||
|
||||
pub fn render_colored_changes<T: fmt::Display>(changes: &[Change<T>]) -> String {
|
||||
// anstyle is not very ergonomic, but I don't want to bring in another dependency.
|
||||
let red = anstyle::AnsiColor::Red.on_default().render();
|
||||
@ -140,27 +47,3 @@ pub fn render_colored_changes<T: fmt::Display>(changes: &[Change<T>]) -> String
|
||||
}
|
||||
String::from_utf8(buffer.into_inner()).unwrap()
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
pub fn compare(a: &str, b: &str) {
|
||||
let a: Vec<_> = a.chars().collect();
|
||||
let b: Vec<_> = b.chars().collect();
|
||||
let changes = diff(&a, &b);
|
||||
let mut result = vec![];
|
||||
for change in changes {
|
||||
match change {
|
||||
Change::Add(_, s) => result.push(*s),
|
||||
Change::Remove(_, _s) => {}
|
||||
Change::Keep(_, _, s) => result.push(*s),
|
||||
}
|
||||
}
|
||||
assert_eq!(b, result);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn basic_tests() {
|
||||
compare("", "");
|
||||
compare("A", "");
|
||||
compare("", "B");
|
||||
compare("ABCABBA", "CBABAC");
|
||||
}
|
||||
|
@ -57,15 +57,15 @@
|
||||
//! );
|
||||
//! ```
|
||||
|
||||
use crate::compare::assert_match_exact;
|
||||
use crate::compare::InMemoryDir;
|
||||
use crate::registry::{self, alt_api_path, FeatureMap};
|
||||
use flate2::read::GzDecoder;
|
||||
use snapbox::prelude::*;
|
||||
use std::collections::{HashMap, HashSet};
|
||||
use std::collections::HashSet;
|
||||
use std::fs;
|
||||
use std::fs::File;
|
||||
use std::io::{self, prelude::*, SeekFrom};
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::path::Path;
|
||||
use tar::Archive;
|
||||
|
||||
fn read_le_u32<R>(mut reader: R) -> io::Result<u32>
|
||||
@ -85,7 +85,7 @@ pub fn validate_upload(expected_json: &str, expected_crate_name: &str, expected_
|
||||
expected_json,
|
||||
expected_crate_name,
|
||||
expected_files,
|
||||
&[],
|
||||
(),
|
||||
);
|
||||
}
|
||||
|
||||
@ -94,7 +94,7 @@ pub fn validate_upload_with_contents(
|
||||
expected_json: &str,
|
||||
expected_crate_name: &str,
|
||||
expected_files: &[&str],
|
||||
expected_contents: &[(&str, &str)],
|
||||
expected_contents: impl Into<InMemoryDir>,
|
||||
) {
|
||||
let new_path = registry::api_path().join("api/v1/crates/new");
|
||||
_validate_upload(
|
||||
@ -118,7 +118,7 @@ pub fn validate_alt_upload(
|
||||
expected_json,
|
||||
expected_crate_name,
|
||||
expected_files,
|
||||
&[],
|
||||
(),
|
||||
);
|
||||
}
|
||||
|
||||
@ -127,7 +127,7 @@ fn _validate_upload(
|
||||
expected_json: &str,
|
||||
expected_crate_name: &str,
|
||||
expected_files: &[&str],
|
||||
expected_contents: &[(&str, &str)],
|
||||
expected_contents: impl Into<InMemoryDir>,
|
||||
) {
|
||||
let (actual_json, krate_bytes) = read_new_post(new_path);
|
||||
|
||||
@ -174,7 +174,22 @@ pub fn validate_crate_contents(
|
||||
reader: impl Read,
|
||||
expected_crate_name: &str,
|
||||
expected_files: &[&str],
|
||||
expected_contents: &[(&str, &str)],
|
||||
expected_contents: impl Into<InMemoryDir>,
|
||||
) {
|
||||
let expected_contents = expected_contents.into();
|
||||
validate_crate_contents_(
|
||||
reader,
|
||||
expected_crate_name,
|
||||
expected_files,
|
||||
expected_contents,
|
||||
)
|
||||
}
|
||||
|
||||
fn validate_crate_contents_(
|
||||
reader: impl Read,
|
||||
expected_crate_name: &str,
|
||||
expected_files: &[&str],
|
||||
expected_contents: InMemoryDir,
|
||||
) {
|
||||
let mut rdr = GzDecoder::new(reader);
|
||||
assert_eq!(
|
||||
@ -189,7 +204,7 @@ pub fn validate_crate_contents(
|
||||
.strip_suffix(".crate")
|
||||
.expect("must end with .crate"),
|
||||
);
|
||||
let files: HashMap<PathBuf, String> = ar
|
||||
let actual_contents: InMemoryDir = ar
|
||||
.entries()
|
||||
.unwrap()
|
||||
.map(|entry| {
|
||||
@ -205,7 +220,7 @@ pub fn validate_crate_contents(
|
||||
(name, contents)
|
||||
})
|
||||
.collect();
|
||||
let actual_files: HashSet<&Path> = files.keys().map(|p| p.as_path()).collect();
|
||||
let actual_files: HashSet<&Path> = actual_contents.paths().collect();
|
||||
let expected_files: HashSet<&Path> =
|
||||
expected_files.iter().map(|name| Path::new(name)).collect();
|
||||
let missing: Vec<&&Path> = expected_files.difference(&actual_files).collect();
|
||||
@ -216,15 +231,7 @@ pub fn validate_crate_contents(
|
||||
missing, extra
|
||||
);
|
||||
}
|
||||
if !expected_contents.is_empty() {
|
||||
for (e_file_name, e_file_contents) in expected_contents {
|
||||
let e_file_name = Path::new(e_file_name);
|
||||
let actual_contents = files
|
||||
.get(e_file_name)
|
||||
.unwrap_or_else(|| panic!("file `{}` missing in archive", e_file_name.display()));
|
||||
assert_match_exact(e_file_contents, actual_contents);
|
||||
}
|
||||
}
|
||||
actual_contents.assert_contains(&expected_contents);
|
||||
}
|
||||
|
||||
pub(crate) fn create_index_line(
|
||||
|
@ -2339,10 +2339,20 @@ You may press ctrl-c to skip waiting; the crate should be available shortly.
|
||||
"#,
|
||||
"foo-0.1.0.crate",
|
||||
&["Cargo.toml", "Cargo.toml.orig", "src/lib.rs"],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
&format!(
|
||||
r#"{}
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
# with all versions of Cargo and also rewrite `path` dependencies
|
||||
# to registry (e.g., crates.io) dependencies.
|
||||
#
|
||||
# If you are reading this file be aware that the original Cargo.toml
|
||||
# will likely look very different (and much more reasonable).
|
||||
# See Cargo.toml.orig for the original contents.
|
||||
|
||||
[package]
|
||||
edition = "2015"
|
||||
name = "foo"
|
||||
@ -2378,9 +2388,9 @@ artifact = [
|
||||
"cdylib",
|
||||
"staticlib",
|
||||
]
|
||||
target = "target""#,
|
||||
cargo::core::manifest::MANIFEST_PREAMBLE
|
||||
),
|
||||
target = "target"
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
|
@ -58,7 +58,7 @@ fn simple_cross_package() {
|
||||
f,
|
||||
"foo-0.0.0.crate",
|
||||
&["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"],
|
||||
&[],
|
||||
(),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1788,8 +1788,18 @@ fn package_includes_resolve_behavior() {
|
||||
|
||||
p.cargo("package").cwd("a").run();
|
||||
|
||||
let rewritten_toml = format!(
|
||||
r#"{}
|
||||
let rewritten_toml = str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
# with all versions of Cargo and also rewrite `path` dependencies
|
||||
# to registry (e.g., crates.io) dependencies.
|
||||
#
|
||||
# If you are reading this file be aware that the original Cargo.toml
|
||||
# will likely look very different (and much more reasonable).
|
||||
# See Cargo.toml.orig for the original contents.
|
||||
|
||||
[package]
|
||||
edition = "2015"
|
||||
name = "a"
|
||||
@ -1810,16 +1820,15 @@ resolver = "2"
|
||||
[lib]
|
||||
name = "a"
|
||||
path = "src/lib.rs"
|
||||
"#,
|
||||
cargo::core::manifest::MANIFEST_PREAMBLE
|
||||
);
|
||||
|
||||
"##]];
|
||||
|
||||
let f = File::open(&p.root().join("target/package/a-0.1.0.crate")).unwrap();
|
||||
validate_crate_contents(
|
||||
f,
|
||||
"a-0.1.0.crate",
|
||||
&["Cargo.toml", "Cargo.toml.orig", "src/lib.rs"],
|
||||
&[("Cargo.toml", &rewritten_toml)],
|
||||
[("Cargo.toml", rewritten_toml)],
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -976,10 +976,20 @@ You may press ctrl-c to skip waiting; the crate should be available shortly.
|
||||
"#,
|
||||
"foo-0.1.0.crate",
|
||||
&["Cargo.toml", "Cargo.toml.orig", "src/lib.rs"],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
&format!(
|
||||
r#"{}
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
# with all versions of Cargo and also rewrite `path` dependencies
|
||||
# to registry (e.g., crates.io) dependencies.
|
||||
#
|
||||
# If you are reading this file be aware that the original Cargo.toml
|
||||
# will likely look very different (and much more reasonable).
|
||||
# See Cargo.toml.orig for the original contents.
|
||||
|
||||
[package]
|
||||
edition = "2015"
|
||||
name = "foo"
|
||||
@ -1009,9 +1019,8 @@ optional = true
|
||||
|
||||
[features]
|
||||
feat = ["opt-dep1"]
|
||||
"#,
|
||||
cargo::core::manifest::MANIFEST_PREAMBLE
|
||||
),
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
@ -1104,10 +1113,20 @@ You may press ctrl-c to skip waiting; the crate should be available shortly.
|
||||
"#,
|
||||
"foo-0.1.0.crate",
|
||||
&["Cargo.toml", "Cargo.toml.orig", "src/lib.rs"],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
&format!(
|
||||
r#"{}
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
# with all versions of Cargo and also rewrite `path` dependencies
|
||||
# to registry (e.g., crates.io) dependencies.
|
||||
#
|
||||
# If you are reading this file be aware that the original Cargo.toml
|
||||
# will likely look very different (and much more reasonable).
|
||||
# See Cargo.toml.orig for the original contents.
|
||||
|
||||
[package]
|
||||
edition = "2015"
|
||||
name = "foo"
|
||||
@ -1135,9 +1154,8 @@ optional = true
|
||||
feat1 = []
|
||||
feat2 = ["dep:bar"]
|
||||
feat3 = ["feat2"]
|
||||
"#,
|
||||
cargo::core::manifest::MANIFEST_PREAMBLE
|
||||
),
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
|
@ -206,10 +206,20 @@ You may press ctrl-c to skip waiting; the crate should be available shortly.
|
||||
".cargo_vcs_info.json",
|
||||
"bar.txt",
|
||||
],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
&format!(
|
||||
r#"{}
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
# with all versions of Cargo and also rewrite `path` dependencies
|
||||
# to registry (e.g., crates.io) dependencies.
|
||||
#
|
||||
# If you are reading this file be aware that the original Cargo.toml
|
||||
# will likely look very different (and much more reasonable).
|
||||
# See Cargo.toml.orig for the original contents.
|
||||
|
||||
[package]
|
||||
edition = "2018"
|
||||
rust-version = "1.60"
|
||||
@ -241,9 +251,8 @@ repository = "https://github.com/example/example"
|
||||
[[bin]]
|
||||
name = "foo"
|
||||
path = "src/main.rs"
|
||||
"#,
|
||||
cargo::core::manifest::MANIFEST_PREAMBLE
|
||||
),
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
@ -385,10 +394,20 @@ You may press ctrl-c to skip waiting; the crate should be available shortly.
|
||||
"#,
|
||||
"bar-0.2.0.crate",
|
||||
&["Cargo.toml", "Cargo.toml.orig", "Cargo.lock", "src/main.rs"],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
&format!(
|
||||
r#"{}
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
# with all versions of Cargo and also rewrite `path` dependencies
|
||||
# to registry (e.g., crates.io) dependencies.
|
||||
#
|
||||
# If you are reading this file be aware that the original Cargo.toml
|
||||
# will likely look very different (and much more reasonable).
|
||||
# See Cargo.toml.orig for the original contents.
|
||||
|
||||
[package]
|
||||
edition = "2015"
|
||||
name = "bar"
|
||||
@ -414,9 +433,8 @@ version = "0.5.2"
|
||||
|
||||
[build-dependencies.dep-build]
|
||||
version = "0.8"
|
||||
"#,
|
||||
cargo::core::manifest::MANIFEST_PREAMBLE
|
||||
),
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
@ -525,10 +543,20 @@ You may press ctrl-c to skip waiting; the crate should be available shortly.
|
||||
"#,
|
||||
"bar-0.2.0.crate",
|
||||
&["Cargo.toml", "Cargo.toml.orig", "Cargo.lock", "src/main.rs"],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
&format!(
|
||||
r#"{}
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
# with all versions of Cargo and also rewrite `path` dependencies
|
||||
# to registry (e.g., crates.io) dependencies.
|
||||
#
|
||||
# If you are reading this file be aware that the original Cargo.toml
|
||||
# will likely look very different (and much more reasonable).
|
||||
# See Cargo.toml.orig for the original contents.
|
||||
|
||||
[package]
|
||||
edition = "2015"
|
||||
name = "bar"
|
||||
@ -549,9 +577,8 @@ path = "src/main.rs"
|
||||
[dependencies.dep]
|
||||
version = "0.1.2"
|
||||
features = ["testing"]
|
||||
"#,
|
||||
cargo::core::manifest::MANIFEST_PREAMBLE
|
||||
),
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
@ -776,10 +803,20 @@ You may press ctrl-c to skip waiting; the crate should be available shortly.
|
||||
".cargo_vcs_info.json",
|
||||
"bar.txt",
|
||||
],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
&format!(
|
||||
r#"{}
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
# with all versions of Cargo and also rewrite `path` dependencies
|
||||
# to registry (e.g., crates.io) dependencies.
|
||||
#
|
||||
# If you are reading this file be aware that the original Cargo.toml
|
||||
# will likely look very different (and much more reasonable).
|
||||
# See Cargo.toml.orig for the original contents.
|
||||
|
||||
[package]
|
||||
edition = "2018"
|
||||
rust-version = "1.60"
|
||||
@ -814,9 +851,8 @@ repository = "https://github.com/example/example"
|
||||
[[bin]]
|
||||
name = "bar"
|
||||
path = "src/main.rs"
|
||||
"#,
|
||||
cargo::core::manifest::MANIFEST_PREAMBLE
|
||||
),
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
@ -960,10 +996,20 @@ You may press ctrl-c to skip waiting; the crate should be available shortly.
|
||||
"#,
|
||||
"bar-0.2.0.crate",
|
||||
&["Cargo.toml", "Cargo.toml.orig", "Cargo.lock", "src/main.rs"],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
&format!(
|
||||
r#"{}
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
# with all versions of Cargo and also rewrite `path` dependencies
|
||||
# to registry (e.g., crates.io) dependencies.
|
||||
#
|
||||
# If you are reading this file be aware that the original Cargo.toml
|
||||
# will likely look very different (and much more reasonable).
|
||||
# See Cargo.toml.orig for the original contents.
|
||||
|
||||
[package]
|
||||
edition = "2015"
|
||||
name = "bar"
|
||||
@ -989,9 +1035,8 @@ version = "0.5.2"
|
||||
|
||||
[build-dependencies.dep-build]
|
||||
version = "0.8"
|
||||
"#,
|
||||
cargo::core::manifest::MANIFEST_PREAMBLE
|
||||
),
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
|
@ -73,7 +73,7 @@ See https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for
|
||||
f,
|
||||
"foo-0.0.1.crate",
|
||||
&["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"],
|
||||
&[],
|
||||
(),
|
||||
);
|
||||
}
|
||||
|
||||
@ -183,8 +183,7 @@ See https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for
|
||||
"sha1": "{}"
|
||||
}},
|
||||
"path_in_vcs": ""
|
||||
}}
|
||||
"#,
|
||||
}}"#,
|
||||
repo.revparse_head()
|
||||
);
|
||||
validate_crate_contents(
|
||||
@ -197,7 +196,7 @@ See https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for
|
||||
"src/main.rs",
|
||||
".cargo_vcs_info.json",
|
||||
],
|
||||
&[(".cargo_vcs_info.json", &vcs_contents)],
|
||||
[(".cargo_vcs_info.json", &vcs_contents)],
|
||||
);
|
||||
|
||||
println!("package sub-repo");
|
||||
@ -223,8 +222,7 @@ See https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for
|
||||
"sha1": "{}"
|
||||
}},
|
||||
"path_in_vcs": "a/a"
|
||||
}}
|
||||
"#,
|
||||
}}"#,
|
||||
repo.revparse_head()
|
||||
);
|
||||
validate_crate_contents(
|
||||
@ -236,7 +234,7 @@ See https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for
|
||||
"src/lib.rs",
|
||||
".cargo_vcs_info.json",
|
||||
],
|
||||
&[(".cargo_vcs_info.json", &vcs_contents)],
|
||||
[(".cargo_vcs_info.json", &vcs_contents)],
|
||||
);
|
||||
}
|
||||
|
||||
@ -757,7 +755,7 @@ src/main.rs
|
||||
f,
|
||||
"foo-0.0.1.crate",
|
||||
&["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"],
|
||||
&[],
|
||||
(),
|
||||
);
|
||||
}
|
||||
|
||||
@ -818,7 +816,7 @@ See https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for
|
||||
"src/main.rs",
|
||||
"src/foo.rs",
|
||||
],
|
||||
&[],
|
||||
(),
|
||||
);
|
||||
}
|
||||
|
||||
@ -1185,15 +1183,18 @@ fn issue_13695_allow_dirty_vcs_info() {
|
||||
"Cargo.toml.orig",
|
||||
"src/lib.rs",
|
||||
],
|
||||
&[(
|
||||
[(
|
||||
".cargo_vcs_info.json",
|
||||
r#"{
|
||||
str![[r#"
|
||||
{
|
||||
"git": {
|
||||
"sha1": "[..]",
|
||||
"dirty": true
|
||||
"dirty": true,
|
||||
"sha1": "[..]"
|
||||
},
|
||||
"path_in_vcs": ""
|
||||
}"#,
|
||||
}
|
||||
"#]]
|
||||
.is_json(),
|
||||
)],
|
||||
);
|
||||
|
||||
@ -1242,14 +1243,17 @@ fn issue_13695_allowing_dirty_vcs_info_but_clean() {
|
||||
"Cargo.toml.orig",
|
||||
"src/lib.rs",
|
||||
],
|
||||
&[(
|
||||
[(
|
||||
".cargo_vcs_info.json",
|
||||
r#"{
|
||||
str![[r#"
|
||||
{
|
||||
"git": {
|
||||
"sha1": "[..]"
|
||||
},
|
||||
"path_in_vcs": ""
|
||||
}"#,
|
||||
}
|
||||
"#]]
|
||||
.is_json(),
|
||||
)],
|
||||
);
|
||||
}
|
||||
@ -1280,13 +1284,13 @@ fn issue_14354_allowing_dirty_bare_commit() {
|
||||
f,
|
||||
"foo-0.1.0.crate",
|
||||
&["Cargo.toml", "Cargo.toml.orig", "src/lib.rs"],
|
||||
&[],
|
||||
(),
|
||||
);
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
fn generated_manifest() {
|
||||
let registry = registry::alt_init();
|
||||
registry::alt_init();
|
||||
Package::new("abc", "1.0.0").publish();
|
||||
Package::new("def", "1.0.0").alternative(true).publish();
|
||||
Package::new("ghi", "1.0.0").publish();
|
||||
@ -1325,8 +1329,18 @@ fn generated_manifest() {
|
||||
p.cargo("package --no-verify").run();
|
||||
|
||||
let f = File::open(&p.root().join("target/package/foo-0.0.1.crate")).unwrap();
|
||||
let rewritten_toml = format!(
|
||||
r#"{}
|
||||
let rewritten_toml = str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
# with all versions of Cargo and also rewrite `path` dependencies
|
||||
# to registry (e.g., crates.io) dependencies.
|
||||
#
|
||||
# If you are reading this file be aware that the original Cargo.toml
|
||||
# will likely look very different (and much more reasonable).
|
||||
# See Cargo.toml.orig for the original contents.
|
||||
|
||||
[package]
|
||||
edition = "2015"
|
||||
name = "foo"
|
||||
@ -1358,20 +1372,18 @@ version = "0.1"
|
||||
|
||||
[dependencies.def]
|
||||
version = "1.0"
|
||||
registry-index = "{}"
|
||||
registry-index = "[ROOTURL]/alternative-registry"
|
||||
|
||||
[dependencies.ghi]
|
||||
version = "1.0"
|
||||
"#,
|
||||
cargo::core::manifest::MANIFEST_PREAMBLE,
|
||||
registry.index_url()
|
||||
);
|
||||
|
||||
"##]];
|
||||
|
||||
validate_crate_contents(
|
||||
f,
|
||||
"foo-0.0.1.crate",
|
||||
&["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"],
|
||||
&[("Cargo.toml", &rewritten_toml)],
|
||||
[("Cargo.toml", rewritten_toml)],
|
||||
);
|
||||
}
|
||||
|
||||
@ -1412,8 +1424,18 @@ fn ignore_workspace_specifier() {
|
||||
p.cargo("package --no-verify").cwd("bar").run();
|
||||
|
||||
let f = File::open(&p.root().join("target/package/bar-0.1.0.crate")).unwrap();
|
||||
let rewritten_toml = format!(
|
||||
r#"{}
|
||||
let rewritten_toml = str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
# with all versions of Cargo and also rewrite `path` dependencies
|
||||
# to registry (e.g., crates.io) dependencies.
|
||||
#
|
||||
# If you are reading this file be aware that the original Cargo.toml
|
||||
# will likely look very different (and much more reasonable).
|
||||
# See Cargo.toml.orig for the original contents.
|
||||
|
||||
[package]
|
||||
edition = "2015"
|
||||
name = "bar"
|
||||
@ -1430,14 +1452,13 @@ readme = false
|
||||
[lib]
|
||||
name = "bar"
|
||||
path = "src/lib.rs"
|
||||
"#,
|
||||
cargo::core::manifest::MANIFEST_PREAMBLE
|
||||
);
|
||||
|
||||
"##]];
|
||||
validate_crate_contents(
|
||||
f,
|
||||
"bar-0.1.0.crate",
|
||||
&["Cargo.toml", "Cargo.toml.orig", "src/lib.rs"],
|
||||
&[("Cargo.toml", &rewritten_toml)],
|
||||
[("Cargo.toml", rewritten_toml)],
|
||||
);
|
||||
}
|
||||
|
||||
@ -1491,8 +1512,18 @@ fn package_public_dep() {
|
||||
)
|
||||
.file("src/main.rs", "fn main() {}")
|
||||
.build();
|
||||
let rewritten_toml = format!(
|
||||
r#"{}
|
||||
let rewritten_toml = str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
# with all versions of Cargo and also rewrite `path` dependencies
|
||||
# to registry (e.g., crates.io) dependencies.
|
||||
#
|
||||
# If you are reading this file be aware that the original Cargo.toml
|
||||
# will likely look very different (and much more reasonable).
|
||||
# See Cargo.toml.orig for the original contents.
|
||||
|
||||
[package]
|
||||
edition = "2015"
|
||||
name = "foo"
|
||||
@ -1512,16 +1543,24 @@ path = "src/main.rs"
|
||||
[dependencies.bar]
|
||||
version = "1.0.0"
|
||||
|
||||
[target.{host}.dependencies.baz]
|
||||
[target.[HOST_TARGET].dependencies.baz]
|
||||
version = "1.0.0"
|
||||
"#,
|
||||
cargo::core::manifest::MANIFEST_PREAMBLE,
|
||||
host = rustc_host()
|
||||
);
|
||||
|
||||
"##]];
|
||||
verify(&p, "package", rewritten_toml);
|
||||
|
||||
let rewritten_toml = format!(
|
||||
r#"{}
|
||||
let rewritten_toml = str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
# with all versions of Cargo and also rewrite `path` dependencies
|
||||
# to registry (e.g., crates.io) dependencies.
|
||||
#
|
||||
# If you are reading this file be aware that the original Cargo.toml
|
||||
# will likely look very different (and much more reasonable).
|
||||
# See Cargo.toml.orig for the original contents.
|
||||
|
||||
[package]
|
||||
edition = "2015"
|
||||
name = "foo"
|
||||
@ -1542,16 +1581,14 @@ path = "src/main.rs"
|
||||
version = "1.0.0"
|
||||
public = true
|
||||
|
||||
[target.{host}.dependencies.baz]
|
||||
[target.[HOST_TARGET].dependencies.baz]
|
||||
version = "1.0.0"
|
||||
public = true
|
||||
"#,
|
||||
cargo::core::manifest::MANIFEST_PREAMBLE,
|
||||
host = rustc_host()
|
||||
);
|
||||
|
||||
"##]];
|
||||
verify(&p, "package -Zpublic-dependency", rewritten_toml);
|
||||
|
||||
fn verify(p: &cargo_test_support::Project, cmd: &str, rewritten_toml: String) {
|
||||
fn verify(p: &cargo_test_support::Project, cmd: &str, rewritten_toml: impl IntoData) {
|
||||
p.cargo(cmd)
|
||||
.masquerade_as_nightly_cargo(&["public-dependency"])
|
||||
.run();
|
||||
@ -1560,7 +1597,7 @@ public = true
|
||||
f,
|
||||
"foo-0.0.1.crate",
|
||||
&["Cargo.toml", "Cargo.toml.orig", "Cargo.lock", "src/main.rs"],
|
||||
&[("Cargo.toml", &rewritten_toml)],
|
||||
[("Cargo.toml", rewritten_toml)],
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -2274,7 +2311,7 @@ subdir/LICENSE
|
||||
"subdir/LICENSE",
|
||||
"src/lib.rs",
|
||||
],
|
||||
&[("subdir/LICENSE", "license text")],
|
||||
[("subdir/LICENSE", "license text")],
|
||||
);
|
||||
}
|
||||
|
||||
@ -2324,7 +2361,7 @@ src/lib.rs
|
||||
f,
|
||||
"foo-1.0.0.crate",
|
||||
&["Cargo.toml", "Cargo.toml.orig", "LICENSE", "src/lib.rs"],
|
||||
&[("LICENSE", "license text")],
|
||||
[("LICENSE", "license text")],
|
||||
);
|
||||
let manifest =
|
||||
std::fs::read_to_string(p.root().join("target/package/foo-1.0.0/Cargo.toml")).unwrap();
|
||||
@ -2383,7 +2420,7 @@ src/lib.rs
|
||||
f,
|
||||
"foo-1.0.0.crate",
|
||||
&["Cargo.toml", "Cargo.toml.orig", "LICENSE", "src/lib.rs"],
|
||||
&[("LICENSE", "inner license")],
|
||||
[("LICENSE", "inner license")],
|
||||
);
|
||||
let manifest = read_to_string(p.root().join("target/package/foo-1.0.0/Cargo.toml")).unwrap();
|
||||
assert!(manifest.contains("license-file = \"LICENSE\""));
|
||||
@ -2983,8 +3020,18 @@ fn workspace_overrides_resolver() {
|
||||
p.cargo("package --no-verify -p bar -p baz").run();
|
||||
|
||||
let f = File::open(&p.root().join("target/package/bar-0.1.0.crate")).unwrap();
|
||||
let rewritten_toml = format!(
|
||||
r#"{}
|
||||
let rewritten_toml = str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
# with all versions of Cargo and also rewrite `path` dependencies
|
||||
# to registry (e.g., crates.io) dependencies.
|
||||
#
|
||||
# If you are reading this file be aware that the original Cargo.toml
|
||||
# will likely look very different (and much more reasonable).
|
||||
# See Cargo.toml.orig for the original contents.
|
||||
|
||||
[package]
|
||||
edition = "2021"
|
||||
name = "bar"
|
||||
@ -3001,20 +3048,29 @@ resolver = "1"
|
||||
[lib]
|
||||
name = "bar"
|
||||
path = "src/lib.rs"
|
||||
"#,
|
||||
cargo::core::manifest::MANIFEST_PREAMBLE
|
||||
);
|
||||
|
||||
"##]];
|
||||
validate_crate_contents(
|
||||
f,
|
||||
"bar-0.1.0.crate",
|
||||
&["Cargo.toml", "Cargo.toml.orig", "src/lib.rs"],
|
||||
&[("Cargo.toml", &rewritten_toml)],
|
||||
[("Cargo.toml", rewritten_toml)],
|
||||
);
|
||||
|
||||
// When the crate has the same implicit resolver as the workspace it is not overridden
|
||||
let f = File::open(&p.root().join("target/package/baz-0.1.0.crate")).unwrap();
|
||||
let rewritten_toml = format!(
|
||||
r#"{}
|
||||
let rewritten_toml = str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
# with all versions of Cargo and also rewrite `path` dependencies
|
||||
# to registry (e.g., crates.io) dependencies.
|
||||
#
|
||||
# If you are reading this file be aware that the original Cargo.toml
|
||||
# will likely look very different (and much more reasonable).
|
||||
# See Cargo.toml.orig for the original contents.
|
||||
|
||||
[package]
|
||||
edition = "2015"
|
||||
name = "baz"
|
||||
@ -3030,14 +3086,13 @@ readme = false
|
||||
[lib]
|
||||
name = "baz"
|
||||
path = "src/lib.rs"
|
||||
"#,
|
||||
cargo::core::manifest::MANIFEST_PREAMBLE
|
||||
);
|
||||
|
||||
"##]];
|
||||
validate_crate_contents(
|
||||
f,
|
||||
"baz-0.1.0.crate",
|
||||
&["Cargo.toml", "Cargo.toml.orig", "src/lib.rs"],
|
||||
&[("Cargo.toml", &rewritten_toml)],
|
||||
[("Cargo.toml", rewritten_toml)],
|
||||
);
|
||||
}
|
||||
|
||||
@ -3157,7 +3212,7 @@ src/main.rs
|
||||
f,
|
||||
"foo-0.0.1.crate",
|
||||
&["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"],
|
||||
&[
|
||||
[
|
||||
("Cargo.lock", cargo_lock_contents),
|
||||
("Cargo.toml", &cargo_toml_contents),
|
||||
("Cargo.toml.orig", cargo_toml_orig_contents),
|
||||
@ -3268,7 +3323,7 @@ src/main.rs
|
||||
"src/bar.txt",
|
||||
"src/main.rs",
|
||||
],
|
||||
&[
|
||||
[
|
||||
("Cargo.lock", cargo_lock_contents),
|
||||
("Cargo.toml", &cargo_toml_contents),
|
||||
("Cargo.toml.orig", cargo_toml_orig_contents),
|
||||
@ -3391,7 +3446,7 @@ src/main.rs.bak
|
||||
"src/main.rs",
|
||||
"src/main.rs.bak",
|
||||
],
|
||||
&[
|
||||
[
|
||||
("Cargo.lock", cargo_lock_contents),
|
||||
("Cargo.toml", &cargo_toml_contents),
|
||||
("Cargo.toml.orig", cargo_toml_orig_contents),
|
||||
@ -3494,10 +3549,20 @@ See https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for
|
||||
"Examples/ExampleFoo.rs",
|
||||
"Tests/ExplicitPath.rs",
|
||||
],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
&format!(
|
||||
r#"{}
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
# with all versions of Cargo and also rewrite `path` dependencies
|
||||
# to registry (e.g., crates.io) dependencies.
|
||||
#
|
||||
# If you are reading this file be aware that the original Cargo.toml
|
||||
# will likely look very different (and much more reasonable).
|
||||
# See Cargo.toml.orig for the original contents.
|
||||
|
||||
[package]
|
||||
edition = "2018"
|
||||
name = "foo"
|
||||
@ -3517,9 +3582,8 @@ license = "MIT"
|
||||
[lib]
|
||||
name = "foo"
|
||||
path = "src/lib.rs"
|
||||
"#,
|
||||
cargo::core::manifest::MANIFEST_PREAMBLE
|
||||
),
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
@ -3584,7 +3648,7 @@ See https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for
|
||||
f,
|
||||
"foo-0.0.1.crate",
|
||||
&["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"],
|
||||
&[],
|
||||
(),
|
||||
);
|
||||
}
|
||||
|
||||
@ -3621,7 +3685,7 @@ See https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for
|
||||
f,
|
||||
"foo-0.0.0.crate",
|
||||
&["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"],
|
||||
&[],
|
||||
(),
|
||||
);
|
||||
}
|
||||
|
||||
@ -3893,9 +3957,10 @@ fn normalize_paths() {
|
||||
"tests/test_foo.rs",
|
||||
"benches/bench_foo.rs",
|
||||
],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
r#"# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
@ -3941,7 +4006,8 @@ path = "tests/test_foo.rs"
|
||||
[[bench]]
|
||||
name = "bench_foo"
|
||||
path = "benches/bench_foo.rs"
|
||||
"#,
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
@ -3984,9 +4050,10 @@ fn discovery_inferred_build_rs_included() {
|
||||
f,
|
||||
"foo-0.0.1.crate",
|
||||
&["Cargo.toml", "Cargo.toml.orig", "src/lib.rs", "build.rs"],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
r#"# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
@ -4020,7 +4087,8 @@ license = "MIT"
|
||||
[lib]
|
||||
name = "foo"
|
||||
path = "src/lib.rs"
|
||||
"#,
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
@ -4064,9 +4132,10 @@ fn discovery_inferred_build_rs_excluded() {
|
||||
f,
|
||||
"foo-0.0.1.crate",
|
||||
&["Cargo.toml", "Cargo.toml.orig", "src/lib.rs"],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
r#"# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
@ -4097,7 +4166,8 @@ license = "MIT"
|
||||
[lib]
|
||||
name = "foo"
|
||||
path = "src/lib.rs"
|
||||
"#,
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
@ -4141,9 +4211,10 @@ fn discovery_explicit_build_rs_included() {
|
||||
f,
|
||||
"foo-0.0.1.crate",
|
||||
&["Cargo.toml", "Cargo.toml.orig", "src/lib.rs", "build.rs"],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
r#"# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
@ -4177,7 +4248,8 @@ license = "MIT"
|
||||
[lib]
|
||||
name = "foo"
|
||||
path = "src/lib.rs"
|
||||
"#,
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
@ -4222,9 +4294,10 @@ fn discovery_explicit_build_rs_excluded() {
|
||||
f,
|
||||
"foo-0.0.1.crate",
|
||||
&["Cargo.toml", "Cargo.toml.orig", "src/lib.rs"],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
r#"# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
@ -4255,7 +4328,8 @@ license = "MIT"
|
||||
[lib]
|
||||
name = "foo"
|
||||
path = "src/lib.rs"
|
||||
"#,
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
@ -4304,9 +4378,10 @@ fn discovery_inferred_lib_included() {
|
||||
"src/main.rs",
|
||||
"src/lib.rs",
|
||||
],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
r#"# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
@ -4344,7 +4419,8 @@ path = "src/lib.rs"
|
||||
[[bin]]
|
||||
name = "foo"
|
||||
path = "src/main.rs"
|
||||
"#,
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
@ -4388,9 +4464,10 @@ fn discovery_inferred_lib_excluded() {
|
||||
f,
|
||||
"foo-0.0.1.crate",
|
||||
&["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
r#"# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
@ -4421,7 +4498,8 @@ license = "MIT"
|
||||
[[bin]]
|
||||
name = "foo"
|
||||
path = "src/main.rs"
|
||||
"#,
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
@ -4473,9 +4551,10 @@ fn discovery_explicit_lib_included() {
|
||||
"src/main.rs",
|
||||
"src/lib.rs",
|
||||
],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
r#"# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
@ -4513,7 +4592,8 @@ path = "src/lib.rs"
|
||||
[[bin]]
|
||||
name = "foo"
|
||||
path = "src/main.rs"
|
||||
"#,
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
@ -4560,9 +4640,10 @@ fn discovery_explicit_lib_excluded() {
|
||||
f,
|
||||
"foo-0.0.1.crate",
|
||||
&["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
r#"# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
@ -4593,7 +4674,8 @@ license = "MIT"
|
||||
[[bin]]
|
||||
name = "foo"
|
||||
path = "src/main.rs"
|
||||
"#,
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
@ -4648,9 +4730,10 @@ fn discovery_inferred_other_included() {
|
||||
"tests/test_foo.rs",
|
||||
"benches/bench_foo.rs",
|
||||
],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
r#"# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
@ -4703,7 +4786,8 @@ path = "tests/test_foo.rs"
|
||||
[[bench]]
|
||||
name = "bench_foo"
|
||||
path = "benches/bench_foo.rs"
|
||||
"#,
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
@ -4753,9 +4837,10 @@ fn discovery_inferred_other_excluded() {
|
||||
f,
|
||||
"foo-0.0.1.crate",
|
||||
&["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/lib.rs"],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
r#"# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
@ -4786,7 +4871,8 @@ license = "MIT"
|
||||
[lib]
|
||||
name = "foo"
|
||||
path = "src/lib.rs"
|
||||
"#,
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
@ -4853,9 +4939,10 @@ fn discovery_explicit_other_included() {
|
||||
"tests/test_foo.rs",
|
||||
"benches/bench_foo.rs",
|
||||
],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
r#"# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
@ -4908,7 +4995,8 @@ path = "tests/test_foo.rs"
|
||||
[[bench]]
|
||||
name = "bench_foo"
|
||||
path = "benches/bench_foo.rs"
|
||||
"#,
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
@ -4970,9 +5058,10 @@ fn discovery_explicit_other_excluded() {
|
||||
f,
|
||||
"foo-0.0.1.crate",
|
||||
&["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/lib.rs"],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
r#"# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
@ -5003,7 +5092,8 @@ license = "MIT"
|
||||
[lib]
|
||||
name = "foo"
|
||||
path = "src/lib.rs"
|
||||
"#,
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
@ -5070,9 +5160,10 @@ fn deterministic_build_targets() {
|
||||
"examples/y.rs",
|
||||
"examples/z.rs",
|
||||
],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
r#"# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
@ -5126,7 +5217,8 @@ path = "examples/y.rs"
|
||||
[[example]]
|
||||
name = "z"
|
||||
path = "examples/z.rs"
|
||||
"#,
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
@ -5262,8 +5354,8 @@ fn workspace_with_local_deps_nightly() {
|
||||
"#]])
|
||||
.run();
|
||||
|
||||
let generated_lock = format!(
|
||||
r#"# This file is automatically @generated by Cargo.
|
||||
let generated_lock = str![[r##"
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 4
|
||||
|
||||
@ -5278,7 +5370,7 @@ dependencies = [
|
||||
name = "level2"
|
||||
version = "0.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = [..]
|
||||
checksum = "[..]"
|
||||
dependencies = [
|
||||
"level3",
|
||||
]
|
||||
@ -5287,12 +5379,22 @@ dependencies = [
|
||||
name = "level3"
|
||||
version = "0.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = [..]
|
||||
"#
|
||||
);
|
||||
checksum = "[..]"
|
||||
|
||||
"##]];
|
||||
|
||||
let generated_manifest = str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
# with all versions of Cargo and also rewrite `path` dependencies
|
||||
# to registry (e.g., crates.io) dependencies.
|
||||
#
|
||||
# If you are reading this file be aware that the original Cargo.toml
|
||||
# will likely look very different (and much more reasonable).
|
||||
# See Cargo.toml.orig for the original contents.
|
||||
|
||||
let generated_manifest = format!(
|
||||
r#"{}
|
||||
[package]
|
||||
edition = "2015"
|
||||
name = "level1"
|
||||
@ -5316,9 +5418,8 @@ path = "src/main.rs"
|
||||
[dependencies.level2]
|
||||
version = "0.0.1"
|
||||
features = ["foo"]
|
||||
"#,
|
||||
cargo::core::manifest::MANIFEST_PREAMBLE,
|
||||
);
|
||||
|
||||
"##]];
|
||||
|
||||
let mut f = File::open(&p.root().join("target/package/level1-0.0.1.crate")).unwrap();
|
||||
|
||||
@ -5326,9 +5427,9 @@ features = ["foo"]
|
||||
&mut f,
|
||||
"level1-0.0.1.crate",
|
||||
&["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"],
|
||||
&[
|
||||
("Cargo.lock", &generated_lock),
|
||||
("Cargo.toml", &generated_manifest),
|
||||
[
|
||||
("Cargo.lock", generated_lock),
|
||||
("Cargo.toml", generated_manifest),
|
||||
],
|
||||
);
|
||||
}
|
||||
@ -5805,7 +5906,7 @@ dependencies = [
|
||||
name = "level2"
|
||||
version = "0.0.1"
|
||||
source = "{index}"
|
||||
checksum = [..]
|
||||
checksum = "[..]"
|
||||
"#
|
||||
);
|
||||
|
||||
@ -5815,7 +5916,7 @@ checksum = [..]
|
||||
&mut f,
|
||||
"level1-0.0.1.crate",
|
||||
&["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"],
|
||||
&[("Cargo.lock", &generated_lock)],
|
||||
[("Cargo.lock", generated_lock)],
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1571,57 +1571,68 @@ You may press ctrl-c to skip waiting; the crate should be available shortly.
|
||||
"#,
|
||||
"foo-0.1.0.crate",
|
||||
&["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"],
|
||||
&[
|
||||
[
|
||||
(
|
||||
"Cargo.toml",
|
||||
// Check that only `version` is included in Cargo.toml.
|
||||
&format!(
|
||||
"{}\n\
|
||||
[package]\n\
|
||||
edition = \"2018\"\n\
|
||||
name = \"foo\"\n\
|
||||
version = \"0.1.0\"\n\
|
||||
authors = []\n\
|
||||
build = false\n\
|
||||
autolib = false\n\
|
||||
autobins = false\n\
|
||||
autoexamples = false\n\
|
||||
autotests = false\n\
|
||||
autobenches = false\n\
|
||||
description = \"foo\"\n\
|
||||
readme = false\n\
|
||||
license = \"MIT\"\n\
|
||||
\n\
|
||||
[[bin]]\n\
|
||||
name = \"foo\"\n\
|
||||
path = \"src/main.rs\"\n\
|
||||
\n\
|
||||
[dependencies.dep1]\n\
|
||||
version = \"1.0\"\n\
|
||||
",
|
||||
cargo::core::manifest::MANIFEST_PREAMBLE
|
||||
),
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
# with all versions of Cargo and also rewrite `path` dependencies
|
||||
# to registry (e.g., crates.io) dependencies.
|
||||
#
|
||||
# If you are reading this file be aware that the original Cargo.toml
|
||||
# will likely look very different (and much more reasonable).
|
||||
# See Cargo.toml.orig for the original contents.
|
||||
|
||||
[package]
|
||||
edition = "2018"
|
||||
name = "foo"
|
||||
version = "0.1.0"
|
||||
authors = []
|
||||
build = false
|
||||
autolib = false
|
||||
autobins = false
|
||||
autoexamples = false
|
||||
autotests = false
|
||||
autobenches = false
|
||||
description = "foo"
|
||||
readme = false
|
||||
license = "MIT"
|
||||
|
||||
[[bin]]
|
||||
name = "foo"
|
||||
path = "src/main.rs"
|
||||
|
||||
[dependencies.dep1]
|
||||
version = "1.0"
|
||||
|
||||
"##]],
|
||||
),
|
||||
(
|
||||
"Cargo.lock",
|
||||
// The important check here is that it is 1.0.1 in the registry.
|
||||
"# This file is automatically @generated by Cargo.\n\
|
||||
# It is not intended for manual editing.\n\
|
||||
version = 4\n\
|
||||
\n\
|
||||
[[package]]\n\
|
||||
name = \"dep1\"\n\
|
||||
version = \"1.0.1\"\n\
|
||||
source = \"registry+https://github.com/rust-lang/crates.io-index\"\n\
|
||||
checksum = \"[..]\"\n\
|
||||
\n\
|
||||
[[package]]\n\
|
||||
name = \"foo\"\n\
|
||||
version = \"0.1.0\"\n\
|
||||
dependencies = [\n\
|
||||
\x20\"dep1\",\n\
|
||||
]\n\
|
||||
",
|
||||
str![[r##"
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "dep1"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "[..]"
|
||||
|
||||
[[package]]
|
||||
name = "foo"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"dep1",
|
||||
]
|
||||
|
||||
"##]],
|
||||
),
|
||||
],
|
||||
);
|
||||
@ -1954,10 +1965,20 @@ You may press ctrl-c to skip waiting; the crate should be available shortly.
|
||||
"#,
|
||||
"foo-0.1.0.crate",
|
||||
&["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
&format!(
|
||||
r#"{}
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
# with all versions of Cargo and also rewrite `path` dependencies
|
||||
# to registry (e.g., crates.io) dependencies.
|
||||
#
|
||||
# If you are reading this file be aware that the original Cargo.toml
|
||||
# will likely look very different (and much more reasonable).
|
||||
# See Cargo.toml.orig for the original contents.
|
||||
|
||||
[package]
|
||||
edition = "2015"
|
||||
name = "foo"
|
||||
@ -2047,9 +2068,8 @@ features = ["cat"]
|
||||
[target."cfg(unix)".dev-dependencies.target-normal-and-dev]
|
||||
version = "1.0"
|
||||
features = ["cat"]
|
||||
"#,
|
||||
cargo::core::manifest::MANIFEST_PREAMBLE
|
||||
),
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
|
@ -108,7 +108,7 @@ src/main.rs
|
||||
f,
|
||||
"foo-0.0.1.crate",
|
||||
&["Cargo.toml", "Cargo.toml.orig", "Cargo.lock", "src/main.rs"],
|
||||
&[],
|
||||
(),
|
||||
);
|
||||
}
|
||||
|
||||
@ -163,7 +163,7 @@ fn no_lock_file_with_library() {
|
||||
f,
|
||||
"foo-0.0.1.crate",
|
||||
&["Cargo.toml", "Cargo.toml.orig", "src/lib.rs"],
|
||||
&[],
|
||||
(),
|
||||
);
|
||||
}
|
||||
|
||||
@ -188,7 +188,7 @@ fn lock_file_and_workspace() {
|
||||
f,
|
||||
"foo-0.0.1.crate",
|
||||
&["Cargo.toml", "Cargo.toml.orig", "src/main.rs", "Cargo.lock"],
|
||||
&[],
|
||||
(),
|
||||
);
|
||||
}
|
||||
|
||||
@ -576,7 +576,7 @@ See https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for
|
||||
f,
|
||||
"foo-0.0.1.crate",
|
||||
&["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"],
|
||||
&[],
|
||||
(),
|
||||
);
|
||||
|
||||
let package_path = p.root().join("target/package/bar-0.0.1.crate");
|
||||
@ -586,6 +586,6 @@ See https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for
|
||||
f,
|
||||
"bar-0.0.1.crate",
|
||||
&["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"],
|
||||
&[],
|
||||
(),
|
||||
);
|
||||
}
|
||||
|
@ -621,10 +621,20 @@ You may press ctrl-c to skip waiting; the crate should be available shortly.
|
||||
"#,
|
||||
"foo-0.1.0.crate",
|
||||
&["Cargo.toml", "Cargo.toml.orig", "src/lib.rs"],
|
||||
&[(
|
||||
[(
|
||||
"Cargo.toml",
|
||||
&format!(
|
||||
r#"{}
|
||||
str![[r##"
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
# with all versions of Cargo and also rewrite `path` dependencies
|
||||
# to registry (e.g., crates.io) dependencies.
|
||||
#
|
||||
# If you are reading this file be aware that the original Cargo.toml
|
||||
# will likely look very different (and much more reasonable).
|
||||
# See Cargo.toml.orig for the original contents.
|
||||
|
||||
[package]
|
||||
edition = "2015"
|
||||
name = "foo"
|
||||
@ -651,9 +661,8 @@ optional = true
|
||||
[features]
|
||||
feat1 = []
|
||||
feat2 = ["bar?/feat"]
|
||||
"#,
|
||||
cargo::core::manifest::MANIFEST_PREAMBLE
|
||||
),
|
||||
|
||||
"##]],
|
||||
)],
|
||||
);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user