From 07d4b8e0889302ebfa94d7869362ac7142ee43c8 Mon Sep 17 00:00:00 2001 From: Robin Rosenberg Date: Thu, 29 May 2008 22:42:10 +0200 Subject: [PATCH] Make it possible to create a new Git repository in project parent directory. In order to share repository, the Git repository must be located outside the project. This patch extends the scope to the parent directory. Signed-off-by: Robin Rosenberg --- .../spearce/egit/core/op/ConnectProviderOperation.java | 15 +++++++++++++-- org.spearce.egit.ui/src/org/spearce/egit/ui/UIText.java | 3 +++ .../egit/ui/internal/sharing/ExistingOrNewPage.java | 17 +++++++++++++++++ .../spearce/egit/ui/internal/sharing/SharingWizard.java | 16 +++++++++++++++- .../src/org/spearce/egit/ui/uitext.properties | 1 + 5 files changed, 49 insertions(+), 3 deletions(-) diff --git a/org.spearce.egit.core/src/org/spearce/egit/core/op/ConnectProviderOperation.java b/org.spearce.egit.core/src/org/spearce/egit/core/op/ConnectProviderOperation.java index b029de73..3ed35694 100644 --- a/org.spearce.egit.core/src/org/spearce/egit/core/op/ConnectProviderOperation.java +++ b/org.spearce.egit.core/src/org/spearce/egit/core/op/ConnectProviderOperation.java @@ -15,8 +15,10 @@ import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.team.core.RepositoryProvider; import org.spearce.egit.core.Activator; @@ -57,7 +59,7 @@ public class ConnectProviderOperation implements IWorkspaceRunnable { m.beginTask(CoreText.ConnectProviderOperation_connecting, 100); try { - final Collection repos = new ArrayList(); + final Collection repos = new ArrayList(); if (newGitDir != null) { try { @@ -68,8 +70,17 @@ public class ConnectProviderOperation implements IWorkspaceRunnable { db = new Repository(newGitDir); db.create(); + IPath gitDirParent = Path.fromOSString( + db.getDirectory().getAbsolutePath()) + .removeLastSegments(1); + IPath cPath = project.getLocation(); + String subset = null; + if (gitDirParent.isPrefixOf(cPath)) { + int n = cPath.matchingFirstSegments(gitDirParent); + subset = cPath.removeFirstSegments(n).toPortableString(); + } repos.add(new RepositoryMapping(project, db.getDirectory(), - null)); + subset)); db.close(); // If we don't refresh the project directory right diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/UIText.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/UIText.java index 6f2c7cf9..9ccf606e 100644 --- a/org.spearce.egit.ui/src/org/spearce/egit/ui/UIText.java +++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/UIText.java @@ -41,6 +41,9 @@ public class UIText extends NLS { public static String ExistingOrNewPage_createNew; /** */ + public static String ExistingOrNewPage_createInParent; + + /** */ public static String GitCloneWizard_title; /** */ diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/sharing/ExistingOrNewPage.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/sharing/ExistingOrNewPage.java index 24377d46..d0ddcb71 100644 --- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/sharing/ExistingOrNewPage.java +++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/sharing/ExistingOrNewPage.java @@ -19,6 +19,7 @@ import org.spearce.egit.ui.UIText; class ExistingOrNewPage extends WizardPage { final SharingWizard myWizard; + private Button createInParent; ExistingOrNewPage(final SharingWizard w) { super(ExistingOrNewPage.class.getName()); @@ -45,6 +46,7 @@ class ExistingOrNewPage extends WizardPage { public void widgetSelected(final SelectionEvent e) { myWizard.setUseExisting(); + createInParent.setEnabled(false); } }); useExisting.setSelection(true); @@ -59,9 +61,24 @@ class ExistingOrNewPage extends WizardPage { public void widgetSelected(final SelectionEvent e) { myWizard.setCreateNew(); + createInParent.setEnabled(true); } }); + createInParent = new Button(g, SWT.CHECK); + createInParent.setEnabled(createNew.getSelection()); + createInParent.setText(UIText.ExistingOrNewPage_createInParent); + createInParent.addSelectionListener(new SelectionListener() { + public void widgetDefaultSelected(SelectionEvent e) { + widgetSelected(e); + } + + public void widgetSelected(SelectionEvent e) { + myWizard.setUseParent(createInParent.getSelection()); + } + }); + createInParent.setSelection(true); + myWizard.setUseParent(createInParent.getSelection()); setControl(g); } } diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/sharing/SharingWizard.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/sharing/SharingWizard.java index e02b0387..292baf28 100644 --- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/sharing/SharingWizard.java +++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/sharing/SharingWizard.java @@ -36,6 +36,8 @@ public class SharingWizard extends Wizard implements IConfigurationWizard { private File newGitDir; + private boolean useParent; + /** * Construct the Git Sharing Wizard for connecting Git project to Eclipse */ @@ -46,7 +48,14 @@ public class SharingWizard extends Wizard implements IConfigurationWizard { public void init(final IWorkbench workbench, final IProject p) { project = p; - newGitDir = new File(project.getLocation().toFile(), ".git"); + calculateNewGitDir(); + } + + private void calculateNewGitDir() { + File pdir = project.getLocation().toFile(); + if (useParent) + pdir = pdir.getParentFile(); + newGitDir = new File(pdir, ".git"); } public void addPages() { @@ -100,4 +109,9 @@ public class SharingWizard extends Wizard implements IConfigurationWizard { return false; } } + + void setUseParent(boolean selection) { + useParent = selection; + calculateNewGitDir(); + } } diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/uitext.properties b/org.spearce.egit.ui/src/org/spearce/egit/ui/uitext.properties index f4980a0c..18f8c28a 100644 --- a/org.spearce.egit.ui/src/org/spearce/egit/ui/uitext.properties +++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/uitext.properties @@ -25,6 +25,7 @@ ExistingOrNewPage_description=Select Git Repository Location ExistingOrNewPage_groupHeader=Repository Location ExistingOrNewPage_useExisting=Search for existing Git repositories ExistingOrNewPage_createNew=Create a new Git repository for this project +ExistingOrNewPage_createInParent=Create repository in project's parent directory GitCloneWizard_title=Import Git Repository GitCloneWizard_jobName=Cloning from {0} -- 2.11.4.GIT