Example usage for org.eclipse.jgit.api MergeResult getMergeStatus

List of usage examples for org.eclipse.jgit.api MergeResult getMergeStatus

Introduction

In this page you can find the example usage for org.eclipse.jgit.api MergeResult getMergeStatus.

Prototype

public MergeStatus getMergeStatus() 

Source Link

Document

Get the merge status

Usage

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;
}