]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 474902: Allow the Bug URL (See Also) field to also accept Launchpad bug URLs
authormkanat%bugzilla.org <>
Mon, 26 Jan 2009 21:59:55 +0000 (21:59 +0000)
committermkanat%bugzilla.org <>
Mon, 26 Jan 2009 21:59:55 +0000 (21:59 +0000)
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=dkl, a=mkanat

Bugzilla/Bug.pm
Bugzilla/WebService/Bug.pm

index f17d1174d0bec9993ed427e3f973f5d32d1fe48c..5038275c86f398e9d83ff382204bb670c50191f8 100644 (file)
@@ -2366,25 +2366,47 @@ sub add_see_also {
         ThrowUserError('bug_url_invalid', { url => $input, reason => 'http' });
     }
 
-    if ($uri->path !~ /show_bug\.cgi$/) {
-        ThrowUserError('bug_url_invalid', 
-                       { url => $input, reason => 'show_bug' });
-    }
-    my $bug_id = $uri->query_param('id');
-    # We don't currently allow aliases, because we can't check to see
-    # if somebody's putting both an alias link and a numeric ID link.
-    # When we start validating the URL by accessing the other Bugzilla,
-    # we can allow aliases.
-    detaint_natural($bug_id);
-    if (!$bug_id) {
-        ThrowUserError('bug_url_invalid', { url => $input, reason => 'id' });
-    }
-
-    # Make sure that "id" is the only query parameter.
-    $uri->query("id=$bug_id");
-    # And remove any # part if there is one.
-    $uri->fragment(undef);
-    my $result = $uri->canonical->as_string;
+    my $result;
+    # Launchpad URLs
+    if ($uri->authority =~ /launchpad.net$/) {
+        # Launchpad bug URLs can look like various things:
+        #   https://bugs.launchpad.net/ubuntu/+bug/1234
+        #   https://launchpad.net/bugs/1234
+        # All variations end with either "/bugs/1234" or "/+bug/1234"
+        if ($uri->path =~ m|bugs?/(\d+)$|) {
+            # This is the shortest standard URL form for Launchpad bugs,
+            # and so we reduce all URLs to this.
+            $result = "https://launchpad.net/bugs/$1";
+        }
+        else {
+            ThrowUserError('bug_url_invalid',
+                           { url => $input, reason => 'id' });
+        }
+    }
+    # Bugzilla URLs
+    else {
+        if ($uri->path !~ /show_bug\.cgi$/) {
+            ThrowUserError('bug_url_invalid', 
+                           { url => $input, reason => 'show_bug' });
+        }
+
+        my $bug_id = $uri->query_param('id');
+        # We don't currently allow aliases, because we can't check to see
+        # if somebody's putting both an alias link and a numeric ID link.
+        # When we start validating the URL by accessing the other Bugzilla,
+        # we can allow aliases.
+        detaint_natural($bug_id);
+        if (!$bug_id) {
+            ThrowUserError('bug_url_invalid', 
+                           { url => $input, reason => 'id' });
+        }
+
+        # Make sure that "id" is the only query parameter.
+        $uri->query("id=$bug_id");
+        # And remove any # part if there is one.
+        $uri->fragment(undef);
+        $result = $uri->canonical->as_string;
+    }
 
     if (length($result) > MAX_BUG_URL_LENGTH) {
         ThrowUserError('bug_url_too_long', { url => $result });
index ffeab2ce1d32cc30506206ff4f9bd700d7becc2e..5b1f6b6e0c137c236770f885be9a4871d93578bf 100755 (executable)
@@ -1321,7 +1321,7 @@ B<UNSTABLE>
 =item B<Description>
 
 Adds or removes URLs for the "See Also" field on bugs. These URLs must
-point to some valid bug in some Bugzilla installation.
+point to some valid bug in some Bugzilla installation or in Launchpad.
 
 =item B<Params>
 
@@ -1335,10 +1335,11 @@ to modify.
 =item C<add>
 
 Array of C<string>s. URLs to Bugzilla bugs. These URLs will be added to
-the See Also field. They must be valid URLs to C<show_bug.cgi> in a 
-Bugzilla installation. If they don't start with C<http://> or C<https://>,
-it will be assumed that C<http://> should be added to the beginning of the
-string.
+the See Also field. They must be valid URLs to C<show_bug.cgi> in a
+Bugzilla installation or to a bug filed at launchpad.net.
+
+If the URLs don't start with C<http://> or C<https://>, it will be assumed
+that C<http://> should be added to the beginning of the string.
 
 It is safe to specify URLs that are already in the "See Also" field on
 a bug--they will just be silently ignored.