Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Muskalla2011-08-17 08:18:57 -0400
committerMatthias Sohn2011-08-17 08:18:57 -0400
commit4620af17ae771f0fadb9c612466f90f94a520f4c (patch)
tree9892d3f43ea55c179168e2f529f1bd6a8cca489b
parentf1ad64cb5fa45b4a9769464e165d7cbac9a111c4 (diff)
downloadegit-4620af17ae771f0fadb9c612466f90f94a520f4c.tar.gz
egit-4620af17ae771f0fadb9c612466f90f94a520f4c.tar.xz
egit-4620af17ae771f0fadb9c612466f90f94a520f4c.zip
Support hyperlink detector for Commit ids
In order to have better navigation between code and tasks, this hyperlink detector recognizes commit ids inside the task descriptions and lets the user open the corresponding commit in the Commit editor. Change-Id: Ic60d11a45b8cb8cc9383e4120a84eae2f1859e32 Signed-off-by: Benjamin Muskalla <benjamin.muskalla@tasktop.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
-rw-r--r--org.eclipse.egit.mylyn.ui.test/.classpath7
-rw-r--r--org.eclipse.egit.mylyn.ui.test/.gitignore3
-rw-r--r--org.eclipse.egit.mylyn.ui.test/.project28
-rw-r--r--org.eclipse.egit.mylyn.ui.test/.settings/org.eclipse.core.resources.prefs3
-rw-r--r--org.eclipse.egit.mylyn.ui.test/.settings/org.eclipse.core.runtime.prefs3
-rw-r--r--org.eclipse.egit.mylyn.ui.test/.settings/org.eclipse.jdt.core.prefs352
-rw-r--r--org.eclipse.egit.mylyn.ui.test/.settings/org.eclipse.jdt.ui.prefs61
-rw-r--r--org.eclipse.egit.mylyn.ui.test/META-INF/MANIFEST.MF14
-rw-r--r--org.eclipse.egit.mylyn.ui.test/build.properties4
-rw-r--r--org.eclipse.egit.mylyn.ui.test/pom.xml145
-rw-r--r--org.eclipse.egit.mylyn.ui.test/src/org/eclipse/egit/internal/mylyn/AllMylynTests.java21
-rw-r--r--org.eclipse.egit.mylyn.ui.test/src/org/eclipse/egit/internal/mylyn/CommitHyperlinkDetectorTest.java142
-rw-r--r--org.eclipse.egit.mylyn.ui/META-INF/MANIFEST.MF15
-rw-r--r--org.eclipse.egit.mylyn.ui/plugin.properties3
-rw-r--r--org.eclipse.egit.mylyn.ui/plugin.xml10
-rw-r--r--org.eclipse.egit.mylyn.ui/src/org/eclipse/egit/internal/mylyn/ui/CommitHyperlinkDetector.java224
-rw-r--r--org.eclipse.egit.mylyn.ui/src/org/eclipse/egit/internal/mylyn/ui/Messages.java35
-rw-r--r--org.eclipse.egit.mylyn.ui/src/org/eclipse/egit/internal/mylyn/ui/messages.properties2
-rw-r--r--pom.xml1
19 files changed, 1067 insertions, 6 deletions
diff --git a/org.eclipse.egit.mylyn.ui.test/.classpath b/org.eclipse.egit.mylyn.ui.test/.classpath
new file mode 100644
index 0000000000..cc60ba7232
--- /dev/null
+++ b/org.eclipse.egit.mylyn.ui.test/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.egit.mylyn.ui.test/.gitignore b/org.eclipse.egit.mylyn.ui.test/.gitignore
new file mode 100644
index 0000000000..0d347b5152
--- /dev/null
+++ b/org.eclipse.egit.mylyn.ui.test/.gitignore
@@ -0,0 +1,3 @@
+bin
+target
+screenshots
diff --git a/org.eclipse.egit.mylyn.ui.test/.project b/org.eclipse.egit.mylyn.ui.test/.project
new file mode 100644
index 0000000000..99bad42f74
--- /dev/null
+++ b/org.eclipse.egit.mylyn.ui.test/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.egit.mylyn.ui.test</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.egit.mylyn.ui.test/.settings/org.eclipse.core.resources.prefs b/org.eclipse.egit.mylyn.ui.test/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000..84e44d8d39
--- /dev/null
+++ b/org.eclipse.egit.mylyn.ui.test/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Mon Aug 11 16:47:12 PDT 2008
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.egit.mylyn.ui.test/.settings/org.eclipse.core.runtime.prefs b/org.eclipse.egit.mylyn.ui.test/.settings/org.eclipse.core.runtime.prefs
new file mode 100644
index 0000000000..c8f089af7e
--- /dev/null
+++ b/org.eclipse.egit.mylyn.ui.test/.settings/org.eclipse.core.runtime.prefs
@@ -0,0 +1,3 @@
+#Mon Mar 24 18:54:45 EDT 2008
+eclipse.preferences.version=1
+line.separator=\n
diff --git a/org.eclipse.egit.mylyn.ui.test/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.egit.mylyn.ui.test/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..0cb9203527
--- /dev/null
+++ b/org.eclipse.egit.mylyn.ui.test/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,352 @@
+#Tue Aug 16 16:25:14 CEST 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=error
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=protected
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=error
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=error
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=error
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=error
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=error
+org.eclipse.jdt.core.compiler.problem.unusedLocal=error
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=error
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=80
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=80
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
diff --git a/org.eclipse.egit.mylyn.ui.test/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.egit.mylyn.ui.test/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000000..66184464a9
--- /dev/null
+++ b/org.eclipse.egit.mylyn.ui.test/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,61 @@
+#Wed Feb 03 18:26:19 PST 2010
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_JGit Format
+formatter_settings_version=11
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=java;javax;org;com;
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?><templates/>
+sp_cleanup.add_default_serial_version_id=false
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=false
+sp_cleanup.add_missing_deprecated_annotations=false
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=false
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=false
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=false
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=false
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=false
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=false
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=false
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=false
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=false
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=false
+sp_cleanup.remove_unused_private_types=false
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=false
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=false
diff --git a/org.eclipse.egit.mylyn.ui.test/META-INF/MANIFEST.MF b/org.eclipse.egit.mylyn.ui.test/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..be8d0c9a8c
--- /dev/null
+++ b/org.eclipse.egit.mylyn.ui.test/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Git Team Provider Mylyn UI Test Fragment
+Bundle-SymbolicName: org.eclipse.egit.mylyn.ui.test
+Bundle-Version: 1.1.0.qualifier
+Fragment-Host: org.eclipse.egit.mylyn.ui;bundle-version="1.1.0"
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.apache.log4j;bundle-version="[1.0.0,2.0.0)",
+ org.hamcrest;bundle-version="[1.1.0,2.0.0)"
+Bundle-Vendor: Eclipse.org
+Import-Package: org.junit;version="[4.3.1,5.0.0)",
+ org.junit.runner;version="[4.3.1,5.0.0)",
+ org.junit.runners;version="[4.3.1,5.0.0)",
+ org.osgi.framework;version="[1.4.0,2.0.0)"
diff --git a/org.eclipse.egit.mylyn.ui.test/build.properties b/org.eclipse.egit.mylyn.ui.test/build.properties
new file mode 100644
index 0000000000..34d2e4d2da
--- /dev/null
+++ b/org.eclipse.egit.mylyn.ui.test/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
diff --git a/org.eclipse.egit.mylyn.ui.test/pom.xml b/org.eclipse.egit.mylyn.ui.test/pom.xml
new file mode 100644
index 0000000000..28c49832c0
--- /dev/null
+++ b/org.eclipse.egit.mylyn.ui.test/pom.xml
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (C) 2011, Benjamin Muskalla <benjamin.muskalla@tasktop.com>
+
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.eclipse.egit</groupId>
+ <artifactId>egit-parent</artifactId>
+ <version>1.1.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>org.eclipse.egit.mylyn.ui.test</artifactId>
+ <packaging>eclipse-test-plugin</packaging>
+
+ <name>EGit Mylyn UI Test Plug-in</name>
+
+ <properties>
+ <local-egit-site>file:/${basedir}/../org.eclipse.egit-updatesite/target/site</local-egit-site>
+ </properties>
+
+ <repositories>
+ <repository>
+ <id>local-egit</id>
+ <layout>p2</layout>
+ <url>${local-egit-site}</url>
+ </repository>
+ </repositories>
+
+ <profiles>
+ <profile>
+ <id>skip-ui-tests</id>
+ <activation>
+ <property>
+ <name>skip-ui-tests</name>
+ </property>
+ </activation>
+ <properties>
+ <maven.test.skip>true</maven.test.skip>
+ </properties>
+ </profile>
+ <profile>
+ <id>macosx</id>
+ <activation>
+ <os>
+ <name>mac os x</name>
+ <family>mac</family>
+ </os>
+ </activation>
+ <properties>
+ <ui.test.vmargs>-Xmx512m -XX:MaxPermSize=256m -XstartOnFirstThread</ui.test.vmargs>
+ </properties>
+ </profile>
+ <profile>
+ <id>other-os</id>
+ <activation>
+ <os>
+ <name>not-mac</name>
+ <family>!mac</family>
+ </os>
+ </activation>
+ <properties>
+ <ui.test.vmargs>-Xmx512m -XX:MaxPermSize=256m</ui.test.vmargs>
+ </properties>
+ </profile>
+ </profiles>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-surefire-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <configuration>
+ <testSuite>org.eclipse.egit.mylyn.ui.test</testSuite>
+ <testClass>org.eclipse.egit.internal.mylyn.AllMylynTests</testClass>
+ <useUIHarness>true</useUIHarness>
+ <useUIThread>true</useUIThread>
+ <product>org.eclipse.sdk.ide</product>
+ <argLine>${ui.test.vmargs}</argLine>
+ <application>org.eclipse.ui.ide.workbench</application>
+ <dependencies>
+ <dependency>
+ <type>p2-installable-unit</type>
+ <artifactId>org.eclipse.egit.feature.group</artifactId>
+ <version>1.1.0</version>
+ </dependency>
+ <dependency>
+ <type>p2-installable-unit</type>
+ <artifactId>org.eclipse.egit.mylyn.feature.group</artifactId>
+ <version>1.1.0</version>
+ </dependency>
+ <dependency>
+ <type>p2-installable-unit</type>
+ <artifactId>org.eclipse.jgit.feature.group</artifactId>
+ <version>1.1.0</version>
+ </dependency>
+ <dependency>
+ <type>p2-installable-unit</type>
+ <artifactId>org.eclipse.pde.feature.group</artifactId>
+ <version>${platform-version}</version>
+ </dependency>
+ <dependency>
+ <type>p2-installable-unit</type>
+ <artifactId>org.eclipse.cvs.feature.group</artifactId>
+ <version>[1.1.2,2.0.0)</version>
+ </dependency>
+ </dependencies>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.7.2</version>
+ <executions>
+ <execution>
+ <phase>test</phase>
+ <configuration>
+ <testClassesDirectory>${project.build.outputDirectory}</testClassesDirectory>
+ </configuration>
+ <goals>
+ <goal>test</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/org.eclipse.egit.mylyn.ui.test/src/org/eclipse/egit/internal/mylyn/AllMylynTests.java b/org.eclipse.egit.mylyn.ui.test/src/org/eclipse/egit/internal/mylyn/AllMylynTests.java
new file mode 100644
index 0000000000..eac8bad76e
--- /dev/null
+++ b/org.eclipse.egit.mylyn.ui.test/src/org/eclipse/egit/internal/mylyn/AllMylynTests.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Benjamin Muskalla and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Benjamin Muskalla <benjamin.muskalla@tasktop.com> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.egit.internal.mylyn;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
+
+@RunWith(Suite.class)
+@SuiteClasses({ CommitHyperlinkDetectorTest.class })
+public class AllMylynTests {
+ // empty class, don't need anything here
+}
diff --git a/org.eclipse.egit.mylyn.ui.test/src/org/eclipse/egit/internal/mylyn/CommitHyperlinkDetectorTest.java b/org.eclipse.egit.mylyn.ui.test/src/org/eclipse/egit/internal/mylyn/CommitHyperlinkDetectorTest.java
new file mode 100644
index 0000000000..b8b97c155e
--- /dev/null
+++ b/org.eclipse.egit.mylyn.ui.test/src/org/eclipse/egit/internal/mylyn/CommitHyperlinkDetectorTest.java
@@ -0,0 +1,142 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Benjamin Muskalla and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Benjamin Muskalla <benjamin.muskalla@tasktop.com> - initial implementation
+ *******************************************************************************/
+package org.eclipse.egit.internal.mylyn;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+import org.eclipse.egit.internal.mylyn.ui.CommitHyperlinkDetector;
+import org.eclipse.jface.text.Document;
+import org.eclipse.jface.text.Region;
+import org.eclipse.jface.text.TextViewer;
+import org.eclipse.jface.text.hyperlink.IHyperlink;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Shell;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.BlockJUnit4ClassRunner;
+
+@RunWith(BlockJUnit4ClassRunner.class)
+public class CommitHyperlinkDetectorTest {
+
+ private static final String OTHER_EXAMPLE_ID = "3de38c8898c74b867cb6f06f7907e0719d9d4c0c";
+ private static final String EXAMPLE_ID = "2de0ab486c66566ae1ad36b73bfc9d99e14eb195";
+ private TextViewer textViewer;
+ private CommitHyperlinkDetector detector;
+
+ @Test
+ public void testNoDocument() {
+ textViewer.setDocument(null);
+ IHyperlink[] hyperlinks = detectHyperlinks(0,0);
+ assertNull(hyperlinks);
+ }
+
+ @Test
+ public void testBadLocation() {
+ textViewer.setDocument(null);
+ IHyperlink[] hyperlinks = detectHyperlinks(10,0);
+ assertNull(hyperlinks);
+ }
+
+ @Test
+ public void testEmpty() {
+ setText("");
+ IHyperlink[] hyperlinks = detectHyperlinks();
+ assertNull(hyperlinks);
+ }
+
+ @Test
+ public void testSimpleId() {
+ setText(EXAMPLE_ID);
+ IHyperlink[] hyperlinks = detectHyperlinks();
+ assertEquals(1, hyperlinks.length);
+ assertEquals(EXAMPLE_ID, hyperlinks[0].getHyperlinkText());
+ }
+
+ @Test
+ public void testMultiId() {
+ setText(EXAMPLE_ID + " and " + OTHER_EXAMPLE_ID);
+ IHyperlink[] hyperlinks = detectHyperlinks();
+ assertEquals(2, hyperlinks.length);
+ assertEquals(EXAMPLE_ID, hyperlinks[0].getHyperlinkText());
+ assertEquals(OTHER_EXAMPLE_ID, hyperlinks[1].getHyperlinkText());
+ }
+
+ @Test
+ public void testEndLine() {
+ setText("Merged as " + EXAMPLE_ID);
+ IHyperlink[] hyperlinks = detectHyperlinks();
+ assertEquals(1, hyperlinks.length);
+ assertEquals(EXAMPLE_ID, hyperlinks[0].getHyperlinkText());
+ }
+
+ @Test
+ public void testMiddleLine() {
+ setText("Merged as " + EXAMPLE_ID + " and something else");
+ IHyperlink[] hyperlinks = detectHyperlinks();
+ assertEquals(1, hyperlinks.length);
+ assertEquals(EXAMPLE_ID, hyperlinks[0].getHyperlinkText());
+ }
+
+ @Test
+ public void testBeginSentence() {
+ setText("end of sentence." + EXAMPLE_ID);
+ IHyperlink[] hyperlinks = detectHyperlinks();
+ assertEquals(1, hyperlinks.length);
+ assertEquals(EXAMPLE_ID, hyperlinks[0].getHyperlinkText());
+ }
+
+ @Test
+ public void testEndSentence() {
+ setText("Merged as " + EXAMPLE_ID + ".");
+ IHyperlink[] hyperlinks = detectHyperlinks();
+ assertEquals(1, hyperlinks.length);
+ assertEquals(EXAMPLE_ID, hyperlinks[0].getHyperlinkText());
+ }
+
+ @Test
+ public void testOffsetMiddle() {
+ setText(EXAMPLE_ID);
+ IHyperlink[] hyperlinks = detectHyperlinks(3,0);
+ assertEquals(1, hyperlinks.length);
+ assertEquals(EXAMPLE_ID, hyperlinks[0].getHyperlinkText());
+ }
+
+ @Test
+ public void testOffsetOff() {
+ setText("some bla " + EXAMPLE_ID);
+ IHyperlink[] hyperlinks = detectHyperlinks(3,0);
+ assertNull(hyperlinks);
+ }
+
+ private IHyperlink[] detectHyperlinks() {
+ return detectHyperlinks(0, textViewer.getDocument().getLength());
+ }
+
+ private IHyperlink[] detectHyperlinks(int offset, int length) {
+ return detector.detectHyperlinks(textViewer,
+ new Region(offset, length), false);
+ }
+
+ private void setText(String text) {
+ textViewer.getDocument().set(text);
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ detector = new CommitHyperlinkDetector();
+ Shell shell = new Shell();
+ textViewer = new TextViewer(shell, SWT.NONE);
+ textViewer.setDocument(new Document());
+ }
+
+}
diff --git a/org.eclipse.egit.mylyn.ui/META-INF/MANIFEST.MF b/org.eclipse.egit.mylyn.ui/META-INF/MANIFEST.MF
index b1c428a27e..df0de71c3a 100644
--- a/org.eclipse.egit.mylyn.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.egit.mylyn.ui/META-INF/MANIFEST.MF
@@ -16,16 +16,21 @@ Require-Bundle: org.eclipse.team.core,
org.eclipse.mylyn.tasks.ui;bundle-version="[3.0.0,4.0.0)",
org.eclipse.mylyn.team.ui;bundle-version="[3.0.0,4.0.0)",
org.eclipse.mylyn.resources.ui;bundle-version="[3.0.0,4.0.0)",
- org.eclipse.mylyn.context.core;bundle-version="[3.0.0,4.0.0)"
+ org.eclipse.mylyn.context.core;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.ui.workbench.texteditor,
+ org.eclipse.jface.text,
+ org.eclipse.ui.forms
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Bundle-ActivationPolicy: lazy
Bundle-Localization: plugin
-Export-Package: org.eclipse.egit.internal.mylyn.ui;version="1.1.0";x-internal:=true,
+Export-Package: org.eclipse.egit.internal.mylyn.ui;version="1.1.0";x-friends:="org.eclipse.egit.ui.test",
org.eclipse.egit.internal.mylyn.ui.commit;version="1.1.0";x-internal:=true
-Import-Package: org.eclipse.egit.ui;version="[1.1.0,1.2.0)",
- org.eclipse.egit.core;version="[1.1.0,1.2.0)",
+Import-Package: org.eclipse.egit.core;version="[1.1.0,1.2.0)",
+ org.eclipse.egit.ui;version="[1.1.0,1.2.0)",
+ org.eclipse.egit.ui.internal.commit;version="[1.1.0,1.2.0)",
org.eclipse.egit.ui.internal.synchronize.model;version="[1.1.0,1.2.0)",
- org.eclipse.jgit.revwalk;version="[1.1.0,1.2.0)",
+ org.eclipse.jgit.errors;version="[1.1.0,1.2.0)",
org.eclipse.jgit.lib;version="[1.1.0,1.2.0)",
+ org.eclipse.jgit.revwalk;version="[1.1.0,1.2.0)",
org.eclipse.jgit.transport;version="[1.1.0,1.2.0)",
org.eclipse.ui.plugin
diff --git a/org.eclipse.egit.mylyn.ui/plugin.properties b/org.eclipse.egit.mylyn.ui/plugin.properties
index 1dcea67332..b6c511cf26 100644
--- a/org.eclipse.egit.mylyn.ui/plugin.properties
+++ b/org.eclipse.egit.mylyn.ui/plugin.properties
@@ -9,4 +9,5 @@
# Chris Aniszczyk <caniszczyk@gmail.com> - initial API and implementation
###############################################################################
Bundle-Vendor = Eclipse EGit
-Bundle-Name = EGit Mylyn UI \ No newline at end of file
+Bundle-Name = EGit Mylyn UI
+hyperlinkDetector.name = Git Commits \ No newline at end of file
diff --git a/org.eclipse.egit.mylyn.ui/plugin.xml b/org.eclipse.egit.mylyn.ui/plugin.xml
index 31a5d02c7c..474f84f45c 100644
--- a/org.eclipse.egit.mylyn.ui/plugin.xml
+++ b/org.eclipse.egit.mylyn.ui/plugin.xml
@@ -18,4 +18,14 @@
<adapter type="org.eclipse.mylyn.team.ui.AbstractTaskReference"/>
</factory>
</extension>
+ <extension
+ point="org.eclipse.ui.workbench.texteditor.hyperlinkDetectors">
+ <hyperlinkDetector
+ activate="true"
+ class="org.eclipse.egit.internal.mylyn.ui.CommitHyperlinkDetector"
+ id="org.eclipse.egit.mylyn.ui.commitHyperlinkDetector"
+ name="%hyperlinkDetector.name"
+ targetId="org.eclipse.mylyn.tasks.ui.TaskEditor">
+ </hyperlinkDetector>
+ </extension>
</plugin>
diff --git a/org.eclipse.egit.mylyn.ui/src/org/eclipse/egit/internal/mylyn/ui/CommitHyperlinkDetector.java b/org.eclipse.egit.mylyn.ui/src/org/eclipse/egit/internal/mylyn/ui/CommitHyperlinkDetector.java
new file mode 100644
index 0000000000..cacd84882f
--- /dev/null
+++ b/org.eclipse.egit.mylyn.ui/src/org/eclipse/egit/internal/mylyn/ui/CommitHyperlinkDetector.java
@@ -0,0 +1,224 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Benjamin Muskalla and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Benjamin Muskalla <benjamin.muskalla@tasktop.com> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.egit.internal.mylyn.ui;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.egit.core.Activator;
+import org.eclipse.egit.core.RepositoryCache;
+import org.eclipse.egit.core.RepositoryUtil;
+import org.eclipse.egit.ui.internal.commit.CommitEditor;
+import org.eclipse.egit.ui.internal.commit.RepositoryCommit;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.Region;
+import org.eclipse.jface.text.TextViewer;
+import org.eclipse.jface.text.hyperlink.AbstractHyperlinkDetector;
+import org.eclipse.jface.text.hyperlink.IHyperlink;
+import org.eclipse.jgit.errors.IncorrectObjectTypeException;
+import org.eclipse.jgit.errors.MissingObjectException;
+import org.eclipse.jgit.lib.Constants;
+import org.eclipse.jgit.lib.ObjectId;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.revwalk.RevCommit;
+import org.eclipse.jgit.revwalk.RevWalk;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * Detects Git commit ids in task descriptions and allows users to open them in
+ * the commit editor.
+ */
+public class CommitHyperlinkDetector extends AbstractHyperlinkDetector {
+
+ private static class CommitHyperlink implements IHyperlink {
+
+ private IRegion region;
+
+ private String objectId;
+
+ private final Shell shell;
+
+ public CommitHyperlink(IRegion region, String objectId, Shell shell) {
+ this.shell = shell;
+ Assert.isNotNull(objectId);
+ Assert.isNotNull(region);
+ Assert.isNotNull(shell);
+
+ this.region = region;
+ this.objectId = objectId;
+ }
+
+ public IRegion getHyperlinkRegion() {
+ return region;
+ }
+
+ public String getTypeLabel() {
+ return null;
+ }
+
+ public String getHyperlinkText() {
+ return objectId;
+ }
+
+ public void open() {
+ try {
+ RepositoryCommit commit;
+ commit = searchCommit();
+ if (commit != null)
+ CommitEditor.openQuiet(commit);
+ else
+ informCommitNotFound();
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+
+ private void informCommitNotFound() {
+ MessageDialog
+ .openWarning(
+ shell,
+ Messages.CommitHyperlinkDetector_CommitNotFound,
+ NLS.bind(
+ Messages.CommitHyperlinkDetector_CommitNotFoundInRepositories,
+ objectId));
+ }
+
+ private RepositoryCommit searchCommit() throws IOException {
+ RepositoryUtil repositoryUtil = Activator.getDefault()
+ .getRepositoryUtil();
+ List<String> configuredRepositories = repositoryUtil
+ .getConfiguredRepositories();
+ RepositoryCache repositoryCache = Activator.getDefault()
+ .getRepositoryCache();
+ for (String repoDir : configuredRepositories) {
+ Repository repository = repositoryCache
+ .lookupRepository(new File(repoDir));
+ RevCommit commit = getCommit(repository);
+ if (commit != null)
+ return new RepositoryCommit(repository, commit);
+ }
+
+ return null;
+ }
+
+ private RevCommit getCommit(Repository repository) throws IOException {
+ RevWalk revWalk = null;
+ try {
+ revWalk = new RevWalk(repository);
+ return revWalk.parseCommit(ObjectId.fromString(objectId));
+ } catch (MissingObjectException e) {
+ // ignore
+ return null;
+ } catch (IncorrectObjectTypeException e) {
+ // ignore
+ return null;
+ } finally {
+ if (revWalk != null)
+ revWalk.release();
+ }
+
+ }
+
+ }
+
+ /**
+ * Detects and returns all available hyperlinks for the given {@link TextViewer} which link to a Git commit.
+ */
+ public IHyperlink[] detectHyperlinks(ITextViewer textViewer,
+ IRegion region, boolean canShowMultipleHyperlinks) {
+
+ IDocument document = textViewer.getDocument();
+ if (document == null || document.getLength() == 0)
+ return null;
+
+ String content;
+ int offset = region.getOffset();
+ int length = region.getLength();
+ try {
+ if (length == 0) {
+ IRegion lineInformation = document
+ .getLineInformationOfOffset(offset);
+ offset = lineInformation.getOffset();
+ length = lineInformation.getLength();
+ }
+ content = document.get(offset, length);
+ } catch (BadLocationException e) {
+ return null;
+ }
+
+ List<IHyperlink> hyperlinks = new ArrayList<IHyperlink>();
+ String[] words = content.split(" "); //$NON-NLS-1$
+ Shell shell = textViewer.getTextWidget().getShell();
+ for (String potentialId : words) {
+ String foundId = null;
+ int foundOffset = 0;
+ if (ObjectId.isId(potentialId)) {
+ foundId = potentialId;
+ foundOffset = offset;
+ } else if (potentialId.length() > Constants.OBJECT_ID_STRING_LENGTH) {
+ // could be beginning or end of a sentence
+ String potentialIdAtBeginning = potentialId.substring(0,
+ Constants.OBJECT_ID_STRING_LENGTH);
+ if (ObjectId.isId(potentialIdAtBeginning)) {
+ foundId = potentialIdAtBeginning;
+ foundOffset = offset;
+ } else {
+ String potentialIdAtEnd = potentialId.substring(potentialId
+ .length() - Constants.OBJECT_ID_STRING_LENGTH);
+ if (ObjectId.isId(potentialIdAtEnd)) {
+ foundId = potentialIdAtEnd;
+ foundOffset = potentialId.length()
+ - Constants.OBJECT_ID_STRING_LENGTH;
+ }
+
+ }
+ }
+ if (foundId != null) {
+ CommitHyperlink hyperlink = new CommitHyperlink(new Region(
+ foundOffset, Constants.OBJECT_ID_STRING_LENGTH),
+ foundId, shell);
+ hyperlinks.add(hyperlink);
+ }
+ offset += potentialId.length() + 1;
+ }
+
+ // filter hyperlinks that do not match original region
+ if (region.getLength() == 0) {
+ for (Iterator<IHyperlink> it = hyperlinks.iterator(); it.hasNext();) {
+ IHyperlink hyperlink = it.next();
+ IRegion hyperlinkRegion = hyperlink.getHyperlinkRegion();
+ if (!isInRegion(region, hyperlinkRegion))
+ it.remove();
+ }
+ }
+
+ if (hyperlinks.isEmpty())
+ return null;
+
+ return hyperlinks.toArray(new IHyperlink[hyperlinks.size()]);
+ }
+
+ private boolean isInRegion(IRegion detectInRegion, IRegion hyperlinkRegion) {
+ return detectInRegion.getOffset() >= hyperlinkRegion.getOffset()
+ && detectInRegion.getOffset() <= hyperlinkRegion.getOffset()
+ + hyperlinkRegion.getLength();
+ }
+
+}
diff --git a/org.eclipse.egit.mylyn.ui/src/org/eclipse/egit/internal/mylyn/ui/Messages.java b/org.eclipse.egit.mylyn.ui/src/org/eclipse/egit/internal/mylyn/ui/Messages.java
new file mode 100644
index 0000000000..dea39824b8
--- /dev/null
+++ b/org.eclipse.egit.mylyn.ui/src/org/eclipse/egit/internal/mylyn/ui/Messages.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Benjamin Muskalla and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Benjamin Muskalla <benjamin.muskalla@tasktop.com> - initial implementation
+ *******************************************************************************/
+package org.eclipse.egit.internal.mylyn.ui;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * Text resources for the plugin. Strings here can be i18n-ed simpler and avoid
+ * duplicating strings.
+ */
+public class Messages extends NLS {
+ private static final String BUNDLE_NAME = "org.eclipse.egit.internal.mylyn.ui.messages"; //$NON-NLS-1$
+
+ /** */
+ public static String CommitHyperlinkDetector_CommitNotFound;
+
+ /** */
+ public static String CommitHyperlinkDetector_CommitNotFoundInRepositories;
+
+ static {
+ // initialize resource bundle
+ NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+ }
+
+ private Messages() {
+ }
+}
diff --git a/org.eclipse.egit.mylyn.ui/src/org/eclipse/egit/internal/mylyn/ui/messages.properties b/org.eclipse.egit.mylyn.ui/src/org/eclipse/egit/internal/mylyn/ui/messages.properties
new file mode 100644
index 0000000000..5d79c38014
--- /dev/null
+++ b/org.eclipse.egit.mylyn.ui/src/org/eclipse/egit/internal/mylyn/ui/messages.properties
@@ -0,0 +1,2 @@
+CommitHyperlinkDetector_CommitNotFound=Commit not found
+CommitHyperlinkDetector_CommitNotFoundInRepositories=The commit {0} was not found in any of the configured repositories.
diff --git a/pom.xml b/pom.xml
index e0cf9e90ca..16d861e5a0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -151,6 +151,7 @@
<module>org.eclipse.egit.core.test</module>
<module>org.eclipse.egit.ui.test</module>
+ <module>org.eclipse.egit.mylyn.ui.test</module>
<module>org.eclipse.egit.source-feature</module>
</modules>

Back to the top