git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [JGIT PATCH 0/m] Implementation of a file tree iteration using ignore rules.
@ 2008-05-10 13:00 Florian Koeberle
  2008-05-10 13:00 ` [JGIT PATCH 01/22] Start of an implementation of a git like command line tool Florian Koeberle
                   ` (22 more replies)
  0 siblings, 23 replies; 35+ messages in thread
From: Florian Koeberle @ 2008-05-10 13:00 UTC (permalink / raw)
  To: git

Hi

here are the patches.

The implementation does a lot of performance optimizations:

1.) Instead of checking all the rules from top to bottom, I simply take the first matching rule beginning from bottom. I actually have intern a list with a inversed order and take then the first matching rule.


2.) Each sub directory has it's own optimized rules.

2.1.) Rules which can never match are removed. e.g. There is no need to check the rule "/a" in the directory b.

2.2.) The list is cut at the first rule which match always. *.txt\n/a for example would result in an internal list "ignore all, ignore *.txt" which is then reduced to "ignore all".

2.3.) Ignore rules which are direcly before an "ignore all" all rule are removed. /a\n*.txt for example would result in an intern "ignore *.txt, ignore all" list which is then reduced to "ignore all",

2.4.) "do not ignore" rules at the bottom of the intern list are removed. This optimization would remove !a from "!a\n/b" as it is in the inversed list at the bottom.

2.5.) When converting the rule list into an instance of the Rules interface, rule lists with only one always matching rule are converted to Rules.IGNORE_NOTHING and Rules.IGNORE_ALL objects. These special objects avoid unessary object construction as they reuse themself for sub directories.


3.) Only rules are evaluated which could match at the current directory level. e.g. You don't need to check the rule /a/b/c for every file in /a, but only for files in the directory /a/b


4.) The Iterator doesn't walk into trees from which it knows that they will never match. It can do so by comparing the rules instance for the directory with the value of Rules.IGNORE_ALL.

Best regards,
Florian Koeberle

^ permalink raw reply	[flat|nested] 35+ messages in thread

end of thread, other threads:[~2008-05-11  0:17 UTC | newest]

Thread overview: 35+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-05-10 13:00 [JGIT PATCH 0/m] Implementation of a file tree iteration using ignore rules Florian Koeberle
2008-05-10 13:00 ` [JGIT PATCH 01/22] Start of an implementation of a git like command line tool Florian Koeberle
2008-05-10 13:00 ` [JGIT PATCH 02/22] Replaced Java 6 API useage with Java 5 equivalent Florian Koeberle
2008-05-10 13:00 ` [JGIT PATCH 03/22] Added a class Project which represents a project directory and it's repository Florian Koeberle
2008-05-10 20:45   ` Robin Rosenberg
2008-05-10 13:00 ` [JGIT PATCH 04/22] Added a "init" command to the git like command line tool Florian Koeberle
2008-05-10 13:00 ` [JGIT PATCH 05/22] Added ProjectSeeker class Florian Koeberle
2008-05-10 20:45   ` Robin Rosenberg
2008-05-10 13:00 ` [JGIT PATCH 06/22] Added the interface FilePattern Florian Koeberle
2008-05-10 13:00 ` [JGIT PATCH 07/22] Added the class Rule Florian Koeberle
2008-05-10 13:00 ` [JGIT PATCH 08/22] Added the iterface Rules Florian Koeberle
2008-05-10 20:46   ` Robin Rosenberg
2008-05-10 13:00 ` [JGIT PATCH 09/22] Added the class FileTreeIterator and a test for it Florian Koeberle
2008-05-10 13:00 ` [JGIT PATCH 10/22] Added class FileTreeIterable Florian Koeberle
2008-05-10 13:00 ` [JGIT PATCH 11/22] Added the class StarPattern Florian Koeberle
2008-05-10 20:53   ` Robin Rosenberg
2008-05-10 13:00 ` [JGIT PATCH 12/22] Added the class GlobalFilePattern Florian Koeberle
2008-05-10 13:00 ` [JGIT PATCH 13/22] Added the class ComplexFilePattern Florian Koeberle
2008-05-10 20:53   ` Robin Rosenberg
2008-05-10 13:00 ` [JGIT PATCH 14/22] Added the class IgnoreRuleListFactory Florian Koeberle
2008-05-10 20:53   ` Robin Rosenberg
2008-05-10 13:00 ` [JGIT PATCH 15/22] Added a Rules interface implementation and a factory for it Florian Koeberle
2008-05-10 13:00 ` [JGIT PATCH 16/22] Added test class OverallIgnoreRulestest Florian Koeberle
2008-05-10 13:00 ` [JGIT PATCH 17/22] Added the class TreeFilePattern Florian Koeberle
2008-05-10 13:00 ` [JGIT PATCH 18/22] Added InvalidPatternException and PathNotInProjectDirectoryException Florian Koeberle
2008-05-10 20:53   ` Robin Rosenberg
2008-05-10 13:00 ` [JGIT PATCH 19/22] Added the class AddRuleListFactory Florian Koeberle
2008-05-10 20:53   ` Robin Rosenberg
2008-05-10 13:00 ` [JGIT PATCH 20/22] Added class FileIterableFactoryForAddCommand Florian Koeberle
2008-05-10 13:00 ` [JGIT PATCH 21/22] Added test class FileIterableFactoryForAddCommandTest Florian Koeberle
2008-05-10 20:53   ` Robin Rosenberg
2008-05-10 13:00 ` [JGIT PATCH 22/22] Added a "add" command to the git like command line tool Florian Koeberle
2008-05-10 20:54   ` Robin Rosenberg
2008-05-10 20:45 ` [JGIT PATCH 0/m] Implementation of a file tree iteration using ignore rules Robin Rosenberg
2008-05-11  0:16   ` Shawn O. Pearce

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).