Am 29.05.2013 06:19, schrieb Duy Nguyen:
On Wed, May 29, 2013 at 10:41 AM, Duy Nguyen [off-list ref] wrote:
quoted
The changes in this area since 1.8.2.3 seem to be Karsten's (I'm not
blaming, just wanted to narrow down the problem). The patterns of
interest seem to be
!/bin
/bin/*
!/bin/brew
Without "!/bin" v1.8.3 seems to behave the same as v1.8.2.3.
Karsten, the block "/* Abort if the directory is excluded */" in
prep_exclude() seems to cause this. I think it goes through the
exclude patterns, hits "!/bin", believes the patterns do not make
sense in this context and throws all away.
Yes, I forgot to check the "!" flag to determine if the directory is really excluded. I'll prepare a patch + test case for this.
@Øystein: in the meantime, could you check if this fixes the problem for you?
--- 8< ---
diff --git a/dir.c b/dir.c
index a5926fb..13858fe 100644
--- a/dir.c
+++ b/dir.c
@@ -821,6 +821,9 @@ static void prep_exclude(struct dir_struct *dir, const char *base, int baselen)
dir->basebuf, stk->baselen - 1,
dir->basebuf + current, &dt);
dir->basebuf[stk->baselen - 1] = '/';
+ if (dir->exclude &&
+ dir->exclude->flags & EXC_FLAG_NEGATIVE)
+ dir->exclude = NULL;
if (dir->exclude) {
dir->basebuf[stk->baselen] = 0;
dir->exclude_stack = stk;--