git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Robin Rosenberg <robin.rosenberg.lists@dewire.com>
To: "Florian Köberle" <FloriansKarten@web.de>
Cc: "Shawn O. Pearce" <spearce@spearce.org>, git@vger.kernel.org
Subject: Re: [JGIT PATCH v2 19/24] Added the class AddRuleListFactory.
Date: Tue, 13 May 2008 22:55:45 +0200	[thread overview]
Message-ID: <200805132255.46363.robin.rosenberg.lists@dewire.com> (raw)
In-Reply-To: <48297A88.5040508@web.de>

tisdagen den 13 maj 2008 13.24.56 skrev Florian Köberle:
> Shawn O. Pearce wrote:
> > Florian Koeberle <florianskarten@web.de> wrote:
> >> +class AddRuleListFactory {
> >> +	/*
> >> +	 * The add command of git 1.5.2.5 behaves a little bit stange: "git add
> >> +	 * a/\*z" adds the file "a/b/xyz" but "git add a/x\*" does not.
You mean a/\*/x* does not?
> >> +	 * 
> >> +	 * The first is parsed as pattern "*z" for whole directory tree "a". The
> >> +	 * second is parsed as an path.
> >> +	 * 
> >> +	 */
> > 
> > Its not strange.  C Git expands each file path to its _full_ path
> > and stores that into a buffer, then runs fnmatch() for each pattern
> > on the buffer.  If fnmatch() succeeds the path is added to the index.
> > 
> > In the case above we are running a match of "a/\*.z" against
> > "a/b/xyz" and that passes.  Or we run "a/x\*" on "a/b/xyz" and it
> > fails as the sequence of characters "a/x" does not appear in the
> > string "a/b".
> > 
> > You are running into this odd corner case because you are not
> > treating the pattern passed as something that matches against the
> > entire path.  This is one reason why TreeFilter's use the entire
> > path when they process an entry for inclusion or exclusion, and why
> > TreeWalk has each AbstractTreeIterator append the current entry name
> > onto the end of the current path buffer, so we can always examine
> > the full path from the root of the repository/working directory.
> > 
> > Trying to avoid the full path in classes like ComplexFilePattern
> > is why you are running into this corner case here, and must now do
> > extra contortions to somewhat match the behavior of C Git.
> > 
> > At this point I think most of the rules package is overcomplicated
> > and overoptimized, and yet doesn't actually quite match the behavior
> > of C Git.
> > 
> 
> Still I think that the behavior of git-add is strange:
> For example, if you want to add the following file:
> a/b/c/test.txt
> Then I can do this with "a/\*.txt" or "a/b\*.txt" but not with 
> "a/\*/c/test.txt"
> 
> I know that I handle "a/b\*.txt" wrong, and I don't know a nice way to 
> implement it in the current rules framework.
> 
> I see three options:
> 1.) Let the jgit add command work in another way then git-add does.
> 2.) Don't use the rules framework to determine if a file is selected by 
> the add command.
> 3.) Completely drop the patches
> [4.) Add some evil hacks to make it working] <- I don't like that version
> 
> Please tell me which way to go, so that I don't waste even more time on 
> patches which will never make it in.

Correctness is very important. Obviously we will slip bugs trough, but
not intentionally in a part where legacy behaviour may play an important
role. With these options available I'd select number 2.

I think your observations are interesting, especially the one you make
here about a/*/c/test.txt not matching because I don't see from the git
add manual why it shouldn't. I does not look like a recent git bug either. 

btw, I should you can use the ö in your name in mail and too. It'll make
for some interesting testing of non-ascii handling that we need to take
on (another argument for not complicating handling of names too much).
I'm sure it will get pretty hairy regardless.

-- robin

  reply	other threads:[~2008-05-13 20:57 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-05-12 20:13 [JGIT PATCH v2 0/24] Implementation of a file tree iteration using ignore rules Florian Koeberle
2008-05-12 20:13 ` [JGIT PATCH v2 01/24] Start of an implementation of a git like command line tool Florian Koeberle
2008-05-12 20:13 ` [JGIT PATCH v2 02/24] Formatted Repository class Florian Koeberle
2008-05-12 20:13 ` [JGIT PATCH v2 03/24] Formatted Constats class Florian Koeberle
2008-05-12 20:13 ` [JGIT PATCH v2 04/24] Added path related constats to " Florian Koeberle
2008-05-12 23:54   ` Shawn O. Pearce
2008-05-23 15:46     ` Florian Köberle
2008-05-12 20:13 ` [JGIT PATCH v2 05/24] Added WorkTree class which can be constructed over Repository Florian Koeberle
2008-05-13  0:04   ` Shawn O. Pearce
2008-05-13 21:13     ` Robin Rosenberg
2008-05-14  0:35       ` Shawn O. Pearce
2008-05-12 20:13 ` [JGIT PATCH v2 06/24] Added a "init" command to the git like command line tool Florian Koeberle
2008-05-12 20:13 ` [JGIT PATCH v2 07/24] Added findWorkTree method to Repository class Florian Koeberle
2008-05-13  0:24   ` Shawn O. Pearce
2008-05-23 18:12     ` Florian Köberle
2008-05-23 18:31       ` Miklos Vajna
2008-05-23 20:39         ` Shawn O. Pearce
2008-05-23 21:28       ` Robin Rosenberg
2008-05-12 20:13 ` [JGIT PATCH v2 08/24] Added the interface FilePattern Florian Koeberle
2008-05-12 20:13 ` [JGIT PATCH v2 09/24] Added the class Rule Florian Koeberle
2008-05-12 20:13 ` [JGIT PATCH v2 10/24] Added the iterface Rules Florian Koeberle
2008-05-12 20:13 ` [JGIT PATCH v2 11/24] Added the class FNMatchPattern Florian Koeberle
2008-05-13  0:38   ` Shawn O. Pearce
2008-05-12 20:13 ` [JGIT PATCH v2 12/24] Added the class GlobalFilePattern Florian Koeberle
2008-05-12 20:13 ` [JGIT PATCH v2 13/24] Added the class ComplexFilePattern Florian Koeberle
2008-05-12 20:13 ` [JGIT PATCH v2 14/24] Added the class IgnoreRuleListFactory Florian Koeberle
2008-05-13  1:08   ` Shawn O. Pearce
2008-05-13 10:19     ` Florian Köberle
2008-05-14  1:06       ` Shawn O. Pearce
2008-05-12 20:13 ` [JGIT PATCH v2 15/24] Added a Rules interface implementation and a factory for it Florian Koeberle
2008-05-12 20:13 ` [JGIT PATCH v2 16/24] Added test class OverallIgnoreRulestest Florian Koeberle
2008-05-12 20:13 ` [JGIT PATCH v2 17/24] Added the class TreeFilePattern Florian Koeberle
2008-05-13  1:22   ` Shawn O. Pearce
2008-05-12 20:13 ` [JGIT PATCH v2 18/24] Added InvalidPatternException and PathNotInProjectDirectoryException Florian Koeberle
2008-05-12 20:13 ` [JGIT PATCH v2 19/24] Added the class AddRuleListFactory Florian Koeberle
2008-05-13  1:29   ` Shawn O. Pearce
2008-05-13 11:24     ` Florian Köberle
2008-05-13 20:55       ` Robin Rosenberg [this message]
2008-05-14  1:49         ` Shawn O. Pearce
2008-05-12 20:13 ` [JGIT PATCH v2 20/24] Added class AddRulesFactory Florian Koeberle
2008-05-12 20:13 ` [JGIT PATCH v2 21/24] Added the class LightFileTreeIterator and a test for it Florian Koeberle
2008-05-14 14:27   ` Paolo Bonzini
2008-05-12 20:13 ` [JGIT PATCH v2 22/24] Added class LightFileTreeIterable Florian Koeberle
2008-05-12 20:13 ` [JGIT PATCH v2 23/24] Added the test class AddCommandIterationTest Florian Koeberle
2008-05-12 20:13 ` [JGIT PATCH v2 24/24] Added a "add" command to the git like command line tool Florian Koeberle
2008-05-12 20:43 ` [JGIT PATCH v2 0/24] Implementation of a file tree iteration using ignore rules Miklos Vajna

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=200805132255.46363.robin.rosenberg.lists@dewire.com \
    --to=robin.rosenberg.lists@dewire.com \
    --cc=FloriansKarten@web.de \
    --cc=git@vger.kernel.org \
    --cc=spearce@spearce.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).