]> source.dussan.org Git - jgit.git/commitdiff
Add path filtering to LogCommand 67/2767/2
authorChris Aniszczyk <caniszczyk@gmail.com>
Thu, 17 Mar 2011 19:30:55 +0000 (14:30 -0500)
committerChris Aniszczyk <caniszczyk@gmail.com>
Thu, 17 Mar 2011 19:47:41 +0000 (14:47 -0500)
Bug: 340049
Change-Id: I825b93b3412a3041aca225962fc8463a8f180650
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java

index 6d60f5d74fa2c47cd52058cd84224c440772cb19..9b39d52a2a3b43bcb508a7447ecbc54778e42454 100644 (file)
@@ -44,6 +44,8 @@ package org.eclipse.jgit.api;
 
 import java.io.IOException;
 import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.eclipse.jgit.JGitText;
 import org.eclipse.jgit.api.errors.JGitInternalException;
@@ -56,6 +58,8 @@ import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.eclipse.jgit.revwalk.RevWalk;
+import org.eclipse.jgit.treewalk.filter.PathFilter;
+import org.eclipse.jgit.treewalk.filter.PathFilterGroup;
 
 /**
  * A class used to execute a {@code Log} command. It has setters for all
@@ -76,6 +80,8 @@ public class LogCommand extends GitCommand<Iterable<RevCommit>> {
 
        private boolean startSpecified = false;
 
+       private final List<PathFilter> pathFilters = new ArrayList<PathFilter>();
+
        /**
         * @param repo
         */
@@ -96,6 +102,8 @@ public class LogCommand extends GitCommand<Iterable<RevCommit>> {
        public Iterable<RevCommit> call() throws NoHeadException,
                        JGitInternalException {
                checkCallable();
+               if (pathFilters.size() > 0)
+                       walk.setTreeFilter(PathFilterGroup.create(pathFilters));
                if (!startSpecified) {
                        try {
                                ObjectId headId = repo.resolve(Constants.HEAD);
@@ -202,6 +210,21 @@ public class LogCommand extends GitCommand<Iterable<RevCommit>> {
                return not(since).add(until);
        }
 
+       /**
+        * Show only commits that affect any of the specified paths. The path must
+        * either name a file or a directory exactly. Note that regex expressions or
+        * wildcards are not supported.
+        *
+        * @param path
+        *            a path is relative to the top level of the repository
+        * @return {@code this}
+        */
+       public LogCommand addPath(String path) {
+               checkCallable();
+               pathFilters.add(PathFilter.create(path));
+               return this;
+       }
+
        private LogCommand add(boolean include, AnyObjectId start)
                        throws MissingObjectException, IncorrectObjectTypeException,
                        JGitInternalException {