Teach '--cached' option to check-attr

This option causes check-attr to consider .gitattributes only from
the index, ignoring .gitattributes from the working tree. This allows
the command to be used in situations where a working tree does not exist.

Signed-off-by: Jay Soffian <jaysoffian@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jay Soffian
2011-09-22 17:44:20 -04:00
committed by Junio C Hamano
parent 167a5800cb
commit b2b3e9c2d6
3 changed files with 29 additions and 4 deletions

View File

@ -24,6 +24,9 @@ OPTIONS
paths. If this option is used, then 'unspecified' attributes paths. If this option is used, then 'unspecified' attributes
will not be included in the output. will not be included in the output.
--cached::
Consider `.gitattributes` in the index only, ignoring the working tree.
--stdin:: --stdin::
Read file names from stdin instead of from the command-line. Read file names from stdin instead of from the command-line.

View File

@ -5,6 +5,7 @@
#include "parse-options.h" #include "parse-options.h"
static int all_attrs; static int all_attrs;
static int cached_attrs;
static int stdin_paths; static int stdin_paths;
static const char * const check_attr_usage[] = { static const char * const check_attr_usage[] = {
"git check-attr [-a | --all | attr...] [--] pathname...", "git check-attr [-a | --all | attr...] [--] pathname...",
@ -16,6 +17,7 @@ static int null_term_line;
static const struct option check_attr_options[] = { static const struct option check_attr_options[] = {
OPT_BOOLEAN('a', "all", &all_attrs, "report all attributes set on file"), 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(0 , "stdin", &stdin_paths, "read file names from stdin"),
OPT_BOOLEAN('z', NULL, &null_term_line, OPT_BOOLEAN('z', NULL, &null_term_line,
"input paths are terminated by a null character"), "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"); die("invalid cache");
} }
if (cached_attrs)
git_attr_set_direction(GIT_ATTR_INDEX, NULL);
doubledash = -1; doubledash = -1;
for (i = 0; doubledash < 0 && i < argc; i++) { for (i = 0; doubledash < 0 && i < argc; i++) {
if (!strcmp(argv[i], "--")) if (!strcmp(argv[i], "--"))

View File

@ -134,10 +134,20 @@ test_expect_success 'attribute test: read paths from stdin' '
test_expect_success 'attribute test: --all option' ' test_expect_success 'attribute test: --all option' '
grep -v unspecified < expect-all | sort > expect && grep -v unspecified <expect-all | sort >specified-all &&
sed -e "s/:.*//" < expect-all | uniq | sed -e "s/:.*//" <expect-all | uniq >stdin-all &&
git check-attr --stdin --all | sort > actual && git check-attr --stdin --all <stdin-all | sort >actual &&
test_cmp expect actual test_cmp specified-all 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' ' test_expect_success 'root subdir attribute test' '
@ -168,6 +178,13 @@ test_expect_success 'bare repository: check that .gitattribute is ignored' '
' '
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' ' test_expect_success 'bare repository: test info/attributes' '
( (