Teach '--cached' option to check-attr
authorJay Soffian <jaysoffian@gmail.com>
Thu, 22 Sep 2011 21:44:20 +0000 (17:44 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 22 Sep 2011 23:38:22 +0000 (16:38 -0700)
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>
Documentation/git-check-attr.txt
builtin/check-attr.c
t/t0003-attributes.sh
index 1f7312a1895ae66901e5472132406d01303da1f8..5abdbaa51cf58e216bbc63d28039a5abfba01669 100644 (file)
@@ -24,6 +24,9 @@ OPTIONS
        paths.  If this option is used, then 'unspecified' attributes
        will not be included in the output.
 
        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.
 
 --stdin::
        Read file names from stdin instead of from the command-line.
 
index 708988a0e1a318fb737624f489d01e0686cd0611..ded0d836d39d101f7879fecb11e7057a006c1b17 100644 (file)
@@ -5,6 +5,7 @@
 #include "parse-options.h"
 
 static int all_attrs;
 #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...",
 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"),
 
 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"),
        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");
        }
 
                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], "--"))
        doubledash = -1;
        for (i = 0; doubledash < 0 && i < argc; i++) {
                if (!strcmp(argv[i], "--"))
index ae2f1da28fa55b92338d7dbcb6ef851b6ec40118..c0a45630be7204fde75632a5abea8f9aeda9f13d 100755 (executable)
@@ -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 &&
-       sed -e "s/:.*//" < expect-all | uniq |
-               git check-attr --stdin --all | sort > actual &&
-       test_cmp expect actual
+       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
+'
+
+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' '
 
        (