summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorByron Jones <bjones@mozilla.com>2013-02-07 08:03:00 +0100
committerByron Jones <bjones@mozilla.com>2013-02-07 08:03:00 +0100
commit275eb1b39a25ef88f47fa5b592c9cf02ad9f754d (patch)
tree0104e2d11a3e7ecac5c8901a3e3bafe01763dff9
parent87badf1db52d0f54fd83a940fb4a884b56e159ff (diff)
downloadbugzilla-275eb1b39a25ef88f47fa5b592c9cf02ad9f754d.tar.gz
bugzilla-275eb1b39a25ef88f47fa5b592c9cf02ad9f754d.tar.xz
Bug 784352: Show a warning when interdiff reports errors
r=dkl, a=LpSolit
-rw-r--r--Bugzilla/Attachment/PatchReader.pm28
-rw-r--r--template/en/default/attachment/diff-header.html.tmpl19
2 files changed, 34 insertions, 13 deletions
diff --git a/Bugzilla/Attachment/PatchReader.pm b/Bugzilla/Attachment/PatchReader.pm
index cf1648579..29ff1f93f 100644
--- a/Bugzilla/Attachment/PatchReader.pm
+++ b/Bugzilla/Attachment/PatchReader.pm
@@ -10,6 +10,9 @@ package Bugzilla::Attachment::PatchReader;
use 5.10.1;
use strict;
+use IPC::Open3;
+use Symbol 'gensym';
+
use Bugzilla::Error;
use Bugzilla::Attachment;
use Bugzilla::Util;
@@ -100,8 +103,23 @@ sub process_interdiff {
# Send through interdiff, send output directly to template.
# Must hack path so that interdiff will work.
$ENV{'PATH'} = $lc->{diffpath};
- open my $interdiff_fh, "$lc->{interdiffbin} $old_filename $new_filename|";
- binmode $interdiff_fh;
+
+ my ($interdiff_stdout, $interdiff_stderr);
+ $interdiff_stderr = gensym;
+ my $pid = open3(gensym, $interdiff_stdout, $interdiff_stderr,
+ $lc->{interdiffbin}, $old_filename, $new_filename);
+ binmode $interdiff_stdout;
+
+ # Check for errors
+ {
+ local $/ = undef;
+ my $error = <$interdiff_stderr>;
+ if ($error) {
+ warn($error);
+ $warning = 'interdiff3';
+ }
+ }
+
my ($reader, $last_reader) = setup_patch_readers("", $context);
if ($format eq 'raw') {
@@ -114,7 +132,7 @@ sub process_interdiff {
}
else {
# In case the HTML page is displayed with the UTF-8 encoding.
- binmode $interdiff_fh, ':utf8' if Bugzilla->params->{'utf8'};
+ binmode $interdiff_stdout, ':utf8' if Bugzilla->params->{'utf8'};
$vars->{'warning'} = $warning if $warning;
$vars->{'bugid'} = $new_attachment->bug_id;
@@ -125,9 +143,9 @@ sub process_interdiff {
setup_template_patch_reader($last_reader, $format, $context, $vars);
}
- $reader->iterate_fh($interdiff_fh, 'interdiff #' . $old_attachment->id .
+ $reader->iterate_fh($interdiff_stdout, 'interdiff #' . $old_attachment->id .
' #' . $new_attachment->id);
- close $interdiff_fh;
+ waitpid($pid, 0);
$ENV{'PATH'} = '';
# Delete temporary files.
diff --git a/template/en/default/attachment/diff-header.html.tmpl b/template/en/default/attachment/diff-header.html.tmpl
index ed4d44e25..4261c8423 100644
--- a/template/en/default/attachment/diff-header.html.tmpl
+++ b/template/en/default/attachment/diff-header.html.tmpl
@@ -119,15 +119,18 @@ Interdiff of #[% oldid %] and #[% newid %] for [% terms.bug %] #[% bugid %]
[% END %]
[% IF warning %]
-<h2 class="warning">Warning:
+<h2 class="warning">
+ Warning:
[% IF warning == "interdiff1" %]
- this difference between two patches may show things in the wrong places due
- to a limitation in [% terms.Bugzilla %] when comparing patches with different
- sets of files.
- [% END %]
- [% IF warning == "interdiff2" %]
- this difference between two patches may be inaccurate due to a limitation in
- [%+ terms.Bugzilla %] when comparing patches made against different revisions.
+ this difference between two patches may show things in the wrong places due
+ to a limitation in [% terms.Bugzilla %] when comparing patches with
+ different sets of files.
+ [% ELSIF warning == "interdiff2" %]
+ this difference between two patches may be inaccurate due to a limitation
+ in [%+ terms.Bugzilla %] when comparing patches made against different
+ revisions.
+ [% ELSIF warning == "interdiff3" %]
+ interdiff encountered errors while comparing these patches.
[% END %]
</h2>
[% ELSE %]