git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [EGIT PATCH] git property page for project properties.
@ 2008-10-20 19:06 Tomi Pakarinen
  2008-10-21  5:37 ` Robin Rosenberg
  2008-10-21 17:50 ` Robin Rosenberg
  0 siblings, 2 replies; 6+ messages in thread
From: Tomi Pakarinen @ 2008-10-20 19:06 UTC (permalink / raw)
  To: spearce; +Cc: git, Tomi Pakarinen

 Show git property page in project's properties, if project
has git repository provider.

Signed-off-by: Tomi Pakarinen <tomi.pakarinen@iki.fi>
---

 This is similar to CVS's property page. Current
information on page is very limited and non editable.

 Tomi.

 org.spearce.egit.ui/plugin.properties              |    2 +
 org.spearce.egit.ui/plugin.xml                     |   13 ++
 .../preferences/GitProjectPropertyPage.java        |  147 ++++++++++++++++++++
 3 files changed, 162 insertions(+), 0 deletions(-)
 create mode 100644 org.spearce.egit.ui/src/org/spearce/egit/ui/internal/preferences/GitProjectPropertyPage.java

diff --git a/org.spearce.egit.ui/plugin.properties b/org.spearce.egit.ui/plugin.properties
index da91e48..fa043f1 100644
--- a/org.spearce.egit.ui/plugin.properties
+++ b/org.spearce.egit.ui/plugin.properties
@@ -1,6 +1,8 @@
 plugin_name=Git Team Provider (UI)
 provider_name=spearce.org
 
+Git=Git
+
 Git_clone_category=Git
 Git_clone_wizard=Git Repository
 Git_clone_description=Clone an existing Git repository.
diff --git a/org.spearce.egit.ui/plugin.xml b/org.spearce.egit.ui/plugin.xml
index ee8a5a0..e6e3762 100644
--- a/org.spearce.egit.ui/plugin.xml
+++ b/org.spearce.egit.ui/plugin.xml
@@ -194,6 +194,19 @@
             id="org.spearce.egit.ui.internal.preferences.WindowCachePreferencePage" />
    </extension>
 
+   <extension point="org.eclipse.ui.propertyPages">
+      <page
+            objectClass="org.eclipse.core.resources.IProject"
+            adaptable="true"
+            name="%Git"
+            class="org.spearce.egit.ui.internal.preferences.GitProjectPropertyPage"
+            id="org.spearce.egit.ui.preferences.GitProjectPropertyPage">
+         <filter
+               name="projectPersistentProperty"
+               value="org.eclipse.team.core.repository=org.spearce.egit.core.GitProvider">
+         </filter>
+      </page>
+   </extension>
    <extension point="org.eclipse.ui.decorators">
       <decorator
             lightweight="true"
diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/preferences/GitProjectPropertyPage.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/preferences/GitProjectPropertyPage.java
new file mode 100644
index 0000000..fd7e14a
--- /dev/null
+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/preferences/GitProjectPropertyPage.java
@@ -0,0 +1,147 @@
+/*******************************************************************************
+ * Copyright (C) 2008, Tomi Pakarinen <tomi.pakarinen@iki.fi>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * See LICENSE for the full license text, also available.
+ *******************************************************************************/
+package org.spearce.egit.ui.internal.preferences;
+
+import java.io.IOException;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.dialogs.PropertyPage;
+import org.spearce.egit.core.project.RepositoryMapping;
+import org.spearce.jgit.lib.ObjectId;
+import org.spearce.jgit.lib.Repository;
+
+/**
+ * Property page to be shown in project properties, if project is shared using
+ * git provider. Currently there aren't any modifiable element.
+ */
+public class GitProjectPropertyPage extends PropertyPage {
+
+	Text gitDir;
+
+	Text branch;
+
+	Text id;
+
+	Text state;
+
+	Text workDir;
+
+	@Override
+	protected Control createContents(Composite parent) {
+		final Composite composite = new Composite(parent, SWT.NULL);
+
+		composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		final GridLayout layout = new GridLayout();
+		layout.numColumns = 2;
+		layout.marginHeight = 0;
+		layout.marginWidth = 0;
+		layout.horizontalSpacing = 0;
+		layout.verticalSpacing = 0;
+		composite.setLayout(layout);
+
+		gitDir = createLabeledReadOnlyText(composite, "Git directory:");
+		workDir = createLabeledReadOnlyText(composite, "Working directory:");
+		branch = createLabeledReadOnlyText(composite, "Branch:");
+		id = createLabeledReadOnlyText(composite, "Id:");
+		state = createLabeledReadOnlyText(composite, "Current state:");
+
+		// Get the project that is the source of this property page
+		IProject project = null;
+		final IAdaptable element = getElement();
+		if (element instanceof IProject) {
+			project = (IProject) element;
+		} else {
+			Object adapter = element.getAdapter(IProject.class);
+			if (adapter instanceof IProject) {
+				project = (IProject) adapter;
+			}
+		}
+
+		Repository repository = RepositoryMapping.getMapping(project)
+				.getRepository();
+
+		if (repository != null) {
+			try {
+				fillValues(repository);
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+
+		return composite;
+	}
+
+	private void fillValues(Repository repository) throws IOException {
+		gitDir.setText(repository.getDirectory().getAbsolutePath());
+		branch.setText(repository.getBranch());
+		workDir.setText(repository.getWorkDir().getAbsolutePath());
+
+		switch (repository.getRepositoryState()) {
+		case BISECTING:
+			state.setText("Bisecting");
+			break;
+		case MERGING:
+			state.setText("Merging");
+			break;
+		case REBASING:
+			state.setText("Rebasing");
+			break;
+		case REBASING_INTERACTIVE:
+			state.setText("Rebasing interactive");
+			break;
+		case REBASING_MERGE:
+			state.setText("Rebasing merge");
+			break;
+		case SAFE:
+			state.setText("Safe");
+			break;
+		}
+
+		final ObjectId objectId = repository
+				.resolve(repository.getFullBranch());
+		id.setText(objectId.name());
+	}
+
+	/**
+	 * Create a read only text field with a label
+	 * 
+	 * @param parent
+	 *            the parent composite for new widgets
+	 * @param labelText
+	 *            text for label
+	 * @return the new read only text field
+	 */
+	protected Text createLabeledReadOnlyText(Composite parent,
+			final String labelText) {
+		Label label = new Label(parent, SWT.LEFT);
+		label.setText(labelText);
+		GridData data = new GridData();
+		data.horizontalSpan = 1;
+		data.horizontalAlignment = GridData.FILL;
+		label.setLayoutData(data);
+
+		Text text = new Text(parent, SWT.LEFT | SWT.READ_ONLY);
+		text.setBackground(Display.getDefault().getSystemColor(
+				SWT.COLOR_WIDGET_BACKGROUND));
+		data = new GridData();
+		data.horizontalSpan = 1;
+		data.horizontalAlignment = GridData.FILL;
+		text.setLayoutData(data);
+		return text;
+	}
+
+}
-- 
1.6.0.2

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [EGIT PATCH] git property page for project properties.
  2008-10-20 19:06 [EGIT PATCH] git property page for project properties Tomi Pakarinen
@ 2008-10-21  5:37 ` Robin Rosenberg
  2008-10-21 17:50 ` Robin Rosenberg
  1 sibling, 0 replies; 6+ messages in thread
From: Robin Rosenberg @ 2008-10-21  5:37 UTC (permalink / raw)
  To: Tomi Pakarinen; +Cc: spearce, git

måndagen den 20 oktober 2008 21.06.44 skrev Tomi Pakarinen:
>  Show git property page in project's properties, if project
> has git repository provider.
> 
> Signed-off-by: Tomi Pakarinen <tomi.pakarinen@iki.fi>
> ---
> 
>  This is similar to CVS's property page. Current
> information on page is very limited and non editable.
> 
>  Tomi.
> 
> +	Text gitDir;
> +
> +	Text branch;
> +
> +	Text id;
> +
> +	Text state;
> +
> +	Text workDir;

Should be private. I'll squash that in and patch Egit to detect
the 1.6-way of recording repository state, which I noted it does
not handle.

-- robin

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [EGIT PATCH] git property page for project properties.
  2008-10-20 19:06 [EGIT PATCH] git property page for project properties Tomi Pakarinen
  2008-10-21  5:37 ` Robin Rosenberg
@ 2008-10-21 17:50 ` Robin Rosenberg
  2008-10-21 18:09   ` Tomi Pakarinen
  1 sibling, 1 reply; 6+ messages in thread
From: Robin Rosenberg @ 2008-10-21 17:50 UTC (permalink / raw)
  To: Tomi Pakarinen; +Cc: spearce, git

måndagen den 20 oktober 2008 21.06.44 skrev Tomi Pakarinen:
>  Show git property page in project's properties, if project
> has git repository provider.
[...]
> +		switch (repository.getRepositoryState()) {
> +		case BISECTING:
> +			state.setText("Bisecting");
> +			break;
> +		case MERGING:
> +			state.setText("Merging");
> +			break;
> +		case REBASING:
> +			state.setText("Rebasing");
> +			break;
> +		case REBASING_INTERACTIVE:
> +			state.setText("Rebasing interactive");
> +			break;
> +		case REBASING_MERGE:
> +			state.setText("Rebasing merge");
> +			break;
> +		case SAFE:
> +			state.setText("Safe");
> +			break;
> +		}
Why not this:

		state.setText(repository.getRepositoryState().getDescription());

Description is ment for presentation purposes. The enum for code.

-- robin

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [EGIT PATCH] git property page for project properties.
  2008-10-21 17:50 ` Robin Rosenberg
@ 2008-10-21 18:09   ` Tomi Pakarinen
  2008-10-21 19:13     ` Robin Rosenberg
  2008-10-21 20:13     ` [JGIT PATCH] Detect repository states according to post Git 1.5 Robin Rosenberg
  0 siblings, 2 replies; 6+ messages in thread
From: Tomi Pakarinen @ 2008-10-21 18:09 UTC (permalink / raw)
  To: Robin Rosenberg; +Cc: spearce, git

On Tue, Oct 21, 2008 at 8:50 PM, Robin Rosenberg
<robin.rosenberg.lists@dewire.com> wrote:
> måndagen den 20 oktober 2008 21.06.44 skrev Tomi Pakarinen:
>>  Show git property page in project's properties, if project
>> has git repository provider.
> [...]
>> +             switch (repository.getRepositoryState()) {
>> +             case BISECTING:
>> +                     state.setText("Bisecting");
>> +                     break;
>> +             case MERGING:
>> +                     state.setText("Merging");
>> +                     break;
>> +             case REBASING:
>> +                     state.setText("Rebasing");
>> +                     break;
>> +             case REBASING_INTERACTIVE:
>> +                     state.setText("Rebasing interactive");
>> +                     break;
>> +             case REBASING_MERGE:
>> +                     state.setText("Rebasing merge");
>> +                     break;
>> +             case SAFE:
>> +                     state.setText("Safe");
>> +                     break;
>> +             }
> Why not this:
>
>                state.setText(repository.getRepositoryState().getDescription());
>
> Description is ment for presentation purposes. The enum for code.
>
> -- robin
>

 That is ok. I just didn't notice that method before. But, what if
someone wants localize this plugin, he'll propably have to explode
this back to switch statement.

   Tomi.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [EGIT PATCH] git property page for project properties.
  2008-10-21 18:09   ` Tomi Pakarinen
@ 2008-10-21 19:13     ` Robin Rosenberg
  2008-10-21 20:13     ` [JGIT PATCH] Detect repository states according to post Git 1.5 Robin Rosenberg
  1 sibling, 0 replies; 6+ messages in thread
From: Robin Rosenberg @ 2008-10-21 19:13 UTC (permalink / raw)
  To: tomi.pakarinen; +Cc: spearce, git

tisdagen den 21 oktober 2008 20.09.13 skrev Tomi Pakarinen:
>  That is ok. I just didn't notice that method before. But, what if
> someone wants localize this plugin, he'll propably have to explode
> this back to switch statement.

No, we'd localize getDescription().

-- robin

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [JGIT PATCH] Detect repository states according to post Git 1.5
  2008-10-21 18:09   ` Tomi Pakarinen
  2008-10-21 19:13     ` Robin Rosenberg
@ 2008-10-21 20:13     ` Robin Rosenberg
  1 sibling, 0 replies; 6+ messages in thread
From: Robin Rosenberg @ 2008-10-21 20:13 UTC (permalink / raw)
  To: tomi.pakarinen; +Cc: spearce, git

Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
---

Seems we need this patch too in order to detect repository states. The new
resolution is more granular that before, though I suggest that one should
be restrictive when interpreting the state and not assume that these states
are the only ones. The methods on RepositoryState are the /only/ valid
ways of deciding what to, or not to, do. This implies we need to extend this
class somewhat, but I'm no hurry yet so we can think about what methods
we need.

 .../src/org/spearce/jgit/lib/Repository.java       |   17 +++++++++++++
 .../src/org/spearce/jgit/lib/RepositoryState.java  |   25 +++++++++++++++++++-
 2 files changed, 41 insertions(+), 1 deletions(-)

diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java b/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java
index dfce1b8..26748e2 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java
@@ -1017,14 +1017,31 @@ public GitIndex getIndex() throws IOException {
 	 * @return an important state
 	 */
 	public RepositoryState getRepositoryState() {
+		// Pre Git-1.6 logic
 		if (new File(getWorkDir(), ".dotest").exists())
 			return RepositoryState.REBASING;
 		if (new File(gitDir,".dotest-merge").exists())
 			return RepositoryState.REBASING_INTERACTIVE;
+
+		// From 1.6 onwards
+		if (new File(getDirectory(),"rebase-apply/rebasing").exists())
+			return RepositoryState.REBASING_REBASING;
+		if (new File(getDirectory(),"rebase-apply/applying").exists())
+			return RepositoryState.APPLY;
+		if (new File(getDirectory(),"rebase-apply").exists())
+			return RepositoryState.REBASING;
+
+		if (new File(getDirectory(),"rebase-merge/interactive").exists())
+			return RepositoryState.REBASING_INTERACTIVE;
+		if (new File(getDirectory(),"rebase-merge").exists())
+			return RepositoryState.REBASING_MERGE;
+
+		// Both versions
 		if (new File(gitDir,"MERGE_HEAD").exists())
 			return RepositoryState.MERGING;
 		if (new File(gitDir,"BISECT_LOG").exists())
 			return RepositoryState.BISECTING;
+
 		return RepositoryState.SAFE;
 	}
 
diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryState.java b/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryState.java
index c32c381..a916924 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryState.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryState.java
@@ -40,6 +40,9 @@
 /**
  * Important state of the repository that affects what can and cannot bed
  * done. This is things like unhandled conflicted merges and unfinished rebase.
+ *
+ * The granularity and set of states are somewhat arbitrary. The methods
+ * on the state are the only supported means of deciding what to do.
  */
 public enum RepositoryState {
 	/**
@@ -62,7 +65,7 @@
 	},
 
 	/**
-	 * An unfinished rebase. Must resolve, skip or abort before normal work can take place
+	 * An unfinished rebase or am. Must resolve, skip or abort before normal work can take place
 	 */
 	REBASING {
 		public boolean canCheckout() { return false; }
@@ -72,6 +75,26 @@
 	},
 
 	/**
+	 * An unfinished rebase. Must resolve, skip or abort before normal work can take place
+	 */
+	REBASING_REBASING {
+		public boolean canCheckout() { return false; }
+		public boolean canResetHead() { return false; }
+		public boolean canCommit() { return true; }
+		public String getDescription() { return "Rebase"; }
+	},
+
+	/**
+	 * An unfinished apply. Must resolve, skip or abort before normal work can take place
+	 */
+	APPLY {
+		public boolean canCheckout() { return false; }
+		public boolean canResetHead() { return false; }
+		public boolean canCommit() { return true; }
+		public String getDescription() { return "Apply mailbox"; }
+	},
+
+	/**
 	 * An unfinished rebase with merge. Must resolve, skip or abort before normal work can take place
 	 */
 	REBASING_MERGE {
-- 
1.6.0.2.308.gef4a

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2008-10-21 20:15 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-10-20 19:06 [EGIT PATCH] git property page for project properties Tomi Pakarinen
2008-10-21  5:37 ` Robin Rosenberg
2008-10-21 17:50 ` Robin Rosenberg
2008-10-21 18:09   ` Tomi Pakarinen
2008-10-21 19:13     ` Robin Rosenberg
2008-10-21 20:13     ` [JGIT PATCH] Detect repository states according to post Git 1.5 Robin Rosenberg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).