mirror of
https://github.com/git/git
synced 2024-09-13 05:14:36 +00:00
74ed43711f
Teach grep to recursively search in submodules when provided with a <tree> object. This allows grep to search a submodule based on the state of the submodule that is present in a commit of the super project. When grep is provided with a <tree> object, the name of the object is prefixed to all output. In order to provide uniformity of output between the parent and child processes the option `--parent-basename` has been added so that the child can preface all of it's output with the name of the parent's object instead of the name of the commit SHA1 of the submodule. This changes output from the command `git grep -e. -l --recurse-submodules HEAD` from: HEAD:file <commit sha1 of submodule>:sub/file to: HEAD:file HEAD:sub/file Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
201 lines
4.5 KiB
Bash
Executable file
201 lines
4.5 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
test_description='Test grep recurse-submodules feature
|
|
|
|
This test verifies the recurse-submodules feature correctly greps across
|
|
submodules.
|
|
'
|
|
|
|
. ./test-lib.sh
|
|
|
|
test_expect_success 'setup directory structure and submodule' '
|
|
echo "foobar" >a &&
|
|
mkdir b &&
|
|
echo "bar" >b/b &&
|
|
git add a b &&
|
|
git commit -m "add a and b" &&
|
|
git init submodule &&
|
|
echo "foobar" >submodule/a &&
|
|
git -C submodule add a &&
|
|
git -C submodule commit -m "add a" &&
|
|
git submodule add ./submodule &&
|
|
git commit -m "added submodule"
|
|
'
|
|
|
|
test_expect_success 'grep correctly finds patterns in a submodule' '
|
|
cat >expect <<-\EOF &&
|
|
a:foobar
|
|
b/b:bar
|
|
submodule/a:foobar
|
|
EOF
|
|
|
|
git grep -e "bar" --recurse-submodules >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'grep and basic pathspecs' '
|
|
cat >expect <<-\EOF &&
|
|
submodule/a:foobar
|
|
EOF
|
|
|
|
git grep -e. --recurse-submodules -- submodule >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'grep and nested submodules' '
|
|
git init submodule/sub &&
|
|
echo "foobar" >submodule/sub/a &&
|
|
git -C submodule/sub add a &&
|
|
git -C submodule/sub commit -m "add a" &&
|
|
git -C submodule submodule add ./sub &&
|
|
git -C submodule add sub &&
|
|
git -C submodule commit -m "added sub" &&
|
|
git add submodule &&
|
|
git commit -m "updated submodule" &&
|
|
|
|
cat >expect <<-\EOF &&
|
|
a:foobar
|
|
b/b:bar
|
|
submodule/a:foobar
|
|
submodule/sub/a:foobar
|
|
EOF
|
|
|
|
git grep -e "bar" --recurse-submodules >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'grep and multiple patterns' '
|
|
cat >expect <<-\EOF &&
|
|
a:foobar
|
|
submodule/a:foobar
|
|
submodule/sub/a:foobar
|
|
EOF
|
|
|
|
git grep -e "bar" --and -e "foo" --recurse-submodules >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'grep and multiple patterns' '
|
|
cat >expect <<-\EOF &&
|
|
b/b:bar
|
|
EOF
|
|
|
|
git grep -e "bar" --and --not -e "foo" --recurse-submodules >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'basic grep tree' '
|
|
cat >expect <<-\EOF &&
|
|
HEAD:a:foobar
|
|
HEAD:b/b:bar
|
|
HEAD:submodule/a:foobar
|
|
HEAD:submodule/sub/a:foobar
|
|
EOF
|
|
|
|
git grep -e "bar" --recurse-submodules HEAD >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'grep tree HEAD^' '
|
|
cat >expect <<-\EOF &&
|
|
HEAD^:a:foobar
|
|
HEAD^:b/b:bar
|
|
HEAD^:submodule/a:foobar
|
|
EOF
|
|
|
|
git grep -e "bar" --recurse-submodules HEAD^ >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'grep tree HEAD^^' '
|
|
cat >expect <<-\EOF &&
|
|
HEAD^^:a:foobar
|
|
HEAD^^:b/b:bar
|
|
EOF
|
|
|
|
git grep -e "bar" --recurse-submodules HEAD^^ >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'grep tree and pathspecs' '
|
|
cat >expect <<-\EOF &&
|
|
HEAD:submodule/a:foobar
|
|
HEAD:submodule/sub/a:foobar
|
|
EOF
|
|
|
|
git grep -e "bar" --recurse-submodules HEAD -- submodule >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'grep tree and pathspecs' '
|
|
cat >expect <<-\EOF &&
|
|
HEAD:submodule/a:foobar
|
|
HEAD:submodule/sub/a:foobar
|
|
EOF
|
|
|
|
git grep -e "bar" --recurse-submodules HEAD -- "submodule*a" >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'grep tree and more pathspecs' '
|
|
cat >expect <<-\EOF &&
|
|
HEAD:submodule/a:foobar
|
|
EOF
|
|
|
|
git grep -e "bar" --recurse-submodules HEAD -- "submodul?/a" >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'grep tree and more pathspecs' '
|
|
cat >expect <<-\EOF &&
|
|
HEAD:submodule/sub/a:foobar
|
|
EOF
|
|
|
|
git grep -e "bar" --recurse-submodules HEAD -- "submodul*/sub/a" >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success !MINGW 'grep recurse submodule colon in name' '
|
|
git init parent &&
|
|
test_when_finished "rm -rf parent" &&
|
|
echo "foobar" >"parent/fi:le" &&
|
|
git -C parent add "fi:le" &&
|
|
git -C parent commit -m "add fi:le" &&
|
|
|
|
git init "su:b" &&
|
|
test_when_finished "rm -rf su:b" &&
|
|
echo "foobar" >"su:b/fi:le" &&
|
|
git -C "su:b" add "fi:le" &&
|
|
git -C "su:b" commit -m "add fi:le" &&
|
|
|
|
git -C parent submodule add "../su:b" "su:b" &&
|
|
git -C parent commit -m "add submodule" &&
|
|
|
|
cat >expect <<-\EOF &&
|
|
fi:le:foobar
|
|
su:b/fi:le:foobar
|
|
EOF
|
|
git -C parent grep -e "foobar" --recurse-submodules >actual &&
|
|
test_cmp expect actual &&
|
|
|
|
cat >expect <<-\EOF &&
|
|
HEAD:fi:le:foobar
|
|
HEAD:su:b/fi:le:foobar
|
|
EOF
|
|
git -C parent grep -e "foobar" --recurse-submodules HEAD >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_incompatible_with_recurse_submodules ()
|
|
{
|
|
test_expect_success "--recurse-submodules and $1 are incompatible" "
|
|
test_must_fail git grep -e. --recurse-submodules $1 2>actual &&
|
|
test_i18ngrep 'not supported with --recurse-submodules' actual
|
|
"
|
|
}
|
|
|
|
test_incompatible_with_recurse_submodules --untracked
|
|
test_incompatible_with_recurse_submodules --no-index
|
|
|
|
test_done
|