Browse Source

Merge branch 'stable-4.2'

* stable-4.2:
  NoteMapTest: Open TreeWalk instances in try-with-resource
  ObjectDirectoryTest: Fix warnings about variable hiding
  PackWriterTest: Open RevWalk in try-with-resource
  PatchIdDiffFormatterTest: Open Git and PatchIdDiffFormatter in try-with-resource
  PathSuffixFilterTest: Open TreeWalk in try-with-resource
  PostOrderTreeWalkTest: Open TreeWalk in try-with-resource
  PullCommandWithRebaseTest: Open RevWalk in try-with-resource
  PushCommandTest: Open Git instances in try-with-resource
  RacyGitTests: Open NameConflictTreeWalk in try-with-resource
  RecursiveMergerTest: Open TreeWalk and BufferedReader in try-with-resource
  ReflogConfigTest: refactor commit method to avoid variable hiding
  Update .mailmap
  RefDirectoryTest: Fix warning about member variable hiding
  ReflogResolveTest: Open Git instances in try-with-resource
  ReflogTest: Open Git instances in try-with-resource
  RepoCommandTest: Open Git instances in try-with-resource

Change-Id: I7964b699396629e31a9cc5600aedcf4be4e659a8
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
tags/v4.3.0.201603230630-rc1
Matthias Sohn 8 years ago
parent
commit
4dcf34eddf

+ 6
- 5
.mailmap View File

@@ -1,5 +1,6 @@
Shawn Pearce <spearce@spearce.org> Shawn O. Pearce <sop@google.com>
Shawn Pearce <spearce@spearce.org> Shawn Pearce <sop@google.com>
Shawn Pearce <spearce@spearce.org> Shawn O. Pearce <spearce@spearce.org>
Saša Živkov <sasa.zivkov@sap.com> Sasa Zivkov <sasa.zivkov@sap.com>
Saša Živkov <sasa.zivkov@sap.com> Saša Živkov <zivkov@gmail.com>
Roberto Tyley <roberto.tyley@guardian.co.uk> roberto <roberto.tyley@guardian.co.uk>
Saša Živkov <sasa.zivkov@sap.com> Sasa Zivkov <sasa.zivkov@sap.com>
Saša Živkov <sasa.zivkov@sap.com> Saša Živkov <zivkov@gmail.com>
Shawn Pearce <spearce@spearce.org> Shawn O. Pearce <sop@google.com>
Shawn Pearce <spearce@spearce.org> Shawn Pearce <sop@google.com>
Shawn Pearce <spearce@spearce.org> Shawn O. Pearce <spearce@spearce.org>

+ 16
- 13
org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/ReflogTest.java View File

@@ -57,24 +57,27 @@ public class ReflogTest extends CLIRepositoryTestCase {

@Test
public void testSingleCommit() throws Exception {
new Git(db).commit().setMessage("initial commit").call();
try (Git git = new Git(db)) {
git.commit().setMessage("initial commit").call();

assertEquals("6fd41be HEAD@{0}: commit (initial): initial commit",
execute("git reflog")[0]);
assertEquals("6fd41be HEAD@{0}: commit (initial): initial commit",
execute("git reflog")[0]);
}
}

@Test
public void testBranch() throws Exception {
Git git = new Git(db);
git.commit().setMessage("first commit").call();
git.checkout().setCreateBranch(true).setName("side").call();
writeTrashFile("file", "side content");
git.add().addFilepattern("file").call();
git.commit().setMessage("side commit").call();
try (Git git = new Git(db)) {
git.commit().setMessage("first commit").call();
git.checkout().setCreateBranch(true).setName("side").call();
writeTrashFile("file", "side content");
git.add().addFilepattern("file").call();
git.commit().setMessage("side commit").call();

assertArrayEquals(new String[] {
"38890c7 side@{0}: commit: side commit",
"d216986 side@{1}: branch: Created from commit first commit",
"" }, execute("git reflog refs/heads/side"));
assertArrayEquals(new String[] {
"38890c7 side@{0}: commit: side commit",
"d216986 side@{1}: branch: Created from commit first commit",
"" }, execute("git reflog refs/heads/side"));
}
}
}

+ 21
- 20
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PullCommandWithRebaseTest.java View File

@@ -273,26 +273,27 @@ public class PullCommandWithRebaseTest extends RepositoryTestCase {

// Get the HEAD and HEAD~1 commits
Repository targetRepo = target.getRepository();
RevWalk revWalk = new RevWalk(targetRepo);
ObjectId headId = targetRepo.resolve(Constants.HEAD);
RevCommit root = revWalk.parseCommit(headId);
revWalk.markStart(root);
// HEAD
RevCommit head = revWalk.next();
// HEAD~1
RevCommit beforeHead = revWalk.next();

// verify the commit message on the HEAD commit
assertEquals(TARGET_COMMIT_MESSAGE, head.getFullMessage());
// verify the commit just before HEAD
assertEquals(SOURCE_COMMIT_MESSAGE, beforeHead.getFullMessage());

// verify file states
assertFileContentsEqual(sourceFile, SOURCE_FILE_CONTENTS);
assertFileContentsEqual(newFile, NEW_FILE_CONTENTS);
// verify repository state
assertEquals(RepositoryState.SAFE, target
.getRepository().getRepositoryState());
try (RevWalk revWalk = new RevWalk(targetRepo)) {
ObjectId headId = targetRepo.resolve(Constants.HEAD);
RevCommit root = revWalk.parseCommit(headId);
revWalk.markStart(root);
// HEAD
RevCommit head = revWalk.next();
// HEAD~1
RevCommit beforeHead = revWalk.next();

// verify the commit message on the HEAD commit
assertEquals(TARGET_COMMIT_MESSAGE, head.getFullMessage());
// verify the commit just before HEAD
assertEquals(SOURCE_COMMIT_MESSAGE, beforeHead.getFullMessage());

// verify file states
assertFileContentsEqual(sourceFile, SOURCE_FILE_CONTENTS);
assertFileContentsEqual(newFile, NEW_FILE_CONTENTS);
// verify repository state
assertEquals(RepositoryState.SAFE, target
.getRepository().getRepositoryState());
}
}

@Override

+ 184
- 187
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PushCommandTest.java View File

@@ -90,26 +90,27 @@ public class PushCommandTest extends RepositoryTestCase {
remoteConfig.update(config);
config.save();

Git git1 = new Git(db);
// create some refs via commits and tag
RevCommit commit = git1.commit().setMessage("initial commit").call();
Ref tagRef = git1.tag().setName("tag").call();

try {
db2.resolve(commit.getId().getName() + "^{commit}");
fail("id shouldn't exist yet");
} catch (MissingObjectException e) {
// we should get here
try (Git git1 = new Git(db)) {
// create some refs via commits and tag
RevCommit commit = git1.commit().setMessage("initial commit").call();
Ref tagRef = git1.tag().setName("tag").call();

try {
db2.resolve(commit.getId().getName() + "^{commit}");
fail("id shouldn't exist yet");
} catch (MissingObjectException e) {
// we should get here
}

RefSpec spec = new RefSpec("refs/heads/master:refs/heads/x");
git1.push().setRemote("test").setRefSpecs(spec)
.call();

assertEquals(commit.getId(),
db2.resolve(commit.getId().getName() + "^{commit}"));
assertEquals(tagRef.getObjectId(),
db2.resolve(tagRef.getObjectId().getName()));
}

RefSpec spec = new RefSpec("refs/heads/master:refs/heads/x");
git1.push().setRemote("test").setRefSpecs(spec)
.call();

assertEquals(commit.getId(),
db2.resolve(commit.getId().getName() + "^{commit}"));
assertEquals(tagRef.getObjectId(),
db2.resolve(tagRef.getObjectId().getName()));
}

@Test
@@ -132,15 +133,16 @@ public class PushCommandTest extends RepositoryTestCase {
+ hookOutput.toPath() + "\"\ncat - >>\"" + hookOutput.toPath()
+ "\"\nexit 0");

Git git1 = new Git(db);
// create some refs via commits and tag
RevCommit commit = git1.commit().setMessage("initial commit").call();
try (Git git1 = new Git(db)) {
// create some refs via commits and tag
RevCommit commit = git1.commit().setMessage("initial commit").call();

RefSpec spec = new RefSpec("refs/heads/master:refs/heads/x");
git1.push().setRemote("test").setRefSpecs(spec).call();
assertEquals("1:test, 2:" + uri + ", 3:\n" + "refs/heads/master "
+ commit.getName() + " refs/heads/x "
+ ObjectId.zeroId().name(), read(hookOutput));
RefSpec spec = new RefSpec("refs/heads/master:refs/heads/x");
git1.push().setRemote("test").setRefSpecs(spec).call();
assertEquals("1:test, 2:" + uri + ", 3:\n" + "refs/heads/master "
+ commit.getName() + " refs/heads/x "
+ ObjectId.zeroId().name(), read(hookOutput));
}
}

private File writeHookFile(final String name, final String data)
@@ -160,45 +162,45 @@ public class PushCommandTest extends RepositoryTestCase {
String branch = "refs/heads/master";
String trackingBranch = "refs/remotes/" + remote + "/master";

Git git = new Git(db);
try (Git git = new Git(db)) {
RevCommit commit1 = git.commit().setMessage("Initial commit")
.call();

RevCommit commit1 = git.commit().setMessage("Initial commit")
.call();
RefUpdate branchRefUpdate = db.updateRef(branch);
branchRefUpdate.setNewObjectId(commit1.getId());
branchRefUpdate.update();

RefUpdate branchRefUpdate = db.updateRef(branch);
branchRefUpdate.setNewObjectId(commit1.getId());
branchRefUpdate.update();
RefUpdate trackingBranchRefUpdate = db.updateRef(trackingBranch);
trackingBranchRefUpdate.setNewObjectId(commit1.getId());
trackingBranchRefUpdate.update();

RefUpdate trackingBranchRefUpdate = db.updateRef(trackingBranch);
trackingBranchRefUpdate.setNewObjectId(commit1.getId());
trackingBranchRefUpdate.update();

final StoredConfig config = db.getConfig();
RemoteConfig remoteConfig = new RemoteConfig(config, remote);
URIish uri = new URIish(db2.getDirectory().toURI().toURL());
remoteConfig.addURI(uri);
remoteConfig.addFetchRefSpec(new RefSpec("+refs/heads/*:refs/remotes/"
+ remote + "/*"));
remoteConfig.update(config);
config.save();
final StoredConfig config = db.getConfig();
RemoteConfig remoteConfig = new RemoteConfig(config, remote);
URIish uri = new URIish(db2.getDirectory().toURI().toURL());
remoteConfig.addURI(uri);
remoteConfig.addFetchRefSpec(new RefSpec("+refs/heads/*:refs/remotes/"
+ remote + "/*"));
remoteConfig.update(config);
config.save();


RevCommit commit2 = git.commit().setMessage("Commit to push").call();
RevCommit commit2 = git.commit().setMessage("Commit to push").call();

RefSpec spec = new RefSpec(branch + ":" + branch);
Iterable<PushResult> resultIterable = git.push().setRemote(remote)
.setRefSpecs(spec).call();
RefSpec spec = new RefSpec(branch + ":" + branch);
Iterable<PushResult> resultIterable = git.push().setRemote(remote)
.setRefSpecs(spec).call();

PushResult result = resultIterable.iterator().next();
TrackingRefUpdate trackingRefUpdate = result
.getTrackingRefUpdate(trackingBranch);
PushResult result = resultIterable.iterator().next();
TrackingRefUpdate trackingRefUpdate = result
.getTrackingRefUpdate(trackingBranch);

assertNotNull(trackingRefUpdate);
assertEquals(trackingBranch, trackingRefUpdate.getLocalName());
assertEquals(branch, trackingRefUpdate.getRemoteName());
assertEquals(commit2.getId(), trackingRefUpdate.getNewObjectId());
assertEquals(commit2.getId(), db.resolve(trackingBranch));
assertEquals(commit2.getId(), db2.resolve(branch));
assertNotNull(trackingRefUpdate);
assertEquals(trackingBranch, trackingRefUpdate.getLocalName());
assertEquals(branch, trackingRefUpdate.getRemoteName());
assertEquals(commit2.getId(), trackingRefUpdate.getNewObjectId());
assertEquals(commit2.getId(), db.resolve(trackingBranch));
assertEquals(commit2.getId(), db2.resolve(branch));
}
}

/**
@@ -208,40 +210,38 @@ public class PushCommandTest extends RepositoryTestCase {
*/
@Test
public void testPushRefUpdate() throws Exception {
Git git = new Git(db);
Git git2 = new Git(createBareRepository());

final StoredConfig config = git.getRepository().getConfig();
RemoteConfig remoteConfig = new RemoteConfig(config, "test");
URIish uri = new URIish(git2.getRepository().getDirectory().toURI()
.toURL());
remoteConfig.addURI(uri);
remoteConfig.addPushRefSpec(new RefSpec("+refs/heads/*:refs/heads/*"));
remoteConfig.update(config);
config.save();

writeTrashFile("f", "content of f");
git.add().addFilepattern("f").call();
RevCommit commit = git.commit().setMessage("adding f").call();

assertEquals(null, git2.getRepository().resolve("refs/heads/master"));
git.push().setRemote("test").call();
assertEquals(commit.getId(),
git2.getRepository().resolve("refs/heads/master"));

git.branchCreate().setName("refs/heads/test").call();
git.checkout().setName("refs/heads/test").call();


for (int i = 0; i < 6; i++) {
writeTrashFile("f" + i, "content of f" + i);
git.add().addFilepattern("f" + i).call();
commit = git.commit().setMessage("adding f" + i).call();
try (Git git = new Git(db);
Git git2 = new Git(createBareRepository())) {
final StoredConfig config = git.getRepository().getConfig();
RemoteConfig remoteConfig = new RemoteConfig(config, "test");
URIish uri = new URIish(git2.getRepository().getDirectory().toURI()
.toURL());
remoteConfig.addURI(uri);
remoteConfig.addPushRefSpec(new RefSpec("+refs/heads/*:refs/heads/*"));
remoteConfig.update(config);
config.save();

writeTrashFile("f", "content of f");
git.add().addFilepattern("f").call();
RevCommit commit = git.commit().setMessage("adding f").call();

assertEquals(null, git2.getRepository().resolve("refs/heads/master"));
git.push().setRemote("test").call();
git2.getRepository().getAllRefs();
assertEquals("failed to update on attempt " + i, commit.getId(),
git2.getRepository().resolve("refs/heads/test"));

assertEquals(commit.getId(),
git2.getRepository().resolve("refs/heads/master"));

git.branchCreate().setName("refs/heads/test").call();
git.checkout().setName("refs/heads/test").call();

for (int i = 0; i < 6; i++) {
writeTrashFile("f" + i, "content of f" + i);
git.add().addFilepattern("f" + i).call();
commit = git.commit().setMessage("adding f" + i).call();
git.push().setRemote("test").call();
git2.getRepository().getAllRefs();
assertEquals("failed to update on attempt " + i, commit.getId(),
git2.getRepository().resolve("refs/heads/test"));
}
}
}

@@ -252,28 +252,26 @@ public class PushCommandTest extends RepositoryTestCase {
*/
@Test
public void testPushWithRefSpecFromConfig() throws Exception {
Git git = new Git(db);
Git git2 = new Git(createBareRepository());

final StoredConfig config = git.getRepository().getConfig();
RemoteConfig remoteConfig = new RemoteConfig(config, "test");
URIish uri = new URIish(git2.getRepository().getDirectory().toURI()
.toURL());
remoteConfig.addURI(uri);
remoteConfig.addPushRefSpec(new RefSpec("HEAD:refs/heads/newbranch"));
remoteConfig.update(config);
config.save();

writeTrashFile("f", "content of f");
git.add().addFilepattern("f").call();
RevCommit commit = git.commit().setMessage("adding f").call();

assertEquals(null, git2.getRepository().resolve("refs/heads/master"));
git.push().setRemote("test").call();
assertEquals(commit.getId(),
git2.getRepository().resolve("refs/heads/newbranch"));


try (Git git = new Git(db);
Git git2 = new Git(createBareRepository())) {
final StoredConfig config = git.getRepository().getConfig();
RemoteConfig remoteConfig = new RemoteConfig(config, "test");
URIish uri = new URIish(git2.getRepository().getDirectory().toURI()
.toURL());
remoteConfig.addURI(uri);
remoteConfig.addPushRefSpec(new RefSpec("HEAD:refs/heads/newbranch"));
remoteConfig.update(config);
config.save();

writeTrashFile("f", "content of f");
git.add().addFilepattern("f").call();
RevCommit commit = git.commit().setMessage("adding f").call();

assertEquals(null, git2.getRepository().resolve("refs/heads/master"));
git.push().setRemote("test").call();
assertEquals(commit.getId(),
git2.getRepository().resolve("refs/heads/newbranch"));
}
}

/**
@@ -283,38 +281,37 @@ public class PushCommandTest extends RepositoryTestCase {
*/
@Test
public void testPushWithoutPushRefSpec() throws Exception {
Git git = new Git(db);
Git git2 = new Git(createBareRepository());

final StoredConfig config = git.getRepository().getConfig();
RemoteConfig remoteConfig = new RemoteConfig(config, "test");
URIish uri = new URIish(git2.getRepository().getDirectory().toURI()
.toURL());
remoteConfig.addURI(uri);
remoteConfig.addFetchRefSpec(new RefSpec(
"+refs/heads/*:refs/remotes/origin/*"));
remoteConfig.update(config);
config.save();

writeTrashFile("f", "content of f");
git.add().addFilepattern("f").call();
RevCommit commit = git.commit().setMessage("adding f").call();

git.checkout().setName("not-pushed").setCreateBranch(true).call();
git.checkout().setName("branchtopush").setCreateBranch(true).call();

assertEquals(null,
git2.getRepository().resolve("refs/heads/branchtopush"));
assertEquals(null, git2.getRepository()
.resolve("refs/heads/not-pushed"));
assertEquals(null, git2.getRepository().resolve("refs/heads/master"));
git.push().setRemote("test").call();
assertEquals(commit.getId(),
git2.getRepository().resolve("refs/heads/branchtopush"));
assertEquals(null, git2.getRepository()
.resolve("refs/heads/not-pushed"));
assertEquals(null, git2.getRepository().resolve("refs/heads/master"));

try (Git git = new Git(db);
Git git2 = new Git(createBareRepository())) {
final StoredConfig config = git.getRepository().getConfig();
RemoteConfig remoteConfig = new RemoteConfig(config, "test");
URIish uri = new URIish(git2.getRepository().getDirectory().toURI()
.toURL());
remoteConfig.addURI(uri);
remoteConfig.addFetchRefSpec(new RefSpec(
"+refs/heads/*:refs/remotes/origin/*"));
remoteConfig.update(config);
config.save();

writeTrashFile("f", "content of f");
git.add().addFilepattern("f").call();
RevCommit commit = git.commit().setMessage("adding f").call();

git.checkout().setName("not-pushed").setCreateBranch(true).call();
git.checkout().setName("branchtopush").setCreateBranch(true).call();

assertEquals(null,
git2.getRepository().resolve("refs/heads/branchtopush"));
assertEquals(null, git2.getRepository()
.resolve("refs/heads/not-pushed"));
assertEquals(null, git2.getRepository().resolve("refs/heads/master"));
git.push().setRemote("test").call();
assertEquals(commit.getId(),
git2.getRepository().resolve("refs/heads/branchtopush"));
assertEquals(null, git2.getRepository()
.resolve("refs/heads/not-pushed"));
assertEquals(null, git2.getRepository().resolve("refs/heads/master"));
}
}

/**
@@ -335,51 +332,51 @@ public class PushCommandTest extends RepositoryTestCase {
remoteConfig.update(config);
config.save();

Git git1 = new Git(db);
Git git2 = new Git(db2);

// push master (with a new commit) to the remote
git1.commit().setMessage("initial commit").call();
try (Git git1 = new Git(db);
Git git2 = new Git(db2)) {
// push master (with a new commit) to the remote
git1.commit().setMessage("initial commit").call();

RefSpec spec = new RefSpec("refs/heads/*:refs/heads/*");
git1.push().setRemote("test").setRefSpecs(spec).call();

// create an unrelated ref and a commit on our remote
git2.branchCreate().setName("refs/heads/other").call();
git2.checkout().setName("refs/heads/other").call();

writeTrashFile("a", "content of a");
git2.add().addFilepattern("a").call();
RevCommit commit2 = git2.commit().setMessage("adding a").call();

// run a gc to ensure we have a bitmap index
Properties res = git1.gc().setExpire(null).call();
assertEquals(7, res.size());

// create another commit so we have something else to push
writeTrashFile("b", "content of b");
git1.add().addFilepattern("b").call();
RevCommit commit3 = git1.commit().setMessage("adding b").call();

try {
// Re-run the push. Failure may happen here.
RefSpec spec = new RefSpec("refs/heads/*:refs/heads/*");
git1.push().setRemote("test").setRefSpecs(spec).call();
} catch (TransportException e) {
assertTrue("should be caused by a MissingObjectException", e
.getCause().getCause() instanceof MissingObjectException);
fail("caught MissingObjectException for a change we don't have");
}

// Remote will have both a and b. Master will have only b
try {
db.resolve(commit2.getId().getName() + "^{commit}");
fail("id shouldn't exist locally");
} catch (MissingObjectException e) {
// we should get here
// create an unrelated ref and a commit on our remote
git2.branchCreate().setName("refs/heads/other").call();
git2.checkout().setName("refs/heads/other").call();

writeTrashFile("a", "content of a");
git2.add().addFilepattern("a").call();
RevCommit commit2 = git2.commit().setMessage("adding a").call();

// run a gc to ensure we have a bitmap index
Properties res = git1.gc().setExpire(null).call();
assertEquals(7, res.size());

// create another commit so we have something else to push
writeTrashFile("b", "content of b");
git1.add().addFilepattern("b").call();
RevCommit commit3 = git1.commit().setMessage("adding b").call();

try {
// Re-run the push. Failure may happen here.
git1.push().setRemote("test").setRefSpecs(spec).call();
} catch (TransportException e) {
assertTrue("should be caused by a MissingObjectException", e
.getCause().getCause() instanceof MissingObjectException);
fail("caught MissingObjectException for a change we don't have");
}

// Remote will have both a and b. Master will have only b
try {
db.resolve(commit2.getId().getName() + "^{commit}");
fail("id shouldn't exist locally");
} catch (MissingObjectException e) {
// we should get here
}
assertEquals(commit2.getId(),
db2.resolve(commit2.getId().getName() + "^{commit}"));
assertEquals(commit3.getId(),
db2.resolve(commit3.getId().getName() + "^{commit}"));
}
assertEquals(commit2.getId(),
db2.resolve(commit2.getId().getName() + "^{commit}"));
assertEquals(commit3.getId(),
db2.resolve(commit3.getId().getName() + "^{commit}"));
}
}

+ 43
- 39
org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/PatchIdDiffFormatterTest.java View File

@@ -61,21 +61,22 @@ public class PatchIdDiffFormatterTest extends RepositoryTestCase {
File folder = new File(db.getDirectory().getParent(), "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");
try (Git git = new Git(db);
PatchIdDiffFormatter df = new PatchIdDiffFormatter()) {
git.add().addFilepattern(".").call();
git.commit().setMessage("Initial commit").call();
write(new File(folder, "folder.txt"), "folder change");

PatchIdDiffFormatter df = new PatchIdDiffFormatter();
df.setRepository(db);
df.setPathFilter(PathFilter.create("folder"));
DirCacheIterator oldTree = new DirCacheIterator(db.readDirCache());
FileTreeIterator newTree = new FileTreeIterator(db);
df.format(oldTree, newTree);
df.flush();
df.setRepository(db);
df.setPathFilter(PathFilter.create("folder"));
DirCacheIterator oldTree = new DirCacheIterator(db.readDirCache());
FileTreeIterator newTree = new FileTreeIterator(db);
df.format(oldTree, newTree);
df.flush();

assertEquals("1ff64e0f9333e9b81967c3e8d7a81362b14d5441", df
.getCalulatedPatchId().name());
assertEquals("1ff64e0f9333e9b81967c3e8d7a81362b14d5441", df
.getCalulatedPatchId().name());
}
}

@Test
@@ -84,37 +85,40 @@ public class PatchIdDiffFormatterTest extends RepositoryTestCase {
File folder = new File(db.getDirectory().getParent(), "folder");
folder.mkdir();
write(new File(folder, "folder.txt"), "\n\n\n\nfolder");
Git git = new Git(db);
git.add().addFilepattern(".").call();
git.commit().setMessage("Initial commit").call();
write(new File(folder, "folder.txt"), "\n\n\n\nfolder change");
try (Git git = new Git(db)) {
git.add().addFilepattern(".").call();
git.commit().setMessage("Initial commit").call();
write(new File(folder, "folder.txt"), "\n\n\n\nfolder change");

PatchIdDiffFormatter df = new PatchIdDiffFormatter();
df.setRepository(db);
df.setPathFilter(PathFilter.create("folder"));
DirCacheIterator oldTree = new DirCacheIterator(db.readDirCache());
FileTreeIterator newTree = new FileTreeIterator(db);
df.format(oldTree, newTree);
df.flush();
try (PatchIdDiffFormatter df = new PatchIdDiffFormatter()) {
df.setRepository(db);
df.setPathFilter(PathFilter.create("folder"));
DirCacheIterator oldTree = new DirCacheIterator(db.readDirCache());
FileTreeIterator newTree = new FileTreeIterator(db);
df.format(oldTree, newTree);
df.flush();

assertEquals("08fca5ac531383eb1da8bf6b6f7cf44411281407", df
.getCalulatedPatchId().name());
assertEquals("08fca5ac531383eb1da8bf6b6f7cf44411281407", df
.getCalulatedPatchId().name());
}

write(new File(folder, "folder.txt"), "a\n\n\n\nfolder");
git.add().addFilepattern(".").call();
git.commit().setMessage("Initial commit").call();
write(new File(folder, "folder.txt"), "a\n\n\n\nfolder change");
write(new File(folder, "folder.txt"), "a\n\n\n\nfolder");
git.add().addFilepattern(".").call();
git.commit().setMessage("Initial commit").call();
write(new File(folder, "folder.txt"), "a\n\n\n\nfolder change");

df = new PatchIdDiffFormatter();
df.setRepository(db);
df.setPathFilter(PathFilter.create("folder"));
oldTree = new DirCacheIterator(db.readDirCache());
newTree = new FileTreeIterator(db);
df.format(oldTree, newTree);
df.flush();
try (PatchIdDiffFormatter df = new PatchIdDiffFormatter()) {
df.setRepository(db);
df.setPathFilter(PathFilter.create("folder"));
DirCacheIterator oldTree = new DirCacheIterator(db.readDirCache());
FileTreeIterator newTree = new FileTreeIterator(db);
df.format(oldTree, newTree);
df.flush();

assertEquals("08fca5ac531383eb1da8bf6b6f7cf44411281407", df
.getCalulatedPatchId().name());
assertEquals("08fca5ac531383eb1da8bf6b6f7cf44411281407", df
.getCalulatedPatchId().name());
}
}
}

}

+ 30
- 26
org.eclipse.jgit.test/tst/org/eclipse/jgit/gitrepo/RepoCommandTest.java View File

@@ -82,38 +82,42 @@ public class RepoCommandTest extends RepositoryTestCase {
super.setUp();

defaultDb = createWorkRepository();
Git git = new Git(defaultDb);
JGitTestUtil.writeTrashFile(defaultDb, "hello.txt", "branch world");
git.add().addFilepattern("hello.txt").call();
oldCommitId = git.commit().setMessage("Initial commit").call().getId();
git.checkout().setName(BRANCH).setCreateBranch(true).call();
git.checkout().setName("master").call();
git.tag().setName(TAG).call();
JGitTestUtil.writeTrashFile(defaultDb, "hello.txt", "master world");
git.add().addFilepattern("hello.txt").call();
git.commit().setMessage("Second commit").call();
addRepoToClose(defaultDb);
try (Git git = new Git(defaultDb)) {
JGitTestUtil.writeTrashFile(defaultDb, "hello.txt", "branch world");
git.add().addFilepattern("hello.txt").call();
oldCommitId = git.commit().setMessage("Initial commit").call().getId();
git.checkout().setName(BRANCH).setCreateBranch(true).call();
git.checkout().setName("master").call();
git.tag().setName(TAG).call();
JGitTestUtil.writeTrashFile(defaultDb, "hello.txt", "master world");
git.add().addFilepattern("hello.txt").call();
git.commit().setMessage("Second commit").call();
addRepoToClose(defaultDb);
}

notDefaultDb = createWorkRepository();
git = new Git(notDefaultDb);
JGitTestUtil.writeTrashFile(notDefaultDb, "world.txt", "hello");
git.add().addFilepattern("world.txt").call();
git.commit().setMessage("Initial commit").call();
addRepoToClose(notDefaultDb);
try (Git git = new Git(notDefaultDb)) {
JGitTestUtil.writeTrashFile(notDefaultDb, "world.txt", "hello");
git.add().addFilepattern("world.txt").call();
git.commit().setMessage("Initial commit").call();
addRepoToClose(notDefaultDb);
}

groupADb = createWorkRepository();
git = new Git(groupADb);
JGitTestUtil.writeTrashFile(groupADb, "a.txt", "world");
git.add().addFilepattern("a.txt").call();
git.commit().setMessage("Initial commit").call();
addRepoToClose(groupADb);
try (Git git = new Git(groupADb)) {
JGitTestUtil.writeTrashFile(groupADb, "a.txt", "world");
git.add().addFilepattern("a.txt").call();
git.commit().setMessage("Initial commit").call();
addRepoToClose(groupADb);
}

groupBDb = createWorkRepository();
git = new Git(groupBDb);
JGitTestUtil.writeTrashFile(groupBDb, "b.txt", "world");
git.add().addFilepattern("b.txt").call();
git.commit().setMessage("Initial commit").call();
addRepoToClose(groupBDb);
try (Git git = new Git(groupBDb)) {
JGitTestUtil.writeTrashFile(groupBDb, "b.txt", "world");
git.add().addFilepattern("b.txt").call();
git.commit().setMessage("Initial commit").call();
addRepoToClose(groupBDb);
}

resolveRelativeUris();
}

+ 4
- 4
org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/ObjectDirectoryTest.java View File

@@ -62,18 +62,18 @@ public class ObjectDirectoryTest extends RepositoryTestCase {
throws Exception {
ExecutorService e = Executors.newCachedThreadPool();
for (int i=0; i < 100; ++i) {
ObjectDirectory db = createBareRepository().getObjectDatabase();
for (Future f : e.invokeAll(blobInsertersForTheSameFanOutDir(db))) {
ObjectDirectory dir = createBareRepository().getObjectDatabase();
for (Future f : e.invokeAll(blobInsertersForTheSameFanOutDir(dir))) {
f.get();
}
}
}

private Collection<Callable<ObjectId>> blobInsertersForTheSameFanOutDir(
final ObjectDirectory db) {
final ObjectDirectory dir) {
Callable<ObjectId> callable = new Callable<ObjectId>() {
public ObjectId call() throws Exception {
return db.newInserter().insert(Constants.OBJ_BLOB, new byte[0]);
return dir.newInserter().insert(Constants.OBJ_BLOB, new byte[0]);
}
};
return Collections.nCopies(4, callable);

+ 6
- 5
org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/PackWriterTest.java View File

@@ -342,12 +342,13 @@ public class PackWriterTest extends SampleDataRepositoryTestCase {
ObjectId.fromString("902d5476fa249b7abc9d84c611577a81381f0327"),
ObjectId.fromString("5b6e7c66c276e7610d4a73c70ec1a1f7c1003259"),
ObjectId.fromString("6ff87c4664981e4397625791c8ea3bbb5f2279a3") };
final RevWalk parser = new RevWalk(db);
final RevObject forcedOrderRevs[] = new RevObject[forcedOrder.length];
for (int i = 0; i < forcedOrder.length; i++)
forcedOrderRevs[i] = parser.parseAny(forcedOrder[i]);
try (final RevWalk parser = new RevWalk(db)) {
final RevObject forcedOrderRevs[] = new RevObject[forcedOrder.length];
for (int i = 0; i < forcedOrder.length; i++)
forcedOrderRevs[i] = parser.parseAny(forcedOrder[i]);

createVerifyOpenPack(Arrays.asList(forcedOrderRevs));
createVerifyOpenPack(Arrays.asList(forcedOrderRevs));
}

assertEquals(forcedOrder.length, writer.getObjectCount());
verifyObjectsOrder(forcedOrder);

+ 2
- 2
org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/RefDirectoryTest.java View File

@@ -1444,8 +1444,8 @@ public class RefDirectoryTest extends LocalDiskRepositoryTestCase {
// empty
}

public void beginTask(String title, int totalWork) {
this.totalWork = totalWork;
public void beginTask(String title, int total) {
this.totalWork = total;
lastWork = 0;
}


+ 36
- 32
org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RacyGitTests.java View File

@@ -82,38 +82,42 @@ public class RacyGitTests extends RepositoryTestCase {
}
FileTreeIteratorWithTimeControl fileIt = new FileTreeIteratorWithTimeControl(
db, modTimes);
NameConflictTreeWalk tw = new NameConflictTreeWalk(db);
tw.addTree(fileIt);
tw.setRecursive(true);
FileTreeIterator t;
long t0 = 0;
for (int i = 0; i < 10; i++) {
assertTrue(tw.next());
t = tw.getTree(0, FileTreeIterator.class);
if (i == 0)
t0 = t.getEntryLastModified();
else
assertEquals(t0, t.getEntryLastModified());
}
long t1 = 0;
for (int i = 0; i < 10; i++) {
assertTrue(tw.next());
t = tw.getTree(0, FileTreeIterator.class);
if (i == 0) {
t1 = t.getEntryLastModified();
assertTrue(t1 > t0);
} else
assertEquals(t1, t.getEntryLastModified());
}
long t2 = 0;
for (int i = 0; i < 10; i++) {
assertTrue(tw.next());
t = tw.getTree(0, FileTreeIterator.class);
if (i == 0) {
t2 = t.getEntryLastModified();
assertTrue(t2 > t1);
} else
assertEquals(t2, t.getEntryLastModified());
try (NameConflictTreeWalk tw = new NameConflictTreeWalk(db)) {
tw.addTree(fileIt);
tw.setRecursive(true);
FileTreeIterator t;
long t0 = 0;
for (int i = 0; i < 10; i++) {
assertTrue(tw.next());
t = tw.getTree(0, FileTreeIterator.class);
if (i == 0) {
t0 = t.getEntryLastModified();
} else {
assertEquals(t0, t.getEntryLastModified());
}
}
long t1 = 0;
for (int i = 0; i < 10; i++) {
assertTrue(tw.next());
t = tw.getTree(0, FileTreeIterator.class);
if (i == 0) {
t1 = t.getEntryLastModified();
assertTrue(t1 > t0);
} else {
assertEquals(t1, t.getEntryLastModified());
}
}
long t2 = 0;
for (int i = 0; i < 10; i++) {
assertTrue(tw.next());
t = tw.getTree(0, FileTreeIterator.class);
if (i == 0) {
t2 = t.getEntryLastModified();
assertTrue(t2 > t1);
} else {
assertEquals(t2, t.getEntryLastModified());
}
}
}
}


+ 7
- 10
org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ReflogConfigTest.java View File

@@ -70,8 +70,7 @@ public class ReflogConfigTest extends RepositoryTestCase {

// do one commit and check that reflog size is 0: no reflogs should be
// written
commit("A Commit\n", new PersonIdent(author, commitTime, tz),
new PersonIdent(committer, commitTime, tz));
commit("A Commit\n", commitTime, tz);
commitTime += 60 * 1000;
assertTrue(
"Reflog for HEAD still contain no entry",
@@ -83,8 +82,7 @@ public class ReflogConfigTest extends RepositoryTestCase {
assertTrue(cfg.get(CoreConfig.KEY).isLogAllRefUpdates());

// do one commit and check that reflog size is increased to 1
commit("A Commit\n", new PersonIdent(author, commitTime, tz),
new PersonIdent(committer, commitTime, tz));
commit("A Commit\n", commitTime, tz);
commitTime += 60 * 1000;
assertTrue(
"Reflog for HEAD should contain one entry",
@@ -96,18 +94,17 @@ public class ReflogConfigTest extends RepositoryTestCase {
assertFalse(cfg.get(CoreConfig.KEY).isLogAllRefUpdates());

// do one commit and check that reflog size is 2
commit("A Commit\n", new PersonIdent(author, commitTime, tz),
new PersonIdent(committer, commitTime, tz));
commit("A Commit\n", commitTime, tz);
assertTrue(
"Reflog for HEAD should contain two entries",
db.getReflogReader(Constants.HEAD).getReverseEntries().size() == 2);
}

private void commit(String commitMsg, PersonIdent author,
PersonIdent committer) throws IOException {
private void commit(String commitMsg, long commitTime, int tz)
throws IOException {
final CommitBuilder commit = new CommitBuilder();
commit.setAuthor(author);
commit.setCommitter(committer);
commit.setAuthor(new PersonIdent(author, commitTime, tz));
commit.setCommitter(new PersonIdent(committer, commitTime, tz));
commit.setMessage(commitMsg);
ObjectId id;
try (ObjectInserter inserter = db.newObjectInserter()) {

+ 94
- 88
org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ReflogResolveTest.java View File

@@ -60,117 +60,123 @@ public class ReflogResolveTest extends RepositoryTestCase {

@Test
public void resolveMasterCommits() 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("file.txt", "content2");
git.add().addFilepattern("file.txt").call();
RevCommit c2 = git.commit().setMessage("edit file").call();

assertEquals(c2, db.resolve("master@{0}"));
assertEquals(c1, db.resolve("master@{1}"));
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("file.txt", "content2");
git.add().addFilepattern("file.txt").call();
RevCommit c2 = git.commit().setMessage("edit file").call();

assertEquals(c2, db.resolve("master@{0}"));
assertEquals(c1, db.resolve("master@{1}"));
}
}

@Test
public void resolveUnnamedCurrentBranchCommits() 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("file.txt", "content2");
git.add().addFilepattern("file.txt").call();
RevCommit c2 = git.commit().setMessage("edit file").call();

assertEquals(c2, db.resolve("master@{0}"));
assertEquals(c1, db.resolve("master@{1}"));

git.checkout().setCreateBranch(true).setName("newbranch")
.setStartPoint(c1).call();

// same as current branch, e.g. master
assertEquals(c1, db.resolve("@{0}"));
try {
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("file.txt", "content2");
git.add().addFilepattern("file.txt").call();
RevCommit c2 = git.commit().setMessage("edit file").call();

assertEquals(c2, db.resolve("master@{0}"));
assertEquals(c1, db.resolve("master@{1}"));

git.checkout().setCreateBranch(true).setName("newbranch")
.setStartPoint(c1).call();

// same as current branch, e.g. master
assertEquals(c1, db.resolve("@{0}"));
try {
assertEquals(c1, db.resolve("@{1}"));
fail(); // Looking at wrong ref, e.g HEAD
} catch (RevisionSyntaxException e) {
assertNotNull(e);
}

// detached head, read HEAD reflog
git.checkout().setName(c2.getName()).call();
assertEquals(c2, db.resolve("@{0}"));
assertEquals(c1, db.resolve("@{1}"));
fail(); // Looking at wrong ref, e.g HEAD
} catch (RevisionSyntaxException e) {
assertNotNull(e);
assertEquals(c2, db.resolve("@{2}"));
}

// detached head, read HEAD reflog
git.checkout().setName(c2.getName()).call();
assertEquals(c2, db.resolve("@{0}"));
assertEquals(c1, db.resolve("@{1}"));
assertEquals(c2, db.resolve("@{2}"));
}

@Test
public void resolveReflogParent() 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("file.txt", "content2");
git.add().addFilepattern("file.txt").call();
git.commit().setMessage("edit file").call();

assertEquals(c1, db.resolve("master@{0}~1"));
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("file.txt", "content2");
git.add().addFilepattern("file.txt").call();
git.commit().setMessage("edit file").call();

assertEquals(c1, db.resolve("master@{0}~1"));
}
}

@Test
public void resolveNonExistingBranch() throws Exception {
Git git = new Git(db);
writeTrashFile("file.txt", "content");
git.add().addFilepattern("file.txt").call();
git.commit().setMessage("create file").call();
assertNull(db.resolve("notabranch@{7}"));
try (Git git = new Git(db)) {
writeTrashFile("file.txt", "content");
git.add().addFilepattern("file.txt").call();
git.commit().setMessage("create file").call();
assertNull(db.resolve("notabranch@{7}"));
}
}

@Test
public void resolvePreviousBranch() 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("file.txt", "content2");
git.add().addFilepattern("file.txt").call();
RevCommit c2 = git.commit().setMessage("edit file").call();

git.checkout().setCreateBranch(true).setName("newbranch")
.setStartPoint(c1).call();

git.checkout().setName(c1.getName()).call();

git.checkout().setName("master").call();

assertEquals(c1.getName(), db.simplify("@{-1}"));
assertEquals("newbranch", db.simplify("@{-2}"));
assertEquals("master", db.simplify("@{-3}"));

// chained expression
try {
// Cannot refer to reflog of detached head
db.resolve("@{-1}@{0}");
fail();
} catch (RevisionSyntaxException e) {
// good
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("file.txt", "content2");
git.add().addFilepattern("file.txt").call();
RevCommit c2 = git.commit().setMessage("edit file").call();

git.checkout().setCreateBranch(true).setName("newbranch")
.setStartPoint(c1).call();

git.checkout().setName(c1.getName()).call();

git.checkout().setName("master").call();

assertEquals(c1.getName(), db.simplify("@{-1}"));
assertEquals("newbranch", db.simplify("@{-2}"));
assertEquals("master", db.simplify("@{-3}"));

// chained expression
try {
// Cannot refer to reflog of detached head
db.resolve("@{-1}@{0}");
fail();
} catch (RevisionSyntaxException e) {
// good
}
assertEquals(c1.getName(), db.resolve("@{-2}@{0}").getName());

assertEquals(c2.getName(), db.resolve("@{-3}@{0}").getName());
}
assertEquals(c1.getName(), db.resolve("@{-2}@{0}").getName());

assertEquals(c2.getName(), db.resolve("@{-3}@{0}").getName());
}

@Test
public void resolveDate() throws Exception {
Git git = new Git(db);
writeTrashFile("file.txt", "content");
git.add().addFilepattern("file.txt").call();
git.commit().setMessage("create file").call();
try {
db.resolve("master@{yesterday}");
fail("Exception not thrown");
} catch (RevisionSyntaxException e) {
assertNotNull(e);
try (Git git = new Git(db)) {
writeTrashFile("file.txt", "content");
git.add().addFilepattern("file.txt").call();
git.commit().setMessage("create file").call();
try {
db.resolve("master@{yesterday}");
fail("Exception not thrown");
} catch (RevisionSyntaxException e) {
assertNotNull(e);
}
}
}
}

+ 14
- 15
org.eclipse.jgit.test/tst/org/eclipse/jgit/merge/RecursiveMergerTest.java View File

@@ -872,32 +872,31 @@ public class RecursiveMergerTest extends RepositoryTestCase {

private String contentAsString(Repository r, ObjectId treeId, String path)
throws MissingObjectException, IOException {
TreeWalk tw = new TreeWalk(r);
tw.addTree(treeId);
tw.setFilter(PathFilter.create(path));
tw.setRecursive(true);
if (!tw.next())
return null;
AnyObjectId blobId = tw.getObjectId(0);
AnyObjectId blobId;
try (TreeWalk tw = new TreeWalk(r)) {
tw.addTree(treeId);
tw.setFilter(PathFilter.create(path));
tw.setRecursive(true);
if (!tw.next()) {
return null;
}
blobId = tw.getObjectId(0);
}

StringBuilder result = new StringBuilder();
BufferedReader br = null;
ObjectReader or = r.newObjectReader();
try {
br = new BufferedReader(new InputStreamReader(or.open(blobId)
.openStream()));
try (BufferedReader br = new BufferedReader(
new InputStreamReader(or.open(blobId).openStream()))) {
String line;
boolean first = true;
while ((line = br.readLine()) != null) {
if (!first)
if (!first) {
result.append('\n');
}
result.append(line);
first = false;
}
return result.toString();
} finally {
if (br != null)
br.close();
}
}
}

+ 12
- 8
org.eclipse.jgit.test/tst/org/eclipse/jgit/notes/NoteMapTest.java View File

@@ -403,10 +403,12 @@ public class NoteMapTest extends RepositoryTestCase {
}

RevCommit n = commitNoteMap(map);
TreeWalk tw = new TreeWalk(reader);
tw.reset(n.getTree());
while (tw.next())
assertFalse("no fan-out subtree", tw.isSubtree());
try (TreeWalk tw = new TreeWalk(reader)) {
tw.reset(n.getTree());
while (tw.next()) {
assertFalse("no fan-out subtree", tw.isSubtree());
}
}

for (int i = 254; i < 256; i++) {
idBuf.setByte(Constants.OBJECT_ID_LENGTH - 1, i);
@@ -418,13 +420,15 @@ public class NoteMapTest extends RepositoryTestCase {

// The 00 bucket is fully split.
String path = fanout(38, idBuf.name());
tw = TreeWalk.forPath(reader, path, n.getTree());
assertNotNull("has " + path, tw);
try (TreeWalk tw = TreeWalk.forPath(reader, path, n.getTree())) {
assertNotNull("has " + path, tw);
}

// The other bucket is not.
path = fanout(2, data1.name());
tw = TreeWalk.forPath(reader, path, n.getTree());
assertNotNull("has " + path, tw);
try (TreeWalk tw = TreeWalk.forPath(reader, path, n.getTree())) {
assertNotNull("has " + path, tw);
}
}

@Test

+ 81
- 81
org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/PostOrderTreeWalkTest.java View File

@@ -60,124 +60,124 @@ import org.junit.Test;
public class PostOrderTreeWalkTest extends RepositoryTestCase {
@Test
public void testInitialize_NoPostOrder() throws Exception {
final TreeWalk tw = new TreeWalk(db);
assertFalse(tw.isPostOrderTraversal());
try (final TreeWalk tw = new TreeWalk(db)) {
assertFalse(tw.isPostOrderTraversal());
}
}

@Test
public void testInitialize_TogglePostOrder() throws Exception {
final TreeWalk tw = new TreeWalk(db);
assertFalse(tw.isPostOrderTraversal());
tw.setPostOrderTraversal(true);
assertTrue(tw.isPostOrderTraversal());
tw.setPostOrderTraversal(false);
assertFalse(tw.isPostOrderTraversal());
try (final TreeWalk tw = new TreeWalk(db)) {
assertFalse(tw.isPostOrderTraversal());
tw.setPostOrderTraversal(true);
assertTrue(tw.isPostOrderTraversal());
tw.setPostOrderTraversal(false);
assertFalse(tw.isPostOrderTraversal());
}
}

@Test
public void testResetDoesNotAffectPostOrder() throws Exception {
final TreeWalk tw = new TreeWalk(db);
tw.setPostOrderTraversal(true);
assertTrue(tw.isPostOrderTraversal());
tw.reset();
assertTrue(tw.isPostOrderTraversal());

tw.setPostOrderTraversal(false);
assertFalse(tw.isPostOrderTraversal());
tw.reset();
assertFalse(tw.isPostOrderTraversal());
try (final TreeWalk tw = new TreeWalk(db)) {
tw.setPostOrderTraversal(true);
assertTrue(tw.isPostOrderTraversal());
tw.reset();
assertTrue(tw.isPostOrderTraversal());

tw.setPostOrderTraversal(false);
assertFalse(tw.isPostOrderTraversal());
tw.reset();
assertFalse(tw.isPostOrderTraversal());
}
}

@Test
public void testNoPostOrder() throws Exception {
final DirCache tree = db.readDirCache();
{
final DirCacheBuilder b = tree.builder();

b.add(makeFile("a"));
b.add(makeFile("b/c"));
b.add(makeFile("b/d"));
b.add(makeFile("q"));

b.finish();
assertEquals(4, tree.getEntryCount());
final DirCacheBuilder b = tree.builder();

b.add(makeFile("a"));
b.add(makeFile("b/c"));
b.add(makeFile("b/d"));
b.add(makeFile("q"));

b.finish();
assertEquals(4, tree.getEntryCount());

try (final TreeWalk tw = new TreeWalk(db)) {
tw.setPostOrderTraversal(false);
tw.addTree(new DirCacheIterator(tree));

assertModes("a", REGULAR_FILE, tw);
assertModes("b", TREE, tw);
assertTrue(tw.isSubtree());
assertFalse(tw.isPostChildren());
tw.enterSubtree();
assertModes("b/c", REGULAR_FILE, tw);
assertModes("b/d", REGULAR_FILE, tw);
assertModes("q", REGULAR_FILE, tw);
}

final TreeWalk tw = new TreeWalk(db);
tw.setPostOrderTraversal(false);
tw.addTree(new DirCacheIterator(tree));

assertModes("a", REGULAR_FILE, tw);
assertModes("b", TREE, tw);
assertTrue(tw.isSubtree());
assertFalse(tw.isPostChildren());
tw.enterSubtree();
assertModes("b/c", REGULAR_FILE, tw);
assertModes("b/d", REGULAR_FILE, tw);
assertModes("q", REGULAR_FILE, tw);
}

@Test
public void testWithPostOrder_EnterSubtree() throws Exception {
final DirCache tree = db.readDirCache();
{
final DirCacheBuilder b = tree.builder();
final DirCacheBuilder b = tree.builder();

b.add(makeFile("a"));
b.add(makeFile("b/c"));
b.add(makeFile("b/d"));
b.add(makeFile("q"));
b.add(makeFile("a"));
b.add(makeFile("b/c"));
b.add(makeFile("b/d"));
b.add(makeFile("q"));

b.finish();
assertEquals(4, tree.getEntryCount());
}
b.finish();
assertEquals(4, tree.getEntryCount());

final TreeWalk tw = new TreeWalk(db);
tw.setPostOrderTraversal(true);
tw.addTree(new DirCacheIterator(tree));
try (final TreeWalk tw = new TreeWalk(db)) {
tw.setPostOrderTraversal(true);
tw.addTree(new DirCacheIterator(tree));

assertModes("a", REGULAR_FILE, tw);
assertModes("a", REGULAR_FILE, tw);

assertModes("b", TREE, tw);
assertTrue(tw.isSubtree());
assertFalse(tw.isPostChildren());
tw.enterSubtree();
assertModes("b/c", REGULAR_FILE, tw);
assertModes("b/d", REGULAR_FILE, tw);
assertModes("b", TREE, tw);
assertTrue(tw.isSubtree());
assertFalse(tw.isPostChildren());
tw.enterSubtree();
assertModes("b/c", REGULAR_FILE, tw);
assertModes("b/d", REGULAR_FILE, tw);

assertModes("b", TREE, tw);
assertTrue(tw.isSubtree());
assertTrue(tw.isPostChildren());
assertModes("b", TREE, tw);
assertTrue(tw.isSubtree());
assertTrue(tw.isPostChildren());

assertModes("q", REGULAR_FILE, tw);
assertModes("q", REGULAR_FILE, tw);
}
}

@Test
public void testWithPostOrder_NoEnterSubtree() throws Exception {
final DirCache tree = db.readDirCache();
{
final DirCacheBuilder b = tree.builder();
final DirCacheBuilder b = tree.builder();

b.add(makeFile("a"));
b.add(makeFile("b/c"));
b.add(makeFile("b/d"));
b.add(makeFile("q"));
b.add(makeFile("a"));
b.add(makeFile("b/c"));
b.add(makeFile("b/d"));
b.add(makeFile("q"));

b.finish();
assertEquals(4, tree.getEntryCount());
}
b.finish();
assertEquals(4, tree.getEntryCount());

final TreeWalk tw = new TreeWalk(db);
tw.setPostOrderTraversal(true);
tw.addTree(new DirCacheIterator(tree));
try (final TreeWalk tw = new TreeWalk(db)) {
tw.setPostOrderTraversal(true);
tw.addTree(new DirCacheIterator(tree));

assertModes("a", REGULAR_FILE, tw);
assertModes("a", REGULAR_FILE, tw);

assertModes("b", TREE, tw);
assertTrue(tw.isSubtree());
assertFalse(tw.isPostChildren());
assertModes("b", TREE, tw);
assertTrue(tw.isSubtree());
assertFalse(tw.isPostChildren());

assertModes("q", REGULAR_FILE, tw);
assertModes("q", REGULAR_FILE, tw);
}
}

private DirCacheEntry makeFile(final String path) throws Exception {

+ 10
- 9
org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/filter/PathSuffixFilterTest.java View File

@@ -113,15 +113,16 @@ public class PathSuffixFilterTest extends RepositoryTestCase {

private List<String> getMatchingPaths(String suffixFilter,
final ObjectId treeId, boolean recursiveWalk) throws IOException {
final TreeWalk tw = new TreeWalk(db);
tw.setFilter(PathSuffixFilter.create(suffixFilter));
tw.setRecursive(recursiveWalk);
tw.addTree(treeId);

List<String> paths = new ArrayList<String>();
while (tw.next())
paths.add(tw.getPathString());
return paths;
try (final TreeWalk tw = new TreeWalk(db)) {
tw.setFilter(PathSuffixFilter.create(suffixFilter));
tw.setRecursive(recursiveWalk);
tw.addTree(treeId);

List<String> paths = new ArrayList<String>();
while (tw.next())
paths.add(tw.getPathString());
return paths;
}
}

}

Loading…
Cancel
Save