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 6d60f5d74..9b39d52a2 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> { private boolean startSpecified = false; + private final List pathFilters = new ArrayList(); + /** * @param repo */ @@ -96,6 +102,8 @@ public class LogCommand extends GitCommand> { public Iterable 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> { 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 {