filecheck: Fall back to using the file command if the freedesktop magic file cannot identify a file.

master
Joey Hess 2010-08-09 13:18:59 -04:00
parent 74d975ff4d
commit 51d5e54697
3 changed files with 28 additions and 7 deletions

View File

@ -132,15 +132,28 @@ sub match_mimetype ($$;@) {
return IkiWiki::ErrorReason->new("file does not exist");
}
# Use ::magic to get the mime type, the idea is to only trust
# data obtained by examining the actual file contents.
# Get the mime type.
#
# First, try File::Mimeinfo. This is fast, but doesn't recognise
# all files.
eval q{use File::MimeInfo::Magic};
if ($@) {
return IkiWiki::ErrorReason->new("failed to load File::MimeInfo::Magic ($@); cannot check MIME type");
my $mimeinfo_ok=! $@;
my $mimetype;
if ($mimeinfo_ok) {
my $mimetype=File::MimeInfo::Magic::magic($file);
}
my $mimetype=File::MimeInfo::Magic::magic($file);
# Fall back to using file, which has a more complete
# magic database.
if (! defined $mimetype) {
$mimetype=File::MimeInfo::Magic::default($file);
open(my $file_h, "-|", "file", "-bi", $file);
$mimetype=<$file_h>;
close $file_h;
}
if (! defined $mimetype || $mimetype !~s /;.*//) {
# Fall back to default value.
$mimetype=File::MimeInfo::Magic::default($file)
if $mimeinfo_ok;
if (! defined $mimetype) {
$mimetype="unknown";
}

7
debian/changelog vendored
View File

@ -1,3 +1,10 @@
ikiwiki (3.20100805) UNRELEASED; urgency=low
* filecheck: Fall back to using the file command if the freedesktop
magic file cannot identify a file.
-- Joey Hess <joeyh@debian.org> Mon, 09 Aug 2010 13:18:28 -0400
ikiwiki (3.20100804) unstable; urgency=low
* template: Fix dependency tracking. Broken in version 3.20100427.

View File

@ -7,7 +7,8 @@ status. These tests are mostly useful for the [[attachment]] plugin, and
are documented [[here|ikiwiki/pagespec/attachment]].
This plugin will use the [[!cpan File::MimeInfo::Magic]] perl module, if
available, for mimetype checking.
available, for mimetype checking. It falls back to using the `file` command
if necessary for hard to detect files.
The `virusfree` [[PageSpec|ikiwiki/pagespec/attachment]] requires that
ikiwiki be configured with a virus scanner program via the `virus_checker`