Squashed 'third_party/git/' content from commit cb71568594
git-subtree-dir: third_party/git git-subtree-split: cb715685942260375e1eb8153b0768a376e4ece7
This commit is contained in:
commit
1b593e1ea4
3629 changed files with 1139935 additions and 0 deletions
256
t/t6135-pathspec-with-attrs.sh
Executable file
256
t/t6135-pathspec-with-attrs.sh
Executable file
|
|
@ -0,0 +1,256 @@
|
|||
#!/bin/sh
|
||||
|
||||
test_description='test labels in pathspecs'
|
||||
. ./test-lib.sh
|
||||
|
||||
test_expect_success 'setup a tree' '
|
||||
cat <<-\EOF >expect &&
|
||||
fileA
|
||||
fileAB
|
||||
fileAC
|
||||
fileB
|
||||
fileBC
|
||||
fileC
|
||||
fileNoLabel
|
||||
fileSetLabel
|
||||
fileUnsetLabel
|
||||
fileValue
|
||||
fileWrongLabel
|
||||
sub/fileA
|
||||
sub/fileAB
|
||||
sub/fileAC
|
||||
sub/fileB
|
||||
sub/fileBC
|
||||
sub/fileC
|
||||
sub/fileNoLabel
|
||||
sub/fileSetLabel
|
||||
sub/fileUnsetLabel
|
||||
sub/fileValue
|
||||
sub/fileWrongLabel
|
||||
EOF
|
||||
mkdir sub &&
|
||||
while read path
|
||||
do
|
||||
echo content >$path &&
|
||||
git add $path || return 1
|
||||
done <expect &&
|
||||
git commit -m "initial commit" &&
|
||||
git ls-files >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'pathspec with no attr' '
|
||||
test_must_fail git ls-files ":(attr:)"
|
||||
'
|
||||
|
||||
test_expect_success 'pathspec with labels and non existent .gitattributes' '
|
||||
git ls-files ":(attr:label)" >actual &&
|
||||
test_must_be_empty actual
|
||||
'
|
||||
|
||||
test_expect_success 'pathspec with labels and non existent .gitattributes (2)' '
|
||||
test_must_fail git grep content HEAD -- ":(attr:label)"
|
||||
'
|
||||
|
||||
test_expect_success 'setup .gitattributes' '
|
||||
cat <<-\EOF >.gitattributes &&
|
||||
fileA labelA
|
||||
fileB labelB
|
||||
fileC labelC
|
||||
fileAB labelA labelB
|
||||
fileAC labelA labelC
|
||||
fileBC labelB labelC
|
||||
fileUnsetLabel -label
|
||||
fileSetLabel label
|
||||
fileValue label=foo
|
||||
fileWrongLabel label☺
|
||||
EOF
|
||||
git add .gitattributes &&
|
||||
git commit -m "add attributes"
|
||||
'
|
||||
|
||||
test_expect_success 'check specific set attr' '
|
||||
cat <<-\EOF >expect &&
|
||||
fileSetLabel
|
||||
sub/fileSetLabel
|
||||
EOF
|
||||
git ls-files ":(attr:label)" >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'check specific set attr (2)' '
|
||||
cat <<-\EOF >expect &&
|
||||
HEAD:fileSetLabel
|
||||
HEAD:sub/fileSetLabel
|
||||
EOF
|
||||
git grep -l content HEAD ":(attr:label)" >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'check specific unset attr' '
|
||||
cat <<-\EOF >expect &&
|
||||
fileUnsetLabel
|
||||
sub/fileUnsetLabel
|
||||
EOF
|
||||
git ls-files ":(attr:-label)" >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'check specific unset attr (2)' '
|
||||
cat <<-\EOF >expect &&
|
||||
HEAD:fileUnsetLabel
|
||||
HEAD:sub/fileUnsetLabel
|
||||
EOF
|
||||
git grep -l content HEAD ":(attr:-label)" >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'check specific value attr' '
|
||||
cat <<-\EOF >expect &&
|
||||
fileValue
|
||||
sub/fileValue
|
||||
EOF
|
||||
git ls-files ":(attr:label=foo)" >actual &&
|
||||
test_cmp expect actual &&
|
||||
git ls-files ":(attr:label=bar)" >actual &&
|
||||
test_must_be_empty actual
|
||||
'
|
||||
|
||||
test_expect_success 'check specific value attr (2)' '
|
||||
cat <<-\EOF >expect &&
|
||||
HEAD:fileValue
|
||||
HEAD:sub/fileValue
|
||||
EOF
|
||||
git grep -l content HEAD ":(attr:label=foo)" >actual &&
|
||||
test_cmp expect actual &&
|
||||
test_must_fail git grep -l content HEAD ":(attr:label=bar)"
|
||||
'
|
||||
|
||||
test_expect_success 'check unspecified attr' '
|
||||
cat <<-\EOF >expect &&
|
||||
.gitattributes
|
||||
fileA
|
||||
fileAB
|
||||
fileAC
|
||||
fileB
|
||||
fileBC
|
||||
fileC
|
||||
fileNoLabel
|
||||
fileWrongLabel
|
||||
sub/fileA
|
||||
sub/fileAB
|
||||
sub/fileAC
|
||||
sub/fileB
|
||||
sub/fileBC
|
||||
sub/fileC
|
||||
sub/fileNoLabel
|
||||
sub/fileWrongLabel
|
||||
EOF
|
||||
git ls-files ":(attr:!label)" >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'check unspecified attr (2)' '
|
||||
cat <<-\EOF >expect &&
|
||||
HEAD:.gitattributes
|
||||
HEAD:fileA
|
||||
HEAD:fileAB
|
||||
HEAD:fileAC
|
||||
HEAD:fileB
|
||||
HEAD:fileBC
|
||||
HEAD:fileC
|
||||
HEAD:fileNoLabel
|
||||
HEAD:fileWrongLabel
|
||||
HEAD:sub/fileA
|
||||
HEAD:sub/fileAB
|
||||
HEAD:sub/fileAC
|
||||
HEAD:sub/fileB
|
||||
HEAD:sub/fileBC
|
||||
HEAD:sub/fileC
|
||||
HEAD:sub/fileNoLabel
|
||||
HEAD:sub/fileWrongLabel
|
||||
EOF
|
||||
git grep -l ^ HEAD ":(attr:!label)" >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'check multiple unspecified attr' '
|
||||
cat <<-\EOF >expect &&
|
||||
.gitattributes
|
||||
fileC
|
||||
fileNoLabel
|
||||
fileWrongLabel
|
||||
sub/fileC
|
||||
sub/fileNoLabel
|
||||
sub/fileWrongLabel
|
||||
EOF
|
||||
git ls-files ":(attr:!labelB !labelA !label)" >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'check label with more labels but excluded path' '
|
||||
cat <<-\EOF >expect &&
|
||||
fileAB
|
||||
fileB
|
||||
fileBC
|
||||
EOF
|
||||
git ls-files ":(attr:labelB)" ":(exclude)sub/" >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'check label excluding other labels' '
|
||||
cat <<-\EOF >expect &&
|
||||
fileAB
|
||||
fileB
|
||||
fileBC
|
||||
sub/fileAB
|
||||
sub/fileB
|
||||
EOF
|
||||
git ls-files ":(attr:labelB)" ":(exclude,attr:labelC)sub/" >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'fail on multiple attr specifiers in one pathspec item' '
|
||||
test_must_fail git ls-files . ":(attr:labelB,attr:labelC)" 2>actual &&
|
||||
test_i18ngrep "Only one" actual
|
||||
'
|
||||
|
||||
test_expect_success 'fail if attr magic is used places not implemented' '
|
||||
# The main purpose of this test is to check that we actually fail
|
||||
# when you attempt to use attr magic in commands that do not implement
|
||||
# attr magic. This test does not advocate git-add to stay that way,
|
||||
# though, but git-add is convenient as it has its own internal pathspec
|
||||
# parsing.
|
||||
test_must_fail git add ":(attr:labelB)" 2>actual &&
|
||||
test_i18ngrep "magic not supported" actual
|
||||
'
|
||||
|
||||
test_expect_success 'abort on giving invalid label on the command line' '
|
||||
test_must_fail git ls-files . ":(attr:☺)"
|
||||
'
|
||||
|
||||
test_expect_success 'abort on asking for wrong magic' '
|
||||
test_must_fail git ls-files . ":(attr:-label=foo)" &&
|
||||
test_must_fail git ls-files . ":(attr:!label=foo)"
|
||||
'
|
||||
|
||||
test_expect_success 'check attribute list' '
|
||||
cat <<-EOF >>.gitattributes &&
|
||||
* whitespace=indent,trail,space
|
||||
EOF
|
||||
git ls-files ":(attr:whitespace=indent\,trail\,space)" >actual &&
|
||||
git ls-files >expect &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'backslash cannot be the last character' '
|
||||
test_must_fail git ls-files ":(attr:label=foo\\ labelA=bar)" 2>actual &&
|
||||
test_i18ngrep "not allowed as last character in attr value" actual
|
||||
'
|
||||
|
||||
test_expect_success 'backslash cannot be used as a value' '
|
||||
test_must_fail git ls-files ":(attr:label=f\\\oo)" 2>actual &&
|
||||
test_i18ngrep "for value matching" actual
|
||||
'
|
||||
|
||||
test_done
|
||||
Loading…
Add table
Add a link
Reference in a new issue