List of usage examples for org.eclipse.jgit.api MergeResult getMergeStatus
public MergeStatus getMergeStatus()
From source file:bench.MainJgit.java
License:BSD License
/** *///from ww w .j av a 2s . com public static void main(final String[] args) throws Exception { final File baseDir = new File("."); final File folder = new File(baseDir, "target"); final File workspace = new File(folder, "workspace"); FileUtils.delete(workspace, FileUtils.IGNORE_ERRORS | FileUtils.RECURSIVE); FileUtils.mkdirs(workspace, true); final String remoteURI = "git@github.com:barchart/barchart-jenkins-tester.git"; final String remoteName = "archon"; final String remoteBranch = "master"; final String localBranch = "cascade"; { final Git git = PluginScmGit.doClone(workspace, remoteURI, remoteName); final Repository repo = git.getRepository(); System.out.println("repo " + repo); } { final CheckoutResult result = PluginScmGit.doCheckout(workspace, localBranch, remoteName, remoteBranch); System.out.println("checkout " + result.getStatus()); } { final CheckoutResult result = PluginScmGit.doCheckout(workspace, localBranch, remoteName, remoteBranch); System.out.println("checkout " + result.getStatus()); } { final RefSpec fetchSpec = PluginScmGit.refFetch(remoteBranch, remoteName, remoteBranch); final FetchResult fetchResult = PluginScmGit.doFetch(workspace, remoteName, fetchSpec); System.out.println("fetch satus: " + fetchResult.getAdvertisedRefs()); final String refHead = PluginScmGit.refHeads(remoteBranch); final Ref remoteHead = fetchResult.getAdvertisedRef(refHead); final ObjectId commit = remoteHead.getObjectId(); final MergeResult mergeResult = PluginScmGit.doMerge(workspace, commit); final MergeStatus mergeStatus = mergeResult.getMergeStatus(); System.out.println("merge status: " + mergeStatus); } }
From source file:br.com.riselabs.cotonet.test.helpers.RepositoryTestCaseTest.java
License:Open Source License
@Test public void mergeConflictScenarioInMemoryRepository() throws Exception { MergeScenario ms = setCollaborationScenarioInBareRepository(); MergeResult result = git.merge().setStrategy(MergeStrategy.RECURSIVE).include("side", ms.getRight()).call(); assertEquals(MergeStatus.CONFLICTING, result.getMergeStatus()); }
From source file:br.com.riselabs.cotonet.test.helpers.RepositoryTestCaseTest.java
License:Open Source License
@Test public void mergeConflictScenarioIsSettedInTempRepository() throws Exception { MergeScenario ms = setCollaborationScenarioInTempRepository(); // asserting that files are different in both branches assertEquals("1\n2\n3\n4-side\n5\n6\n7\n8\n", read(new File(db.getWorkTree(), "Foo.java"))); assertEquals("1\n2\n3-side\n4-side\n5\n", read(new File(db.getWorkTree(), "Bar.java"))); checkoutBranch("refs/heads/master"); assertEquals("1\n2\n3\n4-master\n5\n6\n7\n8\n", read(new File(db.getWorkTree(), "Foo.java"))); assertEquals("1\n2\n3\n4-master\n", read(new File(db.getWorkTree(), "Bar.java"))); // merging m3 with s3 MergeResult result = git.merge().include(ms.getRight().getId()).call(); assertEquals(MergeStatus.CONFLICTING, result.getMergeStatus()); }
From source file:com.barchart.jenkins.cascade.PluginScm.java
License:BSD License
/** * Copy from remote into local.//from w w w .java2 s. c o m */ public static void scmCheckout(final BuildContext<CascadeBuild> context, final MavenModuleSet project) throws IOException, InterruptedException { final String message = checkScm(project); if (message != null) { throw new IllegalStateException(message); } final GitSCM gitScm = (GitSCM) project.getScm(); final FilePath workspace = workspace(context, project); /** Remote objects. */ final BuildLogger logger = context.logger(); final String localBranch = localBranchName(gitScm); final String remoteURI = remoteURI(gitScm); final String remoteName = remoteName(gitScm); final String remoteBranch = remoteBranchName(gitScm); /** Remote operation. */ final FileCallable<String> callable = new FileCallable<String>() { private static final long serialVersionUID = 1L; public String invoke(final File basedir, final VirtualChannel channel) throws IOException, InterruptedException { final boolean hasRepo = PluginScmGit.doRepoTest(basedir); if (hasRepo) { logger.logTab("repository present"); final Status status = PluginScmGit.doStatus(basedir); if (!status.isClean()) { logger.logTab("repository needs cleanup"); PluginScmGit.doReset(basedir); } /** Spec for the fetch mapping. */ final RefSpec fetchSpec = PluginScmGit.refFetch(remoteBranch, remoteName, remoteBranch); final FetchResult fetchResult = PluginScmGit.doFetch(basedir, remoteName, fetchSpec); logger.logTab("fetch result: " + fetchResult.getTrackingRefUpdates().size()); /** Spec of the head of the remote branch. */ final String refHead = PluginScmGit.refHeads(remoteBranch); /** Reference to head of the remote branch. */ final Ref remoteHead = fetchResult.getAdvertisedRef(refHead); if (remoteHead == null) { logger.logErr("remote branch not found: " + refHead); throw new IllegalStateException("Unexpected"); } final ObjectId commit = remoteHead.getObjectId(); final MergeResult mergeResult = PluginScmGit.doMerge(basedir, commit); final MergeStatus mergeStatus = mergeResult.getMergeStatus(); logger.logTab("merge result: " + mergeStatus); if (!mergeStatus.isSuccessful()) { logger.logTab("repository needs clone"); PluginScmGit.doClone(basedir, remoteURI, remoteName); } } else { logger.logTab("repository needs clone"); PluginScmGit.doClone(basedir, remoteURI, remoteName); } final CheckoutResult checkoutResult = PluginScmGit.doCheckout(basedir, localBranch, remoteName, remoteBranch); final CheckoutResult.Status checkoutStatus = checkoutResult.getStatus(); logger.logTab("checkout status: " + checkoutStatus); if (!PluginScmGit.isSuccess(checkoutStatus)) { throw new IllegalStateException("Unexpected"); } /** FIXME checkout does not work */ PluginScmGit.doReset(basedir); final Ref ref = PluginScmGit.findRef(basedir, localBranch); logger.logTab(localBranch + ": " + ref.getObjectId().name()); /** TODO delete local tags */ return null; } }; workspace.act(callable); }
From source file:com.barchart.jenkins.cascade.PluginScm.java
License:BSD License
/** * Update from remote./*from w w w . j a v a2 s .c o m*/ */ public static void scmUpdate(final BuildContext<CascadeBuild> context, final MavenModuleSet project) throws IOException, InterruptedException { final String message = checkScm(project); if (message != null) { throw new IllegalStateException(message); } final GitSCM gitScm = (GitSCM) project.getScm(); final FilePath workspace = workspace(context, project); /** Remote objects. */ final BuildLogger logger = context.logger(); final String localBranch = localBranchName(gitScm); final String remoteName = remoteName(gitScm); final String remoteBranch = remoteBranchName(gitScm); /** Remote operation. */ final FileCallable<Void> callable = new FileCallable<Void>() { private static final long serialVersionUID = 1L; public Void invoke(final File basedir, final VirtualChannel channel) throws IOException, InterruptedException { final String localBranchCurrent = PluginScmGit.branch(basedir); if (!localBranchCurrent.equals(localBranch)) { logger.logErr("branch mismatch: " + localBranchCurrent + "/" + localBranch); throw new IllegalStateException("Unexpected"); } /** Spec for the fetch mapping. */ final RefSpec fetchSpec = PluginScmGit.refFetch(remoteBranch, remoteName, remoteBranch); final FetchResult fetchResult = PluginScmGit.doFetch(basedir, remoteName, fetchSpec); /** Spec of the head of the remote branch. */ final String refHead = PluginScmGit.refHeads(remoteBranch); /** Spec of the head of the local remote tracking branch. */ final String refRemote = PluginScmGit.refRemotes(remoteName, remoteBranch); final TrackingRefUpdate trackingUpdate = fetchResult.getTrackingRefUpdate(refRemote); if (trackingUpdate == null) { logger.logTab("fetch status: " + "no update"); return null; } else { final RefUpdate.Result fetchStatus = trackingUpdate.getResult(); logger.logTab("fetch status: " + fetchStatus); if (fetchStatus == RefUpdate.Result.NO_CHANGE) { return null; } } /** Reference to head of the remote branch. */ final Ref remoteHead = fetchResult.getAdvertisedRef(refHead); final ObjectId commit = remoteHead.getObjectId(); // logger.logTab("commit: " + commit); final MergeResult mergeResult = PluginScmGit.doMerge(basedir, commit); final MergeStatus mergeStatus = mergeResult.getMergeStatus(); logger.logTab("merge status: " + mergeStatus); if (!mergeStatus.isSuccessful()) { throw new IllegalStateException("Unexpected"); } return null; } }; workspace.act(callable); }
From source file:com.chungkwong.jgitgui.BranchTreeItem.java
License:Open Source License
private void gitMerge() { try {//www.j a va2s .co m MergeResult result = ((Git) getParent().getParent().getValue()).merge().include((Ref) getValue()) .call(); if (result.getMergeStatus().equals(MergeResult.MergeStatus.MERGED)) { RevCommit commit = ((Git) getParent().getParent().getValue()).log() .addRange(result.getNewHead(), result.getNewHead()).call().iterator().next(); getParent().getParent().getChildren().filtered(item -> item instanceof LocalTreeItem) .forEach((item) -> item.getChildren().add(new CommitTreeItem(commit))); } else { new Alert(Alert.AlertType.INFORMATION, result.getMergeStatus().toString(), ButtonType.CLOSE).show(); } } catch (Exception ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); Util.informUser(ex); } }
From source file:com.gitblit.servlet.GitServletTest.java
License:Apache License
private void testMergeCommitterVerification(boolean expectedSuccess) throws Exception { UserModel user = getUser();//ww w . j a va 2 s . c o m delete(user); CredentialsProvider cp = new UsernamePasswordCredentialsProvider(user.username, user.password); // fork from original to a temporary bare repo File verification = new File(GitBlitSuite.REPOSITORIES, "refchecks/verify-committer.git"); if (verification.exists()) { FileUtils.delete(verification, FileUtils.RECURSIVE); } CloneCommand clone = Git.cloneRepository(); clone.setURI(MessageFormat.format("{0}/ticgit.git", url)); clone.setDirectory(verification); clone.setBare(true); clone.setCloneAllBranches(true); clone.setCredentialsProvider(cp); GitBlitSuite.close(clone.call()); // require push permissions and committer verification RepositoryModel model = repositories().getRepositoryModel("refchecks/verify-committer.git"); model.authorizationControl = AuthorizationControl.NAMED; model.accessRestriction = AccessRestrictionType.PUSH; model.verifyCommitter = true; // grant user push permission user.setRepositoryPermission(model.name, AccessPermission.PUSH); gitblit().addUser(user); repositories().updateRepositoryModel(model.name, model, false); // clone temp bare repo to working copy File local = new File(GitBlitSuite.REPOSITORIES, "refchecks/verify-wc"); if (local.exists()) { FileUtils.delete(local, FileUtils.RECURSIVE); } clone = Git.cloneRepository(); clone.setURI(MessageFormat.format("{0}/{1}", url, model.name)); clone.setDirectory(local); clone.setBare(false); clone.setCloneAllBranches(true); clone.setCredentialsProvider(cp); GitBlitSuite.close(clone.call()); Git git = Git.open(local); // checkout a mergetest branch git.checkout().setCreateBranch(true).setName("mergetest").call(); // change identity git.getRepository().getConfig().setString("user", null, "name", "mergetest"); git.getRepository().getConfig().setString("user", null, "email", "mergetest@merge.com"); git.getRepository().getConfig().save(); // commit a file File file = new File(local, "MERGECHK2"); OutputStreamWriter os = new OutputStreamWriter(new FileOutputStream(file, true), Constants.CHARSET); BufferedWriter w = new BufferedWriter(os); w.write("// " + new Date().toString() + "\n"); w.close(); git.add().addFilepattern(file.getName()).call(); RevCommit mergeTip = git.commit().setMessage(file.getName() + " test").call(); // return to master git.checkout().setName("master").call(); // restore identity if (expectedSuccess) { git.getRepository().getConfig().setString("user", null, "name", user.username); git.getRepository().getConfig().setString("user", null, "email", user.emailAddress); git.getRepository().getConfig().save(); } // commit a file file = new File(local, "MERGECHK1"); os = new OutputStreamWriter(new FileOutputStream(file, true), Constants.CHARSET); w = new BufferedWriter(os); w.write("// " + new Date().toString() + "\n"); w.close(); git.add().addFilepattern(file.getName()).call(); git.commit().setMessage(file.getName() + " test").call(); // merge the tip of the mergetest branch into master with --no-ff MergeResult mergeResult = git.merge().setFastForward(FastForwardMode.NO_FF).include(mergeTip.getId()) .call(); assertEquals(MergeResult.MergeStatus.MERGED, mergeResult.getMergeStatus()); // push the merged master to the origin Iterable<PushResult> results = git.push().setCredentialsProvider(cp).setRemote("origin").call(); for (PushResult result : results) { RemoteRefUpdate ref = result.getRemoteUpdate("refs/heads/master"); Status status = ref.getStatus(); if (expectedSuccess) { assertTrue("Verification failed! User was NOT able to push commit! " + status.name(), Status.OK.equals(status)); } else { assertTrue("Verification failed! User was able to push commit! " + status.name(), Status.REJECTED_OTHER_REASON.equals(status)); } } GitBlitSuite.close(git); // close serving repository GitBlitSuite.close(verification); }
From source file:com.gitblit.tests.TicketReferenceTest.java
License:Apache License
@Test public void commitTicketBranchDeletePostMergeReference() throws Exception { setPatchsetAvailable(false);/* w w w. j av a 2 s . c om*/ TicketModel a = ticketService.createTicket(repo, newTicket("commitTicketBranchDeletePostMergeReference-A")); TicketModel b = ticketService.createTicket(repo, newTicket("commitTicketBranchDeletePostMergeReference-B")); TicketModel c = ticketService.createTicket(repo, newTicket("commitTicketBranchDeletePostMergeReference-C")); assertFalse(c.hasPatchsets()); String branchName = String.format("ticket/%d", c.number); git.checkout().setCreateBranch(true).setName(branchName).call(); String message = String.format("commit before amend for #%d and #%d", a.number, b.number); final RevCommit revCommit1 = makeCommit(message); final String commit1Sha = revCommit1.name(); assertPushSuccess(commit1Sha, branchName); a = ticketService.getTicket(repo, a.number); b = ticketService.getTicket(repo, b.number); c = ticketService.getTicket(repo, c.number); assertTrue(a.hasReferences()); assertTrue(b.hasReferences()); assertFalse(c.hasReferences()); List<Reference> cRefA = a.getReferences(); assertNotNull(cRefA); assertEquals(1, cRefA.size()); assertNull(cRefA.get(0).ticketId); assertEquals(commit1Sha, cRefA.get(0).hash); List<Reference> cRefB = b.getReferences(); assertNotNull(cRefB); assertEquals(1, cRefB.size()); assertNull(cRefB.get(0).ticketId); assertEquals(commit1Sha, cRefB.get(0).hash); git.checkout().setCreateBranch(false).setName("refs/heads/master").call(); // merge the tip of the branch into master MergeResult mergeResult = git.merge().setFastForward(FastForwardMode.NO_FF).include(revCommit1.getId()) .call(); assertEquals(MergeResult.MergeStatus.MERGED, mergeResult.getMergeStatus()); // push the merged master to the origin Iterable<PushResult> results = git.push().setCredentialsProvider(cp).setRemote("origin").call(); for (PushResult result : results) { RemoteRefUpdate ref = result.getRemoteUpdate("refs/heads/master"); assertEquals(Status.OK, ref.getStatus()); } //As everything has been merged no references should be changed assertDeleteBranch(branchName); a = ticketService.getTicket(repo, a.number); b = ticketService.getTicket(repo, b.number); c = ticketService.getTicket(repo, c.number); assertTrue(a.hasReferences()); assertTrue(b.hasReferences()); assertFalse(c.hasReferences()); cRefA = a.getReferences(); assertNotNull(cRefA); assertEquals(1, cRefA.size()); assertNull(cRefA.get(0).ticketId); assertEquals(commit1Sha, cRefA.get(0).hash); cRefB = b.getReferences(); assertNotNull(cRefB); assertEquals(1, cRefB.size()); assertNull(cRefB.get(0).ticketId); assertEquals(commit1Sha, cRefB.get(0).hash); }
From source file:com.houghtonassociates.bamboo.plugins.GerritRepositoryAdapter.java
License:Apache License
@Override public boolean mergeWorkspaceWith(@NotNull final BuildContext buildContext, @NotNull final File file, @NotNull final String s) throws RepositoryException { JGitRepository jgitRepo = new JGitRepository(); jgitRepo.setAccessData(gc);/*from ww w .j a v a 2s . co m*/ jgitRepo.open(file); jgitRepo.openSSHTransport(); jgitRepo.fetch("refs/heads/" + this.getVcsBranch().getName()); org.eclipse.jgit.api.MergeResult mr = jgitRepo.merge(s); jgitRepo.close(); MergeStatus ms = mr.getMergeStatus(); if (ms.isSuccessful()) { return true; } return false; }
From source file:com.microsoft.gittf.core.tasks.PullTask.java
License:Open Source License
private TaskStatus merge(TaskProgressMonitor progressMonitor, int changeset, ObjectId commitId) { try {/*from w w w . j a v a 2s . c o m*/ getMergeCommand().include( Messages.formatString("PullTask.Merge.CommitNameFormat", Integer.toString(changeset)), //$NON-NLS-1$ commitId); MergeResult mergeResults = getMergeCommand().call(); progressMonitor.endTask(); switch (mergeResults.getMergeStatus()) { case ALREADY_UP_TO_DATE: progressMonitor.displayMessage(Messages.getString("PullTask.Merge.AlreadyUpToDate")); //$NON-NLS-1$ break; case FAST_FORWARD: case MERGED: progressMonitor.displayMessage(Messages.formatString("PullTask.Merge.MergeSuccessfulFormat", //$NON-NLS-1$ ObjectIdUtil.abbreviate(repository, commitId))); break; case CONFLICTING: progressMonitor .displayMessage(Messages.formatString("PullTask.Merge.MergeSuccessfulWithConflictsFormat", //$NON-NLS-1$ ObjectIdUtil.abbreviate(repository, commitId))); displayConflicts(progressMonitor, mergeResults.getConflicts()); break; case FAILED: case NOT_SUPPORTED: progressMonitor.displayMessage(Messages.formatString("PullTask.Merge.FailedFormat", //$NON-NLS-1$ ObjectIdUtil.abbreviate(repository, commitId))); displayFailures(progressMonitor, mergeResults.getFailingPaths()); break; } RepositoryUtil.fixFileAttributes(repository); } catch (Exception e) { log.error("An error occurred while merging.", e); //$NON-NLS-1$ return new TaskStatus(TaskStatus.ERROR, e); } return TaskStatus.OK_STATUS; }