460285: [relang] support Git and Gerrit urls in see Also

Change-Id: Ia4ce8b7d15215bcceecc1256fcad4778bf4042df
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=460285
diff --git a/org.eclipse.mylyn.bugzilla.releng/modules/bugzilla/files/extensions/Mylyn/lib/Gerrit.pm b/org.eclipse.mylyn.bugzilla.releng/modules/bugzilla/files/extensions/Mylyn/lib/Gerrit.pm
new file mode 100644
index 0000000..6eaf64e
--- /dev/null
+++ b/org.eclipse.mylyn.bugzilla.releng/modules/bugzilla/files/extensions/Mylyn/lib/Gerrit.pm
@@ -0,0 +1,45 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This Source Code Form is "Incompatible With Secondary Licenses", as
+# defined by the Mozilla Public License, v. 2.0.
+
+package Bugzilla::Extension::Mylyn::Gerrit;
+
+use 5.10.1;
+use strict;
+use warnings;
+
+use parent qw(Bugzilla::BugUrl);
+
+###############################
+####        Methods        ####
+###############################
+
+sub should_handle {
+    my ($class, $uri) = @_;
+
+    # Gerrit Change URL: https://git.eclipse.org/r/#/c/26613/
+    # Gerrit Change URL, specific patch set: https://git.eclipse.org/r/#/c/26613/4
+    # https://git.eclipse.org/r/40031
+    return ( ($uri->path =~ m|^/r/$| and $uri->fragment =~ m|^/c/\d+|) ||
+                $uri->path =~ m|^/r/\d+|) ? 1 : 0;
+}
+
+sub _check_value {
+    my ($class, $uri) = @_;
+
+    $uri = $class->SUPER::_check_value($uri);
+
+    # While Gerrit URLs can be either HTTP or HTTPS,
+    # always go with the HTTP scheme, as that's the default.
+    if ($uri->scheme eq 'http') {
+        $uri->scheme('https');
+    }
+
+    return $uri;
+}
+
+1;
+
diff --git a/org.eclipse.mylyn.bugzilla.releng/modules/bugzilla/files/extensions/Mylyn/lib/Git.pm b/org.eclipse.mylyn.bugzilla.releng/modules/bugzilla/files/extensions/Mylyn/lib/Git.pm
new file mode 100644
index 0000000..84bb732
--- /dev/null
+++ b/org.eclipse.mylyn.bugzilla.releng/modules/bugzilla/files/extensions/Mylyn/lib/Git.pm
@@ -0,0 +1,41 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This Source Code Form is "Incompatible With Secondary Licenses", as
+# defined by the Mozilla Public License, v. 2.0.
+
+package Bugzilla::Extension::Mylyn::Git;
+
+use 5.10.1;
+use strict;
+use warnings;
+
+use parent qw(Bugzilla::BugUrl);
+
+###############################
+####        Methods        ####
+###############################
+
+sub should_handle {
+    my ($class, $uri) = @_;
+
+    # cGit commit: http://git.eclipse.org/c/actf/org.eclipse.actf.ai.git/commit/?id=84a2bb1e7c58fc8f423724d72cf294fd95f9b1c5
+    # cGit commit: https://polarsys.org/cgit/cgit.cgi/capella/capella.git/commit/?id=98011c093f70730bbc9b2113a007aad14a11bb46
+    return ($uri->path =~ m|^/c(git/cgit\.cgi)?/.*commit/$|
+                and $uri->query_param('id') =~ m|^\w{40}$|) ? 1 : 0;
+}
+
+sub _check_value {
+    my ($class, $uri) = @_;
+
+    $uri = $class->SUPER::_check_value($uri);
+
+    # GitHub HTTP URLs redirect to HTTPS, so just use the HTTPS scheme.
+    $uri->scheme('https');
+
+    return $uri;
+}
+
+1;
+
diff --git a/org.eclipse.mylyn.bugzilla.releng/modules/bugzilla/files/extensions/Mylyn/template/en/default/hook/global/user-error-bug_url_invalid_tracker.html.tmpl b/org.eclipse.mylyn.bugzilla.releng/modules/bugzilla/files/extensions/Mylyn/template/en/default/hook/global/user-error-bug_url_invalid_tracker.html.tmpl
new file mode 100644
index 0000000..2c15a3b
--- /dev/null
+++ b/org.eclipse.mylyn.bugzilla.releng/modules/bugzilla/files/extensions/Mylyn/template/en/default/hook/global/user-error-bug_url_invalid_tracker.html.tmpl
@@ -0,0 +1,10 @@
+[%# This Source Code Form is subject to the terms of the Mozilla Public
+  # License, v. 2.0. If a copy of the MPL was not distributed with this
+  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+  #
+  # This Source Code Form is "Incompatible With Secondary Licenses", as
+  # defined by the Mozilla Public License, v. 2.0.
+  #%]
+
+<li>A cGit commit link.</li>
+<li>A Gerrit change.</li>
\ No newline at end of file
diff --git a/org.eclipse.mylyn.bugzilla.releng/modules/bugzilla/manifests/defaultsites.pp b/org.eclipse.mylyn.bugzilla.releng/modules/bugzilla/manifests/defaultsites.pp
index 104f3db..771ba9d 100644
--- a/org.eclipse.mylyn.bugzilla.releng/modules/bugzilla/manifests/defaultsites.pp
+++ b/org.eclipse.mylyn.bugzilla.releng/modules/bugzilla/manifests/defaultsites.pp
@@ -90,7 +90,7 @@
     envversion      => "5.0rc2",
     testdataVersion => "Version1",
   }
- 
+
   bugzilla::site { "bugzilla-rest-master":
     major           => "5",
     minor           => "1",
@@ -102,4 +102,4 @@
     testdataVersion => "Version1",
   }
 
-}
\ No newline at end of file
+}
diff --git a/org.eclipse.mylyn.bugzilla.releng/modules/bugzilla/templates/Extension.pm.erb b/org.eclipse.mylyn.bugzilla.releng/modules/bugzilla/templates/Extension.pm.erb
index f3b12b3..c9ff65b 100644
--- a/org.eclipse.mylyn.bugzilla.releng/modules/bugzilla/templates/Extension.pm.erb
+++ b/org.eclipse.mylyn.bugzilla.releng/modules/bugzilla/templates/Extension.pm.erb
@@ -13,7 +13,10 @@
 package Bugzilla::Extension::Mylyn;
 use strict;
 use base qw(Bugzilla::Extension);
-
+use constant MORE_SUB_CLASSES => qw(
+    Bugzilla::Extension::Mylyn::Gerrit
+    Bugzilla::Extension::Mylyn::Git
+ );
 # This code for this is in ./extensions/Mylyn/lib/Util.pm
 use Bugzilla::Extension::Mylyn::Util;
 
@@ -425,4 +428,9 @@
 	print "Mylyn Extension: end of install-before_final_checks hook\n" unless $args->{silent};
 }
 
+sub bug_url_sub_classes {
+    my ($self, $args) = @_;
+    push @{ $args->{sub_classes} }, MORE_SUB_CLASSES;
+}
+
 __PACKAGE__->NAME;