From 9547fbce1596a1e4dfec6c4a22ccb2a6c9945a84 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 3 Mar 2017 01:14:07 +0000 Subject: repobrowse: remove unused "blob" endpoint This is redundant with the "raw" endpoint. --- MANIFEST | 1 - lib/PublicInbox/RepoGitBlob.pm | 75 ------------------------------------------ lib/PublicInbox/RepoGitRaw.pm | 44 ++++++++++++++++++++++++- lib/PublicInbox/Repobrowse.pm | 4 +-- 4 files changed, 45 insertions(+), 79 deletions(-) delete mode 100644 lib/PublicInbox/RepoGitBlob.pm diff --git a/MANIFEST b/MANIFEST index d49b45ce..f0a0b0fe 100644 --- a/MANIFEST +++ b/MANIFEST @@ -85,7 +85,6 @@ lib/PublicInbox/RepoBase.pm lib/PublicInbox/RepoConfig.pm lib/PublicInbox/RepoGit.pm lib/PublicInbox/RepoGitAtom.pm -lib/PublicInbox/RepoGitBlob.pm lib/PublicInbox/RepoGitCommit.pm lib/PublicInbox/RepoGitDiff.pm lib/PublicInbox/RepoGitDiffCommon.pm diff --git a/lib/PublicInbox/RepoGitBlob.pm b/lib/PublicInbox/RepoGitBlob.pm deleted file mode 100644 index 84f48c65..00000000 --- a/lib/PublicInbox/RepoGitBlob.pm +++ /dev/null @@ -1,75 +0,0 @@ -# Copyright (C) 2015-2016 all contributors -# License: AGPL-3.0+ - -# Show a blob as-is -package PublicInbox::RepoGitBlob; -use strict; -use warnings; -use base qw(PublicInbox::RepoBase); -use base qw(Exporter); -our @EXPORT = qw(git_blob_mime_type git_blob_stream_response); - -sub call_git_blob { - my ($self, $req) = @_; - my $repo = $req->{-repo}; - my $git = $repo->{git}; - my $id = $repo->tip . ':' . $req->{expath}; - - my ($cat, $hex, $type, $size) = $git->cat_file_begin($id); - return unless defined $cat; - - my ($r, $buf); - my $left = $size; - if ($type eq 'blob') { - $type = git_blob_mime_type($self, $req, $cat, \$buf, \$left); - } elsif ($type eq 'commit' || $type eq 'tag') { - $type = 'text/plain; charset=UTF-8'; - } else { - $type = 'application/octet-stream'; - } - git_blob_stream_response($git, $cat, $size, $type, $buf, $left); -} - -sub git_blob_mime_type { - my ($self, $req, $cat, $buf, $left) = @_; - my $base = $req->{extra}->[-1]; - my $type = $self->mime_type($base) if defined $base; - return $type if $type; - - my $to_read = 8000; # git uses this size to detect binary files - $to_read = $$left if $to_read > $$left; - my $r = read($cat, $$buf, $to_read); - if (!defined $r || $r <= 0) { - my $git = $req->{-repo}->{git}; - $git->cat_file_finish($$left); - return; - } - $$left -= $r; - (index($buf, "\0") < 0) ? 'text/plain; charset=UTF-8' - : 'application/octet-stream'; -} - -sub git_blob_stream_response { - my ($git, $cat, $size, $type, $buf, $left) = @_; - - sub { - my ($res) = @_; - my $to_read = 8192; - eval { - my $fh = $res->([ 200, ['Content-Length', $size, - 'Content-Type', $type]]); - $fh->write($buf) if defined $buf; - while ($left > 0) { - $to_read = $left if $to_read > $left; - my $r = read($cat, $buf, $to_read); - last if (!defined $r || $r <= 0); - $left -= $r; - $fh->write($buf); - } - $fh->close; - }; - $git->cat_file_finish($left); - } -} - -1; diff --git a/lib/PublicInbox/RepoGitRaw.pm b/lib/PublicInbox/RepoGitRaw.pm index 7d2c0d22..b990c7e7 100644 --- a/lib/PublicInbox/RepoGitRaw.pm +++ b/lib/PublicInbox/RepoGitRaw.pm @@ -4,7 +4,6 @@ package PublicInbox::RepoGitRaw; use strict; use warnings; use base qw(PublicInbox::RepoBase); -use PublicInbox::RepoGitBlob; use PublicInbox::Hval qw(utf8_html); use PublicInbox::Qspawn; @@ -91,4 +90,47 @@ sub git_tree_raw { }); } +sub git_blob_mime_type { + my ($self, $req, $cat, $buf, $left) = @_; + my $base = $req->{extra}->[-1]; + my $type = $self->mime_type($base) if defined $base; + return $type if $type; + + my $to_read = 8000; # git uses this size to detect binary files + $to_read = $$left if $to_read > $$left; + my $r = read($cat, $$buf, $to_read); + if (!defined $r || $r <= 0) { + my $git = $req->{-repo}->{git}; + $git->cat_file_finish($$left); + return; + } + $$left -= $r; + (index($buf, "\0") < 0) ? 'text/plain; charset=UTF-8' + : 'application/octet-stream'; +} + +sub git_blob_stream_response { + my ($git, $cat, $size, $type, $buf, $left) = @_; + + sub { + my ($res) = @_; + my $to_read = 8192; + eval { + my $fh = $res->([ 200, ['Content-Length', $size, + 'Content-Type', $type]]); + $fh->write($buf) if defined $buf; + while ($left > 0) { + $to_read = $left if $to_read > $left; + my $r = read($cat, $buf, $to_read); + last if (!defined $r || $r <= 0); + $left -= $r; + $fh->write($buf); + } + $fh->close; + }; + $git->cat_file_finish($left); + } +} + + 1; diff --git a/lib/PublicInbox/Repobrowse.pm b/lib/PublicInbox/Repobrowse.pm index 5ef9e59a..03960e2b 100644 --- a/lib/PublicInbox/Repobrowse.pm +++ b/lib/PublicInbox/Repobrowse.pm @@ -22,7 +22,7 @@ use strict; use warnings; use PublicInbox::RepoConfig; -my %CMD = map { lc($_) => $_ } qw(Log Commit Src Patch Blob Raw Tag Atom +my %CMD = map { lc($_) => $_ } qw(Log Commit Src Patch Raw Tag Atom Diff Snapshot); my %VCS = (git => 'Git'); my %LOADED; @@ -93,7 +93,7 @@ sub call { } # URL syntax: / repo [ / cmd [ / head [ / path ] ] ] - # cmd: log | commit | diff | src | view | blob | snapshot + # cmd: log | commit | diff | src | raw | snapshot # repo and path (@extra) may both contain '/' my $path_info = $env->{PATH_INFO}; my (undef, $repo_path, @extra) = split(m{/+}, $path_info, -1); -- cgit v1.2.3-24-ge0c7