use indoc::indoc;
use crate::common::TestEnvironment;
#[test]
fn test_file_list() {
let test_env = TestEnvironment::default();
test_env.run_jj_in(".", ["git", "init", "repo"]).success();
let work_dir = test_env.work_dir("repo");
work_dir.create_dir("dir");
work_dir.write_file("dir/file", "content1");
work_dir.write_file("exec-file", "content1");
work_dir.write_file("conflict-exec-file", "content1");
work_dir.write_file("conflict-file", "content1");
work_dir
.run_jj(["file", "chmod", "x", "exec-file", "conflict-exec-file"])
.success();
work_dir.run_jj(["new", "root()"]).success();
work_dir.write_file("conflict-exec-file", "content2");
work_dir.write_file("conflict-file", "content2");
work_dir
.run_jj(["file", "chmod", "x", "conflict-exec-file"])
.success();
work_dir.run_jj(["new", "visible_heads()"]).success();
let output = work_dir.run_jj(["file", "list"]);
insta::assert_snapshot!(output.normalize_backslash(), @"
conflict-exec-file
conflict-file
dir/file
exec-file
[EOF]
");
let template = indoc! {r#"
separate(" ",
path,
"[" ++ file_type ++ "]",
"conflict=" ++ conflict,
"executable=" ++ executable,
) ++ "\n"
"#};
let output = work_dir.run_jj(["file", "list", "-T", template]);
insta::assert_snapshot!(output.normalize_backslash(), @"
conflict-exec-file [conflict] conflict=true executable=true
conflict-file [conflict] conflict=true executable=false
dir/file [file] conflict=false executable=false
exec-file [file] conflict=false executable=true
[EOF]
");
let output = work_dir.run_jj(["file", "list", "-r=first_parent(@)"]);
insta::assert_snapshot!(output.normalize_backslash(), @"
conflict-exec-file
conflict-file
[EOF]
");
let output = work_dir.run_jj(["file", "list", "dir"]);
insta::assert_snapshot!(output.normalize_backslash(), @"
dir/file
[EOF]
");
let output = work_dir.run_jj(["file", "list", "dir", "file3"]);
insta::assert_snapshot!(output.normalize_backslash(), @"
dir/file
[EOF]
------- stderr -------
Warning: No matching entries for paths: file3
[EOF]
");
}