602 lines · 20.5 KB · Rust
RawDownload
// Copyright 2022 The Jujutsu Authors//// 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 regex::Regex;use testutils::TestResult; use crate::common::TestEnvironment; #[test]fn test_show() {    let test_env = TestEnvironment::default();    test_env.run_jj_in(".", ["git", "init", "repo"]).success();    let work_dir = test_env.work_dir("repo");     // Show @ by default    let output = work_dir.run_jj(["show"]);    let output = output.normalize_stdout_with(|s| s.split_inclusive('\n').skip(2).collect());     insta::assert_snapshot!(output, @"    Author   : Test User <test.user@example.com> (2001-02-03 08:05:07)    Committer: Test User <test.user@example.com> (2001-02-03 08:05:07)         (no description set)     [EOF]    ");     // Specify revision with -r    let output = work_dir.run_jj(["show", "-r@-"]);    insta::assert_snapshot!(output, @"    Commit ID: 0000000000000000000000000000000000000000    Change ID: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz    Author   : (no name set) <(no email set)> (1970-01-01 11:00:00)    Committer: (no name set) <(no email set)> (1970-01-01 11:00:00)         (no description set)     [EOF]    ");     // Specify both positional and -r args    let output = work_dir.run_jj(["show", "@", "-r@-"]);    insta::assert_snapshot!(output, @"    Commit ID: e8849ae12c709f2321908879bc724fdb2ab8a781    Change ID: qpvuntsmwlqtpsluzzsnyyzlmlwvmlnu    Author   : Test User <test.user@example.com> (2001-02-03 08:05:07)    Committer: Test User <test.user@example.com> (2001-02-03 08:05:07)         (no description set)     Commit ID: 0000000000000000000000000000000000000000    Change ID: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz    Author   : (no name set) <(no email set)> (1970-01-01 11:00:00)    Committer: (no name set) <(no email set)> (1970-01-01 11:00:00)         (no description set)     [EOF]    ");     // Specify empty revisions    let output = work_dir.run_jj(["show", "none()"]);    insta::assert_snapshot!(output, @"");} #[test]fn test_show_basic() {    let test_env = TestEnvironment::default();    test_env.run_jj_in(".", ["git", "init", "repo"]).success();    let work_dir = test_env.work_dir("repo");     work_dir.write_file("file1", "foo\n");    work_dir.write_file("file2", "foo\nbaz qux\n");    work_dir.run_jj(["new"]).success();    work_dir.remove_file("file1");    work_dir.write_file("file2", "foo\nbar\nbaz quux\n");    work_dir.write_file("file3", "foo\n");     let output = work_dir.run_jj(["show"]);    insta::assert_snapshot!(output, @"    Commit ID: 92e687faa4e5b681937f5a9c47feaa33e6b4892c    Change ID: rlvkpnrzqnoowoytxnquwvuryrwnrmlp    Author   : Test User <test.user@example.com> (2001-02-03 08:05:09)    Committer: Test User <test.user@example.com> (2001-02-03 08:05:09)         (no description set)     Modified regular file file2:       1    1: foo       2     : baz qux            2: bar            3: baz quux    Modified regular file file3 (file1 => file3):    [EOF]    ");     let output = work_dir.run_jj(["show", "--context=0"]);    insta::assert_snapshot!(output, @"    Commit ID: 92e687faa4e5b681937f5a9c47feaa33e6b4892c    Change ID: rlvkpnrzqnoowoytxnquwvuryrwnrmlp    Author   : Test User <test.user@example.com> (2001-02-03 08:05:09)    Committer: Test User <test.user@example.com> (2001-02-03 08:05:09)         (no description set)     Modified regular file file2:       1    1: foo       2     : baz qux            2: bar            3: baz quux    Modified regular file file3 (file1 => file3):    [EOF]    ");     let output = work_dir.run_jj(["show", "--color=debug"]);    insta::assert_snapshot!(output, @"    <<show commit::Commit ID: >><<show commit commit_id::92e687faa4e5b681937f5a9c47feaa33e6b4892c>><<show commit::>>    <<show commit::Change ID: >><<show commit change_id::rlvkpnrzqnoowoytxnquwvuryrwnrmlp>><<show commit::>>    <<show commit::Author   : >><<show commit author name::Test User>><<show commit:: <>><<show commit author email local::test.user>><<show commit author email::@>><<show commit author email domain::example.com>><<show commit::> (>><<show commit author timestamp local format::2001-02-03 08:05:09>><<show commit::)>>    <<show commit::Committer: >><<show commit committer name::Test User>><<show commit:: <>><<show commit committer email local::test.user>><<show commit committer email::@>><<show commit committer email domain::example.com>><<show commit::> (>><<show commit committer timestamp local format::2001-02-03 08:05:09>><<show commit::)>>    <<show commit::>>    <<show commit description placeholder::    (no description set)>><<show commit::>>    <<show commit::>>    <<diff color_words header::Modified regular file file2:>>    <<diff color_words context removed line_number::   1>><<diff color_words context:: >><<diff color_words context added line_number::   1>><<diff color_words context::: foo>>    <<diff color_words::     >><<diff color_words added line_number::   2>><<diff color_words::: >><<diff color_words added token::bar>>    <<diff color_words removed line_number::   2>><<diff color_words:: >><<diff color_words added line_number::   3>><<diff color_words::: baz >><<diff color_words removed token::qux>><<diff color_words added token::quux>><<diff color_words::>>    <<diff color_words header::Modified regular file file3 (file1 => file3):>>    [EOF]    ");     let output = work_dir.run_jj(["show", "-s"]);    insta::assert_snapshot!(output, @"    Commit ID: 92e687faa4e5b681937f5a9c47feaa33e6b4892c    Change ID: rlvkpnrzqnoowoytxnquwvuryrwnrmlp    Author   : Test User <test.user@example.com> (2001-02-03 08:05:09)    Committer: Test User <test.user@example.com> (2001-02-03 08:05:09)         (no description set)     M file2    R {file1 => file3}    [EOF]    ");     let output = work_dir.run_jj(["show", "--types"]);    insta::assert_snapshot!(output, @"    Commit ID: 92e687faa4e5b681937f5a9c47feaa33e6b4892c    Change ID: rlvkpnrzqnoowoytxnquwvuryrwnrmlp    Author   : Test User <test.user@example.com> (2001-02-03 08:05:09)    Committer: Test User <test.user@example.com> (2001-02-03 08:05:09)         (no description set)     FF file2    FF {file1 => file3}    [EOF]    ");     let output = work_dir.run_jj(["show", "--git"]);    insta::assert_snapshot!(output, @"    Commit ID: 92e687faa4e5b681937f5a9c47feaa33e6b4892c    Change ID: rlvkpnrzqnoowoytxnquwvuryrwnrmlp    Author   : Test User <test.user@example.com> (2001-02-03 08:05:09)    Committer: Test User <test.user@example.com> (2001-02-03 08:05:09)         (no description set)     diff --git a/file2 b/file2    index 523a4a9de8..485b56a572 100644    --- a/file2    +++ b/file2    @@ -1,2 +1,3 @@     foo    -baz qux    +bar    +baz quux    diff --git a/file1 b/file3    rename from file1    rename to file3    [EOF]    ");     let output = work_dir.run_jj(["show", "--git", "--context=0"]);    insta::assert_snapshot!(output, @"    Commit ID: 92e687faa4e5b681937f5a9c47feaa33e6b4892c    Change ID: rlvkpnrzqnoowoytxnquwvuryrwnrmlp    Author   : Test User <test.user@example.com> (2001-02-03 08:05:09)    Committer: Test User <test.user@example.com> (2001-02-03 08:05:09)         (no description set)     diff --git a/file2 b/file2    index 523a4a9de8..485b56a572 100644    --- a/file2    +++ b/file2    @@ -2,1 +2,2 @@    -baz qux    +bar    +baz quux    diff --git a/file1 b/file3    rename from file1    rename to file3    [EOF]    ");     let output = work_dir.run_jj(["show", "--git", "--color=debug"]);    insta::assert_snapshot!(output, @"    <<show commit::Commit ID: >><<show commit commit_id::92e687faa4e5b681937f5a9c47feaa33e6b4892c>><<show commit::>>    <<show commit::Change ID: >><<show commit change_id::rlvkpnrzqnoowoytxnquwvuryrwnrmlp>><<show commit::>>    <<show commit::Author   : >><<show commit author name::Test User>><<show commit:: <>><<show commit author email local::test.user>><<show commit author email::@>><<show commit author email domain::example.com>><<show commit::> (>><<show commit author timestamp local format::2001-02-03 08:05:09>><<show commit::)>>    <<show commit::Committer: >><<show commit committer name::Test User>><<show commit:: <>><<show commit committer email local::test.user>><<show commit committer email::@>><<show commit committer email domain::example.com>><<show commit::> (>><<show commit committer timestamp local format::2001-02-03 08:05:09>><<show commit::)>>    <<show commit::>>    <<show commit description placeholder::    (no description set)>><<show commit::>>    <<show commit::>>    <<diff git file_header::diff --git a/file2 b/file2>>    <<diff git file_header::index 523a4a9de8..485b56a572 100644>>    <<diff git file_header::--- a/file2>>    <<diff git file_header::+++ b/file2>>    <<diff git hunk_header::@@ -1,2 +1,3 @@>>    <<diff git context:: foo>>    <<diff git removed::-baz >><<diff git removed token::qux>><<diff git removed::>>    <<diff git added::+>><<diff git added token::bar>>    <<diff git added::+baz >><<diff git added token::quux>><<diff git added::>>    <<diff git file_header::diff --git a/file1 b/file3>>    <<diff git file_header::rename from file1>>    <<diff git file_header::rename to file3>>    [EOF]    ");     let output = work_dir.run_jj(["show", "-s", "--git"]);    insta::assert_snapshot!(output, @"    Commit ID: 92e687faa4e5b681937f5a9c47feaa33e6b4892c    Change ID: rlvkpnrzqnoowoytxnquwvuryrwnrmlp    Author   : Test User <test.user@example.com> (2001-02-03 08:05:09)    Committer: Test User <test.user@example.com> (2001-02-03 08:05:09)         (no description set)     M file2    R {file1 => file3}    diff --git a/file2 b/file2    index 523a4a9de8..485b56a572 100644    --- a/file2    +++ b/file2    @@ -1,2 +1,3 @@     foo    -baz qux    +bar    +baz quux    diff --git a/file1 b/file3    rename from file1    rename to file3    [EOF]    ");     let output = work_dir.run_jj(["show", "--stat"]);    insta::assert_snapshot!(output, @"    Commit ID: 92e687faa4e5b681937f5a9c47feaa33e6b4892c    Change ID: rlvkpnrzqnoowoytxnquwvuryrwnrmlp    Author   : Test User <test.user@example.com> (2001-02-03 08:05:09)    Committer: Test User <test.user@example.com> (2001-02-03 08:05:09)         (no description set)     file2            | 3 ++-    {file1 => file3} | 0    2 files changed, 2 insertions(+), 1 deletion(-)    [EOF]    ");} #[test]fn test_show_with_template() {    let test_env = TestEnvironment::default();    test_env.run_jj_in(".", ["git", "init", "repo"]).success();    let work_dir = test_env.work_dir("repo");    work_dir.run_jj(["new", "-m", "a new commit"]).success();     let output = work_dir.run_jj(["show", "-T", "description"]);     insta::assert_snapshot!(output, @"    a new commit    [EOF]    ");} #[test]fn test_show_with_template_no_patch() {    let test_env = TestEnvironment::default();    test_env.run_jj_in(".", ["git", "init", "repo"]).success();    let work_dir = test_env.work_dir("repo");    work_dir.run_jj(["new", "-m", "a new commit"]).success();    work_dir.write_file("file1", "foo\n");     let output = work_dir.run_jj(["show", "--no-patch", "-T", "description"]);     insta::assert_snapshot!(output, @"    a new commit    [EOF]    ");} #[test]fn test_show_with_no_patch() {    let test_env = TestEnvironment::default();    test_env.run_jj_in(".", ["git", "init", "repo"]).success();    let work_dir = test_env.work_dir("repo");    work_dir.run_jj(["new", "-m", "a new commit"]).success();    work_dir.write_file("file1", "foo\n");     let output = work_dir.run_jj(["show", "--no-patch"]);     insta::assert_snapshot!(output, @"    Commit ID: 86d5fa72f4ecc6d51478941ee9160db9c52b842e    Change ID: rlvkpnrzqnoowoytxnquwvuryrwnrmlp    Author   : Test User <test.user@example.com> (2001-02-03 08:05:08)    Committer: Test User <test.user@example.com> (2001-02-03 08:05:09)         a new commit     [EOF]    ");} #[test]fn test_show_with_no_template() {    let test_env = TestEnvironment::default();    test_env.run_jj_in(".", ["git", "init", "repo"]).success();    let work_dir = test_env.work_dir("repo");     let output = work_dir.run_jj(["show", "-T"]);    insta::assert_snapshot!(output, @"    ------- stderr -------    error: a value is required for '--template <TEMPLATE>' but none was supplied     For more information, try '--help'.    Hint: The following template aliases are defined:    - builtin_config_list    - builtin_config_list_detailed    - builtin_draft_commit_description    - builtin_draft_commit_description_with_diff    - builtin_evolog_compact    - builtin_log_comfortable    - builtin_log_compact    - builtin_log_compact_full_description    - builtin_log_detailed    - builtin_log_node    - builtin_log_node_ascii    - builtin_log_oneline    - builtin_log_redacted    - builtin_op_log_comfortable    - builtin_op_log_compact    - builtin_op_log_node    - builtin_op_log_node_ascii    - builtin_op_log_oneline    - builtin_op_log_redacted    - commit_summary_separator    - default_commit_description    - description_placeholder    - email_placeholder    - empty_commit_marker    - git_format_patch_email_headers    - name_placeholder    [EOF]    [exit status: 2]    ");} #[test]fn test_show_relative_timestamps() -> TestResult {    let test_env = TestEnvironment::default();    test_env.run_jj_in(".", ["git", "init", "repo"]).success();    let work_dir = test_env.work_dir("repo");     test_env.add_config(        r#"        [template-aliases]        'format_timestamp(timestamp)' = 'timestamp.ago()'        "#,    );     let output = work_dir.run_jj(["show"]);    let timestamp_re = Regex::new(r"\([0-9]+ years ago\)")?;    let output = output.normalize_stdout_with(|s| {        s.split_inclusive('\n')            .skip(2)            .map(|x| timestamp_re.replace_all(x, "(...timestamp...)"))            .collect()    });     insta::assert_snapshot!(output, @"    Author   : Test User <test.user@example.com> (...timestamp...)    Committer: Test User <test.user@example.com> (...timestamp...)         (no description set)     [EOF]    ");    Ok(())} #[test]fn test_show_multiple_revisions() {    let test_env = TestEnvironment::default();    test_env.run_jj_in(".", ["git", "init", "repo"]).success();    let work_dir = test_env.work_dir("repo");     work_dir.write_file("file1", "a");    work_dir.run_jj(["commit", "-m", "add file1"]).success();     work_dir.write_file("file2", "b");    work_dir.run_jj(["commit", "-m", "add file2"]).success();     work_dir.write_file("file1", "c");    work_dir        .run_jj(["describe", "-m", "modify file1"])        .success();     let output = work_dir.run_jj(["show", "root()..@"]);    let output = output.normalize_stdout_with(|s| {        s.split_inclusive('\n')            .filter(|line| !line.starts_with("Change ID") && !line.starts_with("Commit ID"))            .collect()    });     insta::assert_snapshot!(output, @"    Author   : Test User <test.user@example.com> (2001-02-03 08:05:10)    Committer: Test User <test.user@example.com> (2001-02-03 08:05:10)         modify file1     Modified regular file file1:       1     : a            1: c    Author   : Test User <test.user@example.com> (2001-02-03 08:05:09)    Committer: Test User <test.user@example.com> (2001-02-03 08:05:09)         add file2     Added regular file file2:            1: b    Author   : Test User <test.user@example.com> (2001-02-03 08:05:08)    Committer: Test User <test.user@example.com> (2001-02-03 08:05:08)         add file1     Added regular file file1:            1: a    [EOF]    ");     // Specify revision with -r    let output = work_dir.run_jj(["show", "-r", "root()..@"]);    let output = output.normalize_stdout_with(|s| {        s.split_inclusive('\n')            .filter(|line| !line.starts_with("Change ID") && !line.starts_with("Commit ID"))            .collect()    });     insta::assert_snapshot!(output, @"    Author   : Test User <test.user@example.com> (2001-02-03 08:05:10)    Committer: Test User <test.user@example.com> (2001-02-03 08:05:10)         modify file1     Modified regular file file1:       1     : a            1: c    Author   : Test User <test.user@example.com> (2001-02-03 08:05:09)    Committer: Test User <test.user@example.com> (2001-02-03 08:05:09)         add file2     Added regular file file2:            1: b    Author   : Test User <test.user@example.com> (2001-02-03 08:05:08)    Committer: Test User <test.user@example.com> (2001-02-03 08:05:08)         add file1     Added regular file file1:            1: a    [EOF]    ");     // Older revisions first    let output = work_dir.run_jj(["show", "--reversed", "--no-patch", ".."]);    insta::assert_snapshot!(output, @"

Lines 1–500 of 602.