{"thread":{"id":"15979","subject":"[EGIT PATCH] git property page for project properties.","startedAt":"2008-10-20T19:06:44Z","lastAt":"2008-10-21T20:13:42Z","messageCount":6,"participants":["Tomi Pakarinen","Robin Rosenberg"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"93518","messageId":"1224529604-42397-1-git-send-email-tomi.pakarinen@iki.fi","threadId":"15979","inReplyTo":null,"subject":"[EGIT PATCH] git property page for project properties.","fromName":"Tomi Pakarinen","fromEmail":"tomi.pakarinen@iki.fi","sentAt":"2008-10-20T19:06:44Z","receivedAt":"2008-10-20T19:06:44Z","isPatch":true,"sender":{"key":"tomi.pakarinen@iki.fi","avatar":null},"body":" Show git property page in project's properties, if project\nhas git repository provider.\n\nSigned-off-by: Tomi Pakarinen <tomi.pakarinen@iki.fi>\n---\n\n This is similar to CVS's property page. Current\ninformation on page is very limited and non editable.\n\n Tomi.\n\n org.spearce.egit.ui/plugin.properties              |    2 +\n org.spearce.egit.ui/plugin.xml                     |   13 ++\n .../preferences/GitProjectPropertyPage.java        |  147 ++++++++++++++++++++\n 3 files changed, 162 insertions(+), 0 deletions(-)\n create mode 100644 org.spearce.egit.ui/src/org/spearce/egit/ui/internal/preferences/GitProjectPropertyPage.java\n\ndiff --git a/org.spearce.egit.ui/plugin.properties b/org.spearce.egit.ui/plugin.properties\nindex da91e48..fa043f1 100644\n--- a/org.spearce.egit.ui/plugin.properties\n+++ b/org.spearce.egit.ui/plugin.properties\n@@ -1,6 +1,8 @@\n plugin_name=Git Team Provider (UI)\n provider_name=spearce.org\n \n+Git=Git\n+\n Git_clone_category=Git\n Git_clone_wizard=Git Repository\n Git_clone_description=Clone an existing Git repository.\ndiff --git a/org.spearce.egit.ui/plugin.xml b/org.spearce.egit.ui/plugin.xml\nindex ee8a5a0..e6e3762 100644\n--- a/org.spearce.egit.ui/plugin.xml\n+++ b/org.spearce.egit.ui/plugin.xml\n@@ -194,6 +194,19 @@\n             id=\"org.spearce.egit.ui.internal.preferences.WindowCachePreferencePage\" />\n    </extension>\n \n+   <extension point=\"org.eclipse.ui.propertyPages\">\n+      <page\n+            objectClass=\"org.eclipse.core.resources.IProject\"\n+            adaptable=\"true\"\n+            name=\"%Git\"\n+            class=\"org.spearce.egit.ui.internal.preferences.GitProjectPropertyPage\"\n+            id=\"org.spearce.egit.ui.preferences.GitProjectPropertyPage\">\n+         <filter\n+               name=\"projectPersistentProperty\"\n+               value=\"org.eclipse.team.core.repository=org.spearce.egit.core.GitProvider\">\n+         </filter>\n+      </page>\n+   </extension>\n    <extension point=\"org.eclipse.ui.decorators\">\n       <decorator\n             lightweight=\"true\"\ndiff --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\nnew file mode 100644\nindex 0000000..fd7e14a\n--- /dev/null\n+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/preferences/GitProjectPropertyPage.java\n@@ -0,0 +1,147 @@\n+/*******************************************************************************\n+ * Copyright (C) 2008, Tomi Pakarinen <tomi.pakarinen@iki.fi>\n+ *\n+ * All rights reserved. This program and the accompanying materials\n+ * are made available under the terms of the Eclipse Public License v1.0\n+ * See LICENSE for the full license text, also available.\n+ *******************************************************************************/\n+package org.spearce.egit.ui.internal.preferences;\n+\n+import java.io.IOException;\n+\n+import org.eclipse.core.resources.IProject;\n+import org.eclipse.core.runtime.IAdaptable;\n+import org.eclipse.swt.SWT;\n+import org.eclipse.swt.layout.GridData;\n+import org.eclipse.swt.layout.GridLayout;\n+import org.eclipse.swt.widgets.Composite;\n+import org.eclipse.swt.widgets.Control;\n+import org.eclipse.swt.widgets.Display;\n+import org.eclipse.swt.widgets.Label;\n+import org.eclipse.swt.widgets.Text;\n+import org.eclipse.ui.dialogs.PropertyPage;\n+import org.spearce.egit.core.project.RepositoryMapping;\n+import org.spearce.jgit.lib.ObjectId;\n+import org.spearce.jgit.lib.Repository;\n+\n+/**\n+ * Property page to be shown in project properties, if project is shared using\n+ * git provider. Currently there aren't any modifiable element.\n+ */\n+public class GitProjectPropertyPage extends PropertyPage {\n+\n+\tText gitDir;\n+\n+\tText branch;\n+\n+\tText id;\n+\n+\tText state;\n+\n+\tText workDir;\n+\n+\t@Override\n+\tprotected Control createContents(Composite parent) {\n+\t\tfinal Composite composite = new Composite(parent, SWT.NULL);\n+\n+\t\tcomposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\n+\t\tfinal GridLayout layout = new GridLayout();\n+\t\tlayout.numColumns = 2;\n+\t\tlayout.marginHeight = 0;\n+\t\tlayout.marginWidth = 0;\n+\t\tlayout.horizontalSpacing = 0;\n+\t\tlayout.verticalSpacing = 0;\n+\t\tcomposite.setLayout(layout);\n+\n+\t\tgitDir = createLabeledReadOnlyText(composite, \"Git directory:\");\n+\t\tworkDir = createLabeledReadOnlyText(composite, \"Working directory:\");\n+\t\tbranch = createLabeledReadOnlyText(composite, \"Branch:\");\n+\t\tid = createLabeledReadOnlyText(composite, \"Id:\");\n+\t\tstate = createLabeledReadOnlyText(composite, \"Current state:\");\n+\n+\t\t// Get the project that is the source of this property page\n+\t\tIProject project = null;\n+\t\tfinal IAdaptable element = getElement();\n+\t\tif (element instanceof IProject) {\n+\t\t\tproject = (IProject) element;\n+\t\t} else {\n+\t\t\tObject adapter = element.getAdapter(IProject.class);\n+\t\t\tif (adapter instanceof IProject) {\n+\t\t\t\tproject = (IProject) adapter;\n+\t\t\t}\n+\t\t}\n+\n+\t\tRepository repository = RepositoryMapping.getMapping(project)\n+\t\t\t\t.getRepository();\n+\n+\t\tif (repository != null) {\n+\t\t\ttry {\n+\t\t\t\tfillValues(repository);\n+\t\t\t} catch (IOException e) {\n+\t\t\t\te.printStackTrace();\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn composite;\n+\t}\n+\n+\tprivate void fillValues(Repository repository) throws IOException {\n+\t\tgitDir.setText(repository.getDirectory().getAbsolutePath());\n+\t\tbranch.setText(repository.getBranch());\n+\t\tworkDir.setText(repository.getWorkDir().getAbsolutePath());\n+\n+\t\tswitch (repository.getRepositoryState()) {\n+\t\tcase BISECTING:\n+\t\t\tstate.setText(\"Bisecting\");\n+\t\t\tbreak;\n+\t\tcase MERGING:\n+\t\t\tstate.setText(\"Merging\");\n+\t\t\tbreak;\n+\t\tcase REBASING:\n+\t\t\tstate.setText(\"Rebasing\");\n+\t\t\tbreak;\n+\t\tcase REBASING_INTERACTIVE:\n+\t\t\tstate.setText(\"Rebasing interactive\");\n+\t\t\tbreak;\n+\t\tcase REBASING_MERGE:\n+\t\t\tstate.setText(\"Rebasing merge\");\n+\t\t\tbreak;\n+\t\tcase SAFE:\n+\t\t\tstate.setText(\"Safe\");\n+\t\t\tbreak;\n+\t\t}\n+\n+\t\tfinal ObjectId objectId = repository\n+\t\t\t\t.resolve(repository.getFullBranch());\n+\t\tid.setText(objectId.name());\n+\t}\n+\n+\t/**\n+\t * Create a read only text field with a label\n+\t * \n+\t * @param parent\n+\t *            the parent composite for new widgets\n+\t * @param labelText\n+\t *            text for label\n+\t * @return the new read only text field\n+\t */\n+\tprotected Text createLabeledReadOnlyText(Composite parent,\n+\t\t\tfinal String labelText) {\n+\t\tLabel label = new Label(parent, SWT.LEFT);\n+\t\tlabel.setText(labelText);\n+\t\tGridData data = new GridData();\n+\t\tdata.horizontalSpan = 1;\n+\t\tdata.horizontalAlignment = GridData.FILL;\n+\t\tlabel.setLayoutData(data);\n+\n+\t\tText text = new Text(parent, SWT.LEFT | SWT.READ_ONLY);\n+\t\ttext.setBackground(Display.getDefault().getSystemColor(\n+\t\t\t\tSWT.COLOR_WIDGET_BACKGROUND));\n+\t\tdata = new GridData();\n+\t\tdata.horizontalSpan = 1;\n+\t\tdata.horizontalAlignment = GridData.FILL;\n+\t\ttext.setLayoutData(data);\n+\t\treturn text;\n+\t}\n+\n+}\n-- \n1.6.0.2\n"},{"id":"93576","messageId":"200810210737.31377.robin.rosenberg.lists@dewire.com","threadId":"15979","inReplyTo":"1224529604-42397-1-git-send-email-tomi.pakarinen@iki.fi","subject":"Re: [EGIT PATCH] git property page for project properties.","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg.lists@dewire.com","sentAt":"2008-10-21T05:37:31Z","receivedAt":"2008-10-21T05:37:31Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"måndagen den 20 oktober 2008 21.06.44 skrev Tomi Pakarinen:\n>  Show git property page in project's properties, if project\n> has git repository provider.\n> \n> Signed-off-by: Tomi Pakarinen <tomi.pakarinen@iki.fi>\n> ---\n> \n>  This is similar to CVS's property page. Current\n> information on page is very limited and non editable.\n> \n>  Tomi.\n> \n> +\tText gitDir;\n> +\n> +\tText branch;\n> +\n> +\tText id;\n> +\n> +\tText state;\n> +\n> +\tText workDir;\n\nShould be private. I'll squash that in and patch Egit to detect\nthe 1.6-way of recording repository state, which I noted it does\nnot handle.\n\n-- robin\n"},{"id":"93617","messageId":"200810211950.50540.robin.rosenberg.lists@dewire.com","threadId":"15979","inReplyTo":"1224529604-42397-1-git-send-email-tomi.pakarinen@iki.fi","subject":"Re: [EGIT PATCH] git property page for project properties.","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg.lists@dewire.com","sentAt":"2008-10-21T17:50:50Z","receivedAt":"2008-10-21T17:50:50Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"måndagen den 20 oktober 2008 21.06.44 skrev Tomi Pakarinen:\n>  Show git property page in project's properties, if project\n> has git repository provider.\n[...]\n> +\t\tswitch (repository.getRepositoryState()) {\n> +\t\tcase BISECTING:\n> +\t\t\tstate.setText(\"Bisecting\");\n> +\t\t\tbreak;\n> +\t\tcase MERGING:\n> +\t\t\tstate.setText(\"Merging\");\n> +\t\t\tbreak;\n> +\t\tcase REBASING:\n> +\t\t\tstate.setText(\"Rebasing\");\n> +\t\t\tbreak;\n> +\t\tcase REBASING_INTERACTIVE:\n> +\t\t\tstate.setText(\"Rebasing interactive\");\n> +\t\t\tbreak;\n> +\t\tcase REBASING_MERGE:\n> +\t\t\tstate.setText(\"Rebasing merge\");\n> +\t\t\tbreak;\n> +\t\tcase SAFE:\n> +\t\t\tstate.setText(\"Safe\");\n> +\t\t\tbreak;\n> +\t\t}\nWhy not this:\n\n\t\tstate.setText(repository.getRepositoryState().getDescription());\n\nDescription is ment for presentation purposes. The enum for code.\n\n-- robin\n"},{"id":"93619","messageId":"f299b4f30810211109q7f2919f2r1d5cd8faf0048154@mail.gmail.com","threadId":"15979","inReplyTo":"200810211950.50540.robin.rosenberg.lists@dewire.com","subject":"Re: [EGIT PATCH] git property page for project properties.","fromName":"Tomi Pakarinen","fromEmail":"tomi.pakarinen@gmail.com","sentAt":"2008-10-21T18:09:13Z","receivedAt":"2008-10-21T18:09:13Z","isPatch":true,"sender":{"key":"tomi.pakarinen@gmail.com","avatar":null},"body":"On Tue, Oct 21, 2008 at 8:50 PM, Robin Rosenberg\n<robin.rosenberg.lists@dewire.com> wrote:\n> måndagen den 20 oktober 2008 21.06.44 skrev Tomi Pakarinen:\n>>  Show git property page in project's properties, if project\n>> has git repository provider.\n> [...]\n>> +             switch (repository.getRepositoryState()) {\n>> +             case BISECTING:\n>> +                     state.setText(\"Bisecting\");\n>> +                     break;\n>> +             case MERGING:\n>> +                     state.setText(\"Merging\");\n>> +                     break;\n>> +             case REBASING:\n>> +                     state.setText(\"Rebasing\");\n>> +                     break;\n>> +             case REBASING_INTERACTIVE:\n>> +                     state.setText(\"Rebasing interactive\");\n>> +                     break;\n>> +             case REBASING_MERGE:\n>> +                     state.setText(\"Rebasing merge\");\n>> +                     break;\n>> +             case SAFE:\n>> +                     state.setText(\"Safe\");\n>> +                     break;\n>> +             }\n> Why not this:\n>\n>                state.setText(repository.getRepositoryState().getDescription());\n>\n> Description is ment for presentation purposes. The enum for code.\n>\n> -- robin\n>\n\n That is ok. I just didn't notice that method before. But, what if\nsomeone wants localize this plugin, he'll propably have to explode\nthis back to switch statement.\n\n   Tomi.\n"},{"id":"93624","messageId":"200810212113.30414.robin.rosenberg.lists@dewire.com","threadId":"15979","inReplyTo":"f299b4f30810211109q7f2919f2r1d5cd8faf0048154@mail.gmail.com","subject":"Re: [EGIT PATCH] git property page for project properties.","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg.lists@dewire.com","sentAt":"2008-10-21T19:13:30Z","receivedAt":"2008-10-21T19:13:30Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"tisdagen den 21 oktober 2008 20.09.13 skrev Tomi Pakarinen:\n>  That is ok. I just didn't notice that method before. But, what if\n> someone wants localize this plugin, he'll propably have to explode\n> this back to switch statement.\n\nNo, we'd localize getDescription().\n\n-- robin\n"},{"id":"93632","messageId":"200810212213.42294.robin.rosenberg.lists@dewire.com","threadId":"15979","inReplyTo":"f299b4f30810211109q7f2919f2r1d5cd8faf0048154@mail.gmail.com","subject":"[JGIT PATCH] Detect repository states according to post Git 1.5","fromName":"Robin Rosenberg","fromEmail":"robin.rosenberg.lists@dewire.com","sentAt":"2008-10-21T20:13:42Z","receivedAt":"2008-10-21T20:13:42Z","isPatch":true,"sender":{"key":"robin.rosenberg@dewire.com","avatar":"https://avatars.githubusercontent.com/u/46357?v=4"},"body":"Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>\n---\n\nSeems we need this patch too in order to detect repository states. The new\nresolution is more granular that before, though I suggest that one should\nbe restrictive when interpreting the state and not assume that these states\nare the only ones. The methods on RepositoryState are the /only/ valid\nways of deciding what to, or not to, do. This implies we need to extend this\nclass somewhat, but I'm no hurry yet so we can think about what methods\nwe need.\n\n .../src/org/spearce/jgit/lib/Repository.java       |   17 +++++++++++++\n .../src/org/spearce/jgit/lib/RepositoryState.java  |   25 +++++++++++++++++++-\n 2 files changed, 41 insertions(+), 1 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java b/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java\nindex dfce1b8..26748e2 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java\n@@ -1017,14 +1017,31 @@ public GitIndex getIndex() throws IOException {\n \t * @return an important state\n \t */\n \tpublic RepositoryState getRepositoryState() {\n+\t\t// Pre Git-1.6 logic\n \t\tif (new File(getWorkDir(), \".dotest\").exists())\n \t\t\treturn RepositoryState.REBASING;\n \t\tif (new File(gitDir,\".dotest-merge\").exists())\n \t\t\treturn RepositoryState.REBASING_INTERACTIVE;\n+\n+\t\t// From 1.6 onwards\n+\t\tif (new File(getDirectory(),\"rebase-apply/rebasing\").exists())\n+\t\t\treturn RepositoryState.REBASING_REBASING;\n+\t\tif (new File(getDirectory(),\"rebase-apply/applying\").exists())\n+\t\t\treturn RepositoryState.APPLY;\n+\t\tif (new File(getDirectory(),\"rebase-apply\").exists())\n+\t\t\treturn RepositoryState.REBASING;\n+\n+\t\tif (new File(getDirectory(),\"rebase-merge/interactive\").exists())\n+\t\t\treturn RepositoryState.REBASING_INTERACTIVE;\n+\t\tif (new File(getDirectory(),\"rebase-merge\").exists())\n+\t\t\treturn RepositoryState.REBASING_MERGE;\n+\n+\t\t// Both versions\n \t\tif (new File(gitDir,\"MERGE_HEAD\").exists())\n \t\t\treturn RepositoryState.MERGING;\n \t\tif (new File(gitDir,\"BISECT_LOG\").exists())\n \t\t\treturn RepositoryState.BISECTING;\n+\n \t\treturn RepositoryState.SAFE;\n \t}\n \ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryState.java b/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryState.java\nindex c32c381..a916924 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryState.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryState.java\n@@ -40,6 +40,9 @@\n /**\n  * Important state of the repository that affects what can and cannot bed\n  * done. This is things like unhandled conflicted merges and unfinished rebase.\n+ *\n+ * The granularity and set of states are somewhat arbitrary. The methods\n+ * on the state are the only supported means of deciding what to do.\n  */\n public enum RepositoryState {\n \t/**\n@@ -62,7 +65,7 @@\n \t},\n \n \t/**\n-\t * An unfinished rebase. Must resolve, skip or abort before normal work can take place\n+\t * An unfinished rebase or am. Must resolve, skip or abort before normal work can take place\n \t */\n \tREBASING {\n \t\tpublic boolean canCheckout() { return false; }\n@@ -72,6 +75,26 @@\n \t},\n \n \t/**\n+\t * An unfinished rebase. Must resolve, skip or abort before normal work can take place\n+\t */\n+\tREBASING_REBASING {\n+\t\tpublic boolean canCheckout() { return false; }\n+\t\tpublic boolean canResetHead() { return false; }\n+\t\tpublic boolean canCommit() { return true; }\n+\t\tpublic String getDescription() { return \"Rebase\"; }\n+\t},\n+\n+\t/**\n+\t * An unfinished apply. Must resolve, skip or abort before normal work can take place\n+\t */\n+\tAPPLY {\n+\t\tpublic boolean canCheckout() { return false; }\n+\t\tpublic boolean canResetHead() { return false; }\n+\t\tpublic boolean canCommit() { return true; }\n+\t\tpublic String getDescription() { return \"Apply mailbox\"; }\n+\t},\n+\n+\t/**\n \t * An unfinished rebase with merge. Must resolve, skip or abort before normal work can take place\n \t */\n \tREBASING_MERGE {\n-- \n1.6.0.2.308.gef4a\n"}]}