Search in sources :

Example 1 with RevertCommitOperation

use of org.eclipse.egit.core.op.RevertCommitOperation in project egit by eclipse.

the class RevertHandler method execute.

@Override
public Object execute(final ExecutionEvent event) throws ExecutionException {
    List<RepositoryCommit> repoCommits = getCommits(event);
    Repository repo = repoCommits.get(0).getRepository();
    final Shell shell = getPart(event).getSite().getShell();
    final List<RevCommit> commits = new ArrayList<>();
    for (RepositoryCommit repoCommit : repoCommits) commits.add(repoCommit.getRevCommit());
    final RevertCommitOperation op = new RevertCommitOperation(repo, commits);
    Job job = new WorkspaceJob(MessageFormat.format(UIText.RevertHandler_JobName, Integer.valueOf(commits.size()))) {

        @Override
        public IStatus runInWorkspace(IProgressMonitor monitor) {
            try {
                op.execute(monitor);
                RevCommit newHead = op.getNewHead();
                List<Ref> revertedRefs = op.getRevertedRefs();
                if (newHead != null && revertedRefs.isEmpty())
                    showRevertedDialog(shell);
                if (newHead == null) {
                    RevCommit newestUnmergedCommit = null;
                    for (RevCommit commit : commits) {
                        if (!contains(revertedRefs, commit)) {
                            newestUnmergedCommit = commit;
                            break;
                        }
                    }
                    showFailureDialog(shell, newestUnmergedCommit, op.getFailingResult());
                }
            } catch (CoreException e) {
                Activator.handleError(UIText.RevertOperation_InternalError, e, true);
            }
            return Status.OK_STATUS;
        }

        @Override
        public boolean belongsTo(Object family) {
            if (JobFamilies.REVERT_COMMIT.equals(family))
                return true;
            return super.belongsTo(family);
        }
    };
    job.setUser(true);
    job.setRule(op.getSchedulingRule());
    job.schedule();
    return null;
}
Also used : ArrayList(java.util.ArrayList) WorkspaceJob(org.eclipse.core.resources.WorkspaceJob) RepositoryCommit(org.eclipse.egit.ui.internal.commit.RepositoryCommit) Repository(org.eclipse.jgit.lib.Repository) Shell(org.eclipse.swt.widgets.Shell) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) Ref(org.eclipse.jgit.lib.Ref) CoreException(org.eclipse.core.runtime.CoreException) Job(org.eclipse.core.runtime.jobs.Job) WorkspaceJob(org.eclipse.core.resources.WorkspaceJob) RevertCommitOperation(org.eclipse.egit.core.op.RevertCommitOperation) RevCommit(org.eclipse.jgit.revwalk.RevCommit)

Aggregations

ArrayList (java.util.ArrayList)1 WorkspaceJob (org.eclipse.core.resources.WorkspaceJob)1 CoreException (org.eclipse.core.runtime.CoreException)1 IProgressMonitor (org.eclipse.core.runtime.IProgressMonitor)1 Job (org.eclipse.core.runtime.jobs.Job)1 RevertCommitOperation (org.eclipse.egit.core.op.RevertCommitOperation)1 RepositoryCommit (org.eclipse.egit.ui.internal.commit.RepositoryCommit)1 Ref (org.eclipse.jgit.lib.Ref)1 Repository (org.eclipse.jgit.lib.Repository)1 RevCommit (org.eclipse.jgit.revwalk.RevCommit)1 Shell (org.eclipse.swt.widgets.Shell)1