소스 검색

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 년 전
부모
커밋
e2815f0121
2개의 변경된 파일77개의 추가작업 그리고 0개의 파일을 삭제
  1. 72
    0
      org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PushCommandTest.java
  2. 5
    0
      org.eclipse.jgit/src/org/eclipse/jgit/api/PushCommand.java

+ 72
- 0
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PushCommandTest.java 파일 보기

@@ -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 파일 보기

@@ -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())

Loading…
취소
저장