|
|
@@ -44,19 +44,28 @@ package org.eclipse.jgit.api; |
|
|
|
|
|
|
|
import static org.junit.Assert.assertEquals; |
|
|
|
|
|
|
|
import java.io.ByteArrayOutputStream; |
|
|
|
import java.io.File; |
|
|
|
import java.io.IOException; |
|
|
|
import java.io.OutputStream; |
|
|
|
import java.util.List; |
|
|
|
|
|
|
|
import org.eclipse.jgit.diff.DiffEntry; |
|
|
|
import org.eclipse.jgit.diff.DiffEntry.ChangeType; |
|
|
|
import org.eclipse.jgit.lib.ObjectId; |
|
|
|
import org.eclipse.jgit.lib.ObjectReader; |
|
|
|
import org.eclipse.jgit.lib.RepositoryTestCase; |
|
|
|
import org.eclipse.jgit.revwalk.RevWalk; |
|
|
|
import org.eclipse.jgit.treewalk.AbstractTreeIterator; |
|
|
|
import org.eclipse.jgit.treewalk.CanonicalTreeParser; |
|
|
|
import org.eclipse.jgit.treewalk.filter.PathFilter; |
|
|
|
import org.junit.Test; |
|
|
|
|
|
|
|
public class DiffCommandTest extends RepositoryTestCase { |
|
|
|
@Test |
|
|
|
public void testDiffModified() throws Exception { |
|
|
|
write(new File(db.getDirectory().getParent(), "test.txt"), "test"); |
|
|
|
File folder = new File(db.getDirectory().getParent(), "folder"); |
|
|
|
write(new File(db.getWorkTree(), "test.txt"), "test"); |
|
|
|
File folder = new File(db.getWorkTree(), "folder"); |
|
|
|
folder.mkdir(); |
|
|
|
write(new File(folder, "folder.txt"), "folder"); |
|
|
|
Git git = new Git(db); |
|
|
@@ -64,7 +73,8 @@ public class DiffCommandTest extends RepositoryTestCase { |
|
|
|
git.commit().setMessage("Initial commit").call(); |
|
|
|
write(new File(folder, "folder.txt"), "folder change"); |
|
|
|
|
|
|
|
List<DiffEntry> entries = git.diff().call(); |
|
|
|
OutputStream out = new ByteArrayOutputStream(); |
|
|
|
List<DiffEntry> entries = git.diff().setOutputStream(out).call(); |
|
|
|
assertEquals(1, entries.size()); |
|
|
|
assertEquals(ChangeType.MODIFY, entries.get(0) |
|
|
|
.getChangeType()); |
|
|
@@ -72,12 +82,24 @@ public class DiffCommandTest extends RepositoryTestCase { |
|
|
|
.getOldPath()); |
|
|
|
assertEquals("folder/folder.txt", entries.get(0) |
|
|
|
.getNewPath()); |
|
|
|
|
|
|
|
String actual = out.toString(); |
|
|
|
String expected = "diff --git a/folder/folder.txt b/folder/folder.txt\n" |
|
|
|
+ "index 0119635..95c4c65 100644\n" |
|
|
|
+ "--- a/folder/folder.txt\n" |
|
|
|
+ "+++ b/folder/folder.txt\n" |
|
|
|
+ "@@ -1 +1 @@\n" |
|
|
|
+ "-folder\n" |
|
|
|
+ "\\ No newline at end of file\n" |
|
|
|
+ "+folder change\n" |
|
|
|
+ "\\ No newline at end of file\n"; |
|
|
|
assertEquals(expected.toString(), actual); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testDiffCached() throws Exception { |
|
|
|
write(new File(db.getDirectory().getParent(), "test.txt"), "test"); |
|
|
|
File folder = new File(db.getDirectory().getParent(), "folder"); |
|
|
|
write(new File(db.getWorkTree(), "test.txt"), "test"); |
|
|
|
File folder = new File(db.getWorkTree(), "folder"); |
|
|
|
folder.mkdir(); |
|
|
|
Git git = new Git(db); |
|
|
|
git.add().addFilepattern(".").call(); |
|
|
@@ -85,7 +107,9 @@ public class DiffCommandTest extends RepositoryTestCase { |
|
|
|
write(new File(folder, "folder.txt"), "folder"); |
|
|
|
git.add().addFilepattern(".").call(); |
|
|
|
|
|
|
|
List<DiffEntry> entries = git.diff().setCached(true).call(); |
|
|
|
OutputStream out = new ByteArrayOutputStream(); |
|
|
|
List<DiffEntry> entries = git.diff().setOutputStream(out) |
|
|
|
.setCached(true).call(); |
|
|
|
assertEquals(1, entries.size()); |
|
|
|
assertEquals(ChangeType.ADD, entries.get(0) |
|
|
|
.getChangeType()); |
|
|
@@ -93,5 +117,79 @@ public class DiffCommandTest extends RepositoryTestCase { |
|
|
|
.getOldPath()); |
|
|
|
assertEquals("folder/folder.txt", entries.get(0) |
|
|
|
.getNewPath()); |
|
|
|
|
|
|
|
String actual = out.toString(); |
|
|
|
String expected = "diff --git a/folder/folder.txt b/folder/folder.txt\n" |
|
|
|
+ "new file mode 100644\n" |
|
|
|
+ "index 0000000..0119635\n" |
|
|
|
+ "--- /dev/null\n" |
|
|
|
+ "+++ b/folder/folder.txt\n" |
|
|
|
+ "@@ -0,0 +1 @@\n" |
|
|
|
+ "+folder\n" |
|
|
|
+ "\\ No newline at end of file\n"; |
|
|
|
assertEquals(expected.toString(), actual); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testDiffTwoCommits() throws Exception { |
|
|
|
write(new File(db.getWorkTree(), "test.txt"), "test"); |
|
|
|
File folder = new File(db.getWorkTree(), "folder"); |
|
|
|
folder.mkdir(); |
|
|
|
write(new File(folder, "folder.txt"), "folder"); |
|
|
|
Git git = new Git(db); |
|
|
|
git.add().addFilepattern(".").call(); |
|
|
|
git.commit().setMessage("Initial commit").call(); |
|
|
|
write(new File(folder, "folder.txt"), "folder change"); |
|
|
|
git.add().addFilepattern(".").call(); |
|
|
|
git.commit().setMessage("second commit").call(); |
|
|
|
write(new File(folder, "folder.txt"), "second folder change"); |
|
|
|
git.add().addFilepattern(".").call(); |
|
|
|
git.commit().setMessage("third commit").call(); |
|
|
|
|
|
|
|
// bad filter |
|
|
|
DiffCommand diff = git.diff().setShowNameAndStatusOnly(true) |
|
|
|
.setPathFilter(PathFilter.create("test.txt")) |
|
|
|
.setOldTree(getTreeIterator("HEAD^^")) |
|
|
|
.setNewTree(getTreeIterator("HEAD^")); |
|
|
|
List<DiffEntry> entries = diff.call(); |
|
|
|
assertEquals(0, entries.size()); |
|
|
|
|
|
|
|
// no filter, two commits |
|
|
|
OutputStream out = new ByteArrayOutputStream(); |
|
|
|
diff = git.diff().setOutputStream(out) |
|
|
|
.setOldTree(getTreeIterator("HEAD^^")) |
|
|
|
.setNewTree(getTreeIterator("HEAD^")); |
|
|
|
entries = diff.call(); |
|
|
|
assertEquals(1, entries.size()); |
|
|
|
assertEquals(ChangeType.MODIFY, entries.get(0).getChangeType()); |
|
|
|
assertEquals("folder/folder.txt", entries.get(0).getOldPath()); |
|
|
|
assertEquals("folder/folder.txt", entries.get(0).getNewPath()); |
|
|
|
|
|
|
|
String actual = out.toString(); |
|
|
|
String expected = "diff --git a/folder/folder.txt b/folder/folder.txt\n" |
|
|
|
+ "index 0119635..95c4c65 100644\n" |
|
|
|
+ "--- a/folder/folder.txt\n" |
|
|
|
+ "+++ b/folder/folder.txt\n" |
|
|
|
+ "@@ -1 +1 @@\n" |
|
|
|
+ "-folder\n" |
|
|
|
+ "\\ No newline at end of file\n" |
|
|
|
+ "+folder change\n" |
|
|
|
+ "\\ No newline at end of file\n"; |
|
|
|
assertEquals(expected.toString(), actual); |
|
|
|
} |
|
|
|
|
|
|
|
private AbstractTreeIterator getTreeIterator(String name) |
|
|
|
throws IOException { |
|
|
|
final ObjectId id = db.resolve(name); |
|
|
|
if (id == null) |
|
|
|
throw new IllegalArgumentException(name); |
|
|
|
final CanonicalTreeParser p = new CanonicalTreeParser(); |
|
|
|
final ObjectReader or = db.newObjectReader(); |
|
|
|
try { |
|
|
|
p.reset(or, new RevWalk(db).parseTree(id)); |
|
|
|
return p; |
|
|
|
} finally { |
|
|
|
or.release(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |