From baa07e0b526fd23630f6cedcdc04960c99703722 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 25 Mar 2010 14:23:16 -0400 Subject: remove a few leftover manual folding indicators --- IkiWiki/Plugin/filecheck.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'IkiWiki/Plugin/filecheck.pm') diff --git a/IkiWiki/Plugin/filecheck.pm b/IkiWiki/Plugin/filecheck.pm index 01d490961..0501ba99c 100644 --- a/IkiWiki/Plugin/filecheck.pm +++ b/IkiWiki/Plugin/filecheck.pm @@ -5,7 +5,7 @@ use warnings; use strict; use IkiWiki 3.00; -my %units=( #{{{ # size in bytes +my %units=( # size in bytes B => 1, byte => 1, KB => 2 ** 10, -- cgit v1.2.3 From 3d671ea8c1df4534d8ffa59b235dd6ded99bb13f Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 25 Mar 2010 14:39:09 -0400 Subject: filecheck: Fix bug that prevented the pagespecs from matching when not called by attachment plugin. --- IkiWiki/Plugin/filecheck.pm | 16 ++++++++-------- debian/changelog | 2 ++ doc/bugs/filecheck_failing_to_find_files.mdwn | 5 +++++ 3 files changed, 15 insertions(+), 8 deletions(-) (limited to 'IkiWiki/Plugin/filecheck.pm') diff --git a/IkiWiki/Plugin/filecheck.pm b/IkiWiki/Plugin/filecheck.pm index 0501ba99c..1549b82db 100644 --- a/IkiWiki/Plugin/filecheck.pm +++ b/IkiWiki/Plugin/filecheck.pm @@ -75,9 +75,9 @@ sub match_maxsize ($$;@) { } my %params=@_; - my $file=exists $params{file} ? $params{file} : $IkiWiki::pagesources{$page}; + my $file=exists $params{file} ? $params{file} : IkiWiki::srcfile($IkiWiki::pagesources{$page}); if (! defined $file) { - return IkiWiki::ErrorReason->new("no file specified"); + return IkiWiki::ErrorReason->new("file does not exist"); } if (-s $file > $maxsize) { @@ -96,9 +96,9 @@ sub match_minsize ($$;@) { } my %params=@_; - my $file=exists $params{file} ? $params{file} : $IkiWiki::pagesources{$page}; + my $file=exists $params{file} ? $params{file} : IkiWiki::srcfile($IkiWiki::pagesources{$page}); if (! defined $file) { - return IkiWiki::ErrorReason->new("no file specified"); + return IkiWiki::ErrorReason->new("file does not exist"); } if (-s $file < $minsize) { @@ -114,9 +114,9 @@ sub match_mimetype ($$;@) { my $wanted=shift; my %params=@_; - my $file=exists $params{file} ? $params{file} : $IkiWiki::pagesources{$page}; + my $file=exists $params{file} ? $params{file} : IkiWiki::srcfile($IkiWiki::pagesources{$page}); if (! defined $file) { - return IkiWiki::ErrorReason->new("no file specified"); + return IkiWiki::ErrorReason->new("file does not exist"); } # Use ::magic to get the mime type, the idea is to only trust @@ -147,9 +147,9 @@ sub match_virusfree ($$;@) { my $wanted=shift; my %params=@_; - my $file=exists $params{file} ? $params{file} : $IkiWiki::pagesources{$page}; + my $file=exists $params{file} ? $params{file} : IkiWiki::srcfile($IkiWiki::pagesources{$page}); if (! defined $file) { - return IkiWiki::ErrorReason->new("no file specified"); + return IkiWiki::ErrorReason->new("file does not exist"); } if (! exists $IkiWiki::config{virus_checker} || diff --git a/debian/changelog b/debian/changelog index 12dd0dc02..7249cdfa4 100644 --- a/debian/changelog +++ b/debian/changelog @@ -15,6 +15,8 @@ ikiwiki (3.20100324) UNRELEASED; urgency=low * Allow wrappers to be built using tcc. * Add support for setup files written in YAML. * Add --set-yaml switch for setting more complex config file options. + * filecheck: Fix bug that prevented the pagespecs from matching when + not called by attachment plugin. -- Joey Hess Sat, 13 Mar 2010 14:48:10 -0500 diff --git a/doc/bugs/filecheck_failing_to_find_files.mdwn b/doc/bugs/filecheck_failing_to_find_files.mdwn index be6cdbb20..e896f2129 100644 --- a/doc/bugs/filecheck_failing_to_find_files.mdwn +++ b/doc/bugs/filecheck_failing_to_find_files.mdwn @@ -10,6 +10,11 @@ It turns out that the filecheck plugin couldn't find the file, because it was me >> But if it is given `/path/to/srcdir/foo/bar.gif` instead, then it *can* find the file, and returns the mime-type correctly. >> --[[KathrynAndersen]] +>>> Ok, so it's not removal specific, can in fact be triggered by using +>>> testpagespec (or really anything besides attachment, which passes +>>> the filename parameter). Nor is it limited to mimetype, all the tests in +>>> filecheck have the problem. [[Fixed|done]] --[[Joey]] + The following patch fixes the problem: diff --git a/IkiWiki/Plugin/filecheck.pm b/IkiWiki/Plugin/filecheck.pm -- cgit v1.2.3 From 7a04e2d4161d2f23f92bc87e23349354c06e820b Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 14 Jul 2010 14:47:29 -0400 Subject: add getsetup hook --- IkiWiki/Plugin/filecheck.pm | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'IkiWiki/Plugin/filecheck.pm') diff --git a/IkiWiki/Plugin/filecheck.pm b/IkiWiki/Plugin/filecheck.pm index 1549b82db..d00b6dfd3 100644 --- a/IkiWiki/Plugin/filecheck.pm +++ b/IkiWiki/Plugin/filecheck.pm @@ -39,6 +39,19 @@ my %units=( # size in bytes # -- Joey ); +sub import { + hook(type => "getsetup", id => "filecheck", call => \&getsetup); +} + +sub getsetup () { + return + plugin => { + safe => 1, + rebuild => undef, + section => "misc", + }, +} + sub parsesize ($) { my $size=shift; -- cgit v1.2.3 From 51d5e546974405741e08ed27d0bf89958fa7366b Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 9 Aug 2010 13:18:59 -0400 Subject: filecheck: Fall back to using the file command if the freedesktop magic file cannot identify a file. --- IkiWiki/Plugin/filecheck.pm | 25 +++++++++++++++++++------ debian/changelog | 7 +++++++ doc/plugins/filecheck.mdwn | 3 ++- 3 files changed, 28 insertions(+), 7 deletions(-) (limited to 'IkiWiki/Plugin/filecheck.pm') 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 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` -- cgit v1.2.3