Skip to content

Commit

Permalink
Support for the standard mime.types map in gitweb
Browse files Browse the repository at this point in the history
gitweb will try to look up the filename mimetype in /etc/mime.types
and optionally a user-configured mime.types map as well.

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Petr Baudis authored and Junio C Hamano committed Jun 19, 2006
1 parent ad14e93 commit 2d00737
Showing 1 changed file with 44 additions and 0 deletions.
44 changes: 44 additions & 0 deletions gitweb/gitweb.cgi
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,11 @@ my $projects_list = "index/index.aux";
my $default_blob_plain_mimetype = 'text/plain';
my $default_text_plain_charset = undef;

# file to use for guessing MIME types before trying /etc/mime.types
# (relative to the current git repository)
my $mimetypes_file = undef;


# input validation and dispatch
my $action = $cgi->param('a');
if (defined $action) {
Expand Down Expand Up @@ -1486,13 +1491,52 @@ sub git_blob {
git_footer_html();
}

sub mimetype_guess_file {
my $filename = shift;
my $mimemap = shift;
-r $mimemap or return undef;

my %mimemap;
open(MIME, $mimemap) or return undef;
while (<MIME>) {
my ($mime, $exts) = split(/\t+/);
my @exts = split(/\s+/, $exts);
foreach my $ext (@exts) {
$mimemap{$ext} = $mime;
}
}
close(MIME);

$filename =~ /\.(.*?)$/;
return $mimemap{$1};
}

sub mimetype_guess {
my $filename = shift;
my $mime;
$filename =~ /\./ or return undef;

if ($mimetypes_file) {
my $file = $mimetypes_file;
$file =~ m#^/# or $file = "$projectroot/$path/$file";
$mime = mimetype_guess_file($filename, $file);
}
$mime ||= mimetype_guess_file($filename, '/etc/mime.types');
return $mime;
}

sub git_blob_plain_mimetype {
my $fd = shift;
my $filename = shift;

# just in case
return $default_blob_plain_mimetype unless $fd;

if ($filename) {
my $mime = mimetype_guess($filename);
$mime and return $mime;
}

if (-T $fd) {
return 'text/plain' .
($default_text_plain_charset ? '; charset='.$default_text_plain_charset : '');
Expand Down

0 comments on commit 2d00737

Please sign in to comment.