mirror of
https://github.com/martinvonz/jj.git
synced 2024-12-28 23:55:54 +00:00
c2ce1eedca
Since whitespace change is barely visible in color-words diff, I think it would be too verbose to add "\ No newline at end of file" marker. Let's just append missing newline to make the command output readable.
315 lines
9.3 KiB
Rust
315 lines
9.3 KiB
Rust
// Copyright 2022 Google LLC
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// https://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
use common::TestEnvironment;
|
|
|
|
pub mod common;
|
|
|
|
#[test]
|
|
fn test_diff_basic() {
|
|
let test_env = TestEnvironment::default();
|
|
test_env.jj_cmd_success(test_env.env_root(), &["init", "repo", "--git"]);
|
|
let repo_path = test_env.env_root().join("repo");
|
|
|
|
std::fs::write(repo_path.join("file1"), "foo\n").unwrap();
|
|
std::fs::write(repo_path.join("file2"), "foo\n").unwrap();
|
|
test_env.jj_cmd_success(&repo_path, &["new"]);
|
|
std::fs::remove_file(repo_path.join("file1")).unwrap();
|
|
std::fs::write(repo_path.join("file2"), "foo\nbar\n").unwrap();
|
|
std::fs::write(repo_path.join("file3"), "foo\n").unwrap();
|
|
|
|
let stdout = test_env.jj_cmd_success(&repo_path, &["diff"]);
|
|
insta::assert_snapshot!(stdout, @r###"
|
|
Removed regular file file1:
|
|
1 : foo
|
|
Modified regular file file2:
|
|
1 1: foo
|
|
2: bar
|
|
Added regular file file3:
|
|
1: foo
|
|
"###);
|
|
|
|
let stdout = test_env.jj_cmd_success(&repo_path, &["diff", "-s"]);
|
|
insta::assert_snapshot!(stdout, @r###"
|
|
R file1
|
|
M file2
|
|
A file3
|
|
"###);
|
|
|
|
let stdout = test_env.jj_cmd_success(&repo_path, &["diff", "--git"]);
|
|
insta::assert_snapshot!(stdout, @r###"
|
|
diff --git a/file1 b/file1
|
|
deleted file mode 100644
|
|
index 257cc5642c..0000000000
|
|
--- a/file1
|
|
+++ /dev/null
|
|
@@ -1,1 +1,0 @@
|
|
-foo
|
|
diff --git a/file2 b/file2
|
|
index 257cc5642c...3bd1f0e297 100644
|
|
--- a/file2
|
|
+++ b/file2
|
|
@@ -1,1 +1,2 @@
|
|
foo
|
|
+bar
|
|
diff --git a/file3 b/file3
|
|
new file mode 100644
|
|
index 0000000000..257cc5642c
|
|
--- /dev/null
|
|
+++ b/file3
|
|
@@ -1,0 +1,1 @@
|
|
+foo
|
|
"###);
|
|
}
|
|
|
|
#[test]
|
|
fn test_diff_relative_paths() {
|
|
let test_env = TestEnvironment::default();
|
|
test_env.jj_cmd_success(test_env.env_root(), &["init", "repo", "--git"]);
|
|
let repo_path = test_env.env_root().join("repo");
|
|
|
|
std::fs::create_dir_all(repo_path.join("dir1").join("subdir1")).unwrap();
|
|
std::fs::create_dir(repo_path.join("dir2")).unwrap();
|
|
std::fs::write(repo_path.join("file1"), "foo1\n").unwrap();
|
|
std::fs::write(repo_path.join("dir1").join("file2"), "foo2\n").unwrap();
|
|
std::fs::write(
|
|
repo_path.join("dir1").join("subdir1").join("file3"),
|
|
"foo3\n",
|
|
)
|
|
.unwrap();
|
|
std::fs::write(repo_path.join("dir2").join("file4"), "foo4\n").unwrap();
|
|
test_env.jj_cmd_success(&repo_path, &["new"]);
|
|
std::fs::write(repo_path.join("file1"), "bar1\n").unwrap();
|
|
std::fs::write(repo_path.join("dir1").join("file2"), "bar2\n").unwrap();
|
|
std::fs::write(
|
|
repo_path.join("dir1").join("subdir1").join("file3"),
|
|
"bar3\n",
|
|
)
|
|
.unwrap();
|
|
std::fs::write(repo_path.join("dir2").join("file4"), "bar4\n").unwrap();
|
|
|
|
let stdout = test_env.jj_cmd_success(&repo_path.join("dir1"), &["diff"]);
|
|
#[cfg(unix)]
|
|
insta::assert_snapshot!(stdout, @r###"
|
|
Modified regular file file2:
|
|
1 1: foo2bar2
|
|
Modified regular file subdir1/file3:
|
|
1 1: foo3bar3
|
|
Modified regular file ../dir2/file4:
|
|
1 1: foo4bar4
|
|
Modified regular file ../file1:
|
|
1 1: foo1bar1
|
|
"###);
|
|
#[cfg(windows)]
|
|
insta::assert_snapshot!(stdout, @r###"
|
|
Modified regular file file2:
|
|
1 1: foo2bar2
|
|
Modified regular file subdir1\file3:
|
|
1 1: foo3bar3
|
|
Modified regular file ..\dir2\file4:
|
|
1 1: foo4bar4
|
|
Modified regular file ..\file1:
|
|
1 1: foo1bar1
|
|
"###);
|
|
|
|
let stdout = test_env.jj_cmd_success(&repo_path.join("dir1"), &["diff", "-s"]);
|
|
#[cfg(unix)]
|
|
insta::assert_snapshot!(stdout, @r###"
|
|
M file2
|
|
M subdir1/file3
|
|
M ../dir2/file4
|
|
M ../file1
|
|
"###);
|
|
#[cfg(windows)]
|
|
insta::assert_snapshot!(stdout, @r###"
|
|
M file2
|
|
M subdir1\file3
|
|
M ..\dir2\file4
|
|
M ..\file1
|
|
"###);
|
|
|
|
let stdout = test_env.jj_cmd_success(&repo_path.join("dir1"), &["diff", "--git"]);
|
|
insta::assert_snapshot!(stdout, @r###"
|
|
diff --git a/dir1/file2 b/dir1/file2
|
|
index 54b060eee9...1fe912cdd8 100644
|
|
--- a/dir1/file2
|
|
+++ b/dir1/file2
|
|
@@ -1,1 +1,1 @@
|
|
-foo2
|
|
+bar2
|
|
diff --git a/dir1/subdir1/file3 b/dir1/subdir1/file3
|
|
index c1ec6c6f12...f3c8b75ec6 100644
|
|
--- a/dir1/subdir1/file3
|
|
+++ b/dir1/subdir1/file3
|
|
@@ -1,1 +1,1 @@
|
|
-foo3
|
|
+bar3
|
|
diff --git a/dir2/file4 b/dir2/file4
|
|
index a0016dbc4c...17375f7a12 100644
|
|
--- a/dir2/file4
|
|
+++ b/dir2/file4
|
|
@@ -1,1 +1,1 @@
|
|
-foo4
|
|
+bar4
|
|
diff --git a/file1 b/file1
|
|
index 1715acd6a5...05c4fe6772 100644
|
|
--- a/file1
|
|
+++ b/file1
|
|
@@ -1,1 +1,1 @@
|
|
-foo1
|
|
+bar1
|
|
"###);
|
|
}
|
|
|
|
#[test]
|
|
fn test_diff_missing_newline() {
|
|
let test_env = TestEnvironment::default();
|
|
test_env.jj_cmd_success(test_env.env_root(), &["init", "repo", "--git"]);
|
|
let repo_path = test_env.env_root().join("repo");
|
|
|
|
std::fs::write(repo_path.join("file1"), "foo").unwrap();
|
|
std::fs::write(repo_path.join("file2"), "foo\nbar").unwrap();
|
|
test_env.jj_cmd_success(&repo_path, &["new"]);
|
|
std::fs::write(repo_path.join("file1"), "foo\nbar").unwrap();
|
|
std::fs::write(repo_path.join("file2"), "foo").unwrap();
|
|
|
|
let stdout = test_env.jj_cmd_success(&repo_path, &["diff"]);
|
|
insta::assert_snapshot!(stdout, @r###"
|
|
Modified regular file file1:
|
|
1 1: foo
|
|
2: bar
|
|
Modified regular file file2:
|
|
1 1: foo
|
|
2 : bar
|
|
"###);
|
|
|
|
let stdout = test_env.jj_cmd_success(&repo_path, &["diff", "--git"]);
|
|
insta::assert_snapshot!(stdout, @r###"
|
|
diff --git a/file1 b/file1
|
|
index 1910281566...a907ec3f43 100644
|
|
--- a/file1
|
|
+++ b/file1
|
|
@@ -1,1 +1,2 @@
|
|
-foo
|
|
\ No newline at end of file
|
|
+foo
|
|
+bar
|
|
\ No newline at end of file
|
|
diff --git a/file2 b/file2
|
|
index a907ec3f43...1910281566 100644
|
|
--- a/file2
|
|
+++ b/file2
|
|
@@ -1,2 +1,1 @@
|
|
-foo
|
|
-bar
|
|
\ No newline at end of file
|
|
+foo
|
|
\ No newline at end of file
|
|
"###);
|
|
}
|
|
|
|
#[test]
|
|
fn test_color_words_diff_missing_newline() {
|
|
let test_env = TestEnvironment::default();
|
|
test_env.jj_cmd_success(test_env.env_root(), &["init", "repo", "--git"]);
|
|
let repo_path = test_env.env_root().join("repo");
|
|
|
|
std::fs::write(repo_path.join("file1"), "").unwrap();
|
|
test_env.jj_cmd_success(&repo_path, &["commit", "-m", "=== Empty"]);
|
|
std::fs::write(repo_path.join("file1"), "a\nb\nc\nd\ne\nf\ng\nh\ni").unwrap();
|
|
test_env.jj_cmd_success(&repo_path, &["commit", "-m", "=== Add no newline"]);
|
|
std::fs::write(repo_path.join("file1"), "A\nb\nc\nd\ne\nf\ng\nh\ni").unwrap();
|
|
test_env.jj_cmd_success(&repo_path, &["commit", "-m", "=== Modify first line"]);
|
|
std::fs::write(repo_path.join("file1"), "A\nb\nc\nd\nE\nf\ng\nh\ni").unwrap();
|
|
test_env.jj_cmd_success(&repo_path, &["commit", "-m", "=== Modify middle line"]);
|
|
std::fs::write(repo_path.join("file1"), "A\nb\nc\nd\nE\nf\ng\nh\nI").unwrap();
|
|
test_env.jj_cmd_success(&repo_path, &["commit", "-m", "=== Modify last line"]);
|
|
std::fs::write(repo_path.join("file1"), "A\nb\nc\nd\nE\nf\ng\nh\nI\n").unwrap();
|
|
test_env.jj_cmd_success(&repo_path, &["commit", "-m", "=== Append newline"]);
|
|
std::fs::write(repo_path.join("file1"), "A\nb\nc\nd\nE\nf\ng\nh\nI").unwrap();
|
|
test_env.jj_cmd_success(&repo_path, &["commit", "-m", "=== Remove newline"]);
|
|
std::fs::write(repo_path.join("file1"), "").unwrap();
|
|
test_env.jj_cmd_success(&repo_path, &["commit", "-m", "=== Empty"]);
|
|
|
|
let stdout = test_env.jj_cmd_success(
|
|
&repo_path,
|
|
&["log", "-Tdescription", "-pr:@-", "--no-graph", "--reversed"],
|
|
);
|
|
insta::assert_snapshot!(stdout, @r###"
|
|
(no description set)
|
|
=== Empty
|
|
Added regular file file1:
|
|
=== Add no newline
|
|
Modified regular file file1:
|
|
1: a
|
|
2: b
|
|
3: c
|
|
4: d
|
|
5: e
|
|
6: f
|
|
7: g
|
|
8: h
|
|
9: i
|
|
=== Modify first line
|
|
Modified regular file file1:
|
|
1 1: aA
|
|
2 2: b
|
|
3 3: c
|
|
4 4: d
|
|
...
|
|
=== Modify middle line
|
|
Modified regular file file1:
|
|
...
|
|
2 2: b
|
|
3 3: c
|
|
4 4: d
|
|
5 5: eE
|
|
6 6: f
|
|
7 7: g
|
|
8 8: h
|
|
...
|
|
=== Modify last line
|
|
Modified regular file file1:
|
|
...
|
|
6 6: f
|
|
7 7: g
|
|
8 8: h
|
|
9 9: iI
|
|
=== Append newline
|
|
Modified regular file file1:
|
|
...
|
|
6 6: f
|
|
7 7: g
|
|
8 8: h
|
|
9 9: I
|
|
=== Remove newline
|
|
Modified regular file file1:
|
|
...
|
|
6 6: f
|
|
7 7: g
|
|
8 8: h
|
|
9 9: I
|
|
=== Empty
|
|
Modified regular file file1:
|
|
1 : A
|
|
2 : b
|
|
3 : c
|
|
4 : d
|
|
5 : E
|
|
6 : f
|
|
7 : g
|
|
8 : h
|
|
9 : I
|
|
"###);
|
|
}
|