diff options
author | Chris Aniszczyk <caniszczyk@gmail.com> | 2011-03-17 14:30:55 -0500 |
---|---|---|
committer | Chris Aniszczyk <caniszczyk@gmail.com> | 2011-03-17 14:47:41 -0500 |
commit | a443043080b23b79ddaf074db5dcc56a9661d110 (patch) | |
tree | d2e06f2dfe7116e1f8d0a9ea6d1859e41fe806b8 | |
parent | 04f7acb7e7c667b2a91cff2fe63c18df34924757 (diff) | |
download | jgit-a443043080b23b79ddaf074db5dcc56a9661d110.tar.gz jgit-a443043080b23b79ddaf074db5dcc56a9661d110.zip |
Add path filtering to LogCommand
Bug: 340049
Change-Id: I825b93b3412a3041aca225962fc8463a8f180650
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java index 6d60f5d74f..9b39d52a2a 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java @@ -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 { |