From: Duy Nguyen <pclouds@gmail.com>
To: "brian m. carlson" <sandals@crustytoothpaste.net>
Cc: Jeff King <peff@peff.net>, Mike McQuaid <mike@mikemcquaid.com>,
Git Mailing List <git@vger.kernel.org>
Subject: Re: Git 2.7.0 gitignore behaviour regression
Date: Fri, 8 Jan 2016 16:02:31 +0700 [thread overview]
Message-ID: <20160108090231.GA9609@lanh> (raw)
In-Reply-To: <20160108024125.GD265296@vauxhall.crustytoothpaste.net>
On Fri, Jan 08, 2016 at 02:41:25AM +0000, brian m. carlson wrote:
> On Fri, Jan 08, 2016 at 07:38:58AM +0700, Duy Nguyen wrote:
> > On Fri, Jan 8, 2016 at 6:44 AM, brian m. carlson
> > <sandals@crustytoothpaste.net> wrote:
> > > I think there's still a bug in the code here. If you do
> > >
> > > git init
> > > mkdir -p base/a/
> > > printf 'base/a/\n!base/a/b.txt\n' >.gitignore
> >
> > Here we have the ignore rule "base/a/", but gitignore.txt, section
> > NOTES mentions this
> >
> > - The rules to exclude the parent directory must not end with a
> > trailing slash.
>
> The text here says, "To re-include files or directories when their
> parent directory is excluded, the following conditions must be met". In
> other words, the text implies that it's required for re-inclusion to
> work, not exclusion.
>
> > > git add .gitignore
> > > git commit -m 'Add .gitignore'
> > > >base/a/b.txt
> > > git add base/a/b.txt
> > > git commit -m 'Add base/a/b.txt'
> > > >base/a/c.txt
> > > git status --porcelain
> > >
> > > git status outputs base/a/c.txt as unknown, when it should be ignored.
> > > We saw this in a repository at $DAYJOB.
> >
> > If I delete that trailing slash, c.txt is ignored. So it's known
> > limitation. I think we can make trailing slash case work too, but if I
> > remember correctly it would involve a lot more changes, so I didn't do
> > it (there are other conditions to follow anyway to make it work).
>
> The case I'm seeing is that b.txt was already checked into the
> repository before being re-added, and c.txt was not. So it didn't
> affect us that b.txt was ignored (as it was already in the repo), but
> c.txt not being ignored broke a whole bunch of scripts that checked that
> the repository was clean, simply because we upgraded Git.
>
> I think regardless of whether b.txt is re-included, c.txt should be
> ignored. If it isn't possible to re-include b.txt, that's fine, since
> that isn't a regression, but ignored files should remain ignored.
Thanks for clarification. I looked at this the wrong way. I agree it
is a regression.
The following should fix it. It looks correct (and does fix your test
case), but I will have to look harder over the weekend before sending
a proper patch.
-- 8< --
diff --git a/dir.c b/dir.c
index d2a8f06..7934e87 100644
--- a/dir.c
+++ b/dir.c
@@ -1008,6 +1008,7 @@ static struct exclude *last_exclude_matching_from_list(const char *pathname,
if (exc &&
!(exc->flags & EXC_FLAG_NEGATIVE) &&
!(exc->flags & EXC_FLAG_NODIR) &&
+ !(exc->flags & EXC_FLAG_MUSTBEDIR) &&
matched_negative_path)
exc = NULL;
return exc;
-- 8< --
--
Duy
prev parent reply other threads:[~2016-01-08 9:02 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-05 14:40 Git 2.7.0 gitignore behaviour regression Mike McQuaid
2016-01-05 15:06 ` Jeff King
2016-01-06 9:42 ` Duy Nguyen
2016-01-06 9:50 ` Mike McQuaid
2016-01-06 10:03 ` Duy Nguyen
2016-01-06 18:58 ` Junio C Hamano
2016-01-07 2:04 ` Jeff King
2016-01-07 2:13 ` Duy Nguyen
2016-01-08 1:47 ` Carlos Martín Nieto
2016-01-07 23:44 ` brian m. carlson
2016-01-08 0:38 ` Duy Nguyen
2016-01-08 2:41 ` brian m. carlson
2016-01-08 9:02 ` Duy Nguyen [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160108090231.GA9609@lanh \
--to=pclouds@gmail.com \
--cc=git@vger.kernel.org \
--cc=mike@mikemcquaid.com \
--cc=peff@peff.net \
--cc=sandals@crustytoothpaste.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.