]> source.dussan.org Git - jgit.git/commitdiff
Allow client of Add command to set a WorkingTreeIterator 66/1166/2
authorStefan Lay <stefan.lay@sap.com>
Thu, 22 Jul 2010 12:57:00 +0000 (14:57 +0200)
committerStefan Lay <stefan.lay@sap.com>
Thu, 22 Jul 2010 12:57:00 +0000 (14:57 +0200)
This is e.g. useful when a client of the AddCommand has
additional rules to ignore files. In Eclipse a resource can
be set to derived or be excluded by preferences.

Change-Id: I6c47e54a1ce26315faf5ed0723298ad2c2db197c
Signed-off-by: Stefan Lay <stefan.lay@sap.com>
org.eclipse.jgit/src/org/eclipse/jgit/api/AddCommand.java

index 8dbbb4063f9815021f7cfc1d9a583571f6a40b56..157b85f9c99aaf583b1690026829561a07cd948a 100644 (file)
@@ -58,6 +58,7 @@ import org.eclipse.jgit.lib.ObjectWriter;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.treewalk.FileTreeIterator;
 import org.eclipse.jgit.treewalk.TreeWalk;
+import org.eclipse.jgit.treewalk.WorkingTreeIterator;
 import org.eclipse.jgit.treewalk.filter.PathFilterGroup;
 
 /**
@@ -73,6 +74,8 @@ public class AddCommand extends GitCommand<DirCache> {
 
        private Collection<String> filepatterns;
 
+       private WorkingTreeIterator workingTreeIterator;
+
        /**
         *
         * @param repo
@@ -96,6 +99,16 @@ public class AddCommand extends GitCommand<DirCache> {
                return this;
        }
 
+       /**
+        * Allow clients to provide their own implementation of a FileTreeIterator
+        * @param f
+        * @return {@code this}
+        */
+       public AddCommand setWorkingTreeIterator(WorkingTreeIterator f) {
+               workingTreeIterator = f;
+               return this;
+       }
+
        /**
         * Executes the {@code Add} command. Each instance of this class should only
         * be used for one invocation of the command. Don't call this method twice
@@ -122,8 +135,9 @@ public class AddCommand extends GitCommand<DirCache> {
                        final TreeWalk tw = new TreeWalk(repo);
                        tw.reset();
                        tw.addTree(new DirCacheBuildIterator(builder));
-                       FileTreeIterator fileTreeIterator = new FileTreeIterator(repo);
-                       tw.addTree(fileTreeIterator);
+                       if (workingTreeIterator == null)
+                               workingTreeIterator = new FileTreeIterator(repo);
+                       tw.addTree(workingTreeIterator);
                        tw.setRecursive(true);
                        if (!addAll)
                                tw.setFilter(PathFilterGroup.createFromStrings(filepatterns));
@@ -134,7 +148,7 @@ public class AddCommand extends GitCommand<DirCache> {
                                String path = tw.getPathString();
 
                                final File file = new File(repo.getWorkDir(), path);
-                               FileTreeIterator f = tw.getTree(1, FileTreeIterator.class);
+                               WorkingTreeIterator f = tw.getTree(1, WorkingTreeIterator.class);
                                if (tw.getTree(0, DirCacheIterator.class) == null &&
                                                f != null && f.isEntryIgnored()) {
                                        // file is not in index but is ignored, do nothing