All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Shawn O. Pearce" <spearce@spearce.org>
To: Robin Rosenberg <robin.rosenberg.lists@dewire.com>
Cc: "Florian Köberle" <FloriansKarten@web.de>, git@vger.kernel.org
Subject: Re: [JGIT PATCH v2 19/24] Added the class AddRuleListFactory.
Date: Tue, 13 May 2008 21:49:02 -0400	[thread overview]
Message-ID: <20080514014902.GL29038@spearce.org> (raw)
In-Reply-To: <200805132255.46363.robin.rosenberg.lists@dewire.com>

Robin Rosenberg <robin.rosenberg.lists@dewire.com> wrote:
> tisdagen den 13 maj 2008 13.24.56 skrev Florian Köberle:
> > 
> > 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"
...
> 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. 

Wow.  The behavior of git-add makes _no_ sense to me.

  $ git init
  $ mkdir -p a/b/c; touch a/b/c/test.txt
  $ find a
  a
  a/b
  a/b/c
  a/b/c/test.txt

  $ git add 'a/*/test.txt'
  fatal: pathspec 'a/*/test.txt' did not match any files

(sure, ok, even my shell agrees)

  $ git add 'a/*/c/test.txt'
  fatal: pathspec 'a/*/c/test.txt' did not match any files

  $ ls a/*/c/test.txt
  a/b/c/test.txt

(hmm, now my shell says otherwise)

  $ git add 'a/b*/c/test.txt'
  fatal: pathspec 'a/b*/c/test.txt' did not match any files

  $ ls a/b*/c/test.txt
  a/b/c/test.txt

(also odd)

This last case does match with fnmatch:

  $ cat fnmatch.c 
  #include <fnmatch.h>
  #include <stdio.h>
  
  int main (int argc, char *argv[]) {
  	const char *name = argv[1];
  	const char *patt = argv[2];
  	printf("\"%s\" matches \"%s\" = %d\n",
  		name, patt,
  		fnmatch(patt, name, 0));
  	return 0;
  }

  $ gcc -o fnmatch fnmatch.c
  $ ./fnmatch a/b/c/test.txt 'a/b*/c/test.txt'
  "a/b/c/test.txt" matches "a/b*/c/test.txt" = 0

So I find it odd that git-add does not match this name, but fnmatch
does.  I suspect the problem here is git-add has pruned away the
subdirectory "a/b" and did not enter into it, so the pattern was
never even given a chance to look at test.txt.  This sounds like
a bug to me in git's working directory filter.

Even if Linus says matching names incorrectly is not a bug, I'm
not sure its an implementation detail we should mirror in jgit.

Where does that leave us?  I'm not sure.  But treating git-add as
a black box and replicating its behavior looks loony to me right now.

-- 
Shawn.

  reply	other threads:[~2008-05-14  1:49 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
2008-05-14  1:49         ` Shawn O. Pearce [this message]
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=20080514014902.GL29038@spearce.org \
    --to=spearce@spearce.org \
    --cc=FloriansKarten@web.de \
    --cc=git@vger.kernel.org \
    --cc=robin.rosenberg.lists@dewire.com \
    /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.