From 3df7ba98998c99b87ff94e7599bddbf1b951931f Mon Sep 17 00:00:00 2001 From: Jens Baumgart Date: Tue, 4 May 2010 13:50:41 +0200 Subject: [PATCH] Enable import of empty Git repositories Currently File->Import->Git Repository does not allow to import an empty Git repository. GitCloneWizard was enhanced to enable the import of an empty repository. Signed-off-by: Jens Baumgart --- org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java | 3 +++ .../egit/ui/internal/clone/CloneDestinationPage.java | 11 +++++++++-- .../eclipse/egit/ui/internal/clone/GitCloneWizard.java | 14 +++++++++++--- .../egit/ui/internal/clone/SourceBranchPage.java | 17 ++++++++++++++++- .../src/org/eclipse/egit/ui/uitext.properties | 1 + 5 files changed, 40 insertions(+), 6 deletions(-) diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java index 031dd061..7e7f972f 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/UIText.java @@ -397,6 +397,9 @@ public class UIText extends NLS { public static String RepositorySelectionPage_uriChoice; /** */ + public static String SourceBranchPage_repoEmpty; + + /** */ public static String SourceBranchPage_title; /** */ diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/CloneDestinationPage.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/CloneDestinationPage.java index 998814e6..a8491fd8 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/CloneDestinationPage.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/CloneDestinationPage.java @@ -94,8 +94,14 @@ class CloneDestinationPage extends WizardPage { @Override public void setVisible(final boolean visible) { - if (visible) + if (visible) { + if (branchPage.isSourceRepoEmpty()) { + initialBranch.setEnabled(false); + showImportWizard.setSelection(false); + showImportWizard.setEnabled(false); + } revalidate(); + } super.setVisible(visible); if (visible) directoryText.setFocus(); @@ -258,7 +264,8 @@ class CloneDestinationPage extends WizardPage { setPageComplete(false); return; } - if (initialBranch.getSelectionIndex() < 0) { + if (!branchPage.isSourceRepoEmpty() + && initialBranch.getSelectionIndex() < 0) { setErrorMessage(NLS.bind(UIText.CloneDestinationPage_fieldRequired, UIText.CloneDestinationPage_promptInitialBranch)); setPageComplete(false); diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitCloneWizard.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitCloneWizard.java index a01f1ed6..4b15c40d 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitCloneWizard.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/GitCloneWizard.java @@ -14,6 +14,7 @@ package org.eclipse.egit.ui.internal.clone; import java.io.File; import java.lang.reflect.InvocationTargetException; import java.util.Collection; +import java.util.Collections; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; @@ -123,9 +124,16 @@ public class GitCloneWizard extends Wizard implements IImportWizard { boolean performClone(boolean background) { final URIish uri = cloneSource.getSelection().getURI(); - final boolean allSelected = validSource.isAllSelected(); - final Collection selectedBranches = validSource - .getSelectedBranches(); + final boolean allSelected; + final Collection selectedBranches; + if (validSource.isSourceRepoEmpty()) { + // fetch all branches of empty repo + allSelected = true; + selectedBranches = Collections.emptyList(); + } else { + allSelected = validSource.isAllSelected(); + selectedBranches = validSource.getSelectedBranches(); + } final File workdir = cloneDestination.getDestinationFile(); final String branch = cloneDestination.getInitialBranch(); final String remoteName = cloneDestination.getRemote(); diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/SourceBranchPage.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/SourceBranchPage.java index f31b215c..7f91f0bf 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/SourceBranchPage.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/clone/SourceBranchPage.java @@ -29,6 +29,7 @@ import org.eclipse.egit.ui.internal.components.RepositorySelection; import org.eclipse.egit.ui.internal.components.RepositorySelectionPage; import org.eclipse.egit.ui.internal.components.SelectionChangeListener; import org.eclipse.jface.dialogs.ErrorDialog; +import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; @@ -58,6 +59,8 @@ class SourceBranchPage extends BaseWizardPage { private List selectedRefs = new ArrayList(); + private boolean sourceRepoEmpty = false; + private Label label; private Table refsTable; @@ -88,6 +91,10 @@ class SourceBranchPage extends BaseWizardPage { return head; } + boolean isSourceRepoEmpty() { + return sourceRepoEmpty; + } + boolean isAllSelected() { return availableRefs.size() == selectedRefs.size(); } @@ -189,7 +196,13 @@ class SourceBranchPage extends BaseWizardPage { return; } - if (getSelectedBranches().isEmpty()) { + if (isSourceRepoEmpty()) { + setMessage(UIText.SourceBranchPage_repoEmpty, IMessageProvider.WARNING); + setPageComplete(true); + return; + } + + if ( getSelectedBranches().isEmpty()) { setErrorMessage(UIText.SourceBranchPage_errorBranchRequired); setPageComplete(false); return; @@ -290,6 +303,8 @@ class SourceBranchPage extends BaseWizardPage { ti.setChecked(true); selectedRefs.add(r); } + if (availableRefs.size() == 0) + sourceRepoEmpty = true; notifySelectionChanged(); checkPage(); } diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties index f0ef1fc5..40938bd3 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/uitext.properties @@ -141,6 +141,7 @@ RepositorySelectionPage_fieldNotSupported={0} not supported on {1} protocol. RepositorySelectionPage_fileNotFound={0} does not exist. RepositorySelectionPage_internalError=Internal error; consult Eclipse error log. RepositorySelectionPage_ShowPreviousURIs_HoverText=Start typing to see previously used URIs (use "*" as wildcard) +SourceBranchPage_repoEmpty=Source Git Repository is empty SourceBranchPage_title=Branch Selection SourceBranchPage_description=Select branches to clone from remote repository. SourceBranchPage_branchList=Branches &of {0}: -- 2.11.4.GIT