Merge branch 'jk/maint-1.6.3-ls-files-i' into maint
authorJunio C Hamano <gitster@pobox.com>
Mon, 16 Nov 2009 07:07:32 +0000 (23:07 -0800)
committerJunio C Hamano <gitster@pobox.com>
Mon, 16 Nov 2009 07:07:32 +0000 (23:07 -0800)
* jk/maint-1.6.3-ls-files-i:
ls-files: unbreak "ls-files -i"

Documentation/git-ls-files.txt
builtin-ls-files.c
t/t3003-ls-files-exclude.sh
index 021066e95d88624d2ec6c90a9218a4fd70ec17b7..625723e41fa072523fa850e37534677cfe8af631 100644 (file)
@@ -48,8 +48,10 @@ OPTIONS
 
 -i::
 --ignored::
-       Show ignored files in the output.
-       Note that this also reverses any exclude list present.
+       Show only ignored files in the output. When showing files in the
+       index, print only those matched by an exclude pattern. When
+       showing "other" files, show only those matched by an exclude
+       pattern.
 
 -s::
 --stage::
index c5c0407b0b824327b0bbc6ae50ae1a030761b2b9..c9a03e5427bbf1390aeefb9d48b4e362ca6a8e1b 100644 (file)
@@ -170,6 +170,10 @@ static void show_files(struct dir_struct *dir, const char *prefix)
        if (show_cached | show_stage) {
                for (i = 0; i < active_nr; i++) {
                        struct cache_entry *ce = active_cache[i];
+                       int dtype = ce_to_dtype(ce);
+                       if (dir->flags & DIR_SHOW_IGNORED &&
+                           !excluded(dir, ce->name, &dtype))
+                               continue;
                        if (show_unmerged && !ce_stage(ce))
                                continue;
                        if (ce->ce_flags & CE_UPDATE)
@@ -182,6 +186,10 @@ static void show_files(struct dir_struct *dir, const char *prefix)
                        struct cache_entry *ce = active_cache[i];
                        struct stat st;
                        int err;
+                       int dtype = ce_to_dtype(ce);
+                       if (dir->flags & DIR_SHOW_IGNORED &&
+                           !excluded(dir, ce->name, &dtype))
+                               continue;
                        if (ce->ce_flags & CE_UPDATE)
                                continue;
                        err = lstat(ce->name, &st);
index fc1e379321a5ccd278951b7aaa21f677f7cbc960..d5ec333131f92cd086924815a9f32ad1c8b50aae 100755 (executable)
@@ -29,4 +29,12 @@ test_expect_success 'add file to gitignore' '
 '
 check_all_output
 
+test_expect_success 'ls-files -i lists only tracked-but-ignored files' '
+       echo content >other-file &&
+       git add other-file &&
+       echo file >expect &&
+       git ls-files -i --exclude-standard >output &&
+       test_cmp expect output
+'
+
 test_done