diff options
9 files changed, 108 insertions, 19 deletions
diff --git a/extensions/BMO/Extension.pm b/extensions/BMO/Extension.pm index 8bf430529..02989d756 100644 --- a/extensions/BMO/Extension.pm +++ b/extensions/BMO/Extension.pm @@ -80,6 +80,7 @@ BEGIN { *Bugzilla::Attachment::bounty_details = \&_attachment_bounty_details; *Bugzilla::Attachment::external_redirect = \&_attachment_external_redirect; *Bugzilla::Attachment::can_review = \&_attachment_can_review; + *Bugzilla::Attachment::fetch_github_pr_diff = \&_attachment_fetch_github_pr_diff; } sub template_before_process { @@ -1106,6 +1107,27 @@ sub _attachment_can_review { return $external->{can_review}; } +sub _attachment_fetch_github_pr_diff { + my ($self) = @_; + + # must be our supported content-type + return undef unless + any { $self->contenttype eq $autodetect_attach_urls{$_}->{content_type} } + keys %autodetect_attach_urls; + + # must still be a valid url + return undef unless _detect_attached_url($self->data); + + my $ua = LWP::UserAgent->new( timeout => 10 ); + if (Bugzilla->params->{proxy_url}) { + $ua->proxy('https', Bugzilla->params->{proxy_url}); + } + + my $response = $ua->get($self->data . ".diff"); + return "Error retrieving Github pull request diff" if $response->is_error; + return $response->content; +} + # redirect automatically to github urls sub attachment_view { my ($self, $args) = @_; diff --git a/extensions/BMO/template/en/default/hook/attachment/edit-view.html.tmpl b/extensions/BMO/template/en/default/hook/attachment/edit-view.html.tmpl new file mode 100644 index 000000000..60159fcb2 --- /dev/null +++ b/extensions/BMO/template/en/default/hook/attachment/edit-view.html.tmpl @@ -0,0 +1,51 @@ +[%# 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. + #%] + +[% + RETURN UNLESS attachment.mimetype == "text/x-github-pull-request" && attachment.can_review; + custom_attachment_viewer = 1; +%] + +[% IF NOT user.id %] + <div> + <b>Display of Github pull requests only available to logged in users.</b> + </div> + [% RETURN %] +[% END %] + +[% attachment_data = attachment.fetch_github_pr_diff %] + +<div> + [% INCLUDE global/textarea.html.tmpl + id = 'editFrame' + name = 'comment' + classes = 'bz_default_hidden' + minrows = 10 + cols = 80 + wrap = 'soft' + disabled = 'disabled' + defaultcontent = attachment_data.replace('(.*\n|.+)', '>$1'); + %] + <pre id="viewFrame"> + [% attachment_data FILTER html %] + </pre> + [% IF user.id %] + <script type="text/javascript"> + <!-- + var patchviewerinstalled = 0; + document.write('<button type="button" id="editButton" onclick="editAsComment(patchviewerinstalled);">Edit Attachment As Comment<\/button>'); + document.write('<button type="button" id="undoEditButton" onclick="undoEditAsComment(patchviewerinstalled);" class="bz_default_hidden">Undo Edit As Comment<\/button>'); + document.write('<button type="button" id="redoEditButton" onclick="redoEditAsComment(patchviewerinstalled);" class="bz_default_hidden">Redo Edit As Comment<\/button>'); + var editFrame = document.getElementById('editFrame'); + if (editFrame) { + editFrame.disabled = false; + } + //--> + </script> + [% END %] +<div> diff --git a/extensions/BMO/template/en/default/hook/attachment/list-action.html.tmpl b/extensions/BMO/template/en/default/hook/attachment/list-action.html.tmpl index 6982b3338..494ab59ef 100644 --- a/extensions/BMO/template/en/default/hook/attachment/list-action.html.tmpl +++ b/extensions/BMO/template/en/default/hook/attachment/list-action.html.tmpl @@ -12,5 +12,5 @@ [% IF !attachment.ispatch && attachment.can_review %]   | - <a href="attachment.cgi?id=[% attachment.id FILTER none %]">Review</a> + <a href="attachment.cgi?id=[% attachment.id FILTER none %]">Ext Review</a> [% END %] diff --git a/extensions/Splinter/Extension.pm b/extensions/Splinter/Extension.pm index a3d9fe181..42a18d912 100644 --- a/extensions/Splinter/Extension.pm +++ b/extensions/Splinter/Extension.pm @@ -1,3 +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. + package Bugzilla::Extension::Splinter; use strict; @@ -75,8 +82,13 @@ sub page_before_template { } $vars->{'attach_id'} = $attachment->id; - $vars->{'attach_data'} = $attachment->data; - $vars->{'attach_is_crlf'} = $attachment->{data} =~ /\012\015/ ? 1 : 0; + if ($user->id && $attachment->contenttype eq "text/x-github-pull-request" && $attachment->can_review) { + $vars->{'attach_data'} = $attachment->fetch_github_pr_diff; + } + else { + $vars->{'attach_data'} = $attachment->data; + } + $vars->{'attach_is_crlf'} = $vars->{'attach_data'} =~ /\012\015/ ? 1 : 0; } my $field_object = new Bugzilla::Field({ name => 'attachments.status' }); diff --git a/extensions/Splinter/lib/Util.pm b/extensions/Splinter/lib/Util.pm index 870e67be7..6421d2f0b 100644 --- a/extensions/Splinter/lib/Util.pm +++ b/extensions/Splinter/lib/Util.pm @@ -78,8 +78,9 @@ sub attachment_is_visible { sub attachment_id_is_patch { my $attach_id = shift; my $attachment = attachment_id_is_valid($attach_id); - - return ($attachment && $attachment->ispatch); + return ($attachment + && ($attachment->ispatch + || ($attachment->contenttype eq "text/x-github-pull-request" && $attachment->external_redirect))); } sub get_review_base { @@ -103,7 +104,7 @@ sub get_review_link { my $attachment = attachment_id_is_valid($attach_id); - if ($attachment && $attachment->ispatch) { + if (attachment_id_is_patch($attach_id)) { return "<a href='" . html_quote(get_review_url($attachment->bug, $attach_id)) . "'>$link_text</a>"; } diff --git a/extensions/Splinter/template/en/default/hook/attachment/edit-action.html.tmpl b/extensions/Splinter/template/en/default/hook/attachment/edit-action.html.tmpl index 7648e1d76..6100deeb7 100644 --- a/extensions/Splinter/template/en/default/hook/attachment/edit-action.html.tmpl +++ b/extensions/Splinter/template/en/default/hook/attachment/edit-action.html.tmpl @@ -19,7 +19,8 @@ # David Lawrence <dkl@mozilla.com> #%] -[% IF attachment.ispatch %] +[% IF attachment.ispatch + || (attachment.mimetype == "text/x-github-pull-request" && attachment.external_redirect) %]   | <a href="[% Bugzilla.splinter_review_url(attachment.bug_id, attachment.id) FILTER none %]">Review</a> [% END %] diff --git a/extensions/Splinter/template/en/default/hook/attachment/list-action.html.tmpl b/extensions/Splinter/template/en/default/hook/attachment/list-action.html.tmpl index ee793b192..e22151b50 100644 --- a/extensions/Splinter/template/en/default/hook/attachment/list-action.html.tmpl +++ b/extensions/Splinter/template/en/default/hook/attachment/list-action.html.tmpl @@ -19,7 +19,8 @@ # David Lawrence <dkl@mozilla.com> #%] -[% IF attachment.ispatch %] +[% IF attachment.ispatch + || (attachment.mimetype == "text/x-github-pull-request" && attachment.can_review) %]   | - <a href="[% Bugzilla.splinter_review_url(bugid, attachment.id) FILTER none %]">Review</a> + <a href="[% Bugzilla.splinter_review_url(bugid, attachment.id) FILTER none %]">Splinter Review</a> [% END %] diff --git a/extensions/Splinter/template/en/default/pages/splinter.html.tmpl b/extensions/Splinter/template/en/default/pages/splinter.html.tmpl index 16d312759..9ecaded3f 100644 --- a/extensions/Splinter/template/en/default/pages/splinter.html.tmpl +++ b/extensions/Splinter/template/en/default/pages/splinter.html.tmpl @@ -34,7 +34,7 @@ "skins/custom/bug_groups.css" ] javascript_urls = [ "js/yui/element/element-min.js", "js/yui/container/container-min.js", - "js/yui/button/button-min.js", + "js/yui/button/button-min.js", "js/yui/json/json-min.js", "js/yui/datasource/datasource-min.js", "js/yui/datatable/datatable-min.js", @@ -86,11 +86,11 @@ [% END %] [% FOREACH attachment = bug.attachments %] - [% NEXT IF attachment.isprivate && !user.is_insider && attachment.attacher.id != user.id %] - [% NEXT IF !attachment.ispatch %] + [% NEXT IF attachment.isprivate && !user.is_insider && attachment.attacher.id != user.id %] + [% NEXT IF !attachment.ispatch && !(attachment.mimetype == "text/x-github-pull-request" && attachment.external_redirect) %] var attachid = parseInt('[% attachment.id FILTER js %]'); var attachment = new Splinter.Bug.Attachment('', attachid); - [% IF attachment.id == attach_id && attachment.ispatch %] + [% IF attachment.id == attach_id %] [% flag_types = attachment.flag_types %] [% can_edit = attachment.validate_can_edit %] attachment.data = '[% attach_data FILTER js %]'; @@ -102,7 +102,7 @@ attachment.date = Splinter.Bug.parseDate('[% attachment.attached FILTER time("%Y-%m-%d %T %z") FILTER js %]'); attachment.whoName = Splinter.Utils.strip('[% attachment.attacher.name FILTER js %]'); attachment.whoEmail = Splinter.Utils.strip('[% attachment.attacher.email FILTER js %]'); - attachment.isPatch = [% attachment.ispatch ? 1 : 0 %]; + attachment.isPatch = [% attachment.ispatch || (attachment.mimetype == "text/x-github-pull-request" && attachment.external_redirect) ? 1 : 0 %]; attachment.isObsolete = [% attachment.isobsolete ? 1 : 0 %]; attachment.isPrivate = [% attachment.isprivate ? 1 : 0 %]; attachment.isCRLF = [% attach_is_crlf ? 1 : 0 %]; @@ -125,7 +125,7 @@ <a id="allReviewsLink" href="[% Bugzilla.splinter_review_base FILTER none %]"> [reviews]</a> [% END %] - <a id='helpLink' target='splinterHelp' + <a id='helpLink' target='splinterHelp' href="[% urlbase FILTER none %]page.cgi?id=splinter/help.html"> [help]</a> </div> @@ -186,9 +186,9 @@ <li>From the Overview page, you can add a more generic overview comment that will appear at the beginning of your review.</li> <li>To comment on a specific lines in the patch, first select the filename from the file navigation links.</li> <li>Then double click the line you want to review and a comment box will appear below the line.</li> - <li>When the review is complete and you publish it, the overview comment and all line specific comments with their context, + <li>When the review is complete and you publish it, the overview comment and all line specific comments with their context, will be combined together into a single review comment on the [% terms.bug %] report.</li> - <li>For more detailed instructions, read the Splinter + <li>For more detailed instructions, read the Splinter <a id='helpLink' target='splinterHelp' href="[% urlbase FILTER none %]page.cgi?id=splinter/help.html">help page</a>. </li> </ul> @@ -276,12 +276,12 @@ <div id="splinter-files" style="display: none;"> <div id="file-collapse-all" style="display:none;"> <a href="javascript:void(0);" onclick="Splinter.toggleCollapsed('', 'none')">Collapse All</a> | - <a href="javascript:void(0);" onclick="Splinter.toggleCollapsed('', 'block')">Expand All</a> + <a href="javascript:void(0);" onclick="Splinter.toggleCollapsed('', 'block')">Expand All</a> </div> </div> <div id="credits"> - Powered by <a href="http://fishsoup.net/software/splinter">Splinter</a> + Powered by <a href="http://fishsoup.net/software/splinter">Splinter</a> </div> <div id="saveDraftNotice" style="display: none;"></div> diff --git a/skins/standard/attachment.css b/skins/standard/attachment.css index 01c4311d4..ace4b6781 100644 --- a/skins/standard/attachment.css +++ b/skins/standard/attachment.css @@ -221,6 +221,7 @@ div#update_container { height: 400px; width: 95%; margin-left: 2%; + overflow: auto; } .viewall_frame { |