Added a hardlink option in the setup file, useful if the source and dest are on the same filesystem and the wiki includes large media files, which would normally be copied, wasting time and space.

master
Joey Hess 2008-03-29 21:02:47 -04:00
parent b95a86c069
commit f6bd81db15
5 changed files with 79 additions and 48 deletions

View File

@ -87,6 +87,7 @@ sub defaultconfig () { #{{{
numbacklinks => 10, numbacklinks => 10,
account_creation_password => "", account_creation_password => "",
prefix_directives => 0, prefix_directives => 0,
hardlink => 0,
} #}}} } #}}}
sub checkconfig () { #{{{ sub checkconfig () { #{{{
@ -323,12 +324,9 @@ sub readfile ($;$$) { #{{{
return $ret; return $ret;
} #}}} } #}}}
sub writefile ($$$;$$) { #{{{ sub prep_writefile ($$) {
my $file=shift; # can include subdirs my $file=shift;
my $destdir=shift; # directory to put file in my $destdir=shift;
my $content=shift;
my $binary=shift;
my $writer=shift;
my $test=$file; my $test=$file;
while (length $test) { while (length $test) {
@ -337,12 +335,8 @@ sub writefile ($$$;$$) { #{{{
} }
$test=dirname($test); $test=dirname($test);
} }
my $newfile="$destdir/$file.ikiwiki-new";
if (-l $newfile) {
error("cannot write to a symlink ($newfile)");
}
my $dir=dirname($newfile); my $dir=dirname("$destdir/$file");
if (! -d $dir) { if (! -d $dir) {
my $d=""; my $d="";
foreach my $s (split(m!/+!, $dir)) { foreach my $s (split(m!/+!, $dir)) {
@ -353,6 +347,23 @@ sub writefile ($$$;$$) { #{{{
} }
} }
return 1;
}
sub writefile ($$$;$$) { #{{{
my $file=shift; # can include subdirs
my $destdir=shift; # directory to put file in
my $content=shift;
my $binary=shift;
my $writer=shift;
prep_writefile($file, $destdir);
my $newfile="$destdir/$file.ikiwiki-new";
if (-l $newfile) {
error("cannot write to a symlink ($newfile)");
}
my $cleanup = sub { unlink($newfile) }; my $cleanup = sub { unlink($newfile) };
open (my $out, '>', $newfile) || error("failed to write $newfile: $!", $cleanup); open (my $out, '>', $newfile) || error("failed to write $newfile: $!", $cleanup);
binmode($out) if ($binary); binmode($out) if ($binary);

View File

@ -211,9 +211,19 @@ sub render ($) { #{{{
writefile($output, $config{destdir}, genpage($page, $content)); writefile($output, $config{destdir}, genpage($page, $content));
} }
else { else {
my $srcfd=readfile($srcfile, 1, 1);
delete $depends{$file}; delete $depends{$file};
will_render($file, $file, 1); will_render($file, $file, 1);
if ($config{hardlink}) {
prep_writefile($file, $config{destdir});
unlink($config{destdir}."/".$file);
if (link($srcfile, $config{destdir}."/".$file)) {
return;
}
# if hardlink fails, fall back top copying
}
my $srcfd=readfile($srcfile, 1, 1);
writefile($file, $config{destdir}, undef, 1, sub { writefile($file, $config{destdir}, undef, 1, sub {
my $destfd=shift; my $destfd=shift;
my $cleanup=shift; my $cleanup=shift;

3
debian/changelog vendored
View File

@ -63,6 +63,9 @@ ikiwiki (2.41) UNRELEASED; urgency=low
a special sentinal value. a special sentinal value.
* inline: Allow the "feedshow" parameter to take values greater than the * inline: Allow the "feedshow" parameter to take values greater than the
value for "show". value for "show".
* Added a hardlink option in the setup file, useful if the source and
dest are on the same filesystem and the wiki includes large media files,
which would normally be copied, wasting time and space.
-- martin f. krafft <madduck@debian.org> Sun, 02 Mar 2008 17:46:38 +0100 -- martin f. krafft <madduck@debian.org> Sun, 02 Mar 2008 17:46:38 +0100

View File

@ -129,6 +129,9 @@ use IkiWiki::Setup::Standard {
#recentchangesnum => 100, #recentchangesnum => 100,
# Use new '!'-prefixed preprocessor directive syntax # Use new '!'-prefixed preprocessor directive syntax
#prefix_directives => 0, #prefix_directives => 0,
# Attempt to make hardlinks to source files instead of copying them.
# Useful if the wiki contains large media files.
#hardlink => 1,
# To add plugins, list them here. # To add plugins, list them here.
#add_plugins => [qw{goodstuff search wikitext camelcase #add_plugins => [qw{goodstuff search wikitext camelcase

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2008-03-12 15:42-0400\n" "POT-Creation-Date: 2008-03-29 21:01-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -45,25 +45,25 @@ msgstr ""
msgid "%s is not an editable page" msgid "%s is not an editable page"
msgstr "" msgstr ""
#: ../IkiWiki/CGI.pm:385 ../IkiWiki/Plugin/brokenlinks.pm:24 #: ../IkiWiki/CGI.pm:395 ../IkiWiki/Plugin/brokenlinks.pm:24
#: ../IkiWiki/Plugin/inline.pm:237 ../IkiWiki/Plugin/opendiscussion.pm:17 #: ../IkiWiki/Plugin/inline.pm:265 ../IkiWiki/Plugin/opendiscussion.pm:17
#: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:95 #: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:95
#: ../IkiWiki/Render.pm:172 #: ../IkiWiki/Render.pm:172
msgid "discussion" msgid "discussion"
msgstr "" msgstr ""
#: ../IkiWiki/CGI.pm:441 #: ../IkiWiki/CGI.pm:451
#, perl-format #, perl-format
msgid "creating %s" msgid "creating %s"
msgstr "" msgstr ""
#: ../IkiWiki/CGI.pm:459 ../IkiWiki/CGI.pm:477 ../IkiWiki/CGI.pm:487 #: ../IkiWiki/CGI.pm:469 ../IkiWiki/CGI.pm:487 ../IkiWiki/CGI.pm:497
#: ../IkiWiki/CGI.pm:521 ../IkiWiki/CGI.pm:566 #: ../IkiWiki/CGI.pm:531 ../IkiWiki/CGI.pm:576
#, perl-format #, perl-format
msgid "editing %s" msgid "editing %s"
msgstr "" msgstr ""
#: ../IkiWiki/CGI.pm:656 #: ../IkiWiki/CGI.pm:666
msgid "You are banned." msgid "You are banned."
msgstr "" msgstr ""
@ -84,50 +84,50 @@ msgstr ""
msgid "new" msgid "new"
msgstr "" msgstr ""
#: ../IkiWiki/Plugin/aggregate.pm:309 #: ../IkiWiki/Plugin/aggregate.pm:307
#, perl-format #, perl-format
msgid "expiring %s (%s days old)" msgid "expiring %s (%s days old)"
msgstr "" msgstr ""
#: ../IkiWiki/Plugin/aggregate.pm:316 #: ../IkiWiki/Plugin/aggregate.pm:314
#, perl-format #, perl-format
msgid "expiring %s" msgid "expiring %s"
msgstr "" msgstr ""
#: ../IkiWiki/Plugin/aggregate.pm:345 #: ../IkiWiki/Plugin/aggregate.pm:341
#, perl-format #, perl-format
msgid "processed ok at %s" msgid "processed ok at %s"
msgstr "" msgstr ""
#: ../IkiWiki/Plugin/aggregate.pm:349 #: ../IkiWiki/Plugin/aggregate.pm:345
#, perl-format #, perl-format
msgid "checking feed %s ..." msgid "checking feed %s ..."
msgstr "" msgstr ""
#: ../IkiWiki/Plugin/aggregate.pm:354 #: ../IkiWiki/Plugin/aggregate.pm:350
#, perl-format #, perl-format
msgid "could not find feed at %s" msgid "could not find feed at %s"
msgstr "" msgstr ""
#: ../IkiWiki/Plugin/aggregate.pm:369 #: ../IkiWiki/Plugin/aggregate.pm:365
msgid "feed not found" msgid "feed not found"
msgstr "" msgstr ""
#: ../IkiWiki/Plugin/aggregate.pm:380 #: ../IkiWiki/Plugin/aggregate.pm:376
#, perl-format #, perl-format
msgid "(invalid UTF-8 stripped from feed)" msgid "(invalid UTF-8 stripped from feed)"
msgstr "" msgstr ""
#: ../IkiWiki/Plugin/aggregate.pm:386 #: ../IkiWiki/Plugin/aggregate.pm:382
#, perl-format #, perl-format
msgid "(feed entities escaped)" msgid "(feed entities escaped)"
msgstr "" msgstr ""
#: ../IkiWiki/Plugin/aggregate.pm:392 #: ../IkiWiki/Plugin/aggregate.pm:388
msgid "feed crashed XML::Feed!" msgid "feed crashed XML::Feed!"
msgstr "" msgstr ""
#: ../IkiWiki/Plugin/aggregate.pm:466 #: ../IkiWiki/Plugin/aggregate.pm:462
#, perl-format #, perl-format
msgid "creating new page %s" msgid "creating new page %s"
msgstr "" msgstr ""
@ -200,29 +200,29 @@ msgstr ""
msgid "failed to determine size of image %s" msgid "failed to determine size of image %s"
msgstr "" msgstr ""
#: ../IkiWiki/Plugin/inline.pm:44 #: ../IkiWiki/Plugin/inline.pm:46
msgid "Must specify url to wiki with --url when using --rss or --atom" msgid "Must specify url to wiki with --url when using --rss or --atom"
msgstr "" msgstr ""
#: ../IkiWiki/Plugin/inline.pm:136 #: ../IkiWiki/Plugin/inline.pm:153
#, perl-format #, perl-format
msgid "unknown sort type %s" msgid "unknown sort type %s"
msgstr "" msgstr ""
#: ../IkiWiki/Plugin/inline.pm:196 #: ../IkiWiki/Plugin/inline.pm:224
msgid "Add a new post titled:" msgid "Add a new post titled:"
msgstr "" msgstr ""
#: ../IkiWiki/Plugin/inline.pm:212 #: ../IkiWiki/Plugin/inline.pm:240
#, perl-format #, perl-format
msgid "nonexistant template %s" msgid "nonexistant template %s"
msgstr "" msgstr ""
#: ../IkiWiki/Plugin/inline.pm:245 ../IkiWiki/Render.pm:99 #: ../IkiWiki/Plugin/inline.pm:273 ../IkiWiki/Render.pm:99
msgid "Discussion" msgid "Discussion"
msgstr "" msgstr ""
#: ../IkiWiki/Plugin/inline.pm:463 #: ../IkiWiki/Plugin/inline.pm:491
msgid "RPC::XML::Client not found, not pinging" msgid "RPC::XML::Client not found, not pinging"
msgstr "" msgstr ""
@ -393,6 +393,10 @@ msgstr ""
msgid "The page %s does not exist." msgid "The page %s does not exist."
msgstr "" msgstr ""
#: ../IkiWiki/Plugin/recentchangesdiff.pm:26
msgid "(Diff truncated)"
msgstr ""
#: ../IkiWiki/Plugin/search.pm:34 #: ../IkiWiki/Plugin/search.pm:34
#, perl-format #, perl-format
msgid "Must specify %s when using the search plugin" msgid "Must specify %s when using the search plugin"
@ -422,7 +426,7 @@ msgstr ""
msgid "shortcut %s points to <i>%s</i>" msgid "shortcut %s points to <i>%s</i>"
msgstr "" msgstr ""
#: ../IkiWiki/Plugin/smiley.pm:23 #: ../IkiWiki/Plugin/smiley.pm:32
msgid "failed to parse any smileys" msgid "failed to parse any smileys"
msgstr "" msgstr ""
@ -512,47 +516,47 @@ msgstr ""
msgid "getctime not implemented" msgid "getctime not implemented"
msgstr "" msgstr ""
#: ../IkiWiki/Render.pm:279 ../IkiWiki/Render.pm:300 #: ../IkiWiki/Render.pm:289 ../IkiWiki/Render.pm:310
#, perl-format #, perl-format
msgid "skipping bad filename %s" msgid "skipping bad filename %s"
msgstr "" msgstr ""
#: ../IkiWiki/Render.pm:355 #: ../IkiWiki/Render.pm:365
#, perl-format #, perl-format
msgid "removing old page %s" msgid "removing old page %s"
msgstr "" msgstr ""
#: ../IkiWiki/Render.pm:396 #: ../IkiWiki/Render.pm:406
#, perl-format #, perl-format
msgid "scanning %s" msgid "scanning %s"
msgstr "" msgstr ""
#: ../IkiWiki/Render.pm:401 #: ../IkiWiki/Render.pm:411
#, perl-format #, perl-format
msgid "rendering %s" msgid "rendering %s"
msgstr "" msgstr ""
#: ../IkiWiki/Render.pm:422 #: ../IkiWiki/Render.pm:432
#, perl-format #, perl-format
msgid "rendering %s, which links to %s" msgid "rendering %s, which links to %s"
msgstr "" msgstr ""
#: ../IkiWiki/Render.pm:443 #: ../IkiWiki/Render.pm:453
#, perl-format #, perl-format
msgid "rendering %s, which depends on %s" msgid "rendering %s, which depends on %s"
msgstr "" msgstr ""
#: ../IkiWiki/Render.pm:482 #: ../IkiWiki/Render.pm:492
#, perl-format #, perl-format
msgid "rendering %s, to update its backlinks" msgid "rendering %s, to update its backlinks"
msgstr "" msgstr ""
#: ../IkiWiki/Render.pm:494 #: ../IkiWiki/Render.pm:504
#, perl-format #, perl-format
msgid "removing %s, no longer rendered by %s" msgid "removing %s, no longer rendered by %s"
msgstr "" msgstr ""
#: ../IkiWiki/Render.pm:520 #: ../IkiWiki/Render.pm:530
#, perl-format #, perl-format
msgid "ikiwiki: cannot render %s" msgid "ikiwiki: cannot render %s"
msgstr "" msgstr ""
@ -620,11 +624,11 @@ msgstr ""
msgid "usage: --set var=value" msgid "usage: --set var=value"
msgstr "" msgstr ""
#: ../IkiWiki.pm:115 #: ../IkiWiki.pm:117
msgid "Must specify url to wiki with --url when using --cgi" msgid "Must specify url to wiki with --url when using --cgi"
msgstr "" msgstr ""
#: ../IkiWiki.pm:184 ../IkiWiki.pm:185 #: ../IkiWiki.pm:186 ../IkiWiki.pm:187
msgid "Error" msgid "Error"
msgstr "" msgstr ""
@ -632,7 +636,7 @@ msgstr ""
#. translators: preprocessor directive name, #. translators: preprocessor directive name,
#. translators: the second a page name, the #. translators: the second a page name, the
#. translators: third a number. #. translators: third a number.
#: ../IkiWiki.pm:735 #: ../IkiWiki.pm:747
#, perl-format #, perl-format
msgid "%s preprocessing loop detected on %s at depth %i" msgid "%s preprocessing loop detected on %s at depth %i"
msgstr "" msgstr ""