From 917f54a777d152ee5963acd81bf8a2800a0507b1 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 1 Oct 2008 17:24:06 -0400 Subject: [PATCH 001/113] add pesco's darcs plugin --- IkiWiki/Plugin/darcs.pm | 509 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 509 insertions(+) create mode 100644 IkiWiki/Plugin/darcs.pm diff --git a/IkiWiki/Plugin/darcs.pm b/IkiWiki/Plugin/darcs.pm new file mode 100644 index 000000000..0957ef0ef --- /dev/null +++ b/IkiWiki/Plugin/darcs.pm @@ -0,0 +1,509 @@ +# Support for the darcs rcs, . +# Copyright (C) 2006 Thomas Schwinge +# 2007 Benjamin A'Lee +# Tuomo Valkonen +# 2008 Simon Michael +# Petr Ročkai +# Sven M. Hallberg +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# History (see http://ikiwiki.info/todo/darcs/): +# +# * Thomas Schwinge wrote the original file, implementing only rcs_commit. +# * Benjamin A'Lee contributed an alternative implementation. +# * Tuomo Valkonen contributed rcs_getctime and stub rcs_recentchanges. +# * Simon Michael contributed multiple changes. +# * Petr Ročkai fixed rcs_recentchanges and added caching to rcs_getctime. +# * Sven M. Hallberg merged the above and added missing features. + + +# We're guaranteed to be the only instance of ikiwiki running at a given +# time. It is essential that only ikiwiki is working on a particular +# repository. That means one instance of ikiwiki and it also means that +# you must not 'darcs push' into this repository, as this might create +# race conditions, as I understand it. + + +package IkiWiki::Plugin::darcs; + +use warnings; +use strict; +use IkiWiki; + + +sub import { + hook(type => "checkconfig", id => "darcs", call => \&checkconfig); + hook(type => "getsetup", id => "darcs", call => \&getsetup); + hook(type => "rcs", id => "rcs_update", call => \&rcs_update); + hook(type => "rcs", id => "rcs_prepedit", call => \&rcs_prepedit); + hook(type => "rcs", id => "rcs_commit", call => \&rcs_commit); + hook(type => "rcs", id => "rcs_commit_staged", call => \&rcs_commit_staged); + hook(type => "rcs", id => "rcs_add", call => \&rcs_add); + hook(type => "rcs", id => "rcs_remove", call => \&rcs_remove); + hook(type => "rcs", id => "rcs_rename", call => \&rcs_rename); + hook(type => "rcs", id => "rcs_recentchanges", call => \&rcs_recentchanges); + hook(type => "rcs", id => "rcs_diff", call => \&rcs_diff); + hook(type => "rcs", id => "rcs_getctime", call => \&rcs_getctime); +} + + +# Which darcs executable to use. +my $darcs = ($ENV{DARCS} or 'darcs'); + + +# Internal functions + +our %cache; + +sub loadcache () { + my $repodir=$config{srcdir}; + if (!defined %cache) { + my $f = "$repodir/.ikiwiki.ctimes"; + if (-s "$f") { + my $VAR1; + my $x = `cat "$f"`; + $x =~ /^(.*)$/sm; # untaint + eval "$1"; + %cache = %$VAR1; + } + } +} + +END { + my $repodir=$config{srcdir}; + if (defined %cache) { + debug("dumping ctime cache to $repodir/.ikiwiki.ctimes"); + open CACHE, ">$repodir/.ikiwiki.ctimes"; + print CACHE Dumper(\%cache); + close CACHE; + } +} + +sub silentsystem (@) { + open(SAVED_STDOUT, ">&STDOUT"); + open(STDOUT, ">/dev/null"); + my $ret = system @_; + open(STDOUT, ">&SAVED_STDOUT"); + return $ret; +} + +sub darcs_info ($$$) { + my $field = shift; + my $repodir = shift; + my $file = shift; # Relative to the repodir. + + my $child = open(DARCS_CHANGES, "-|"); + if (! $child) { + exec($darcs, 'changes', '--repodir', $repodir, '--xml-output', $file) or + error("failed to run 'darcs changes'"); + } + + # Brute force for now. :-/ + while () { + last if /^<\/created_as>$/; + } + ($_) = =~ /$field=\'([^\']+)/; + $field eq 'hash' and s/\.gz//; # Strip away the '.gz' from 'hash'es. + + close(DARCS_CHANGES) or error("'darcs changes' exited " . $?); + + return $_; +} + +sub darcs_rev($) { + my $file = shift; # Relative to the repodir. + my $repodir = $config{srcdir}; + + my $child = open(DARCS_MANIFEST, "-|"); + if (! $child) { + exec($darcs, 'query', 'manifest', '--repodir', $repodir) or + error("failed to run 'darcs query manifest'"); + } + my $found=0; + while () { + $found = 1, last if /^$file$/; + } + return "" if (! $found); + close(DARCS_MANIFEST) or error("'darcs query manifest' exited " . $?); + + my $hash = darcs_info('hash', $repodir, $file); + return defined $hash ? $hash : ""; +} + + +# Exported functions. + +sub checkconfig() { + if (defined $config{darcs_wrapper} && length $config{darcs_wrapper}) { + push @{$config{wrappers}}, { + wrapper => $config{darcs_wrapper}, + wrappermode => (defined $config{darcs_wrappermode} ? $config{darcs_wrappermode} : "06755"), + }; + } +} + +sub getsetup() { + return + plugin => { + safe => 0, # rcs plugin + rebuild => undef, + }, + darcs_wrapper => { + type => "string", + example => "/darcs/repo/_darcs/ikiwiki-wrapper", + description => "wrapper to generate (set as master repo apply hook)", + safe => 0, # file + rebuild => 0, + }, + darcs_wrappermode => { + type => "string", + example => '06755', + description => "mode for darcs_wrapper (can safely be made suid)", + safe => 0, + rebuild => 0, + }, + historyurl => { + type => "string", + example => "http://darcs.example.com/darcsweb.cgi?r=wiki;a=filehistory;f=[[file]]", + description => "darcsweb url to show file history ([[file]] substituted)", + safe => 1, + rebuild => 1, + }, + diffurl => { + type => "string", + example => "http://darcs.example.com/darcsweb.cgi?r=wiki;a=filediff;h=[[hash]];f=[[file]]", + description => "darcsweb url to show a diff ([[hash]] and [[file]] substituted)", + safe => 1, + rebuild => 1, + }, +} + +sub rcs_update () { + silentsystem($darcs, "pull", "--repodir", $config{srcdir}, "-qa") +} + +sub rcs_prepedit ($) { + # Prepares to edit a file under revision control. Returns a token that + # must be passed to rcs_commit() when the file is to be commited. For us, + # this token the hash value of the latest patch that modifies the file, + # i.e. something like its current revision. If the file is not yet added + # to the repository, we return TODO: the empty string. + + my $file = shift; # Relative to the repodir. + my $rev = darcs_rev($file); + return $rev; +} + +sub rcs_commit ($$$;$$) { + # Commit the page. Returns 'undef' on success and a version of the page + # with conflict markers on failure. + + my ($file, $message, $rcstoken, $user, $ipaddr) = @_; + + # Compute if the "revision" of $file changed. + my $changed = darcs_rev($file) ne $rcstoken; + + # Yes, the following is a bit convoluted. + if ($changed) { + # TODO. Invent a better, non-conflicting name. + rename("$config{srcdir}/$file", "$config{srcdir}/$file.save") or + error("failed to rename $file to $file.save: $!"); + + # Roll the repository back to $rcstoken. + + # TODO. Can we be sure that no changes are lost? I think that + # we can, if we make sure that the 'darcs push' below will always + # succeed. + + # We need to revert everything as 'darcs obliterate' might choke + # otherwise. + # TODO: 'yes | ...' needed? Doesn't seem so. + silentsystem($darcs, "revert", "--repodir", $config{srcdir}, "--all") and + error("'darcs revert' failed"); + # Remove all patches starting at $rcstoken. + my $child = open(DARCS_OBLITERATE, "|-"); + if (! $child) { + open(STDOUT, ">/dev/null"); + exec($darcs, "obliterate", "--repodir", $config{srcdir}, + "--match", "hash " . $rcstoken) and + error("'darcs obliterate' failed"); + } + while (print DARCS_OBLITERATE "y") { + ; + } + close(DARCS_OBLITERATE); + # Restore the $rcstoken one. + silentsystem($darcs, "pull", "--quiet", "--repodir", $config{srcdir}, + "--match", "hash " . $rcstoken, "--all") and + error("'darcs pull' failed"); + + # We're back at $rcstoken. Re-install the modified file. + rename("$config{srcdir}/$file.save", "$config{srcdir}/$file") or + error("failed to rename $file.save to $file: $!"); + } + + # Record the changes. + my $author; + if (defined $user) { + $author = "$user\@web"; + } elsif (defined $ipaddr) { + $author = "$ipaddr\@web"; + } else { + $author = "anon\@web"; + } + if (!defined $message || !length($message)) { + $message = "empty message"; + } + silentsystem($darcs, 'record', '--repodir', $config{srcdir}, '--all', + '-m', $message, '--author', $author, $file) and + error("'darcs record' failed"); + + # Update the repository by pulling from the default repository, which is + # master repository. + silentsystem($darcs, "pull", "--quiet", "--repodir", $config{srcdir}, + "--all") and error("'darcs pull' failed"); + + # If this updating yields any conflicts, we'll record them now to resolve + # them. If nothing is recorded, there are no conflicts. + $rcstoken = darcs_rev($file); + # TODO: Use only the first line here, i.e. only the patch name? + writefile("$file.log", $config{srcdir}, 'resolve conflicts: ' . $message); + silentsystem($darcs, 'record', '--repodir', $config{srcdir}, '--all', + '-m', 'resolve conflicts: ' . $message, '--author', $author, $file) and + error("'darcs record' failed"); + my $conflicts = darcs_rev($file) ne $rcstoken; + unlink("$config{srcdir}/$file.log") or + error("failed to remove '$file.log'"); + + # Push the changes to the main repository. + silentsystem($darcs, 'push', '--quiet', '--repodir', $config{srcdir}, '--all') + and error("'darcs push' failed"); + # TODO: darcs send? + + if ($conflicts) { + my $document = readfile("$config{srcdir}/$file"); + # Try to leave everything in a consistent state. + # TODO: 'yes | ...' needed? Doesn't seem so. + silentsystem($darcs, "revert", "--repodir", $config{srcdir}, "--all") and + warn("'darcs revert' failed"); + return $document; + } else { + return undef; + } +} + +sub rcs_commit_staged($$$) { + my ($message, $user, $ipaddr) = @_; + + my $author; + if (defined $user) { + $author = "$user\@web"; + } elsif (defined $ipaddr) { + $author = "$ipaddr\@web"; + } else { + $author = "anon\@web"; + } + if (!defined $message || !length($message)) { + $message = "empty message"; + } + + silentsystem($darcs, "record", "--repodir", $config{srcdir}, "-a", "-A", $author, + "-m", $message) and error("'darcs record' failed"); + + # Push the changes to the main repository. + silentsystem($darcs, 'push', '--quiet', '--repodir', $config{srcdir}, '--all') + and error("'darcs push' failed"); + # TODO: darcs send? + + return undef; +} + +sub rcs_add ($) { + my $file = shift; # Relative to the repodir. + + # Intermediate directories will be added automagically. + system($darcs, 'add', '--quiet', '--repodir', $config{srcdir}, + '--boring', $file) and error("'darcs add' failed"); +} + +sub rcs_remove ($) { + my $file = shift; # Relative to the repodir. + + system('rm', $config{srcdir}.'/'.$file) + and error("'rm' failed"); +} + +sub rcs_rename ($$) { + my $a = shift; # Relative to the repodir. + my $b = shift; # Relative to the repodir. + + system($darcs, 'mv', '--repodir', $config{srcdir}, $a, $b) + and error("'darcs mv' failed"); +} + +sub rcs_recentchanges ($) { + my $num=shift; + my @ret; + + eval q{use Date::Parse}; + eval q{use XML::Simple}; + + my $repodir=$config{srcdir}; + + debug("darcs recent changes: $num"); + + my $child = open(LOG, "-|"); + if (! $child) { + $ENV{"DARCS_DONT_ESCAPE_ANYTHING"}=1; + exec("darcs", "changes", "--xml", + "--summary", + "--repodir", "$repodir", + "--last", "$num") + || error("'darcs changes' failed to run"); + } + my $data; + $data .= $_ while(); + close LOG; + + my $log = XMLin($data, ForceArray => 1); + + debug("parsing recent changes..."); + foreach my $patch (@{$log->{patch}}) { + my $date=$patch->{local_date}; + my $hash=$patch->{hash}; + my $when=str2time($date); + my (@pages, @files, @pg); + push @pages, $_ for (@{$patch->{summary}->[0]->{modify_file}}); + push @pages, $_ for (@{$patch->{summary}->[0]->{add_file}}); + push @pages, $_ for (@{$patch->{summary}->[0]->{remove_file}}); + for (@pages) { + my $f = $_; + $f = $_->{content} if (ref $_); + $f =~ s,^\s+,,; $f =~ s,\s+$,,; # cut whitespace + + push @files, $f; + } + for (@{$patch->{summary}->[0]->{move}}) { + my $p = $_; + push @files, $p->{from}; + } + + for (@files) { + my $f = $_; + my $d = defined $config{'diffurl'} ? $config{'diffurl'} : ""; + $d =~ s/\[\[file\]\]/$f/go; + $d =~ s/\[\[hash\]\]/$hash/go; + + debug("file: $f"); + debug("diffurl: $d"); + push @pg, { + page => pagename($f), + diffurl => $d, + }; + } + next unless (scalar @pg > 0); + debug("recent change: " . $patch->{name}[0] . " (" + . scalar @pg . " changes)"); + + my @message; + push @message, { line => $_ } for (@{$patch->{name}}); + + my $committype; + if ($patch->{author} =~ /\@web$/) { + $committype = "web"; + } else { + $committype = "darcs"; + } + + push @ret, { + rev => $patch->{hash}, + user => $patch->{author}, + committype => $committype, + when => $when, + message => [@message], + pages => [@pg], + }; + } + + return @ret; +} + +sub rcs_diff ($) { + my $rev=shift; + my @lines; + foreach my $line (silentsystem("darcs", "diff", "--match", "hash ".$rev)) { + if (@lines || $line=~/^diff/) { + push @lines, $line."\n"; + } + } + if (wantarray) { + return @lines; + } + else { + return join("", @lines); + } +} + +sub rcs_getctime ($) { + my $file=shift; + + eval q{use Date::Parse}; + eval q{use XML::Simple}; + local $/=undef; + + # Sigh... doing things the hard way again + my $repodir=$config{srcdir}; + + &loadcache; + + my $filer=substr($file, length($repodir)); + $filer =~ s:^[/]+::; + + if (defined $cache{$filer}) { + #debug("taking cached ctime ".localtime($cache{$filer})." for $filer"); + return $cache{$filer}; + } + + my $child = open(LOG, "-|"); + if (! $child) { + exec("darcs", "changes", "--xml", "--reverse", + "--repodir", "$repodir", "$filer") + || error("'darcs changes $filer' failed to run"); + } + + my $data; + $data .= $_ while(); + close LOG; + + my $log = XMLin($data, ForceArray => 1); + + my $datestr=$log->{patch}[0]->{local_date}; + + if (! defined $datestr) { + warn "failed to get ctime for $filer"; + $cache{$filer} = 0; + return 0; + } + + my $date=str2time($datestr); + + #debug("found ctime ".localtime($date)." for $filer"); + + $cache{$filer} = $date; + return $date; +} + +1 From 7eb512205fba0efad301521bbd641848b4890b1d Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 15 Oct 2008 19:38:21 -0400 Subject: [PATCH 002/113] updated from pesco's darcs repo, current to Oct 11 version --- IkiWiki/Plugin/darcs.pm | 658 ++++++++++++++++++-------------------- doc/ikiwiki-makerepo.mdwn | 11 +- ikiwiki-makerepo | 40 ++- 3 files changed, 356 insertions(+), 353 deletions(-) diff --git a/IkiWiki/Plugin/darcs.pm b/IkiWiki/Plugin/darcs.pm index 0957ef0ef..27ea6b6dd 100644 --- a/IkiWiki/Plugin/darcs.pm +++ b/IkiWiki/Plugin/darcs.pm @@ -45,465 +45,427 @@ use IkiWiki; sub import { - hook(type => "checkconfig", id => "darcs", call => \&checkconfig); - hook(type => "getsetup", id => "darcs", call => \&getsetup); - hook(type => "rcs", id => "rcs_update", call => \&rcs_update); - hook(type => "rcs", id => "rcs_prepedit", call => \&rcs_prepedit); - hook(type => "rcs", id => "rcs_commit", call => \&rcs_commit); - hook(type => "rcs", id => "rcs_commit_staged", call => \&rcs_commit_staged); - hook(type => "rcs", id => "rcs_add", call => \&rcs_add); - hook(type => "rcs", id => "rcs_remove", call => \&rcs_remove); - hook(type => "rcs", id => "rcs_rename", call => \&rcs_rename); - hook(type => "rcs", id => "rcs_recentchanges", call => \&rcs_recentchanges); - hook(type => "rcs", id => "rcs_diff", call => \&rcs_diff); - hook(type => "rcs", id => "rcs_getctime", call => \&rcs_getctime); + hook(type => "checkconfig", id => "darcs", call => \&checkconfig); + hook(type => "getsetup", id => "darcs", call => \&getsetup); + hook(type => "rcs", id => "rcs_update", call => \&rcs_update); + hook(type => "rcs", id => "rcs_prepedit", call => \&rcs_prepedit); + hook(type => "rcs", id => "rcs_commit", call => \&rcs_commit); + hook(type => "rcs", id => "rcs_commit_staged", call => \&rcs_commit_staged); + hook(type => "rcs", id => "rcs_add", call => \&rcs_add); + hook(type => "rcs", id => "rcs_remove", call => \&rcs_remove); + hook(type => "rcs", id => "rcs_rename", call => \&rcs_rename); + hook(type => "rcs", id => "rcs_recentchanges", call => \&rcs_recentchanges); + hook(type => "rcs", id => "rcs_diff", call => \&rcs_diff); + hook(type => "rcs", id => "rcs_getctime", call => \&rcs_getctime); } -# Which darcs executable to use. -my $darcs = ($ENV{DARCS} or 'darcs'); - - # Internal functions -our %cache; - -sub loadcache () { - my $repodir=$config{srcdir}; - if (!defined %cache) { - my $f = "$repodir/.ikiwiki.ctimes"; - if (-s "$f") { - my $VAR1; - my $x = `cat "$f"`; - $x =~ /^(.*)$/sm; # untaint - eval "$1"; - %cache = %$VAR1; - } - } -} - -END { - my $repodir=$config{srcdir}; - if (defined %cache) { - debug("dumping ctime cache to $repodir/.ikiwiki.ctimes"); - open CACHE, ">$repodir/.ikiwiki.ctimes"; - print CACHE Dumper(\%cache); - close CACHE; - } -} - sub silentsystem (@) { - open(SAVED_STDOUT, ">&STDOUT"); - open(STDOUT, ">/dev/null"); - my $ret = system @_; - open(STDOUT, ">&SAVED_STDOUT"); - return $ret; + open(SAVED_STDOUT, ">&STDOUT"); + open(STDOUT, ">/dev/null"); + my $ret = system @_; + open(STDOUT, ">&SAVED_STDOUT"); + return $ret; } sub darcs_info ($$$) { - my $field = shift; - my $repodir = shift; - my $file = shift; # Relative to the repodir. + my $field = shift; + my $repodir = shift; + my $file = shift; # Relative to the repodir. - my $child = open(DARCS_CHANGES, "-|"); - if (! $child) { - exec($darcs, 'changes', '--repodir', $repodir, '--xml-output', $file) or - error("failed to run 'darcs changes'"); - } + my $child = open(DARCS_CHANGES, "-|"); + if (! $child) { + exec('darcs', 'changes', '--repodir', $repodir, '--xml-output', $file) or + error("failed to run 'darcs changes'"); + } - # Brute force for now. :-/ - while () { - last if /^<\/created_as>$/; - } - ($_) = =~ /$field=\'([^\']+)/; - $field eq 'hash' and s/\.gz//; # Strip away the '.gz' from 'hash'es. + # Brute force for now. :-/ + while () { + last if /^<\/created_as>$/; + } + ($_) = =~ /$field=\'([^\']+)/; + $field eq 'hash' and s/\.gz//; # Strip away the '.gz' from 'hash'es. - close(DARCS_CHANGES) or error("'darcs changes' exited " . $?); + close(DARCS_CHANGES) or error("'darcs changes' exited " . $?); - return $_; + return $_; } sub darcs_rev($) { - my $file = shift; # Relative to the repodir. - my $repodir = $config{srcdir}; + my $file = shift; # Relative to the repodir. + my $repodir = $config{srcdir}; - my $child = open(DARCS_MANIFEST, "-|"); - if (! $child) { - exec($darcs, 'query', 'manifest', '--repodir', $repodir) or - error("failed to run 'darcs query manifest'"); - } - my $found=0; - while () { - $found = 1, last if /^$file$/; - } - return "" if (! $found); - close(DARCS_MANIFEST) or error("'darcs query manifest' exited " . $?); + my $child = open(DARCS_MANIFEST, "-|"); + if (! $child) { + exec('darcs', 'query', 'manifest', '--repodir', $repodir) or + error("failed to run 'darcs query manifest'"); + } + my $found=0; + while () { + $found = 1, last if /^$file$/; + } + return "" if (! $found); + close(DARCS_MANIFEST) or error("'darcs query manifest' exited " . $?); - my $hash = darcs_info('hash', $repodir, $file); - return defined $hash ? $hash : ""; + my $hash = darcs_info('hash', $repodir, $file); + return defined $hash ? $hash : ""; } # Exported functions. sub checkconfig() { - if (defined $config{darcs_wrapper} && length $config{darcs_wrapper}) { - push @{$config{wrappers}}, { - wrapper => $config{darcs_wrapper}, - wrappermode => (defined $config{darcs_wrappermode} ? $config{darcs_wrappermode} : "06755"), - }; - } + if (defined $config{darcs_wrapper} && length $config{darcs_wrapper}) { + push @{$config{wrappers}}, { + wrapper => $config{darcs_wrapper}, + wrappermode => (defined $config{darcs_wrappermode} ? $config{darcs_wrappermode} : "06755"), + }; + } } sub getsetup() { - return + return plugin => { - safe => 0, # rcs plugin - rebuild => undef, + safe => 0, # rcs plugin + rebuild => undef, }, darcs_wrapper => { - type => "string", - example => "/darcs/repo/_darcs/ikiwiki-wrapper", - description => "wrapper to generate (set as master repo apply hook)", - safe => 0, # file - rebuild => 0, + type => "string", + example => "/darcs/repo/_darcs/ikiwiki-wrapper", + description => "wrapper to generate (set as master repo apply hook)", + safe => 0, # file + rebuild => 0, }, darcs_wrappermode => { - type => "string", - example => '06755', - description => "mode for darcs_wrapper (can safely be made suid)", - safe => 0, - rebuild => 0, + type => "string", + example => '06755', + description => "mode for darcs_wrapper (can safely be made suid)", + safe => 0, + rebuild => 0, }, historyurl => { - type => "string", - example => "http://darcs.example.com/darcsweb.cgi?r=wiki;a=filehistory;f=[[file]]", - description => "darcsweb url to show file history ([[file]] substituted)", - safe => 1, - rebuild => 1, + type => "string", + example => "http://darcs.example.com/darcsweb.cgi?r=wiki;a=filehistory;f=[[file]]", + description => "darcsweb url to show file history ([[file]] substituted)", + safe => 1, + rebuild => 1, }, diffurl => { - type => "string", - example => "http://darcs.example.com/darcsweb.cgi?r=wiki;a=filediff;h=[[hash]];f=[[file]]", - description => "darcsweb url to show a diff ([[hash]] and [[file]] substituted)", - safe => 1, - rebuild => 1, + type => "string", + example => "http://darcs.example.com/darcsweb.cgi?r=wiki;a=filediff;h=[[hash]];f=[[file]]", + description => "darcsweb url to show a diff ([[hash]] and [[file]] substituted)", + safe => 1, + rebuild => 1, }, } sub rcs_update () { - silentsystem($darcs, "pull", "--repodir", $config{srcdir}, "-qa") + silentsystem('darcs', "pull", "--repodir", $config{srcdir}, "-qa") } sub rcs_prepedit ($) { - # Prepares to edit a file under revision control. Returns a token that - # must be passed to rcs_commit() when the file is to be commited. For us, - # this token the hash value of the latest patch that modifies the file, - # i.e. something like its current revision. If the file is not yet added - # to the repository, we return TODO: the empty string. + # Prepares to edit a file under revision control. Returns a token that + # must be passed to rcs_commit() when the file is to be commited. For us, + # this token the hash value of the latest patch that modifies the file, + # i.e. something like its current revision. If the file is not yet added + # to the repository, we return TODO: the empty string. - my $file = shift; # Relative to the repodir. - my $rev = darcs_rev($file); - return $rev; + my $file = shift; # Relative to the repodir. + my $rev = darcs_rev($file); + return $rev; } sub rcs_commit ($$$;$$) { - # Commit the page. Returns 'undef' on success and a version of the page - # with conflict markers on failure. + # Commit the page. Returns 'undef' on success and a version of the page + # with conflict markers on failure. - my ($file, $message, $rcstoken, $user, $ipaddr) = @_; + my ($file, $message, $rcstoken, $user, $ipaddr) = @_; - # Compute if the "revision" of $file changed. - my $changed = darcs_rev($file) ne $rcstoken; + # Compute if the "revision" of $file changed. + my $changed = darcs_rev($file) ne $rcstoken; - # Yes, the following is a bit convoluted. - if ($changed) { - # TODO. Invent a better, non-conflicting name. - rename("$config{srcdir}/$file", "$config{srcdir}/$file.save") or - error("failed to rename $file to $file.save: $!"); + # Yes, the following is a bit convoluted. + if ($changed) { + # TODO. Invent a better, non-conflicting name. + rename("$config{srcdir}/$file", "$config{srcdir}/$file.save") or + error("failed to rename $file to $file.save: $!"); - # Roll the repository back to $rcstoken. + # Roll the repository back to $rcstoken. - # TODO. Can we be sure that no changes are lost? I think that - # we can, if we make sure that the 'darcs push' below will always - # succeed. + # TODO. Can we be sure that no changes are lost? I think that + # we can, if we make sure that the 'darcs push' below will always + # succeed. - # We need to revert everything as 'darcs obliterate' might choke - # otherwise. - # TODO: 'yes | ...' needed? Doesn't seem so. - silentsystem($darcs, "revert", "--repodir", $config{srcdir}, "--all") and - error("'darcs revert' failed"); - # Remove all patches starting at $rcstoken. - my $child = open(DARCS_OBLITERATE, "|-"); - if (! $child) { - open(STDOUT, ">/dev/null"); - exec($darcs, "obliterate", "--repodir", $config{srcdir}, - "--match", "hash " . $rcstoken) and - error("'darcs obliterate' failed"); - } - while (print DARCS_OBLITERATE "y") { - ; - } - close(DARCS_OBLITERATE); - # Restore the $rcstoken one. - silentsystem($darcs, "pull", "--quiet", "--repodir", $config{srcdir}, - "--match", "hash " . $rcstoken, "--all") and - error("'darcs pull' failed"); + # We need to revert everything as 'darcs obliterate' might choke + # otherwise. + # TODO: 'yes | ...' needed? Doesn't seem so. + silentsystem('darcs', "revert", "--repodir", $config{srcdir}, "--all") and + error("'darcs revert' failed"); + # Remove all patches starting at $rcstoken. + my $child = open(DARCS_OBLITERATE, "|-"); + if (! $child) { + open(STDOUT, ">/dev/null"); + exec('darcs', "obliterate", "--repodir", $config{srcdir}, + "--match", "hash " . $rcstoken) and + error("'darcs obliterate' failed"); + } + while (print DARCS_OBLITERATE "y") { + ; + } + close(DARCS_OBLITERATE); + # Restore the $rcstoken one. + silentsystem('darcs', "pull", "--quiet", "--repodir", $config{srcdir}, + "--match", "hash " . $rcstoken, "--all") and + error("'darcs pull' failed"); - # We're back at $rcstoken. Re-install the modified file. - rename("$config{srcdir}/$file.save", "$config{srcdir}/$file") or - error("failed to rename $file.save to $file: $!"); - } + # We're back at $rcstoken. Re-install the modified file. + rename("$config{srcdir}/$file.save", "$config{srcdir}/$file") or + error("failed to rename $file.save to $file: $!"); + } - # Record the changes. - my $author; - if (defined $user) { - $author = "$user\@web"; - } elsif (defined $ipaddr) { - $author = "$ipaddr\@web"; - } else { - $author = "anon\@web"; - } - if (!defined $message || !length($message)) { - $message = "empty message"; - } - silentsystem($darcs, 'record', '--repodir', $config{srcdir}, '--all', - '-m', $message, '--author', $author, $file) and - error("'darcs record' failed"); + # Record the changes. + my $author; + if (defined $user) { + $author = "$user\@web"; + } elsif (defined $ipaddr) { + $author = "$ipaddr\@web"; + } else { + $author = "anon\@web"; + } + if (!defined $message || !length($message)) { + $message = "empty message"; + } + silentsystem('darcs', 'record', '--repodir', $config{srcdir}, '--all', + '-m', $message, '--author', $author, $file) and + error("'darcs record' failed"); - # Update the repository by pulling from the default repository, which is - # master repository. - silentsystem($darcs, "pull", "--quiet", "--repodir", $config{srcdir}, - "--all") and error("'darcs pull' failed"); + # Update the repository by pulling from the default repository, which is + # master repository. + silentsystem('darcs', "pull", "--quiet", "--repodir", $config{srcdir}, + "--all") and error("'darcs pull' failed"); - # If this updating yields any conflicts, we'll record them now to resolve - # them. If nothing is recorded, there are no conflicts. - $rcstoken = darcs_rev($file); - # TODO: Use only the first line here, i.e. only the patch name? - writefile("$file.log", $config{srcdir}, 'resolve conflicts: ' . $message); - silentsystem($darcs, 'record', '--repodir', $config{srcdir}, '--all', - '-m', 'resolve conflicts: ' . $message, '--author', $author, $file) and - error("'darcs record' failed"); - my $conflicts = darcs_rev($file) ne $rcstoken; - unlink("$config{srcdir}/$file.log") or - error("failed to remove '$file.log'"); + # If this updating yields any conflicts, we'll record them now to resolve + # them. If nothing is recorded, there are no conflicts. + $rcstoken = darcs_rev($file); + # TODO: Use only the first line here, i.e. only the patch name? + writefile("$file.log", $config{srcdir}, 'resolve conflicts: ' . $message); + silentsystem('darcs', 'record', '--repodir', $config{srcdir}, '--all', + '-m', 'resolve conflicts: ' . $message, '--author', $author, $file) and + error("'darcs record' failed"); + my $conflicts = darcs_rev($file) ne $rcstoken; + unlink("$config{srcdir}/$file.log") or + error("failed to remove '$file.log'"); - # Push the changes to the main repository. - silentsystem($darcs, 'push', '--quiet', '--repodir', $config{srcdir}, '--all') - and error("'darcs push' failed"); - # TODO: darcs send? + # Push the changes to the main repository. + silentsystem('darcs', 'push', '--quiet', '--repodir', $config{srcdir}, '--all') + and error("'darcs push' failed"); + # TODO: darcs send? - if ($conflicts) { - my $document = readfile("$config{srcdir}/$file"); - # Try to leave everything in a consistent state. - # TODO: 'yes | ...' needed? Doesn't seem so. - silentsystem($darcs, "revert", "--repodir", $config{srcdir}, "--all") and - warn("'darcs revert' failed"); - return $document; - } else { - return undef; - } + if ($conflicts) { + my $document = readfile("$config{srcdir}/$file"); + # Try to leave everything in a consistent state. + # TODO: 'yes | ...' needed? Doesn't seem so. + silentsystem('darcs', "revert", "--repodir", $config{srcdir}, "--all") and + warn("'darcs revert' failed"); + return $document; + } else { + return undef; + } } sub rcs_commit_staged($$$) { - my ($message, $user, $ipaddr) = @_; + my ($message, $user, $ipaddr) = @_; - my $author; - if (defined $user) { - $author = "$user\@web"; - } elsif (defined $ipaddr) { - $author = "$ipaddr\@web"; - } else { - $author = "anon\@web"; - } - if (!defined $message || !length($message)) { - $message = "empty message"; - } + my $author; + if (defined $user) { + $author = "$user\@web"; + } elsif (defined $ipaddr) { + $author = "$ipaddr\@web"; + } else { + $author = "anon\@web"; + } + if (!defined $message || !length($message)) { + $message = "empty message"; + } - silentsystem($darcs, "record", "--repodir", $config{srcdir}, "-a", "-A", $author, - "-m", $message) and error("'darcs record' failed"); + silentsystem('darcs', "record", "--repodir", $config{srcdir}, "-a", "-A", $author, + "-m", $message) and error("'darcs record' failed"); - # Push the changes to the main repository. - silentsystem($darcs, 'push', '--quiet', '--repodir', $config{srcdir}, '--all') - and error("'darcs push' failed"); - # TODO: darcs send? + # Push the changes to the main repository. + silentsystem('darcs', 'push', '--quiet', '--repodir', $config{srcdir}, '--all') + and error("'darcs push' failed"); + # TODO: darcs send? - return undef; + return undef; } sub rcs_add ($) { - my $file = shift; # Relative to the repodir. + my $file = shift; # Relative to the repodir. - # Intermediate directories will be added automagically. - system($darcs, 'add', '--quiet', '--repodir', $config{srcdir}, - '--boring', $file) and error("'darcs add' failed"); + # Intermediate directories will be added automagically. + system('darcs', 'add', '--quiet', '--repodir', $config{srcdir}, + '--boring', $file) and error("'darcs add' failed"); } sub rcs_remove ($) { - my $file = shift; # Relative to the repodir. + my $file = shift; # Relative to the repodir. - system('rm', $config{srcdir}.'/'.$file) - and error("'rm' failed"); + unlink($config{srcdir}.'/'.$file); } sub rcs_rename ($$) { - my $a = shift; # Relative to the repodir. - my $b = shift; # Relative to the repodir. + my $a = shift; # Relative to the repodir. + my $b = shift; # Relative to the repodir. - system($darcs, 'mv', '--repodir', $config{srcdir}, $a, $b) - and error("'darcs mv' failed"); + system('darcs', 'mv', '--repodir', $config{srcdir}, $a, $b) + and error("'darcs mv' failed"); } sub rcs_recentchanges ($) { - my $num=shift; - my @ret; + my $num=shift; + my @ret; - eval q{use Date::Parse}; - eval q{use XML::Simple}; + eval q{use Date::Parse}; + eval q{use XML::Simple}; - my $repodir=$config{srcdir}; + my $repodir=$config{srcdir}; - debug("darcs recent changes: $num"); + debug("darcs recent changes: $num"); - my $child = open(LOG, "-|"); - if (! $child) { - $ENV{"DARCS_DONT_ESCAPE_ANYTHING"}=1; - exec("darcs", "changes", "--xml", - "--summary", - "--repodir", "$repodir", - "--last", "$num") - || error("'darcs changes' failed to run"); - } - my $data; - $data .= $_ while(); - close LOG; + my $child = open(LOG, "-|"); + if (! $child) { + $ENV{"DARCS_DONT_ESCAPE_ANYTHING"}=1; + exec("darcs", "changes", "--xml", + "--summary", + "--repodir", "$repodir", + "--last", "$num") + || error("'darcs changes' failed to run"); + } + my $data; + $data .= $_ while(); + close LOG; - my $log = XMLin($data, ForceArray => 1); + my $log = XMLin($data, ForceArray => 1); - debug("parsing recent changes..."); - foreach my $patch (@{$log->{patch}}) { - my $date=$patch->{local_date}; - my $hash=$patch->{hash}; - my $when=str2time($date); - my (@pages, @files, @pg); - push @pages, $_ for (@{$patch->{summary}->[0]->{modify_file}}); - push @pages, $_ for (@{$patch->{summary}->[0]->{add_file}}); - push @pages, $_ for (@{$patch->{summary}->[0]->{remove_file}}); - for (@pages) { - my $f = $_; - $f = $_->{content} if (ref $_); - $f =~ s,^\s+,,; $f =~ s,\s+$,,; # cut whitespace + debug("parsing recent changes..."); + foreach my $patch (@{$log->{patch}}) { + my $date=$patch->{local_date}; + my $hash=$patch->{hash}; + my $when=str2time($date); + my (@pages, @files, @pg); + push @pages, $_ for (@{$patch->{summary}->[0]->{modify_file}}); + push @pages, $_ for (@{$patch->{summary}->[0]->{add_file}}); + push @pages, $_ for (@{$patch->{summary}->[0]->{remove_file}}); + for (@pages) { + my $f = $_; + $f = $_->{content} if (ref $_); + $f =~ s,^\s+,,; $f =~ s,\s+$,,; # cut whitespace - push @files, $f; - } - for (@{$patch->{summary}->[0]->{move}}) { - my $p = $_; - push @files, $p->{from}; - } + push @files, $f; + } + for (@{$patch->{summary}->[0]->{move}}) { + my $p = $_; + push @files, $p->{from}; + } - for (@files) { - my $f = $_; - my $d = defined $config{'diffurl'} ? $config{'diffurl'} : ""; - $d =~ s/\[\[file\]\]/$f/go; - $d =~ s/\[\[hash\]\]/$hash/go; + for (@files) { + my $f = $_; + my $d = defined $config{'diffurl'} ? $config{'diffurl'} : ""; + $d =~ s/\[\[file\]\]/$f/go; + $d =~ s/\[\[hash\]\]/$hash/go; - debug("file: $f"); - debug("diffurl: $d"); - push @pg, { - page => pagename($f), - diffurl => $d, - }; - } - next unless (scalar @pg > 0); - debug("recent change: " . $patch->{name}[0] . " (" - . scalar @pg . " changes)"); + debug("file: $f"); + debug("diffurl: $d"); + push @pg, { + page => pagename($f), + diffurl => $d, + }; + } + next unless (scalar @pg > 0); + debug("recent change: " . $patch->{name}[0] . " (" + . scalar @pg . " changes)"); - my @message; - push @message, { line => $_ } for (@{$patch->{name}}); + my @message; + push @message, { line => $_ } for (@{$patch->{name}}); - my $committype; - if ($patch->{author} =~ /\@web$/) { - $committype = "web"; - } else { - $committype = "darcs"; - } + my $committype; + if ($patch->{author} =~ /\@web$/) { + $committype = "web"; + } else { + $committype = "darcs"; + } - push @ret, { - rev => $patch->{hash}, - user => $patch->{author}, - committype => $committype, - when => $when, - message => [@message], - pages => [@pg], - }; - } + push @ret, { + rev => $patch->{hash}, + user => $patch->{author}, + committype => $committype, + when => $when, + message => [@message], + pages => [@pg], + }; + } - return @ret; + return @ret; } sub rcs_diff ($) { - my $rev=shift; - my @lines; - foreach my $line (silentsystem("darcs", "diff", "--match", "hash ".$rev)) { - if (@lines || $line=~/^diff/) { - push @lines, $line."\n"; - } - } - if (wantarray) { - return @lines; - } - else { - return join("", @lines); - } + my $rev=shift; + my @lines; + foreach my $line (silentsystem("darcs", "diff", "--match", "hash ".$rev)) { + if (@lines || $line=~/^diff/) { + push @lines, $line."\n"; + } + } + if (wantarray) { + return @lines; + } + else { + return join("", @lines); + } } sub rcs_getctime ($) { - my $file=shift; + my $file=shift; - eval q{use Date::Parse}; - eval q{use XML::Simple}; - local $/=undef; + eval q{use Date::Parse}; + eval q{use XML::Simple}; + local $/=undef; - # Sigh... doing things the hard way again - my $repodir=$config{srcdir}; + # Sigh... doing things the hard way again + my $repodir=$config{srcdir}; - &loadcache; + my $filer=substr($file, length($repodir)); + $filer =~ s:^[/]+::; - my $filer=substr($file, length($repodir)); - $filer =~ s:^[/]+::; + my $child = open(LOG, "-|"); + if (! $child) { + exec("darcs", "changes", "--xml", "--reverse", + "--repodir", "$repodir", "$filer") + || error("'darcs changes $filer' failed to run"); + } - if (defined $cache{$filer}) { - #debug("taking cached ctime ".localtime($cache{$filer})." for $filer"); - return $cache{$filer}; - } + my $data; + $data .= $_ while(); + close LOG; - my $child = open(LOG, "-|"); - if (! $child) { - exec("darcs", "changes", "--xml", "--reverse", - "--repodir", "$repodir", "$filer") - || error("'darcs changes $filer' failed to run"); - } + my $log = XMLin($data, ForceArray => 1); - my $data; - $data .= $_ while(); - close LOG; + my $datestr=$log->{patch}[0]->{local_date}; - my $log = XMLin($data, ForceArray => 1); + if (! defined $datestr) { + warn "failed to get ctime for $filer"; + return 0; + } - my $datestr=$log->{patch}[0]->{local_date}; + my $date=str2time($datestr); - if (! defined $datestr) { - warn "failed to get ctime for $filer"; - $cache{$filer} = 0; - return 0; - } + #debug("found ctime ".localtime($date)." for $filer"); - my $date=str2time($datestr); - - #debug("found ctime ".localtime($date)." for $filer"); - - $cache{$filer} = $date; - return $date; + return $date; } 1 + +# vim: ts=4 sw=4 noet diff --git a/doc/ikiwiki-makerepo.mdwn b/doc/ikiwiki-makerepo.mdwn index dcebbb96a..d5034b2c7 100644 --- a/doc/ikiwiki-makerepo.mdwn +++ b/doc/ikiwiki-makerepo.mdwn @@ -4,9 +4,9 @@ ikiwiki-makerepo - check an ikiwiki srcdir into revision control # SYNOPSIS -ikiwiki-makerepo svn|git|monotone srcdir repository +ikiwiki-makerepo svn|git|monotone|darcs srcdir repository -ikiwiki-makerepo mercurial srcdir +ikiwiki-makerepo mercurial|darcs srcdir # DESCRIPTION @@ -17,6 +17,13 @@ mercurial repository. Note that for mercurial, the srcdir is converted into a mercurial repository. There is no need to have a separate repository with mercurial. +For darcs, the second (one-argument) form turns the given srcdir into a +darcs master repository with the (new) srcdir inside. Adjust your ikiwiki.setup +according to the command output! Also, the master repo's apply hook will be +preconfigured to call a (hypothetical) ikiwiki wrapper. The command +reports the relevant file. Adjust it as needed or remove it if you don't use +the cgi script. + Note that for monotone, you are assumed to already have run "mtn genkey" to generate key. diff --git a/ikiwiki-makerepo b/ikiwiki-makerepo index c3d835c30..78eea8f53 100755 --- a/ikiwiki-makerepo +++ b/ikiwiki-makerepo @@ -6,8 +6,8 @@ srcdir="$2" repository="$3" usage () { - echo "usage: ikiwiki-makerepo svn|git|monotone srcdir repository" >&2 - echo " ikiwiki-makerepo bzr|mercurial srcdir" >&2 + echo "usage: ikiwiki-makerepo svn|git|monotone|darcs srcdir repository" >&2 + echo " ikiwiki-makerepo bzr|mercurial|darcs srcdir" >&2 exit 1 } @@ -20,7 +20,7 @@ if [ ! -d "$srcdir" ]; then exit 1 fi -if [ "$rcs" != mercurial ] && [ "$rcs" != bzr ]; then +if [ "$rcs" != mercurial ] && [ "$rcs" != bzr ] && [ "$rcs" != darcs ]; then if [ -z "$repository" ]; then echo "you need to specify both a srcdir and a repository for $rcs" >&2 usage @@ -121,6 +121,40 @@ monotone) echo ' return "passphrasehere"' echo "end" ;; +darcs) + if [ -e "$srcdir/_darcs" ]; then + echo "$srcdir already seems to be a darcs repository" >&2 + exit 1 + fi + + # if only one arg is given, we turn the given srcdir into the darcs + # master repo with a hidden srcdir inside its _darcs directory. + if [ -z "$repository" ]; then + echo "Turning $srcdir into master repo." + repository="$srcdir" + srcdir="$srcdir/_darcs/srcdir" + echo "The new srcdir is $srcdir - adjust ikiwiki.setup accordingly!" + fi + + mkdir -p "$repository" + cd "$repository" + darcs initialize + + mkdir -p "$srcdir" + cd "$srcdir" + darcs initialize + echo .ikiwiki >> _darcs/prefs/boring + darcs record -a -l -q -m "initial import" + darcs pull -a -q "$repository" + darcs push -a -q "$repository" + echo "Directory $srcdir is now a branch of darcs repo $repository" + + # set up master repo's apply hook and tell user to adjust it if desired + darcsdefaults="$repository/_darcs/prefs/defaults" + echo "Preconfiguring apply hook in $darcsdefaults - adjust as desired!" + echo "apply posthook $repository/_darcs/ikiwrapper" >> "$darcsdefaults" + echo "apply run-posthook" >> "$darcsdefaults" +;; *) echo "Unsupported revision control system $rcs" >&2 usage From 78a69e5bd632eb86ef8135e9c1d05d2c48b43362 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 16 Oct 2008 17:20:17 -0400 Subject: [PATCH 003/113] only darcs add files not yet in version control --- IkiWiki/Plugin/darcs.pm | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/IkiWiki/Plugin/darcs.pm b/IkiWiki/Plugin/darcs.pm index 27ea6b6dd..1facc1789 100644 --- a/IkiWiki/Plugin/darcs.pm +++ b/IkiWiki/Plugin/darcs.pm @@ -88,14 +88,14 @@ sub darcs_info ($$$) { ($_) = =~ /$field=\'([^\']+)/; $field eq 'hash' and s/\.gz//; # Strip away the '.gz' from 'hash'es. - close(DARCS_CHANGES) or error("'darcs changes' exited " . $?); + close(DARCS_CHANGES); return $_; } -sub darcs_rev($) { - my $file = shift; # Relative to the repodir. - my $repodir = $config{srcdir}; +sub file_in_vc($$) { + my $repodir = shift; + my $file = shift; my $child = open(DARCS_MANIFEST, "-|"); if (! $child) { @@ -104,11 +104,18 @@ sub darcs_rev($) { } my $found=0; while () { - $found = 1, last if /^$file$/; + $found = 1, last if /^(\.\/)?$file$/; } - return "" if (! $found); close(DARCS_MANIFEST) or error("'darcs query manifest' exited " . $?); + return $found; +} + +sub darcs_rev($) { + my $file = shift; # Relative to the repodir. + my $repodir = $config{srcdir}; + + return "" if (! file_in_vc($repodir, $file)); my $hash = darcs_info('hash', $repodir, $file); return defined $hash ? $hash : ""; } @@ -304,9 +311,11 @@ sub rcs_commit_staged($$$) { sub rcs_add ($) { my $file = shift; # Relative to the repodir. - # Intermediate directories will be added automagically. - system('darcs', 'add', '--quiet', '--repodir', $config{srcdir}, - '--boring', $file) and error("'darcs add' failed"); + if(! file_in_vc($config{srcdir}, $file)) { + # Intermediate directories will be added automagically. + system('darcs', 'add', '--quiet', '--repodir', $config{srcdir}, + '--boring', $file) and error("'darcs add' failed"); + } } sub rcs_remove ($) { From 82c3f6d7f4c8dd00589ba3c039856d6620ec2456 Mon Sep 17 00:00:00 2001 From: chrysn Date: Sun, 29 Mar 2009 20:33:00 +0200 Subject: [PATCH 004/113] clarification on autotitle (todo title seems unclear in retrospect) --- ...nline_autotitles.mdwn => inline_postform_autotitles.mdwn} | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) rename doc/todo/{inline_autotitles.mdwn => inline_postform_autotitles.mdwn} (92%) diff --git a/doc/todo/inline_autotitles.mdwn b/doc/todo/inline_postform_autotitles.mdwn similarity index 92% rename from doc/todo/inline_autotitles.mdwn rename to doc/todo/inline_postform_autotitles.mdwn index 8bf71deae..5005208be 100644 --- a/doc/todo/inline_autotitles.mdwn +++ b/doc/todo/inline_postform_autotitles.mdwn @@ -1,8 +1,9 @@ [[!tag wishlist]] [[!tag patch]] -for inlines of pages which follow a certain scheme, it might not be required to -set the title for each individual post, but to automatically set the title. +for postforms in inlines of pages which follow a certain scheme, it might not +be required to set the title for each individual post, but to automatically set +the title and show no input box prompting for it. this can either be based on timestamp formatting, or use the already existing munging mechanism, which appends numbers to page titles in case that page already exists. From b1551ed0e297e75492e578bf2445fcde99dad86a Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 29 Mar 2009 14:54:08 -0400 Subject: [PATCH 005/113] review --- doc/plugins/contrib/po.mdwn | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/doc/plugins/contrib/po.mdwn b/doc/plugins/contrib/po.mdwn index 3f128c9f8..3f5a65c05 100644 --- a/doc/plugins/contrib/po.mdwn +++ b/doc/plugins/contrib/po.mdwn @@ -332,12 +332,44 @@ daring a timid "please pull"... or rather, please review again :) > Ok, I've reviewed and merged into my own po branch. It's looking very > mergeable. I would still like to go over the `po.pm` code in detail and > review it, but it's very complex, and I'm happy with all the changes -> outside `po.pm`. +> outside `po.pm`. (Reviewed the first 520 lines, up to injected +> functions.) > > * Is it worth trying to fix compatability with `indexpages`? +>> +>> Supporting `usedirs` being enabled or disabled was already quite +>> hard IIRC, so supporting all four combinations of `usedirs` and +>> `indexpages` settings will probably be painful. I propose we forget +>> about it until someone reports he/she badly needs it, and then +>> we'll see what can be done. +>> > * Would it make sense to go ahead and modify `page.tmpl` to use > OTHERLANGUAGES and PERCENTTRANSLATED, instead of documenting how to modify it? +>> +>> Done in my branch. +>> > * Would it be better to disable po support for pages that use unsupported > or poorly-supported markup languages? > +>> I prefer keeping it enabled, as: +>> +>> * most wiki markups "almost work" +>> * when someone needs one of these to be fully supported, it's not +>> that hard to add dedicated support for it to po4a; if it were +>> disabled, I fear the ones who could do this would maybe think +>> it's blandly impossible and give up. +>> +> +> * What's the reasoning behind checking that the link plugin +> is enabled? AFAICS, the same code in the scan hook should +> also work when other link plugins like camelcase are used. +> * In `pagetemplate` there is a comment that claims the code +> relies on `genpage`, but I don't see how it does; it seems +> to always add a discussion link? +> * Is there any real reason not to allow removing a translation? +> I'm imagining a spammy translation, which an admin might not +> be able to fix, but could remove. +> > --[[Joey]] +>> +>> --[[intrigeri]] From b94b0b564d90b357d2cb1ba5a5d364f8802fed3b Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 29 Mar 2009 15:25:14 -0400 Subject: [PATCH 006/113] another issue --- doc/plugins/contrib/po.mdwn | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/doc/plugins/contrib/po.mdwn b/doc/plugins/contrib/po.mdwn index 618e16598..fba8de282 100644 --- a/doc/plugins/contrib/po.mdwn +++ b/doc/plugins/contrib/po.mdwn @@ -369,6 +369,17 @@ daring a timid "please pull"... or rather, please review again :) > * Is there any real reason not to allow removing a translation? > I'm imagining a spammy translation, which an admin might not > be able to fix, but could remove. +> * Re the meta title escaping issue worked around by `change`. +> I suppose this does not only affect meta, but other things +> at scan time too. Also, handling it only on rebuild feels +> suspicious -- a refresh could involve changes to multiple +> pages and trigger the same problem, I think. Also, exposing +> this rebuild to the user seems really ugly, not confidence inducing. +> +> So I wonder if there's a better way. Such as making po, at scan time, +> re-run the scan hooks, passing them modified content (either converted +> from po to mdwn or with the escaped stuff cheaply de-escaped). (Of +> course the scan hook would need to avoid calling itself!) > > --[[Joey]] >> From 843b9c579c885a7ea2c1830c53cd296bce25820f Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 29 Mar 2009 15:37:26 -0400 Subject: [PATCH 007/113] comment --- doc/plugins/contrib/po.mdwn | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/plugins/contrib/po.mdwn b/doc/plugins/contrib/po.mdwn index fba8de282..8d1fe4c3e 100644 --- a/doc/plugins/contrib/po.mdwn +++ b/doc/plugins/contrib/po.mdwn @@ -380,6 +380,9 @@ daring a timid "please pull"... or rather, please review again :) > re-run the scan hooks, passing them modified content (either converted > from po to mdwn or with the escaped stuff cheaply de-escaped). (Of > course the scan hook would need to avoid calling itself!) +> +> (This doesn't need to block the merge, but I hope it can be addressed +> eventually..) > > --[[Joey]] >> From 06dc69946fc87ec750693636b94990edd8c899ff Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 29 Mar 2009 15:56:56 -0400 Subject: [PATCH 008/113] done reviewing po.pm (Still a few bits I haven't bothered fully comprehending in detail.) --- doc/plugins/contrib/po.mdwn | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/doc/plugins/contrib/po.mdwn b/doc/plugins/contrib/po.mdwn index 8d1fe4c3e..61ec53ea8 100644 --- a/doc/plugins/contrib/po.mdwn +++ b/doc/plugins/contrib/po.mdwn @@ -330,10 +330,7 @@ daring a timid "please pull"... or rather, please review again :) --[[intrigeri]] > Ok, I've reviewed and merged into my own po branch. It's looking very -> mergeable. I would still like to go over the `po.pm` code in detail and -> review it, but it's very complex, and I'm happy with all the changes -> outside `po.pm`. (Reviewed the first 520 lines, up to injected -> functions.) +> mergeable. > > * Is it worth trying to fix compatability with `indexpages`? >> From 7bbe9cf94d75b52fe979d87e4e3951514dbd1b76 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 30 Mar 2009 13:07:50 -0400 Subject: [PATCH 009/113] Fix documentation of anonok_pagespec. Closes: #521793 --- debian/changelog | 1 + doc/plugins/anonok.mdwn | 4 ++-- doc/plugins/comments/discussion.mdwn | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index 158db9a4d..581a3bf33 100644 --- a/debian/changelog +++ b/debian/changelog @@ -10,6 +10,7 @@ ikiwiki (3.09) UNRELEASED; urgency=low * comments: Fix too loose test for comments pages that matched normal pages with "comment_" in their name. Closes: #521322 * comments: Fix anchor ids to be legal xhtml. Closes: #521339 + * Fix documentation of anonok_pagespec. Closes: #521793 -- Joey Hess Thu, 19 Mar 2009 15:32:49 -0400 diff --git a/doc/plugins/anonok.mdwn b/doc/plugins/anonok.mdwn index ab2f744e2..a3fec4d89 100644 --- a/doc/plugins/anonok.mdwn +++ b/doc/plugins/anonok.mdwn @@ -5,10 +5,10 @@ By default, anonymous users cannot edit the wiki. This plugin allows anonymous web users, who have not signed in, to edit any page in the wiki by default. -The plugin also has a configuration setting, `anonok_pages`. This +The plugin also has a configuration setting, `anonok_pagespec`. This [[PageSpec]] can be used to allow anonymous editing of matching pages. If you're using the [[comments]] plugin, you can allow anonymous comments to be posted by setting: - anonok_pages => "postcomment(*)" + anonok_pagespec => "postcomment(*)" diff --git a/doc/plugins/comments/discussion.mdwn b/doc/plugins/comments/discussion.mdwn index 2a87a3d93..3d7452b9a 100644 --- a/doc/plugins/comments/discussion.mdwn +++ b/doc/plugins/comments/discussion.mdwn @@ -60,7 +60,7 @@ spam problems. So, use `check_canedit` as at least a first-level check? > have postcomment(blog/*) or something. (Perhaps instead of taking a glob, postcomment > should take a pagespec, so you can have postcomment(link(tags/commentable))?) > -> This is why `anonok_pages => 'postcomment(*)'` and `locked_pages => '!postcomment(*)'` +> This is why `anonok_pagespec => 'postcomment(*)'` and `locked_pages => '!postcomment(*)'` > are necessary to allow anonymous and logged-in editing (respectively). > >> I changed that to move the flag out of the page name, and into a variable that the `match_postcomment` From 790b4ecbe80e2d362b63be74316c151e3e29fb59 Mon Sep 17 00:00:00 2001 From: "http://www.tychoish.com/" Date: Mon, 30 Mar 2009 17:25:43 -0400 Subject: [PATCH 010/113] cgi issue --- ...lder__44___non-existent_field_address.mdwn | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 doc/bugs/CGI__44___formbuilder__44___non-existent_field_address.mdwn diff --git a/doc/bugs/CGI__44___formbuilder__44___non-existent_field_address.mdwn b/doc/bugs/CGI__44___formbuilder__44___non-existent_field_address.mdwn new file mode 100644 index 000000000..d86de048f --- /dev/null +++ b/doc/bugs/CGI__44___formbuilder__44___non-existent_field_address.mdwn @@ -0,0 +1,43 @@ +Error received when clicking on the "edit" link: + +> `Error: [CGI::FormBuilder::AUTOLOAD] Fatal: Attempt to address +> non-existent field 'text' by name at +> /home/tealart/bin/share/perl/5.8.4/IkiWiki/CGI.pm line 112` + +Error received when following a "Create New Page" (eg. ?) link: + +> `Error: [CGI::FormBuilder::AUTOLOAD] Fatal: Attempt to address +> non-existent field 'param' by name at +> /home/tealart/bin/share/perl/5.8.4/IkiWiki/Plugin/editpage.pm line 122` + +I could probably find several other flavors of this error if I went +looking, but I trust you get the idea. + +The CGI starts to render (this isn't the "you forgot to set the +permissions/turn on the CGI" error) and then fails. + +Further details: + +- Running on shared hosting (dreamhost; but everything compiles, + dependencies installed, the site generates perfectly, other CGIs + work, the file permissions work). + +- It's running perl 5.8.4, but I did upgrade gettext to 0.17 + +- the server is running gcc v3.3.5 (at this point, this is the main + difference between the working system and my box.) + +- I've removed the locale declarations from both the config file and + the environment variable. + +- I've also modified the page template and have my templates in a non + standard location. The wiki compiles fine, with the template, but + might this be an issue? The CGI script doesn't (seem) to load under + the new template, but I'm not sure how to address this issue. + +- All of the required/suggested module dependencies are installed + (finally) to the latest version including (relevantly) + CGI::FormBuilder 3.0501. + +- I'm running ikiwiki v3.08. Did I mention that it works perfectly in + nearly every other way that I've managed to test thusfar? From 28803a493d62c0fde72a87bedc24a69329f00d1a Mon Sep 17 00:00:00 2001 From: "http://joey.kitenet.net/" Date: Mon, 30 Mar 2009 17:55:37 -0400 Subject: [PATCH 011/113] --- ...__formbuilder__44___non-existent_field_address.mdwn | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/doc/bugs/CGI__44___formbuilder__44___non-existent_field_address.mdwn b/doc/bugs/CGI__44___formbuilder__44___non-existent_field_address.mdwn index d86de048f..217a382ed 100644 --- a/doc/bugs/CGI__44___formbuilder__44___non-existent_field_address.mdwn +++ b/doc/bugs/CGI__44___formbuilder__44___non-existent_field_address.mdwn @@ -41,3 +41,13 @@ Further details: - I'm running ikiwiki v3.08. Did I mention that it works perfectly in nearly every other way that I've managed to test thusfar? + +---- + +> I suspect that your perl is too old and is incompatible with the version of CGI::FormBuilder you have installed. +> +> Is so, it seems likely that the same error message can be reproduced by running a simple command like this at the command line: +> +> perl -e 'use warnings; use strict; use CGI::FormBuilder; my $form=CGI::FormBuilder->new; $form->text("boo")' +> +> --[[Joey]] From b19c786c6162f50f854f22c1fd8a4d59220abab4 Mon Sep 17 00:00:00 2001 From: "http://www.tychoish.com/" Date: Mon, 30 Mar 2009 18:04:56 -0400 Subject: [PATCH 012/113] --- ...__44___formbuilder__44___non-existent_field_address.mdwn | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/doc/bugs/CGI__44___formbuilder__44___non-existent_field_address.mdwn b/doc/bugs/CGI__44___formbuilder__44___non-existent_field_address.mdwn index 217a382ed..ef74deb91 100644 --- a/doc/bugs/CGI__44___formbuilder__44___non-existent_field_address.mdwn +++ b/doc/bugs/CGI__44___formbuilder__44___non-existent_field_address.mdwn @@ -51,3 +51,9 @@ Further details: > perl -e 'use warnings; use strict; use CGI::FormBuilder; my $form=CGI::FormBuilder->new; $form->text("boo")' > > --[[Joey]] + +> > nope, that command produces no output. :/ +> > +> > I considered downgrading CGI::FormBuilder but I saw evidence of previous versions being incompatible with ikiwiki so I decided against that. +> > +> > -- [[tychoish]] From e2cf170abd8c0e41cb6efcc3d7766042237a99a7 Mon Sep 17 00:00:00 2001 From: "http://drunkenmonk.myopenid.com/" Date: Tue, 31 Mar 2009 09:23:05 -0400 Subject: [PATCH 013/113] --- doc/setup/discussion.mdwn | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/setup/discussion.mdwn b/doc/setup/discussion.mdwn index 89114d7a2..e76352717 100644 --- a/doc/setup/discussion.mdwn +++ b/doc/setup/discussion.mdwn @@ -1,3 +1,8 @@ +I just attempted to install ikiwiki on my debian server (sudo aptitude install ikiwiki, followed by an attempt with apt-get just in case). However, the only file created in /etc/ikiwiki is the 'wikilist' file, which makes following the rest of the install instructions difficult. I was not able to quickly locate a place to dl the .setup files, either. + +Thought you'd like to know. + + I just went through the standard procedure described for setup, copied the blog directory from examples into my source directory, ran ikiwiki, and everything seems to have worked, except that none of the [[!meta ... ]] tags get converted. They simply show up in the html files unformatted, with no exclamation point, and with p tags around them. Any ideas? using ikiwiki version 2.40 on freebsd --mjg From a1fa2492879630efc4416be8ceae94ecf73b8647 Mon Sep 17 00:00:00 2001 From: "http://drunkenmonk.myopenid.com/" Date: Tue, 31 Mar 2009 09:46:53 -0400 Subject: [PATCH 014/113] Realised apt-get installs old version and decided that the chances that comment was relevant was slim. --- doc/setup/discussion.mdwn | 5 ----- 1 file changed, 5 deletions(-) diff --git a/doc/setup/discussion.mdwn b/doc/setup/discussion.mdwn index e76352717..89114d7a2 100644 --- a/doc/setup/discussion.mdwn +++ b/doc/setup/discussion.mdwn @@ -1,8 +1,3 @@ -I just attempted to install ikiwiki on my debian server (sudo aptitude install ikiwiki, followed by an attempt with apt-get just in case). However, the only file created in /etc/ikiwiki is the 'wikilist' file, which makes following the rest of the install instructions difficult. I was not able to quickly locate a place to dl the .setup files, either. - -Thought you'd like to know. - - I just went through the standard procedure described for setup, copied the blog directory from examples into my source directory, ran ikiwiki, and everything seems to have worked, except that none of the [[!meta ... ]] tags get converted. They simply show up in the html files unformatted, with no exclamation point, and with p tags around them. Any ideas? using ikiwiki version 2.40 on freebsd --mjg From b1f9996078314bd1b05e66e2962fb067754a36be Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 31 Mar 2009 14:16:32 -0400 Subject: [PATCH 015/113] Add missing suggests on libtext-textile-perl. Closes: #522039 --- debian/changelog | 1 + debian/control | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 581a3bf33..a3ff97d30 100644 --- a/debian/changelog +++ b/debian/changelog @@ -11,6 +11,7 @@ ikiwiki (3.09) UNRELEASED; urgency=low normal pages with "comment_" in their name. Closes: #521322 * comments: Fix anchor ids to be legal xhtml. Closes: #521339 * Fix documentation of anonok_pagespec. Closes: #521793 + * Add missing suggests on libtext-textile-perl. Closes: #522039 -- Joey Hess Thu, 19 Mar 2009 15:32:49 -0400 diff --git a/debian/control b/debian/control index 8f48bf98a..a0769cbce 100644 --- a/debian/control +++ b/debian/control @@ -14,7 +14,7 @@ Package: ikiwiki Architecture: all Depends: ${misc:Depends}, ${perl:Depends}, libtext-markdown-perl | markdown, libhtml-scrubber-perl, libhtml-template-perl, libhtml-parser-perl, liburi-perl Recommends: gcc | c-compiler, libc6-dev | libc-dev, subversion | git-core (>= 1:1.5.0) | tla | bzr (>= 0.91) | mercurial | monotone (>= 0.38), libxml-simple-perl, libnet-openid-consumer-perl, liblwpx-paranoidagent-perl, libtimedate-perl, libcgi-formbuilder-perl (>= 3.05), libcgi-session-perl (>= 4.14-1), libmail-sendmail-perl, libauthen-passphrase-perl, libterm-readline-gnu-perl -Suggests: viewvc | gitweb | viewcvs, libsearch-xapian-perl, xapian-omega (>= 1.0.5), librpc-xml-perl, libtext-wikiformat-perl, python, python-docutils, polygen, tidy, libhtml-tree-perl, libxml-feed-perl, libmailtools-perl, perlmagick, libfile-mimeinfo-perl, libcrypt-ssleay-perl, liblocale-gettext-perl (>= 1.05-1), libtext-typography-perl, libtext-csv-perl, libdigest-sha1-perl, graphviz, libnet-amazon-s3-perl, sparkline-php, texlive, dvipng, libtext-wikicreole-perl, libsort-naturally-perl +Suggests: viewvc | gitweb | viewcvs, libsearch-xapian-perl, xapian-omega (>= 1.0.5), librpc-xml-perl, libtext-wikiformat-perl, python, python-docutils, polygen, tidy, libhtml-tree-perl, libxml-feed-perl, libmailtools-perl, perlmagick, libfile-mimeinfo-perl, libcrypt-ssleay-perl, liblocale-gettext-perl (>= 1.05-1), libtext-typography-perl, libtext-csv-perl, libdigest-sha1-perl, graphviz, libnet-amazon-s3-perl, sparkline-php, texlive, dvipng, libtext-wikicreole-perl, libsort-naturally-perl, libtext-textile-perl Conflicts: ikiwiki-plugin-table Replaces: ikiwiki-plugin-table Provides: ikiwiki-plugin-table From 33fa78a66f1248b7cec4cba21d125117dffa9c90 Mon Sep 17 00:00:00 2001 From: "http://hendry.iki.fi/" Date: Tue, 31 Mar 2009 15:06:06 -0400 Subject: [PATCH 016/113] URL update --- doc/ikiwikiusers.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/ikiwikiusers.mdwn b/doc/ikiwikiusers.mdwn index 1a24ff322..94ae75046 100644 --- a/doc/ikiwikiusers.mdwn +++ b/doc/ikiwikiusers.mdwn @@ -41,7 +41,7 @@ Projects & Organizations * The [Fortran Wiki](http://fortranwiki.org/) * [Monotone](http://monotone.ca/wiki/FrontPage/) * The support pages for [Trinity Centre for High Performance Computing](http://www.tchpc.tcd.ie/support/) -* [St Hugh of Lincoln Primary School in Surrey](http://hugh.vm.bytemark.co.uk/) +* [St Hugh of Lincoln Catholic Primary School in Surrey](http://www.sthugh-of-lincoln.surrey.sch.uk/) * [Pigro Network](http://www.pigro.net) is running a hg based ikiwiki. (And provides ikiwiki hosting for $10/m.) * [Cosin Homepage](http://cosin.ch) uses an Ikiwiki with a subversion repository. * [Bosco Free Orienteering Software](http://bosco.durcheinandertal.ch) From 0d2769f4bae4e44e20c6cc5d9f9b3dec3d5effd2 Mon Sep 17 00:00:00 2001 From: "http://seanh.myopenid.com/" Date: Wed, 1 Apr 2009 07:26:06 -0400 Subject: [PATCH 017/113] --- doc/forum/How_does_ikiwiki_remember_times__63__.mdwn | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 doc/forum/How_does_ikiwiki_remember_times__63__.mdwn diff --git a/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn b/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn new file mode 100644 index 000000000..c23f0b100 --- /dev/null +++ b/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn @@ -0,0 +1,10 @@ +This is similar to the last post in this forum. I want to know exactly how ikiwiki remembers the times associated with pages, especially when using it for blogging, so I know whether I can trust it or not. From that last thread, I think what ikiwiki does is this: + +* The created time of a file is when that file was first committed into the versioning repository (in my case git) +* The modified time of a file is what that file was last updated in the repository + +And with a blog, by default, the posts are ordered by creation time, although an option can order them by modified time. + +Okay. So this should mean that the times are safe if, for example, I delete my working copy and then clone another one from the bare git repository, or otherwise mess up the creation times and mtimes stored as file metadata on the filesystem. + +Do I have it right? From cb09a4eb875f3c609d0d283d08c64643ee3ccfe2 Mon Sep 17 00:00:00 2001 From: Jon Dowland Date: Wed, 1 Apr 2009 12:31:33 +0100 Subject: [PATCH 018/113] response --- doc/forum/managing_todo_lists.mdwn | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/forum/managing_todo_lists.mdwn b/doc/forum/managing_todo_lists.mdwn index b4bbac255..0a69af805 100644 --- a/doc/forum/managing_todo_lists.mdwn +++ b/doc/forum/managing_todo_lists.mdwn @@ -39,3 +39,6 @@ sure how to handle embeds or challenges from the CGI such as a login challenge >> thanks - I'll give it a look. I spent a few hours writing some javascript to manipulate a ul/li DOM tree in an outliner-fashion the other day. I might be able to join the puzzle pieces together sometime. [[Jon]] a solution for this could be similar to a solution for [[todo/structured page data]], as todo lists are definitely a form of structured data. (in both cases, the page's current content is rendered into a html form, whose result is then saved as the page's new contents) --[[chrysn]] + +> Thanks for the link: yup, there's definitely some common ground there. +> -- [[Jon]] From 3496eac54b05afd2c45c225e788a928bf4289704 Mon Sep 17 00:00:00 2001 From: Jon Dowland Date: Wed, 1 Apr 2009 12:33:33 +0100 Subject: [PATCH 019/113] move managing todo lists to 'todo' section --- doc/{forum => todo}/managing_todo_lists.mdwn | 11 +++++++++++ 1 file changed, 11 insertions(+) rename doc/{forum => todo}/managing_todo_lists.mdwn (84%) diff --git a/doc/forum/managing_todo_lists.mdwn b/doc/todo/managing_todo_lists.mdwn similarity index 84% rename from doc/forum/managing_todo_lists.mdwn rename to doc/todo/managing_todo_lists.mdwn index 0a69af805..846f2a4af 100644 --- a/doc/forum/managing_todo_lists.mdwn +++ b/doc/todo/managing_todo_lists.mdwn @@ -42,3 +42,14 @@ a solution for this could be similar to a solution for [[todo/structured page da > Thanks for the link: yup, there's definitely some common ground there. > -- [[Jon]] + +---- + +I had a little spare time in a conference recently so I hacked on this. I +managed to get something working with anonok, a "markup format" that was +essentially just UL and LI elements and some javascript. I'll try and get an +example up of that soon (and publish the code). There's still quite a lot of +work necessary, but it's more than an idle thought at least! + +I've moved this page under the [[todo]] heirarchy as I'm actually working on +this now. -- [[Jon]] From 9a7e8096c09efdb7d36656ad6e4aae4dec49a39b Mon Sep 17 00:00:00 2001 From: Jon Dowland Date: Wed, 1 Apr 2009 13:30:20 +0100 Subject: [PATCH 020/113] Revert "move managing todo lists to 'todo' section" This reverts commit 3496eac54b05afd2c45c225e788a928bf4289704. Rather than move the existing forum topic (and confuse anyone who expected to find it there) I will create a new TODO item, structured more traditionally. --- doc/{todo => forum}/managing_todo_lists.mdwn | 11 ----------- 1 file changed, 11 deletions(-) rename doc/{todo => forum}/managing_todo_lists.mdwn (84%) diff --git a/doc/todo/managing_todo_lists.mdwn b/doc/forum/managing_todo_lists.mdwn similarity index 84% rename from doc/todo/managing_todo_lists.mdwn rename to doc/forum/managing_todo_lists.mdwn index 846f2a4af..0a69af805 100644 --- a/doc/todo/managing_todo_lists.mdwn +++ b/doc/forum/managing_todo_lists.mdwn @@ -42,14 +42,3 @@ a solution for this could be similar to a solution for [[todo/structured page da > Thanks for the link: yup, there's definitely some common ground there. > -- [[Jon]] - ----- - -I had a little spare time in a conference recently so I hacked on this. I -managed to get something working with anonok, a "markup format" that was -essentially just UL and LI elements and some javascript. I'll try and get an -example up of that soon (and publish the code). There's still quite a lot of -work necessary, but it's more than an idle thought at least! - -I've moved this page under the [[todo]] heirarchy as I'm actually working on -this now. -- [[Jon]] From 8f485a813e4991be6dd9f638871ebe8409c03be2 Mon Sep 17 00:00:00 2001 From: Jon Dowland Date: Wed, 1 Apr 2009 13:34:12 +0100 Subject: [PATCH 021/113] update user page --- doc/users/jon.mdwn | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/doc/users/jon.mdwn b/doc/users/jon.mdwn index 3e22ded1d..0f8f60021 100644 --- a/doc/users/jon.mdwn +++ b/doc/users/jon.mdwn @@ -4,8 +4,9 @@ team-documentation management system for a small-sized group of UNIX sysadmins. * my edits should appear either as 'Jon' (if I've used - [[tips/untrusted_git_push]]) or 'alcopop.org/me/openid/'. -* My [homepage](http://jmtd.net/) is powered by ikiwiki (replacing my [older homepage](http://alcopop.org/), which was a mess of scripts) + [[tips/untrusted_git_push]]) or 'jmtd.net (or once upon a time + 'alcopop.org/me/openid/'). +* My [homepage](http://jmtd.net/) is powered by ikiwiki I gave a talk at the [UK UNIX User's Group](http://www.ukuug.org/) annual [Linux conference](http://www.ukuug.org/events/linux2008/) about organising @@ -14,3 +15,6 @@ discussing IkiWiki in some technical detail and suggesting it as a good piece of software for this task. * slides at . + +I am also working on some ikiwiki hacks: an alternative approach to +[[plugins/comments]]; a system for [[forum/managing_todo_lists]]. From f7037f4870c4a34becf32f4bd953d7d6ddcf556b Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 1 Apr 2009 13:47:41 -0400 Subject: [PATCH 022/113] happy Make Big Confusing Proposal Day --- doc/todo/rewrite_ikiwiki_in_haskell.mdwn | 68 ++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 doc/todo/rewrite_ikiwiki_in_haskell.mdwn diff --git a/doc/todo/rewrite_ikiwiki_in_haskell.mdwn b/doc/todo/rewrite_ikiwiki_in_haskell.mdwn new file mode 100644 index 000000000..204c48cd7 --- /dev/null +++ b/doc/todo/rewrite_ikiwiki_in_haskell.mdwn @@ -0,0 +1,68 @@ +[[!tag wishlist blue-sky]] + +In the long term, I have been considering rewriting ikiwiki in haskell. +It's appealing for a lot of reasons, including: + +* No need to depend on a C compiler and have wrappers. Instead, ikiwiki + binaries could be built on demand to do the things wrappers are used for + now (cgi, post-commit, etc). +* Potentially much faster. One problem with the now very modular ikiwiki is + that it has to load up dozens of perl modules each time it runs, which + means both opening lots of files and evaluating them. A haskell version + could run from one pre-compiled file. Other speed efficienies are also + likely with haskell. For example, pandoc is apparently an order of + magnitude faster than perl markdown implementations. +* Many plugins could be written in pure functional code, with no side + effects. Not all of them, of course. +* It should be much easier to get ikiwiki to support parallel compilation + on multi-core systems using haskell. +* A rewrite would be an opportunity to utterly break compatability and + redo things based on experience. Since the haskell libraries used for + markdown, templates, etc, are unlikely to be very compatable with the perl + versions, and since perl plugins obviously wouldn't work, and perl setup + files wouldn't be practical to keep, a lot of things would unavoidably + change, and at that point changinge everything else I can think of + probably wouldn't hurt (much). + + - Re templates, it would be nice to have a template library that + doesn't use html-ish templating tags, since those are hard for users to + edit in html editors currently. + - This would be a chance to make WikiLinks with link texts read + "the right way round" (ie, vaguely wiki creole compatably). + - The data structures would probably be quite different. + - I might want to drop a lot of the command-line flags, either + requiring a setup file be used for those things, or leaving the + general-purpose `--set var=value` flag. + - Sometimes the current behavior of `--setup` seems confusing; it might + only cause a setup file to be read, and not force rebuild mode. + - Hard to say how the very high level plugin interface design would change, + but at the least some of the names of hooks could stand a rename, and + their parameter passing cleaned up. + +We know that a big, break-the-world rewrite like this can be a very +bad thing for a project to attempt. It would be possible to support +external plugins written in haskell today, without any rewrite; and a few +of the benefits could be obtained by, eg, making the mdwn plugin be a +haskell program that uses pandoc. I doubt that wouod be a good first step +to converting ikiwiki to haskell, because such a program would have very +different data structures and intercommuniucation than a pure haskell +version. + +Some other things to be scared about: + +* By picking perl, I made a lot of people annoyed (and probably turned + several people away from using ikiwiki). But over time there turned out + to be a lot of folks who knew perl already (even if rustily), and made + some *very* useful contributions. I doubt there's as large a pool of haskell + programmers, and it's probably harder for a python user to learn haskell + than perl if they want to contribute to ikiwiki. +* It might be harder for users of hosting services to install a haskell based + ikiwiki than the perl version. Such systems probably don't have ghc and + a bunch of haskell libraries. OTOH, it might be possible to build a + static binary at home and upload it, thus avoiding a messy installation + procedure entirely. +* I can barely code in haskell yet. I'm probably about 100x faster at + programming in perl. I need to get some more practical experience before + I´m fast and seasoned enough in haskell to attempt such a project. + (And so far, progress at learning has been slow and I have not managed + to write anything serious in haskell.) --[[Joey]] From 9b234fa7a58d0662368714e777eb7b6e818eeaa6 Mon Sep 17 00:00:00 2001 From: Jon Dowland Date: Wed, 1 Apr 2009 23:04:18 +0100 Subject: [PATCH 023/113] ncevy sbbyf? --- doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn diff --git a/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn new file mode 100644 index 000000000..badd28a6d --- /dev/null +++ b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn @@ -0,0 +1,3 @@ +Ok, I have to admit, I have no idea if this is an April fool's joke or not. +Congratulations for demonstrating that April fools jokes can still be subtle +(whether intentionally or not!) -- [[Jon]] From a86f50dc08fd890b5aee1cdedb13cacd3f1b8038 Mon Sep 17 00:00:00 2001 From: "http://jmtd.net/" Date: Wed, 1 Apr 2009 18:10:54 -0400 Subject: [PATCH 024/113] --- doc/bugs/user_links_on_recentchanges_pages_problem.mdwn | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 doc/bugs/user_links_on_recentchanges_pages_problem.mdwn diff --git a/doc/bugs/user_links_on_recentchanges_pages_problem.mdwn b/doc/bugs/user_links_on_recentchanges_pages_problem.mdwn new file mode 100644 index 000000000..62fa1c8e9 --- /dev/null +++ b/doc/bugs/user_links_on_recentchanges_pages_problem.mdwn @@ -0,0 +1,9 @@ +When I click on a linked username for commits on the recentchanges page (on +the live ikiwiki.info) I get a link such as + +which returns something like + + ikiwiki/ Error +

Error: unknown do parameter + +-- [[Jon]] From 4dc18dab672f2dcad12b59b52c254f65f159a112 Mon Sep 17 00:00:00 2001 From: "http://jmtd.net/" Date: Wed, 1 Apr 2009 18:12:27 -0400 Subject: [PATCH 025/113] add an apostrophe and other minor thing --- doc/users/jon.mdwn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/users/jon.mdwn b/doc/users/jon.mdwn index 0f8f60021..1cda23999 100644 --- a/doc/users/jon.mdwn +++ b/doc/users/jon.mdwn @@ -4,8 +4,8 @@ team-documentation management system for a small-sized group of UNIX sysadmins. * my edits should appear either as 'Jon' (if I've used - [[tips/untrusted_git_push]]) or 'jmtd.net (or once upon a time - 'alcopop.org/me/openid/'). + [[tips/untrusted_git_push]]) or 'jmtd.net' (or once upon a time + 'alcopop.org/me/openid/' or 'jondowland'). * My [homepage](http://jmtd.net/) is powered by ikiwiki I gave a talk at the [UK UNIX User's Group](http://www.ukuug.org/) annual From e81e06641641f60629f24da93f1e2d64b3288f2a Mon Sep 17 00:00:00 2001 From: Jon Dowland Date: Wed, 1 Apr 2009 23:13:28 +0100 Subject: [PATCH 026/113] erlang/couchdb --- doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn index badd28a6d..a12a5fe27 100644 --- a/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn +++ b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn @@ -1,3 +1,6 @@ Ok, I have to admit, I have no idea if this is an April fool's joke or not. Congratulations for demonstrating that April fools jokes can still be subtle (whether intentionally or not!) -- [[Jon]] + +> Having said all that, have you looked at erlang? Have you heard of couchdb? +> I'd strongly recommend looking at that. -- [[Jon]] From 0c67efb90e5965de5149902a402c74a58aaa7525 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 1 Apr 2009 19:16:53 -0400 Subject: [PATCH 027/113] response --- doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn index a12a5fe27..5f33d0ae7 100644 --- a/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn +++ b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn @@ -4,3 +4,6 @@ Congratulations for demonstrating that April fools jokes can still be subtle > Having said all that, have you looked at erlang? Have you heard of couchdb? > I'd strongly recommend looking at that. -- [[Jon]] + +>> I've glanced at couchdb, but don't see how it would tie in with ikiwiki. +>> --[[Joey]] From 72b9482835faabcef13a22c9c9af3314da5a71f3 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 1 Apr 2009 19:18:43 -0400 Subject: [PATCH 028/113] recentchanges: change to using do=goto links. --- IkiWiki/Plugin/recentchanges.pm | 2 +- debian/changelog | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/IkiWiki/Plugin/recentchanges.pm b/IkiWiki/Plugin/recentchanges.pm index 329dd6f32..fa851e466 100644 --- a/IkiWiki/Plugin/recentchanges.pm +++ b/IkiWiki/Plugin/recentchanges.pm @@ -123,7 +123,7 @@ sub store ($$$) { } elsif (length $config{cgiurl}) { $change->{authorurl} = IkiWiki::cgiurl( - do => "recentchanges_link", + do => "goto", page => (length $config{userdir} ? "$config{userdir}/" : "").$change->{author}, ); } diff --git a/debian/changelog b/debian/changelog index a3ff97d30..25ed0dce9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -12,6 +12,7 @@ ikiwiki (3.09) UNRELEASED; urgency=low * comments: Fix anchor ids to be legal xhtml. Closes: #521339 * Fix documentation of anonok_pagespec. Closes: #521793 * Add missing suggests on libtext-textile-perl. Closes: #522039 + * recentchanges: change to using do=goto links. -- Joey Hess Thu, 19 Mar 2009 15:32:49 -0400 From d3d1cdba2f9ffbffab4212b220c9547b1ec7bd66 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 1 Apr 2009 19:23:18 -0400 Subject: [PATCH 029/113] fixed --- doc/bugs/user_links_on_recentchanges_pages_problem.mdwn | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/bugs/user_links_on_recentchanges_pages_problem.mdwn b/doc/bugs/user_links_on_recentchanges_pages_problem.mdwn index 62fa1c8e9..d00f6815b 100644 --- a/doc/bugs/user_links_on_recentchanges_pages_problem.mdwn +++ b/doc/bugs/user_links_on_recentchanges_pages_problem.mdwn @@ -7,3 +7,6 @@ which returns something like

Error: unknown do parameter -- [[Jon]] + +> That was fixed in 3.04 but ikiwiki.info had not been upgraded to it yet. +> [[done]] --[[Joey]] From 16e951065e43cd3217f77541184b2d07492a1e70 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 1 Apr 2009 19:32:02 -0400 Subject: [PATCH 030/113] response --- .../How_does_ikiwiki_remember_times__63__.mdwn | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn b/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn index c23f0b100..ff588fe6c 100644 --- a/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn +++ b/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn @@ -1,10 +1,26 @@ This is similar to the last post in this forum. I want to know exactly how ikiwiki remembers the times associated with pages, especially when using it for blogging, so I know whether I can trust it or not. From that last thread, I think what ikiwiki does is this: * The created time of a file is when that file was first committed into the versioning repository (in my case git) + + > If `--getctime` it used, yes. In normal operation, when new files + > are added, ikiwiki sets the creation time to the ctime of the file + > on disk, rather than bothering to ask the VCS. --[[Joey]] + * The modified time of a file is what that file was last updated in the repository + > Almost right, the modified time is actually taken from the + > modification time of the file in disk. --[[Joey]] + And with a blog, by default, the posts are ordered by creation time, although an option can order them by modified time. Okay. So this should mean that the times are safe if, for example, I delete my working copy and then clone another one from the bare git repository, or otherwise mess up the creation times and mtimes stored as file metadata on the filesystem. Do I have it right? + +> Some VCS, like git, set the file mtimes to the current time +> when making a new checkout, so they will be lost if you do that. +> The creation times can be retrived using the `--getctime` option. +> I suppose it might be nice if there were a `--getmtime` that pulled +> true modification times out of the VCS, but I haven't found it a big +> deal in practice for the last modification times to be updated to the +> current time when rebuilding a wiki like this. --[[Joey]] From 6157c8697b6eb8842b38b82ade85b72135f6cdcc Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 1 Apr 2009 19:33:49 -0400 Subject: [PATCH 031/113] clarify --- debian/changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 25ed0dce9..6c30c8ff5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -12,7 +12,7 @@ ikiwiki (3.09) UNRELEASED; urgency=low * comments: Fix anchor ids to be legal xhtml. Closes: #521339 * Fix documentation of anonok_pagespec. Closes: #521793 * Add missing suggests on libtext-textile-perl. Closes: #522039 - * recentchanges: change to using do=goto links. + * recentchanges: change to using do=goto links for user links. -- Joey Hess Thu, 19 Mar 2009 15:32:49 -0400 From 524827c3cf85e5aceb87a7a84fac196d07550e9f Mon Sep 17 00:00:00 2001 From: Jon Dowland Date: Thu, 2 Apr 2009 09:31:50 +0100 Subject: [PATCH 032/113] response --- doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn index 5f33d0ae7..1edebe4e8 100644 --- a/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn +++ b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn @@ -7,3 +7,8 @@ Congratulations for demonstrating that April fools jokes can still be subtle >> I've glanced at couchdb, but don't see how it would tie in with ikiwiki. >> --[[Joey]] + + +>>> It doesn't really. I recently (re-)read about couchdb and thought that +>>> what it was trying to do had some comparisons with the thinking going on +>>> in [[todo/structured_page_data]]. -- [[Jon]] From 1b4e83941efc308e9a330948a5f6b20bf8326b31 Mon Sep 17 00:00:00 2001 From: "http://www.zeitlins.org/id/VZ/" Date: Thu, 2 Apr 2009 06:16:37 -0400 Subject: [PATCH 033/113] Give a working example of hgrc and mention the need for --post-commit --- doc/rcs/mercurial.mdwn | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/rcs/mercurial.mdwn b/doc/rcs/mercurial.mdwn index b4baf07f4..ebfc35202 100644 --- a/doc/rcs/mercurial.mdwn +++ b/doc/rcs/mercurial.mdwn @@ -10,9 +10,9 @@ commits edited pages, and uses the Mercurial history to generate the Example for a `.hg/hgrc` file in `$SRCDIR`: [hooks] - post-commit = /home/abe/bin/rebuildwiki - incoming = /home/abe/bin/rebuildwiki + post-commit = ikiwiki --setup /path/to/ikiwiki.setup --post-commit + incoming = ikiwiki --setup /path/to/ikiwiki.setup --post-commit -Do not use `commit` or `precommit` hooks or ikiwiki will run into a dead lock when committing in `$SRCDIR` +Do not use `commit` or `precommit` hooks or ikiwiki will run into a dead lock when committing in `$SRCDIR`. Also note that `--post-commit` and not `--refresh` must be used to avoid dead locking when editing the pages via CGI interface. See also [[todo/mercurial|todo/mercurial]] From f8f9cc46b89bab5bc9c0b27e1832a5699c2a3003 Mon Sep 17 00:00:00 2001 From: "http://seanh.myopenid.com/" Date: Thu, 2 Apr 2009 07:44:33 -0400 Subject: [PATCH 034/113] --- ...How_does_ikiwiki_remember_times__63__.mdwn | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn b/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn index ff588fe6c..f199b0f3b 100644 --- a/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn +++ b/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn @@ -24,3 +24,28 @@ Do I have it right? > true modification times out of the VCS, but I haven't found it a big > deal in practice for the last modification times to be updated to the > current time when rebuilding a wiki like this. --[[Joey]] +> +> > Thanks for the clarification. I ran some tests of my own to make sure I understand it right, and I'm satisfied +> > that the order of posts in my blog can be retrieved from the VCS using the `--getctime` option, at least if I +> > choose to order my posts by creation time rather than modification time. But I now know that I can't rely on +> > page modification times in ikiwiki as these can be lost permanently. +> > +> > I would suggest that there should at least be a `--getmtime` option like you describe, and perhaps that +> > `--getctime` and `--getmtime` be _on by default_. In my opinion the creation times and modification times of +> > pages in ikiwiki are part of the user's content and are important to protect, because the user may be relying +> > on them, especially if they use blogging or lists of recently modified pages, etc. Right now the modification +> > times can be lost permanently. +> > +> > Is there a typo in the description of `--getctime` in the man page? +> > +> > > --getctime +> > > Pull **last changed time** for each new page out of the revision +> > > control system. This rarely used option provides a way to get +> > > the real creation times of items in weblogs, such as when build‐ +> > > ing a wiki from a new Subversion checkout. It is unoptimised and +> > > quite slow. It is best used with --rebuild, to force ikiwiki to +> > > get the ctime for all pages. +> > +> > Surely it is not the _last changed time_ but the _first seen time_ of each page that is pulled out of the VCS? +> > If the aim is to get the real creation times of items in weblogs, then the last times that the items were +> > changed in the VCS is not going to help. -- [[seanh]] From 5c7c3646d848301017a0a588af1b5711133df2ec Mon Sep 17 00:00:00 2001 From: "http://seanh.myopenid.com/" Date: Thu, 2 Apr 2009 07:46:04 -0400 Subject: [PATCH 035/113] --- doc/forum/seanh.mdwn | 1 + 1 file changed, 1 insertion(+) create mode 100644 doc/forum/seanh.mdwn diff --git a/doc/forum/seanh.mdwn b/doc/forum/seanh.mdwn new file mode 100644 index 000000000..d093c2f32 --- /dev/null +++ b/doc/forum/seanh.mdwn @@ -0,0 +1 @@ +seanh is an ikiwiki user. From 597009e8bc3c2359045614f273f065a5de942a04 Mon Sep 17 00:00:00 2001 From: Jon Dowland Date: Thu, 2 Apr 2009 13:15:30 +0100 Subject: [PATCH 036/113] use meta date='foo' --- doc/forum/How_does_ikiwiki_remember_times__63__.mdwn | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn b/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn index f199b0f3b..067aa0c09 100644 --- a/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn +++ b/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn @@ -49,3 +49,7 @@ Do I have it right? > > Surely it is not the _last changed time_ but the _first seen time_ of each page that is pulled out of the VCS? > > If the aim is to get the real creation times of items in weblogs, then the last times that the items were > > changed in the VCS is not going to help. -- [[seanh]] + +> > > If you want to preserve the date of a page, the best way to do it is to +> > > use [[ikiwiki/directive/meta]] date="foo". This will survive checkouts, +> > > VCS migrations, etc. -- [[Jon]] From a70a8912362a1c746e1d802c5b3dd2b0c92a9d49 Mon Sep 17 00:00:00 2001 From: Jon Dowland Date: Thu, 2 Apr 2009 13:17:59 +0100 Subject: [PATCH 037/113] move seanh's user page from forum/ to user/ I hope you don't mind, It seemed fairly clear this was mistakenly under forum/. --- doc/{forum => users}/seanh.mdwn | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename doc/{forum => users}/seanh.mdwn (100%) diff --git a/doc/forum/seanh.mdwn b/doc/users/seanh.mdwn similarity index 100% rename from doc/forum/seanh.mdwn rename to doc/users/seanh.mdwn From 582312e91cb3e2c8313da6bbda735566a05c7677 Mon Sep 17 00:00:00 2001 From: "http://seanh.myopenid.com/" Date: Thu, 2 Apr 2009 09:07:53 -0400 Subject: [PATCH 038/113] --- ...___34__does_not_map_to_Unicode__34___errors__63__.mdwn | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 doc/forum/How_to_fix___34__does_not_map_to_Unicode__34___errors__63__.mdwn diff --git a/doc/forum/How_to_fix___34__does_not_map_to_Unicode__34___errors__63__.mdwn b/doc/forum/How_to_fix___34__does_not_map_to_Unicode__34___errors__63__.mdwn new file mode 100644 index 000000000..b5e8a14dd --- /dev/null +++ b/doc/forum/How_to_fix___34__does_not_map_to_Unicode__34___errors__63__.mdwn @@ -0,0 +1,8 @@ +I'm getting a number of errors like this when running ikiwiki: + + utf8 "\xA2" does not map to Unicode at /usr/local/share/perl/5.10.0/IkiWiki.pm line 739, <$in> chunk 1. + +I think it's because some of my files contain non-utf8, non-unicode, or somehow bad characters in them, probably fancy quotes and the like that have been copy-and-pasted from my web browser. The problem is that I have hundreds of files, I transferred them all over from pyblosxom to ikiwiki at once, and the error message doesn't tell me which file the error comes from. How can I fix this? + +Thanks +-- seanh From a24a669cabb9475e2e4bddb588ef15b51d73d376 Mon Sep 17 00:00:00 2001 From: "http://seanh.myopenid.com/" Date: Thu, 2 Apr 2009 09:53:06 -0400 Subject: [PATCH 039/113] --- doc/forum/How_does_ikiwiki_remember_times__63__.mdwn | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn b/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn index 067aa0c09..0e771cd0d 100644 --- a/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn +++ b/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn @@ -53,3 +53,8 @@ Do I have it right? > > > If you want to preserve the date of a page, the best way to do it is to > > > use [[ikiwiki/directive/meta]] date="foo". This will survive checkouts, > > > VCS migrations, etc. -- [[Jon]] +> > > +> > > > That's a good tip Jon. That would also survive renaming a page by renaming its mdwn file, which would +> > > > normally lose the times also. (And in that case I think both times are irretrievable, even by +> > > > `--getctime`). I might start using a simple script to make blog posts that creates a file for +> > > > me, puts today's date in the file as a meta, and opens the file in my editor. -- [[seanh]] From e215d023e6e8ca672a77220f3e39904b28fba296 Mon Sep 17 00:00:00 2001 From: Jon Dowland Date: Thu, 2 Apr 2009 16:15:41 +0100 Subject: [PATCH 040/113] example script --- ...How_does_ikiwiki_remember_times__63__.mdwn | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn b/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn index 0e771cd0d..3da37f3d4 100644 --- a/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn +++ b/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn @@ -58,3 +58,31 @@ Do I have it right? > > > > normally lose the times also. (And in that case I think both times are irretrievable, even by > > > > `--getctime`). I might start using a simple script to make blog posts that creates a file for > > > > me, puts today's date in the file as a meta, and opens the file in my editor. -- [[seanh]] + +>>>>> I use a script that does that and also sets up templates and tags +>>>>> for a new item: + + #!/bin/sh + set -u + set -e + + if [ $# -ne 1 ]; then + echo usage: $0 pagename >&2 + exit 1 + fi + + pagename="$1" + + if [ -e "$pagename" ]; then + echo error: "$pagename" exists >&2 + exit 1 + fi + + date=$(date) + echo '[[!template id=draft]]' >> "$pagename" + echo "[[!meta date=\"$date\"]]" >> "$pagename" + echo "[[!tag draft]]" >> "$pagename" + git add "$pagename" + $EDITOR "$pagename" + +>>>>> -- [[Jon]] From fb4f21c438d05e0a171fc3b2cc74636687a3f1a5 Mon Sep 17 00:00:00 2001 From: Jon Dowland Date: Thu, 2 Apr 2009 16:15:53 +0100 Subject: [PATCH 041/113] add some escapes --- doc/forum/How_does_ikiwiki_remember_times__63__.mdwn | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn b/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn index 3da37f3d4..d492961ac 100644 --- a/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn +++ b/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn @@ -79,9 +79,9 @@ Do I have it right? fi date=$(date) - echo '[[!template id=draft]]' >> "$pagename" - echo "[[!meta date=\"$date\"]]" >> "$pagename" - echo "[[!tag draft]]" >> "$pagename" + echo '\[[!template id=draft]]' >> "$pagename" + echo "\[[!meta date=\"$date\"]]" >> "$pagename" + echo "\[[!tag draft]]" >> "$pagename" git add "$pagename" $EDITOR "$pagename" From eec38e8eeb63f6a93c60fc7b9e7e23b28e3b13e8 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 3 Apr 2009 14:28:15 -0400 Subject: [PATCH 042/113] fix typo in --getctime description --- doc/forum/How_does_ikiwiki_remember_times__63__.mdwn | 1 + doc/usage.mdwn | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn b/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn index d492961ac..5522cbf45 100644 --- a/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn +++ b/doc/forum/How_does_ikiwiki_remember_times__63__.mdwn @@ -49,6 +49,7 @@ Do I have it right? > > Surely it is not the _last changed time_ but the _first seen time_ of each page that is pulled out of the VCS? > > If the aim is to get the real creation times of items in weblogs, then the last times that the items were > > changed in the VCS is not going to help. -- [[seanh]] +>>> Typo, fixed. --[[Joey]] > > > If you want to preserve the date of a page, the best way to do it is to > > > use [[ikiwiki/directive/meta]] date="foo". This will survive checkouts, diff --git a/doc/usage.mdwn b/doc/usage.mdwn index e2fe85ff6..0c618de5c 100644 --- a/doc/usage.mdwn +++ b/doc/usage.mdwn @@ -308,10 +308,10 @@ also be configured using a setup file. * --getctime - Pull last changed time for each new page out of the revision control + Pull creation time for each new page out of the revision control system. This rarely used option provides a way to get the real creation times of items in weblogs, such as when building a wiki from a new - Subversion checkout. It is unoptimised and quite slow. It is best used + VCS checkout. It is unoptimised and quite slow. It is best used with --rebuild, to force ikiwiki to get the ctime for all pages. * --set var=value From 90da6cc05ca92ab856b21eff1a35cfb7d84db5f6 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 3 Apr 2009 14:37:53 -0400 Subject: [PATCH 043/113] response --- ...__does_not_map_to_Unicode__34___errors__63__.mdwn | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/doc/forum/How_to_fix___34__does_not_map_to_Unicode__34___errors__63__.mdwn b/doc/forum/How_to_fix___34__does_not_map_to_Unicode__34___errors__63__.mdwn index b5e8a14dd..0b3895357 100644 --- a/doc/forum/How_to_fix___34__does_not_map_to_Unicode__34___errors__63__.mdwn +++ b/doc/forum/How_to_fix___34__does_not_map_to_Unicode__34___errors__63__.mdwn @@ -6,3 +6,15 @@ I think it's because some of my files contain non-utf8, non-unicode, or somehow Thanks -- seanh + +> Unfortunatly, these messages are logged by perl so there's no way to add +> a filename to them. +> +> If you run the build in --verbose mode, you should see which page ikiwiki +> is working on, and unless it inlines some other page, you can be pretty +> sure that page contains invalid utf-8 if the message is then printed. +> +> Another option is to use the `isutf8` program from +> moreutils](http://kitenet.net/~joey/code/moreutils/), +> and run it on each file, it will tell you the line number +> and character position that is invalid. --[[Joey]] From 8a119839464fbfdf6fc3e8c302fa3d9cac7eab6b Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 4 Apr 2009 14:58:34 -0400 Subject: [PATCH 044/113] Fix git test suite to use a bare repo. This works around an enormous (and, in this context, enormously confusing) message that git has begun to print when one attempts to push changes into a non-bare repo. As a bonus, it now tests whether ikiwiki-makerepo works. --- debian/changelog | 5 +++-- t/git.t | 19 ++++++++----------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/debian/changelog b/debian/changelog index 6c30c8ff5..fab20985d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -ikiwiki (3.09) UNRELEASED; urgency=low +ikiwiki (3.09) unstable; urgency=low * inline: Add title_natural sort order, using Sort::Naturally (chrysn) @@ -13,8 +13,9 @@ ikiwiki (3.09) UNRELEASED; urgency=low * Fix documentation of anonok_pagespec. Closes: #521793 * Add missing suggests on libtext-textile-perl. Closes: #522039 * recentchanges: change to using do=goto links for user links. + * Fix git test suite to use a bare repo. - -- Joey Hess Thu, 19 Mar 2009 15:32:49 -0400 + -- Joey Hess Sat, 04 Apr 2009 14:33:49 -0400 ikiwiki (3.08) unstable; urgency=low diff --git a/t/git.t b/t/git.t index b3aa6a80b..f1c24b359 100755 --- a/t/git.t +++ b/t/git.t @@ -3,19 +3,17 @@ use warnings; use strict; my $dir; -my $gitrepo; BEGIN { $dir="/tmp/ikiwiki-test-git.$$"; - $gitrepo="$dir/repo"; my $git=`which git`; chomp $git; - if (! -x $git || ! mkdir($dir) || ! mkdir($gitrepo)) { + if (! -x $git || ! mkdir($dir)) { eval q{ - use Test::More skip_all => "git not available or could not make test dirs" + use Test::More skip_all => "git not available or could not make test dir" } } } -use Test::More tests => 16; +use Test::More tests => 18; BEGIN { use_ok("IkiWiki"); } @@ -25,17 +23,16 @@ $config{srcdir} = "$dir/src"; IkiWiki::loadplugins(); IkiWiki::checkconfig(); -system "cd $gitrepo && git init >/dev/null 2>&1"; -system "cd $gitrepo && echo dummy > dummy; git add . >/dev/null 2>&1"; -system "cd $gitrepo && git commit -m Initial >/dev/null 2>&1"; -system "git clone -l -s $gitrepo $config{srcdir} >/dev/null 2>&1"; +ok (mkdir($config{srcdir})); +is (system("./ikiwiki-makerepo git $config{srcdir} $dir/repo"), 0); my @changes; @changes = IkiWiki::rcs_recentchanges(3); is($#changes, 0); # counts for dummy commit during repo creation -is($changes[0]{message}[0]{"line"}, "Initial"); -is($changes[0]{pages}[0]{"page"}, "dummy"); +# ikiwiki-makerepo's first commit is setting up the .gitignore +is($changes[0]{message}[0]{"line"}, "initial commit"); +is($changes[0]{pages}[0]{"page"}, ".gitignore"); # Web commit my $test1 = readfile("t/test1.mdwn"); From 7df2399c19740b91349adfd011a8898dd0a7a6e1 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 4 Apr 2009 15:03:00 -0400 Subject: [PATCH 045/113] releasing version 3.09 --- po/bg.po | 38 +++++++++++++++++++++----------------- po/cs.po | 38 +++++++++++++++++++++----------------- po/da.po | 38 +++++++++++++++++++++----------------- po/de.po | 38 +++++++++++++++++++++----------------- po/es.po | 38 +++++++++++++++++++++----------------- po/fr.po | 38 +++++++++++++++++++++----------------- po/gu.po | 38 +++++++++++++++++++++----------------- po/ikiwiki.pot | 26 +++++++++++++++----------- po/pl.po | 38 +++++++++++++++++++++----------------- po/sv.po | 38 +++++++++++++++++++++----------------- po/vi.po | 38 +++++++++++++++++++++----------------- 11 files changed, 225 insertions(+), 181 deletions(-) diff --git a/po/bg.po b/po/bg.po index c875f9bd4..ce963f994 100644 --- a/po/bg.po +++ b/po/bg.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki-bg\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-03-01 15:03-0500\n" +"POT-Creation-Date: 2009-04-04 14:59-0400\n" "PO-Revision-Date: 2007-01-12 01:19+0200\n" "Last-Translator: Damyan Ivanov \n" "Language-Team: Bulgarian \n" @@ -55,7 +55,7 @@ msgstr "Предпочитанията са запазени." msgid "You are banned." msgstr "Достъпът ви е забранен." -#: ../IkiWiki/CGI.pm:390 ../IkiWiki/CGI.pm:391 ../IkiWiki.pm:1209 +#: ../IkiWiki/CGI.pm:390 ../IkiWiki/CGI.pm:391 ../IkiWiki.pm:1211 msgid "Error" msgstr "Грешка" @@ -188,7 +188,7 @@ msgid "" msgstr "" #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:233 -#: ../IkiWiki/Plugin/inline.pm:354 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:361 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -252,19 +252,19 @@ msgstr "" msgid "Added a comment: %s" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:510 ../IkiWiki/Plugin/websetup.pm:236 +#: ../IkiWiki/Plugin/comments.pm:511 ../IkiWiki/Plugin/websetup.pm:236 msgid "you are not logged in as an admin" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:561 +#: ../IkiWiki/Plugin/comments.pm:562 msgid "Comment moderation" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:600 +#: ../IkiWiki/Plugin/comments.pm:601 msgid "comment moderation" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:751 +#: ../IkiWiki/Plugin/comments.pm:752 msgid "Comments" msgstr "" @@ -334,18 +334,18 @@ msgstr "" msgid "fortune failed" msgstr "грешшка в приставката „fortune”" -#: ../IkiWiki/Plugin/git.pm:624 ../IkiWiki/Plugin/git.pm:642 +#: ../IkiWiki/Plugin/git.pm:626 ../IkiWiki/Plugin/git.pm:644 #: ../IkiWiki/Receive.pm:129 #, perl-format msgid "you are not allowed to change %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:664 +#: ../IkiWiki/Plugin/git.pm:666 #, perl-format msgid "you cannot act on a file with mode %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:668 +#: ../IkiWiki/Plugin/git.pm:670 msgid "you are not allowed to change file modes" msgstr "" @@ -419,25 +419,29 @@ msgstr "шаблонът „%s” не е намерен" msgid "missing pages parameter" msgstr "липсващ параметър „id” на шаблона" -#: ../IkiWiki/Plugin/inline.pm:204 +#: ../IkiWiki/Plugin/inline.pm:200 +msgid "Sort::Naturally needed for title_natural sort" +msgstr "" + +#: ../IkiWiki/Plugin/inline.pm:211 #, perl-format msgid "unknown sort type %s" msgstr "непознат вид сортиране „%s”" -#: ../IkiWiki/Plugin/inline.pm:307 +#: ../IkiWiki/Plugin/inline.pm:314 msgid "Add a new post titled:" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:327 +#: ../IkiWiki/Plugin/inline.pm:334 #, perl-format msgid "nonexistant template %s" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:362 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "Дискусия" -#: ../IkiWiki/Plugin/inline.pm:593 +#: ../IkiWiki/Plugin/inline.pm:600 msgid "RPC::XML::Client not found, not pinging" msgstr "модулът „RPC::XML::Client” не е намерен; източникът не е проверен" @@ -1055,12 +1059,12 @@ msgstr "" msgid "failed to load external plugin needed for %s plugin: %s" msgstr "" -#: ../IkiWiki.pm:1192 +#: ../IkiWiki.pm:1194 #, fuzzy, perl-format msgid "preprocessing loop detected on %s at depth %i" msgstr "открита е циклична завидимост при %s на „%s” на дълбочина %i" -#: ../IkiWiki.pm:1730 +#: ../IkiWiki.pm:1732 msgid "yes" msgstr "" diff --git a/po/cs.po b/po/cs.po index 519d170aa..c66004dcb 100644 --- a/po/cs.po +++ b/po/cs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-03-01 15:03-0500\n" +"POT-Creation-Date: 2009-04-04 14:59-0400\n" "PO-Revision-Date: 2007-05-09 21:21+0200\n" "Last-Translator: Miroslav Kure \n" "Language-Team: Czech \n" @@ -53,7 +53,7 @@ msgstr "Nastavení uloženo." msgid "You are banned." msgstr "Jste vyhoštěni." -#: ../IkiWiki/CGI.pm:390 ../IkiWiki/CGI.pm:391 ../IkiWiki.pm:1209 +#: ../IkiWiki/CGI.pm:390 ../IkiWiki/CGI.pm:391 ../IkiWiki.pm:1211 msgid "Error" msgstr "Chyba" @@ -185,7 +185,7 @@ msgid "" msgstr "" #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:233 -#: ../IkiWiki/Plugin/inline.pm:354 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:361 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -249,19 +249,19 @@ msgstr "" msgid "Added a comment: %s" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:510 ../IkiWiki/Plugin/websetup.pm:236 +#: ../IkiWiki/Plugin/comments.pm:511 ../IkiWiki/Plugin/websetup.pm:236 msgid "you are not logged in as an admin" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:561 +#: ../IkiWiki/Plugin/comments.pm:562 msgid "Comment moderation" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:600 +#: ../IkiWiki/Plugin/comments.pm:601 msgid "comment moderation" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:751 +#: ../IkiWiki/Plugin/comments.pm:752 msgid "Comments" msgstr "" @@ -331,18 +331,18 @@ msgstr "" msgid "fortune failed" msgstr "fortune selhal" -#: ../IkiWiki/Plugin/git.pm:624 ../IkiWiki/Plugin/git.pm:642 +#: ../IkiWiki/Plugin/git.pm:626 ../IkiWiki/Plugin/git.pm:644 #: ../IkiWiki/Receive.pm:129 #, perl-format msgid "you are not allowed to change %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:664 +#: ../IkiWiki/Plugin/git.pm:666 #, perl-format msgid "you cannot act on a file with mode %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:668 +#: ../IkiWiki/Plugin/git.pm:670 msgid "you are not allowed to change file modes" msgstr "" @@ -413,25 +413,29 @@ msgstr "zdroj nebyl nalezen" msgid "missing pages parameter" msgstr "chybí parametr %s" -#: ../IkiWiki/Plugin/inline.pm:204 +#: ../IkiWiki/Plugin/inline.pm:200 +msgid "Sort::Naturally needed for title_natural sort" +msgstr "" + +#: ../IkiWiki/Plugin/inline.pm:211 #, perl-format msgid "unknown sort type %s" msgstr "neznámý typ řazení %s" -#: ../IkiWiki/Plugin/inline.pm:307 +#: ../IkiWiki/Plugin/inline.pm:314 msgid "Add a new post titled:" msgstr "Přidat nový příspěvek nazvaný:" -#: ../IkiWiki/Plugin/inline.pm:327 +#: ../IkiWiki/Plugin/inline.pm:334 #, perl-format msgid "nonexistant template %s" msgstr "neexistující šablona %s" -#: ../IkiWiki/Plugin/inline.pm:362 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "Diskuse" -#: ../IkiWiki/Plugin/inline.pm:593 +#: ../IkiWiki/Plugin/inline.pm:600 msgid "RPC::XML::Client not found, not pinging" msgstr "RPC::XML::Client nebyl nalezen, nepinkám" @@ -1035,12 +1039,12 @@ msgstr "" msgid "failed to load external plugin needed for %s plugin: %s" msgstr "" -#: ../IkiWiki.pm:1192 +#: ../IkiWiki.pm:1194 #, fuzzy, perl-format msgid "preprocessing loop detected on %s at depth %i" msgstr "Byla rozpoznána smyčka direktivy %s na %s v hloubce %i" -#: ../IkiWiki.pm:1730 +#: ../IkiWiki.pm:1732 msgid "yes" msgstr "" diff --git a/po/da.po b/po/da.po index 6139a0f23..5f582312d 100644 --- a/po/da.po +++ b/po/da.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-03-01 15:03-0500\n" +"POT-Creation-Date: 2009-04-04 14:59-0400\n" "PO-Revision-Date: 2008-10-22 19:13+0100\n" "Last-Translator: Jonas Smedegaard \n" "Language-Team: None\n" @@ -57,7 +57,7 @@ msgstr "Indstillinger gemt" msgid "You are banned." msgstr "Du er banlyst." -#: ../IkiWiki/CGI.pm:390 ../IkiWiki/CGI.pm:391 ../IkiWiki.pm:1209 +#: ../IkiWiki/CGI.pm:390 ../IkiWiki/CGI.pm:391 ../IkiWiki.pm:1211 msgid "Error" msgstr "Fejl" @@ -187,7 +187,7 @@ msgid "" msgstr "" #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:233 -#: ../IkiWiki/Plugin/inline.pm:354 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:361 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -252,19 +252,19 @@ msgstr "" msgid "Added a comment: %s" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:510 ../IkiWiki/Plugin/websetup.pm:236 +#: ../IkiWiki/Plugin/comments.pm:511 ../IkiWiki/Plugin/websetup.pm:236 msgid "you are not logged in as an admin" msgstr "du er ikke logget på som en administrator" -#: ../IkiWiki/Plugin/comments.pm:561 +#: ../IkiWiki/Plugin/comments.pm:562 msgid "Comment moderation" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:600 +#: ../IkiWiki/Plugin/comments.pm:601 msgid "comment moderation" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:751 +#: ../IkiWiki/Plugin/comments.pm:752 msgid "Comments" msgstr "" @@ -331,18 +331,18 @@ msgstr "" msgid "fortune failed" msgstr "spådom (fortune) fejlede" -#: ../IkiWiki/Plugin/git.pm:624 ../IkiWiki/Plugin/git.pm:642 +#: ../IkiWiki/Plugin/git.pm:626 ../IkiWiki/Plugin/git.pm:644 #: ../IkiWiki/Receive.pm:129 #, fuzzy, perl-format msgid "you are not allowed to change %s" msgstr "du er ikke logget på som en administrator" -#: ../IkiWiki/Plugin/git.pm:664 +#: ../IkiWiki/Plugin/git.pm:666 #, perl-format msgid "you cannot act on a file with mode %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:668 +#: ../IkiWiki/Plugin/git.pm:670 #, fuzzy msgid "you are not allowed to change file modes" msgstr "du er ikke logget på som en administrator" @@ -410,25 +410,29 @@ msgstr "sideredigering er ikke tilladt" msgid "missing pages parameter" msgstr "mangler pages-parametren" -#: ../IkiWiki/Plugin/inline.pm:204 +#: ../IkiWiki/Plugin/inline.pm:200 +msgid "Sort::Naturally needed for title_natural sort" +msgstr "" + +#: ../IkiWiki/Plugin/inline.pm:211 #, perl-format msgid "unknown sort type %s" msgstr "ukendt sorteringsform %s" -#: ../IkiWiki/Plugin/inline.pm:307 +#: ../IkiWiki/Plugin/inline.pm:314 msgid "Add a new post titled:" msgstr "Tilføj nyt indlæg med følgende titel:" -#: ../IkiWiki/Plugin/inline.pm:327 +#: ../IkiWiki/Plugin/inline.pm:334 #, perl-format msgid "nonexistant template %s" msgstr "ikke-eksisterende skabelon: %s" -#: ../IkiWiki/Plugin/inline.pm:362 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "Diskussion" -#: ../IkiWiki/Plugin/inline.pm:593 +#: ../IkiWiki/Plugin/inline.pm:600 msgid "RPC::XML::Client not found, not pinging" msgstr "RPC::XML::Client ikke fundet, pinger ikke" @@ -1034,12 +1038,12 @@ msgid "failed to load external plugin needed for %s plugin: %s" msgstr "" "indlæsning af ekstern udvidelse krævet af udvidelsen %s mislykkedes: %s" -#: ../IkiWiki.pm:1192 +#: ../IkiWiki.pm:1194 #, perl-format msgid "preprocessing loop detected on %s at depth %i" msgstr "forudberegningssløkke fundet på %s ved dybde %i" -#: ../IkiWiki.pm:1730 +#: ../IkiWiki.pm:1732 msgid "yes" msgstr "ja" diff --git a/po/de.po b/po/de.po index 98aafe580..748265924 100644 --- a/po/de.po +++ b/po/de.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki 3.06\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-03-01 15:03-0500\n" +"POT-Creation-Date: 2009-04-04 14:59-0400\n" "PO-Revision-Date: 2009-03-02 15:39+0100\n" "Last-Translator: Kai Wasserbäch \n" "Language-Team: German \n" @@ -55,7 +55,7 @@ msgstr "Einstellungen gespeichert." msgid "You are banned." msgstr "Sie sind ausgeschlossen worden." -#: ../IkiWiki/CGI.pm:390 ../IkiWiki/CGI.pm:391 ../IkiWiki.pm:1209 +#: ../IkiWiki/CGI.pm:390 ../IkiWiki/CGI.pm:391 ../IkiWiki.pm:1211 msgid "Error" msgstr "Fehler" @@ -187,7 +187,7 @@ msgstr "" "als Spam ein: " #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:233 -#: ../IkiWiki/Plugin/inline.pm:354 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:361 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -254,19 +254,19 @@ msgstr "Kommentar hinzugefügt." msgid "Added a comment: %s" msgstr "Kommentar hinzugefügt: %s" -#: ../IkiWiki/Plugin/comments.pm:510 ../IkiWiki/Plugin/websetup.pm:236 +#: ../IkiWiki/Plugin/comments.pm:511 ../IkiWiki/Plugin/websetup.pm:236 msgid "you are not logged in as an admin" msgstr "Sie sind nicht als Administrator angemeldet" -#: ../IkiWiki/Plugin/comments.pm:561 +#: ../IkiWiki/Plugin/comments.pm:562 msgid "Comment moderation" msgstr "Kommentarmoderation" -#: ../IkiWiki/Plugin/comments.pm:600 +#: ../IkiWiki/Plugin/comments.pm:601 msgid "comment moderation" msgstr "Kommentarmoderation" -#: ../IkiWiki/Plugin/comments.pm:751 +#: ../IkiWiki/Plugin/comments.pm:752 msgid "Comments" msgstr "Kommentare" @@ -333,18 +333,18 @@ msgstr "Format und Text müssen spezifiziert werden" msgid "fortune failed" msgstr "»fortune« fehlgeschlagen" -#: ../IkiWiki/Plugin/git.pm:624 ../IkiWiki/Plugin/git.pm:642 +#: ../IkiWiki/Plugin/git.pm:626 ../IkiWiki/Plugin/git.pm:644 #: ../IkiWiki/Receive.pm:129 #, perl-format msgid "you are not allowed to change %s" msgstr "es ist Ihnen nicht erlaubt, %s zu ändern" -#: ../IkiWiki/Plugin/git.pm:664 +#: ../IkiWiki/Plugin/git.pm:666 #, perl-format msgid "you cannot act on a file with mode %s" msgstr "Sie können Dateien mit den Zugriffsrechten %s nicht verändern" -#: ../IkiWiki/Plugin/git.pm:668 +#: ../IkiWiki/Plugin/git.pm:670 msgid "you are not allowed to change file modes" msgstr "Es ist Ihnen nicht erlaubt, Dateizugriffsrechte zu ändern" @@ -415,25 +415,29 @@ msgstr "Seitenbearbeitungen sind nicht erlaubt" msgid "missing pages parameter" msgstr "Fehlender Seitenparameter" -#: ../IkiWiki/Plugin/inline.pm:204 +#: ../IkiWiki/Plugin/inline.pm:200 +msgid "Sort::Naturally needed for title_natural sort" +msgstr "" + +#: ../IkiWiki/Plugin/inline.pm:211 #, perl-format msgid "unknown sort type %s" msgstr "Unbekannter Sortierungstyp %s" -#: ../IkiWiki/Plugin/inline.pm:307 +#: ../IkiWiki/Plugin/inline.pm:314 msgid "Add a new post titled:" msgstr "Füge einen neuen Beitrag hinzu. Titel:" -#: ../IkiWiki/Plugin/inline.pm:327 +#: ../IkiWiki/Plugin/inline.pm:334 #, perl-format msgid "nonexistant template %s" msgstr "nicht-vorhandene Vorlage %s" -#: ../IkiWiki/Plugin/inline.pm:362 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "Diskussion" -#: ../IkiWiki/Plugin/inline.pm:593 +#: ../IkiWiki/Plugin/inline.pm:600 msgid "RPC::XML::Client not found, not pinging" msgstr "RPC::XML::Client nicht gefunden, führe Ping nicht aus" @@ -1048,12 +1052,12 @@ msgstr "" msgid "failed to load external plugin needed for %s plugin: %s" msgstr "Laden der für %s benötigten externen Erweiterung fehlgeschlagen: %s" -#: ../IkiWiki.pm:1192 +#: ../IkiWiki.pm:1194 #, perl-format msgid "preprocessing loop detected on %s at depth %i" msgstr "Präprozessorschleife auf %s in Tiefe %i erkannt" -#: ../IkiWiki.pm:1730 +#: ../IkiWiki.pm:1732 msgid "yes" msgstr "ja" diff --git a/po/es.po b/po/es.po index 0212a86be..f7887ad7c 100644 --- a/po/es.po +++ b/po/es.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: es\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-03-08 19:02-0400\n" +"POT-Creation-Date: 2009-04-04 14:59-0400\n" "PO-Revision-Date: 2009-03-03 10:48+0100\n" "Last-Translator: Víctor Moral \n" "Language-Team: spanish \n" @@ -61,7 +61,7 @@ msgstr "Las preferencias se han guardado." msgid "You are banned." msgstr "Ha sido expulsado." -#: ../IkiWiki/CGI.pm:390 ../IkiWiki/CGI.pm:391 ../IkiWiki.pm:1209 +#: ../IkiWiki/CGI.pm:390 ../IkiWiki/CGI.pm:391 ../IkiWiki.pm:1211 msgid "Error" msgstr "Error" @@ -194,7 +194,7 @@ msgstr "" "dice que el texto puede ser spam." #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:233 -#: ../IkiWiki/Plugin/inline.pm:354 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:361 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -258,19 +258,19 @@ msgstr "Añadir un comentario" msgid "Added a comment: %s" msgstr "Comentario añadido: %s" -#: ../IkiWiki/Plugin/comments.pm:510 ../IkiWiki/Plugin/websetup.pm:236 +#: ../IkiWiki/Plugin/comments.pm:511 ../IkiWiki/Plugin/websetup.pm:236 msgid "you are not logged in as an admin" msgstr "No está registrado como un administrador" -#: ../IkiWiki/Plugin/comments.pm:561 +#: ../IkiWiki/Plugin/comments.pm:562 msgid "Comment moderation" msgstr "Aprobación de comentarios" -#: ../IkiWiki/Plugin/comments.pm:600 +#: ../IkiWiki/Plugin/comments.pm:601 msgid "comment moderation" msgstr "aprobación de comentarios" -#: ../IkiWiki/Plugin/comments.pm:751 +#: ../IkiWiki/Plugin/comments.pm:752 msgid "Comments" msgstr "Comentarios" @@ -337,18 +337,18 @@ msgstr "se deben especificar tanto el formato como el texto" msgid "fortune failed" msgstr "el programa fortune ha fallado" -#: ../IkiWiki/Plugin/git.pm:624 ../IkiWiki/Plugin/git.pm:642 +#: ../IkiWiki/Plugin/git.pm:626 ../IkiWiki/Plugin/git.pm:644 #: ../IkiWiki/Receive.pm:129 #, perl-format msgid "you are not allowed to change %s" msgstr "No puede cambiar %s" -#: ../IkiWiki/Plugin/git.pm:664 +#: ../IkiWiki/Plugin/git.pm:666 #, perl-format msgid "you cannot act on a file with mode %s" msgstr "no puede actuar sobre un archivo con permisos %s" -#: ../IkiWiki/Plugin/git.pm:668 +#: ../IkiWiki/Plugin/git.pm:670 msgid "you are not allowed to change file modes" msgstr "No puede cambiar los permisos de acceso de un archivo" @@ -420,25 +420,29 @@ msgstr "no está permitida la modificación de páginas" msgid "missing pages parameter" msgstr "falta el parámetro pages" -#: ../IkiWiki/Plugin/inline.pm:204 +#: ../IkiWiki/Plugin/inline.pm:200 +msgid "Sort::Naturally needed for title_natural sort" +msgstr "" + +#: ../IkiWiki/Plugin/inline.pm:211 #, perl-format msgid "unknown sort type %s" msgstr "no conozco este tipo de ordenación %s" -#: ../IkiWiki/Plugin/inline.pm:307 +#: ../IkiWiki/Plugin/inline.pm:314 msgid "Add a new post titled:" msgstr "Añadir una entrada nueva titulada:" -#: ../IkiWiki/Plugin/inline.pm:327 +#: ../IkiWiki/Plugin/inline.pm:334 #, perl-format msgid "nonexistant template %s" msgstr "la plantilla %s no existe " -#: ../IkiWiki/Plugin/inline.pm:362 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "Comentarios" -#: ../IkiWiki/Plugin/inline.pm:593 +#: ../IkiWiki/Plugin/inline.pm:600 msgid "RPC::XML::Client not found, not pinging" msgstr "No he encontrado el componente RPC::XML::Client, no envío señal alguna" @@ -1051,14 +1055,14 @@ msgstr "no puedo emplear varios complementos rcs" msgid "failed to load external plugin needed for %s plugin: %s" msgstr "no he podido cargar el complemento externo %s necesario para %s" -#: ../IkiWiki.pm:1192 +#: ../IkiWiki.pm:1194 #, perl-format msgid "preprocessing loop detected on %s at depth %i" msgstr "" "se ha detectado en la página %s un bucle de preprocesado en la iteración " "número %i" -#: ../IkiWiki.pm:1730 +#: ../IkiWiki.pm:1732 msgid "yes" msgstr "si" diff --git a/po/fr.po b/po/fr.po index 51cb5c7de..78b3bbe0f 100644 --- a/po/fr.po +++ b/po/fr.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki 3.04\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-03-01 15:03-0500\n" +"POT-Creation-Date: 2009-04-04 14:59-0400\n" "PO-Revision-Date: 2009-03-15 16:10+0100\n" "Last-Translator: Philippe Batailler \n" "Language-Team: French \n" @@ -57,7 +57,7 @@ msgstr "Les préférences ont été enregistrées." msgid "You are banned." msgstr "Vous avez été banni." -#: ../IkiWiki/CGI.pm:390 ../IkiWiki/CGI.pm:391 ../IkiWiki.pm:1209 +#: ../IkiWiki/CGI.pm:390 ../IkiWiki/CGI.pm:391 ../IkiWiki.pm:1211 msgid "Error" msgstr "Erreur" @@ -189,7 +189,7 @@ msgstr "" "blogspam.net/\">blogspam: " #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:233 -#: ../IkiWiki/Plugin/inline.pm:354 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:361 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -253,19 +253,19 @@ msgstr "Commentaire ajouté" msgid "Added a comment: %s" msgstr "Commentaire ajouté : %s" -#: ../IkiWiki/Plugin/comments.pm:510 ../IkiWiki/Plugin/websetup.pm:236 +#: ../IkiWiki/Plugin/comments.pm:511 ../IkiWiki/Plugin/websetup.pm:236 msgid "you are not logged in as an admin" msgstr "Vous n'êtes pas authentifié comme administrateur" -#: ../IkiWiki/Plugin/comments.pm:561 +#: ../IkiWiki/Plugin/comments.pm:562 msgid "Comment moderation" msgstr "Modération du commentaire" -#: ../IkiWiki/Plugin/comments.pm:600 +#: ../IkiWiki/Plugin/comments.pm:601 msgid "comment moderation" msgstr "modération du commentaire" -#: ../IkiWiki/Plugin/comments.pm:751 +#: ../IkiWiki/Plugin/comments.pm:752 msgid "Comments" msgstr "Commentaires" @@ -332,18 +332,18 @@ msgstr "le format et le texte doivent être indiqués" msgid "fortune failed" msgstr "Échec du lancement de « fortune »" -#: ../IkiWiki/Plugin/git.pm:624 ../IkiWiki/Plugin/git.pm:642 +#: ../IkiWiki/Plugin/git.pm:626 ../IkiWiki/Plugin/git.pm:644 #: ../IkiWiki/Receive.pm:129 #, perl-format msgid "you are not allowed to change %s" msgstr "Vous n'êtes pas autorisé à modifier %s" -#: ../IkiWiki/Plugin/git.pm:664 +#: ../IkiWiki/Plugin/git.pm:666 #, perl-format msgid "you cannot act on a file with mode %s" msgstr "Vous ne pouvez utiliser le mode %s pour les fichiers" -#: ../IkiWiki/Plugin/git.pm:668 +#: ../IkiWiki/Plugin/git.pm:670 msgid "you are not allowed to change file modes" msgstr "Vous n'êtes pas autorisé à modifier le mode des fichiers" @@ -412,25 +412,29 @@ msgstr "Modification de page interdite" msgid "missing pages parameter" msgstr "Paramètre « pages » manquant" -#: ../IkiWiki/Plugin/inline.pm:204 +#: ../IkiWiki/Plugin/inline.pm:200 +msgid "Sort::Naturally needed for title_natural sort" +msgstr "" + +#: ../IkiWiki/Plugin/inline.pm:211 #, perl-format msgid "unknown sort type %s" msgstr "Type de tri %s inconnu" -#: ../IkiWiki/Plugin/inline.pm:307 +#: ../IkiWiki/Plugin/inline.pm:314 msgid "Add a new post titled:" msgstr "Ajouter un nouvel article dont le titre est :" -#: ../IkiWiki/Plugin/inline.pm:327 +#: ../IkiWiki/Plugin/inline.pm:334 #, perl-format msgid "nonexistant template %s" msgstr "Le modèle de page %s n'existe pas" -#: ../IkiWiki/Plugin/inline.pm:362 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "Discussion" -#: ../IkiWiki/Plugin/inline.pm:593 +#: ../IkiWiki/Plugin/inline.pm:600 msgid "RPC::XML::Client not found, not pinging" msgstr "RPC::XML::Client introuvable, pas de réponse au ping" @@ -1044,12 +1048,12 @@ msgstr "Impossible d'utiliser plusieurs systèmes de contrôle des versions" msgid "failed to load external plugin needed for %s plugin: %s" msgstr "Impossible de charger le greffon externe nécessaire au greffon %s : %s" -#: ../IkiWiki.pm:1192 +#: ../IkiWiki.pm:1194 #, perl-format msgid "preprocessing loop detected on %s at depth %i" msgstr "Une boucle de pré traitement a été détectée sur %s à hauteur de %i" -#: ../IkiWiki.pm:1730 +#: ../IkiWiki.pm:1732 msgid "yes" msgstr "oui" diff --git a/po/gu.po b/po/gu.po index eb7bdcee0..dd9c7c5a1 100644 --- a/po/gu.po +++ b/po/gu.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki-gu\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-03-01 15:03-0500\n" +"POT-Creation-Date: 2009-04-04 14:59-0400\n" "PO-Revision-Date: 2007-01-11 16:05+0530\n" "Last-Translator: Kartik Mistry \n" "Language-Team: Gujarati \n" @@ -54,7 +54,7 @@ msgstr "પ્રાથમિકતાઓ સંગ્રહાઇ." msgid "You are banned." msgstr "તમારા પર પ્રતિબંધ છે." -#: ../IkiWiki/CGI.pm:390 ../IkiWiki/CGI.pm:391 ../IkiWiki.pm:1209 +#: ../IkiWiki/CGI.pm:390 ../IkiWiki/CGI.pm:391 ../IkiWiki.pm:1211 msgid "Error" msgstr "ક્ષતિ" @@ -186,7 +186,7 @@ msgid "" msgstr "" #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:233 -#: ../IkiWiki/Plugin/inline.pm:354 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:361 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -250,19 +250,19 @@ msgstr "" msgid "Added a comment: %s" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:510 ../IkiWiki/Plugin/websetup.pm:236 +#: ../IkiWiki/Plugin/comments.pm:511 ../IkiWiki/Plugin/websetup.pm:236 msgid "you are not logged in as an admin" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:561 +#: ../IkiWiki/Plugin/comments.pm:562 msgid "Comment moderation" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:600 +#: ../IkiWiki/Plugin/comments.pm:601 msgid "comment moderation" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:751 +#: ../IkiWiki/Plugin/comments.pm:752 msgid "Comments" msgstr "" @@ -332,18 +332,18 @@ msgstr "" msgid "fortune failed" msgstr "ભવિષ્ય નિષ્ફળ" -#: ../IkiWiki/Plugin/git.pm:624 ../IkiWiki/Plugin/git.pm:642 +#: ../IkiWiki/Plugin/git.pm:626 ../IkiWiki/Plugin/git.pm:644 #: ../IkiWiki/Receive.pm:129 #, perl-format msgid "you are not allowed to change %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:664 +#: ../IkiWiki/Plugin/git.pm:666 #, perl-format msgid "you cannot act on a file with mode %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:668 +#: ../IkiWiki/Plugin/git.pm:670 msgid "you are not allowed to change file modes" msgstr "" @@ -414,25 +414,29 @@ msgstr "ફીડ મળ્યું નહી" msgid "missing pages parameter" msgstr "ખોવાયેલ %s વિકલ્પ" -#: ../IkiWiki/Plugin/inline.pm:204 +#: ../IkiWiki/Plugin/inline.pm:200 +msgid "Sort::Naturally needed for title_natural sort" +msgstr "" + +#: ../IkiWiki/Plugin/inline.pm:211 #, perl-format msgid "unknown sort type %s" msgstr "અજાણ્યો ગોઠવણી પ્રકાર %s" -#: ../IkiWiki/Plugin/inline.pm:307 +#: ../IkiWiki/Plugin/inline.pm:314 msgid "Add a new post titled:" msgstr "આ શિર્ષકથી નવું પોસ્ટ ઉમેરો:" -#: ../IkiWiki/Plugin/inline.pm:327 +#: ../IkiWiki/Plugin/inline.pm:334 #, perl-format msgid "nonexistant template %s" msgstr "અસ્તિત્વમાં ન હોય તેવું ટેમ્પલેટ %s" -#: ../IkiWiki/Plugin/inline.pm:362 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "ચર્ચા" -#: ../IkiWiki/Plugin/inline.pm:593 +#: ../IkiWiki/Plugin/inline.pm:600 msgid "RPC::XML::Client not found, not pinging" msgstr "RPC::XML::Client મળ્યું નહી, પિંગ કરવામાં આવતું નથી" @@ -1035,12 +1039,12 @@ msgstr "" msgid "failed to load external plugin needed for %s plugin: %s" msgstr "" -#: ../IkiWiki.pm:1192 +#: ../IkiWiki.pm:1194 #, fuzzy, perl-format msgid "preprocessing loop detected on %s at depth %i" msgstr "%s પર શોધાયેલ લુપ %s પર ચલાવે છે %i ઉંડાણ પર" -#: ../IkiWiki.pm:1730 +#: ../IkiWiki.pm:1732 msgid "yes" msgstr "" diff --git a/po/ikiwiki.pot b/po/ikiwiki.pot index 94ea19f66..b8592bd48 100644 --- a/po/ikiwiki.pot +++ b/po/ikiwiki.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-03-15 17:56-0400\n" +"POT-Creation-Date: 2009-04-04 14:59-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -184,7 +184,7 @@ msgid "" msgstr "" #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:233 -#: ../IkiWiki/Plugin/inline.pm:354 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:361 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -248,19 +248,19 @@ msgstr "" msgid "Added a comment: %s" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:510 ../IkiWiki/Plugin/websetup.pm:236 +#: ../IkiWiki/Plugin/comments.pm:511 ../IkiWiki/Plugin/websetup.pm:236 msgid "you are not logged in as an admin" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:561 +#: ../IkiWiki/Plugin/comments.pm:562 msgid "Comment moderation" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:600 +#: ../IkiWiki/Plugin/comments.pm:601 msgid "comment moderation" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:751 +#: ../IkiWiki/Plugin/comments.pm:752 msgid "Comments" msgstr "" @@ -405,25 +405,29 @@ msgstr "" msgid "missing pages parameter" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:204 +#: ../IkiWiki/Plugin/inline.pm:200 +msgid "Sort::Naturally needed for title_natural sort" +msgstr "" + +#: ../IkiWiki/Plugin/inline.pm:211 #, perl-format msgid "unknown sort type %s" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:307 +#: ../IkiWiki/Plugin/inline.pm:314 msgid "Add a new post titled:" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:327 +#: ../IkiWiki/Plugin/inline.pm:334 #, perl-format msgid "nonexistant template %s" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:362 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:593 +#: ../IkiWiki/Plugin/inline.pm:600 msgid "RPC::XML::Client not found, not pinging" msgstr "" diff --git a/po/pl.po b/po/pl.po index 27641e3be..305d8bfc6 100644 --- a/po/pl.po +++ b/po/pl.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki 1.51\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-03-01 15:03-0500\n" +"POT-Creation-Date: 2009-04-04 14:59-0400\n" "PO-Revision-Date: 2007-04-27 22:05+0200\n" "Last-Translator: Pawel Tecza \n" "Language-Team: Debian L10n Polish \n" @@ -57,7 +57,7 @@ msgstr "Preferencje zapisane." msgid "You are banned." msgstr "Twój dostęp został zabroniony przez administratora." -#: ../IkiWiki/CGI.pm:390 ../IkiWiki/CGI.pm:391 ../IkiWiki.pm:1209 +#: ../IkiWiki/CGI.pm:390 ../IkiWiki/CGI.pm:391 ../IkiWiki.pm:1211 msgid "Error" msgstr "Błąd" @@ -190,7 +190,7 @@ msgid "" msgstr "" #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:233 -#: ../IkiWiki/Plugin/inline.pm:354 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:361 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -254,19 +254,19 @@ msgstr "" msgid "Added a comment: %s" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:510 ../IkiWiki/Plugin/websetup.pm:236 +#: ../IkiWiki/Plugin/comments.pm:511 ../IkiWiki/Plugin/websetup.pm:236 msgid "you are not logged in as an admin" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:561 +#: ../IkiWiki/Plugin/comments.pm:562 msgid "Comment moderation" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:600 +#: ../IkiWiki/Plugin/comments.pm:601 msgid "comment moderation" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:751 +#: ../IkiWiki/Plugin/comments.pm:752 msgid "Comments" msgstr "" @@ -336,18 +336,18 @@ msgstr "" msgid "fortune failed" msgstr "awaria fortunki" -#: ../IkiWiki/Plugin/git.pm:624 ../IkiWiki/Plugin/git.pm:642 +#: ../IkiWiki/Plugin/git.pm:626 ../IkiWiki/Plugin/git.pm:644 #: ../IkiWiki/Receive.pm:129 #, perl-format msgid "you are not allowed to change %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:664 +#: ../IkiWiki/Plugin/git.pm:666 #, perl-format msgid "you cannot act on a file with mode %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:668 +#: ../IkiWiki/Plugin/git.pm:670 msgid "you are not allowed to change file modes" msgstr "" @@ -421,25 +421,29 @@ msgstr "nieznaleziony kanał RSS" msgid "missing pages parameter" msgstr "brakujący parametr %s" -#: ../IkiWiki/Plugin/inline.pm:204 +#: ../IkiWiki/Plugin/inline.pm:200 +msgid "Sort::Naturally needed for title_natural sort" +msgstr "" + +#: ../IkiWiki/Plugin/inline.pm:211 #, perl-format msgid "unknown sort type %s" msgstr "nieznany sposób sortowania %s" -#: ../IkiWiki/Plugin/inline.pm:307 +#: ../IkiWiki/Plugin/inline.pm:314 msgid "Add a new post titled:" msgstr "Tytuł nowego wpisu" -#: ../IkiWiki/Plugin/inline.pm:327 +#: ../IkiWiki/Plugin/inline.pm:334 #, perl-format msgid "nonexistant template %s" msgstr "brakujący szablon %s" -#: ../IkiWiki/Plugin/inline.pm:362 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "Dyskusja" -#: ../IkiWiki/Plugin/inline.pm:593 +#: ../IkiWiki/Plugin/inline.pm:600 msgid "RPC::XML::Client not found, not pinging" msgstr "Nieznaleziony moduł RPC::XML::Client, brak możliwości pingowania" @@ -1061,12 +1065,12 @@ msgstr "" msgid "failed to load external plugin needed for %s plugin: %s" msgstr "" -#: ../IkiWiki.pm:1192 +#: ../IkiWiki.pm:1194 #, fuzzy, perl-format msgid "preprocessing loop detected on %s at depth %i" msgstr "polecenie preprocesora %s wykryte w %s na głębokości %i" -#: ../IkiWiki.pm:1730 +#: ../IkiWiki.pm:1732 msgid "yes" msgstr "" diff --git a/po/sv.po b/po/sv.po index 5a545bbc2..eeeac88f8 100644 --- a/po/sv.po +++ b/po/sv.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-03-01 15:03-0500\n" +"POT-Creation-Date: 2009-04-04 14:59-0400\n" "PO-Revision-Date: 2007-01-10 23:47+0100\n" "Last-Translator: Daniel Nylander \n" "Language-Team: Swedish \n" @@ -54,7 +54,7 @@ msgstr "Inställningar sparades." msgid "You are banned." msgstr "Du är bannlyst." -#: ../IkiWiki/CGI.pm:390 ../IkiWiki/CGI.pm:391 ../IkiWiki.pm:1209 +#: ../IkiWiki/CGI.pm:390 ../IkiWiki/CGI.pm:391 ../IkiWiki.pm:1211 msgid "Error" msgstr "Fel" @@ -187,7 +187,7 @@ msgid "" msgstr "" #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:233 -#: ../IkiWiki/Plugin/inline.pm:354 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:361 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -251,19 +251,19 @@ msgstr "" msgid "Added a comment: %s" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:510 ../IkiWiki/Plugin/websetup.pm:236 +#: ../IkiWiki/Plugin/comments.pm:511 ../IkiWiki/Plugin/websetup.pm:236 msgid "you are not logged in as an admin" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:561 +#: ../IkiWiki/Plugin/comments.pm:562 msgid "Comment moderation" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:600 +#: ../IkiWiki/Plugin/comments.pm:601 msgid "comment moderation" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:751 +#: ../IkiWiki/Plugin/comments.pm:752 msgid "Comments" msgstr "" @@ -333,18 +333,18 @@ msgstr "" msgid "fortune failed" msgstr "fortune misslyckades" -#: ../IkiWiki/Plugin/git.pm:624 ../IkiWiki/Plugin/git.pm:642 +#: ../IkiWiki/Plugin/git.pm:626 ../IkiWiki/Plugin/git.pm:644 #: ../IkiWiki/Receive.pm:129 #, perl-format msgid "you are not allowed to change %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:664 +#: ../IkiWiki/Plugin/git.pm:666 #, perl-format msgid "you cannot act on a file with mode %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:668 +#: ../IkiWiki/Plugin/git.pm:670 msgid "you are not allowed to change file modes" msgstr "" @@ -416,25 +416,29 @@ msgstr "mallen %s hittades inte" msgid "missing pages parameter" msgstr "mall saknar id-parameter" -#: ../IkiWiki/Plugin/inline.pm:204 +#: ../IkiWiki/Plugin/inline.pm:200 +msgid "Sort::Naturally needed for title_natural sort" +msgstr "" + +#: ../IkiWiki/Plugin/inline.pm:211 #, perl-format msgid "unknown sort type %s" msgstr "okänd sorteringstyp %s" -#: ../IkiWiki/Plugin/inline.pm:307 +#: ../IkiWiki/Plugin/inline.pm:314 msgid "Add a new post titled:" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:327 +#: ../IkiWiki/Plugin/inline.pm:334 #, perl-format msgid "nonexistant template %s" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:362 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "Diskussion" -#: ../IkiWiki/Plugin/inline.pm:593 +#: ../IkiWiki/Plugin/inline.pm:600 msgid "RPC::XML::Client not found, not pinging" msgstr "RPC::XML::Client hittades inte, pingar inte" @@ -1048,12 +1052,12 @@ msgstr "" msgid "failed to load external plugin needed for %s plugin: %s" msgstr "" -#: ../IkiWiki.pm:1192 +#: ../IkiWiki.pm:1194 #, fuzzy, perl-format msgid "preprocessing loop detected on %s at depth %i" msgstr "%s förbehandlingsslinga detekterades på %s, djup %i" -#: ../IkiWiki.pm:1730 +#: ../IkiWiki.pm:1732 msgid "yes" msgstr "" diff --git a/po/vi.po b/po/vi.po index 0ea8a0360..719e99889 100644 --- a/po/vi.po +++ b/po/vi.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-03-01 15:03-0500\n" +"POT-Creation-Date: 2009-04-04 14:59-0400\n" "PO-Revision-Date: 2007-01-13 15:31+1030\n" "Last-Translator: Clytie Siddall \n" "Language-Team: Vietnamese \n" @@ -55,7 +55,7 @@ msgstr "Tùy thích đã được lưu." msgid "You are banned." msgstr "Bạn bị cấm ra." -#: ../IkiWiki/CGI.pm:390 ../IkiWiki/CGI.pm:391 ../IkiWiki.pm:1209 +#: ../IkiWiki/CGI.pm:390 ../IkiWiki/CGI.pm:391 ../IkiWiki.pm:1211 msgid "Error" msgstr "Lỗi" @@ -188,7 +188,7 @@ msgid "" msgstr "" #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:233 -#: ../IkiWiki/Plugin/inline.pm:354 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:361 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -252,19 +252,19 @@ msgstr "" msgid "Added a comment: %s" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:510 ../IkiWiki/Plugin/websetup.pm:236 +#: ../IkiWiki/Plugin/comments.pm:511 ../IkiWiki/Plugin/websetup.pm:236 msgid "you are not logged in as an admin" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:561 +#: ../IkiWiki/Plugin/comments.pm:562 msgid "Comment moderation" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:600 +#: ../IkiWiki/Plugin/comments.pm:601 msgid "comment moderation" msgstr "" -#: ../IkiWiki/Plugin/comments.pm:751 +#: ../IkiWiki/Plugin/comments.pm:752 msgid "Comments" msgstr "" @@ -334,18 +334,18 @@ msgstr "" msgid "fortune failed" msgstr "fortune bị lỗi" -#: ../IkiWiki/Plugin/git.pm:624 ../IkiWiki/Plugin/git.pm:642 +#: ../IkiWiki/Plugin/git.pm:626 ../IkiWiki/Plugin/git.pm:644 #: ../IkiWiki/Receive.pm:129 #, perl-format msgid "you are not allowed to change %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:664 +#: ../IkiWiki/Plugin/git.pm:666 #, perl-format msgid "you cannot act on a file with mode %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:668 +#: ../IkiWiki/Plugin/git.pm:670 msgid "you are not allowed to change file modes" msgstr "" @@ -419,25 +419,29 @@ msgstr "không tìm thấy mẫu %s" msgid "missing pages parameter" msgstr "mẫu thiếu tham số id" -#: ../IkiWiki/Plugin/inline.pm:204 +#: ../IkiWiki/Plugin/inline.pm:200 +msgid "Sort::Naturally needed for title_natural sort" +msgstr "" + +#: ../IkiWiki/Plugin/inline.pm:211 #, perl-format msgid "unknown sort type %s" msgstr "kiểu sắp xếp không rõ %s" -#: ../IkiWiki/Plugin/inline.pm:307 +#: ../IkiWiki/Plugin/inline.pm:314 msgid "Add a new post titled:" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:327 +#: ../IkiWiki/Plugin/inline.pm:334 #, perl-format msgid "nonexistant template %s" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:362 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "Thảo luận" -#: ../IkiWiki/Plugin/inline.pm:593 +#: ../IkiWiki/Plugin/inline.pm:600 msgid "RPC::XML::Client not found, not pinging" msgstr "Không tìm thấy RPC::XML::Client nên không gửi gói tin ping" @@ -1049,12 +1053,12 @@ msgstr "" msgid "failed to load external plugin needed for %s plugin: %s" msgstr "" -#: ../IkiWiki.pm:1192 +#: ../IkiWiki.pm:1194 #, fuzzy, perl-format msgid "preprocessing loop detected on %s at depth %i" msgstr "vòng lặp tiền xử lý %s được phát hiện trên %s ở độ sâu %i" -#: ../IkiWiki.pm:1730 +#: ../IkiWiki.pm:1732 msgid "yes" msgstr "" From 08fda4c9d374de1d3de3172a192d4d915d3dc0c1 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 4 Apr 2009 17:19:58 -0400 Subject: [PATCH 046/113] add news item for ikiwiki 3.09 --- doc/news/version_3.08.mdwn | 6 ------ doc/news/version_3.09.mdwn | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 6 deletions(-) delete mode 100644 doc/news/version_3.08.mdwn create mode 100644 doc/news/version_3.09.mdwn diff --git a/doc/news/version_3.08.mdwn b/doc/news/version_3.08.mdwn deleted file mode 100644 index 06d795c23..000000000 --- a/doc/news/version_3.08.mdwn +++ /dev/null @@ -1,6 +0,0 @@ -ikiwiki 3.08 released with [[!toggle text="these changes"]] -[[!toggleable text=""" - * git: Fix utf-8 encoding of author names. - * git: Manually decode git output from utf-8, avoids - warning messages on invalidly encoded output. - * Fix bug that caused weird things to appear as page types."""]] \ No newline at end of file diff --git a/doc/news/version_3.09.mdwn b/doc/news/version_3.09.mdwn new file mode 100644 index 000000000..d5e1a6545 --- /dev/null +++ b/doc/news/version_3.09.mdwn @@ -0,0 +1,16 @@ +ikiwiki 3.09 released with [[!toggle text="these changes"]] +[[!toggleable text=""" + * inline: Add title\_natural sort order, using Sort::Naturally + (chrysn) + * inline: Fix urls to feed when feedfile is used on an index page. + * git, mercurial: Fix --getctime to return file creation time, + not last commit time. + * Updated French translation (Jean-Luc Coulon). Closes: #[521072](http://bugs.debian.org/521072) + * css: Add clear: both to inlinefooter. + * comments: Fix too loose test for comments pages that matched + normal pages with "comment\_" in their name. Closes: #[521322](http://bugs.debian.org/521322) + * comments: Fix anchor ids to be legal xhtml. Closes: #[521339](http://bugs.debian.org/521339) + * Fix documentation of anonok\_pagespec. Closes: #[521793](http://bugs.debian.org/521793) + * Add missing suggests on libtext-textile-perl. Closes: #[522039](http://bugs.debian.org/522039) + * recentchanges: change to using do=goto links for user links. + * Fix git test suite to use a bare repo."""]] \ No newline at end of file From bbd61b346b9375b4fc6370593e15e7db075b122e Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 4 Apr 2009 17:45:13 -0400 Subject: [PATCH 047/113] formatting, layout, indentation, coding style --- IkiWiki/Plugin/darcs.pm | 218 +++++++++++++++++++--------------------- 1 file changed, 106 insertions(+), 112 deletions(-) diff --git a/IkiWiki/Plugin/darcs.pm b/IkiWiki/Plugin/darcs.pm index 1facc1789..978457b2c 100644 --- a/IkiWiki/Plugin/darcs.pm +++ b/IkiWiki/Plugin/darcs.pm @@ -1,3 +1,4 @@ +#!/usr/bin/perl # Support for the darcs rcs, . # Copyright (C) 2006 Thomas Schwinge # 2007 Benjamin A'Lee @@ -36,14 +37,12 @@ # you must not 'darcs push' into this repository, as this might create # race conditions, as I understand it. - package IkiWiki::Plugin::darcs; use warnings; use strict; use IkiWiki; - sub import { hook(type => "checkconfig", id => "darcs", call => \&checkconfig); hook(type => "getsetup", id => "darcs", call => \&getsetup); @@ -59,9 +58,6 @@ sub import { hook(type => "rcs", id => "rcs_getctime", call => \&rcs_getctime); } - -# Internal functions - sub silentsystem (@) { open(SAVED_STDOUT, ">&STDOUT"); open(STDOUT, ">/dev/null"); @@ -94,8 +90,8 @@ sub darcs_info ($$$) { } sub file_in_vc($$) { - my $repodir = shift; - my $file = shift; + my $repodir = shift; + my $file = shift; my $child = open(DARCS_MANIFEST, "-|"); if (! $child) { @@ -115,14 +111,11 @@ sub darcs_rev($) { my $file = shift; # Relative to the repodir. my $repodir = $config{srcdir}; - return "" if (! file_in_vc($repodir, $file)); + return "" if (! file_in_vc($repodir, $file)); my $hash = darcs_info('hash', $repodir, $file); return defined $hash ? $hash : ""; } - -# Exported functions. - sub checkconfig() { if (defined $config{darcs_wrapper} && length $config{darcs_wrapper}) { push @{$config{wrappers}}, { @@ -134,38 +127,38 @@ sub checkconfig() { sub getsetup() { return - plugin => { - safe => 0, # rcs plugin - rebuild => undef, - }, - darcs_wrapper => { - type => "string", - example => "/darcs/repo/_darcs/ikiwiki-wrapper", - description => "wrapper to generate (set as master repo apply hook)", - safe => 0, # file - rebuild => 0, - }, - darcs_wrappermode => { - type => "string", - example => '06755', - description => "mode for darcs_wrapper (can safely be made suid)", - safe => 0, - rebuild => 0, - }, - historyurl => { - type => "string", - example => "http://darcs.example.com/darcsweb.cgi?r=wiki;a=filehistory;f=[[file]]", - description => "darcsweb url to show file history ([[file]] substituted)", - safe => 1, - rebuild => 1, - }, - diffurl => { - type => "string", - example => "http://darcs.example.com/darcsweb.cgi?r=wiki;a=filediff;h=[[hash]];f=[[file]]", - description => "darcsweb url to show a diff ([[hash]] and [[file]] substituted)", - safe => 1, - rebuild => 1, - }, + plugin => { + safe => 0, # rcs plugin + rebuild => undef, + }, + darcs_wrapper => { + type => "string", + example => "/darcs/repo/_darcs/ikiwiki-wrapper", + description => "wrapper to generate (set as master repo apply hook)", + safe => 0, # file + rebuild => 0, + }, + darcs_wrappermode => { + type => "string", + example => '06755', + description => "mode for darcs_wrapper (can safely be made suid)", + safe => 0, + rebuild => 0, + }, + historyurl => { + type => "string", + example => "http://darcs.example.com/darcsweb.cgi?r=wiki;a=filehistory;f=[[file]]", + description => "darcsweb url to show file history ([[file]] substituted)", + safe => 1, + rebuild => 1, + }, + diffurl => { + type => "string", + example => "http://darcs.example.com/darcsweb.cgi?r=wiki;a=filediff;h=[[hash]];f=[[file]]", + description => "darcsweb url to show a diff ([[hash]] and [[file]] substituted)", + safe => 1, + rebuild => 1, + }, } sub rcs_update () { @@ -176,8 +169,7 @@ sub rcs_prepedit ($) { # Prepares to edit a file under revision control. Returns a token that # must be passed to rcs_commit() when the file is to be commited. For us, # this token the hash value of the latest patch that modifies the file, - # i.e. something like its current revision. If the file is not yet added - # to the repository, we return TODO: the empty string. + # i.e. something like its current revision. my $file = shift; # Relative to the repodir. my $rev = darcs_rev($file); @@ -195,63 +187,63 @@ sub rcs_commit ($$$;$$) { # Yes, the following is a bit convoluted. if ($changed) { - # TODO. Invent a better, non-conflicting name. - rename("$config{srcdir}/$file", "$config{srcdir}/$file.save") or - error("failed to rename $file to $file.save: $!"); + # TODO. Invent a better, non-conflicting name. + rename("$config{srcdir}/$file", "$config{srcdir}/$file.save") or + error("failed to rename $file to $file.save: $!"); - # Roll the repository back to $rcstoken. + # Roll the repository back to $rcstoken. - # TODO. Can we be sure that no changes are lost? I think that - # we can, if we make sure that the 'darcs push' below will always - # succeed. - - # We need to revert everything as 'darcs obliterate' might choke - # otherwise. - # TODO: 'yes | ...' needed? Doesn't seem so. - silentsystem('darcs', "revert", "--repodir", $config{srcdir}, "--all") and - error("'darcs revert' failed"); - # Remove all patches starting at $rcstoken. - my $child = open(DARCS_OBLITERATE, "|-"); - if (! $child) { - open(STDOUT, ">/dev/null"); - exec('darcs', "obliterate", "--repodir", $config{srcdir}, - "--match", "hash " . $rcstoken) and - error("'darcs obliterate' failed"); - } - while (print DARCS_OBLITERATE "y") { - ; - } - close(DARCS_OBLITERATE); - # Restore the $rcstoken one. - silentsystem('darcs', "pull", "--quiet", "--repodir", $config{srcdir}, - "--match", "hash " . $rcstoken, "--all") and - error("'darcs pull' failed"); - - # We're back at $rcstoken. Re-install the modified file. - rename("$config{srcdir}/$file.save", "$config{srcdir}/$file") or - error("failed to rename $file.save to $file: $!"); + # TODO. Can we be sure that no changes are lost? I think that + # we can, if we make sure that the 'darcs push' below will always + # succeed. + + # We need to revert everything as 'darcs obliterate' might choke + # otherwise. + # TODO: 'yes | ...' needed? Doesn't seem so. + silentsystem('darcs', "revert", "--repodir", $config{srcdir}, "--all") == 0 || + error("'darcs revert' failed"); + # Remove all patches starting at $rcstoken. + my $child = open(DARCS_OBLITERATE, "|-"); + if (! $child) { + open(STDOUT, ">/dev/null"); + exec('darcs', "obliterate", "--repodir", $config{srcdir}, + "--match", "hash " . $rcstoken) and + error("'darcs obliterate' failed"); + } + 1 while print DARCS_OBLITERATE "y"; + close(DARCS_OBLITERATE); + # Restore the $rcstoken one. + silentsystem('darcs', "pull", "--quiet", "--repodir", $config{srcdir}, + "--match", "hash " . $rcstoken, "--all") == 0 || + error("'darcs pull' failed"); + + # We're back at $rcstoken. Re-install the modified file. + rename("$config{srcdir}/$file.save", "$config{srcdir}/$file") or + error("failed to rename $file.save to $file: $!"); } # Record the changes. my $author; if (defined $user) { $author = "$user\@web"; - } elsif (defined $ipaddr) { + } + elsif (defined $ipaddr) { $author = "$ipaddr\@web"; - } else { + } + else { $author = "anon\@web"; } if (!defined $message || !length($message)) { $message = "empty message"; } silentsystem('darcs', 'record', '--repodir', $config{srcdir}, '--all', - '-m', $message, '--author', $author, $file) and + '-m', $message, '--author', $author, $file) == 0 || error("'darcs record' failed"); # Update the repository by pulling from the default repository, which is # master repository. silentsystem('darcs', "pull", "--quiet", "--repodir", $config{srcdir}, - "--all") and error("'darcs pull' failed"); + "--all") !=0 || error("'darcs pull' failed"); # If this updating yields any conflicts, we'll record them now to resolve # them. If nothing is recorded, there are no conflicts. @@ -259,25 +251,26 @@ sub rcs_commit ($$$;$$) { # TODO: Use only the first line here, i.e. only the patch name? writefile("$file.log", $config{srcdir}, 'resolve conflicts: ' . $message); silentsystem('darcs', 'record', '--repodir', $config{srcdir}, '--all', - '-m', 'resolve conflicts: ' . $message, '--author', $author, $file) and + '-m', 'resolve conflicts: ' . $message, '--author', $author, $file) == 0 || error("'darcs record' failed"); my $conflicts = darcs_rev($file) ne $rcstoken; unlink("$config{srcdir}/$file.log") or - error("failed to remove '$file.log'"); + error("failed to remove '$file.log'"); # Push the changes to the main repository. - silentsystem('darcs', 'push', '--quiet', '--repodir', $config{srcdir}, '--all') - and error("'darcs push' failed"); + silentsystem('darcs', 'push', '--quiet', '--repodir', $config{srcdir}, '--all') == 0 || + error("'darcs push' failed"); # TODO: darcs send? if ($conflicts) { my $document = readfile("$config{srcdir}/$file"); # Try to leave everything in a consistent state. # TODO: 'yes | ...' needed? Doesn't seem so. - silentsystem('darcs', "revert", "--repodir", $config{srcdir}, "--all") and + silentsystem('darcs', "revert", "--repodir", $config{srcdir}, "--all") == 0 || warn("'darcs revert' failed"); return $document; - } else { + } + else { return undef; } } @@ -288,9 +281,11 @@ sub rcs_commit_staged($$$) { my $author; if (defined $user) { $author = "$user\@web"; - } elsif (defined $ipaddr) { + } + elsif (defined $ipaddr) { $author = "$ipaddr\@web"; - } else { + } + else { $author = "anon\@web"; } if (!defined $message || !length($message)) { @@ -298,11 +293,11 @@ sub rcs_commit_staged($$$) { } silentsystem('darcs', "record", "--repodir", $config{srcdir}, "-a", "-A", $author, - "-m", $message) and error("'darcs record' failed"); + "-m", $message) == 0 || error("'darcs record' failed"); # Push the changes to the main repository. - silentsystem('darcs', 'push', '--quiet', '--repodir', $config{srcdir}, '--all') - and error("'darcs push' failed"); + silentsystem('darcs', 'push', '--quiet', '--repodir', $config{srcdir}, '--all') == 0 || + error("'darcs push' failed"); # TODO: darcs send? return undef; @@ -314,7 +309,7 @@ sub rcs_add ($) { if(! file_in_vc($config{srcdir}, $file)) { # Intermediate directories will be added automagically. system('darcs', 'add', '--quiet', '--repodir', $config{srcdir}, - '--boring', $file) and error("'darcs add' failed"); + '--boring', $file) == 0 || error("'darcs add' failed"); } } @@ -328,8 +323,8 @@ sub rcs_rename ($$) { my $a = shift; # Relative to the repodir. my $b = shift; # Relative to the repodir. - system('darcs', 'mv', '--repodir', $config{srcdir}, $a, $b) - and error("'darcs mv' failed"); + system('darcs', 'mv', '--repodir', $config{srcdir}, $a, $b) == 0 || + error("'darcs mv' failed"); } sub rcs_recentchanges ($) { @@ -367,20 +362,17 @@ sub rcs_recentchanges ($) { push @pages, $_ for (@{$patch->{summary}->[0]->{modify_file}}); push @pages, $_ for (@{$patch->{summary}->[0]->{add_file}}); push @pages, $_ for (@{$patch->{summary}->[0]->{remove_file}}); - for (@pages) { - my $f = $_; - $f = $_->{content} if (ref $_); + foreach my $f (@pages) { + $f = $f->{content} if ref $f; $f =~ s,^\s+,,; $f =~ s,\s+$,,; # cut whitespace push @files, $f; } - for (@{$patch->{summary}->[0]->{move}}) { - my $p = $_; + foreach my $p (@{$patch->{summary}->[0]->{move}}) { push @files, $p->{from}; } - for (@files) { - my $f = $_; + foreach my $f (@files) { my $d = defined $config{'diffurl'} ? $config{'diffurl'} : ""; $d =~ s/\[\[file\]\]/$f/go; $d =~ s/\[\[hash\]\]/$hash/go; @@ -397,12 +389,13 @@ sub rcs_recentchanges ($) { . scalar @pg . " changes)"); my @message; - push @message, { line => $_ } for (@{$patch->{name}}); + push @message, { line => $_ } foreach (@{$patch->{name}}); my $committype; if ($patch->{author} =~ /\@web$/) { $committype = "web"; - } else { + } + else { $committype = "darcs"; } @@ -456,25 +449,26 @@ sub rcs_getctime ($) { } my $data; - $data .= $_ while(); + { + local $/=undef; + $data = ; + } close LOG; my $log = XMLin($data, ForceArray => 1); - my $datestr=$log->{patch}[0]->{local_date}; + my $datestr = $log->{patch}[0]->{local_date}; if (! defined $datestr) { warn "failed to get ctime for $filer"; return 0; } - my $date=str2time($datestr); - - #debug("found ctime ".localtime($date)." for $filer"); + my $date = str2time($datestr); + + debug("ctime for '$file': ". localtime($date)); return $date; } 1 - -# vim: ts=4 sw=4 noet From f7fa6966195a3a4cc392aea56b307c939d28ffc7 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 4 Apr 2009 17:49:04 -0400 Subject: [PATCH 048/113] move comments to copyright and changelog --- IkiWiki/Plugin/darcs.pm | 38 -------------------------------------- debian/changelog | 13 +++++++++++++ debian/copyright | 10 ++++++++++ 3 files changed, 23 insertions(+), 38 deletions(-) diff --git a/IkiWiki/Plugin/darcs.pm b/IkiWiki/Plugin/darcs.pm index 978457b2c..dfd193b9c 100644 --- a/IkiWiki/Plugin/darcs.pm +++ b/IkiWiki/Plugin/darcs.pm @@ -1,42 +1,4 @@ #!/usr/bin/perl -# Support for the darcs rcs, . -# Copyright (C) 2006 Thomas Schwinge -# 2007 Benjamin A'Lee -# Tuomo Valkonen -# 2008 Simon Michael -# Petr Ročkai -# Sven M. Hallberg -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 2 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -# History (see http://ikiwiki.info/todo/darcs/): -# -# * Thomas Schwinge wrote the original file, implementing only rcs_commit. -# * Benjamin A'Lee contributed an alternative implementation. -# * Tuomo Valkonen contributed rcs_getctime and stub rcs_recentchanges. -# * Simon Michael contributed multiple changes. -# * Petr Ročkai fixed rcs_recentchanges and added caching to rcs_getctime. -# * Sven M. Hallberg merged the above and added missing features. - - -# We're guaranteed to be the only instance of ikiwiki running at a given -# time. It is essential that only ikiwiki is working on a particular -# repository. That means one instance of ikiwiki and it also means that -# you must not 'darcs push' into this repository, as this might create -# race conditions, as I understand it. - package IkiWiki::Plugin::darcs; use warnings; diff --git a/debian/changelog b/debian/changelog index fab20985d..2b1f938b3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,16 @@ +ikiwiki (3.10) UNRELEASED; urgency=low + + * darcs: Finally added support for this VCS, thanks to many + contributors: + - Thomas Schwinge wrote the original file, implementing only rcs_commit. + - Benjamin A'Lee contributed an alternative implementation. + - Tuomo Valkonen contributed rcs_getctime and stub rcs_recentchanges. + - Simon Michael contributed multiple changes. + - Petr Ročkai fixed rcs_recentchanges. + - Sven M. Hallberg merged the above and added missing features. + + -- Joey Hess Sat, 04 Apr 2009 17:47:36 -0400 + ikiwiki (3.09) unstable; urgency=low * inline: Add title_natural sort order, using Sort::Naturally diff --git a/debian/copyright b/debian/copyright index 67f0ac540..5fc55f5c5 100644 --- a/debian/copyright +++ b/debian/copyright @@ -32,6 +32,16 @@ Files: tla.pm Copyright: © 2006 Clint Adams License: GPL-2+ +Files: darcs.pm +Copyright: + © 2006 Thomas Schwinge + 2007 Benjamin A'Lee + Tuomo Valkonen + 2008 Simon Michael + Petr Ročkai + Sven M. Hallberg +License: GPL-2+ + Files: teximg.pm Copyright: © 2007 Patrick Winnertz License: GPL-2+ From 2cf63041acc2051d55e0150b3a5b00ed454ae76d Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 4 Apr 2009 17:53:29 -0400 Subject: [PATCH 049/113] remove the one directory form for darcs I see no need to have darcs have a special case handling for a one directory form. --- doc/ikiwiki-makerepo.mdwn | 10 +++------- ikiwiki-makerepo | 13 ++----------- 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/doc/ikiwiki-makerepo.mdwn b/doc/ikiwiki-makerepo.mdwn index 3fbfbdc82..4bb2afa16 100644 --- a/doc/ikiwiki-makerepo.mdwn +++ b/doc/ikiwiki-makerepo.mdwn @@ -6,7 +6,7 @@ ikiwiki-makerepo - check an ikiwiki srcdir into revision control ikiwiki-makerepo svn|git|monotone|darcs srcdir repository -ikiwiki-makerepo bzr|mercurial|darcs srcdir +ikiwiki-makerepo bzr|mercurial srcdir # DESCRIPTION @@ -18,12 +18,8 @@ Note that for mercurial and bzr, the srcdir is converted into a repository. There is no need to have a separate repository with mercurial or bzr. -For darcs, the second (one-argument) form turns the given srcdir into a -darcs master repository with the (new) srcdir inside. Adjust your ikiwiki.setup -according to the command output! Also, the master repo's apply hook will be -preconfigured to call a (hypothetical) ikiwiki wrapper. The command -reports the relevant file. Adjust it as needed or remove it if you don't use -the cgi script. +For darcs, the master repo's apply hook will be preconfigured to call a +ikiwiki wrapper. Note that for monotone, you are assumed to already have run "mtn genkey" to generate key. diff --git a/ikiwiki-makerepo b/ikiwiki-makerepo index 1c9f256bd..787611ac1 100755 --- a/ikiwiki-makerepo +++ b/ikiwiki-makerepo @@ -7,7 +7,7 @@ repository="$3" usage () { echo "usage: ikiwiki-makerepo svn|git|monotone|darcs srcdir repository" >&2 - echo " ikiwiki-makerepo bzr|mercurial|darcs srcdir" >&2 + echo " ikiwiki-makerepo bzr|mercurial srcdir" >&2 exit 1 } @@ -20,7 +20,7 @@ if [ ! -d "$srcdir" ]; then exit 1 fi -if [ "$rcs" != mercurial ] && [ "$rcs" != bzr ] && [ "$rcs" != darcs ]; then +if [ "$rcs" != mercurial ] && [ "$rcs" != bzr ]; then if [ -z "$repository" ]; then echo "you need to specify both a srcdir and a repository for $rcs" >&2 usage @@ -127,15 +127,6 @@ darcs) exit 1 fi - # if only one arg is given, we turn the given srcdir into the darcs - # master repo with a hidden srcdir inside its _darcs directory. - if [ -z "$repository" ]; then - echo "Turning $srcdir into master repo." - repository="$srcdir" - srcdir="$srcdir/_darcs/srcdir" - echo "The new srcdir is $srcdir - adjust ikiwiki.setup accordingly!" - fi - mkdir -p "$repository" cd "$repository" darcs initialize From c93360a751ec39191b2cd10a6e8edc67b6c09134 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 4 Apr 2009 17:54:32 -0400 Subject: [PATCH 050/113] typo --- doc/ikiwiki-makerepo.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/ikiwiki-makerepo.mdwn b/doc/ikiwiki-makerepo.mdwn index 4bb2afa16..13f88dc27 100644 --- a/doc/ikiwiki-makerepo.mdwn +++ b/doc/ikiwiki-makerepo.mdwn @@ -22,7 +22,7 @@ For darcs, the master repo's apply hook will be preconfigured to call a ikiwiki wrapper. Note that for monotone, you are assumed to already have run "mtn genkey" -to generate key. +to generate a key. # AUTHOR From ca5704936d1d57fdd11ea850608e6fa9d574d9dd Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 4 Apr 2009 18:04:20 -0400 Subject: [PATCH 051/113] update docs for darcs Deleted all the old incomplete implementations. Moved explanation of the two-repo system currently implemented for darcs into rcs/details, and removed discussion from there about other methods (including one-repo). Wrote a rcs/darcs page, which I hope is accurate. --- doc/rcs/darcs.mdwn | 15 ++ doc/rcs/details.mdwn | 98 +-------- doc/todo/darcs.mdwn | 510 +------------------------------------------ 3 files changed, 29 insertions(+), 594 deletions(-) create mode 100644 doc/rcs/darcs.mdwn diff --git a/doc/rcs/darcs.mdwn b/doc/rcs/darcs.mdwn new file mode 100644 index 000000000..7f66d0808 --- /dev/null +++ b/doc/rcs/darcs.mdwn @@ -0,0 +1,15 @@ +[Darcs](http://darcs.new) is a distributed revison control +system. Ikiwiki supports storing a wiki in a +Darcs repository. + +An Ikiwiki wrapper is run by the `posthook` to update a wiki whenever commits +or remote pushes come in. When running as a [[cgi]] with Darcs, ikiwiki +automatically commits edited pages, and uses the Darcs history to generate the +[[RecentChanges]] page. + +Example for a `_darcs/prefs/defaults` file in `$SRCDIR`: + + apply posthook /path/to/repository/_darcs/ikiwrapper + apply run-posthook + +See also [[todo/darcs|todo/darcs]] diff --git a/doc/rcs/details.mdwn b/doc/rcs/details.mdwn index 089221cab..00559a4dd 100644 --- a/doc/rcs/details.mdwn +++ b/doc/rcs/details.mdwn @@ -32,98 +32,20 @@ You browse and web-edit the wiki on W. W "belongs" to ikiwiki and should not be edited directly. -## [darcs](http://darcs.net/) (not yet included) +## [[darcs]] -Support for using darcs as a backend is being worked on by [Thomas -Schwinge](mailto:tschwinge@gnu.org), although development is on hold curretly. -There is a patch in [[todo/darcs]]. +Regarding the repository layout: There are two darcs repositories. One is the `srcdir`, the other we'll call `master`. -### How will it work internally? +* HTML is generated from `srcdir`. +* CGI edits happen in `srcdir`. +* The backend pulls updates from `master` into `srcdir`, i.e. darcs commits should happen to `master`. +* `master` calls ikiwiki (through a wrapper) in its apply posthook, i.e. `master/_darcs/prefs/defaults` should look like this: -``Master'' repository R1. - -RCS commits from the outside are installed into R1. - -HTML is generated from R1. HTML is automatically generated (by using a -``post-hook'') each time a new change is installed into R1. It follows -that rcs_update() is not needed. - -There is a working copy of R1: R2. - -CGI operates on R2. rcs_commit() will push from R2 to R1. - -You browse the wiki on R1 and web-edit it on R2. This means for example -that R2 needs to be updated from R1 if you are going to web-edit a page, -as the user otherwise might be irritated otherwise... - -How do changes get from R1 to R2? Currently only internally in -rcs\_commit(). Is rcs\_prepedit() suitable? - -It follows that the HTML rendering and the CGI handling can be completely -separated parts in ikiwiki. - -What repository should [[RecentChanges]] and History work on? R1? - -#### Rationale for doing it differently than in the Subversion case - -darcs is a distributed RCS, which means that every checkout of a -repository is equal to the repository it was checked-out from. There is -no forced hierarchy. - -R1 is nevertheless called the master repository. It's used for -collecting all the changes and publishing them: on the one hand via the -rendered HTML and on the other via the standard darcs RCS interface. - -R2, the repository the CGI operates on, is just a checkout of R1 and -doesn't really differ from the other checkouts that people will branch -off from R1. - -(To be continued.) - -#### Another possible approach - -Here's what I (tuomov) think, would be a “cleaner” approach: - - 1. Upon starting to edit, Ikiwiki gets a copy of the page, and `darcs changes --context`. - This context _and_ the present version of the page are stored in as the “version” of the - page in a hidden control of the HTML. - Thus the HTML includes all that is needed to generate a patch wrt. to the state of the - repository at the time the edit was started. This is of course all that darcs needs. - 2. Once the user is done with editing, _Ikiwiki generates a patch bundle_ for darcs. - This should be easy with existing `Text::Diff` or somesuch modules, as the Web edits - only concern single files. The reason why the old version of the page is stored in - the HTML (possibly compressed) is that the diff can be generated. - 3. Now this patch bundle is applied with `darcs apply`, or sent by email for moderation… - there are many possibilities. - -This approach avoids some of the problems of concurrent edits that the previous one may have, -although there may be conflicts, which may or may not propagate to the displayed web page. -(Unfortunately there is not an option to `darcs apply` to generate some sort of ‘confliction resolution -bundle’.) Also, only one repository is needed, as it is never directly modified -by Ikiwiki. - -This approach might be applicable to other distributed VCSs as well, although they're not as oriented -towards transmitting changes with standalone patch bundles (often by email) as darcs is. - -> The mercurial plugin seems to just use one repo and edit it directly - is -> there some reason that's okay there but not for darcs? I agree with tuomov -> that having just the one repo would be preferable; the point of a dvcs is -> that there's no difference between one repo and another. I've got a -> darcs.pm based on mercurial.pm, that's almost usable... --bma - ->> IMHO it comes down to whatever works well for a given RCS. Seems like ->> the darcs approach _could_ be done with most any distributed system, but ->> it might be overkill for some (or all?) While there is the incomplete darcs ->> plugin in [[todo/darcs]], if you submit one that's complete, I will ->> probably accept it into ikiwiki.. --[[Joey]] - ->>> I'd like to help make a robust darcs (2) backend. I also think ikiwiki should use ->>> exactly one darcs repo. I think we can simplify and say conflicting web ->>> edits are not allowed, like most current wiki engines. I don't see that ->>> saving (so much) context in the html is necessary, then. ->>> bma, I would like to see your code. --[[Simon_Michael]] ->>> PS ah, there it is. Let's continue on the [[todo/darcs]] page. + apply posthook ikiwrap + apply run-posthook +* The backend pushes CGI edits from `srcdir` back into `master` (triggering the apply hook). +* The working copies in `srcdir` and `master` should *not* be touched by the user, only by the CGI or darcs, respectively. ## [[Git]] diff --git a/doc/todo/darcs.mdwn b/doc/todo/darcs.mdwn index 882a41379..f721e15c5 100644 --- a/doc/todo/darcs.mdwn +++ b/doc/todo/darcs.mdwn @@ -1,513 +1,9 @@ -Here's Thomas Schwinge unfinished darcs support for ikiwiki. - -(Finishing this has been suggested as a [[soc]] project.) - -> I haven't been working on this for months and also won't in the near -> future. Feel free to use what I have done so -> far and bring it into an usable state! Also, feel free to contact me -> if there are questions. - --- [Thomas Schwinge](mailto:tschwinge@gnu.org) - -[[!toggle text="show"]] -[[!toggleable text=""" - # Support for the darcs rcs, . - # Copyright (C) 2006 Thomas Schwinge - # - # This program is free software; you can redistribute it and/or modify it - # under the terms of the GNU General Public License as published by the - # Free Software Foundation; either version 2 of the License, or (at your - # option) any later version. - # - # This program is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of - # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License along - # with this program; if not, write to the Free Software Foundation, Inc., - # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - - # We're guaranteed to be the only instance of ikiwiki running at a given - # time. It is essential that only ikiwiki is working on a particular - # repository. That means one instance of ikiwiki and it also means that - # you must not `darcs push' into this repository, as this might create - # race conditions, as I understand it. - - - use warnings; - use strict; - use IkiWiki; - - package IkiWiki; - - - # Which darcs executable to use. - my $darcs = ($ENV{DARCS} or 'darcs'); - - - # Internal functions. - - sub darcs_info ($$$) { - my $field = shift; - my $repodir = shift; - my $file = shift; # Relative to the repodir. - - my $child = open(DARCS_CHANGES, "-|"); - if (! $child) { - exec($darcs, 'changes', '--repo=' . $repodir, '--xml-output', $file) or - error('failed to run `darcs changes\''); - } - - # Brute force for now. :-/ - while () { - last if /^<\/created_as>$/; - } - ($_) = =~ /$field=\'([^\']+)/; - $field eq 'hash' and s/\.gz//; # Strip away the `.gz' from `hash'es. - - close(DARCS_CHANGES) or error('`darcs changes\' exited ' . $?); - - return $_; - } - - - # Exported functions. - - sub rcs_update () { - # Not needed. - } - - sub rcs_prepedit ($) { - # Prepares to edit a file under revision control. Returns a token that - # must be passed to rcs_commit() when the file is to be commited. For us, - # this token the hash value of the latest patch that modifies the file, - # i.e. something like its current revision. If the file is not yet added - # to the repository, we return TODO: the empty string. - - my $file = shift; # Relative to the repodir. - - my $hash = darcs_info('hash', $config{srcdir}, $file); - return defined $hash ? $hash : ""; - } - - sub rcs_commit ($$$) { - # Commit the page. Returns `undef' on success and a version of the page - # with conflict markers on failure. - - my $file = shift; # Relative to the repodir. - my $message = shift; - my $rcstoken = shift; - - # Compute if the ``revision'' of $file changed. - my $changed = darcs_info('hash', $config{srcdir}, $file) ne $rcstoken; - - # Yes, the following is a bit convoluted. - if ($changed) { - # TODO. Invent a better, non-conflicting name. - rename("$config{srcdir}/$file", "$config{srcdir}/$file.save") or - error("failed to rename $file to $file.save: $!"); - - # Roll the repository back to $rcstoken. - - # TODO. Can we be sure that no changes are lost? I think that - # we can, if we make sure that the `darcs push' below will always - # succeed. - - # We need to revert everything as `darcs obliterate' might choke - # otherwise. - # TODO: `yes | ...' needed? Doesn't seem so. - system($darcs, "revert", "--repodir=" . $config{srcdir}, "--all") and - error("`darcs revert' failed"); - # Remove all patches starting at $rcstoken. - # TODO. Something like `yes | darcs obliterate ...' seems to be needed. - system($darcs, "obliterate", "--quiet", "--repodir" . $config{srcdir}, - "--match", "hash " . $rcstoken) and - error("`darcs obliterate' failed"); - # Restore the $rcstoken one. - system($darcs, "pull", "--quiet", "--repodir=" . $config{srcdir}, - "--match", "hash " . $rcstoken, "--all") and - error("`darcs pull' failed"); - - # We're back at $rcstoken. Re-install the modified file. - rename("$config{srcdir}/$file.save", "$config{srcdir}/$file") or - error("failed to rename $file.save to $file: $!"); - } - - # Record the changes. - # TODO: What if $message is empty? - writefile("$file.log", $config{srcdir}, $message); - system($darcs, 'record', '--repodir=' . $config{srcdir}, '--all', - '--logfile=' . "$config{srcdir}/$file.log", - '--author=' . 'web commit ', $file) and - error('`darcs record\' failed'); - - # Update the repository by pulling from the default repository, which is - # master repository. - system($darcs, "pull", "--quiet", "--repodir=" . $config{srcdir}, - "--all") and error("`darcs pull' failed\n"); - - # If this updating yields any conflicts, we'll record them now to resolve - # them. If nothing is recorded, there are no conflicts. - $rcstoken = darcs_info('hash', $config{srcdir}, $file); - # TODO: Use only the first line here, i.e. only the patch name? - writefile("$file.log", $config{srcdir}, 'resolve conflicts: ' . $message); - system($darcs, 'record', '--repodir=' . $config{srcdir}, '--all', - '--logfile=' . "$config{srcdir}/$file.log", - '--author=' . 'web commit ', $file) and - error('`darcs record\' failed'); - my $conflicts = darcs_info('hash', $config{srcdir}, $file) ne $rcstoken; - unlink("$config{srcdir}/$file.log") or - error("failed to remove `$file.log'"); - - # Push the changes to the main repository. - system($darcs, 'push', '--quiet', '--repodir=' . $config{srcdir}, '--all') - and error('`darcs push\' failed'); - # TODO: darcs send? - - if ($conflicts) { - my $document = readfile("$config{srcdir}/$file"); - # Try to leave everything in a consistent state. - # TODO: `yes | ...' needed? Doesn't seem so. - system($darcs, "revert", "--repodir=" . $config{srcdir}, "--all") and - warn("`darcs revert' failed.\n"); - return $document; - } else { - return undef; - } - } - - sub rcs_add ($) { - my $file = shift; # Relative to the repodir. - - # Intermediate directories will be added automagically. - system($darcs, 'add', '--quiet', '--repodir=' . $config{srcdir}, - '--boring', $file) and error('`darcs add\' failed'); - } - - sub rcs_recentchanges ($) { - warn('rcs_recentchanges() is not implemented'); - return 'rcs_recentchanges() is not implemented'; - } - - sub rcs_notify () { - warn('rcs_notify() is not implemented'); - } - - sub rcs_getctime () { - warn('rcs_getctime() is not implemented'); - } - - 1 -"""]] - -This is my ([bma](bma@bmalee.eu)) darcs.pm - it's messy (my Perl isn't up to much) but seems to work. It uses just one repo, like the mercurial plugin (unlike the above version, which AIUI uses two). - -`rcs_commit()` uses backticks instead of `system()`, to prevent darcs' output being sent to the browser and mucking with the HTTP headers (`darcs record` has no --quiet option). And `rcs_recentchanges()` uses regexes rather than parsing darcs' XML output. - -[[!toggle text="show" id="bma"]] -[[!toggleable id="bma" text=""" - - #!/usr/bin/perl - - use warnings; - use strict; - use IkiWiki; - use Date::Parse; - use open qw{:utf8 :std}; - - package IkiWiki; - - sub rcs_update () { - # Do nothing - there's nowhere to update *from*. - } - - sub rcs_prepedit ($) { - } - - sub rcs_commit ($$$;$$) { - my ($file, $message, $rcstoken, $user, $ipaddr) = @_; - - # $user should probably be a name and an email address, by darcs - # convention. - if (defined $user) { - $user = possibly_foolish_untaint($user); - } - elsif (defined $ipaddr) { - $user = "Anonymous from $ipaddr"; - } - else { - $user = "Anonymous"; - } - - $message = possibly_foolish_untaint($message); - - # BUG: this outputs one line of text, and there's not a -q or --quiet - # option. Redirecting output to /dev/null works, but I still get the - # HTTP status and location headers displayed in the browser - is that - # darcs' fault or ikiwiki's? - # Doing it in backticks *works*, but I'm sure it could be done better. - my @cmdline = ("darcs", "record", "--repodir", "$config{srcdir}", - "-a", "-m", "$message", "--author", "$user", $file); - `darcs record --repodir "$config{srcdir}" -a -m "$message" --author "$user" $file`; # Return value? Output? Who needs 'em? - #if (system(@cmdline) != 0) { - # warn "'@cmdline' failed: $!"; - #} - - return undef; # success - - sub rcs_add ($) { - my ($file) = @_; - - my @cmdline = ("darcs", "add", "--repodir", "$config{srcdir}", "-a", "-q", "$file"); - if (system(@cmdline) != 0) { - warn "'@cmdline' failed: $!"; - } - } - - sub rcs_recentchanges ($) { - # TODO: This is horrible code. It doesn't work perfectly, and uses regexes - # rather than parsing Darcs' XML output. - my $num=shift; - my @ret; - - return unless -d "$config{srcdir}/_darcs"; - - my $changelog = `darcs changes --xml --summary --repodir "$config{srcdir}"`; - $changelog = join("", split(/\s*\n\s*/, $changelog)); - my @changes = split(/<\/patch>.*?(.*?)<\/name>/g; - my @message = {line => $1}; - foreach my $match ($change =~ m/(.*?)<\/comment>/gm) { - push @message, {line => $1}; - } - - my @pages; - foreach my $match ($change =~ m/<.*?_(file|directory)>(.*?)(<(added|removed)_lines.*\/>)*<\/.*?_(file|directory)>/g) { - # My perl-fu is weak. I'm probably going about this all wrong, anyway. - push @pages, {page => pagename($match)} if ( -f $config{srcdir}."/".$match || -d $config{srcdir}."/".$match) and not $match =~ m/^$/; - } - push @ret, { rev => $rev, - user => $user, - committype => $committype, - when => $when, - message => [@message], - pages => [@pages], - } - } - return @ret; - } - - sub rcs_notify () { - # TODO - } - - sub rcs_getctime ($) { - error gettext("getctime not implemented"); - } - - 1 - - - -"""]] - ---- - -Well, here's my version too. It only does getctime -- using a real XML parser, instead of regexp ugliness -- and maybe recentchanges, but that may be bitrotted, or maybe I never finished it, as I only need the getctime. As for actual commits, I have previously voiced my opinion, that this should be done by the plugin generating a patch bundle, and forwarding it to darcs in some way (`darcs apply` or even email to another host, possibly moderated), instead of the hacky direct modification of a working copy. It could also be faster to getctime in a batch. Just reading in all the changes the first time they're needed, might not be a big improvement in many cases, but if we got a batch request from ikiwiki, we could keep reaing the changes until all the files in this batch request have been met. --[[tuomov]] - -[[!toggle text="show" id="tuomov"]] -[[!toggleable id="tuomov" text=""" -

-#!/usr/bin/perl
-# Stubs for no revision control.
-
-use warnings;
-use strict;
-use IkiWiki;
-
-package IkiWiki;
-
-sub rcs_update () {
-}
-
-sub rcs_prepedit ($) {
-	return ""
-}
-
-sub rcs_commit ($$$) {
-	return undef # success
-}
-
-sub rcs_add ($) {
-}
-
-sub rcs_recentchanges ($) {
-	my $num=shift;
-	my @ret;
-	
-	eval q{use Date::Parse};
-	eval q{use XML::Simple};
-	
-	my $repodir=$config{srcdir};
-	
-	if (-d "$config{srcdir}/_darcs") {
-		my $child = open(LOG, "-|");
-		if (! $child) {
-			exec("darcs", "changes", "--xml", 
-			     "--repodir", "$repodir",
-			     "--last", "$num")
-			|| error("darcs changes failed to run");
-		}
-		my $data=;
-		close LOG;
-		
-		my $log = XMLin($data, ForceArray => 1);
-		
-		foreach my $patch ($log->{patch}) {
-			my $date=$patch->{local_date};
-			my $hash=$patch->{hash};
-			my $when=concise(ago(time - str2time($date)));
-			my @pages;
-			
-			my $child = open(SUMMARY, "-|");
-			if (! $child) {
-				exec("darcs", "annotate", "-s", "--xml", 
-				     "--match", "hash: $hash",
-				     "--repodir", "$repodir")
-				|| error("darcs annotate failed to run");
-			}
-			my $data=;
-			close SUMMARY;
-		
-			my $summary = XMLin("$data", ForceArray => 1);
-
-			# TODO: find @pages
-			
-			push @ret, {
-				#rev => $rev,
-				user => $patch->{author},
-				#committype => $committype,
-				when => $when, 
-				#message => [@message],
-				pages => [@pages],
-			}; # if @pages;
-			return @ret if @ret >= $num;
-		}
-	}
-	
-	return @ret;
-}
-
-sub rcs_notify () {
-}
-
-sub rcs_getctime ($) {
-	my $file=shift;
-	
-	eval q{use Date::Parse};
-	eval q{use XML::Simple};
-	local $/=undef;
-	
-	# Sigh... doing things the hard way again
-	my $repodir=$config{srcdir};
-	
-	my $filer=substr($file, length($repodir));
-	$filer =~ s:^[/]+::;
-	
-	my $child = open(LOG, "-|");
-	if (! $child) {
-		exec("darcs", "changes", "--xml", "--reverse",
-		     "--repodir", "$repodir", "$filer")
-		|| error("darcs changes $filer failed to run");
-	}
-	
-	my $data=;
-	close LOG;
-	
-	my $log = XMLin($data, ForceArray => 1);
-	
-	my $datestr=$log->{patch}[0]->{local_date};
-	
-	if (! defined $datestr) {
-		warn "failed to get ctime for $filer";
-		return 0;
-	}
-	
-	my $date=str2time($datestr);
-	
-	debug("found ctime ".localtime($date)." for $file");
-	
-	return $date;
-}
-
-1
-
-"""]] - ---- - -I merged the two versions above and made some fixes; it is recording my web edits in darcs and showing a recent changes page. -It is in a [darcs repository](http://joyful.com/darcsweb/darcsweb.cgi?r=ikiwiki-darcs), please send patches. --[[Simon_Michael]] - -> I'd like to see at least the following fixed before I commit this: --[[Joey]] -> * Running `darcs record $filename` in backticks is not good (security) -> The thing to do is to open stdout to /dev/null before execing darcs. -> * Get `rcs_recentchanges_xml` working, parsing xml with regexps does -> not seem like a maintenance win. -> * `rcs_notify` should be removed, it's no longer used. -> * Some form of conflict handling. Using darcs to attempt to merge -> the changes is I gusss optional (although every other rcs backend, -> including svn manages to do this), but it needs to at *least* detect -> conflicts and return a page with conflict markers for the user to fix -> the conflict. - -I have addressed the recentchanges bit, you can find my hacked up darcs.pm at . - -It's got couple of FIXMEs, and a very site-specific filter for recentchanges. Not sure how to do that better though. I will eventually add web commits, probably of my own (and mention it here). - ---- - -And here's yet another one, including an updated `ikiwiki-makerepo`. :) - (now a darcs repo) > Note that there's a 'darcs' branch in git that I'm keeping a copy of your > code in. Just in case. :-) -I've taken all the good stuff from the above and added the missing hooks. The code hasn't seen a lot of testing, so some bugs are likely yet to surface. Also, I'm not experienced with perl and don't know where I should have used the function `possibly_foolish_untaint`. - -Regarding the repository layout: There are two darcs repositories. One is the `srcdir`, the other we'll call `master`. - - * HTML is generated from `srcdir`. - * CGI edits happen in `srcdir`. - * The backend pulls updates from `master` into `srcdir`, i.e. darcs commits should happen to `master`. - * `master` calls ikiwiki (through a wrapper) in its apply posthook, i.e. `master/_darcs/prefs/defaults` should look like this: - - apply posthook ikiwrap - apply run-posthook - - (I'm not sure, should/could it be `ikiwrap --refresh` above?) - * The backend pushes CGI edits from `srcdir` back into `master` (triggering the apply hook). - * The working copies in `srcdir` and `master` should *not* be touched by the user, only by the CGI or darcs, respectively. +I've taken all the good stuff from the above (now deleted --[[Joey]]) and added the missing hooks. The code hasn't seen a lot of testing, so some bugs are likely yet to surface. Also, I'm not experienced with perl and don't know where I should have used the function `possibly_foolish_untaint`. > Review of this one: > @@ -523,7 +19,7 @@ Regarding the repository layout: There are two darcs repositories. One is the `s > * `rcs_remove` just calls "rm"? Does darcs record notice the file was removed > and automatically commit the removal? (And why `system("rm")` and not > `unlink`?) -> * Is the the darcs info in [[details]] still up-to-date re this version? +> * Is the the darcs info in [[rcs/details]] still up-to-date re this version? > --[[Joey]] > Update: @@ -537,6 +33,8 @@ Regarding the repository layout: There are two darcs repositories. One is the `s > this version works. It's similar, but the details differ slightly. > You could copy my description above to replace it. > +>> done --[[Joey]] +> > There is still some ironing to do, for instance the current version doesn't allow for > modifying attachments by re-uploading them via CGI ("darcs add failed"). Am I assuming > correctly that "adding" a file that's already in the repo should just be a no-op? From 3c17adea550608cde14f54dae5964d55fa3fe79d Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 4 Apr 2009 18:11:28 -0400 Subject: [PATCH 052/113] update --- doc/todo/darcs.mdwn | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/doc/todo/darcs.mdwn b/doc/todo/darcs.mdwn index f721e15c5..985ae5f8b 100644 --- a/doc/todo/darcs.mdwn +++ b/doc/todo/darcs.mdwn @@ -1,25 +1,21 @@ (now a darcs repo) -> Note that there's a 'darcs' branch in git that I'm keeping a copy of your -> code in. Just in case. :-) - I've taken all the good stuff from the above (now deleted --[[Joey]]) and added the missing hooks. The code hasn't seen a lot of testing, so some bugs are likely yet to surface. Also, I'm not experienced with perl and don't know where I should have used the function `possibly_foolish_untaint`. > Review of this one: > -> * Should use tab indentation. +> * Should use tab indentation. (fixed) > * `rcs_getctime` should not need to use a ctime cache (such a cache should > also not be named `.ikiwiki.ctimes`). `rcs_getctime` is run exactly -> once per page, ever, and the data is cached in ikiwiki's index. +> once per page, ever, and the data is cached in ikiwiki's index. (fixed) > * I doubt that ENV{DARCS} will be available, since the wrapper clobbers> the entire -> environment. I'd say remove that. +> environment. I'd say remove that. (fixed) > * I don't understand what `darcs_info` is doing, but it seems to be > parsing xml with a regexp? > * Looks like `rcs_commit` needs a few improvements, as marked TODO -> * `rcs_remove` just calls "rm"? Does darcs record notice the file was removed -> and automatically commit the removal? (And why `system("rm")` and not -> `unlink`?) -> * Is the the darcs info in [[rcs/details]] still up-to-date re this version? +> * `rcs_remove` just calls unlink? Does darcs record notice the file was removed +> and automatically commit the removal? +> * Is the the darcs info in [[rcs/details]] still up-to-date re this version? (fixed) > --[[Joey]] > Update: @@ -46,4 +42,12 @@ I've taken all the good stuff from the above (now deleted --[[Joey]]) and added >>> Done. --pesco -[[!tag patch]] +---- + +I've finally merged this into ikiwiki master. The plugin looks quite +complete, with only the new `rcs_receive` hook missing, and I +hope it works as good as it looks. :) If anyone wants to work on improving +it, there are some TODOs as mentioned above that could still be improved. +--[[Joey]] + +[[!tag patch done]] From a9c0d7e288d06a43e4e3d03e3ff8496e99e80962 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 4 Apr 2009 18:17:38 -0400 Subject: [PATCH 053/113] support darcs in setup automator use a consistent name for the ikiwiki wrapper file --- IkiWiki/Setup/Automator.pm | 3 +++ doc/rcs/darcs.mdwn | 2 +- ikiwiki-makerepo | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/IkiWiki/Setup/Automator.pm b/IkiWiki/Setup/Automator.pm index 7d9eca3af..f1ed57b4b 100644 --- a/IkiWiki/Setup/Automator.pm +++ b/IkiWiki/Setup/Automator.pm @@ -58,6 +58,9 @@ sub import (@) { elsif ($config{rcs} eq 'monotone') { $config{mtn_wrapper}=$config{srcdir}."_MTN/ikiwiki-netsync-hook"; } + elsif ($config{rcs} eq 'darcs') { + $config{darcs_wrapper}=$config{repository}."_darcs/ikiwiki-wrapper"; + } elsif ($config{rcs} eq 'bzr') { # TODO } diff --git a/doc/rcs/darcs.mdwn b/doc/rcs/darcs.mdwn index 7f66d0808..fbb9bcede 100644 --- a/doc/rcs/darcs.mdwn +++ b/doc/rcs/darcs.mdwn @@ -9,7 +9,7 @@ automatically commits edited pages, and uses the Darcs history to generate the Example for a `_darcs/prefs/defaults` file in `$SRCDIR`: - apply posthook /path/to/repository/_darcs/ikiwrapper + apply posthook /path/to/repository/_darcs/ikiwiki-wrapper apply run-posthook See also [[todo/darcs|todo/darcs]] diff --git a/ikiwiki-makerepo b/ikiwiki-makerepo index 787611ac1..8d590f0c2 100755 --- a/ikiwiki-makerepo +++ b/ikiwiki-makerepo @@ -143,7 +143,7 @@ darcs) # set up master repo's apply hook and tell user to adjust it if desired darcsdefaults="$repository/_darcs/prefs/defaults" echo "Preconfiguring apply hook in $darcsdefaults - adjust as desired!" - echo "apply posthook $repository/_darcs/ikiwrapper" >> "$darcsdefaults" + echo "apply posthook $repository/_darcs/ikiwiki-wrapper" >> "$darcsdefaults" echo "apply run-posthook" >> "$darcsdefaults" ;; *) From ca32dd31de95f73a9c848a5cc51efe5856c2eed5 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 4 Apr 2009 18:24:04 -0400 Subject: [PATCH 054/113] heh --- doc/rcs/details.mdwn | 2 ++ po/ikiwiki.pot | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/doc/rcs/details.mdwn b/doc/rcs/details.mdwn index 00559a4dd..6492cf38c 100644 --- a/doc/rcs/details.mdwn +++ b/doc/rcs/details.mdwn @@ -241,6 +241,8 @@ please refer to [Emanuele](http://nerd.ocracy.org/em/) ## [[tla]] +Nobody really understands how tla works. ;-) + ## rcs There is a patch that needs a bit of work linked to from [[todo/rcs]]. diff --git a/po/ikiwiki.pot b/po/ikiwiki.pot index b8592bd48..b05558858 100644 --- a/po/ikiwiki.pot +++ b/po/ikiwiki.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-04 14:59-0400\n" +"POT-Creation-Date: 2009-04-04 18:19-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -951,12 +951,12 @@ msgstr "" msgid "you must enter a wikiname (that contains alphanumerics)" msgstr "" -#: ../IkiWiki/Setup/Automator.pm:68 +#: ../IkiWiki/Setup/Automator.pm:71 #, perl-format msgid "unsupported revision control system %s" msgstr "" -#: ../IkiWiki/Setup/Automator.pm:94 +#: ../IkiWiki/Setup/Automator.pm:97 msgid "failed to set up the repository with ikiwiki-makerepo" msgstr "" From 3fb4653d8a0824fb182da0346a7a80b282564cd5 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 4 Apr 2009 18:25:52 -0400 Subject: [PATCH 055/113] Add missing newline to Confirm Password prompt. --- IkiWiki/Setup/Automator.pm | 1 + debian/changelog | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/IkiWiki/Setup/Automator.pm b/IkiWiki/Setup/Automator.pm index 7d9eca3af..c194d34be 100644 --- a/IkiWiki/Setup/Automator.pm +++ b/IkiWiki/Setup/Automator.pm @@ -117,6 +117,7 @@ sub import (@) { for (;;) { print "Choose a password: "; chomp($password=); + print "\n"; print "Confirm password: "; chomp($password2=); diff --git a/debian/changelog b/debian/changelog index fab20985d..781024146 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +ikiwiki (3.10) UNRELEASED; urgency=low + + * Add missing newline to Confirm Password prompt. + + -- Joey Hess Sat, 04 Apr 2009 18:25:33 -0400 + ikiwiki (3.09) unstable; urgency=low * inline: Add title_natural sort order, using Sort::Naturally From 01b063d2e2f79704fe1d850f226a01a01400da01 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 4 Apr 2009 18:30:29 -0400 Subject: [PATCH 056/113] fix bug I introduced --- IkiWiki/Plugin/darcs.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IkiWiki/Plugin/darcs.pm b/IkiWiki/Plugin/darcs.pm index dfd193b9c..5927f23da 100644 --- a/IkiWiki/Plugin/darcs.pm +++ b/IkiWiki/Plugin/darcs.pm @@ -205,7 +205,7 @@ sub rcs_commit ($$$;$$) { # Update the repository by pulling from the default repository, which is # master repository. silentsystem('darcs', "pull", "--quiet", "--repodir", $config{srcdir}, - "--all") !=0 || error("'darcs pull' failed"); + "--all") == 0 || error("'darcs pull' failed"); # If this updating yields any conflicts, we'll record them now to resolve # them. If nothing is recorded, there are no conflicts. From 91e583bce1ce8adee4d70bb4a64b46a900c29b45 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 4 Apr 2009 18:32:41 -0400 Subject: [PATCH 057/113] fix name of wrapper --- IkiWiki/Setup/Automator.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IkiWiki/Setup/Automator.pm b/IkiWiki/Setup/Automator.pm index f1ed57b4b..8a451d386 100644 --- a/IkiWiki/Setup/Automator.pm +++ b/IkiWiki/Setup/Automator.pm @@ -59,7 +59,7 @@ sub import (@) { $config{mtn_wrapper}=$config{srcdir}."_MTN/ikiwiki-netsync-hook"; } elsif ($config{rcs} eq 'darcs') { - $config{darcs_wrapper}=$config{repository}."_darcs/ikiwiki-wrapper"; + $config{darcs_wrapper}=$config{repository}."/_darcs/ikiwiki-wrapper"; } elsif ($config{rcs} eq 'bzr') { # TODO From 6a7eb63ca534bdad7ab13f840cdee33ea391d9bf Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 4 Apr 2009 18:36:39 -0400 Subject: [PATCH 058/113] fix display of web commits in recentchanges The darcs backend appends @web to the names of web committers, so remove it when extracting. --- IkiWiki/Plugin/darcs.pm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/IkiWiki/Plugin/darcs.pm b/IkiWiki/Plugin/darcs.pm index 5927f23da..1ed9f0044 100644 --- a/IkiWiki/Plugin/darcs.pm +++ b/IkiWiki/Plugin/darcs.pm @@ -354,16 +354,19 @@ sub rcs_recentchanges ($) { push @message, { line => $_ } foreach (@{$patch->{name}}); my $committype; - if ($patch->{author} =~ /\@web$/) { + my $author; + if ($patch->{author} =~ /(.*)\@web$/) { + $author = $1; $committype = "web"; } else { + $author=$patch->{author}; $committype = "darcs"; } push @ret, { rev => $patch->{hash}, - user => $patch->{author}, + user => $author, committype => $committype, when => $when, message => [@message], From 5ca2e2208c1c141b579f8103a3d0432a6c33fe8f Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 4 Apr 2009 18:39:55 -0400 Subject: [PATCH 059/113] update --- doc/forum/Darcs_as_the_RCS___63__.mdwn | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/forum/Darcs_as_the_RCS___63__.mdwn b/doc/forum/Darcs_as_the_RCS___63__.mdwn index 2635690f7..9664240ee 100644 --- a/doc/forum/Darcs_as_the_RCS___63__.mdwn +++ b/doc/forum/Darcs_as_the_RCS___63__.mdwn @@ -9,3 +9,5 @@ What should I put in the configuration file to use darcs ? > Darcs is not yet supported. It's being [[worked_on|todo/darcs]]. > > That's good news for me then ! Thank you. + +>>> Better news: It will be in version 2.10. --[[Joey]] From 97906c72ef0bf2f754a7683ac91d2cb0a44c9c9c Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 4 Apr 2009 18:42:24 -0400 Subject: [PATCH 060/113] darcs branch retired --- doc/git.mdwn | 1 - 1 file changed, 1 deletion(-) diff --git a/doc/git.mdwn b/doc/git.mdwn index 8a89546cf..87b1aaae6 100644 --- a/doc/git.mdwn +++ b/doc/git.mdwn @@ -50,7 +50,6 @@ Some of the branches included in the main repository include: instead of xhtml. * `wikiwyg` adds [[todo/wikiwyg]] support. It is unmerged pending some changes. -* `darcs` is being used to add darcs support. * `debian-stable` is used for updates to the old version included in Debian's stable release, and `debian-testing` is used for updates to Debian's testing release. From f8fa69326a8963b179f2c0d6dd52d2f737634541 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 4 Apr 2009 18:48:33 -0400 Subject: [PATCH 061/113] remove debugging --- IkiWiki/Plugin/darcs.pm | 7 ------- 1 file changed, 7 deletions(-) diff --git a/IkiWiki/Plugin/darcs.pm b/IkiWiki/Plugin/darcs.pm index 1ed9f0044..de9ef4f03 100644 --- a/IkiWiki/Plugin/darcs.pm +++ b/IkiWiki/Plugin/darcs.pm @@ -298,8 +298,6 @@ sub rcs_recentchanges ($) { my $repodir=$config{srcdir}; - debug("darcs recent changes: $num"); - my $child = open(LOG, "-|"); if (! $child) { $ENV{"DARCS_DONT_ESCAPE_ANYTHING"}=1; @@ -315,7 +313,6 @@ sub rcs_recentchanges ($) { my $log = XMLin($data, ForceArray => 1); - debug("parsing recent changes..."); foreach my $patch (@{$log->{patch}}) { my $date=$patch->{local_date}; my $hash=$patch->{hash}; @@ -339,16 +336,12 @@ sub rcs_recentchanges ($) { $d =~ s/\[\[file\]\]/$f/go; $d =~ s/\[\[hash\]\]/$hash/go; - debug("file: $f"); - debug("diffurl: $d"); push @pg, { page => pagename($f), diffurl => $d, }; } next unless (scalar @pg > 0); - debug("recent change: " . $patch->{name}[0] . " (" - . scalar @pg . " changes)"); my @message; push @message, { line => $_ } foreach (@{$patch->{name}}); From f3207cddc1db58e061bb7562482382c4d193dc26 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 4 Apr 2009 18:49:57 -0400 Subject: [PATCH 062/113] add _darcs to prune list --- IkiWiki.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IkiWiki.pm b/IkiWiki.pm index ee07258ec..2eca82e4d 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -321,7 +321,7 @@ sub getsetup () { default => [qr/(^|\/)\.\.(\/|$)/, qr/^\./, qr/\/\./, qr/\.x?html?$/, qr/\.ikiwiki-new$/, qr/(^|\/).svn\//, qr/.arch-ids\//, qr/{arch}\//, - qr/(^|\/)_MTN\//, + qr/(^|\/)_MTN\//, qr/(^|\/)_darcs\//, qr/\.dpkg-tmp$/], description => "regexps of source files to ignore", safe => 0, From 4cf70291bcc4fbeeb2a6233a121b5d9f9c00344d Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 4 Apr 2009 19:04:02 -0400 Subject: [PATCH 063/113] remove unnecessary variable --- IkiWiki/Plugin/darcs.pm | 7 ++----- po/ikiwiki.pot | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/IkiWiki/Plugin/darcs.pm b/IkiWiki/Plugin/darcs.pm index de9ef4f03..9b62e70e4 100644 --- a/IkiWiki/Plugin/darcs.pm +++ b/IkiWiki/Plugin/darcs.pm @@ -393,16 +393,13 @@ sub rcs_getctime ($) { eval q{use XML::Simple}; local $/=undef; - # Sigh... doing things the hard way again - my $repodir=$config{srcdir}; - - my $filer=substr($file, length($repodir)); + my $filer=substr($file, length($config{srcdir})); $filer =~ s:^[/]+::; my $child = open(LOG, "-|"); if (! $child) { exec("darcs", "changes", "--xml", "--reverse", - "--repodir", "$repodir", "$filer") + "--repodir", $config{srcdir}, $filer) || error("'darcs changes $filer' failed to run"); } diff --git a/po/ikiwiki.pot b/po/ikiwiki.pot index b05558858..d05a4a693 100644 --- a/po/ikiwiki.pot +++ b/po/ikiwiki.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-04 18:19-0400\n" +"POT-Creation-Date: 2009-04-04 18:50-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" From 0e0c6606a6268ce50fd6eca263392b86ad7592ef Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 4 Apr 2009 19:07:19 -0400 Subject: [PATCH 064/113] fix darcs bug with relative srcdir --- ikiwiki-makerepo | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ikiwiki-makerepo b/ikiwiki-makerepo index 8d590f0c2..310535030 100755 --- a/ikiwiki-makerepo +++ b/ikiwiki-makerepo @@ -128,8 +128,7 @@ darcs) fi mkdir -p "$repository" - cd "$repository" - darcs initialize + (cd "$repository" && darcs initialize) mkdir -p "$srcdir" cd "$srcdir" From 495113cf54659a82bdb57bc0c5c965440ee420dc Mon Sep 17 00:00:00 2001 From: Enno Date: Sat, 4 Apr 2009 21:53:37 -0400 Subject: [PATCH 065/113] --- doc/todo/hidden_links__47__tags.mdwn | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 doc/todo/hidden_links__47__tags.mdwn diff --git a/doc/todo/hidden_links__47__tags.mdwn b/doc/todo/hidden_links__47__tags.mdwn new file mode 100644 index 000000000..8e24cefba --- /dev/null +++ b/doc/todo/hidden_links__47__tags.mdwn @@ -0,0 +1,6 @@ +[[!tag wishlist]] + +I would like to have the possibility for hidden tags or links. +Using the tag functionality I could group some news items for including them into other subpages. But I don't want the links or tags to show (and I don't want Tag lists like "Tags: ?mytag"). +The tagged items should not differ from the items, that are not tagged. +I didn't find any way to hide the tag list or links and I don't want to have to create a "hidden" page containing links to the pages and then using the backlink functionality, because this is more prone to errors. It's easier to forget adding a link on a second page than forgetting to add a needed tag to a new newsitem. From ed80a5ebf8844a724adda8e4154bc792e8b9fd2c Mon Sep 17 00:00:00 2001 From: simonraven Date: Sun, 5 Apr 2009 07:48:03 -0400 Subject: [PATCH 066/113] --- doc/bugs/Dupe_entry_in_Bundle::IkiWiki::Extras.pm.mdwn | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 doc/bugs/Dupe_entry_in_Bundle::IkiWiki::Extras.pm.mdwn diff --git a/doc/bugs/Dupe_entry_in_Bundle::IkiWiki::Extras.pm.mdwn b/doc/bugs/Dupe_entry_in_Bundle::IkiWiki::Extras.pm.mdwn new file mode 100644 index 000000000..aacb6a784 --- /dev/null +++ b/doc/bugs/Dupe_entry_in_Bundle::IkiWiki::Extras.pm.mdwn @@ -0,0 +1,3 @@ +Authen::Passphrase + +is entered twice in the .pm file. From 917210430ad3a90c22b2780eed18b4da4ea22d24 Mon Sep 17 00:00:00 2001 From: Enno Date: Sun, 5 Apr 2009 18:29:09 -0400 Subject: [PATCH 067/113] --- doc/todo/hidden_links__47__tags.mdwn | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/todo/hidden_links__47__tags.mdwn b/doc/todo/hidden_links__47__tags.mdwn index 8e24cefba..608cb3e6b 100644 --- a/doc/todo/hidden_links__47__tags.mdwn +++ b/doc/todo/hidden_links__47__tags.mdwn @@ -3,4 +3,7 @@ I would like to have the possibility for hidden tags or links. Using the tag functionality I could group some news items for including them into other subpages. But I don't want the links or tags to show (and I don't want Tag lists like "Tags: ?mytag"). The tagged items should not differ from the items, that are not tagged. -I didn't find any way to hide the tag list or links and I don't want to have to create a "hidden" page containing links to the pages and then using the backlink functionality, because this is more prone to errors. It's easier to forget adding a link on a second page than forgetting to add a needed tag to a new newsitem. +I didn't find any way to hide the tag list or links and I don't want to have to create a "hidden" page containing links to the pages and then using the backlink functionality, because this is more prone to errors. It's easier to forget adding a link on a second page than forgetting to add a needed tag to a new newsitem. + +> I found out, that using the meta plugin it is possible to create the hidden link, that I wanted. +-- [[users/Enno]] From 9558a4ee840f3888625828d0f1b314880a630bd3 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 6 Apr 2009 13:34:31 -0400 Subject: [PATCH 068/113] remove dup --- Bundle/IkiWiki/Extras.pm | 1 - doc/bugs/Dupe_entry_in_Bundle::IkiWiki::Extras.pm.mdwn | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Bundle/IkiWiki/Extras.pm b/Bundle/IkiWiki/Extras.pm index 40b36e7c8..48bd127f1 100644 --- a/Bundle/IkiWiki/Extras.pm +++ b/Bundle/IkiWiki/Extras.pm @@ -34,7 +34,6 @@ Net::Amazon::S3 Text::WikiCreole Term::ReadLine::Gnu HTML::Tree -Authen::Passphrase Sort::Naturally =head1 AUTHOR diff --git a/doc/bugs/Dupe_entry_in_Bundle::IkiWiki::Extras.pm.mdwn b/doc/bugs/Dupe_entry_in_Bundle::IkiWiki::Extras.pm.mdwn index aacb6a784..236112786 100644 --- a/doc/bugs/Dupe_entry_in_Bundle::IkiWiki::Extras.pm.mdwn +++ b/doc/bugs/Dupe_entry_in_Bundle::IkiWiki::Extras.pm.mdwn @@ -1,3 +1,5 @@ Authen::Passphrase is entered twice in the .pm file. + +[[done]] From 51887c0733535a57d3959f20f36e99139a579350 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 9 Apr 2009 15:11:23 -0400 Subject: [PATCH 069/113] close --- doc/todo/hidden_links__47__tags.mdwn | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/todo/hidden_links__47__tags.mdwn b/doc/todo/hidden_links__47__tags.mdwn index 608cb3e6b..43d7a8797 100644 --- a/doc/todo/hidden_links__47__tags.mdwn +++ b/doc/todo/hidden_links__47__tags.mdwn @@ -7,3 +7,7 @@ I didn't find any way to hide the tag list or links and I don't want to have to > I found out, that using the meta plugin it is possible to create the hidden link, that I wanted. -- [[users/Enno]] + +>> Yes, meta link will not show up as a visible link on the page, while +>> also not showing up in the list of tags of a page, so it seems what you +>> want. [[done]] --[[Joey]] From b47615ad5ed7bcc6bee1dd7538e35d2232f1c554 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 9 Apr 2009 15:36:18 -0400 Subject: [PATCH 070/113] response --- doc/index/openid/discussion.mdwn | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/doc/index/openid/discussion.mdwn b/doc/index/openid/discussion.mdwn index ae614e5ac..d692bf011 100644 --- a/doc/index/openid/discussion.mdwn +++ b/doc/index/openid/discussion.mdwn @@ -26,4 +26,24 @@ do=postsignin&oic.time=1238224497-1450566d93097caa707f&openid.assoc_handle=%7BHM The `return_to` arg should NOT be `signed`, it should be the originating URL where you initially logged in. +> I think you're confusing 'openid.return_to' with 'return_to'. The +> former is present above, and is, indeed, the originating url, the latter +> is part of the *value* of the 'openid.signed' parameter generated by myopenid.com. --[[Joey]] + Also, I dunno what the assoc_handle is doing spitting out an arg like `{HMAC-SHA1}{49cdce76}{BhuXXw%3D%3D}` it should be processed further. I have the needed perl packages installed (latest for Lenny). Hrm, would endianness matter? + +> Again, this value is created by the openid server, not by ikiwiki. +> I see the same HMAC-SHA1 when using myopenid, and completly different +> things for other openid servers. (Ie, when using livejournal as an openid server, +> `openid.assoc_handle=1239305290:STLS.QiU6zTZ6w2bM3ttRkdaa:e68f91b751`) +> +> I'm fairly sure that is all a red herring. +> +> So, when I was talking about reproducing the bug, I was thinking perhaps you could tell me what openid server you're using, +> etc, so I can actually see the bug with my own eyes. +> +> The sanitised url parameters you've provided are not generated by ikiwiki at all. +> They don't even seem to be generated by the underlying [[!cpan Net::OpenID]] library. +> I'm pretty sure that what you're showing me is the url myopenid redirects +> the browser to after successfully signing in. At that point, ikiwiki +> should complete the signin. What fails at this point? How can I reproduce this failure? --[[Joey]] From 26189b6dffa05c6a674f5da9cc5bb1d9f4565ae7 Mon Sep 17 00:00:00 2001 From: simonraven Date: Fri, 10 Apr 2009 00:05:15 -0400 Subject: [PATCH 071/113] --- doc/index/openid/discussion.mdwn | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/doc/index/openid/discussion.mdwn b/doc/index/openid/discussion.mdwn index d692bf011..4a50fd9dd 100644 --- a/doc/index/openid/discussion.mdwn +++ b/doc/index/openid/discussion.mdwn @@ -26,6 +26,8 @@ do=postsignin&oic.time=1238224497-1450566d93097caa707f&openid.assoc_handle=%7BHM The `return_to` arg should NOT be `signed`, it should be the originating URL where you initially logged in. +>> Yes, exactly. That's also my understanding of the spec. + > I think you're confusing 'openid.return_to' with 'return_to'. The > former is present above, and is, indeed, the originating url, the latter > is part of the *value* of the 'openid.signed' parameter generated by myopenid.com. --[[Joey]] @@ -36,14 +38,25 @@ Also, I dunno what the assoc_handle is doing spitting out an arg like `{HMAC-SHA > I see the same HMAC-SHA1 when using myopenid, and completly different > things for other openid servers. (Ie, when using livejournal as an openid server, > `openid.assoc_handle=1239305290:STLS.QiU6zTZ6w2bM3ttRkdaa:e68f91b751`) -> + +>> OK, I wasn't too sure about that, seemed bogus or somehow wrong or in error, like it wasn't actually being `completed`. + > I'm fairly sure that is all a red herring. > > So, when I was talking about reproducing the bug, I was thinking perhaps you could tell me what openid server you're using, > etc, so I can actually see the bug with my own eyes. -> + +>> myopenid.com, with the CNAME option turned on. + > The sanitised url parameters you've provided are not generated by ikiwiki at all. > They don't even seem to be generated by the underlying [[!cpan Net::OpenID]] library. + +>> That was a server log entry with date/host/time stripped, and my URL also stripped. Everything else is as was in the log. I installed the Debian packages in Lenny, both server and consumer OpenID Perl packages. + > I'm pretty sure that what you're showing me is the url myopenid redirects > the browser to after successfully signing in. At that point, ikiwiki > should complete the signin. What fails at this point? How can I reproduce this failure? --[[Joey]] + +I'll try it again myself. I had tried it oh probably 6 times before I finally gave up on it. Maybe I'm getting rusty and I'm just PEBKACing all over the place. :P + +Also, to address the point about this discussion being in the wrong area (not under bugs), should I move it, or will you? I don't mind doing it, if you can't. From 2eb990b3f5496d271adb5b42ad393dc810700ba5 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 10 Apr 2009 17:47:39 -0400 Subject: [PATCH 072/113] new tip --- doc/tips/add_twit_dent_box_to_blog.mdwn | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 doc/tips/add_twit_dent_box_to_blog.mdwn diff --git a/doc/tips/add_twit_dent_box_to_blog.mdwn b/doc/tips/add_twit_dent_box_to_blog.mdwn new file mode 100644 index 000000000..b7988532b --- /dev/null +++ b/doc/tips/add_twit_dent_box_to_blog.mdwn @@ -0,0 +1,17 @@ +If you use twitter or identi.ca, here's how to make a box +on the side of your blog that holds your recent status updates +from there, like I have on [my blog](http://kitenet.net/~joey/blog/) +--[[Joey]] + +* Enable the [[plugins/aggregate]] plugin, and set up a cron + job for it. +* At the top of your blog's page, add something like the following. + You'll want to change the urls of course. + + \[[!template id=note text=""" + \[[!aggregate expirecount=5 name="identi.ca posts" + feedurl="http://identi.ca/api/statuses/user_timeline/joeyh.atom" + url="http://identi.ca/joeyh"]] + \[[!inline pages="internal(identi.ca_posts/*)" archive=yes show=5 + quick=yes template=titlepage]] + """]] From 23b1d9d7b0351fbb46910eb17fc54ba35bc988e5 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 10 Apr 2009 17:50:19 -0400 Subject: [PATCH 073/113] turn off quick quick makes the permalinks not be followed --- doc/tips/add_twit_dent_box_to_blog.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/tips/add_twit_dent_box_to_blog.mdwn b/doc/tips/add_twit_dent_box_to_blog.mdwn index b7988532b..1765d595a 100644 --- a/doc/tips/add_twit_dent_box_to_blog.mdwn +++ b/doc/tips/add_twit_dent_box_to_blog.mdwn @@ -13,5 +13,5 @@ from there, like I have on [my blog](http://kitenet.net/~joey/blog/) feedurl="http://identi.ca/api/statuses/user_timeline/joeyh.atom" url="http://identi.ca/joeyh"]] \[[!inline pages="internal(identi.ca_posts/*)" archive=yes show=5 - quick=yes template=titlepage]] + feeds=yes template=titlepage]] """]] From fbbb286046e2d5ba1e96598918c257987798b131 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 10 Apr 2009 17:54:50 -0400 Subject: [PATCH 074/113] update --- doc/tips/add_twit_dent_box_to_blog.mdwn | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/doc/tips/add_twit_dent_box_to_blog.mdwn b/doc/tips/add_twit_dent_box_to_blog.mdwn index 1765d595a..11245dfb1 100644 --- a/doc/tips/add_twit_dent_box_to_blog.mdwn +++ b/doc/tips/add_twit_dent_box_to_blog.mdwn @@ -9,9 +9,10 @@ from there, like I have on [my blog](http://kitenet.net/~joey/blog/) You'll want to change the urls of course. \[[!template id=note text=""" - \[[!aggregate expirecount=5 name="identi.ca posts" - feedurl="http://identi.ca/api/statuses/user_timeline/joeyh.atom" - url="http://identi.ca/joeyh"]] - \[[!inline pages="internal(identi.ca_posts/*)" archive=yes show=5 - feeds=yes template=titlepage]] + \[[!aggregate expirecount=5 name="dents" url="http://identi.ca/joeyh" + feedurl="http://identi.ca/api/statuses/user_timeline/joeyh.atom"]] + \[[!inline pages="internal(dents/*)" archive=yes show=5 feeds=no]] """]] + +For a cleaner look without the post dates, add `template=titlepage` +to the `inline` directive. From 808cba50d2c907d70578a0f1b66a2cadfacaecd8 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 10 Apr 2009 17:55:33 -0400 Subject: [PATCH 075/113] formatting --- doc/tips/add_twit_dent_box_to_blog.mdwn | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/tips/add_twit_dent_box_to_blog.mdwn b/doc/tips/add_twit_dent_box_to_blog.mdwn index 11245dfb1..387e2c236 100644 --- a/doc/tips/add_twit_dent_box_to_blog.mdwn +++ b/doc/tips/add_twit_dent_box_to_blog.mdwn @@ -8,10 +8,10 @@ from there, like I have on [my blog](http://kitenet.net/~joey/blog/) * At the top of your blog's page, add something like the following. You'll want to change the urls of course. - \[[!template id=note text=""" - \[[!aggregate expirecount=5 name="dents" url="http://identi.ca/joeyh" - feedurl="http://identi.ca/api/statuses/user_timeline/joeyh.atom"]] - \[[!inline pages="internal(dents/*)" archive=yes show=5 feeds=no]] + \[[!template id=note text=""" + \[[!aggregate expirecount=5 name="dents" url="http://identi.ca/joeyh" + feedurl="http://identi.ca/api/statuses/user_timeline/joeyh.atom"]] + \[[!inline pages="internal(dents/*)" archive=yes show=5 feeds=no]] """]] For a cleaner look without the post dates, add `template=titlepage` From 98ae0fb92ccfcc877eadd0a941beaa9c462d6cd1 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 10 Apr 2009 18:02:03 -0400 Subject: [PATCH 076/113] Add missing permalink support to archivepage and titlepage templates. --- debian/changelog | 1 + templates/archivepage.tmpl | 4 ++++ templates/titlepage.tmpl | 8 +++++++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index bbc7e6f13..d9dcc95e6 100644 --- a/debian/changelog +++ b/debian/changelog @@ -9,6 +9,7 @@ ikiwiki (3.10) UNRELEASED; urgency=low - Petr Ročkai fixed rcs_recentchanges. - Sven M. Hallberg merged the above and added missing features. * Add missing newline to Confirm Password prompt. + * Add missing permalink support to archivepage and titlepage templates. -- Joey Hess Sat, 04 Apr 2009 17:47:36 -0400 diff --git a/templates/archivepage.tmpl b/templates/archivepage.tmpl index 6bc789dfb..63f716544 100644 --- a/templates/archivepage.tmpl +++ b/templates/archivepage.tmpl @@ -1,5 +1,9 @@

+ + +
+
Posted diff --git a/templates/titlepage.tmpl b/templates/titlepage.tmpl index f5cd5bc53..8a11e693e 100644 --- a/templates/titlepage.tmpl +++ b/templates/titlepage.tmpl @@ -1 +1,7 @@ -

+

+ + + + + +

From 6ff199c80c47b3b87afb7c7b97a94b92eaf80482 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 10 Apr 2009 18:02:52 -0400 Subject: [PATCH 077/113] note --- doc/tips/add_twit_dent_box_to_blog.mdwn | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/tips/add_twit_dent_box_to_blog.mdwn b/doc/tips/add_twit_dent_box_to_blog.mdwn index 387e2c236..ee5ead64b 100644 --- a/doc/tips/add_twit_dent_box_to_blog.mdwn +++ b/doc/tips/add_twit_dent_box_to_blog.mdwn @@ -16,3 +16,5 @@ from there, like I have on [my blog](http://kitenet.net/~joey/blog/) For a cleaner look without the post dates, add `template=titlepage` to the `inline` directive. + +Note: Works best with ikiwiki 3.10 or better. From ba46ec5d1eadc7a0d992e28201538067ab969899 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 10 Apr 2009 18:22:58 -0400 Subject: [PATCH 078/113] fix format --- templates/archivepage.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/archivepage.tmpl b/templates/archivepage.tmpl index 63f716544..fe1f0ab92 100644 --- a/templates/archivepage.tmpl +++ b/templates/archivepage.tmpl @@ -1,6 +1,6 @@

- +

From a6d3bad29dd1848dc5a55be730db463f8577e7e4 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 10 Apr 2009 21:26:54 -0400 Subject: [PATCH 079/113] debian/control: Wrap fields. --- debian/changelog | 1 + debian/control | 29 +++++++++++++++++++++++++---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/debian/changelog b/debian/changelog index d9dcc95e6..a82369f9f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -10,6 +10,7 @@ ikiwiki (3.10) UNRELEASED; urgency=low - Sven M. Hallberg merged the above and added missing features. * Add missing newline to Confirm Password prompt. * Add missing permalink support to archivepage and titlepage templates. + * debian/control: Wrap fields. -- Joey Hess Sat, 04 Apr 2009 17:47:36 -0400 diff --git a/debian/control b/debian/control index a0769cbce..a00fd72cc 100644 --- a/debian/control +++ b/debian/control @@ -2,7 +2,11 @@ Source: ikiwiki Section: web Priority: optional Build-Depends: perl, debhelper (>= 7.0.50) -Build-Depends-Indep: dpkg-dev (>= 1.9.0), libxml-simple-perl, libtext-markdown-perl | markdown, libtimedate-perl, libhtml-template-perl, libhtml-scrubber-perl, wdg-html-validator, libhtml-parser-perl, liburi-perl, perlmagick +Build-Depends-Indep: dpkg-dev (>= 1.9.0), libxml-simple-perl, + libtext-markdown-perl | markdown, + libtimedate-perl, libhtml-template-perl, + libhtml-scrubber-perl, wdg-html-validator, + libhtml-parser-perl, liburi-perl, perlmagick Maintainer: Joey Hess Uploaders: Josh Triplett Standards-Version: 3.8.0 @@ -12,9 +16,26 @@ Vcs-Browser: http://git.ikiwiki.info/?p=ikiwiki Package: ikiwiki Architecture: all -Depends: ${misc:Depends}, ${perl:Depends}, libtext-markdown-perl | markdown, libhtml-scrubber-perl, libhtml-template-perl, libhtml-parser-perl, liburi-perl -Recommends: gcc | c-compiler, libc6-dev | libc-dev, subversion | git-core (>= 1:1.5.0) | tla | bzr (>= 0.91) | mercurial | monotone (>= 0.38), libxml-simple-perl, libnet-openid-consumer-perl, liblwpx-paranoidagent-perl, libtimedate-perl, libcgi-formbuilder-perl (>= 3.05), libcgi-session-perl (>= 4.14-1), libmail-sendmail-perl, libauthen-passphrase-perl, libterm-readline-gnu-perl -Suggests: viewvc | gitweb | viewcvs, libsearch-xapian-perl, xapian-omega (>= 1.0.5), librpc-xml-perl, libtext-wikiformat-perl, python, python-docutils, polygen, tidy, libhtml-tree-perl, libxml-feed-perl, libmailtools-perl, perlmagick, libfile-mimeinfo-perl, libcrypt-ssleay-perl, liblocale-gettext-perl (>= 1.05-1), libtext-typography-perl, libtext-csv-perl, libdigest-sha1-perl, graphviz, libnet-amazon-s3-perl, sparkline-php, texlive, dvipng, libtext-wikicreole-perl, libsort-naturally-perl, libtext-textile-perl +Depends: ${misc:Depends}, ${perl:Depends}, + libtext-markdown-perl | markdown, + libhtml-scrubber-perl, libhtml-template-perl, + libhtml-parser-perl, liburi-perl +Recommends: gcc | c-compiler, + libc6-dev | libc-dev, + subversion | git-core (>= 1:1.5.0) | tla | bzr (>= 0.91) | mercurial | monotone (>= 0.38), + libxml-simple-perl, libnet-openid-consumer-perl, + liblwpx-paranoidagent-perl, libtimedate-perl, + libcgi-formbuilder-perl (>= 3.05), libcgi-session-perl (>= 4.14-1), + libmail-sendmail-perl, libauthen-passphrase-perl, libterm-readline-gnu-perl +Suggests: viewvc | gitweb | viewcvs, libsearch-xapian-perl, + xapian-omega (>= 1.0.5), librpc-xml-perl, libtext-wikiformat-perl, + python, python-docutils, polygen, tidy, libhtml-tree-perl, + libxml-feed-perl, libmailtools-perl, perlmagick, + libfile-mimeinfo-perl, libcrypt-ssleay-perl, + liblocale-gettext-perl (>= 1.05-1), libtext-typography-perl, + libtext-csv-perl, libdigest-sha1-perl, graphviz, libnet-amazon-s3-perl, + sparkline-php, texlive, dvipng, libtext-wikicreole-perl, + libsort-naturally-perl, libtext-textile-perl Conflicts: ikiwiki-plugin-table Replaces: ikiwiki-plugin-table Provides: ikiwiki-plugin-table From e0d1e84b8db54338512ee1ca4b20817d4e338362 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 10 Apr 2009 21:44:25 -0400 Subject: [PATCH 080/113] better name --- ...add_twit_dent_box_to_blog.mdwn => add_chatterbox_to_blog.mdwn} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename doc/tips/{add_twit_dent_box_to_blog.mdwn => add_chatterbox_to_blog.mdwn} (100%) diff --git a/doc/tips/add_twit_dent_box_to_blog.mdwn b/doc/tips/add_chatterbox_to_blog.mdwn similarity index 100% rename from doc/tips/add_twit_dent_box_to_blog.mdwn rename to doc/tips/add_chatterbox_to_blog.mdwn From a25d8f992bc3e39cf39954475f31b83dabbf2374 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 10 Apr 2009 21:44:37 -0400 Subject: [PATCH 081/113] inline: Add author info to archive display. This won't change it normally, and is useful if using archive format to display some aggregated feed titles. --- debian/changelog | 1 + templates/archivepage.tmpl | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index a82369f9f..b7779600e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -11,6 +11,7 @@ ikiwiki (3.10) UNRELEASED; urgency=low * Add missing newline to Confirm Password prompt. * Add missing permalink support to archivepage and titlepage templates. * debian/control: Wrap fields. + * inline: Add author info to archive display. -- Joey Hess Sat, 04 Apr 2009 17:47:36 -0400 diff --git a/templates/archivepage.tmpl b/templates/archivepage.tmpl index fe1f0ab92..28800e763 100644 --- a/templates/archivepage.tmpl +++ b/templates/archivepage.tmpl @@ -6,6 +6,14 @@ Posted + +by + + + + + + + -

From b6eccfd3d38c95773bdfc8fdf1ecbc32094f353e Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 11 Apr 2009 12:40:15 -0400 Subject: [PATCH 082/113] Add a microblog template that is useful for inlining microblogging posts. --- debian/changelog | 1 + doc/ikiwiki/directive/inline.mdwn | 3 ++- doc/style.css | 6 ++++-- doc/tips/add_chatterbox_to_blog.mdwn | 6 ++---- doc/wikitemplates.mdwn | 1 + templates/microblog.tmpl | 22 ++++++++++++++++++++++ 6 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 templates/microblog.tmpl diff --git a/debian/changelog b/debian/changelog index b7779600e..51b5121fb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -12,6 +12,7 @@ ikiwiki (3.10) UNRELEASED; urgency=low * Add missing permalink support to archivepage and titlepage templates. * debian/control: Wrap fields. * inline: Add author info to archive display. + * Add a microblog template that is useful for inlining microblogging posts. -- Joey Hess Sat, 04 Apr 2009 17:47:36 -0400 diff --git a/doc/ikiwiki/directive/inline.mdwn b/doc/ikiwiki/directive/inline.mdwn index f69d55de3..8afd65a05 100644 --- a/doc/ikiwiki/directive/inline.mdwn +++ b/doc/ikiwiki/directive/inline.mdwn @@ -79,7 +79,8 @@ Here are some less often needed parameters: page. By default the `inlinepage` template is used, while the `archivepage` template is used for archives. Set this parameter to use some other, custom template, such as the `titlepage` template that - only shows post titles. Note that you should still set `archive=yes` if + only shows post titles or the `microblog` template, optimised for + microblogging. Note that you should still set `archive=yes` if your custom template does not include the page content. * `raw` - Rather than the default behavior of creating a blog, if raw is set to "yes", the page will be included raw, without additional diff --git a/doc/style.css b/doc/style.css index 98a28f347..74d968ddf 100644 --- a/doc/style.css +++ b/doc/style.css @@ -373,11 +373,13 @@ span.color { padding: 2px; } -.comment-header { +.comment-header, +.microblog-header { font-style: italic; margin-top: .3em; } -.comment .author { +.comment .author, +.microblog .author { font-weight: bold; } .comment-subject { diff --git a/doc/tips/add_chatterbox_to_blog.mdwn b/doc/tips/add_chatterbox_to_blog.mdwn index ee5ead64b..3497da9ff 100644 --- a/doc/tips/add_chatterbox_to_blog.mdwn +++ b/doc/tips/add_chatterbox_to_blog.mdwn @@ -11,10 +11,8 @@ from there, like I have on [my blog](http://kitenet.net/~joey/blog/) \[[!template id=note text=""" \[[!aggregate expirecount=5 name="dents" url="http://identi.ca/joeyh" feedurl="http://identi.ca/api/statuses/user_timeline/joeyh.atom"]] - \[[!inline pages="internal(dents/*)" archive=yes show=5 feeds=no]] + \[[!inline pages="internal(dents/*)" template=microblog + show=5 feeds=no]] """]] -For a cleaner look without the post dates, add `template=titlepage` -to the `inline` directive. - Note: Works best with ikiwiki 3.10 or better. diff --git a/doc/wikitemplates.mdwn b/doc/wikitemplates.mdwn index fc5893677..f365cd5aa 100644 --- a/doc/wikitemplates.mdwn +++ b/doc/wikitemplates.mdwn @@ -21,6 +21,7 @@ located in /usr/share/ikiwiki/templates by default. * `inlinepage.tmpl` - Used for adding a page inline in a blog page. * `archivepage.tmpl` - Used for listing a page in a blog archive page. +* `microblog.tmpl` - Used for showing a microblogging post inline. * `blogpost.tmpl` - Used for a form to add a post to a blog (and a rss/atom links) * `feedlink.tmpl` - Used to add rss/atom links if blogpost.tmpl is not used. * `aggregatepost.tmpl` - Used by the [[plugins/aggregate]] plugin to create diff --git a/templates/microblog.tmpl b/templates/microblog.tmpl new file mode 100644 index 000000000..2e84441cc --- /dev/null +++ b/templates/microblog.tmpl @@ -0,0 +1,22 @@ +
+ +
+ +
+ +
+ + + + + + + + + + + +— + +
+
From 624c6db627be968e9a8debfd49961c3cbe23a293 Mon Sep 17 00:00:00 2001 From: "http://www.cse.unsw.edu.au/~willu/" Date: Sun, 12 Apr 2009 03:57:24 -0400 Subject: [PATCH 083/113] Note possible bug --- .../Inline_doesn__39__t_wikilink_to_pages.mdwn | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 doc/bugs/Inline_doesn__39__t_wikilink_to_pages.mdwn diff --git a/doc/bugs/Inline_doesn__39__t_wikilink_to_pages.mdwn b/doc/bugs/Inline_doesn__39__t_wikilink_to_pages.mdwn new file mode 100644 index 000000000..9d3c22921 --- /dev/null +++ b/doc/bugs/Inline_doesn__39__t_wikilink_to_pages.mdwn @@ -0,0 +1,14 @@ +It seems that the inline directive doesn't generate wikilinks to the pages it includes. For example I would expect the following to inline all bugs inside this bug report: + +\[[!inline pages="bugs/* and !*/discussion and backlink(bugs)" feeds=no postform=no archive=yes show="10"]] + +But here it is: + +[[!inline pages="bugs/* and !*/discussion and backlink(bugs)" feeds=no postform=no archive=yes show="10"]] + +and note that it only included the 'normal' wikilinks (and also note that this page is not marked done even though the done page is inlined). +One might also wonder if inline would make this page link to any internal links on those inlined pages too, but I think +that would be overkill. + +I'm not even really sure if this is a bug or defined behaviour, but I thought it might work and it didn't. Regardless, +the correct behaviour, whichever is decided, should be documented. -- [[Will]] From fee12a97b3b15f2ff7f89196e082047195179011 Mon Sep 17 00:00:00 2001 From: "http://www.cse.unsw.edu.au/~willu/" Date: Sun, 12 Apr 2009 04:33:20 -0400 Subject: [PATCH 084/113] Note that map has the same issue --- doc/bugs/Inline_doesn__39__t_wikilink_to_pages.mdwn | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/bugs/Inline_doesn__39__t_wikilink_to_pages.mdwn b/doc/bugs/Inline_doesn__39__t_wikilink_to_pages.mdwn index 9d3c22921..7d2004406 100644 --- a/doc/bugs/Inline_doesn__39__t_wikilink_to_pages.mdwn +++ b/doc/bugs/Inline_doesn__39__t_wikilink_to_pages.mdwn @@ -1,4 +1,4 @@ -It seems that the inline directive doesn't generate wikilinks to the pages it includes. For example I would expect the following to inline all bugs inside this bug report: +It seems that the [[ikiwiki/directive/inline]] directive doesn't generate wikilinks to the pages it includes. For example I would expect the following to inline all bugs inside this bug report: \[[!inline pages="bugs/* and !*/discussion and backlink(bugs)" feeds=no postform=no archive=yes show="10"]] @@ -12,3 +12,7 @@ that would be overkill. I'm not even really sure if this is a bug or defined behaviour, but I thought it might work and it didn't. Regardless, the correct behaviour, whichever is decided, should be documented. -- [[Will]] + +It appears that [[ikiwiki/directive/map]] also doesn't wikilink to the pages it links. Perhaps in each of these +cases there should be another parameter to the directive that allows linking to switched on. Just switching +it on universally at this point might break a number of people's pagespecs. -- [[Will]] From 8ed4d3ab1500aa3893adc385e68b5633b76150ce Mon Sep 17 00:00:00 2001 From: simonraven Date: Sun, 12 Apr 2009 06:07:59 -0400 Subject: [PATCH 085/113] --- .../discussion.mdwn | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn b/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn index 3b328649e..d70e8e077 100644 --- a/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn +++ b/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn @@ -2,3 +2,22 @@ When I attempt to use this script, I get the following error: warning: Not updating refs/heads/master (new tip 26b1787fca04f2f9772b6854843fe99fe06e6088 does not contain fc0ad65d14d88fd27a6cee74c7cef3176f6900ec). I have git 1.5.6.5, any ideas? Thanks!! + +----- + +I also get this error, here's the output (it seems to stem from an error in the python script): + +
+Traceback (most recent call last):
+  File "../ikiwiki-wordpress-import.py", line 74, in 
+    main(*sys.argv[1:])
+  File "../ikiwiki-wordpress-import.py", line 54, in main
+    data = content.encode('ascii', 'html_replace')
+  File "../ikiwiki-wordpress-import.py", line 30, in 
+    % htmlentitydefs.codepoint2name[ord(c)] for c in x.object[x.start:x.end]]), x.end))
+KeyError: 146
+warning: Not updating refs/heads/master (new tip 6dca6ac939e12966bd64ce8a822ef14fe60622b2 does not contain 60b798dbf92ec5ae92f18acac3075c4304aca120)
+git-fast-import statistics:
+
+ +etc. From ca9563fda4ee0dbefab3572fc97e4aa056390168 Mon Sep 17 00:00:00 2001 From: simonraven Date: Sun, 12 Apr 2009 06:10:18 -0400 Subject: [PATCH 086/113] --- doc/tips/Importing_posts_from_Wordpress/discussion.mdwn | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn b/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn index d70e8e077..b61e7b24d 100644 --- a/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn +++ b/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn @@ -5,6 +5,8 @@ Thanks!! ----- +### KeyError: 146 + I also get this error, here's the output (it seems to stem from an error in the python script):

From f75b138447e828393a53db3bc4ee2960fdf93fa9 Mon Sep 17 00:00:00 2001
From: simonraven 
Date: Sun, 12 Apr 2009 06:16:11 -0400
Subject: [PATCH 087/113]

---
 doc/tips/Importing_posts_from_Wordpress/discussion.mdwn | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn b/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn
index b61e7b24d..ee977570f 100644
--- a/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn
+++ b/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn
@@ -23,3 +23,9 @@ git-fast-import statistics:
 
etc. + + +> Well, if this really is a script error, it's not really the script, but the wordpress XML dump, referring to a +> possible malformed or invalid unicode character in the dump file. This is what I can gather from other scripts. +> I'll be checking my dump file shortly. +> From a8b017e25f48776e23439b066f3d3dd9e1f12e24 Mon Sep 17 00:00:00 2001 From: simonraven Date: Sun, 12 Apr 2009 06:40:46 -0400 Subject: [PATCH 088/113] --- doc/tips/Importing_posts_from_Wordpress/discussion.mdwn | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn b/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn index ee977570f..8d009c01a 100644 --- a/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn +++ b/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn @@ -28,4 +28,7 @@ etc. > Well, if this really is a script error, it's not really the script, but the wordpress XML dump, referring to a > possible malformed or invalid unicode character in the dump file. This is what I can gather from other scripts. > I'll be checking my dump file shortly. -> + +>> Yup, it is the dump file with odd escape characters such as "fancy quotes" and crap like that. +>> translate them and you're golden. + From f67c714c5011684884e7fc8485278ab282aea8a3 Mon Sep 17 00:00:00 2001 From: simonraven Date: Sun, 12 Apr 2009 06:55:24 -0400 Subject: [PATCH 089/113] --- doc/tips/Importing_posts_from_Wordpress/discussion.mdwn | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn b/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn index 8d009c01a..9befe3f22 100644 --- a/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn +++ b/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn @@ -29,6 +29,5 @@ etc. > possible malformed or invalid unicode character in the dump file. This is what I can gather from other scripts. > I'll be checking my dump file shortly. ->> Yup, it is the dump file with odd escape characters such as "fancy quotes" and crap like that. ->> translate them and you're golden. +>> This is only part of the problem... I'm not exactly sure what's going on, and it's get late/early for me.... From 0feb3eda8259eb47bcd1df7e5e1a8f8d78aedd45 Mon Sep 17 00:00:00 2001 From: simonraven Date: Sun, 12 Apr 2009 20:16:10 -0400 Subject: [PATCH 090/113] --- doc/tips/Importing_posts_from_Wordpress/discussion.mdwn | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn b/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn index 9befe3f22..91f9a7d49 100644 --- a/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn +++ b/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn @@ -31,3 +31,11 @@ etc. >> This is only part of the problem... I'm not exactly sure what's going on, and it's get late/early for me.... +>>> I used --force for fast-import, but then everything seems deleted, so you end up doing a reset, checkout, add, *then* commit. +>>> Seems really odd. I edited the script however, maybe this is why... this is my changes: + + -print "data %d" % len(data) + +print "data %d merge refs/heads/%s" % (len(data), branch) + +>>> That control character is a ^q^0 in emacs, see git fast-import --help for more info. +>>> I'll be trying an import *without* that change, to see what happens. From c6981e20254fed5d22decb64d0be6760833cf4a2 Mon Sep 17 00:00:00 2001 From: simonraven Date: Sun, 12 Apr 2009 20:20:38 -0400 Subject: [PATCH 091/113] --- doc/tips/Importing_posts_from_Wordpress/discussion.mdwn | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn b/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn index 91f9a7d49..e39bfe5f0 100644 --- a/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn +++ b/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn @@ -39,3 +39,6 @@ etc. >>> That control character is a ^q^0 in emacs, see git fast-import --help for more info. >>> I'll be trying an import *without* that change, to see what happens. + +>>>> (5 minutes later) +>>>> Removing it makes it behave sanely. heh. Learned something new :). So ignore the comment just above, except for the --force part. You have to do that because fast-import assumes a clean uninitialized space. From 91031f7818a01bd468231420b5b40d6b50c916a0 Mon Sep 17 00:00:00 2001 From: simonraven Date: Mon, 13 Apr 2009 02:35:21 -0400 Subject: [PATCH 092/113] --- doc/tips/Importing_posts_from_Wordpress/discussion.mdwn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn b/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn index e39bfe5f0..55e04d9cb 100644 --- a/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn +++ b/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn @@ -40,5 +40,5 @@ etc. >>> That control character is a ^q^0 in emacs, see git fast-import --help for more info. >>> I'll be trying an import *without* that change, to see what happens. ->>>> (5 minutes later) ->>>> Removing it makes it behave sanely. heh. Learned something new :). So ignore the comment just above, except for the --force part. You have to do that because fast-import assumes a clean uninitialized space. +>>>> I still have to do the above to preserve the changes done by this script... (removed previous note). + From 461053db6ae0eb94492e937110ef32f82b292e50 Mon Sep 17 00:00:00 2001 From: "http://www.cse.unsw.edu.au/~willu/" Date: Mon, 13 Apr 2009 08:38:25 -0400 Subject: [PATCH 093/113] Add patch --- ...Inline_doesn__39__t_wikilink_to_pages.mdwn | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/doc/bugs/Inline_doesn__39__t_wikilink_to_pages.mdwn b/doc/bugs/Inline_doesn__39__t_wikilink_to_pages.mdwn index 7d2004406..89e0b9d69 100644 --- a/doc/bugs/Inline_doesn__39__t_wikilink_to_pages.mdwn +++ b/doc/bugs/Inline_doesn__39__t_wikilink_to_pages.mdwn @@ -16,3 +16,58 @@ the correct behaviour, whichever is decided, should be documented. -- [[Will]] It appears that [[ikiwiki/directive/map]] also doesn't wikilink to the pages it links. Perhaps in each of these cases there should be another parameter to the directive that allows linking to switched on. Just switching it on universally at this point might break a number of people's pagespecs. -- [[Will]] + +Here is a patch to make map link to its linked pages (when passed `link="yes"`). It is a bit problematic in that it uses a pagespec +to decide what to link to (which is why I wanted it). However, at the time the pagespec is used the links +for each page haven't finished being calculated (we're using the pagespec to figure out those links, +remember). This means that some pagespec match functions may not work correctly. Sigh. +It would be nice to find a topological ordering of the pages and scan them in that order +so that everything we need is found before we need it, but this patch doesn't do that (it would be +complex). + +If you just use simple pagespecs you'll be fine. Unfortunately I really wanted this for more complex +pagespecs. -- [[Will]] + + diff --git a/IkiWiki/Plugin/map.pm b/IkiWiki/Plugin/map.pm + index 3284931..57c0a7a 100644 + --- a/IkiWiki/Plugin/map.pm + +++ b/IkiWiki/Plugin/map.pm + @@ -13,7 +13,7 @@ use IkiWiki 3.00; + + sub import { + hook(type => "getsetup", id => "map", call => \&getsetup); + - hook(type => "preprocess", id => "map", call => \&preprocess); + + hook(type => "preprocess", id => "map", call => \&preprocess, scan => 1); + } + + sub getsetup () { + @@ -27,7 +27,9 @@ sub getsetup () { + sub preprocess (@) { + my %params=@_; + $params{pages}="*" unless defined $params{pages}; + - + + + + return if (!defined wantarray && !IkiWiki::yesno($params{link})); + + + my $common_prefix; + + # Get all the items to map. + @@ -42,6 +44,9 @@ sub preprocess (@) { + else { + $mapitems{$page}=''; + } + + if (!defined wantarray && IkiWiki::yesno($params{link})) { + + push @{$links{$params{page}}}, $page; + + } + # Check for a common prefix. + if (! defined $common_prefix) { + $common_prefix=$page; + @@ -62,6 +67,8 @@ sub preprocess (@) { + } + } + + + return if ! defined wantarray; + + + # Common prefix should not be a page in the map. + while (defined $common_prefix && length $common_prefix && + exists $mapitems{$common_prefix}) { From 27d86954901011565105b160fb93cb64519d3d56 Mon Sep 17 00:00:00 2001 From: simonraven Date: Mon, 13 Apr 2009 14:55:27 -0400 Subject: [PATCH 094/113] --- .../ikiwiki-wordpress-import.mdwn | 111 ++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 doc/tips/importing_posts_from_wordpress/ikiwiki-wordpress-import.mdwn diff --git a/doc/tips/importing_posts_from_wordpress/ikiwiki-wordpress-import.mdwn b/doc/tips/importing_posts_from_wordpress/ikiwiki-wordpress-import.mdwn new file mode 100644 index 000000000..e2eb1320b --- /dev/null +++ b/doc/tips/importing_posts_from_wordpress/ikiwiki-wordpress-import.mdwn @@ -0,0 +1,111 @@ +I modified the script a bit so categories and tags would actually show up in the output file. + + +
+#!/usr/bin/env python
+
+"""
+    Purpose:
+    Wordpress-to-Ikiwiki import tool
+
+    Copyright:
+    Copyright (C) 2007  Chris Lamb 
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see .
+
+    Usage: run --help as an argument with this script.
+
+    Notes:
+    I added some extra bits to include the [[!tag foo]] stuff in the post,
+    as it wasn't before, at all. I'll diff the versions out so you can see
+    the mess I made :).
+
+"""
+
+import os, sys
+import time
+import re
+
+from BeautifulSoup import BeautifulSoup
+
+import codecs, htmlentitydefs
+
+codecs.register_error('html_replace', lambda x: (''.join([u'&%s;' \
+    % htmlentitydefs.codepoint2name[ord(c)] for c in x.object[x.start:x.end]]), x.end))
+
+def main(name, email, subdir, branch='master'):
+    soup = BeautifulSoup(sys.stdin.read())
+
+    # Regular expression to match stub in URL.
+    stub_pattern = re.compile(r'.*\/(.+)\/$')
+
+    for x in soup.findAll('item'):
+        # Ignore draft posts
+        if x.find('wp:status').string != 'publish': continue
+
+        match = stub_pattern.match(x.guid.string)
+        if match:
+            stub = match.groups()[0]
+        else:
+            # Fall back to our own stubs
+            stub = re.sub(r'[^a-zA-Z0-9_]', '-', x.title.string).lower()
+
+        commit_msg = """Importing WordPress post "%s" [%s]""" % (x.title.string, x.guid.string)
+        timestamp = time.mktime(time.strptime(x.find('wp:post_date_gmt').string, "%Y-%m-%d %H:%M:%S"))
+
+        content = '[[!meta title="%s"]]\n\n' % (x.title.string.replace('"', r'\"'))
+        content += x.find('content:encoded').string.replace('\r\n', '\n')
+
+        # categories = x.findAll('category')
+        # categories = x.findAll({'category':True}, attrs={'domain':re.compile(('category|tag'))})
+        # categories = x.findAll({'category':True}, domain=["category", "tag"])
+        # categories = x.findAll({'category':True}, nicename=True)
+        """
+        We do it differently here because we have duplicates otherwise.
+        Take a look:
+        
+	
+
+        If we do the what original did, we end up with all tags and cats doubled.
+        Therefore we only pick out nicename="foo". Our 'True' below is our 'foo'.
+        I'd much rather have the value of 'nicename', and tried, but my
+        python skillz are extremely limited....
+        """
+        categories = x.findAll('category', nicename=True)
+        if categories:
+            content += "\n"
+            for cat in categories:
+                # remove 'tags/' because we have a 'tagbase' set.
+                # your choice: 'tag', or 'taglink'
+                # content += "\n[[!tag %s]]" % (cat.string.replace(' ', '-'))
+                content += "\n[[!taglink %s]]" % (cat.string.replace(' ', '-'))
+                # print >>sys.stderr, cat.string.replace(' ', '-')
+
+        # moved this thing down
+        data = content.encode('ascii', 'html_replace')
+        print "commit refs/heads/%s" % branch
+        print "committer %s <%s> %d +0000" % (name, email, timestamp)
+        print "data %d" % len(commit_msg)
+        print commit_msg
+        print "M 644 inline %s" % os.path.join(subdir, "%s.mdwn" % stub)
+        print "data %d" % len(data)
+        print data
+
+if __name__ == "__main__":
+    if len(sys.argv) not in (4, 5):
+        print >>sys.stderr, "%s: usage: %s name email subdir [branch] < wordpress-export.xml | git-fast-import " % (sys.argv[0], sys.argv[0])
+    else:
+        main(*sys.argv[1:])
+
+
From b35951026d085b95bf04282ce8d6c738980cfdb4 Mon Sep 17 00:00:00 2001 From: simonraven Date: Mon, 13 Apr 2009 14:59:49 -0400 Subject: [PATCH 095/113] --- doc/tips/Importing_posts_from_Wordpress.mdwn | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/doc/tips/Importing_posts_from_Wordpress.mdwn b/doc/tips/Importing_posts_from_Wordpress.mdwn index 87ef12079..59330caa4 100644 --- a/doc/tips/Importing_posts_from_Wordpress.mdwn +++ b/doc/tips/Importing_posts_from_Wordpress.mdwn @@ -2,4 +2,12 @@ Use case: You want to move away from Wordpress to Ikiwiki as your blogging/websi [This](http://git.chris-lamb.co.uk/?p=ikiwiki-wordpress-import.git) is a simple tool that generates [git-fast-import](http://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html)-compatible data from a WordPress export XML file. It retains creation time of each post, so you can use Ikiwiki's --getctime to get the preserve creation times on checkout. -WordPress categories are mapped onto Ikiwiki tags. The ability to import comments is planned. \ No newline at end of file +WordPress categories are mapped onto Ikiwiki tags. The ability to import comments is planned. + +----- + +I include a modified version of this script. This version includes the ability to write \[[!tag foo]] directives, which the original intended, but didn't actually do. + +-- [[users/simonraven]] + +[[ikiwiki-wordpress-import]] From 79fd3c9733ae8169de9d41056b673d10f6832dcb Mon Sep 17 00:00:00 2001 From: simonraven Date: Mon, 13 Apr 2009 15:03:38 -0400 Subject: [PATCH 096/113] --- .../ikiwiki-wordpress-import.mdwn | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/tips/importing_posts_from_wordpress/ikiwiki-wordpress-import.mdwn b/doc/tips/importing_posts_from_wordpress/ikiwiki-wordpress-import.mdwn index e2eb1320b..5d7a266ec 100644 --- a/doc/tips/importing_posts_from_wordpress/ikiwiki-wordpress-import.mdwn +++ b/doc/tips/importing_posts_from_wordpress/ikiwiki-wordpress-import.mdwn @@ -1,3 +1,5 @@ +[[!meta title="ikiwiki-wordpress-import"]] + I modified the script a bit so categories and tags would actually show up in the output file. From 69a814c011132bec884c405f3630f73406f74f9d Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 14 Apr 2009 15:51:25 -0400 Subject: [PATCH 097/113] not a bug --- doc/bugs/Inline_doesn__39__t_wikilink_to_pages.mdwn | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/doc/bugs/Inline_doesn__39__t_wikilink_to_pages.mdwn b/doc/bugs/Inline_doesn__39__t_wikilink_to_pages.mdwn index 89e0b9d69..168c1b2c4 100644 --- a/doc/bugs/Inline_doesn__39__t_wikilink_to_pages.mdwn +++ b/doc/bugs/Inline_doesn__39__t_wikilink_to_pages.mdwn @@ -17,6 +17,12 @@ It appears that [[ikiwiki/directive/map]] also doesn't wikilink to the pages it cases there should be another parameter to the directive that allows linking to switched on. Just switching it on universally at this point might break a number of people's pagespecs. -- [[Will]] +> There's a simple reason why these directives don't generate a record of a +> wikilink between them and the pages they include: Semantically, inlining +> a page is not the same as writing a link to it. Nor is generating a map that +> lists a page the same as linking to it. I don't think this is a bug. +> --[[Joey]] + Here is a patch to make map link to its linked pages (when passed `link="yes"`). It is a bit problematic in that it uses a pagespec to decide what to link to (which is why I wanted it). However, at the time the pagespec is used the links for each page haven't finished being calculated (we're using the pagespec to figure out those links, From 825366a007a1145b9487cb3cd7e0180c96709fd8 Mon Sep 17 00:00:00 2001 From: "http://www.cse.unsw.edu.au/~willu/" Date: Tue, 14 Apr 2009 22:29:57 -0400 Subject: [PATCH 098/113] Respond, and close bug --- ...Inline_doesn__39__t_wikilink_to_pages.mdwn | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/doc/bugs/Inline_doesn__39__t_wikilink_to_pages.mdwn b/doc/bugs/Inline_doesn__39__t_wikilink_to_pages.mdwn index 168c1b2c4..32f9f1245 100644 --- a/doc/bugs/Inline_doesn__39__t_wikilink_to_pages.mdwn +++ b/doc/bugs/Inline_doesn__39__t_wikilink_to_pages.mdwn @@ -23,6 +23,27 @@ it on universally at this point might break a number of people's pagespecs. -- > lists a page the same as linking to it. I don't think this is a bug. > --[[Joey]] +>> Fair enough. I guess we can mark this as [[done]] then. +>> +>> Just a bit of background on where I was going here... I was looking for +>> a simpler way of attacking [[todo/tracking_bugs_with_dependencies]]. +>> In particular, rather than introducing changes to the pagespec definition, +>> I wondered if you could use wiki pages as the defined pagespec and +>> introduce a 'match_mutual' function which matches whenever two pages +>> link to the same third page, then you don't need to alter the pagespec +>> handling code. +>> +>> But that requires being able use use a pagespec to decide what pages +>> are linked to. e.g. I want to make an 'openbugs' page that links to all +>> open bugs. Then I could make a 'readybugs' page that links to +>> `backlink(openbugs) and !mutualLink(openbugs)`. That is, all bugs +>> that are open and do not themselves link to an open bug. +>> +>> The problem with all this is that it introduces an ordering dependency, +>> as I noted below. I think the original proposal is better, because it +>> handles that ordering dependency in the definition of the pagespecs. +>> --[[Will]] + Here is a patch to make map link to its linked pages (when passed `link="yes"`). It is a bit problematic in that it uses a pagespec to decide what to link to (which is why I wanted it). However, at the time the pagespec is used the links for each page haven't finished being calculated (we're using the pagespec to figure out those links, From 5c0f69812103693a51391f82767b023b01bc1534 Mon Sep 17 00:00:00 2001 From: "http://schmonz.livejournal.com/" Date: Tue, 14 Apr 2009 23:42:53 -0400 Subject: [PATCH 099/113] patching Wrapper.pm no longer necessary as of 2.67 --- doc/plugins/contrib/unixauth.mdwn | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/doc/plugins/contrib/unixauth.mdwn b/doc/plugins/contrib/unixauth.mdwn index 76a847744..6108ebfae 100644 --- a/doc/plugins/contrib/unixauth.mdwn +++ b/doc/plugins/contrib/unixauth.mdwn @@ -14,25 +14,9 @@ Config variables that affect the behavior of `unixauth`: __Security__: [As with passwordauth](/security/#index14h2), be wary of sending usernames and passwords in cleartext. Unlike passwordauth, sniffing `unixauth` credentials can get an attacker much further than mere wiki access. Therefore, this plugin defaults to not even _displaying_ the login form fields unless we're running under SSL. Nobody should be able to do anything remotely dumb until the admin has done at least a little thinking. After that, dumb things are always possible. ;-) -`unixauth` tests for the presence of the `HTTPS` environment variable. `Wrapper.pm` needs to be tweaked to pass it through; without that, the plugin fails closed. +`unixauth` needs the `HTTPS` environment variable, available in ikiwiki 2.67 or later (fixed in #[502047](http://bugs.debian.org/502047)), without which it fails closed. -[[!toggle id="diff" text="Wrapper.pm.diff"]] - -[[!toggleable id="diff" text=""" - - --- Wrapper.pm.orig 2008-07-29 00:09:10.000000000 -0400 - +++ Wrapper.pm - @@ -28,7 +28,7 @@ sub gen_wrapper () { - my @envsave; - push @envsave, qw{REMOTE_ADDR QUERY_STRING REQUEST_METHOD REQUEST_URI - CONTENT_TYPE CONTENT_LENGTH GATEWAY_INTERFACE - - HTTP_COOKIE REMOTE_USER} if $config{cgi}; - + HTTP_COOKIE REMOTE_USER HTTPS} if $config{cgi}; - my $envsave=""; - foreach my $var (@envsave) { - $envsave.=<<"EOF" - -"""]] +The plugin has not been tested with newer versions of ikiwiki. [[schmonz]] hopes to have time to polish this plugin soon. [[!toggle id="code" text="unixauth.pm"]] From 01c8c929bce0018ba599f6da995ead4f894df2ff Mon Sep 17 00:00:00 2001 From: "http://furicle.pip.verisignlabs.com/" Date: Wed, 15 Apr 2009 13:46:42 -0400 Subject: [PATCH 100/113] Just dumb keyboard hammering --- .../I_hate_making_new_blog_entries_-_sometimes.wiki | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 doc/sandbox/I_hate_making_new_blog_entries_-_sometimes.wiki diff --git a/doc/sandbox/I_hate_making_new_blog_entries_-_sometimes.wiki b/doc/sandbox/I_hate_making_new_blog_entries_-_sometimes.wiki new file mode 100644 index 000000000..36c41cec4 --- /dev/null +++ b/doc/sandbox/I_hate_making_new_blog_entries_-_sometimes.wiki @@ -0,0 +1,11 @@ +!!!Heading Three + +Itemized +* list +* of +* things + +or not +1. mom +1. hi +1. there From 0cfa75e29704fedd60e6a8b58c6ac1e2037bc5d6 Mon Sep 17 00:00:00 2001 From: "http://furicle.pip.verisignlabs.com/" Date: Wed, 15 Apr 2009 13:48:21 -0400 Subject: [PATCH 101/113] Just dumb keyboard hammering --- ...I_hate_making_new_blog_entries_-_sometimes.wiki | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/doc/sandbox/I_hate_making_new_blog_entries_-_sometimes.wiki b/doc/sandbox/I_hate_making_new_blog_entries_-_sometimes.wiki index 36c41cec4..54914bb0b 100644 --- a/doc/sandbox/I_hate_making_new_blog_entries_-_sometimes.wiki +++ b/doc/sandbox/I_hate_making_new_blog_entries_-_sometimes.wiki @@ -9,3 +9,17 @@ or not 1. mom 1. hi 1. there + + + +!!!Heading Three + +Itemized +* list +* of +* things + +or not +1. mom +1. hi +1. there From 753c7246c2720f6994a69826153b3409a6709647 Mon Sep 17 00:00:00 2001 From: "http://furicle.pip.verisignlabs.com/" Date: Wed, 15 Apr 2009 13:50:28 -0400 Subject: [PATCH 102/113] --- doc/sandbox.mdwn | 1 - 1 file changed, 1 deletion(-) diff --git a/doc/sandbox.mdwn b/doc/sandbox.mdwn index 1e5fba304..f19e9afa0 100644 --- a/doc/sandbox.mdwn +++ b/doc/sandbox.mdwn @@ -1,7 +1,6 @@ This is the [[SandBox]], a page anyone can edit to try out ikiwiki (version [[!version ]]). ---- -misc test test more test [[中文显示]] From f4af7696385573482e31e61632a76454ce5afbcf Mon Sep 17 00:00:00 2001 From: "http://furicle.pip.verisignlabs.com/" Date: Wed, 15 Apr 2009 13:55:37 -0400 Subject: [PATCH 103/113] --- doc/plugins/404/badpage.mdwn | 1 + 1 file changed, 1 insertion(+) create mode 100644 doc/plugins/404/badpage.mdwn diff --git a/doc/plugins/404/badpage.mdwn b/doc/plugins/404/badpage.mdwn new file mode 100644 index 000000000..46111f277 --- /dev/null +++ b/doc/plugins/404/badpage.mdwn @@ -0,0 +1 @@ +Does it really let me put a page here? From 7d0e245e28429ed82bacccf1308e026b9b0dad42 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 15 Apr 2009 14:45:23 -0400 Subject: [PATCH 104/113] it's a wiki, so yes --- doc/plugins/404/badpage.mdwn | 1 - 1 file changed, 1 deletion(-) delete mode 100644 doc/plugins/404/badpage.mdwn diff --git a/doc/plugins/404/badpage.mdwn b/doc/plugins/404/badpage.mdwn deleted file mode 100644 index 46111f277..000000000 --- a/doc/plugins/404/badpage.mdwn +++ /dev/null @@ -1 +0,0 @@ -Does it really let me put a page here? From 78f5e553e79ea9d1423e5b971a0a9a0c70d249a0 Mon Sep 17 00:00:00 2001 From: "http://furicle.pip.verisignlabs.com/" Date: Thu, 16 Apr 2009 16:55:49 -0400 Subject: [PATCH 105/113] --- doc/sandbox.mdwn | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/sandbox.mdwn b/doc/sandbox.mdwn index f19e9afa0..4b6b9f270 100644 --- a/doc/sandbox.mdwn +++ b/doc/sandbox.mdwn @@ -96,3 +96,6 @@ Let's see what happens... ~~ testing + +-- +[[!toc levels=2]] From 4f53b59df759d6efb8dcbbf943185599b9455aab Mon Sep 17 00:00:00 2001 From: "http://furicle.pip.verisignlabs.com/" Date: Thu, 16 Apr 2009 17:11:54 -0400 Subject: [PATCH 106/113] typo - but it bugged me... --- doc/tips/embedding_content.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/tips/embedding_content.mdwn b/doc/tips/embedding_content.mdwn index 142acd16e..bfe458a84 100644 --- a/doc/tips/embedding_content.mdwn +++ b/doc/tips/embedding_content.mdwn @@ -15,7 +15,7 @@ you'd better trust that site. And if ikiwiki lets you enter such html, it needs to trust you.) The [[plugins/htmlscrubber]] offers a different way around this problem. -You can configure it to skip scrubbing certian pages, so that content from +You can configure it to skip scrubbing certain pages, so that content from elsewhere can be embedded on those pages. Then use [[plugins/lockedit]] to limit who can edit those unscrubbed pages. From e88a110d6204658e58efcccac363937ef67f4b3b Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 18 Apr 2009 22:51:25 -0400 Subject: [PATCH 107/113] releasing version 3.10 --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 51b5121fb..4bbeac1d9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -ikiwiki (3.10) UNRELEASED; urgency=low +ikiwiki (3.10) unstable; urgency=low * darcs: Finally added support for this VCS, thanks to many contributors: @@ -14,7 +14,7 @@ ikiwiki (3.10) UNRELEASED; urgency=low * inline: Add author info to archive display. * Add a microblog template that is useful for inlining microblogging posts. - -- Joey Hess Sat, 04 Apr 2009 17:47:36 -0400 + -- Joey Hess Sat, 18 Apr 2009 19:40:25 -0400 ikiwiki (3.09) unstable; urgency=low From 1051da48359b2269564f7ab71250bf14183e9017 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 18 Apr 2009 22:52:17 -0400 Subject: [PATCH 108/113] add news item for ikiwiki 3.10 --- doc/news/version_3.09.mdwn | 16 ---------------- doc/news/version_3.10.mdwn | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 16 deletions(-) delete mode 100644 doc/news/version_3.09.mdwn create mode 100644 doc/news/version_3.10.mdwn diff --git a/doc/news/version_3.09.mdwn b/doc/news/version_3.09.mdwn deleted file mode 100644 index d5e1a6545..000000000 --- a/doc/news/version_3.09.mdwn +++ /dev/null @@ -1,16 +0,0 @@ -ikiwiki 3.09 released with [[!toggle text="these changes"]] -[[!toggleable text=""" - * inline: Add title\_natural sort order, using Sort::Naturally - (chrysn) - * inline: Fix urls to feed when feedfile is used on an index page. - * git, mercurial: Fix --getctime to return file creation time, - not last commit time. - * Updated French translation (Jean-Luc Coulon). Closes: #[521072](http://bugs.debian.org/521072) - * css: Add clear: both to inlinefooter. - * comments: Fix too loose test for comments pages that matched - normal pages with "comment\_" in their name. Closes: #[521322](http://bugs.debian.org/521322) - * comments: Fix anchor ids to be legal xhtml. Closes: #[521339](http://bugs.debian.org/521339) - * Fix documentation of anonok\_pagespec. Closes: #[521793](http://bugs.debian.org/521793) - * Add missing suggests on libtext-textile-perl. Closes: #[522039](http://bugs.debian.org/522039) - * recentchanges: change to using do=goto links for user links. - * Fix git test suite to use a bare repo."""]] \ No newline at end of file diff --git a/doc/news/version_3.10.mdwn b/doc/news/version_3.10.mdwn new file mode 100644 index 000000000..9d9c33c58 --- /dev/null +++ b/doc/news/version_3.10.mdwn @@ -0,0 +1,15 @@ +ikiwiki 3.10 released with [[!toggle text="these changes"]] +[[!toggleable text=""" + * darcs: Finally added support for this VCS, thanks to many + contributors: + - Thomas Schwinge wrote the original file, implementing only rcs\_commit. + - Benjamin A'Lee contributed an alternative implementation. + - Tuomo Valkonen contributed rcs\_getctime and stub rcs\_recentchanges. + - Simon Michael contributed multiple changes. + - Petr Ročkai fixed rcs\_recentchanges. + - Sven M. Hallberg merged the above and added missing features. + * Add missing newline to Confirm Password prompt. + * Add missing permalink support to archivepage and titlepage templates. + * debian/control: Wrap fields. + * inline: Add author info to archive display. + * Add a microblog template that is useful for inlining microblogging posts."""]] \ No newline at end of file From b2e4201349ed1f8c19e0bb51e392aaa213071889 Mon Sep 17 00:00:00 2001 From: simonraven Date: Sun, 19 Apr 2009 13:28:57 -0400 Subject: [PATCH 109/113] --- doc/tips/add_chatterbox_to_blog/discussion.mdwn | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 doc/tips/add_chatterbox_to_blog/discussion.mdwn diff --git a/doc/tips/add_chatterbox_to_blog/discussion.mdwn b/doc/tips/add_chatterbox_to_blog/discussion.mdwn new file mode 100644 index 000000000..531b919ec --- /dev/null +++ b/doc/tips/add_chatterbox_to_blog/discussion.mdwn @@ -0,0 +1,16 @@ +The example you gave looks a bit odd. + +This is what I did from your example (still trying to learn the more complex things ;). + +
+\[[!template id=note text="""
+\[[!aggregate expirecount=5 name=kijkaqawej url=http://identi.ca/kjikaqawej
+feedurl=http://identi.ca/api/statuses/user_timeline/kjikaqawej.atom]]
+\[[!inline pages="internal(kijkaqawej/*)" template=microblog show=5 feeds=no]] """]]
+
+ +mine, live, here: + +I expected something like: sidebar, with a number, and displaying them in the sidebar, but they don't display (similar to what you have on your blog). + +On the [[/ikwiki/pagespec]] page, it says "internal" pages aren't "first-class" wiki pages, so it's best not to directly display them, so how do you manage to display them? I'd like to display their name, and what they link to in the sidebar, or otherwise in the main body. From 48e369366e597edc1791cbd8cde92920cbe00eb7 Mon Sep 17 00:00:00 2001 From: simonraven Date: Sun, 19 Apr 2009 13:29:53 -0400 Subject: [PATCH 110/113] typo --- doc/tips/add_chatterbox_to_blog/discussion.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/tips/add_chatterbox_to_blog/discussion.mdwn b/doc/tips/add_chatterbox_to_blog/discussion.mdwn index 531b919ec..b448cf3b8 100644 --- a/doc/tips/add_chatterbox_to_blog/discussion.mdwn +++ b/doc/tips/add_chatterbox_to_blog/discussion.mdwn @@ -13,4 +13,4 @@ mine, live, here: I expected something like: sidebar, with a number, and displaying them in the sidebar, but they don't display (similar to what you have on your blog). -On the [[/ikwiki/pagespec]] page, it says "internal" pages aren't "first-class" wiki pages, so it's best not to directly display them, so how do you manage to display them? I'd like to display their name, and what they link to in the sidebar, or otherwise in the main body. +On the [[/ikiwiki/pagespec]] page, it says "internal" pages aren't "first-class" wiki pages, so it's best not to directly display them, so how do you manage to display them? I'd like to display their name, and what they link to in the sidebar, or otherwise in the main body. From 4e935d300ed0bda37a44e1da85aff797f0aeda8f Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 19 Apr 2009 15:19:43 -0400 Subject: [PATCH 111/113] clarification, response --- doc/tips/add_chatterbox_to_blog.mdwn | 7 +++++-- doc/tips/add_chatterbox_to_blog/discussion.mdwn | 6 ++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/doc/tips/add_chatterbox_to_blog.mdwn b/doc/tips/add_chatterbox_to_blog.mdwn index 3497da9ff..aa35b9331 100644 --- a/doc/tips/add_chatterbox_to_blog.mdwn +++ b/doc/tips/add_chatterbox_to_blog.mdwn @@ -6,12 +6,15 @@ from there, like I have on [my blog](http://kitenet.net/~joey/blog/) * Enable the [[plugins/aggregate]] plugin, and set up a cron job for it. * At the top of your blog's page, add something like the following. - You'll want to change the urls of course. + You'll want to change the urls of course. Be sure to also change + the inline directive's [[PageSpec]] to link to the location the + feed is aggregated to, which will be a subpage of the page + you put this on (blog in this example): \[[!template id=note text=""" \[[!aggregate expirecount=5 name="dents" url="http://identi.ca/joeyh" feedurl="http://identi.ca/api/statuses/user_timeline/joeyh.atom"]] - \[[!inline pages="internal(dents/*)" template=microblog + \[[!inline pages="internal(./blog/dents/*)" template=microblog show=5 feeds=no]] """]] diff --git a/doc/tips/add_chatterbox_to_blog/discussion.mdwn b/doc/tips/add_chatterbox_to_blog/discussion.mdwn index b448cf3b8..57e4b76ad 100644 --- a/doc/tips/add_chatterbox_to_blog/discussion.mdwn +++ b/doc/tips/add_chatterbox_to_blog/discussion.mdwn @@ -14,3 +14,9 @@ mine, live, here: I expected something like: sidebar, with a number, and displaying them in the sidebar, but they don't display (similar to what you have on your blog). On the [[/ikiwiki/pagespec]] page, it says "internal" pages aren't "first-class" wiki pages, so it's best not to directly display them, so how do you manage to display them? I'd like to display their name, and what they link to in the sidebar, or otherwise in the main body. + +> That's what the inline does, displays the internal pages. +> +> You need to fix your pagespec to refer to where the pages are aggregated +> to, under the page that contains the aggregate directive. In your example, +> it should be `internal(./blog/meta/microblog-feed/kijkaqawej/*)` --[[Joey]] From 2cc3f5d057c5882e08d16746985c49a7dd1a4c01 Mon Sep 17 00:00:00 2001 From: simonraven Date: Mon, 20 Apr 2009 05:04:53 -0400 Subject: [PATCH 112/113] --- doc/tips/add_chatterbox_to_blog/discussion.mdwn | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/tips/add_chatterbox_to_blog/discussion.mdwn b/doc/tips/add_chatterbox_to_blog/discussion.mdwn index 57e4b76ad..bf7c9b1c3 100644 --- a/doc/tips/add_chatterbox_to_blog/discussion.mdwn +++ b/doc/tips/add_chatterbox_to_blog/discussion.mdwn @@ -20,3 +20,6 @@ On the [[/ikiwiki/pagespec]] page, it says "internal" pages aren't "first-class" > You need to fix your pagespec to refer to where the pages are aggregated > to, under the page that contains the aggregate directive. In your example, > it should be `internal(./blog/meta/microblog-feed/kijkaqawej/*)` --[[Joey]] + +>> Oooh, I see, it's referring to an absolute path (relative to the site), right? +>> Thanks :). From 9db2438b3a0366738ba2e1b6e23ad3d8ae2fe36e Mon Sep 17 00:00:00 2001 From: intrigeri Date: Mon, 20 Apr 2009 11:38:15 +0200 Subject: [PATCH 113/113] po: remove unneeded check on link plugin Signed-off-by: intrigeri --- IkiWiki/Plugin/po.pm | 2 -- 1 file changed, 2 deletions(-) diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm index f25beba72..3503fabc4 100644 --- a/IkiWiki/Plugin/po.pm +++ b/IkiWiki/Plugin/po.pm @@ -180,8 +180,6 @@ sub scan (@) { my $page=$params{page}; my $content=$params{content}; - return unless UNIVERSAL::can("IkiWiki::Plugin::link", "import"); - if (istranslation($page)) { foreach my $destpage (@{$links{$page}}) { if (istranslatable($destpage)) {