From 4d06f8ac4389ed8bcd2d03b2dcab4b7e2a858402 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Fri, 29 Dec 2006 11:01:31 -0800 Subject: Fix 'git add' with .gitignore When '*.ig' is ignored, and you have two files f.ig and d.ig/foo in the working tree, $ git add . correctly ignored f.ig but failed to ignore d.ig/foo. This was caused by a thinko in an earlier commit 4888c534, when we tried to allow adding otherwise ignored files. After reverting that commit, this takes a much simpler approach. When we have an unmatched pathspec that talks about an existing pathname, we know it is an ignored path the user tried to add, so we include it in the set of paths directory walker returned. This does not let you say "git add -f D" on an ignored directory D and add everything under D. People can submit a patch to further allow it if they want to, but I think it is a saner behaviour to require explicit paths to be spelled out in such a case. Signed-off-by: Junio C Hamano --- dir.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'dir.h') diff --git a/dir.h b/dir.h index c91972794..7233d65bb 100644 --- a/dir.h +++ b/dir.h @@ -13,7 +13,9 @@ struct dir_entry { - int len; + unsigned int ignored : 1; + unsigned int ignored_dir : 1; + unsigned int len : 30; char name[FLEX_ARRAY]; /* more */ }; @@ -55,5 +57,6 @@ extern void add_excludes_from_file(struct dir_struct *, const char *fname); extern void add_exclude(const char *string, const char *base, int baselen, struct exclude_list *which); extern int file_exists(const char *); +extern struct dir_entry *dir_add_name(struct dir_struct *dir, const char *pathname, int len); #endif -- cgit v1.2.1