mirror of
https://github.com/rust-lang/cargo.git
synced 2025-10-01 11:30:39 +00:00
Add a dirty flag to the vcs_info file.
This commit is contained in:
parent
2a1299a878
commit
1b636855a9
@ -81,6 +81,8 @@ struct VcsInfo {
|
|||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
struct GitVcsInfo {
|
struct GitVcsInfo {
|
||||||
sha1: String,
|
sha1: String,
|
||||||
|
/// Indicate whether or not the Git worktree is dirty.
|
||||||
|
dirty: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Packages a single package in a workspace, returning the resulting tar file.
|
/// Packages a single package in a workspace, returning the resulting tar file.
|
||||||
@ -634,10 +636,12 @@ fn check_repo_state(
|
|||||||
.to_string()
|
.to_string()
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
if dirty_src_files.is_empty() || opts.allow_dirty {
|
let dirty = !dirty_src_files.is_empty();
|
||||||
|
if !dirty || opts.allow_dirty {
|
||||||
let rev_obj = repo.revparse_single("HEAD")?;
|
let rev_obj = repo.revparse_single("HEAD")?;
|
||||||
Ok(GitVcsInfo {
|
Ok(GitVcsInfo {
|
||||||
sha1: rev_obj.id().to_string(),
|
sha1: rev_obj.id().to_string(),
|
||||||
|
dirty,
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
anyhow::bail!(
|
anyhow::bail!(
|
||||||
|
@ -189,7 +189,8 @@ See https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for
|
|||||||
let vcs_contents = format!(
|
let vcs_contents = format!(
|
||||||
r#"{{
|
r#"{{
|
||||||
"git": {{
|
"git": {{
|
||||||
"sha1": "{}"
|
"sha1": "{}",
|
||||||
|
"dirty": false
|
||||||
}},
|
}},
|
||||||
"path_in_vcs": ""
|
"path_in_vcs": ""
|
||||||
}}
|
}}
|
||||||
@ -230,7 +231,8 @@ See https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for
|
|||||||
let vcs_contents = format!(
|
let vcs_contents = format!(
|
||||||
r#"{{
|
r#"{{
|
||||||
"git": {{
|
"git": {{
|
||||||
"sha1": "{}"
|
"sha1": "{}",
|
||||||
|
"dirty": false
|
||||||
}},
|
}},
|
||||||
"path_in_vcs": "a/a"
|
"path_in_vcs": "a/a"
|
||||||
}}
|
}}
|
||||||
@ -1174,7 +1176,7 @@ src/lib.rs
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cargo_test]
|
#[cargo_test]
|
||||||
fn issue_13695_dirty_vcs_info() {
|
fn issue_13695_allow_dirty_vcs_info() {
|
||||||
let p = project()
|
let p = project()
|
||||||
.file(
|
.file(
|
||||||
"Cargo.toml",
|
"Cargo.toml",
|
||||||
@ -1195,23 +1197,7 @@ fn issue_13695_dirty_vcs_info() {
|
|||||||
// Initial commit, with no files added.
|
// Initial commit, with no files added.
|
||||||
git::commit(&repo);
|
git::commit(&repo);
|
||||||
|
|
||||||
// Fail because worktree is dirty.
|
// Allowing a dirty worktree results in the vcs file still being included.
|
||||||
p.cargo("package")
|
|
||||||
.with_status(101)
|
|
||||||
.with_stderr_contains(
|
|
||||||
"[ERROR] 2 files in the working directory contain changes that were not yet committed into git:",
|
|
||||||
)
|
|
||||||
.run();
|
|
||||||
|
|
||||||
// Listing fails too.
|
|
||||||
p.cargo("package --list")
|
|
||||||
.with_status(101)
|
|
||||||
.with_stderr_contains(
|
|
||||||
"[ERROR] 2 files in the working directory contain changes that were not yet committed into git:",
|
|
||||||
)
|
|
||||||
.run();
|
|
||||||
|
|
||||||
// Allowing a dirty worktree results in the vcs file being included.
|
|
||||||
p.cargo("package --allow-dirty").run();
|
p.cargo("package --allow-dirty").run();
|
||||||
|
|
||||||
let f = File::open(&p.root().join("target/package/foo-0.1.0.crate")).unwrap();
|
let f = File::open(&p.root().join("target/package/foo-0.1.0.crate")).unwrap();
|
||||||
@ -1224,7 +1210,16 @@ fn issue_13695_dirty_vcs_info() {
|
|||||||
"Cargo.toml.orig",
|
"Cargo.toml.orig",
|
||||||
"src/lib.rs",
|
"src/lib.rs",
|
||||||
],
|
],
|
||||||
&[],
|
&[(
|
||||||
|
".cargo_vcs_info.json",
|
||||||
|
r#"{
|
||||||
|
"git": {
|
||||||
|
"sha1": "[..]",
|
||||||
|
"dirty": true
|
||||||
|
},
|
||||||
|
"path_in_vcs": ""
|
||||||
|
}"#,
|
||||||
|
)],
|
||||||
);
|
);
|
||||||
|
|
||||||
// Listing provides a consistent result.
|
// Listing provides a consistent result.
|
||||||
@ -1241,6 +1236,51 @@ src/lib.rs
|
|||||||
.run();
|
.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cargo_test]
|
||||||
|
fn issue_13695_allowing_dirty_vcs_info_but_clean() {
|
||||||
|
let p = project().build();
|
||||||
|
let _ = git::repo(&paths::root().join("foo"))
|
||||||
|
.file(
|
||||||
|
"Cargo.toml",
|
||||||
|
r#"
|
||||||
|
[package]
|
||||||
|
name = "foo"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2015"
|
||||||
|
description = "foo"
|
||||||
|
license = "foo"
|
||||||
|
documentation = "foo"
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
.file("src/lib.rs", "")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
// Allowing a dirty worktree despite it being clean.
|
||||||
|
p.cargo("package --allow-dirty").run();
|
||||||
|
|
||||||
|
let f = File::open(&p.root().join("target/package/foo-0.1.0.crate")).unwrap();
|
||||||
|
validate_crate_contents(
|
||||||
|
f,
|
||||||
|
"foo-0.1.0.crate",
|
||||||
|
&[
|
||||||
|
".cargo_vcs_info.json",
|
||||||
|
"Cargo.toml",
|
||||||
|
"Cargo.toml.orig",
|
||||||
|
"src/lib.rs",
|
||||||
|
],
|
||||||
|
&[(
|
||||||
|
".cargo_vcs_info.json",
|
||||||
|
r#"{
|
||||||
|
"git": {
|
||||||
|
"sha1": "[..]",
|
||||||
|
"dirty": false
|
||||||
|
},
|
||||||
|
"path_in_vcs": ""
|
||||||
|
}"#,
|
||||||
|
)],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[cargo_test]
|
#[cargo_test]
|
||||||
fn generated_manifest() {
|
fn generated_manifest() {
|
||||||
let registry = registry::alt_init();
|
let registry = registry::alt_init();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user