зеркало из https://github.com/microsoft/git.git
Merge branch 'js/check-attr-cached'
* js/check-attr-cached: t0003: remove extra whitespaces Teach '--cached' option to check-attr
This commit is contained in:
Коммит
83d6b33db6
|
@ -24,6 +24,9 @@ OPTIONS
|
|||
paths. If this option is used, then 'unspecified' attributes
|
||||
will not be included in the output.
|
||||
|
||||
--cached::
|
||||
Consider `.gitattributes` in the index only, ignoring the working tree.
|
||||
|
||||
--stdin::
|
||||
Read file names from stdin instead of from the command-line.
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#include "parse-options.h"
|
||||
|
||||
static int all_attrs;
|
||||
static int cached_attrs;
|
||||
static int stdin_paths;
|
||||
static const char * const check_attr_usage[] = {
|
||||
"git check-attr [-a | --all | attr...] [--] pathname...",
|
||||
|
@ -16,6 +17,7 @@ static int null_term_line;
|
|||
|
||||
static const struct option check_attr_options[] = {
|
||||
OPT_BOOLEAN('a', "all", &all_attrs, "report all attributes set on file"),
|
||||
OPT_BOOLEAN(0, "cached", &cached_attrs, "use .gitattributes only from the index"),
|
||||
OPT_BOOLEAN(0 , "stdin", &stdin_paths, "read file names from stdin"),
|
||||
OPT_BOOLEAN('z', NULL, &null_term_line,
|
||||
"input paths are terminated by a null character"),
|
||||
|
@ -99,6 +101,9 @@ int cmd_check_attr(int argc, const char **argv, const char *prefix)
|
|||
die("invalid cache");
|
||||
}
|
||||
|
||||
if (cached_attrs)
|
||||
git_attr_set_direction(GIT_ATTR_INDEX, NULL);
|
||||
|
||||
doubledash = -1;
|
||||
for (i = 0; doubledash < 0 && i < argc; i++) {
|
||||
if (!strcmp(argv[i], "--"))
|
||||
|
|
|
@ -5,20 +5,16 @@ test_description=gitattributes
|
|||
. ./test-lib.sh
|
||||
|
||||
attr_check () {
|
||||
|
||||
path="$1"
|
||||
expect="$2"
|
||||
path="$1" expect="$2"
|
||||
|
||||
git check-attr test -- "$path" >actual 2>err &&
|
||||
echo "$path: test: $2" >expect &&
|
||||
test_cmp expect actual &&
|
||||
test_line_count = 0 err
|
||||
|
||||
}
|
||||
|
||||
|
||||
test_expect_success 'setup' '
|
||||
|
||||
mkdir -p a/b/d a/c b &&
|
||||
(
|
||||
echo "[attr]notest !test"
|
||||
|
@ -40,29 +36,27 @@ test_expect_success 'setup' '
|
|||
(
|
||||
echo "global test=global"
|
||||
) >"$HOME"/global-gitattributes &&
|
||||
cat <<EOF >expect-all
|
||||
f: test: f
|
||||
a/f: test: f
|
||||
a/c/f: test: f
|
||||
a/g: test: a/g
|
||||
a/b/g: test: a/b/g
|
||||
b/g: test: unspecified
|
||||
a/b/h: test: a/b/h
|
||||
a/b/d/g: test: a/b/d/*
|
||||
onoff: test: unset
|
||||
offon: test: set
|
||||
no: notest: set
|
||||
no: test: unspecified
|
||||
a/b/d/no: notest: set
|
||||
a/b/d/no: test: a/b/d/*
|
||||
a/b/d/yes: notest: set
|
||||
a/b/d/yes: test: unspecified
|
||||
EOF
|
||||
|
||||
cat <<-EOF >expect-all
|
||||
f: test: f
|
||||
a/f: test: f
|
||||
a/c/f: test: f
|
||||
a/g: test: a/g
|
||||
a/b/g: test: a/b/g
|
||||
b/g: test: unspecified
|
||||
a/b/h: test: a/b/h
|
||||
a/b/d/g: test: a/b/d/*
|
||||
onoff: test: unset
|
||||
offon: test: set
|
||||
no: notest: set
|
||||
no: test: unspecified
|
||||
a/b/d/no: notest: set
|
||||
a/b/d/no: test: a/b/d/*
|
||||
a/b/d/yes: notest: set
|
||||
a/b/d/yes: test: unspecified
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'command line checks' '
|
||||
|
||||
test_must_fail git check-attr &&
|
||||
test_must_fail git check-attr -- &&
|
||||
test_must_fail git check-attr test &&
|
||||
|
@ -72,11 +66,9 @@ test_expect_success 'command line checks' '
|
|||
echo "f" | test_must_fail git check-attr --stdin -- f &&
|
||||
echo "f" | test_must_fail git check-attr --stdin test -- f &&
|
||||
test_must_fail git check-attr "" -- f
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'attribute test' '
|
||||
|
||||
attr_check f f &&
|
||||
attr_check a/f f &&
|
||||
attr_check a/c/f f &&
|
||||
|
@ -90,20 +82,16 @@ test_expect_success 'attribute test' '
|
|||
attr_check no unspecified &&
|
||||
attr_check a/b/d/no "a/b/d/*" &&
|
||||
attr_check a/b/d/yes unspecified
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'unnormalized paths' '
|
||||
|
||||
attr_check ./f f &&
|
||||
attr_check ./a/g a/g &&
|
||||
attr_check a/./g a/g &&
|
||||
attr_check a/c/../b/g a/b/g
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'relative paths' '
|
||||
|
||||
(cd a && attr_check ../f f) &&
|
||||
(cd a && attr_check f f) &&
|
||||
(cd a && attr_check i a/i) &&
|
||||
|
@ -112,7 +100,6 @@ test_expect_success 'relative paths' '
|
|||
(cd b && attr_check ../a/f f) &&
|
||||
(cd b && attr_check ../a/g a/g) &&
|
||||
(cd b && attr_check ../a/b/g a/b/g)
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'core.attributesfile' '
|
||||
|
@ -121,41 +108,43 @@ test_expect_success 'core.attributesfile' '
|
|||
attr_check global global &&
|
||||
git config core.attributesfile "~/global-gitattributes" &&
|
||||
attr_check global global &&
|
||||
echo "global test=precedence" >> .gitattributes &&
|
||||
echo "global test=precedence" >>.gitattributes &&
|
||||
attr_check global precedence
|
||||
'
|
||||
|
||||
test_expect_success 'attribute test: read paths from stdin' '
|
||||
|
||||
grep -v notest < expect-all > expect &&
|
||||
sed -e "s/:.*//" < expect | git check-attr --stdin test > actual &&
|
||||
grep -v notest <expect-all >expect &&
|
||||
sed -e "s/:.*//" <expect | git check-attr --stdin test >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'attribute test: --all option' '
|
||||
grep -v unspecified <expect-all | sort >specified-all &&
|
||||
sed -e "s/:.*//" <expect-all | uniq >stdin-all &&
|
||||
git check-attr --stdin --all <stdin-all | sort >actual &&
|
||||
test_cmp specified-all actual
|
||||
'
|
||||
|
||||
grep -v unspecified < expect-all | sort > expect &&
|
||||
sed -e "s/:.*//" < expect-all | uniq |
|
||||
git check-attr --stdin --all | sort > actual &&
|
||||
test_cmp expect actual
|
||||
test_expect_success 'attribute test: --cached option' '
|
||||
: >empty &&
|
||||
git check-attr --cached --stdin --all <stdin-all | sort >actual &&
|
||||
test_cmp empty actual &&
|
||||
git add .gitattributes a/.gitattributes a/b/.gitattributes &&
|
||||
git check-attr --cached --stdin --all <stdin-all | sort >actual &&
|
||||
test_cmp specified-all actual
|
||||
'
|
||||
|
||||
test_expect_success 'root subdir attribute test' '
|
||||
|
||||
attr_check a/i a/i &&
|
||||
attr_check subdir/a/i unspecified
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'setup bare' '
|
||||
|
||||
git clone --bare . bare.git &&
|
||||
cd bare.git
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'bare repository: check that .gitattribute is ignored' '
|
||||
|
||||
(
|
||||
echo "f test=f"
|
||||
echo "a/i test=a/i"
|
||||
|
@ -165,11 +154,16 @@ test_expect_success 'bare repository: check that .gitattribute is ignored' '
|
|||
attr_check a/c/f unspecified &&
|
||||
attr_check a/i unspecified &&
|
||||
attr_check subdir/a/i unspecified
|
||||
'
|
||||
|
||||
test_expect_success 'bare repository: check that --cached honors index' '
|
||||
GIT_INDEX_FILE=../.git/index \
|
||||
git check-attr --cached --stdin --all <../stdin-all |
|
||||
sort >actual &&
|
||||
test_cmp ../specified-all actual
|
||||
'
|
||||
|
||||
test_expect_success 'bare repository: test info/attributes' '
|
||||
|
||||
(
|
||||
echo "f test=f"
|
||||
echo "a/i test=a/i"
|
||||
|
@ -179,7 +173,6 @@ test_expect_success 'bare repository: test info/attributes' '
|
|||
attr_check a/c/f f &&
|
||||
attr_check a/i a/i &&
|
||||
attr_check subdir/a/i unspecified
|
||||
|
||||
'
|
||||
|
||||
test_done
|
||||
|
|
Загрузка…
Ссылка в новой задаче