From: Rafael Garcia-Suarez <rgarciasuarez@gmail.com>
To: git@vger.kernel.org
Cc: Rafael Garcia-Suarez <rgarciasuarez@gmail.com>
Subject: [PATCH] Avoid errors from git-rev-parse in gitweb blame (take 2)
Date: Tue, 3 Jun 2008 14:58:10 +0200 [thread overview]
Message-ID: <1212497890-4101-1-git-send-email-rgarciasuarez@gmail.com> (raw)
git-rev-parse will abort with an error message on stderr when passed a
non-existent revision spec, such as "deadbeef^" where deadbeef has no
parent. Using the --revs-only parameter makes this error go away, while
retaining functionality, keeping the web server error log nice and clean.
Moreover, when there is no parent commit, direct the blame at the first
commit featuring the file, that is itself. This unbreaks the link on the
line number when the corresponding line had never been modified.
Finally, to avoid forking git-rev-parse too many times, cache its
results in a new hash %parent_commits.
Signed-off-by: Rafael Garcia-Suarez <rgarciasuarez@gmail.com>
---
gitweb/gitweb.perl | 16 +++++++++++-----
1 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 55fb100..828cf45 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -4189,6 +4189,7 @@ sub git_blame2 {
<tr><th>Commit</th><th>Line</th><th>Data</th></tr>
HTML
my %metainfo = ();
+ my %parent_commits = ();
while (1) {
$_ = <$fd>;
last unless defined $_;
@@ -4226,11 +4227,16 @@ HTML
esc_html($rev));
print "</td>\n";
}
- open (my $dd, "-|", git_cmd(), "rev-parse", "$full_rev^")
- or die_error(undef, "Open git-rev-parse failed");
- my $parent_commit = <$dd>;
- close $dd;
- chomp($parent_commit);
+ if (!exists $parent_commits{$full_rev}) {
+ # --revs-only avoids an error message if $full_rev has no parent
+ open (my $dd, "-|", git_cmd(), "rev-parse", '--revs-only', "$full_rev^")
+ or die_error(undef, "Open git-rev-parse failed");
+ # set the $parent_commit to $full_rev if it has no parent
+ $parent_commits{$full_rev} = <$dd> || $full_rev;
+ chomp($parent_commits{$full_rev});
+ close $dd;
+ }
+ my $parent_commit = $parent_commits{$full_rev};
my $blamed = href(action => 'blame',
file_name => $meta->{'filename'},
hash_base => $parent_commit);
--
1.5.6.rc1
next reply other threads:[~2008-06-03 12:59 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-03 12:58 Rafael Garcia-Suarez [this message]
2008-06-03 14:23 ` [PATCH] Avoid errors from git-rev-parse in gitweb blame (take 2) Lea Wiemann
2008-06-03 14:59 ` Rafael Garcia-Suarez
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1212497890-4101-1-git-send-email-rgarciasuarez@gmail.com \
--to=rgarciasuarez@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).