1 package com.proalpha.pds.gitutils.cherrypick;
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStream;
6 import java.io.InputStreamReader;
8 import java.util.ArrayList;
9 import java.util.Arrays;
10 import java.util.Collections;
11 import java.util.HashMap;
12 import java.util.HashSet;
13 import java.util.LinkedList;
14 import java.util.List;
17 import java.util.regex.Matcher;
18 import java.util.regex.Pattern;
20 import org.eclipse.core.runtime.FileLocator;
21 import org.eclipse.core.runtime.Path;
22 import org.eclipse.core.runtime.Platform;
23 import org.eclipse.jface.dialogs.IDialogSettings;
24 import org.eclipse.jface.dialogs.IMessageProvider;
25 import org.eclipse.jface.resource.ImageDescriptor;
26 import org.eclipse.jface.viewers.ArrayContentProvider;
27 import org.eclipse.jface.viewers.ComboViewer;
28 import org.eclipse.jface.viewers.ISelectionChangedListener;
29 import org.eclipse.jface.viewers.SelectionChangedEvent;
30 import org.eclipse.jface.viewers.StructuredSelection;
31 import org.eclipse.jface.viewers.Viewer;
32 import org.eclipse.jface.viewers.ViewerFilter;
33 import org.eclipse.jface.wizard.WizardPage;
34 import org.eclipse.jgit.lib.Repository;
35 import org.eclipse.mylyn.tasks.core.ITaskActivityManager;
36 import org.eclipse.mylyn.tasks.ui.TasksUi;
37 import org.eclipse.swt.SWT;
38 import org.eclipse.swt.custom.ScrolledComposite;
39 import org.eclipse.swt.events.FocusEvent;
40 import org.eclipse.swt.events.FocusListener;
41 import org.eclipse.swt.events.KeyEvent;
42 import org.eclipse.swt.events.KeyListener;
43 import org.eclipse.swt.events.SelectionAdapter;
44 import org.eclipse.swt.events.SelectionEvent;
45 import org.eclipse.swt.graphics.Point;
46 import org.eclipse.swt.layout.GridData;
47 import org.eclipse.swt.layout.GridLayout;
48 import org.eclipse.swt.widgets.Button;
49 import org.eclipse.swt.widgets.Composite;
50 import org.eclipse.swt.widgets.Group;
51 import org.eclipse.swt.widgets.Label;
52 import org.eclipse.swt.widgets.Text;
53 import org.eclipse.wb.swt.ResourceManager;
55 import com.proalpha.git.PaGitConfig;
56 import com.proalpha.git.model.server.GitServerRepository;
57 import com.proalpha.git.util.PaBranchName;
58 import com.proalpha.git.util.PaRepository;
59 import com.proalpha.git.util.bitbucket.BitbucketRestCallGetRepoList;
60 import com.proalpha.pds.gitutils.Activator;
61 import com.proalpha.pds.gitutils.PreferencesConstants;
71 class PrefixMatchFilter
extends ViewerFilter {
73 private String input =
"";
75 public void setInput(String s) {
76 this.input = s.toLowerCase();
79 public String getInput() {
88 public boolean select(Viewer viewer, Object parentElement, Object element) {
89 if (this.input ==
null || this.input.length() == 0) {
92 String branchInList = (String) element;
94 return (branchInList.toLowerCase().startsWith(this.input));
104 private Repository srcRepository;
105 private List<GitServerRepository> currRepos;
106 private Map<String, Set<String>> projectRepositoryMap;
108 private Button btnUpdateTargetBranchPoint;
109 private ComboViewer cvSrcProject;
110 private ComboViewer cvSrcRepository;
111 private ComboViewer cvSrcBranch;
112 private Text txtSrcFeature;
113 private Text txtTargetBranchPoint;
114 private Text txtTargetBranch;
115 private Text txtTargetFeature;
116 private Button btnFetchCommits;
117 private Button btnEditBranchname;
118 private Button btnOnlyShowMaster;
120 ScrolledComposite scrolledComposite;
121 private Label infoLabel;
124 private static final String PAGE_NAME =
"pAGitCherryPickPage";
129 this.srcRepository = repository;
130 setTitle(
"proALPHA CherryPick");
131 setMessage(
"Select repository and branch which needs to get picked into your current repository", INFORMATION);
132 URL url = FileLocator.find(Platform.getBundle(
Activator.PLUGIN_ID),
new Path(
"icons/pA-logox72.png"),
133 Collections.emptyMap());
135 setImageDescriptor(ImageDescriptor.createFromURL(url));
140 public void createControl(Composite parent) {
142 currRepos = getServerRepositories();
143 projectRepositoryMap = fillProjectRepositoryMap();
145 Composite container =
new Composite(parent, SWT.NULL);
146 setControl(container);
147 container.setLayout(
new GridLayout(2,
false));
149 this.createSourceControls(container);
150 this.createTargetControls(container);
152 setControl(container);
154 GridData gridData =
new GridData(SWT.FILL, SWT.CENTER,
false,
false, 3, 1);
155 Composite container_bottom =
new Composite(container, SWT.None);
156 container_bottom.setLayoutData(gridData);
157 gridData.widthHint = 488;
158 gridData.heightHint = 100;
160 scrolledComposite =
new ScrolledComposite(container_bottom, SWT.V_SCROLL | SWT.H_SCROLL);
161 scrolledComposite.setExpandHorizontal(
true);
162 scrolledComposite.setExpandVertical(
true);
163 scrolledComposite.setBounds(0, 0, 408, 100);
165 infoLabel =
new Label(scrolledComposite, SWT.NONE);
166 infoLabel.setBounds(0, 0, 408, 100);
167 infoLabel.setText(
"");
169 btnFetchCommits =
new Button(container_bottom, SWT.NONE);
170 btnFetchCommits.setBounds(443, 0, 120, 30);
171 btnFetchCommits.setText(
"Fetch Commits");
172 btnFetchCommits.setEnabled(
false);
174 addSrcWidgetListeners();
175 addTargetWidgetListeners();
176 addButtonWidgetListeners();
181 ITaskActivityManager taskActivityManager = TasksUi.getTaskActivityManager();
182 if (taskActivityManager !=
null && taskActivityManager.getActiveTask() !=
null
183 && taskActivityManager.getActiveTask().getTaskKey() !=
null) {
184 setTxtFeatureText(taskActivityManager.getActiveTask().getTaskKey());
185 txtTargetFeature.setText(taskActivityManager.getActiveTask().getTaskKey());
188 setPageComplete(
false);
196 private void createTargetControls(Composite container) {
197 Group grpTarget =
new Group(container, SWT.NONE);
198 GridData gdGrpTarget =
new GridData(SWT.FILL, SWT.CENTER,
false,
false, 3, 1);
199 gdGrpTarget.widthHint = 450;
200 gdGrpTarget.heightHint = 110;
201 grpTarget.setLayoutData(gdGrpTarget);
202 grpTarget.setText(
"Target");
204 Label label1 =
new Label(grpTarget, SWT.NONE);
205 label1.setText(
"Repository");
206 label1.setBounds(10, 22, 80, 15);
208 Text txtTargetRepository;
209 txtTargetRepository =
new Text(grpTarget, SWT.NONE);
210 txtTargetRepository.setBounds(96, 23, 347, 21);
211 txtTargetRepository.setText(srcRepository.getDirectory().toString());
212 txtTargetRepository.setEnabled(
false);
214 Label lblBranchPoint =
new Label(grpTarget, SWT.NONE);
215 lblBranchPoint.setText(
"Branch Point");
216 lblBranchPoint.setBounds(10, 49, 80, 15);
218 txtTargetBranchPoint =
new Text(grpTarget, SWT.BORDER);
219 txtTargetBranchPoint.setBounds(96, 46, 212, 21);
223 List<String> branches = PaRepository.getMasterBranches(srcRepository);
225 String mainBranch =
null;
226 if (branches !=
null && !branches.isEmpty())
227 mainBranch = branches.get(0);
229 branches = PaRepository.getCodeFreezeBranches(srcRepository);
230 if (branches !=
null && !branches.isEmpty())
231 mainBranch = branches.get(0);
234 if (mainBranch ==
null)
237 mainBranch = srcRepository.getFullBranch();
239 String remoteTrackingRef = PaRepository.getRemoteTrackingBranch(srcRepository, mainBranch);
241 if (remoteTrackingRef ==
null || remoteTrackingRef.isEmpty())
244 remoteTrackingRef =
"HEAD";
246 txtTargetBranchPoint.setText(remoteTrackingRef);
247 cherryPickSettings.setTargetBranchPoint(remoteTrackingRef);
248 }
catch (IOException ex) {
249 setMessage(
"Could not determine the branch name to be used as branching point!", IMessageProvider.ERROR);
252 btnUpdateTargetBranchPoint =
new Button(grpTarget, SWT.CHECK);
253 btnUpdateTargetBranchPoint.setBounds(314, 48, 129, 16);
254 btnUpdateTargetBranchPoint.setText(
"update/fetch");
255 btnUpdateTargetBranchPoint.setSelection(cherryPickSettings.isUpdateTargetBranchPoint());
257 Label label2 =
new Label(grpTarget, SWT.NONE);
258 label2.setText(
"Branch");
259 label2.setBounds(10, 76, 80, 15);
261 txtTargetBranch =
new Text(grpTarget, SWT.BORDER);
262 txtTargetBranch.setBounds(96, 73, 212, 21);
263 txtTargetBranch.setEnabled(
false);
265 btnEditBranchname =
new Button(grpTarget, SWT.CHECK);
266 btnEditBranchname.setBounds(314, 75, 129, 16);
267 btnEditBranchname.setText(
"modify branch name");
269 Label label3 =
new Label(grpTarget, SWT.NONE);
270 label3.setText(
"Feature");
271 label3.setBounds(10, 103, 80, 15);
273 txtTargetFeature =
new Text(grpTarget, SWT.BORDER);
274 txtTargetFeature.setBounds(96, 101, 162, 21);
282 private void createSourceControls(Composite container) {
286 String gitDefaultProject =
"";
287 String gitShortDefaultRepo =
"";
288 if (gitDefaultRepo.contains(
"/")) {
289 String[] splitGitDefaultRepo = gitDefaultRepo.split(
"/");
290 gitDefaultProject = splitGitDefaultRepo[0];
291 gitShortDefaultRepo = splitGitDefaultRepo[1];
294 Group grpSource =
new Group(container, SWT.NONE);
295 GridData gdGrpSource =
new GridData(SWT.FILL, SWT.TOP,
true,
false, 2, 1);
296 gdGrpSource.heightHint = 111;
297 gdGrpSource.widthHint = 450;
298 grpSource.setLayoutData(gdGrpSource);
299 grpSource.setText(
"Source");
301 Label lblProject =
new Label(grpSource, SWT.NONE);
302 lblProject.setText(
"Project");
303 lblProject.setBounds(10, 22, 80, 15);
305 Label lblRepository =
new Label(grpSource, SWT.NONE);
306 lblRepository.setText(
"Repository");
307 lblRepository.setBounds(10, 49, 80, 15);
309 Label lblBranch =
new Label(grpSource, SWT.NONE);
310 lblBranch.setText(
"Branch");
311 lblBranch.setBounds(10, 76, 80, 15);
313 Label lblFeature =
new Label(grpSource, SWT.NONE);
314 lblFeature.setText(
"Feature");
315 lblFeature.setBounds(10, 103, 80, 15);
318 PrefixMatchFilter projectFilter =
new PrefixMatchFilter();
319 cvSrcProject =
new ComboViewer(grpSource, SWT.BORDER);
320 cvSrcProject.setContentProvider(ArrayContentProvider.getInstance());
321 cvSrcProject.getCombo().setBounds(96, 19, 212, 21);
322 cvSrcProject.addFilter(projectFilter);
324 Set<String> projectsSet = projectRepositoryMap.keySet();
325 String[] projects =
new String[projectsSet.size()];
326 projectsSet.toArray(projects);
327 Arrays.sort(projects);
328 cvSrcProject.setInput(projects);
329 cvSrcProject.setSelection(
new StructuredSelection(gitDefaultProject));
332 PrefixMatchFilter repositoryFilter =
new PrefixMatchFilter();
333 cvSrcRepository =
new ComboViewer(grpSource, SWT.BORDER);
334 cvSrcRepository.setContentProvider(ArrayContentProvider.getInstance());
335 cvSrcRepository.getCombo().setBounds(96, 46, 212, 21);
336 cvSrcRepository.addFilter(repositoryFilter);
338 Set<String> repositorySet = projectRepositoryMap.get(gitDefaultProject);
339 if (repositorySet ==
null) {
340 repositorySet =
new HashSet<String>();
342 String[] repositories =
new String[repositorySet.size()];
343 repositorySet.toArray(repositories);
344 Arrays.sort(repositories);
345 cvSrcRepository.setInput(repositories);
346 cvSrcRepository.setSelection(
new StructuredSelection(gitShortDefaultRepo));
348 PrefixMatchFilter branchFilter =
new PrefixMatchFilter();
349 cvSrcBranch =
new ComboViewer(grpSource, SWT.BORDER);
350 cvSrcBranch.setContentProvider(ArrayContentProvider.getInstance());
351 cvSrcBranch.getCombo().setBounds(96, 73, 212, 21);
352 cvSrcBranch.addFilter(branchFilter);
353 cvSrcBranch.addSelectionChangedListener(
new ISelectionChangedListener() {
356 public void selectionChanged(SelectionChangedEvent event) {
357 if (cvSrcBranch.getSelection() != event.getSelection()) {
358 setPageComplete(
false);
364 txtSrcFeature =
new Text(grpSource, SWT.BORDER);
365 txtSrcFeature.setBounds(96, 100, 162, 21);
367 Button btnRefreshRepos =
new Button(grpSource, SWT.NONE);
368 btnRefreshRepos.setToolTipText(
"Reload repositories from server");
370 btnRefreshRepos.setBounds(314, 18, 28, 23);
373 btnOnlyShowMaster =
new Button(grpSource, SWT.CHECK);
374 btnOnlyShowMaster.setBounds(314, 75, 129, 16);
375 btnOnlyShowMaster.setText(
"only show master");
376 btnOnlyShowMaster.setSelection(settings.getBoolean(
"ONLY_SHOW_MASTER"));
383 private void addSrcWidgetListeners() {
387 cvSrcRepository.getCombo().addFocusListener(
new FocusListener() {
389 public void focusGained(FocusEvent e) {
390 setMessage(
"Choose your source repository");
394 public void focusLost(FocusEvent e) {
395 if (cvSrcBranch.getCombo().getText().length() != 0)
400 cvSrcBranch.getCombo().addFocusListener(
new FocusListener() {
402 public void focusGained(FocusEvent e) {
403 setMessage(
"Choose your source branch");
407 public void focusLost(FocusEvent e) {
408 if (cvSrcBranch.getCombo().getText().length() != 0 && checkBranch()) {
409 String featureByBranch = getFeatureText(cvSrcBranch.getCombo().getText());
410 if (featureByBranch !=
null)
411 setTxtFeatureText(featureByBranch);
416 txtSrcFeature.addModifyListener(modifyEvent -> {
417 if (cvSrcBranch.getCombo().getText().length() != 0) {
419 txtTargetFeature.setText(txtSrcFeature.getText());
422 txtSrcFeature.addFocusListener(
new FocusListener() {
424 public void focusGained(FocusEvent e) {
425 setMessage(
"Type your feature to pick");
429 public void focusLost(FocusEvent e) {
430 if (cvSrcBranch.getCombo().getText().length() != 0 && txtSrcFeature.getText().length() != 0) {
431 btnFetchCommits.setEnabled(
true);
433 String feature = txtSrcFeature.getText();
434 check_caused_issues(feature);
438 KeyListener projectKeyListener = createKeyListener(cvSrcProject);
439 cvSrcProject.getCombo().addKeyListener(projectKeyListener);
441 KeyListener repositoryKeyListener = createKeyListener(cvSrcRepository);
442 cvSrcRepository.getCombo().addKeyListener(repositoryKeyListener);
444 KeyListener branchKeyListener = createKeyListener(cvSrcBranch);
445 cvSrcBranch.getCombo().addKeyListener(branchKeyListener);
447 cvSrcBranch.getCombo().addModifyListener(modifyListener -> {
448 if (cvSrcBranch.getCombo().getText().length() != 0 && checkBranch()) {
449 String featureByBranch = getFeatureText(cvSrcBranch.getCombo().getText());
450 if (featureByBranch !=
null)
451 setTxtFeatureText(featureByBranch);
456 private void check_caused_issues(String issue) {
457 List<String> command =
new LinkedList<String>();
458 command.add(
"python");
460 command.add(
"pa_common.pds_functions.jira_issue_links");
466 infoLabel.setText(
"");
467 run_command(command);
470 private boolean run_command(List<String> command) {
471 boolean result =
false;
472 ProcessBuilder builder =
new ProcessBuilder();
473 builder.command(command);
478 InputStream inputStream = p.getErrorStream();
479 BufferedReader bufRead =
new BufferedReader(
new InputStreamReader(inputStream));
481 while ((line = bufRead.readLine()) !=
null) {
482 String text = infoLabel.getText();
483 infoLabel.setText(text +
"\n" + line);
484 this.getShell().getDisplay().update();
487 }
catch (IOException e) {
493 private void setTxtFeatureText(String text) {
494 txtSrcFeature.setText(text);
495 txtSrcFeature.setFocus();
496 getShell().setFocus();
499 private KeyListener createKeyListener(ComboViewer viewer) {
500 return new KeyListener() {
503 public void keyPressed(
final KeyEvent e) {
508 public void keyReleased(
final KeyEvent e) {
509 String currentInput = viewer.getCombo().getText();
510 String inputFilter = ((PrefixMatchFilter) viewer.getFilters()[0]).getInput();
514 if (currentInput.length() < inputFilter.length() || Character.isDigit(e.character)
515 || Character.isAlphabetic(e.character)) {
516 if (e.keyCode == SWT.ESC) {
517 ((PrefixMatchFilter) viewer.getFilters()[0]).setInput(
"");
520 ((PrefixMatchFilter) viewer.getFilters()[0]).setInput(currentInput);
524 viewer.refresh(
true);
525 viewer.getCombo().setListVisible(e.keyCode != SWT.ESC);
529 viewer.getCombo().setText(currentInput);
530 viewer.getCombo().setSelection(
new Point(currentInput.length(), currentInput.length()));
540 private void addTargetWidgetListeners() {
542 txtTargetBranchPoint.addModifyListener(modifyEvent -> {
543 if (txtTargetBranchPoint.getText().length() != 0) {
544 cherryPickSettings.setTargetBranchPoint(txtTargetBranchPoint.getText());
548 txtTargetBranchPoint.addFocusListener(
new FocusListener() {
550 public void focusGained(FocusEvent e) {
551 setMessage(
"Type your new branch point");
555 public void focusLost(FocusEvent e) {
560 txtTargetBranch.addModifyListener(modifyEvent -> {
561 if (txtTargetBranch.getText().length() != 0) {
562 cherryPickSettings.setTargetBranch(txtTargetBranch.getText());
566 txtTargetBranch.addFocusListener(
new FocusListener() {
568 public void focusGained(FocusEvent e) {
569 setMessage(
"Type your new branchname");
573 public void focusLost(FocusEvent e) {
574 if (txtTargetBranch.getText().length() != 0) {
575 String featureByBranch = getFeatureText(txtTargetBranch.getText());
576 if (featureByBranch !=
null)
577 txtTargetFeature.setText(featureByBranch);
582 txtTargetFeature.addModifyListener(modifyEvent -> {
583 if (txtTargetFeature.getText().length() != 0) {
584 cherryPickSettings.setTargetIssue(txtTargetFeature.getText());
587 txtTargetFeature.addFocusListener(
new FocusListener() {
589 public void focusGained(FocusEvent e) {
590 setMessage(
"Choose a target feature which is used for first line of commit message");
594 public void focusLost(FocusEvent e) {
595 if (txtTargetFeature.getText().length() == 0) {
596 String featureByBranch = getFeatureText(txtTargetBranch.getText());
597 if (featureByBranch !=
null)
598 txtTargetFeature.setText(featureByBranch);
601 cherryPickSettings.setTargetIssue(txtTargetFeature.getText());
605 btnUpdateTargetBranchPoint.addSelectionListener(
new SelectionAdapter() {
607 public void widgetSelected(SelectionEvent e) {
608 cherryPickSettings.setUpdateTargetBranchPoint(btnUpdateTargetBranchPoint.getSelection());
616 private void addButtonWidgetListeners() {
618 btnEditBranchname.addSelectionListener(
new SelectionAdapter() {
620 public void widgetSelected(SelectionEvent e) {
621 txtTargetBranch.setEnabled(btnEditBranchname.getSelection());
622 if (!btnEditBranchname.getSelection())
627 btnFetchCommits.addSelectionListener(
new SelectionAdapter() {
629 public void widgetSelected(SelectionEvent e) {
634 btnOnlyShowMaster.addSelectionListener(
new SelectionAdapter() {
636 public void widgetSelected(SelectionEvent e) {
638 settings.put(
"ONLY_SHOW_MASTER", btnOnlyShowMaster.getSelection());
649 cherryPickSettings.setSourceIssue(txtSrcFeature.getText());
650 cherryPickSettings.setSourceBranch(cvSrcBranch.getCombo().getText());
651 cherryPickSettings.setTargetIssue(txtTargetFeature.getText());
653 String projectname = cvSrcProject.getCombo().getText();
654 String repoName = cvSrcRepository.getCombo().getText();
656 for (GitServerRepository actRepo : currRepos) {
657 if (actRepo.getProject().equals(projectname) && actRepo.getName().equals(repoName)) {
658 cherryPickSettings.setSourceRepoString(projectname, repoName);
665 setMessage(
"No commits found!", IMessageProvider.WARNING);
667 setMessage(
"Commits found! Push 'Next' to view or 'Finish' to pick them", INFORMATION);
668 setPageComplete(commitsfound);
676 private List<GitServerRepository> getServerRepositories() {
678 ArrayList<GitServerRepository> serverRepositories;
680 BitbucketRestCallGetRepoList restcall =
new BitbucketRestCallGetRepoList();
681 restcall.setSubUrl(
"repos");
683 serverRepositories = restcall.getRestResponse();
685 return serverRepositories;
693 private String getFeatureText(String branchText) {
695 Pattern p = Pattern.compile(
"(.*\\.)?(" + PaGitConfig.getStringFromConfig(
"issue_key_format") +
")$");
696 Matcher m = p.matcher(branchText);
710 private boolean checkBranch() {
712 boolean foundIt =
false;
713 String srcBranchName = cvSrcBranch.getCombo().getText();
714 setMessage(
null, IMessageProvider.INFORMATION);
715 setErrorMessage(
null);
717 if (srcBranchName.length() == 0) {
718 setPageComplete(
false);
722 String projectname = cvSrcProject.getCombo().getText();
723 String repoName = cvSrcRepository.getCombo().getText();
725 for (GitServerRepository repository : currRepos) {
726 if (repository.getProject().equals(projectname) && repository.getName().equals(repoName)) {
727 for (String actBranch : repository.getBranches()) {
728 if (actBranch.equals(srcBranchName)) {
738 setMessage(
"Branch not found!", IMessageProvider.WARNING);
739 setPageComplete(
false);
740 btnFetchCommits.setEnabled(
false);
744 cherryPickSettings.setSourceBranch(srcBranchName);
746 proposeTargetBranchName(srcBranchName);
748 btnFetchCommits.setEnabled(
true);
758 private void proposeTargetBranchName(String srcBranchName) {
759 String targetBranch = srcBranchName;
764 String versionPrefix = PaBranchName.getVersion(this.srcRepository.getBranch());
765 if (versionPrefix !=
null)
766 versionPrefix = versionPrefix +
".";
770 if (this.txtSrcFeature.getText() !=
null && !
this.txtSrcFeature.getText().isEmpty()) {
771 targetBranch = versionPrefix + this.txtSrcFeature.getText();
774 targetBranch = versionPrefix;
776 }
catch (IOException e) {
781 txtTargetBranch.setText(targetBranch);
782 cherryPickSettings.setTargetBranch(targetBranch);
790 List<String> allBranches;
791 boolean foundIt =
false;
792 setMessage(
null, IMessageProvider.INFORMATION);
793 setErrorMessage(
null);
795 if (cvSrcRepository.getCombo().getText().length() == 0) {
796 setPageComplete(
false);
800 String projectname = cvSrcProject.getCombo().getText();
801 String repoName = cvSrcRepository.getCombo().getText();
803 for (GitServerRepository repository : currRepos) {
804 if (repository.getProject().equals(projectname) && repository.getName().equals(repoName)) {
805 allBranches = repository.getBranches();
806 Collections.sort(allBranches);
807 String[] branches = allBranches.stream().toArray(String[]::
new);
808 if (btnOnlyShowMaster.getSelection()) {
809 branches = filterMasterBranches(branches);
811 cvSrcBranch.setInput(branches);
818 setMessage(
"Repository not found!", IMessageProvider.WARNING);
819 setPageComplete(
false);
820 btnFetchCommits.setEnabled(
false);
821 cvSrcBranch.setInput(
new String[0]);
825 cherryPickSettings.setSourceRepoString(projectname, repoName);
834 String projectname = cvSrcProject.getCombo().getText();
835 if (!projectRepositoryMap.containsKey(projectname)) {
836 setMessage(
"Project not found!", IMessageProvider.WARNING);
837 setPageComplete(
false);
838 cvSrcRepository.setInput(
new String[0]);
842 Set<String> repoSet = projectRepositoryMap.get(projectname);
843 String[] repos =
new String[repoSet.size()];
844 repoSet.toArray(repos);
846 cvSrcRepository.setInput(repos);
856 private Map<String, Set<String>> fillProjectRepositoryMap() {
858 projectRepositoryMap =
new HashMap<String, Set<String>>();
859 for (GitServerRepository repository : currRepos) {
861 Set<String> repositoriesForProject = projectRepositoryMap.get(repository.getProject());
863 if (repositoriesForProject !=
null) {
864 repositoriesForProject.add(repository.getName());
866 String projectName = repository.getProject();
867 String repositoryName = repository.getName();
868 Set<String> repositories =
new HashSet<String>();
869 repositories.add(repositoryName);
870 projectRepositoryMap.put(projectName, repositories);
873 return projectRepositoryMap;
883 private String[] filterMasterBranches(String[] branches) {
885 List<String> masterBranches =
new ArrayList<String>();
886 for (String branch : branches) {
887 if (branch.contains(
"master")) {
888 masterBranches.add(branch);
892 String[] masterArray =
new String[masterBranches.size()];
893 masterBranches.toArray(masterArray);
907 IDialogSettings section = dialogSettings.getSection(PAGE_NAME);
909 section = dialogSettings.addNewSection(PAGE_NAME);
static Activator getDefault()
void checkRepoAndProposeBranches()
IDialogSettings getDialogSettings()
void proposeRepositories()
static Image getPluginImage(Object plugin, String name)