Browse Source

PushCommandTest: Open Git instances in try-with-resource

Change-Id: I3a8e28a4097e868a34ee1b23256c7f28d570cd75
Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
stable-4.2
David Pursehouse 9 years ago
parent
commit
f3c250bd08
  1. 371
      org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PushCommandTest.java

371
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PushCommandTest.java

@ -90,26 +90,27 @@ public class PushCommandTest extends RepositoryTestCase {
remoteConfig.update(config); remoteConfig.update(config);
config.save(); config.save();
Git git1 = new Git(db); try (Git git1 = new Git(db)) {
// create some refs via commits and tag // create some refs via commits and tag
RevCommit commit = git1.commit().setMessage("initial commit").call(); RevCommit commit = git1.commit().setMessage("initial commit").call();
Ref tagRef = git1.tag().setName("tag").call(); Ref tagRef = git1.tag().setName("tag").call();
try { try {
db2.resolve(commit.getId().getName() + "^{commit}"); db2.resolve(commit.getId().getName() + "^{commit}");
fail("id shouldn't exist yet"); fail("id shouldn't exist yet");
} catch (MissingObjectException e) { } catch (MissingObjectException e) {
// we should get here // 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 @Test
@ -132,15 +133,16 @@ public class PushCommandTest extends RepositoryTestCase {
+ hookOutput.toPath() + "\"\ncat - >>\"" + hookOutput.toPath() + hookOutput.toPath() + "\"\ncat - >>\"" + hookOutput.toPath()
+ "\"\nexit 0"); + "\"\nexit 0");
Git git1 = new Git(db); try (Git git1 = new Git(db)) {
// create some refs via commits and tag // create some refs via commits and tag
RevCommit commit = git1.commit().setMessage("initial commit").call(); RevCommit commit = git1.commit().setMessage("initial commit").call();
RefSpec spec = new RefSpec("refs/heads/master:refs/heads/x"); RefSpec spec = new RefSpec("refs/heads/master:refs/heads/x");
git1.push().setRemote("test").setRefSpecs(spec).call(); git1.push().setRemote("test").setRefSpecs(spec).call();
assertEquals("1:test, 2:" + uri + ", 3:\n" + "refs/heads/master " assertEquals("1:test, 2:" + uri + ", 3:\n" + "refs/heads/master "
+ commit.getName() + " refs/heads/x " + commit.getName() + " refs/heads/x "
+ ObjectId.zeroId().name(), read(hookOutput)); + ObjectId.zeroId().name(), read(hookOutput));
}
} }
private File writeHookFile(final String name, final String data) private File writeHookFile(final String name, final String data)
@ -160,45 +162,45 @@ public class PushCommandTest extends RepositoryTestCase {
String branch = "refs/heads/master"; String branch = "refs/heads/master";
String trackingBranch = "refs/remotes/" + remote + "/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") RefUpdate branchRefUpdate = db.updateRef(branch);
.call(); branchRefUpdate.setNewObjectId(commit1.getId());
branchRefUpdate.update();
RefUpdate branchRefUpdate = db.updateRef(branch); RefUpdate trackingBranchRefUpdate = db.updateRef(trackingBranch);
branchRefUpdate.setNewObjectId(commit1.getId()); trackingBranchRefUpdate.setNewObjectId(commit1.getId());
branchRefUpdate.update(); trackingBranchRefUpdate.update();
RefUpdate trackingBranchRefUpdate = db.updateRef(trackingBranch); final StoredConfig config = db.getConfig();
trackingBranchRefUpdate.setNewObjectId(commit1.getId()); RemoteConfig remoteConfig = new RemoteConfig(config, remote);
trackingBranchRefUpdate.update(); URIish uri = new URIish(db2.getDirectory().toURI().toURL());
remoteConfig.addURI(uri);
final StoredConfig config = db.getConfig(); remoteConfig.addFetchRefSpec(new RefSpec("+refs/heads/*:refs/remotes/"
RemoteConfig remoteConfig = new RemoteConfig(config, remote); + remote + "/*"));
URIish uri = new URIish(db2.getDirectory().toURI().toURL()); remoteConfig.update(config);
remoteConfig.addURI(uri); config.save();
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); RefSpec spec = new RefSpec(branch + ":" + branch);
Iterable<PushResult> resultIterable = git.push().setRemote(remote) Iterable<PushResult> resultIterable = git.push().setRemote(remote)
.setRefSpecs(spec).call(); .setRefSpecs(spec).call();
PushResult result = resultIterable.iterator().next(); PushResult result = resultIterable.iterator().next();
TrackingRefUpdate trackingRefUpdate = result TrackingRefUpdate trackingRefUpdate = result
.getTrackingRefUpdate(trackingBranch); .getTrackingRefUpdate(trackingBranch);
assertNotNull(trackingRefUpdate); assertNotNull(trackingRefUpdate);
assertEquals(trackingBranch, trackingRefUpdate.getLocalName()); assertEquals(trackingBranch, trackingRefUpdate.getLocalName());
assertEquals(branch, trackingRefUpdate.getRemoteName()); assertEquals(branch, trackingRefUpdate.getRemoteName());
assertEquals(commit2.getId(), trackingRefUpdate.getNewObjectId()); assertEquals(commit2.getId(), trackingRefUpdate.getNewObjectId());
assertEquals(commit2.getId(), db.resolve(trackingBranch)); assertEquals(commit2.getId(), db.resolve(trackingBranch));
assertEquals(commit2.getId(), db2.resolve(branch)); assertEquals(commit2.getId(), db2.resolve(branch));
}
} }
/** /**
@ -208,40 +210,38 @@ public class PushCommandTest extends RepositoryTestCase {
*/ */
@Test @Test
public void testPushRefUpdate() throws Exception { public void testPushRefUpdate() throws Exception {
Git git = new Git(db); try (Git git = new Git(db);
Git git2 = new Git(createBareRepository()); Git git2 = new Git(createBareRepository())) {
final StoredConfig config = git.getRepository().getConfig();
final StoredConfig config = git.getRepository().getConfig(); RemoteConfig remoteConfig = new RemoteConfig(config, "test");
RemoteConfig remoteConfig = new RemoteConfig(config, "test"); URIish uri = new URIish(git2.getRepository().getDirectory().toURI()
URIish uri = new URIish(git2.getRepository().getDirectory().toURI() .toURL());
.toURL()); remoteConfig.addURI(uri);
remoteConfig.addURI(uri); remoteConfig.addPushRefSpec(new RefSpec("+refs/heads/*:refs/heads/*"));
remoteConfig.addPushRefSpec(new RefSpec("+refs/heads/*:refs/heads/*")); remoteConfig.update(config);
remoteConfig.update(config); config.save();
config.save();
writeTrashFile("f", "content of f");
writeTrashFile("f", "content of f"); git.add().addFilepattern("f").call();
git.add().addFilepattern("f").call(); RevCommit commit = git.commit().setMessage("adding f").call();
RevCommit commit = git.commit().setMessage("adding f").call();
assertEquals(null, git2.getRepository().resolve("refs/heads/master"));
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();
git.push().setRemote("test").call(); git.push().setRemote("test").call();
git2.getRepository().getAllRefs(); assertEquals(commit.getId(),
assertEquals("failed to update on attempt " + i, commit.getId(), git2.getRepository().resolve("refs/heads/master"));
git2.getRepository().resolve("refs/heads/test"));
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 @Test
public void testPushWithRefSpecFromConfig() throws Exception { public void testPushWithRefSpecFromConfig() throws Exception {
Git git = new Git(db); try (Git git = new Git(db);
Git git2 = new Git(createBareRepository()); Git git2 = new Git(createBareRepository())) {
final StoredConfig config = git.getRepository().getConfig();
final StoredConfig config = git.getRepository().getConfig(); RemoteConfig remoteConfig = new RemoteConfig(config, "test");
RemoteConfig remoteConfig = new RemoteConfig(config, "test"); URIish uri = new URIish(git2.getRepository().getDirectory().toURI()
URIish uri = new URIish(git2.getRepository().getDirectory().toURI() .toURL());
.toURL()); remoteConfig.addURI(uri);
remoteConfig.addURI(uri); remoteConfig.addPushRefSpec(new RefSpec("HEAD:refs/heads/newbranch"));
remoteConfig.addPushRefSpec(new RefSpec("HEAD:refs/heads/newbranch")); remoteConfig.update(config);
remoteConfig.update(config); config.save();
config.save();
writeTrashFile("f", "content of f");
writeTrashFile("f", "content of f"); git.add().addFilepattern("f").call();
git.add().addFilepattern("f").call(); RevCommit commit = git.commit().setMessage("adding f").call();
RevCommit commit = git.commit().setMessage("adding f").call();
assertEquals(null, git2.getRepository().resolve("refs/heads/master"));
assertEquals(null, git2.getRepository().resolve("refs/heads/master")); git.push().setRemote("test").call();
git.push().setRemote("test").call(); assertEquals(commit.getId(),
assertEquals(commit.getId(), git2.getRepository().resolve("refs/heads/newbranch"));
git2.getRepository().resolve("refs/heads/newbranch")); }
} }
/** /**
@ -283,38 +281,37 @@ public class PushCommandTest extends RepositoryTestCase {
*/ */
@Test @Test
public void testPushWithoutPushRefSpec() throws Exception { public void testPushWithoutPushRefSpec() throws Exception {
Git git = new Git(db); try (Git git = new Git(db);
Git git2 = new Git(createBareRepository()); Git git2 = new Git(createBareRepository())) {
final StoredConfig config = git.getRepository().getConfig();
final StoredConfig config = git.getRepository().getConfig(); RemoteConfig remoteConfig = new RemoteConfig(config, "test");
RemoteConfig remoteConfig = new RemoteConfig(config, "test"); URIish uri = new URIish(git2.getRepository().getDirectory().toURI()
URIish uri = new URIish(git2.getRepository().getDirectory().toURI() .toURL());
.toURL()); remoteConfig.addURI(uri);
remoteConfig.addURI(uri); remoteConfig.addFetchRefSpec(new RefSpec(
remoteConfig.addFetchRefSpec(new RefSpec( "+refs/heads/*:refs/remotes/origin/*"));
"+refs/heads/*:refs/remotes/origin/*")); remoteConfig.update(config);
remoteConfig.update(config); config.save();
config.save();
writeTrashFile("f", "content of f");
writeTrashFile("f", "content of f"); git.add().addFilepattern("f").call();
git.add().addFilepattern("f").call(); RevCommit commit = git.commit().setMessage("adding f").call();
RevCommit commit = git.commit().setMessage("adding f").call();
git.checkout().setName("not-pushed").setCreateBranch(true).call();
git.checkout().setName("not-pushed").setCreateBranch(true).call(); git.checkout().setName("branchtopush").setCreateBranch(true).call();
git.checkout().setName("branchtopush").setCreateBranch(true).call();
assertEquals(null,
assertEquals(null, git2.getRepository().resolve("refs/heads/branchtopush"));
git2.getRepository().resolve("refs/heads/branchtopush")); assertEquals(null, git2.getRepository()
assertEquals(null, git2.getRepository() .resolve("refs/heads/not-pushed"));
.resolve("refs/heads/not-pushed")); assertEquals(null, git2.getRepository().resolve("refs/heads/master"));
assertEquals(null, git2.getRepository().resolve("refs/heads/master")); git.push().setRemote("test").call();
git.push().setRemote("test").call(); assertEquals(commit.getId(),
assertEquals(commit.getId(), git2.getRepository().resolve("refs/heads/branchtopush"));
git2.getRepository().resolve("refs/heads/branchtopush")); assertEquals(null, git2.getRepository()
assertEquals(null, git2.getRepository() .resolve("refs/heads/not-pushed"));
.resolve("refs/heads/not-pushed")); assertEquals(null, git2.getRepository().resolve("refs/heads/master"));
assertEquals(null, git2.getRepository().resolve("refs/heads/master")); }
} }
/** /**
@ -335,51 +332,51 @@ public class PushCommandTest extends RepositoryTestCase {
remoteConfig.update(config); remoteConfig.update(config);
config.save(); config.save();
Git git1 = new Git(db); try (Git git1 = new Git(db);
Git git2 = new Git(db2); Git git2 = new Git(db2)) {
// push master (with a new commit) to the remote
// push master (with a new commit) to the remote git1.commit().setMessage("initial commit").call();
git1.commit().setMessage("initial commit").call();
RefSpec spec = new RefSpec("refs/heads/*:refs/heads/*"); 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.
git1.push().setRemote("test").setRefSpecs(spec).call(); 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 // create an unrelated ref and a commit on our remote
try { git2.branchCreate().setName("refs/heads/other").call();
db.resolve(commit2.getId().getName() + "^{commit}"); git2.checkout().setName("refs/heads/other").call();
fail("id shouldn't exist locally");
} catch (MissingObjectException e) { writeTrashFile("a", "content of a");
// we should get here 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}"));
} }
} }

Loading…
Cancel
Save