Browse Source

RepoCommand: don't record new commit if tree did not change

Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
Change-Id: Ib6509e816684256d723558d5e8f3c37de58a2ff8
tags/v4.11.0.201803080745-r
Han-Wen Nienhuys 6 years ago
parent
commit
3214171dec

+ 54
- 2
org.eclipse.jgit.test/tst/org/eclipse/jgit/gitrepo/RepoCommandTest.java View File

@@ -185,6 +185,59 @@ public class RepoCommandTest extends RepositoryTestCase {
}
}

@Test
public void runTwiceIsNOP() throws Exception {
Repository child = Git.cloneRepository()
.setURI(groupADb.getDirectory().toURI().toString())
.setDirectory(createUniqueTestGitDir(true)).setBare(true).call()
.getRepository();

Repository dest = Git.cloneRepository()
.setURI(db.getDirectory().toURI().toString())
.setDirectory(createUniqueTestGitDir(true)).setBare(true).call()
.getRepository();

assertTrue(dest.isBare());
assertTrue(child.isBare());

StringBuilder xmlContent = new StringBuilder();
xmlContent.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
.append("<manifest>")
.append("<remote name=\"remote1\" fetch=\"..\" />")
.append("<default revision=\"master\" remote=\"remote1\" />")
.append("<project path=\"base\" name=\"platform/base\" />")
.append("</manifest>");
RepoCommand cmd = new RepoCommand(dest);

IndexedRepos repos = new IndexedRepos();
repos.put("platform/base", child);

RevCommit commit = cmd
.setInputStream(new ByteArrayInputStream(
xmlContent.toString().getBytes(UTF_8)))
.setRemoteReader(repos)
.setURI("platform/")
.setTargetURI("platform/superproject")
.setRecordRemoteBranch(true)
.setRecordSubmoduleLabels(true)
.call();

String firstIdStr = commit.getId().name() + ":" + ".gitmodules";
commit = new RepoCommand(dest)
.setInputStream(new ByteArrayInputStream(
xmlContent.toString().getBytes(UTF_8)))
.setRemoteReader(repos)
.setURI("platform/")
.setTargetURI("platform/superproject")
.setRecordRemoteBranch(true)
.setRecordSubmoduleLabels(true)
.call();
String idStr = commit.getId().name() + ":" + ".gitmodules";
assertEquals(firstIdStr, idStr);
child.close();
dest.close();
}

@Test
public void androidSetup() throws Exception {
Repository child = Git.cloneRepository()
@@ -235,6 +288,7 @@ public class RepoCommandTest extends RepositoryTestCase {
child.close();
dest.close();
}

@Test
public void recordUnreachableRemotes() throws Exception {
StringBuilder xmlContent = new StringBuilder();
@@ -277,8 +331,6 @@ public class RepoCommandTest extends RepositoryTestCase {
dest.close();
}



@Test
public void gerritSetup() throws Exception {
Repository child =

+ 5
- 0
org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/RepoCommand.java View File

@@ -643,6 +643,11 @@ public class RepoCommand extends GitCommand<RevCommit> {

// Create a Commit object, populate it and write it
ObjectId headId = repo.resolve(targetBranch + "^{commit}"); //$NON-NLS-1$
if (headId != null && rw.parseCommit(headId).getTree().getId().equals(treeId)) {
// No change. Do nothing.
return rw.parseCommit(headId);
}

CommitBuilder commit = new CommitBuilder();
commit.setTreeId(treeId);
if (headId != null)

Loading…
Cancel
Save