Eclipseplugins
CherryPickWizard.java
1 package com.proalpha.pds.gitutils.cherrypick;
2 
3 import java.io.IOException;
4 import java.lang.reflect.InvocationTargetException;
5 import java.util.Arrays;
6 import java.util.List;
7 
8 import org.eclipse.core.runtime.jobs.ISchedulingRule;
9 import org.eclipse.core.runtime.jobs.Job;
10 import org.eclipse.egit.core.internal.job.RuleUtil;
11 import org.eclipse.jface.dialogs.MessageDialog;
12 import org.eclipse.jface.wizard.Wizard;
13 import org.eclipse.jgit.api.Git;
14 import org.eclipse.jgit.api.errors.GitAPIException;
15 import org.eclipse.jgit.lib.Repository;
16 import org.eclipse.jgit.revwalk.RevCommit;
17 import org.eclipse.swt.custom.BusyIndicator;
18 import org.eclipse.swt.widgets.Display;
19 
20 import com.proalpha.git.PaGit;
21 
26 @SuppressWarnings("restriction")
27 public class CherryPickWizard extends Wizard {
28 
29  private final CherryPickPage cpPage;
30  private final CherryPickCommitPage comPage;
31  private Repository targetRepository;
32  private List<RevCommit> sourceCommits;
33  private CherryPickSettings cherryPickSettings = new CherryPickSettings();
34 
38  public List<RevCommit> getSourceCommits() {
39  return sourceCommits;
40  }
41 
46  return cherryPickSettings;
47  }
48 
52  public CherryPickWizard(Repository repository) {
53  super();
54  cherryPickSettings.setTargetRepository(repository.getDirectory().toString());
55 
56  this.targetRepository = repository;
57  this.cpPage = new CherryPickPage(repository);
58  this.comPage = new CherryPickCommitPage();
59  cherryPickSettings.setTargetRepository(repository.getDirectory().toString());
60  PaGit.init(new Git(targetRepository));
61  }
62 
63  /*
64  * (non-Javadoc)
65  *
66  * @see org.eclipse.jface.wizard.Wizard#performFinish()
67  */
68  @Override
69  public boolean performFinish() {
70 
71  try {
72  CherryPick.getInstance().createCherryPickCommand(cherryPickSettings);
73  } catch (IOException | GitAPIException e) {
74  MessageDialog.openError(getShell(), e.getCause().getMessage(),
75  Arrays.toString(e.getCause().getStackTrace()));
76  }
77 
78  Job cherryPickJob = new CherryPickJob(this.sourceCommits.size());
79  cherryPickJob.setUser(true);
80  cherryPickJob.setRule(RuleUtil.getRule(CherryPick.getInstance().getCherryPickCommand().getRepository()));
81  cherryPickJob.schedule();
82 
83  return true;
84  }
85 
86  /*
87  * (non-Javadoc)
88  *
89  * @see org.eclipse.jface.wizard.Wizard#addPages()
90  */
91  @Override
92  public void addPages() {
93  addPage(cpPage);
94  addPage(comPage);
95  }
96 
100  public boolean gatherCommits() {
101 
102  GatherCommitsOperation op = new GatherCommitsOperation(cherryPickSettings.getSourceRepoString(),
103  cherryPickSettings.getSourceBranch(), cherryPickSettings.getSourceIssue());
104 
105  Runnable r = () -> {
106  ISchedulingRule rule = op.getSchedulingRule();
107  try {
108  Job.getJobManager().beginRule(rule, null);
109  op.run();
110  } catch (InvocationTargetException e) {
111  MessageDialog.openError(getShell(), e.getCause().getMessage(),
112  Arrays.toString(e.getCause().getStackTrace()));
113  } finally {
114  Job.getJobManager().endRule(rule);
115  }
116  };
117  BusyIndicator.showWhile(Display.getCurrent(), r);
118  this.sourceCommits = op.getOperationResult();
119  comPage.setCommitsfound(this.sourceCommits);
120  return !this.sourceCommits.isEmpty();
121  }
122 
123 }