Bladeren bron

Add lookup to remote config if the refSpec is not explicitly set

If no refSpec is explicitly set, the PushCommand should first check the
remote config and then as a fallback use the current behavior.


Change-Id: I2bc648abc517b1d01b2de15d383423ace2081e72
Signed-off-by: Stefan Lay <stefan.lay@sap.com>
tags/v1.1.0.201109011030-rc2
Stefan Lay 13 jaren geleden
bovenliggende
commit
e2815f0121

+ 72
- 0
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PushCommandTest.java Bestand weergeven

@@ -195,4 +195,76 @@ public class PushCommandTest extends RepositoryTestCase {

}
}

/**
* Check that the push refspec is read from config.
*
* @throws Exception
*/
@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"));


}

/**
* Check that only HEAD is pushed if no refspec is given.
*
* @throws Exception
*/
@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"));

}
}

+ 5
- 0
org.eclipse.jgit/src/org/eclipse/jgit/api/PushCommand.java Bestand weergeven

@@ -124,6 +124,11 @@ public class PushCommand extends GitCommand<Iterable<PushResult>> {
ArrayList<PushResult> pushResults = new ArrayList<PushResult>(3);

try {
if (refSpecs.isEmpty()) {
RemoteConfig config = new RemoteConfig(repo.getConfig(),
getRemote());
refSpecs.addAll(config.getPushRefSpecs());
}
if (refSpecs.isEmpty()) {
Ref head = repo.getRef(Constants.HEAD);
if (head != null && head.isSymbolic())

Laden…
Annuleren
Opslaan