git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[JGIT PATCH 0/m] Implementation of a file tree iteration using ignore rules.

From
FKFlorian Koeberle <florianskarten@web.de>
Date
May 10, 2008, 13:00 UTC
Message-ID
<1210424440-13886-1-git-send-email-florianskarten@web.de>
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

Next: Florian Koeberle
Message 1 of 35 in “Implementation of a file tree iteration using ignore rules.”
  1. Implementation of a file tree iteration using ignore rules.Florian Koeberle, May 10, 2008
  2. 01/22 Start of an implementation of a git like command line tool.Florian Koeberle, May 10, 2008
  3. 02/22 Replaced Java 6 API useage with Java 5 equivalent.Florian Koeberle, May 10, 2008
  4. 03/22 Added a class Project which represents a project directory and it's repository.Florian Koeberle, May 10, 2008
  5. Robin RosenbergMay 10, 2008
  6. 04/22 Added a "init" command to the git like command line tool.Florian Koeberle, May 10, 2008
  7. 05/22 Added ProjectSeeker class.Florian Koeberle, May 10, 2008
  8. Robin RosenbergMay 10, 2008
  9. 06/22 Added the interface FilePattern.Florian Koeberle, May 10, 2008
  10. 07/22 Added the class Rule.Florian Koeberle, May 10, 2008
  11. 08/22 Added the iterface Rules.Florian Koeberle, May 10, 2008
  12. Robin RosenbergMay 10, 2008
  13. 09/22 Added the class FileTreeIterator and a test for it.Florian Koeberle, May 10, 2008
  14. 10/22 Added class FileTreeIterable.Florian Koeberle, May 10, 2008
  15. 11/22 Added the class StarPattern.Florian Koeberle, May 10, 2008
  16. Robin RosenbergMay 10, 2008
  17. 12/22 Added the class GlobalFilePatternFlorian Koeberle, May 10, 2008
  18. 13/22 Added the class ComplexFilePattern.Florian Koeberle, May 10, 2008
  19. Robin RosenbergMay 10, 2008
  20. 14/22 Added the class IgnoreRuleListFactory.Florian Koeberle, May 10, 2008
  21. Robin RosenbergMay 10, 2008
  22. 15/22 Added a Rules interface implementation and a factory for it.Florian Koeberle, May 10, 2008
  23. 16/22 Added test class OverallIgnoreRulestest.Florian Koeberle, May 10, 2008
  24. 17/22 Added the class TreeFilePattern.Florian Koeberle, May 10, 2008
  25. 18/22 Added InvalidPatternException and PathNotInProjectDirectoryExceptionFlorian Koeberle, May 10, 2008
  26. Robin RosenbergMay 10, 2008
  27. 19/22 Added the class AddRuleListFactory.Florian Koeberle, May 10, 2008
  28. Robin RosenbergMay 10, 2008
  29. 20/22 Added class FileIterableFactoryForAddCommand.Florian Koeberle, May 10, 2008
  30. 21/22 Added test class FileIterableFactoryForAddCommandTest.Florian Koeberle, May 10, 2008
  31. Robin RosenbergMay 10, 2008
  32. 22/22 Added a "add" command to the git like command line tool.Florian Koeberle, May 10, 2008
  33. Robin RosenbergMay 10, 2008
  34. Robin RosenbergMay 10, 2008
  35. Shawn O. PearceMay 11, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.