Search in sources :

Example 6 with RemoteConfig

use of org.eclipse.jgit.transport.RemoteConfig in project egit by eclipse.

the class ConfigurePushAfterCloneTask method execute.

/**
 * @param repository
 * @param monitor
 * @throws CoreException
 */
@Override
public void execute(Repository repository, IProgressMonitor monitor) throws CoreException {
    try {
        RemoteConfig configToUse = new RemoteConfig(repository.getConfig(), remoteName);
        if (pushRefSpec != null)
            configToUse.addPushRefSpec(new RefSpec(pushRefSpec));
        if (pushURI != null)
            configToUse.addPushURI(pushURI);
        configToUse.update(repository.getConfig());
        repository.getConfig().save();
    } catch (Exception e) {
        throw new CoreException(Activator.error(e.getMessage(), e));
    }
}
Also used : RefSpec(org.eclipse.jgit.transport.RefSpec) CoreException(org.eclipse.core.runtime.CoreException) RemoteConfig(org.eclipse.jgit.transport.RemoteConfig) CoreException(org.eclipse.core.runtime.CoreException)

Example 7 with RemoteConfig

use of org.eclipse.jgit.transport.RemoteConfig in project egit by eclipse.

the class FetchGerritChangePage method createControl.

@Override
public void createControl(Composite parent) {
    parent.addDisposeListener(event -> {
        for (ChangeList l : changeRefs.values()) {
            l.cancel(ChangeList.CancelMode.INTERRUPT);
        }
        changeRefs.clear();
    });
    Clipboard clipboard = new Clipboard(parent.getDisplay());
    String clipText = (String) clipboard.getContents(TextTransfer.getInstance());
    clipboard.dispose();
    String defaultUri = null;
    String defaultCommand = null;
    String defaultChange = null;
    Change candidateChange = null;
    if (clipText != null) {
        Matcher matcher = GERRIT_FETCH_PATTERN.matcher(clipText);
        if (matcher.matches()) {
            defaultUri = matcher.group(1);
            defaultChange = matcher.group(2);
            defaultCommand = matcher.group(3);
        } else {
            candidateChange = determineChangeFromString(clipText.trim());
        }
    }
    Composite main = new Composite(parent, SWT.NONE);
    main.setLayout(new GridLayout(2, false));
    GridDataFactory.fillDefaults().grab(true, true).applyTo(main);
    new Label(main, SWT.NONE).setText(UIText.FetchGerritChangePage_UriLabel);
    uriCombo = new Combo(main, SWT.DROP_DOWN);
    GridDataFactory.fillDefaults().grab(true, false).applyTo(uriCombo);
    uriCombo.addSelectionListener(new SelectionAdapter() {

        @Override
        public void widgetSelected(SelectionEvent e) {
            String uriText = uriCombo.getText();
            ChangeList list = changeRefs.get(uriText);
            if (list != null) {
                list.cancel(ChangeList.CancelMode.INTERRUPT);
            }
            list = new ChangeList(repository, uriText);
            changeRefs.put(uriText, list);
            preFetch(list);
        }
    });
    new Label(main, SWT.NONE).setText(UIText.FetchGerritChangePage_ChangeLabel);
    refText = new Text(main, SWT.SINGLE | SWT.BORDER);
    GridDataFactory.fillDefaults().grab(true, false).applyTo(refText);
    contentProposer = addRefContentProposalToText(refText);
    refText.addVerifyListener(event -> {
        event.text = event.text.replaceAll("\\v", // $NON-NLS-1$ //$NON-NLS-2$
        " ").trim();
    });
    final Group checkoutGroup = new Group(main, SWT.SHADOW_ETCHED_IN);
    checkoutGroup.setLayout(new GridLayout(3, false));
    GridDataFactory.fillDefaults().span(3, 1).grab(true, false).applyTo(checkoutGroup);
    checkoutGroup.setText(UIText.FetchGerritChangePage_AfterFetchGroup);
    // radio: create local branch
    createBranch = new Button(checkoutGroup, SWT.RADIO);
    GridDataFactory.fillDefaults().span(1, 1).applyTo(createBranch);
    createBranch.setText(UIText.FetchGerritChangePage_LocalBranchRadio);
    createBranch.addSelectionListener(new SelectionAdapter() {

        @Override
        public void widgetSelected(SelectionEvent e) {
            checkPage();
        }
    });
    branchCheckoutButton = new Button(checkoutGroup, SWT.CHECK);
    GridDataFactory.fillDefaults().span(2, 1).align(SWT.END, SWT.CENTER).applyTo(branchCheckoutButton);
    branchCheckoutButton.setFont(JFaceResources.getDialogFont());
    branchCheckoutButton.setText(UIText.FetchGerritChangePage_LocalBranchCheckout);
    branchCheckoutButton.setSelection(true);
    branchTextlabel = new Label(checkoutGroup, SWT.NONE);
    GridDataFactory.defaultsFor(branchTextlabel).exclude(false).applyTo(branchTextlabel);
    branchTextlabel.setText(UIText.FetchGerritChangePage_BranchNameText);
    branchText = new Text(checkoutGroup, SWT.SINGLE | SWT.BORDER);
    GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.CENTER).applyTo(branchText);
    branchText.addKeyListener(new KeyAdapter() {

        @Override
        public void keyPressed(KeyEvent e) {
            branchTextEdited = true;
        }
    });
    branchText.addVerifyListener(event -> {
        if (event.text.isEmpty()) {
            branchTextEdited = false;
        }
    });
    branchText.addModifyListener(new ModifyListener() {

        @Override
        public void modifyText(ModifyEvent e) {
            checkPage();
        }
    });
    BranchNameNormalizer normalizer = new BranchNameNormalizer(branchText);
    normalizer.setVisible(false);
    branchEditButton = new Button(checkoutGroup, SWT.PUSH);
    branchEditButton.setFont(JFaceResources.getDialogFont());
    branchEditButton.setText(UIText.FetchGerritChangePage_BranchEditButton);
    branchEditButton.addSelectionListener(new SelectionAdapter() {

        @Override
        public void widgetSelected(SelectionEvent selectionEvent) {
            String txt = branchText.getText();
            // $NON-NLS-1$
            String refToMark = "".equals(txt) ? null : Constants.R_HEADS + txt;
            AbstractBranchSelectionDialog dlg = new BranchEditDialog(checkoutGroup.getShell(), repository, refToMark);
            if (dlg.open() == Window.OK) {
                branchText.setText(Repository.shortenRefName(dlg.getRefName()));
                branchTextEdited = true;
            } else {
                // force calling branchText's modify listeners
                branchText.setText(branchText.getText());
            }
        }
    });
    GridDataFactory.defaultsFor(branchEditButton).exclude(false).applyTo(branchEditButton);
    // radio: create tag
    createTag = new Button(checkoutGroup, SWT.RADIO);
    GridDataFactory.fillDefaults().span(3, 1).applyTo(createTag);
    createTag.setText(UIText.FetchGerritChangePage_TagRadio);
    createTag.addSelectionListener(new SelectionAdapter() {

        @Override
        public void widgetSelected(SelectionEvent e) {
            checkPage();
        }
    });
    tagTextlabel = new Label(checkoutGroup, SWT.NONE);
    GridDataFactory.defaultsFor(tagTextlabel).exclude(true).applyTo(tagTextlabel);
    tagTextlabel.setText(UIText.FetchGerritChangePage_TagNameText);
    tagText = new Text(checkoutGroup, SWT.SINGLE | SWT.BORDER);
    GridDataFactory.fillDefaults().exclude(true).grab(true, false).applyTo(tagText);
    tagText.addKeyListener(new KeyAdapter() {

        @Override
        public void keyPressed(KeyEvent e) {
            tagTextEdited = true;
        }
    });
    tagText.addVerifyListener(event -> {
        if (event.text.isEmpty()) {
            tagTextEdited = false;
        }
    });
    tagText.addModifyListener(new ModifyListener() {

        @Override
        public void modifyText(ModifyEvent e) {
            checkPage();
        }
    });
    BranchNameNormalizer tagNormalizer = new BranchNameNormalizer(tagText, UIText.BranchNameNormalizer_TooltipForTag);
    tagNormalizer.setVisible(false);
    // radio: checkout FETCH_HEAD
    checkoutFetchHead = new Button(checkoutGroup, SWT.RADIO);
    GridDataFactory.fillDefaults().span(3, 1).applyTo(checkoutFetchHead);
    checkoutFetchHead.setText(UIText.FetchGerritChangePage_CheckoutRadio);
    checkoutFetchHead.addSelectionListener(new SelectionAdapter() {

        @Override
        public void widgetSelected(SelectionEvent e) {
            checkPage();
        }
    });
    // radio: don't checkout
    updateFetchHead = new Button(checkoutGroup, SWT.RADIO);
    GridDataFactory.fillDefaults().span(3, 1).applyTo(updateFetchHead);
    updateFetchHead.setText(UIText.FetchGerritChangePage_UpdateRadio);
    updateFetchHead.addSelectionListener(new SelectionAdapter() {

        @Override
        public void widgetSelected(SelectionEvent e) {
            checkPage();
        }
    });
    if ("checkout".equals(defaultCommand)) {
        // $NON-NLS-1$
        checkoutFetchHead.setSelection(true);
    } else {
        createBranch.setSelection(true);
    }
    warningAdditionalRefNotActive = new Composite(main, SWT.NONE);
    GridDataFactory.fillDefaults().span(2, 1).grab(true, false).exclude(true).applyTo(warningAdditionalRefNotActive);
    warningAdditionalRefNotActive.setLayout(new GridLayout(2, false));
    warningAdditionalRefNotActive.setVisible(false);
    activateAdditionalRefs = new Button(warningAdditionalRefNotActive, SWT.CHECK);
    activateAdditionalRefs.setText(UIText.FetchGerritChangePage_ActivateAdditionalRefsButton);
    activateAdditionalRefs.setToolTipText(UIText.FetchGerritChangePage_ActivateAdditionalRefsTooltip);
    ActionUtils.setGlobalActions(refText, ActionUtils.createGlobalAction(ActionFactory.PASTE, () -> doPaste(refText)));
    refText.addModifyListener(new ModifyListener() {

        @Override
        public void modifyText(ModifyEvent e) {
            Change change = determineChangeFromString(refText.getText());
            // $NON-NLS-1$
            String suggestion = "";
            if (change != null) {
                Object ps = change.getPatchSetNumber();
                if (ps == null) {
                    ps = SIMPLE_TIMESTAMP.format(new Date());
                }
                suggestion = NLS.bind(UIText.FetchGerritChangePage_SuggestedRefNamePattern, change.getChangeNumber(), ps);
            }
            if (!branchTextEdited) {
                branchText.setText(suggestion);
            }
            if (!tagTextEdited) {
                tagText.setText(suggestion);
            }
            checkPage();
        }
    });
    if (defaultChange != null) {
        refText.setText(defaultChange);
    } else if (candidateChange != null) {
        String ref = candidateChange.getRefName();
        if (ref != null) {
            refText.setText(ref);
        } else {
            refText.setText(candidateChange.getChangeNumber().toString());
        }
    }
    // get all available Gerrit URIs from the repository
    SortedSet<String> uris = new TreeSet<>();
    try {
        for (RemoteConfig rc : RemoteConfig.getAllRemoteConfigs(repository.getConfig())) {
            if (GerritUtil.isGerritFetch(rc)) {
                if (rc.getURIs().size() > 0) {
                    uris.add(rc.getURIs().get(0).toPrivateString());
                }
                for (URIish u : rc.getPushURIs()) {
                    uris.add(u.toPrivateString());
                }
            }
        }
    } catch (URISyntaxException e) {
        Activator.handleError(e.getMessage(), e, false);
        setErrorMessage(e.getMessage());
    }
    for (String aUri : uris) {
        uriCombo.add(aUri);
        changeRefs.put(aUri, new ChangeList(repository, aUri));
    }
    if (defaultUri != null) {
        uriCombo.setText(defaultUri);
    } else {
        selectLastUsedUri();
    }
    String currentUri = uriCombo.getText();
    ChangeList list = changeRefs.get(currentUri);
    if (list == null) {
        list = new ChangeList(repository, currentUri);
        changeRefs.put(currentUri, list);
    }
    preFetch(list);
    refText.setFocus();
    Dialog.applyDialogFont(main);
    setControl(main);
    if (candidateChange != null) {
        // Launch content assist when the page is displayed
        final IWizardContainer container = getContainer();
        if (container instanceof IPageChangeProvider) {
            ((IPageChangeProvider) container).addPageChangedListener(new IPageChangedListener() {

                @Override
                public void pageChanged(PageChangedEvent event) {
                    if (event.getSelectedPage() == FetchGerritChangePage.this) {
                        // Only the first time: remove myself
                        event.getPageChangeProvider().removePageChangedListener(this);
                        getControl().getDisplay().asyncExec(new Runnable() {

                            @Override
                            public void run() {
                                Control control = getControl();
                                if (control != null && !control.isDisposed()) {
                                    contentProposer.openProposalPopup();
                                }
                            }
                        });
                    }
                }
            });
        }
    }
    checkPage();
}
Also used : URIish(org.eclipse.jgit.transport.URIish) Group(org.eclipse.swt.widgets.Group) ModifyListener(org.eclipse.swt.events.ModifyListener) Matcher(java.util.regex.Matcher) KeyAdapter(org.eclipse.swt.events.KeyAdapter) Label(org.eclipse.swt.widgets.Label) Combo(org.eclipse.swt.widgets.Combo) PageChangedEvent(org.eclipse.jface.dialogs.PageChangedEvent) URISyntaxException(java.net.URISyntaxException) AbstractBranchSelectionDialog(org.eclipse.egit.ui.internal.dialogs.AbstractBranchSelectionDialog) KeyEvent(org.eclipse.swt.events.KeyEvent) IWizardContainer(org.eclipse.jface.wizard.IWizardContainer) BranchNameNormalizer(org.eclipse.egit.ui.internal.components.BranchNameNormalizer) IPageChangedListener(org.eclipse.jface.dialogs.IPageChangedListener) GridLayout(org.eclipse.swt.layout.GridLayout) ModifyEvent(org.eclipse.swt.events.ModifyEvent) Control(org.eclipse.swt.widgets.Control) Button(org.eclipse.swt.widgets.Button) TreeSet(java.util.TreeSet) SelectionEvent(org.eclipse.swt.events.SelectionEvent) RemoteConfig(org.eclipse.jgit.transport.RemoteConfig) BranchEditDialog(org.eclipse.egit.ui.internal.dialogs.BranchEditDialog) Composite(org.eclipse.swt.widgets.Composite) SelectionAdapter(org.eclipse.swt.events.SelectionAdapter) IPageChangeProvider(org.eclipse.jface.dialogs.IPageChangeProvider) Text(org.eclipse.swt.widgets.Text) UIText(org.eclipse.egit.ui.internal.UIText) Date(java.util.Date) IWorkspaceRunnable(org.eclipse.core.resources.IWorkspaceRunnable) Clipboard(org.eclipse.swt.dnd.Clipboard)

Example 8 with RemoteConfig

use of org.eclipse.jgit.transport.RemoteConfig in project egit by eclipse.

the class SimpleConfigureFetchDialog method getConfiguredRemote.

/**
 * @param repository
 * @return the configured remote for the current branch, or the default
 *         remote; <code>null</code> if a local branch is checked out that
 *         points to "." as remote
 */
public static RemoteConfig getConfiguredRemote(Repository repository) {
    String branch;
    try {
        branch = repository.getBranch();
    } catch (IOException e) {
        Activator.handleError(e.getMessage(), e, true);
        return null;
    }
    if (branch == null)
        return null;
    String remoteName;
    if (ObjectId.isId(branch))
        remoteName = Constants.DEFAULT_REMOTE_NAME;
    else
        remoteName = repository.getConfig().getString(ConfigConstants.CONFIG_BRANCH_SECTION, branch, ConfigConstants.CONFIG_REMOTE_SECTION);
    // check if we find the configured and default Remotes
    List<RemoteConfig> allRemotes;
    try {
        allRemotes = RemoteConfig.getAllRemoteConfigs(repository.getConfig());
    } catch (URISyntaxException e) {
        allRemotes = new ArrayList<>();
    }
    RemoteConfig defaultConfig = null;
    RemoteConfig configuredConfig = null;
    for (RemoteConfig config : allRemotes) {
        if (config.getName().equals(Constants.DEFAULT_REMOTE_NAME))
            defaultConfig = config;
        if (remoteName != null && config.getName().equals(remoteName))
            configuredConfig = config;
    }
    RemoteConfig configToUse = configuredConfig != null ? configuredConfig : defaultConfig;
    return configToUse;
}
Also used : ArrayList(java.util.ArrayList) IOException(java.io.IOException) URISyntaxException(java.net.URISyntaxException) RemoteConfig(org.eclipse.jgit.transport.RemoteConfig)

Example 9 with RemoteConfig

use of org.eclipse.jgit.transport.RemoteConfig in project egit by eclipse.

the class SynchronizeFetchJob method runInWorkspace.

@Override
public IStatus runInWorkspace(IProgressMonitor monitor) {
    SubMonitor progress = SubMonitor.convert(monitor, gsdSet.size());
    progress.setTaskName(UIText.SynchronizeFetchJob_TaskName);
    for (GitSynchronizeData gsd : gsdSet) {
        Repository repo = gsd.getRepository();
        StoredConfig repoConfig = repo.getConfig();
        String remoteName = gsd.getDstRemoteName();
        if (remoteName == null) {
            progress.worked(1);
            continue;
        }
        progress.subTask(NLS.bind(UIText.SynchronizeFetchJob_SubTaskName, remoteName));
        RemoteConfig config;
        try {
            config = new RemoteConfig(repoConfig, remoteName);
        } catch (URISyntaxException e) {
            Activator.logError(e.getMessage(), e);
            progress.worked(1);
            continue;
        }
        FetchOperationUI fetchOperationUI = new FetchOperationUI(repo, config, timeout, false);
        fetchOperationUI.setCredentialsProvider(new EGitCredentialsProvider());
        try {
            fetchOperationUI.execute(progress.newChild(1));
            gsd.updateRevs();
        } catch (Exception e) {
            showInformationDialog(remoteName);
            Activator.logError(e.getMessage(), e);
        }
    }
    return Status.OK_STATUS;
}
Also used : StoredConfig(org.eclipse.jgit.lib.StoredConfig) GitSynchronizeData(org.eclipse.egit.core.synchronize.dto.GitSynchronizeData) Repository(org.eclipse.jgit.lib.Repository) SubMonitor(org.eclipse.core.runtime.SubMonitor) URISyntaxException(java.net.URISyntaxException) RemoteConfig(org.eclipse.jgit.transport.RemoteConfig) EGitCredentialsProvider(org.eclipse.egit.ui.internal.credentials.EGitCredentialsProvider) URISyntaxException(java.net.URISyntaxException) FetchOperationUI(org.eclipse.egit.ui.internal.fetch.FetchOperationUI)

Example 10 with RemoteConfig

use of org.eclipse.jgit.transport.RemoteConfig in project egit by eclipse.

the class GitSynchronizeDataTest method shouldReturnDstMergeForRemoteBranch.

@Test
public void shouldReturnDstMergeForRemoteBranch() throws Exception {
    // given
    StoredConfig config = repo.getConfig();
    RemoteConfig remoteConfig = new RemoteConfig(config, "origin");
    remoteConfig.setFetchRefSpecs(Arrays.asList(new RefSpec("+refs/heads/*:refs/remotes/origin/*")));
    remoteConfig.update(config);
    GitSynchronizeData gsd = new GitSynchronizeData(repo, HEAD, "refs/remotes/origin/master", false);
    assertThat(gsd.getDstRemoteName(), is("origin"));
    assertThat(gsd.getDstMerge(), is("refs/heads/master"));
}
Also used : StoredConfig(org.eclipse.jgit.lib.StoredConfig) RefSpec(org.eclipse.jgit.transport.RefSpec) RemoteConfig(org.eclipse.jgit.transport.RemoteConfig) Test(org.junit.Test)

Aggregations

RemoteConfig (org.eclipse.jgit.transport.RemoteConfig)63 URISyntaxException (java.net.URISyntaxException)23 StoredConfig (org.eclipse.jgit.lib.StoredConfig)21 URIish (org.eclipse.jgit.transport.URIish)21 IOException (java.io.IOException)16 RefSpec (org.eclipse.jgit.transport.RefSpec)14 Repository (org.eclipse.jgit.lib.Repository)13 ArrayList (java.util.ArrayList)10 Test (org.junit.Test)7 Button (org.eclipse.swt.widgets.Button)6 Composite (org.eclipse.swt.widgets.Composite)6 File (java.io.File)5 Git (org.eclipse.jgit.api.Git)5 Ref (org.eclipse.jgit.lib.Ref)5 SelectionAdapter (org.eclipse.swt.events.SelectionAdapter)5 SelectionEvent (org.eclipse.swt.events.SelectionEvent)5 Label (org.eclipse.swt.widgets.Label)5 List (java.util.List)4 CoreException (org.eclipse.core.runtime.CoreException)4 UIText (org.eclipse.egit.ui.internal.UIText)4