PushCommandTest: Open Git instances in try-with-resource
Change-Id: I3a8e28a4097e868a34ee1b23256c7f28d570cd75 Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
This commit is contained in:
parent
83f1f8fc7c
commit
f3c250bd08
|
@ -90,26 +90,27 @@ public void testPush() throws JGitInternalException, IOException,
|
||||||
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 void testPrePushHook() throws JGitInternalException, IOException,
|
||||||
+ 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 void testTrackingUpdate() throws Exception {
|
||||||
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 void testTrackingUpdate() throws Exception {
|
||||||
*/
|
*/
|
||||||
@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();
|
||||||
|
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();
|
||||||
|
|
||||||
final StoredConfig config = git.getRepository().getConfig();
|
writeTrashFile("f", "content of f");
|
||||||
RemoteConfig remoteConfig = new RemoteConfig(config, "test");
|
git.add().addFilepattern("f").call();
|
||||||
URIish uri = new URIish(git2.getRepository().getDirectory().toURI()
|
RevCommit commit = git.commit().setMessage("adding f").call();
|
||||||
.toURL());
|
|
||||||
remoteConfig.addURI(uri);
|
|
||||||
remoteConfig.addPushRefSpec(new RefSpec("+refs/heads/*:refs/heads/*"));
|
|
||||||
remoteConfig.update(config);
|
|
||||||
config.save();
|
|
||||||
|
|
||||||
writeTrashFile("f", "content of f");
|
assertEquals(null, git2.getRepository().resolve("refs/heads/master"));
|
||||||
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();
|
|
||||||
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 void testPushRefUpdate() throws Exception {
|
||||||
*/
|
*/
|
||||||
@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");
|
|
||||||
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"));
|
|
||||||
|
|
||||||
|
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 void testPushWithRefSpecFromConfig() throws Exception {
|
||||||
*/
|
*/
|
||||||
@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();
|
||||||
|
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();
|
||||||
|
|
||||||
final StoredConfig config = git.getRepository().getConfig();
|
writeTrashFile("f", "content of f");
|
||||||
RemoteConfig remoteConfig = new RemoteConfig(config, "test");
|
git.add().addFilepattern("f").call();
|
||||||
URIish uri = new URIish(git2.getRepository().getDirectory().toURI()
|
RevCommit commit = git.commit().setMessage("adding f").call();
|
||||||
.toURL());
|
|
||||||
remoteConfig.addURI(uri);
|
|
||||||
remoteConfig.addFetchRefSpec(new RefSpec(
|
|
||||||
"+refs/heads/*:refs/remotes/origin/*"));
|
|
||||||
remoteConfig.update(config);
|
|
||||||
config.save();
|
|
||||||
|
|
||||||
writeTrashFile("f", "content of f");
|
git.checkout().setName("not-pushed").setCreateBranch(true).call();
|
||||||
git.add().addFilepattern("f").call();
|
git.checkout().setName("branchtopush").setCreateBranch(true).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"));
|
|
||||||
|
|
||||||
|
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 void testPushAfterGC() throws Exception {
|
||||||
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
|
||||||
|
git1.commit().setMessage("initial commit").call();
|
||||||
|
|
||||||
// push master (with a new commit) to the remote
|
RefSpec spec = new RefSpec("refs/heads/*:refs/heads/*");
|
||||||
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.
|
|
||||||
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…
Reference in New Issue