b5a53c3518167c12fa8280fae545efb05e784e0b
   1#!/bin/sh
   2
   3test_description='Test ls-files recurse-submodules feature
   4
   5This test verifies the recurse-submodules feature correctly lists files from
   6submodules.
   7'
   8
   9. ./test-lib.sh
  10
  11test_expect_success 'setup directory structure and submodules' '
  12        echo a >a &&
  13        mkdir b &&
  14        echo b >b/b &&
  15        git add a b &&
  16        git commit -m "add a and b" &&
  17        git init submodule &&
  18        echo c >submodule/c &&
  19        git -C submodule add c &&
  20        git -C submodule commit -m "add c" &&
  21        git submodule add ./submodule &&
  22        git commit -m "added submodule"
  23'
  24
  25test_expect_success 'ls-files correctly outputs files in submodule' '
  26        cat >expect <<-\EOF &&
  27        .gitmodules
  28        a
  29        b/b
  30        submodule/c
  31        EOF
  32
  33        git ls-files --recurse-submodules >actual &&
  34        test_cmp expect actual
  35'
  36
  37test_expect_success 'ls-files does not output files not added to a repo' '
  38        cat >expect <<-\EOF &&
  39        .gitmodules
  40        a
  41        b/b
  42        submodule/c
  43        EOF
  44
  45        echo a >not_added &&
  46        echo b >b/not_added &&
  47        echo c >submodule/not_added &&
  48        git ls-files --recurse-submodules >actual &&
  49        test_cmp expect actual
  50'
  51
  52test_expect_success 'ls-files recurses more than 1 level' '
  53        cat >expect <<-\EOF &&
  54        .gitmodules
  55        a
  56        b/b
  57        submodule/.gitmodules
  58        submodule/c
  59        submodule/subsub/d
  60        EOF
  61
  62        git init submodule/subsub &&
  63        echo d >submodule/subsub/d &&
  64        git -C submodule/subsub add d &&
  65        git -C submodule/subsub commit -m "add d" &&
  66        git -C submodule submodule add ./subsub &&
  67        git -C submodule commit -m "added subsub" &&
  68        git ls-files --recurse-submodules >actual &&
  69        test_cmp expect actual
  70'
  71
  72test_expect_success '--recurse-submodules does not support using path arguments' '
  73        test_must_fail git ls-files --recurse-submodules b 2>actual &&
  74        test_i18ngrep "does not support pathspec" actual
  75'
  76
  77test_expect_success '--recurse-submodules does not support --error-unmatch' '
  78        test_must_fail git ls-files --recurse-submodules --error-unmatch 2>actual &&
  79        test_i18ngrep "does not support --error-unmatch" actual
  80'
  81
  82test_incompatible_with_recurse_submodules () {
  83        test_expect_success "--recurse-submodules and $1 are incompatible" "
  84                test_must_fail git ls-files --recurse-submodules $1 2>actual &&
  85                test_i18ngrep 'unsupported mode' actual
  86        "
  87}
  88
  89test_incompatible_with_recurse_submodules -z
  90test_incompatible_with_recurse_submodules -v
  91test_incompatible_with_recurse_submodules -t
  92test_incompatible_with_recurse_submodules --deleted
  93test_incompatible_with_recurse_submodules --modified
  94test_incompatible_with_recurse_submodules --others
  95test_incompatible_with_recurse_submodules --stage
  96test_incompatible_with_recurse_submodules --killed
  97test_incompatible_with_recurse_submodules --unmerged
  98test_incompatible_with_recurse_submodules --eol
  99
 100test_done