#!/bin/sh test_description='ls-tree output' TEST_PASSES_SANITIZE_LEAK=true . ./test-lib.sh . "$TEST_DIRECTORY"/lib-t3100.sh test_expect_success 'ls-tree --format usage' ' test_expect_code 129 git ls-tree --format=fmt -l HEAD && test_expect_code 129 git ls-tree --format=fmt --name-only HEAD && test_expect_code 129 git ls-tree --format=fmt --name-status HEAD ' test_expect_success 'setup' ' setup_basic_ls_tree_data ' test_ls_tree_format_mode_output () { local opts="$1" && shift && cat >expect && while test $# -gt 0 do local mode="$1" && shift && test_expect_success "'ls-tree $opts${mode:+ $mode}' output" ' git ls-tree ${mode:+$mode }$opts HEAD >actual && test_cmp expect actual ' case "$opts" in --full-tree) test_expect_success "'ls-tree $opts${mode:+ $mode}' output (via subdir, fails)" ' test_must_fail git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ ' ;; *) test_expect_success "'ls-tree $opts${mode:+ $mode}' output (via subdir)" ' git -C dir ls-tree --full-name ${mode:+$mode }$opts HEAD -- ../ >actual && test_cmp expect actual ' ;; esac done } # test exact output of option (none, --long, ...) and mode (none and # -d, -r -t) and combinations test_expect_success 'setup: HEAD_* variables' ' HEAD_gitmodules=$(git rev-parse HEAD:.gitmodules) && HEAD_dir=$(git rev-parse HEAD:dir) && HEAD_top_file=$(git rev-parse HEAD:top-file.t) && HEAD_submodule=$(git rev-parse HEAD:submodule) && HEAD_dir_sub_file=$(git rev-parse HEAD:dir/sub-file.t) ' ## opt = test_ls_tree_format_mode_output "" "" "-t" <<-EOF 100644 blob $HEAD_gitmodules .gitmodules 040000 tree $HEAD_dir dir 160000 commit $HEAD_submodule submodule 100644 blob $HEAD_top_file top-file.t EOF test_ls_tree_format_mode_output "" "-d" <<-EOF 040000 tree $HEAD_dir dir 160000 commit $HEAD_submodule submodule EOF test_ls_tree_format_mode_output "" "-r" <<-EOF 100644 blob $HEAD_gitmodules .gitmodules 100644 blob $HEAD_dir_sub_file dir/sub-file.t 160000 commit $HEAD_submodule submodule 100644 blob $HEAD_top_file top-file.t EOF ## opt = --long test_ls_tree_format_mode_output "--long" "" "-t" <<-EOF 100644 blob $HEAD_gitmodules 61 .gitmodules 040000 tree $HEAD_dir - dir 160000 commit $HEAD_submodule - submodule 100644 blob $HEAD_top_file 9 top-file.t EOF test_ls_tree_format_mode_output "--long" "-d" <<-EOF 040000 tree $HEAD_dir - dir 160000 commit $HEAD_submodule - submodule EOF test_ls_tree_format_mode_output "--long" "-r" <<-EOF 100644 blob $HEAD_gitmodules 61 .gitmodules 100644 blob $HEAD_dir_sub_file 13 dir/sub-file.t 160000 commit $HEAD_submodule - submodule 100644 blob $HEAD_top_file 9 top-file.t EOF ## opt = --name-only test_ls_tree_format_mode_output "--name-only" "" "-t" <<-EOF .gitmodules dir submodule top-file.t EOF test_ls_tree_format_mode_output "--name-only" "-d" <<-EOF dir submodule EOF test_ls_tree_format_mode_output "--name-only" "-r" <<-EOF .gitmodules dir/sub-file.t submodule top-file.t EOF ## opt = --object-only test_ls_tree_format_mode_output "--object-only" "" "-t" <<-EOF $HEAD_gitmodules $HEAD_dir $HEAD_submodule $HEAD_top_file EOF test_ls_tree_format_mode_output "--object-only" "-d" <<-EOF $HEAD_dir $HEAD_submodule EOF test_ls_tree_format_mode_output "--object-only" "-r" <<-EOF $HEAD_gitmodules $HEAD_dir_sub_file $HEAD_submodule $HEAD_top_file EOF ## opt = --object-only --abbrev test_expect_success 'setup: HEAD_short_* variables' ' HEAD_short_gitmodules=$(git rev-parse --short HEAD:.gitmodules) && HEAD_short_dir=$(git rev-parse --short HEAD:dir) && HEAD_short_top_file=$(git rev-parse --short HEAD:top-file.t) && HEAD_short_submodule=$(git rev-parse --short HEAD:submodule) && HEAD_short_dir_sub_file=$(git rev-parse --short HEAD:dir/sub-file.t) ' test_ls_tree_format_mode_output "--object-only --abbrev" "" "-t" <<-EOF $HEAD_short_gitmodules $HEAD_short_dir $HEAD_short_submodule $HEAD_short_top_file EOF test_ls_tree_format_mode_output "--object-only --abbrev" "-d" <<-EOF $HEAD_short_dir $HEAD_short_submodule EOF test_ls_tree_format_mode_output "--object-only --abbrev" "-r" <<-EOF $HEAD_short_gitmodules $HEAD_short_dir_sub_file $HEAD_short_submodule $HEAD_short_top_file EOF ## opt = --full-name test_ls_tree_format_mode_output "--full-name" "" <<-EOF 100644 blob $HEAD_gitmodules .gitmodules 040000 tree $HEAD_dir dir 160000 commit $HEAD_submodule submodule 100644 blob $HEAD_top_file top-file.t EOF test_ls_tree_format_mode_output "--full-name" "-d" <<-EOF 040000 tree $HEAD_dir dir 160000 commit $HEAD_submodule submodule EOF test_ls_tree_format_mode_output "--full-name" "-r" <<-EOF 100644 blob $HEAD_gitmodules .gitmodules 100644 blob $HEAD_dir_sub_file dir/sub-file.t 160000 commit $HEAD_submodule submodule 100644 blob $HEAD_top_file top-file.t EOF test_ls_tree_format_mode_output "--full-name" "-t" <<-EOF 100644 blob $HEAD_gitmodules .gitmodules 040000 tree $HEAD_dir dir 160000 commit $HEAD_submodule submodule 100644 blob $HEAD_top_file top-file.t EOF ## opt = --full-tree test_ls_tree_format_mode_output "--full-tree" "" "-t" <<-EOF 100644 blob $HEAD_gitmodules .gitmodules 040000 tree $HEAD_dir dir 160000 commit $HEAD_submodule submodule 100644 blob $HEAD_top_file top-file.t EOF test_ls_tree_format_mode_output "--full-tree" "-d" <<-EOF 040000 tree $HEAD_dir dir 160000 commit $HEAD_submodule submodule EOF test_ls_tree_format_mode_output "--full-tree" "-r" <<-EOF 100644 blob $HEAD_gitmodules .gitmodules 100644 blob $HEAD_dir_sub_file dir/sub-file.t 160000 commit $HEAD_submodule submodule 100644 blob $HEAD_top_file top-file.t EOF test_done