Skip to content

Commit

Permalink
Auto merge of #7570 - twe4ked:already-existing-git-ignore-comment, r=…
Browse files Browse the repository at this point in the history
…alexcrichton

Only include "already existing ..." comment in gitignore on conflict

I found the comment a bit confusing when I've used `cargo init` when I haven't had any conflicts. I thought it was meaning that my existing entries would be all commented out so I thought there was a bug of some kind.

This PR changes the comment to only be included when there are conflicting entries in the existing file.
  • Loading branch information
bors committed Nov 11, 2019
2 parents cb50a19 + c42f2ee commit dd34668
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 6 deletions.
12 changes: 8 additions & 4 deletions src/cargo/ops/cargo_new.rs
Original file line number Diff line number Diff line change
Expand Up @@ -487,10 +487,14 @@ impl IgnoreList {
_ => &self.ignore,
};

let mut out = "\n\n#Added by cargo\n\
#\n\
#already existing elements are commented out\n\n"
.to_string();
let mut out = "\n\n#Added by cargo\n".to_string();
if ignore_items
.iter()
.any(|item| existing_items.contains(item))
{
out.push_str("#\n#already existing elements were commented out\n");
}
out.push('\n');

for item in ignore_items {
if existing_items.contains(item) {
Expand Down
31 changes: 29 additions & 2 deletions tests/testsuite/init.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ fn simple_bin() {

#[cargo_test]
fn simple_git_ignore_exists() {
// write a .gitignore file with one entry
// write a .gitignore file with two entries
fs::create_dir_all(paths::root().join("foo")).unwrap();
fs::write(
paths::root().join("foo/.gitignore"),
Expand Down Expand Up @@ -89,7 +89,7 @@ fn simple_git_ignore_exists() {
**/some.file\n\n\
#Added by cargo\n\
#\n\
#already existing elements are commented out\n\
#already existing elements were commented out\n\
\n\
#/target\n\
**/*.rs.bk\n\
Expand All @@ -99,6 +99,33 @@ fn simple_git_ignore_exists() {
cargo_process("build").cwd(&paths::root().join("foo")).run();
}

#[cargo_test]
fn git_ignore_exists_no_conflicting_entries() {
// write a .gitignore file with one entry
fs::create_dir_all(paths::root().join("foo")).unwrap();
fs::write(paths::root().join("foo/.gitignore"), "**/some.file").unwrap();

cargo_process("init --lib foo --edition 2015")
.env("USER", "foo")
.run();

let fp = paths::root().join("foo/.gitignore");
let mut contents = String::new();
File::open(&fp)
.unwrap()
.read_to_string(&mut contents)
.unwrap();
assert_eq!(
contents,
"**/some.file\n\n\
#Added by cargo\n\
\n\
/target\n\
**/*.rs.bk\n\
Cargo.lock\n",
);
}

#[cargo_test]
fn both_lib_and_bin() {
cargo_process("init --lib --bin")
Expand Down

0 comments on commit dd34668

Please sign in to comment.