+ diff -urx .svn -x doc -x '*.po' -x '*.pot' ikiclean/IkiWiki/CGI.pm ikidev/IkiWiki/CGI.pm
+ --- ikiclean/IkiWiki/CGI.pm 2007-01-17 22:11:41.794805000 -0800
+ +++ ikidev/IkiWiki/CGI.pm 2007-01-17 21:43:33.750363000 -0800
+ @@ -400,8 +400,8 @@
+ @page_locs=$best_loc=$page;
+ }
+ else {
+ - my $dir=$from."/";
+ - $dir=~s![^/]+/+$!!;
+ + my $dir=$from;
+ + $dir=~s![^/]+$!!;
+
+ if ((defined $form->field('subpage') && length $form->field('subpage')) ||
+ $page eq gettext('discussion')) {
+ @@ -412,7 +412,9 @@
+ }
+
+ push @page_locs, $dir.$page;
+ - push @page_locs, "$from/$page";
+ + if ($dir ne $from){ # i.e. $from not a directory
+ + push @page_locs, "$from/$page";
+ + }
+ while (length $dir) {
+ $dir=~s![^/]+/+$!!;
+ push @page_locs, $dir.$page;
+ diff -urx .svn -x doc -x '*.po' -x '*.pot' ikiclean/IkiWiki/Render.pm ikidev/IkiWiki/Render.pm
+ --- ikiclean/IkiWiki/Render.pm 2007-01-11 15:01:51.000000000 -0800
+ +++ ikidev/IkiWiki/Render.pm 2007-01-17 22:25:13.526856000 -0800
+ @@ -40,6 +40,7 @@
+ my $dir;
+ 1 while (($dir)=$page_trimmed=~m!^([^/]+/)!) &&
+ defined $dir &&
+ + $p_trimmed=~m/^\Q$dir\E(?:.)/ &&
+ $p_trimmed=~s/^\Q$dir\E// &&
+ $page_trimmed=~s/^\Q$dir\E//;
+
+ @@ -57,10 +58,18 @@
+ my $path="";
+ my $skip=1;
+ return if $page eq 'index'; # toplevel
+ - foreach my $dir (reverse split("/", $page)) {
+ + if ($page =~ m{/$}){
+ + $page =~ s{/$}{};
+ + $path="../";
+ + }
+ +
+ + while ($page =~ m!([^/]+)$!) {
+ + my $last = $1;
+ + $page =~ s!/?[^/]+$!!;
+ if (! $skip) {
+ $path.="../";
+ - unshift @ret, { url => $path.htmlpage($dir), page => pagetitle($dir) };
+ + my $target = abs2rel(htmlpage(bestlink($page, $last)), $page);
+ + unshift @ret, { url => $path.$target, page => pagetitle($last) };
+ }
+ else {
+ $skip=0;
+ diff -urx .svn -x doc -x '*.po' -x '*.pot' ikiclean/IkiWiki.pm ikidev/IkiWiki.pm
+ --- ikiclean/IkiWiki.pm 2007-01-12 12:47:09.000000000 -0800
+ +++ ikidev/IkiWiki.pm 2007-01-15 16:56:58.973680000 -0800
+ @@ -185,6 +185,7 @@
+ sub basename ($) { #{{{
+ my $file=shift;
+
+ + $file=~s!/$!!;
+ $file=~s!.*/+!!;
+ return $file;