Browse Source

Fix path filtering in LogCommand

Bug: 346257
Change-Id: Ib897e1b4962162da9670164479a844aeea7dfcd1
Signed-off-by: Piotr Janik <janikpiotrek@gmail.com>
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
stable-1.0
Piotr Janik 14 years ago committed by Chris Aniszczyk
parent
commit
7449b9a297
  1. 55
      org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java
  2. 5
      org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java

55
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java

@ -50,7 +50,6 @@ import static org.junit.Assert.fail;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import org.eclipse.jgit.api.errors.ConcurrentRefUpdateException;
import org.eclipse.jgit.api.errors.JGitInternalException;
import org.eclipse.jgit.api.errors.NoFilepatternException;
@ -112,6 +111,60 @@ public class CommitAndLogCommandTests extends RepositoryTestCase {
assertTrue(reader.getLastEntry().getComment().startsWith("commit:"));
}
@Test
public void testLogWithFilter() throws IOException, NoFilepatternException,
NoHeadException, NoMessageException, ConcurrentRefUpdateException,
JGitInternalException, WrongRepositoryStateException {
Git git = new Git(db);
// create first file
File file = new File(db.getWorkTree(), "a.txt");
FileUtils.createNewFile(file);
PrintWriter writer = new PrintWriter(file);
writer.print("content1");
writer.close();
// First commit - a.txt file
git.add().addFilepattern("a.txt").call();
git.commit().setMessage("commit1").setCommitter(committer).call();
// create second file
file = new File(db.getWorkTree(), "b.txt");
FileUtils.createNewFile(file);
writer = new PrintWriter(file);
writer.print("content2");
writer.close();
// Second commit - b.txt file
git.add().addFilepattern("b.txt").call();
git.commit().setMessage("commit2").setCommitter(committer).call();
// First log - a.txt filter
int count = 0;
for (RevCommit c : git.log().addPath("a.txt").call()) {
assertEquals("commit1", c.getFullMessage());
count++;
}
assertEquals(1, count);
// Second log - b.txt filter
count = 0;
for (RevCommit c : git.log().addPath("b.txt").call()) {
assertEquals("commit2", c.getFullMessage());
count++;
}
assertEquals(1, count);
// Third log - without filter
count = 0;
for (RevCommit c : git.log().call()) {
assertEquals(committer, c.getCommitterIdent());
count++;
}
assertEquals(2, count);
}
// try to do a commit without specifying a message. Should fail!
@Test
public void testWrongParams() throws UnmergedPathException,

5
org.eclipse.jgit/src/org/eclipse/jgit/api/LogCommand.java

@ -58,8 +58,10 @@ 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.AndTreeFilter;
import org.eclipse.jgit.treewalk.filter.PathFilter;
import org.eclipse.jgit.treewalk.filter.PathFilterGroup;
import org.eclipse.jgit.treewalk.filter.TreeFilter;
/**
* A class used to execute a {@code Log} command. It has setters for all
@ -103,7 +105,8 @@ public class LogCommand extends GitCommand<Iterable<RevCommit>> {
JGitInternalException {
checkCallable();
if (pathFilters.size() > 0)
walk.setTreeFilter(PathFilterGroup.create(pathFilters));
walk.setTreeFilter(AndTreeFilter.create(
PathFilterGroup.create(pathFilters), TreeFilter.ANY_DIFF));
if (!startSpecified) {
try {
ObjectId headId = repo.resolve(Constants.HEAD);

Loading…
Cancel
Save