@Test public void testConflictsFromOtherPush() throws Exception { // now Repository 2 update the file and push File file1 = new File(workdir2, "file.txt"); repositoryUtil.appendFileContent(file1, "-->from Repository 2"); Git git = new Git(repository2); git.add().addFilepattern("file.txt").call(); git.commit().setMessage("Second Commit").call(); URIish remote = new URIish("file:///" + repository1.getDirectory().toString()); // now push the Repository 2 into the Repository 1 RefSpec rs = new RefSpec(); rs = rs.setSourceDestination("refs/heads/master", "refs/heads/master"); PushOperation po = new PushOperation(repository2, remote.toString(), Arrays.asList(rs), false, 0); po.execute(); System.out.println(po.toString()); // Now Repository 3 update the file and push File file2 = new File(workdir3, "file.txt"); repositoryUtil.appendFileContent(file2, "-->from Repository 3"); git = new Git(repository3); git.add().addFilepattern("file.txt").call(); git.commit().setMessage("Third Commit").call(); // now push the Repository 3 into the Repository 1 rs = new RefSpec(); rs = rs.setSourceDestination("refs/heads/master", "refs/heads/master"); // rs=rs.setForceUpdate(true); po = new PushOperation(repository3, remote.toString(), Arrays.asList(rs), false, 0); po.execute(); System.out.println(po.toString()); }
/** * Push from repository1 "master" into "test" of repository2. * * @throws Exception */ @Test public void testPush() throws Exception { // push from repository1 to repository2 System.out.println(repository2.getBranch()); PushOperation pop = createPushOperation(); pop.execute(); assertEquals( org.eclipse.jgit.transport.RemoteRefUpdate.Status.UP_TO_DATE, getStatus(pop.getOperationResult())); System.out.println(pop.toString()); ArrayList<String> files = new ArrayList<String>(); File file = new File(workdir, "file2.txt"); FileUtils.createNewFile(file); repositoryUtil.appendFileContent(file, "new file"); files.add(repositoryUtil.getRepoRelativePath(file.getAbsolutePath())); AddToIndexOperation trop = new AddToIndexOperation(files, repository1); trop.execute(); CommitOperation cop = new CommitOperation(repository1, files, files, AUTHOR, COMMITTER, "added files"); cop.execute(); pop = createPushOperation(); pop.execute(); assertEquals( org.eclipse.jgit.transport.RemoteRefUpdate.Status.OK, getStatus(pop.getOperationResult())); System.out.println(pop.toString()); try { // assert that we cannot run this again pop.execute(); fail("Expected Exception not thrown"); } catch (IllegalStateException e) { // expected } pop = createPushOperation(); pop.execute(); assertEquals( org.eclipse.jgit.transport.RemoteRefUpdate.Status.UP_TO_DATE, getStatus(pop.getOperationResult())); System.out.println(pop.toString()); File testFile = new File(workdir2, repositoryUtil.getRepoRelativePath(file.getAbsolutePath())); assertFalse(testFile.exists()); testFile = new File(workdir, repositoryUtil.getRepoRelativePath(file.getAbsolutePath())); assertTrue(testFile.exists()); // check out test and verify the file is there new Git(repository2).checkout().setName("refs/heads/test").call(); testFile = new File(workdir2, repositoryUtil.getRepoRelativePath(file.getAbsolutePath())); assertTrue(testFile.exists()); }
@Test public void testUpdateTrackingBranchIfSpecifiedInRemoteRefUpdate() throws Exception { // Commit on repository 2 // RevCommit commit = repository2.addAndCommit(project, new File(workdir2, "test.txt"), "Commit // in repository 2"); System.out.println(repository2.getBranch()); new Git(repository2).checkout().setName("refs/heads/test").call(); System.out.println(repository2.getBranch()); ArrayList<String> files = new ArrayList<String>(); File file = new File(workdir2, "test.txt"); FileUtils.createNewFile(file); repositoryUtil.appendFileContent(file, "create file of test.txt in repository 2"); files.add(repositoryUtil.getRepoRelativePath(file.getAbsolutePath())); AddToIndexOperation trop = new AddToIndexOperation(files, repository2); trop.execute(); CommitOperation cop = new CommitOperation(repository2, files, files, AUTHOR, COMMITTER, "Commit in repository 2"); cop.execute(); // We want to push from repository 2 to 1 (because repository 2 already // has tracking set up) // URIish remote = repository1.getUri(); URIish remote = new URIish("file:///" + repository1.getDirectory().toString()); String trackingRef = "refs/remotes/origin/master"; RemoteRefUpdate update = new RemoteRefUpdate(repository2, "HEAD", "refs/heads/master", false, trackingRef, null); PushOperationSpecification spec = new PushOperationSpecification(); spec.addURIRefUpdates(remote, Arrays.asList(update)); PushOperation push = new PushOperation(repository2, spec, false, 0); push.execute(); PushOperationResult result = push.getOperationResult(); PushResult pushResult = result.getPushResult(remote); TrackingRefUpdate trf = pushResult.getTrackingRefUpdate(trackingRef); System.out.println(trf.getLocalName()); System.out.println(trf.getRemoteName()); assertNotNull( "Expected result to have tracking ref update", pushResult.getTrackingRefUpdate(trackingRef)); ObjectId trackingId = repository2.resolve(trackingRef); assertEquals("Expected tracking branch to be updated", cop.getCommit().getId(), trackingId); new Git(repository1).checkout().setName("refs/heads/master").call(); File testFile = new File(workdir2, repositoryUtil.getRepoRelativePath(file.getAbsolutePath())); assertTrue(testFile.exists()); }