Merge branch 'stable-4.2'

* stable-4.2:
  RepoProject: Fix warnings about variable hiding
  RepoTest: Open Git in try-with-resources
  RepositoryResolveTest: Open Git in try-with-resource
  RepositoryTestCase: Open autocloseable types in try-with-resource
  ResetCommandTest: Use Git member in testHardResetAfterSquashMerge
  ResolveMergerTest: Open Git in try-with-resource
  RevCommitListTest: Open Git and RevWalk in try-with-resource
  RevCommitParseTest: Open ObjectInserter.Formatter in try-with-resource
  RevObjectTest: Open RevWalk in try-with-resource
  RevTagParseTest: Open ObjectInserter.Formatter in try-with-resource
  RevertCommandTest: Open Git in try-with-resource
  SquashMessageFormatterTest: Open git in try-with-resource
  StatusCommandTest: Open Git in try-with-resource
  SubmoduleAddTest: Open Git in try-with-resource
  SymlinksTest: Open git and TreeWalk in try-with-resource
  T0003_BasicTest: Open autocloseable types in try-with-resource
  TextHashFunctions: Fix warnings about variable hiding
  TreeFilterTest: Open TreeWalk in try-with-resource
  TreeWalkJava7Test: Open TreeWalk in try-with-resource
  Fix diff for added and removed submodule

Change-Id: If3ecc63f6dfac55474d3c1dd2f4105371f3d24fb
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
This commit is contained in:
Matthias Sohn 2016-02-10 00:50:41 +01:00
commit 28e2fed761
21 changed files with 802 additions and 696 deletions

View File

@ -401,8 +401,7 @@ protected File writeTrashFiles(boolean ensureDistinctTimestamps,
* @return the created commit
*/
protected RevCommit commitFile(String filename, String contents, String branch) {
try {
Git git = new Git(db);
try (Git git = new Git(db)) {
Repository repo = git.getRepository();
String originalBranch = repo.getFullBranch();
boolean empty = repo.resolve(Constants.HEAD) == null;
@ -443,8 +442,10 @@ protected DirCacheEntry createEntry(final String path, final FileMode mode,
final int stage, final String content) {
final DirCacheEntry entry = new DirCacheEntry(path, stage);
entry.setFileMode(mode);
entry.setObjectId(new ObjectInserter.Formatter().idFor(
Constants.OBJ_BLOB, Constants.encode(content)));
try (ObjectInserter.Formatter formatter = new ObjectInserter.Formatter()) {
entry.setObjectId(formatter.idFor(
Constants.OBJ_BLOB, Constants.encode(content)));
}
return entry;
}

View File

@ -74,28 +74,32 @@ public void setUp() throws Exception {
super.setUp();
defaultDb = createWorkRepository();
Git git = new Git(defaultDb);
JGitTestUtil.writeTrashFile(defaultDb, "hello.txt", "world");
git.add().addFilepattern("hello.txt").call();
git.commit().setMessage("Initial commit").call();
try (Git git = new Git(defaultDb)) {
JGitTestUtil.writeTrashFile(defaultDb, "hello.txt", "world");
git.add().addFilepattern("hello.txt").call();
git.commit().setMessage("Initial commit").call();
}
notDefaultDb = createWorkRepository();
git = new Git(notDefaultDb);
JGitTestUtil.writeTrashFile(notDefaultDb, "world.txt", "hello");
git.add().addFilepattern("world.txt").call();
git.commit().setMessage("Initial commit").call();
try (Git git = new Git(notDefaultDb)) {
JGitTestUtil.writeTrashFile(notDefaultDb, "world.txt", "hello");
git.add().addFilepattern("world.txt").call();
git.commit().setMessage("Initial commit").call();
}
groupADb = createWorkRepository();
git = new Git(groupADb);
JGitTestUtil.writeTrashFile(groupADb, "a.txt", "world");
git.add().addFilepattern("a.txt").call();
git.commit().setMessage("Initial commit").call();
try (Git git = new Git(groupADb)) {
JGitTestUtil.writeTrashFile(groupADb, "a.txt", "world");
git.add().addFilepattern("a.txt").call();
git.commit().setMessage("Initial commit").call();
}
groupBDb = createWorkRepository();
git = new Git(groupBDb);
JGitTestUtil.writeTrashFile(groupBDb, "b.txt", "world");
git.add().addFilepattern("b.txt").call();
git.commit().setMessage("Initial commit").call();
try (Git git = new Git(groupBDb)) {
JGitTestUtil.writeTrashFile(groupBDb, "b.txt", "world");
git.add().addFilepattern("b.txt").call();
git.commit().setMessage("Initial commit").call();
}
resolveRelativeUris();
}

View File

@ -286,25 +286,25 @@ protected void run() throws Exception {
else
rb.findGitDir(dir);
Repository db = rb.build();
Repository repo = rb.build();
try {
run(db);
run(repo);
} finally {
db.close();
repo.close();
}
}
}
private void run(Repository db) throws Exception {
private void run(Repository repo) throws Exception {
List<Function> all = init();
long fileCnt = 0;
long lineCnt = 0;
try (ObjectReader or = db.newObjectReader();
try (ObjectReader or = repo.newObjectReader();
RevWalk rw = new RevWalk(or);
TreeWalk tw = new TreeWalk(or)) {
final MutableObjectId id = new MutableObjectId();
tw.reset(rw.parseTree(db.resolve(Constants.HEAD)));
tw.reset(rw.parseTree(repo.resolve(Constants.HEAD)));
tw.setRecursive(true);
while (tw.next()) {
@ -341,7 +341,7 @@ private void run(Repository db) throws Exception {
}
}
File directory = db.getDirectory();
File directory = repo.getDirectory();
if (directory != null) {
String name = directory.getName();
File parent = directory.getParentFile();

View File

@ -463,24 +463,24 @@ public void testHardResetOnTag() throws Exception {
@Test
public void testHardResetAfterSquashMerge() throws Exception {
Git g = new Git(db);
git = new Git(db);
writeTrashFile("file1", "file1");
g.add().addFilepattern("file1").call();
RevCommit first = g.commit().setMessage("initial commit").call();
git.add().addFilepattern("file1").call();
RevCommit first = git.commit().setMessage("initial commit").call();
assertTrue(new File(db.getWorkTree(), "file1").exists());
createBranch(first, "refs/heads/branch1");
checkoutBranch("refs/heads/branch1");
writeTrashFile("file2", "file2");
g.add().addFilepattern("file2").call();
g.commit().setMessage("second commit").call();
git.add().addFilepattern("file2").call();
git.commit().setMessage("second commit").call();
assertTrue(new File(db.getWorkTree(), "file2").exists());
checkoutBranch("refs/heads/master");
MergeResult result = g.merge()
MergeResult result = git.merge()
.include(db.exactRef("refs/heads/branch1"))
.setSquash(true)
.call();
@ -489,7 +489,7 @@ public void testHardResetAfterSquashMerge() throws Exception {
result.getMergeStatus());
assertNotNull(db.readSquashCommitMsg());
assertSameAsHead(g.reset().setMode(ResetType.HARD)
assertSameAsHead(git.reset().setMode(ResetType.HARD)
.setRef(first.getName()).call());
assertNull(db.readSquashCommitMsg());

View File

@ -74,303 +74,309 @@ public class RevertCommandTest extends RepositoryTestCase {
@Test
public void testRevert() throws IOException, JGitInternalException,
GitAPIException {
Git git = new Git(db);
try (Git git = new Git(db)) {
writeTrashFile("a", "first line\nsec. line\nthird line\n");
git.add().addFilepattern("a").call();
git.commit().setMessage("create a").call();
writeTrashFile("a", "first line\nsec. line\nthird line\n");
git.add().addFilepattern("a").call();
git.commit().setMessage("create a").call();
writeTrashFile("b", "content\n");
git.add().addFilepattern("b").call();
git.commit().setMessage("create b").call();
writeTrashFile("b", "content\n");
git.add().addFilepattern("b").call();
git.commit().setMessage("create b").call();
writeTrashFile("a", "first line\nsec. line\nthird line\nfourth line\n");
git.add().addFilepattern("a").call();
git.commit().setMessage("enlarged a").call();
writeTrashFile("a", "first line\nsec. line\nthird line\nfourth line\n");
git.add().addFilepattern("a").call();
git.commit().setMessage("enlarged a").call();
writeTrashFile("a",
"first line\nsecond line\nthird line\nfourth line\n");
git.add().addFilepattern("a").call();
RevCommit fixingA = git.commit().setMessage("fixed a").call();
writeTrashFile("a",
"first line\nsecond line\nthird line\nfourth line\n");
git.add().addFilepattern("a").call();
RevCommit fixingA = git.commit().setMessage("fixed a").call();
writeTrashFile("b", "first line\n");
git.add().addFilepattern("b").call();
git.commit().setMessage("fixed b").call();
writeTrashFile("b", "first line\n");
git.add().addFilepattern("b").call();
git.commit().setMessage("fixed b").call();
git.revert().include(fixingA).call();
git.revert().include(fixingA).call();
assertEquals(RepositoryState.SAFE, db.getRepositoryState());
assertEquals(RepositoryState.SAFE, db.getRepositoryState());
assertTrue(new File(db.getWorkTree(), "b").exists());
checkFile(new File(db.getWorkTree(), "a"),
"first line\nsec. line\nthird line\nfourth line\n");
Iterator<RevCommit> history = git.log().call().iterator();
RevCommit revertCommit = history.next();
String expectedMessage = "Revert \"fixed a\"\n\n"
+ "This reverts commit " + fixingA.getId().getName() + ".\n";
assertEquals(expectedMessage, revertCommit.getFullMessage());
assertEquals("fixed b", history.next().getFullMessage());
assertEquals("fixed a", history.next().getFullMessage());
assertEquals("enlarged a", history.next().getFullMessage());
assertEquals("create b", history.next().getFullMessage());
assertEquals("create a", history.next().getFullMessage());
assertFalse(history.hasNext());
assertTrue(new File(db.getWorkTree(), "b").exists());
checkFile(new File(db.getWorkTree(), "a"),
"first line\nsec. line\nthird line\nfourth line\n");
Iterator<RevCommit> history = git.log().call().iterator();
RevCommit revertCommit = history.next();
String expectedMessage = "Revert \"fixed a\"\n\n"
+ "This reverts commit " + fixingA.getId().getName() + ".\n";
assertEquals(expectedMessage, revertCommit.getFullMessage());
assertEquals("fixed b", history.next().getFullMessage());
assertEquals("fixed a", history.next().getFullMessage());
assertEquals("enlarged a", history.next().getFullMessage());
assertEquals("create b", history.next().getFullMessage());
assertEquals("create a", history.next().getFullMessage());
assertFalse(history.hasNext());
ReflogReader reader = db.getReflogReader(Constants.HEAD);
assertTrue(reader.getLastEntry().getComment()
.startsWith("revert: Revert \""));
reader = db.getReflogReader(db.getBranch());
assertTrue(reader.getLastEntry().getComment()
.startsWith("revert: Revert \""));
ReflogReader reader = db.getReflogReader(Constants.HEAD);
assertTrue(reader.getLastEntry().getComment()
.startsWith("revert: Revert \""));
reader = db.getReflogReader(db.getBranch());
assertTrue(reader.getLastEntry().getComment()
.startsWith("revert: Revert \""));
}
}
@Test
public void testRevertMultiple() throws IOException, JGitInternalException,
GitAPIException {
Git git = new Git(db);
try (Git git = new Git(db)) {
writeTrashFile("a", "first\n");
git.add().addFilepattern("a").call();
git.commit().setMessage("add first").call();
writeTrashFile("a", "first\n");
git.add().addFilepattern("a").call();
git.commit().setMessage("add first").call();
writeTrashFile("a", "first\nsecond\n");
git.add().addFilepattern("a").call();
RevCommit secondCommit = git.commit().setMessage("add second").call();
writeTrashFile("a", "first\nsecond\n");
git.add().addFilepattern("a").call();
RevCommit secondCommit = git.commit().setMessage("add second").call();
writeTrashFile("a", "first\nsecond\nthird\n");
git.add().addFilepattern("a").call();
RevCommit thirdCommit = git.commit().setMessage("add third").call();
writeTrashFile("a", "first\nsecond\nthird\n");
git.add().addFilepattern("a").call();
RevCommit thirdCommit = git.commit().setMessage("add third").call();
git.revert().include(thirdCommit).include(secondCommit).call();
git.revert().include(thirdCommit).include(secondCommit).call();
assertEquals(RepositoryState.SAFE, db.getRepositoryState());
assertEquals(RepositoryState.SAFE, db.getRepositoryState());
checkFile(new File(db.getWorkTree(), "a"), "first\n");
Iterator<RevCommit> history = git.log().call().iterator();
RevCommit revertCommit = history.next();
String expectedMessage = "Revert \"add second\"\n\n"
+ "This reverts commit "
+ secondCommit.getId().getName() + ".\n";
assertEquals(expectedMessage, revertCommit.getFullMessage());
revertCommit = history.next();
expectedMessage = "Revert \"add third\"\n\n"
+ "This reverts commit " + thirdCommit.getId().getName()
+ ".\n";
assertEquals(expectedMessage, revertCommit.getFullMessage());
assertEquals("add third", history.next().getFullMessage());
assertEquals("add second", history.next().getFullMessage());
assertEquals("add first", history.next().getFullMessage());
assertFalse(history.hasNext());
checkFile(new File(db.getWorkTree(), "a"), "first\n");
Iterator<RevCommit> history = git.log().call().iterator();
RevCommit revertCommit = history.next();
String expectedMessage = "Revert \"add second\"\n\n"
+ "This reverts commit "
+ secondCommit.getId().getName() + ".\n";
assertEquals(expectedMessage, revertCommit.getFullMessage());
revertCommit = history.next();
expectedMessage = "Revert \"add third\"\n\n"
+ "This reverts commit " + thirdCommit.getId().getName()
+ ".\n";
assertEquals(expectedMessage, revertCommit.getFullMessage());
assertEquals("add third", history.next().getFullMessage());
assertEquals("add second", history.next().getFullMessage());
assertEquals("add first", history.next().getFullMessage());
assertFalse(history.hasNext());
ReflogReader reader = db.getReflogReader(Constants.HEAD);
assertTrue(reader.getLastEntry().getComment()
.startsWith("revert: Revert \""));
reader = db.getReflogReader(db.getBranch());
assertTrue(reader.getLastEntry().getComment()
.startsWith("revert: Revert \""));
ReflogReader reader = db.getReflogReader(Constants.HEAD);
assertTrue(reader.getLastEntry().getComment()
.startsWith("revert: Revert \""));
reader = db.getReflogReader(db.getBranch());
assertTrue(reader.getLastEntry().getComment()
.startsWith("revert: Revert \""));
}
}
@Test
public void testRevertMultipleWithFail() throws IOException,
JGitInternalException, GitAPIException {
Git git = new Git(db);
try (Git git = new Git(db)) {
writeTrashFile("a", "first\n");
git.add().addFilepattern("a").call();
git.commit().setMessage("add first").call();
writeTrashFile("a", "first\n");
git.add().addFilepattern("a").call();
git.commit().setMessage("add first").call();
writeTrashFile("a", "first\nsecond\n");
git.add().addFilepattern("a").call();
RevCommit secondCommit = git.commit().setMessage("add second").call();
writeTrashFile("a", "first\nsecond\n");
git.add().addFilepattern("a").call();
RevCommit secondCommit = git.commit().setMessage("add second").call();
writeTrashFile("a", "first\nsecond\nthird\n");
git.add().addFilepattern("a").call();
git.commit().setMessage("add third").call();
writeTrashFile("a", "first\nsecond\nthird\n");
git.add().addFilepattern("a").call();
git.commit().setMessage("add third").call();
writeTrashFile("a", "first\nsecond\nthird\nfourth\n");
git.add().addFilepattern("a").call();
RevCommit fourthCommit = git.commit().setMessage("add fourth").call();
writeTrashFile("a", "first\nsecond\nthird\nfourth\n");
git.add().addFilepattern("a").call();
RevCommit fourthCommit = git.commit().setMessage("add fourth").call();
git.revert().include(fourthCommit).include(secondCommit).call();
git.revert().include(fourthCommit).include(secondCommit).call();
// not SAFE because it failed
assertEquals(RepositoryState.REVERTING, db.getRepositoryState());
// not SAFE because it failed
assertEquals(RepositoryState.REVERTING, db.getRepositoryState());
checkFile(new File(db.getWorkTree(), "a"), "first\n"
+ "<<<<<<< master\n" + "second\n" + "third\n" + "=======\n"
+ ">>>>>>> " + secondCommit.getId().abbreviate(7).name()
+ " add second\n");
Iterator<RevCommit> history = git.log().call().iterator();
RevCommit revertCommit = history.next();
String expectedMessage = "Revert \"add fourth\"\n\n"
+ "This reverts commit " + fourthCommit.getId().getName()
+ ".\n";
assertEquals(expectedMessage, revertCommit.getFullMessage());
assertEquals("add fourth", history.next().getFullMessage());
assertEquals("add third", history.next().getFullMessage());
assertEquals("add second", history.next().getFullMessage());
assertEquals("add first", history.next().getFullMessage());
assertFalse(history.hasNext());
checkFile(new File(db.getWorkTree(), "a"), "first\n"
+ "<<<<<<< master\n" + "second\n" + "third\n" + "=======\n"
+ ">>>>>>> " + secondCommit.getId().abbreviate(7).name()
+ " add second\n");
Iterator<RevCommit> history = git.log().call().iterator();
RevCommit revertCommit = history.next();
String expectedMessage = "Revert \"add fourth\"\n\n"
+ "This reverts commit " + fourthCommit.getId().getName()
+ ".\n";
assertEquals(expectedMessage, revertCommit.getFullMessage());
assertEquals("add fourth", history.next().getFullMessage());
assertEquals("add third", history.next().getFullMessage());
assertEquals("add second", history.next().getFullMessage());
assertEquals("add first", history.next().getFullMessage());
assertFalse(history.hasNext());
ReflogReader reader = db.getReflogReader(Constants.HEAD);
assertTrue(reader.getLastEntry().getComment()
.startsWith("revert: Revert \""));
reader = db.getReflogReader(db.getBranch());
assertTrue(reader.getLastEntry().getComment()
.startsWith("revert: Revert \""));
ReflogReader reader = db.getReflogReader(Constants.HEAD);
assertTrue(reader.getLastEntry().getComment()
.startsWith("revert: Revert \""));
reader = db.getReflogReader(db.getBranch());
assertTrue(reader.getLastEntry().getComment()
.startsWith("revert: Revert \""));
}
}
@Test
public void testRevertDirtyIndex() throws Exception {
Git git = new Git(db);
RevCommit sideCommit = prepareRevert(git);
try (Git git = new Git(db)) {
RevCommit sideCommit = prepareRevert(git);
// modify and add file a
writeTrashFile("a", "a(modified)");
git.add().addFilepattern("a").call();
// do not commit
// modify and add file a
writeTrashFile("a", "a(modified)");
git.add().addFilepattern("a").call();
// do not commit
doRevertAndCheckResult(git, sideCommit,
MergeFailureReason.DIRTY_INDEX);
doRevertAndCheckResult(git, sideCommit,
MergeFailureReason.DIRTY_INDEX);
}
}
@Test
public void testRevertDirtyWorktree() throws Exception {
Git git = new Git(db);
RevCommit sideCommit = prepareRevert(git);
try (Git git = new Git(db)) {
RevCommit sideCommit = prepareRevert(git);
// modify file a
writeTrashFile("a", "a(modified)");
// do not add and commit
// modify file a
writeTrashFile("a", "a(modified)");
// do not add and commit
doRevertAndCheckResult(git, sideCommit,
MergeFailureReason.DIRTY_WORKTREE);
doRevertAndCheckResult(git, sideCommit,
MergeFailureReason.DIRTY_WORKTREE);
}
}
@Test
public void testRevertConflictResolution() throws Exception {
Git git = new Git(db);
RevCommit sideCommit = prepareRevert(git);
try (Git git = new Git(db)) {
RevCommit sideCommit = prepareRevert(git);
RevertCommand revert = git.revert();
RevCommit newHead = revert.include(sideCommit.getId()).call();
assertNull(newHead);
MergeResult result = revert.getFailingResult();
assertEquals(MergeStatus.CONFLICTING, result.getMergeStatus());
assertTrue(new File(db.getDirectory(), Constants.MERGE_MSG).exists());
assertEquals("Revert \"" + sideCommit.getShortMessage()
+ "\"\n\nThis reverts commit " + sideCommit.getId().getName()
+ ".\n\nConflicts:\n\ta\n",
db.readMergeCommitMsg());
assertTrue(new File(db.getDirectory(), Constants.REVERT_HEAD)
.exists());
assertEquals(sideCommit.getId(), db.readRevertHead());
assertEquals(RepositoryState.REVERTING, db.getRepositoryState());
RevertCommand revert = git.revert();
RevCommit newHead = revert.include(sideCommit.getId()).call();
assertNull(newHead);
MergeResult result = revert.getFailingResult();
assertEquals(MergeStatus.CONFLICTING, result.getMergeStatus());
assertTrue(new File(db.getDirectory(), Constants.MERGE_MSG).exists());
assertEquals("Revert \"" + sideCommit.getShortMessage()
+ "\"\n\nThis reverts commit " + sideCommit.getId().getName()
+ ".\n\nConflicts:\n\ta\n",
db.readMergeCommitMsg());
assertTrue(new File(db.getDirectory(), Constants.REVERT_HEAD)
.exists());
assertEquals(sideCommit.getId(), db.readRevertHead());
assertEquals(RepositoryState.REVERTING, db.getRepositoryState());
// Resolve
writeTrashFile("a", "a");
git.add().addFilepattern("a").call();
// Resolve
writeTrashFile("a", "a");
git.add().addFilepattern("a").call();
assertEquals(RepositoryState.REVERTING_RESOLVED,
db.getRepositoryState());
assertEquals(RepositoryState.REVERTING_RESOLVED,
db.getRepositoryState());
git.commit().setOnly("a").setMessage("resolve").call();
git.commit().setOnly("a").setMessage("resolve").call();
assertEquals(RepositoryState.SAFE, db.getRepositoryState());
assertEquals(RepositoryState.SAFE, db.getRepositoryState());
}
}
@Test
public void testRevertkConflictReset() throws Exception {
Git git = new Git(db);
try (Git git = new Git(db)) {
RevCommit sideCommit = prepareRevert(git);
RevCommit sideCommit = prepareRevert(git);
RevertCommand revert = git.revert();
RevCommit newHead = revert.include(sideCommit.getId()).call();
assertNull(newHead);
MergeResult result = revert.getFailingResult();
RevertCommand revert = git.revert();
RevCommit newHead = revert.include(sideCommit.getId()).call();
assertNull(newHead);
MergeResult result = revert.getFailingResult();
assertEquals(MergeStatus.CONFLICTING, result.getMergeStatus());
assertEquals(RepositoryState.REVERTING, db.getRepositoryState());
assertTrue(new File(db.getDirectory(), Constants.REVERT_HEAD)
.exists());
assertEquals(MergeStatus.CONFLICTING, result.getMergeStatus());
assertEquals(RepositoryState.REVERTING, db.getRepositoryState());
assertTrue(new File(db.getDirectory(), Constants.REVERT_HEAD)
.exists());
git.reset().setMode(ResetType.MIXED).setRef("HEAD").call();
git.reset().setMode(ResetType.MIXED).setRef("HEAD").call();
assertEquals(RepositoryState.SAFE, db.getRepositoryState());
assertFalse(new File(db.getDirectory(), Constants.REVERT_HEAD)
.exists());
assertEquals(RepositoryState.SAFE, db.getRepositoryState());
assertFalse(new File(db.getDirectory(), Constants.REVERT_HEAD)
.exists());
}
}
@Test
public void testRevertOverExecutableChangeOnNonExectuableFileSystem()
throws Exception {
Git git = new Git(db);
File file = writeTrashFile("test.txt", "a");
assertNotNull(git.add().addFilepattern("test.txt").call());
assertNotNull(git.commit().setMessage("commit1").call());
try (Git git = new Git(db)) {
File file = writeTrashFile("test.txt", "a");
assertNotNull(git.add().addFilepattern("test.txt").call());
assertNotNull(git.commit().setMessage("commit1").call());
assertNotNull(git.checkout().setCreateBranch(true).setName("a").call());
assertNotNull(git.checkout().setCreateBranch(true).setName("a").call());
writeTrashFile("test.txt", "b");
assertNotNull(git.add().addFilepattern("test.txt").call());
RevCommit commit2 = git.commit().setMessage("commit2").call();
assertNotNull(commit2);
writeTrashFile("test.txt", "b");
assertNotNull(git.add().addFilepattern("test.txt").call());
RevCommit commit2 = git.commit().setMessage("commit2").call();
assertNotNull(commit2);
assertNotNull(git.checkout().setName(Constants.MASTER).call());
assertNotNull(git.checkout().setName(Constants.MASTER).call());
DirCache cache = db.lockDirCache();
cache.getEntry("test.txt").setFileMode(FileMode.EXECUTABLE_FILE);
cache.write();
assertTrue(cache.commit());
cache.unlock();
DirCache cache = db.lockDirCache();
cache.getEntry("test.txt").setFileMode(FileMode.EXECUTABLE_FILE);
cache.write();
assertTrue(cache.commit());
cache.unlock();
assertNotNull(git.commit().setMessage("commit3").call());
assertNotNull(git.commit().setMessage("commit3").call());
db.getFS().setExecute(file, false);
git.getRepository()
.getConfig()
.setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
ConfigConstants.CONFIG_KEY_FILEMODE, false);
db.getFS().setExecute(file, false);
git.getRepository()
.getConfig()
.setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
ConfigConstants.CONFIG_KEY_FILEMODE, false);
RevertCommand revert = git.revert();
RevCommit newHead = revert.include(commit2).call();
assertNotNull(newHead);
RevertCommand revert = git.revert();
RevCommit newHead = revert.include(commit2).call();
assertNotNull(newHead);
}
}
@Test
public void testRevertConflictMarkers() throws Exception {
Git git = new Git(db);
RevCommit sideCommit = prepareRevert(git);
try (Git git = new Git(db)) {
RevCommit sideCommit = prepareRevert(git);
RevertCommand revert = git.revert();
RevCommit newHead = revert.include(sideCommit.getId())
.call();
assertNull(newHead);
MergeResult result = revert.getFailingResult();
assertEquals(MergeStatus.CONFLICTING, result.getMergeStatus());
RevertCommand revert = git.revert();
RevCommit newHead = revert.include(sideCommit.getId())
.call();
assertNull(newHead);
MergeResult result = revert.getFailingResult();
assertEquals(MergeStatus.CONFLICTING, result.getMergeStatus());
String expected = "<<<<<<< master\na(latest)\n=======\na\n>>>>>>> ca96c31 second master\n";
checkFile(new File(db.getWorkTree(), "a"), expected);
String expected = "<<<<<<< master\na(latest)\n=======\na\n>>>>>>> ca96c31 second master\n";
checkFile(new File(db.getWorkTree(), "a"), expected);
}
}
@Test
public void testRevertOurCommitName() throws Exception {
Git git = new Git(db);
RevCommit sideCommit = prepareRevert(git);
try (Git git = new Git(db)) {
RevCommit sideCommit = prepareRevert(git);
RevertCommand revert = git.revert();
RevCommit newHead = revert.include(sideCommit.getId())
.setOurCommitName("custom name").call();
assertNull(newHead);
MergeResult result = revert.getFailingResult();
assertEquals(MergeStatus.CONFLICTING, result.getMergeStatus());
RevertCommand revert = git.revert();
RevCommit newHead = revert.include(sideCommit.getId())
.setOurCommitName("custom name").call();
assertNull(newHead);
MergeResult result = revert.getFailingResult();
assertEquals(MergeStatus.CONFLICTING, result.getMergeStatus());
String expected = "<<<<<<< custom name\na(latest)\n=======\na\n>>>>>>> ca96c31 second master\n";
checkFile(new File(db.getWorkTree(), "a"), expected);
String expected = "<<<<<<< custom name\na(latest)\n=======\na\n>>>>>>> ca96c31 second master\n";
checkFile(new File(db.getWorkTree(), "a"), expected);
}
}
private RevCommit prepareRevert(final Git git) throws Exception {

View File

@ -61,109 +61,111 @@ public class StatusCommandTest extends RepositoryTestCase {
@Test
public void testEmptyStatus() throws NoWorkTreeException,
GitAPIException {
Git git = new Git(db);
Status stat = git.status().call();
assertEquals(0, stat.getAdded().size());
assertEquals(0, stat.getChanged().size());
assertEquals(0, stat.getMissing().size());
assertEquals(0, stat.getModified().size());
assertEquals(0, stat.getRemoved().size());
assertEquals(0, stat.getUntracked().size());
try (Git git = new Git(db)) {
Status stat = git.status().call();
assertEquals(0, stat.getAdded().size());
assertEquals(0, stat.getChanged().size());
assertEquals(0, stat.getMissing().size());
assertEquals(0, stat.getModified().size());
assertEquals(0, stat.getRemoved().size());
assertEquals(0, stat.getUntracked().size());
}
}
@Test
public void testDifferentStates() throws IOException,
NoFilepatternException, GitAPIException {
Git git = new Git(db);
writeTrashFile("a", "content of a");
writeTrashFile("b", "content of b");
writeTrashFile("c", "content of c");
git.add().addFilepattern("a").addFilepattern("b").call();
Status stat = git.status().call();
assertEquals(Sets.of("a", "b"), stat.getAdded());
assertEquals(0, stat.getChanged().size());
assertEquals(0, stat.getMissing().size());
assertEquals(0, stat.getModified().size());
assertEquals(0, stat.getRemoved().size());
assertEquals(Sets.of("c"), stat.getUntracked());
git.commit().setMessage("initial").call();
try (Git git = new Git(db)) {
writeTrashFile("a", "content of a");
writeTrashFile("b", "content of b");
writeTrashFile("c", "content of c");
git.add().addFilepattern("a").addFilepattern("b").call();
Status stat = git.status().call();
assertEquals(Sets.of("a", "b"), stat.getAdded());
assertEquals(0, stat.getChanged().size());
assertEquals(0, stat.getMissing().size());
assertEquals(0, stat.getModified().size());
assertEquals(0, stat.getRemoved().size());
assertEquals(Sets.of("c"), stat.getUntracked());
git.commit().setMessage("initial").call();
writeTrashFile("a", "modified content of a");
writeTrashFile("b", "modified content of b");
writeTrashFile("d", "content of d");
git.add().addFilepattern("a").addFilepattern("d").call();
writeTrashFile("a", "again modified content of a");
stat = git.status().call();
assertEquals(Sets.of("d"), stat.getAdded());
assertEquals(Sets.of("a"), stat.getChanged());
assertEquals(0, stat.getMissing().size());
assertEquals(Sets.of("b", "a"), stat.getModified());
assertEquals(0, stat.getRemoved().size());
assertEquals(Sets.of("c"), stat.getUntracked());
git.add().addFilepattern(".").call();
git.commit().setMessage("second").call();
writeTrashFile("a", "modified content of a");
writeTrashFile("b", "modified content of b");
writeTrashFile("d", "content of d");
git.add().addFilepattern("a").addFilepattern("d").call();
writeTrashFile("a", "again modified content of a");
stat = git.status().call();
assertEquals(Sets.of("d"), stat.getAdded());
assertEquals(Sets.of("a"), stat.getChanged());
assertEquals(0, stat.getMissing().size());
assertEquals(Sets.of("b", "a"), stat.getModified());
assertEquals(0, stat.getRemoved().size());
assertEquals(Sets.of("c"), stat.getUntracked());
git.add().addFilepattern(".").call();
git.commit().setMessage("second").call();
stat = git.status().call();
assertEquals(0, stat.getAdded().size());
assertEquals(0, stat.getChanged().size());
assertEquals(0, stat.getMissing().size());
assertEquals(0, stat.getModified().size());
assertEquals(0, stat.getRemoved().size());
assertEquals(0, stat.getUntracked().size());
stat = git.status().call();
assertEquals(0, stat.getAdded().size());
assertEquals(0, stat.getChanged().size());
assertEquals(0, stat.getMissing().size());
assertEquals(0, stat.getModified().size());
assertEquals(0, stat.getRemoved().size());
assertEquals(0, stat.getUntracked().size());
deleteTrashFile("a");
assertFalse(new File(git.getRepository().getWorkTree(), "a").exists());
git.add().addFilepattern("a").setUpdate(true).call();
writeTrashFile("a", "recreated content of a");
stat = git.status().call();
assertEquals(0, stat.getAdded().size());
assertEquals(0, stat.getChanged().size());
assertEquals(0, stat.getMissing().size());
assertEquals(0, stat.getModified().size());
assertEquals(Sets.of("a"), stat.getRemoved());
assertEquals(Sets.of("a"), stat.getUntracked());
git.commit().setMessage("t").call();
deleteTrashFile("a");
assertFalse(new File(git.getRepository().getWorkTree(), "a").exists());
git.add().addFilepattern("a").setUpdate(true).call();
writeTrashFile("a", "recreated content of a");
stat = git.status().call();
assertEquals(0, stat.getAdded().size());
assertEquals(0, stat.getChanged().size());
assertEquals(0, stat.getMissing().size());
assertEquals(0, stat.getModified().size());
assertEquals(Sets.of("a"), stat.getRemoved());
assertEquals(Sets.of("a"), stat.getUntracked());
git.commit().setMessage("t").call();
writeTrashFile("sub/a", "sub-file");
stat = git.status().call();
assertEquals(1, stat.getUntrackedFolders().size());
assertTrue(stat.getUntrackedFolders().contains("sub"));
writeTrashFile("sub/a", "sub-file");
stat = git.status().call();
assertEquals(1, stat.getUntrackedFolders().size());
assertTrue(stat.getUntrackedFolders().contains("sub"));
}
}
@Test
public void testDifferentStatesWithPaths() throws IOException,
NoFilepatternException, GitAPIException {
Git git = new Git(db);
writeTrashFile("a", "content of a");
writeTrashFile("D/b", "content of b");
writeTrashFile("D/c", "content of c");
writeTrashFile("D/D/d", "content of d");
git.add().addFilepattern(".").call();
try (Git git = new Git(db)) {
writeTrashFile("a", "content of a");
writeTrashFile("D/b", "content of b");
writeTrashFile("D/c", "content of c");
writeTrashFile("D/D/d", "content of d");
git.add().addFilepattern(".").call();
writeTrashFile("a", "new content of a");
writeTrashFile("D/b", "new content of b");
writeTrashFile("D/D/d", "new content of d");
writeTrashFile("a", "new content of a");
writeTrashFile("D/b", "new content of b");
writeTrashFile("D/D/d", "new content of d");
// filter on an not existing path
Status stat = git.status().addPath("x").call();
assertEquals(0, stat.getModified().size());
// filter on an not existing path
Status stat = git.status().addPath("x").call();
assertEquals(0, stat.getModified().size());
// filter on an existing file
stat = git.status().addPath("a").call();
assertEquals(Sets.of("a"), stat.getModified());
// filter on an existing file
stat = git.status().addPath("a").call();
assertEquals(Sets.of("a"), stat.getModified());
// filter on an existing folder
stat = git.status().addPath("D").call();
assertEquals(Sets.of("D/b", "D/D/d"), stat.getModified());
// filter on an existing folder
stat = git.status().addPath("D").call();
assertEquals(Sets.of("D/b", "D/D/d"), stat.getModified());
// filter on an existing folder and file
stat = git.status().addPath("D/D").addPath("a").call();
assertEquals(Sets.of("a", "D/D/d"), stat.getModified());
// filter on an existing folder and file
stat = git.status().addPath("D/D").addPath("a").call();
assertEquals(Sets.of("a", "D/D/d"), stat.getModified());
// do not filter at all
stat = git.status().call();
assertEquals(Sets.of("a", "D/b", "D/D/d"), stat.getModified());
// do not filter at all
stat = git.status().call();
assertEquals(Sets.of("a", "D/b", "D/D/d"), stat.getModified());
}
}
}

View File

@ -259,6 +259,68 @@ public void testCreateFileHeader_GitLink() throws Exception {
assertEquals(1, hh.toEditList().size());
}
@Test
public void testCreateFileHeader_AddGitLink() throws Exception {
ObjectId adId = blob("a\nd\n");
DiffEntry ent = DiffEntry.add("FOO", adId);
ent.newMode = FileMode.GITLINK;
FileHeader fh = df.toFileHeader(ent);
String diffHeader = "diff --git a/FOO b/FOO\n" //
+ "new file mode " + GITLINK + "\n"
+ "index "
+ ObjectId.zeroId().abbreviate(8).name()
+ ".."
+ adId.abbreviate(8).name() + "\n" //
+ "--- /dev/null\n"//
+ "+++ b/FOO\n";
assertEquals(diffHeader, RawParseUtils.decode(fh.getBuffer()));
assertEquals(1, fh.getHunks().size());
HunkHeader hh = fh.getHunks().get(0);
EditList el = hh.toEditList();
assertEquals(1, el.size());
Edit e = el.get(0);
assertEquals(0, e.getBeginA());
assertEquals(0, e.getEndA());
assertEquals(0, e.getBeginB());
assertEquals(1, e.getEndB());
assertEquals(Edit.Type.INSERT, e.getType());
}
@Test
public void testCreateFileHeader_DeleteGitLink() throws Exception {
ObjectId adId = blob("a\nd\n");
DiffEntry ent = DiffEntry.delete("FOO", adId);
ent.oldMode = FileMode.GITLINK;
FileHeader fh = df.toFileHeader(ent);
String diffHeader = "diff --git a/FOO b/FOO\n" //
+ "deleted file mode " + GITLINK + "\n"
+ "index "
+ adId.abbreviate(8).name()
+ ".."
+ ObjectId.zeroId().abbreviate(8).name() + "\n" //
+ "--- a/FOO\n"//
+ "+++ /dev/null\n";
assertEquals(diffHeader, RawParseUtils.decode(fh.getBuffer()));
assertEquals(1, fh.getHunks().size());
HunkHeader hh = fh.getHunks().get(0);
EditList el = hh.toEditList();
assertEquals(1, el.size());
Edit e = el.get(0);
assertEquals(0, e.getBeginA());
assertEquals(1, e.getEndA());
assertEquals(0, e.getBeginB());
assertEquals(0, e.getEndB());
assertEquals(Edit.Type.DELETE, e.getType());
}
@Test
public void testCreateFileHeaderWithoutIndexLine() throws Exception {
DiffEntry m = DiffEntry.modify(PATH_A);

View File

@ -354,14 +354,14 @@ public void test006_ReadUglyConfig() throws IOException,
@Test
public void test007_Open() throws IOException {
final FileRepository db2 = new FileRepository(db.getDirectory());
assertEquals(db.getDirectory(), db2.getDirectory());
assertEquals(db.getObjectDatabase().getDirectory(), db2
.getObjectDatabase().getDirectory());
assertNotSame(db.getConfig(), db2.getConfig());
try (final FileRepository db2 = new FileRepository(db.getDirectory())) {
assertEquals(db.getDirectory(), db2.getDirectory());
assertEquals(db.getObjectDatabase().getDirectory(), db2
.getObjectDatabase().getDirectory());
assertNotSame(db.getConfig(), db2.getConfig());
}
}
@SuppressWarnings("unused")
@Test
public void test008_FailOnWrongVersion() throws IOException {
final File cfg = new File(db.getDirectory(), Constants.CONFIG);
@ -370,8 +370,7 @@ public void test008_FailOnWrongVersion() throws IOException {
+ badvers + "\n";
write(cfg, configStr);
try {
new FileRepository(db.getDirectory());
try (FileRepository unused = new FileRepository(db.getDirectory())) {
fail("incorrectly opened a bad repository");
} catch (IllegalArgumentException ioe) {
assertNotNull(ioe.getMessage());
@ -533,9 +532,10 @@ public void test024_createCommitNonAscii() throws IOException {
public void test025_computeSha1NoStore() throws IOException {
byte[] data = "test025 some data, more than 16 bytes to get good coverage"
.getBytes("ISO-8859-1");
final ObjectId id = new ObjectInserter.Formatter().idFor(
Constants.OBJ_BLOB, data);
assertEquals("4f561df5ecf0dfbd53a0dc0f37262fef075d9dde", id.name());
try (ObjectInserter.Formatter formatter = new ObjectInserter.Formatter()) {
final ObjectId id = formatter.idFor(Constants.OBJ_BLOB, data);
assertEquals("4f561df5ecf0dfbd53a0dc0f37262fef075d9dde", id.name());
}
}
@Test

View File

@ -267,35 +267,37 @@ public void testParseLookupPath() throws IOException {
@Test
public void resolveExprSimple() throws Exception {
Git git = new Git(db);
writeTrashFile("file.txt", "content");
git.add().addFilepattern("file.txt").call();
git.commit().setMessage("create file").call();
assertEquals("master", db.simplify("master"));
assertEquals("refs/heads/master", db.simplify("refs/heads/master"));
assertEquals("HEAD", db.simplify("HEAD"));
try (Git git = new Git(db)) {
writeTrashFile("file.txt", "content");
git.add().addFilepattern("file.txt").call();
git.commit().setMessage("create file").call();
assertEquals("master", db.simplify("master"));
assertEquals("refs/heads/master", db.simplify("refs/heads/master"));
assertEquals("HEAD", db.simplify("HEAD"));
}
}
@Test
public void resolveUpstream() throws Exception {
Git git = new Git(db);
writeTrashFile("file.txt", "content");
git.add().addFilepattern("file.txt").call();
RevCommit c1 = git.commit().setMessage("create file").call();
writeTrashFile("file2.txt", "content");
RefUpdate updateRemoteRef = db.updateRef("refs/remotes/origin/main");
updateRemoteRef.setNewObjectId(c1);
updateRemoteRef.update();
db.getConfig().setString("branch", "master", "remote", "origin");
db.getConfig()
.setString("branch", "master", "merge", "refs/heads/main");
db.getConfig().setString("remote", "origin", "url",
"git://example.com/here");
db.getConfig().setString("remote", "origin", "fetch",
"+refs/heads/*:refs/remotes/origin/*");
git.add().addFilepattern("file2.txt").call();
git.commit().setMessage("create file").call();
assertEquals("refs/remotes/origin/main", db.simplify("@{upstream}"));
try (Git git = new Git(db)) {
writeTrashFile("file.txt", "content");
git.add().addFilepattern("file.txt").call();
RevCommit c1 = git.commit().setMessage("create file").call();
writeTrashFile("file2.txt", "content");
RefUpdate updateRemoteRef = db.updateRef("refs/remotes/origin/main");
updateRemoteRef.setNewObjectId(c1);
updateRemoteRef.update();
db.getConfig().setString("branch", "master", "remote", "origin");
db.getConfig()
.setString("branch", "master", "merge", "refs/heads/main");
db.getConfig().setString("remote", "origin", "url",
"git://example.com/here");
db.getConfig().setString("remote", "origin", "fetch",
"+refs/heads/*:refs/remotes/origin/*");
git.add().addFilepattern("file2.txt").call();
git.commit().setMessage("create file").call();
assertEquals("refs/remotes/origin/main", db.simplify("@{upstream}"));
}
}
@Test

View File

@ -88,35 +88,36 @@ public void failingDeleteOfDirectoryWithUntrackedContent(
file = new File(folder1, "file2.txt");
write(file, "folder1--file2.txt");
Git git = new Git(db);
git.add().addFilepattern(folder1.getName()).call();
RevCommit base = git.commit().setMessage("adding folder").call();
try (Git git = new Git(db)) {
git.add().addFilepattern(folder1.getName()).call();
RevCommit base = git.commit().setMessage("adding folder").call();
recursiveDelete(folder1);
git.rm().addFilepattern("folder1/file1.txt")
.addFilepattern("folder1/file2.txt").call();
RevCommit other = git.commit()
.setMessage("removing folders on 'other'").call();
recursiveDelete(folder1);
git.rm().addFilepattern("folder1/file1.txt")
.addFilepattern("folder1/file2.txt").call();
RevCommit other = git.commit()
.setMessage("removing folders on 'other'").call();
git.checkout().setName(base.name()).call();
git.checkout().setName(base.name()).call();
file = new File(db.getWorkTree(), "unrelated.txt");
write(file, "unrelated");
file = new File(db.getWorkTree(), "unrelated.txt");
write(file, "unrelated");
git.add().addFilepattern("unrelated.txt").call();
RevCommit head = git.commit().setMessage("Adding another file").call();
git.add().addFilepattern("unrelated.txt").call();
RevCommit head = git.commit().setMessage("Adding another file").call();
// Untracked file to cause failing path for delete() of folder1
// but that's ok.
file = new File(folder1, "file3.txt");
write(file, "folder1--file3.txt");
// Untracked file to cause failing path for delete() of folder1
// but that's ok.
file = new File(folder1, "file3.txt");
write(file, "folder1--file3.txt");
ResolveMerger merger = (ResolveMerger) strategy.newMerger(db, false);
merger.setCommitNames(new String[] { "BASE", "HEAD", "other" });
merger.setWorkingTreeIterator(new FileTreeIterator(db));
boolean ok = merger.merge(head.getId(), other.getId());
assertTrue(ok);
assertTrue(file.exists());
ResolveMerger merger = (ResolveMerger) strategy.newMerger(db, false);
merger.setCommitNames(new String[] { "BASE", "HEAD", "other" });
merger.setWorkingTreeIterator(new FileTreeIterator(db));
boolean ok = merger.merge(head.getId(), other.getId());
assertTrue(ok);
assertTrue(file.exists());
}
}
/**

View File

@ -73,17 +73,18 @@ public void setUp() throws Exception {
@Test
public void testCommit() throws Exception {
Git git = new Git(db);
revCommit = git.commit().setMessage("squash_me").call();
try (Git git = new Git(db)) {
revCommit = git.commit().setMessage("squash_me").call();
Ref master = db.exactRef("refs/heads/master");
String message = msgFormatter.format(Arrays.asList(revCommit), master);
assertEquals(
"Squashed commit of the following:\n\ncommit "
+ revCommit.getName() + "\nAuthor: "
+ revCommit.getAuthorIdent().getName() + " <"
+ revCommit.getAuthorIdent().getEmailAddress()
+ ">\nDate: " + dateFormatter.formatDate(author)
+ "\n\n\tsquash_me\n", message);
Ref master = db.exactRef("refs/heads/master");
String message = msgFormatter.format(Arrays.asList(revCommit), master);
assertEquals(
"Squashed commit of the following:\n\ncommit "
+ revCommit.getName() + "\nAuthor: "
+ revCommit.getAuthorIdent().getName() + " <"
+ revCommit.getAuthorIdent().getEmailAddress()
+ ">\nDate: " + dateFormatter.formatDate(author)
+ "\n\n\tsquash_me\n", message);
}
}
}

View File

@ -57,14 +57,15 @@ public class RevCommitListTest extends RepositoryTestCase {
private RevCommitList<RevCommit> list;
public void setup(int count) throws Exception {
Git git = new Git(db);
for (int i = 0; i < count; i++)
git.commit().setCommitter(committer).setAuthor(author)
.setMessage("commit " + i).call();
list = new RevCommitList<RevCommit>();
RevWalk w = new RevWalk(db);
w.markStart(w.lookupCommit(db.resolve(Constants.HEAD)));
list.source(w);
try (Git git = new Git(db);
RevWalk w = new RevWalk(db);) {
for (int i = 0; i < count; i++)
git.commit().setCommitter(committer).setAuthor(author)
.setMessage("commit " + i).call();
list = new RevCommitList<RevCommit>();
w.markStart(w.lookupCommit(db.resolve(Constants.HEAD)));
list.source(w);
}
}
@Test
@ -107,17 +108,18 @@ public void testFillToHighMarkMulitpleBlocks() throws Exception {
public void testFillToCommit() throws Exception {
setup(3);
RevWalk w = new RevWalk(db);
w.markStart(w.lookupCommit(db.resolve(Constants.HEAD)));
try (RevWalk w = new RevWalk(db)) {
w.markStart(w.lookupCommit(db.resolve(Constants.HEAD)));
w.next();
RevCommit c = w.next();
assertNotNull("should have found 2. commit", c);
w.next();
RevCommit c = w.next();
assertNotNull("should have found 2. commit", c);
list.fillTo(c, 5);
assertEquals(2, list.size());
assertEquals("commit 1", list.get(1).getFullMessage());
assertNull(list.get(3));
list.fillTo(c, 5);
assertEquals(2, list.size());
assertEquals("commit 1", list.get(1).getFullMessage());
assertNull(list.get(3));
}
}
@Test

View File

@ -452,9 +452,10 @@ public void testParse_GitStyleMessage() throws Exception {
@Test
public void testParse_PublicParseMethod()
throws UnsupportedEncodingException {
ObjectInserter.Formatter fmt = new ObjectInserter.Formatter();
CommitBuilder src = new CommitBuilder();
src.setTreeId(fmt.idFor(Constants.OBJ_TREE, new byte[] {}));
try (ObjectInserter.Formatter fmt = new ObjectInserter.Formatter()) {
src.setTreeId(fmt.idFor(Constants.OBJ_TREE, new byte[] {}));
}
src.setAuthor(author);
src.setCommitter(committer);
src.setMessage("Test commit\n\nThis is a test.\n");

View File

@ -73,9 +73,12 @@ public void testEquals() throws Exception {
assertTrue(a1.equals((Object) a1));
assertFalse(a1.equals(""));
final RevWalk rw2 = new RevWalk(db);
final RevCommit a2 = rw2.parseCommit(a1);
final RevCommit b2 = rw2.parseCommit(b1);
final RevCommit a2;
final RevCommit b2;
try (final RevWalk rw2 = new RevWalk(db)) {
a2 = rw2.parseCommit(a1);
b2 = rw2.parseCommit(b1);
}
assertNotSame(a1, a2);
assertNotSame(b1, b2);

View File

@ -463,10 +463,11 @@ public void testParse_GitStyleMessage() throws Exception {
@Test
public void testParse_PublicParseMethod() throws CorruptObjectException {
ObjectInserter.Formatter fmt = new ObjectInserter.Formatter();
TagBuilder src = new TagBuilder();
src.setObjectId(fmt.idFor(Constants.OBJ_TREE, new byte[] {}),
Constants.OBJ_TREE);
try (ObjectInserter.Formatter fmt = new ObjectInserter.Formatter()) {
src.setObjectId(fmt.idFor(Constants.OBJ_TREE, new byte[] {}),
Constants.OBJ_TREE);
}
src.setTagger(committer);
src.setTag("a.test");
src.setMessage("Test tag\n\nThis is a test.\n");

View File

@ -119,36 +119,37 @@ public void commandWithEmptyUri() throws GitAPIException {
@Test
public void addSubmodule() throws Exception {
Git git = new Git(db);
writeTrashFile("file.txt", "content");
git.add().addFilepattern("file.txt").call();
RevCommit commit = git.commit().setMessage("create file").call();
try (Git git = new Git(db)) {
writeTrashFile("file.txt", "content");
git.add().addFilepattern("file.txt").call();
RevCommit commit = git.commit().setMessage("create file").call();
SubmoduleAddCommand command = new SubmoduleAddCommand(db);
String path = "sub";
command.setPath(path);
String uri = db.getDirectory().toURI().toString();
command.setURI(uri);
Repository repo = command.call();
assertNotNull(repo);
ObjectId subCommit = repo.resolve(Constants.HEAD);
repo.close();
SubmoduleAddCommand command = new SubmoduleAddCommand(db);
String path = "sub";
command.setPath(path);
String uri = db.getDirectory().toURI().toString();
command.setURI(uri);
Repository repo = command.call();
assertNotNull(repo);
ObjectId subCommit = repo.resolve(Constants.HEAD);
repo.close();
SubmoduleWalk generator = SubmoduleWalk.forIndex(db);
assertTrue(generator.next());
assertEquals(path, generator.getPath());
assertEquals(commit, generator.getObjectId());
assertEquals(uri, generator.getModulesUrl());
assertEquals(path, generator.getModulesPath());
assertEquals(uri, generator.getConfigUrl());
Repository subModRepo = generator.getRepository();
assertNotNull(subModRepo);
assertEquals(subCommit, commit);
subModRepo.close();
SubmoduleWalk generator = SubmoduleWalk.forIndex(db);
assertTrue(generator.next());
assertEquals(path, generator.getPath());
assertEquals(commit, generator.getObjectId());
assertEquals(uri, generator.getModulesUrl());
assertEquals(path, generator.getModulesPath());
assertEquals(uri, generator.getConfigUrl());
Repository subModRepo = generator.getRepository();
assertNotNull(subModRepo);
assertEquals(subCommit, commit);
subModRepo.close();
Status status = Git.wrap(db).status().call();
assertTrue(status.getAdded().contains(Constants.DOT_GIT_MODULES));
assertTrue(status.getAdded().contains(path));
Status status = Git.wrap(db).status().call();
assertTrue(status.getAdded().contains(Constants.DOT_GIT_MODULES));
assertTrue(status.getAdded().contains(path));
}
}
@Test
@ -182,45 +183,47 @@ public void apply(DirCacheEntry ent) {
@Test
public void addSubmoduleWithRelativeUri() throws Exception {
Git git = new Git(db);
writeTrashFile("file.txt", "content");
git.add().addFilepattern("file.txt").call();
RevCommit commit = git.commit().setMessage("create file").call();
try (Git git = new Git(db)) {
writeTrashFile("file.txt", "content");
git.add().addFilepattern("file.txt").call();
RevCommit commit = git.commit().setMessage("create file").call();
SubmoduleAddCommand command = new SubmoduleAddCommand(db);
String path = "sub";
String uri = "./.git";
command.setPath(path);
command.setURI(uri);
Repository repo = command.call();
assertNotNull(repo);
addRepoToClose(repo);
SubmoduleAddCommand command = new SubmoduleAddCommand(db);
String path = "sub";
String uri = "./.git";
command.setPath(path);
command.setURI(uri);
Repository repo = command.call();
assertNotNull(repo);
addRepoToClose(repo);
SubmoduleWalk generator = SubmoduleWalk.forIndex(db);
assertTrue(generator.next());
assertEquals(path, generator.getPath());
assertEquals(commit, generator.getObjectId());
assertEquals(uri, generator.getModulesUrl());
assertEquals(path, generator.getModulesPath());
String fullUri = db.getDirectory().getAbsolutePath();
if (File.separatorChar == '\\')
fullUri = fullUri.replace('\\', '/');
assertEquals(fullUri, generator.getConfigUrl());
Repository subModRepo = generator.getRepository();
assertNotNull(subModRepo);
assertEquals(
fullUri,
subModRepo
.getConfig()
.getString(ConfigConstants.CONFIG_REMOTE_SECTION,
Constants.DEFAULT_REMOTE_NAME,
ConfigConstants.CONFIG_KEY_URL));
subModRepo.close();
assertEquals(commit, repo.resolve(Constants.HEAD));
SubmoduleWalk generator = SubmoduleWalk.forIndex(db);
assertTrue(generator.next());
assertEquals(path, generator.getPath());
assertEquals(commit, generator.getObjectId());
assertEquals(uri, generator.getModulesUrl());
assertEquals(path, generator.getModulesPath());
String fullUri = db.getDirectory().getAbsolutePath();
if (File.separatorChar == '\\') {
fullUri = fullUri.replace('\\', '/');
}
assertEquals(fullUri, generator.getConfigUrl());
Repository subModRepo = generator.getRepository();
assertNotNull(subModRepo);
assertEquals(
fullUri,
subModRepo
.getConfig()
.getString(ConfigConstants.CONFIG_REMOTE_SECTION,
Constants.DEFAULT_REMOTE_NAME,
ConfigConstants.CONFIG_KEY_URL));
subModRepo.close();
assertEquals(commit, repo.resolve(Constants.HEAD));
Status status = Git.wrap(db).status().call();
assertTrue(status.getAdded().contains(Constants.DOT_GIT_MODULES));
assertTrue(status.getAdded().contains(path));
Status status = Git.wrap(db).status().call();
assertTrue(status.getAdded().contains(Constants.DOT_GIT_MODULES));
assertTrue(status.getAdded().contains(path));
}
}
@Test
@ -237,31 +240,32 @@ public void addSubmoduleWithExistingSubmoduleDefined() throws Exception {
path1, ConfigConstants.CONFIG_KEY_URL, url1);
modulesConfig.save();
Git git = new Git(db);
writeTrashFile("file.txt", "content");
git.add().addFilepattern("file.txt").call();
assertNotNull(git.commit().setMessage("create file").call());
try (Git git = new Git(db)) {
writeTrashFile("file.txt", "content");
git.add().addFilepattern("file.txt").call();
assertNotNull(git.commit().setMessage("create file").call());
SubmoduleAddCommand command = new SubmoduleAddCommand(db);
command.setPath(path2);
String url2 = db.getDirectory().toURI().toString();
command.setURI(url2);
Repository r = command.call();
assertNotNull(r);
addRepoToClose(r);
SubmoduleAddCommand command = new SubmoduleAddCommand(db);
command.setPath(path2);
String url2 = db.getDirectory().toURI().toString();
command.setURI(url2);
Repository r = command.call();
assertNotNull(r);
addRepoToClose(r);
modulesConfig.load();
assertEquals(path1, modulesConfig.getString(
ConfigConstants.CONFIG_SUBMODULE_SECTION, path1,
ConfigConstants.CONFIG_KEY_PATH));
assertEquals(url1, modulesConfig.getString(
ConfigConstants.CONFIG_SUBMODULE_SECTION, path1,
ConfigConstants.CONFIG_KEY_URL));
assertEquals(path2, modulesConfig.getString(
ConfigConstants.CONFIG_SUBMODULE_SECTION, path2,
ConfigConstants.CONFIG_KEY_PATH));
assertEquals(url2, modulesConfig.getString(
ConfigConstants.CONFIG_SUBMODULE_SECTION, path2,
ConfigConstants.CONFIG_KEY_URL));
modulesConfig.load();
assertEquals(path1, modulesConfig.getString(
ConfigConstants.CONFIG_SUBMODULE_SECTION, path1,
ConfigConstants.CONFIG_KEY_PATH));
assertEquals(url1, modulesConfig.getString(
ConfigConstants.CONFIG_SUBMODULE_SECTION, path1,
ConfigConstants.CONFIG_KEY_URL));
assertEquals(path2, modulesConfig.getString(
ConfigConstants.CONFIG_SUBMODULE_SECTION, path2,
ConfigConstants.CONFIG_KEY_PATH));
assertEquals(url2, modulesConfig.getString(
ConfigConstants.CONFIG_SUBMODULE_SECTION, path2,
ConfigConstants.CONFIG_KEY_URL));
}
}
}

View File

@ -75,26 +75,27 @@ public void beforeMethod() {
*/
@Test
public void fileModeTestFileThenSymlink() throws Exception {
Git git = new Git(db);
writeTrashFile("a", "Hello world a");
writeTrashFile("b", "Hello world b");
git.add().addFilepattern(".").call();
git.commit().setMessage("add files a & b").call();
Ref branch_1 = git.branchCreate().setName("branch_1").call();
git.rm().addFilepattern("a").call();
FileUtils.createSymLink(new File(db.getWorkTree(), "a"), "b");
git.add().addFilepattern("a").call();
git.commit().setMessage("add symlink a").call();
try (Git git = new Git(db)) {
writeTrashFile("a", "Hello world a");
writeTrashFile("b", "Hello world b");
git.add().addFilepattern(".").call();
git.commit().setMessage("add files a & b").call();
Ref branch_1 = git.branchCreate().setName("branch_1").call();
git.rm().addFilepattern("a").call();
FileUtils.createSymLink(new File(db.getWorkTree(), "a"), "b");
git.add().addFilepattern("a").call();
git.commit().setMessage("add symlink a").call();
FileEntry entry = new FileTreeIterator.FileEntry(new File(
db.getWorkTree(), "a"), db.getFS());
assertEquals(FileMode.SYMLINK, entry.getMode());
FileEntry entry = new FileTreeIterator.FileEntry(new File(
db.getWorkTree(), "a"), db.getFS());
assertEquals(FileMode.SYMLINK, entry.getMode());
git.checkout().setName(branch_1.getName()).call();
git.checkout().setName(branch_1.getName()).call();
entry = new FileTreeIterator.FileEntry(new File(db.getWorkTree(), "a"),
db.getFS());
assertEquals(FileMode.REGULAR_FILE, entry.getMode());
entry = new FileTreeIterator.FileEntry(new File(db.getWorkTree(), "a"),
db.getFS());
assertEquals(FileMode.REGULAR_FILE, entry.getMode());
}
}
/**
@ -108,26 +109,27 @@ public void fileModeTestFileThenSymlink() throws Exception {
*/
@Test
public void fileModeTestSymlinkThenFile() throws Exception {
Git git = new Git(db);
writeTrashFile("b", "Hello world b");
FileUtils.createSymLink(new File(db.getWorkTree(), "a"), "b");
git.add().addFilepattern(".").call();
git.commit().setMessage("add file b & symlink a").call();
Ref branch_1 = git.branchCreate().setName("branch_1").call();
git.rm().addFilepattern("a").call();
writeTrashFile("a", "Hello world a");
git.add().addFilepattern("a").call();
git.commit().setMessage("add file a").call();
try (Git git = new Git(db)) {
writeTrashFile("b", "Hello world b");
FileUtils.createSymLink(new File(db.getWorkTree(), "a"), "b");
git.add().addFilepattern(".").call();
git.commit().setMessage("add file b & symlink a").call();
Ref branch_1 = git.branchCreate().setName("branch_1").call();
git.rm().addFilepattern("a").call();
writeTrashFile("a", "Hello world a");
git.add().addFilepattern("a").call();
git.commit().setMessage("add file a").call();
FileEntry entry = new FileTreeIterator.FileEntry(new File(
db.getWorkTree(), "a"), db.getFS());
assertEquals(FileMode.REGULAR_FILE, entry.getMode());
FileEntry entry = new FileTreeIterator.FileEntry(new File(
db.getWorkTree(), "a"), db.getFS());
assertEquals(FileMode.REGULAR_FILE, entry.getMode());
git.checkout().setName(branch_1.getName()).call();
git.checkout().setName(branch_1.getName()).call();
entry = new FileTreeIterator.FileEntry(new File(db.getWorkTree(), "a"),
db.getFS());
assertEquals(FileMode.SYMLINK, entry.getMode());
entry = new FileTreeIterator.FileEntry(new File(db.getWorkTree(), "a"),
db.getFS());
assertEquals(FileMode.SYMLINK, entry.getMode());
}
}
/**
@ -141,27 +143,28 @@ public void fileModeTestSymlinkThenFile() throws Exception {
*/
@Test
public void fileModeTestFolderThenSymlink() throws Exception {
Git git = new Git(db);
FileUtils.mkdirs(new File(db.getWorkTree(), "a"));
writeTrashFile("a/b", "Hello world b");
writeTrashFile("c", "Hello world c");
git.add().addFilepattern(".").call();
git.commit().setMessage("add folder a").call();
Ref branch_1 = git.branchCreate().setName("branch_1").call();
git.rm().addFilepattern("a").call();
FileUtils.createSymLink(new File(db.getWorkTree(), "a"), "c");
git.add().addFilepattern("a").call();
git.commit().setMessage("add symlink a").call();
try (Git git = new Git(db)) {
FileUtils.mkdirs(new File(db.getWorkTree(), "a"));
writeTrashFile("a/b", "Hello world b");
writeTrashFile("c", "Hello world c");
git.add().addFilepattern(".").call();
git.commit().setMessage("add folder a").call();
Ref branch_1 = git.branchCreate().setName("branch_1").call();
git.rm().addFilepattern("a").call();
FileUtils.createSymLink(new File(db.getWorkTree(), "a"), "c");
git.add().addFilepattern("a").call();
git.commit().setMessage("add symlink a").call();
FileEntry entry = new FileTreeIterator.FileEntry(new File(
db.getWorkTree(), "a"), db.getFS());
assertEquals(FileMode.SYMLINK, entry.getMode());
FileEntry entry = new FileTreeIterator.FileEntry(new File(
db.getWorkTree(), "a"), db.getFS());
assertEquals(FileMode.SYMLINK, entry.getMode());
git.checkout().setName(branch_1.getName()).call();
git.checkout().setName(branch_1.getName()).call();
entry = new FileTreeIterator.FileEntry(new File(db.getWorkTree(), "a"),
db.getFS());
assertEquals(FileMode.TREE, entry.getMode());
entry = new FileTreeIterator.FileEntry(new File(db.getWorkTree(), "a"),
db.getFS());
assertEquals(FileMode.TREE, entry.getMode());
}
}
/**
@ -175,27 +178,28 @@ public void fileModeTestFolderThenSymlink() throws Exception {
*/
@Test
public void fileModeTestSymlinkThenFolder() throws Exception {
Git git = new Git(db);
writeTrashFile("c", "Hello world c");
FileUtils.createSymLink(new File(db.getWorkTree(), "a"), "c");
git.add().addFilepattern(".").call();
git.commit().setMessage("add symlink a").call();
Ref branch_1 = git.branchCreate().setName("branch_1").call();
git.rm().addFilepattern("a").call();
FileUtils.mkdirs(new File(db.getWorkTree(), "a"));
writeTrashFile("a/b", "Hello world b");
git.add().addFilepattern("a").call();
git.commit().setMessage("add folder a").call();
try (Git git = new Git(db)) {
writeTrashFile("c", "Hello world c");
FileUtils.createSymLink(new File(db.getWorkTree(), "a"), "c");
git.add().addFilepattern(".").call();
git.commit().setMessage("add symlink a").call();
Ref branch_1 = git.branchCreate().setName("branch_1").call();
git.rm().addFilepattern("a").call();
FileUtils.mkdirs(new File(db.getWorkTree(), "a"));
writeTrashFile("a/b", "Hello world b");
git.add().addFilepattern("a").call();
git.commit().setMessage("add folder a").call();
FileEntry entry = new FileTreeIterator.FileEntry(new File(
db.getWorkTree(), "a"), db.getFS());
assertEquals(FileMode.TREE, entry.getMode());
FileEntry entry = new FileTreeIterator.FileEntry(new File(
db.getWorkTree(), "a"), db.getFS());
assertEquals(FileMode.TREE, entry.getMode());
git.checkout().setName(branch_1.getName()).call();
git.checkout().setName(branch_1.getName()).call();
entry = new FileTreeIterator.FileEntry(new File(db.getWorkTree(), "a"),
db.getFS());
assertEquals(FileMode.SYMLINK, entry.getMode());
entry = new FileTreeIterator.FileEntry(new File(db.getWorkTree(), "a"),
db.getFS());
assertEquals(FileMode.SYMLINK, entry.getMode());
}
}
/**
@ -209,24 +213,25 @@ public void fileModeTestSymlinkThenFolder() throws Exception {
*/
@Test
public void fileModeTestMissingThenSymlink() throws Exception {
Git git = new Git(db);
writeTrashFile("b", "Hello world b");
git.add().addFilepattern(".").call();
RevCommit commit1 = git.commit().setMessage("add file b").call();
Ref branch_1 = git.branchCreate().setName("branch_1").call();
FileUtils.createSymLink(new File(db.getWorkTree(), "a"), "b");
git.add().addFilepattern("a").call();
RevCommit commit2 = git.commit().setMessage("add symlink a").call();
try (Git git = new Git(db);
TreeWalk tw = new TreeWalk(db);) {
writeTrashFile("b", "Hello world b");
git.add().addFilepattern(".").call();
RevCommit commit1 = git.commit().setMessage("add file b").call();
Ref branch_1 = git.branchCreate().setName("branch_1").call();
FileUtils.createSymLink(new File(db.getWorkTree(), "a"), "b");
git.add().addFilepattern("a").call();
RevCommit commit2 = git.commit().setMessage("add symlink a").call();
git.checkout().setName(branch_1.getName()).call();
git.checkout().setName(branch_1.getName()).call();
TreeWalk tw = new TreeWalk(db);
tw.addTree(commit1.getTree());
tw.addTree(commit2.getTree());
List<DiffEntry> scan = DiffEntry.scan(tw);
assertEquals(1, scan.size());
assertEquals(FileMode.SYMLINK, scan.get(0).getNewMode());
assertEquals(FileMode.MISSING, scan.get(0).getOldMode());
tw.addTree(commit1.getTree());
tw.addTree(commit2.getTree());
List<DiffEntry> scan = DiffEntry.scan(tw);
assertEquals(1, scan.size());
assertEquals(FileMode.SYMLINK, scan.get(0).getNewMode());
assertEquals(FileMode.MISSING, scan.get(0).getOldMode());
}
}
/**
@ -240,97 +245,101 @@ public void fileModeTestMissingThenSymlink() throws Exception {
*/
@Test
public void fileModeTestSymlinkThenMissing() throws Exception {
Git git = new Git(db);
writeTrashFile("b", "Hello world b");
FileUtils.createSymLink(new File(db.getWorkTree(), "a"), "b");
git.add().addFilepattern(".").call();
RevCommit commit1 = git.commit().setMessage("add file b & symlink a")
.call();
Ref branch_1 = git.branchCreate().setName("branch_1").call();
git.rm().addFilepattern("a").call();
RevCommit commit2 = git.commit().setMessage("delete symlink a").call();
try (Git git = new Git(db);
TreeWalk tw = new TreeWalk(db);) {
writeTrashFile("b", "Hello world b");
FileUtils.createSymLink(new File(db.getWorkTree(), "a"), "b");
git.add().addFilepattern(".").call();
RevCommit commit1 = git.commit().setMessage("add file b & symlink a")
.call();
Ref branch_1 = git.branchCreate().setName("branch_1").call();
git.rm().addFilepattern("a").call();
RevCommit commit2 = git.commit().setMessage("delete symlink a").call();
git.checkout().setName(branch_1.getName()).call();
git.checkout().setName(branch_1.getName()).call();
TreeWalk tw = new TreeWalk(db);
tw.addTree(commit1.getTree());
tw.addTree(commit2.getTree());
List<DiffEntry> scan = DiffEntry.scan(tw);
assertEquals(1, scan.size());
assertEquals(FileMode.MISSING, scan.get(0).getNewMode());
assertEquals(FileMode.SYMLINK, scan.get(0).getOldMode());
tw.addTree(commit1.getTree());
tw.addTree(commit2.getTree());
List<DiffEntry> scan = DiffEntry.scan(tw);
assertEquals(1, scan.size());
assertEquals(FileMode.MISSING, scan.get(0).getNewMode());
assertEquals(FileMode.SYMLINK, scan.get(0).getOldMode());
}
}
@Test
public void createSymlinkAfterTarget() throws Exception {
Git git = new Git(db);
writeTrashFile("a", "start");
git.add().addFilepattern("a").call();
RevCommit base = git.commit().setMessage("init").call();
writeTrashFile("target", "someData");
FileUtils.createSymLink(new File(db.getWorkTree(), "link"), "target");
git.add().addFilepattern("target").addFilepattern("link").call();
git.commit().setMessage("add target").call();
assertEquals(4, db.getWorkTree().list().length); // self-check
git.checkout().setName(base.name()).call();
assertEquals(2, db.getWorkTree().list().length); // self-check
git.checkout().setName("master").call();
assertEquals(4, db.getWorkTree().list().length);
String data = read(new File(db.getWorkTree(), "target"));
assertEquals(8, new File(db.getWorkTree(), "target").length());
assertEquals("someData", data);
data = read(new File(db.getWorkTree(), "link"));
assertEquals("target",
FileUtils.readSymLink(new File(db.getWorkTree(), "link")));
assertEquals("someData", data);
try (Git git = new Git(db)) {
writeTrashFile("a", "start");
git.add().addFilepattern("a").call();
RevCommit base = git.commit().setMessage("init").call();
writeTrashFile("target", "someData");
FileUtils.createSymLink(new File(db.getWorkTree(), "link"), "target");
git.add().addFilepattern("target").addFilepattern("link").call();
git.commit().setMessage("add target").call();
assertEquals(4, db.getWorkTree().list().length); // self-check
git.checkout().setName(base.name()).call();
assertEquals(2, db.getWorkTree().list().length); // self-check
git.checkout().setName("master").call();
assertEquals(4, db.getWorkTree().list().length);
String data = read(new File(db.getWorkTree(), "target"));
assertEquals(8, new File(db.getWorkTree(), "target").length());
assertEquals("someData", data);
data = read(new File(db.getWorkTree(), "link"));
assertEquals("target",
FileUtils.readSymLink(new File(db.getWorkTree(), "link")));
assertEquals("someData", data);
}
}
@Test
public void createFileSymlinkBeforeTarget() throws Exception {
Git git = new Git(db);
writeTrashFile("a", "start");
git.add().addFilepattern("a").call();
RevCommit base = git.commit().setMessage("init").call();
writeTrashFile("target", "someData");
FileUtils.createSymLink(new File(db.getWorkTree(), "tlink"), "target");
git.add().addFilepattern("target").addFilepattern("tlink").call();
git.commit().setMessage("add target").call();
assertEquals(4, db.getWorkTree().list().length); // self-check
git.checkout().setName(base.name()).call();
assertEquals(2, db.getWorkTree().list().length); // self-check
git.checkout().setName("master").call();
assertEquals(4, db.getWorkTree().list().length);
String data = read(new File(db.getWorkTree(), "target"));
assertEquals(8, new File(db.getWorkTree(), "target").length());
assertEquals("someData", data);
data = read(new File(db.getWorkTree(), "tlink"));
assertEquals("target",
FileUtils.readSymLink(new File(db.getWorkTree(), "tlink")));
assertEquals("someData", data);
try (Git git = new Git(db)) {
writeTrashFile("a", "start");
git.add().addFilepattern("a").call();
RevCommit base = git.commit().setMessage("init").call();
writeTrashFile("target", "someData");
FileUtils.createSymLink(new File(db.getWorkTree(), "tlink"), "target");
git.add().addFilepattern("target").addFilepattern("tlink").call();
git.commit().setMessage("add target").call();
assertEquals(4, db.getWorkTree().list().length); // self-check
git.checkout().setName(base.name()).call();
assertEquals(2, db.getWorkTree().list().length); // self-check
git.checkout().setName("master").call();
assertEquals(4, db.getWorkTree().list().length);
String data = read(new File(db.getWorkTree(), "target"));
assertEquals(8, new File(db.getWorkTree(), "target").length());
assertEquals("someData", data);
data = read(new File(db.getWorkTree(), "tlink"));
assertEquals("target",
FileUtils.readSymLink(new File(db.getWorkTree(), "tlink")));
assertEquals("someData", data);
}
}
@Test
public void createDirSymlinkBeforeTarget() throws Exception {
Git git = new Git(db);
writeTrashFile("a", "start");
git.add().addFilepattern("a").call();
RevCommit base = git.commit().setMessage("init").call();
FileUtils.createSymLink(new File(db.getWorkTree(), "link"), "target");
FileUtils.mkdir(new File(db.getWorkTree(), "target"));
writeTrashFile("target/file", "someData");
git.add().addFilepattern("target").addFilepattern("link").call();
git.commit().setMessage("add target").call();
assertEquals(4, db.getWorkTree().list().length); // self-check
git.checkout().setName(base.name()).call();
assertEquals(2, db.getWorkTree().list().length); // self-check
git.checkout().setName("master").call();
assertEquals(4, db.getWorkTree().list().length);
String data = read(new File(db.getWorkTree(), "target/file"));
assertEquals(8, new File(db.getWorkTree(), "target/file").length());
assertEquals("someData", data);
data = read(new File(db.getWorkTree(), "link/file"));
assertEquals("target",
FileUtils.readSymLink(new File(db.getWorkTree(), "link")));
assertEquals("someData", data);
try (Git git = new Git(db)) {
writeTrashFile("a", "start");
git.add().addFilepattern("a").call();
RevCommit base = git.commit().setMessage("init").call();
FileUtils.createSymLink(new File(db.getWorkTree(), "link"), "target");
FileUtils.mkdir(new File(db.getWorkTree(), "target"));
writeTrashFile("target/file", "someData");
git.add().addFilepattern("target").addFilepattern("link").call();
git.commit().setMessage("add target").call();
assertEquals(4, db.getWorkTree().list().length); // self-check
git.checkout().setName(base.name()).call();
assertEquals(2, db.getWorkTree().list().length); // self-check
git.checkout().setName("master").call();
assertEquals(4, db.getWorkTree().list().length);
String data = read(new File(db.getWorkTree(), "target/file"));
assertEquals(8, new File(db.getWorkTree(), "target/file").length());
assertEquals("someData", data);
data = read(new File(db.getWorkTree(), "link/file"));
assertEquals("target",
FileUtils.readSymLink(new File(db.getWorkTree(), "link")));
assertEquals("someData", data);
}
}
}

View File

@ -60,13 +60,14 @@ public void testSymlinkToDirNotRecursingViaSymlink() throws Exception {
assertTrue(fs.supportsSymlinks());
writeTrashFile("target/data", "targetdata");
fs.createSymLink(new File(trash, "link"), "target");
TreeWalk tw = new TreeWalk(db);
tw.setRecursive(true);
tw.addTree(new FileTreeIterator(db));
assertTrue(tw.next());
assertEquals("link", tw.getPathString());
assertTrue(tw.next());
assertEquals("target/data", tw.getPathString());
assertFalse(tw.next());
try (TreeWalk tw = new TreeWalk(db)) {
tw.setRecursive(true);
tw.addTree(new FileTreeIterator(db));
assertTrue(tw.next());
assertEquals("link", tw.getPathString());
assertTrue(tw.next());
assertEquals("target/data", tw.getPathString());
assertFalse(tw.next());
}
}
}

View File

@ -55,9 +55,10 @@
public class TreeFilterTest extends RepositoryTestCase {
@Test
public void testALL_IncludesAnything() throws Exception {
final TreeWalk tw = new TreeWalk(db);
tw.addTree(new EmptyTreeIterator());
assertTrue(TreeFilter.ALL.include(tw));
try (final TreeWalk tw = new TreeWalk(db)) {
tw.addTree(new EmptyTreeIterator());
assertTrue(TreeFilter.ALL.include(tw));
}
}
@Test
@ -72,16 +73,18 @@ public void testALL_IdentityClone() throws Exception {
@Test
public void testNotALL_IncludesNothing() throws Exception {
final TreeWalk tw = new TreeWalk(db);
tw.addTree(new EmptyTreeIterator());
assertFalse(TreeFilter.ALL.negate().include(tw));
try (final TreeWalk tw = new TreeWalk(db)) {
tw.addTree(new EmptyTreeIterator());
assertFalse(TreeFilter.ALL.negate().include(tw));
}
}
@Test
public void testANY_DIFF_IncludesSingleTreeCase() throws Exception {
final TreeWalk tw = new TreeWalk(db);
tw.addTree(new EmptyTreeIterator());
assertTrue(TreeFilter.ANY_DIFF.include(tw));
try (final TreeWalk tw = new TreeWalk(db)) {
tw.addTree(new EmptyTreeIterator());
assertTrue(TreeFilter.ANY_DIFF.include(tw));
}
}
@Test

View File

@ -666,6 +666,9 @@ public void format(DiffEntry ent) throws IOException {
}
private static byte[] writeGitLinkText(AbbreviatedObjectId id) {
if (id.toObjectId().equals(ObjectId.zeroId())) {
return EMPTY;
}
return encodeASCII("Subproject commit " + id.name() //$NON-NLS-1$
+ "\n"); //$NON-NLS-1$
}

View File

@ -252,10 +252,10 @@ public void addCopyFile(CopyFile copyfile) {
/**
* Add a bunch of copyfile configurations.
*
* @param copyfiles
* @param copyFiles
*/
public void addCopyFiles(Collection<CopyFile> copyfiles) {
this.copyfiles.addAll(copyfiles);
public void addCopyFiles(Collection<CopyFile> copyFiles) {
this.copyfiles.addAll(copyFiles);
}
/**
@ -288,13 +288,13 @@ public boolean isAncestorOf(RepoProject that) {
/**
* Check if this sub repo is an ancestor of the given path.
*
* @param path
* @param thatPath
* path to be checked to see if it is within this repository
* @return true if this sub repo is an ancestor of the given path.
* @since 4.2
*/
public boolean isAncestorOf(String path) {
return path.startsWith(getPathWithSlash());
public boolean isAncestorOf(String thatPath) {
return thatPath.startsWith(getPathWithSlash());
}
@Override