aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IkiWiki/Plugin/filecheck.pm25
-rw-r--r--debian/changelog7
-rw-r--r--doc/plugins/filecheck.mdwn3
3 files changed, 28 insertions, 7 deletions
diff --git a/IkiWiki/Plugin/filecheck.pm b/IkiWiki/Plugin/filecheck.pm
index d00b6dfd3..a78058ffe 100644
--- a/IkiWiki/Plugin/filecheck.pm
+++ b/IkiWiki/Plugin/filecheck.pm
@@ -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";
}
diff --git a/debian/changelog b/debian/changelog
index 8223074f3..440bee34f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -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.
diff --git a/doc/plugins/filecheck.mdwn b/doc/plugins/filecheck.mdwn
index e5f68b29c..b038bc433 100644
--- a/doc/plugins/filecheck.mdwn
+++ b/doc/plugins/filecheck.mdwn
@@ -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`