]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/commitdiff
map: The fix for #449285 was buggy and broke display of parents in certian circumstances.
authorJoey Hess <joey@kodama.kitenet.net>
Sat, 23 Aug 2008 17:10:49 +0000 (13:10 -0400)
committerJoey Hess <joey@kodama.kitenet.net>
Sat, 23 Aug 2008 17:10:49 +0000 (13:10 -0400)
The use of $dummy was not sufficient, because it only stuck around for the
first element after a dummy parent, and was then lost. Instead, use a
$addparent that contains the actual dummy parent, so it can be compared
with the new item to see if we're still under that parent or have moved to
another one.

IkiWiki/Plugin/map.pm
debian/changelog
doc/bugs/map_is_inconsistent_about_bare_directories.mdwn

index 4c2a15b019dab6fdab77ac9a3a7c5144ae5fe3d3..18c584a30ccba43f0fab289392c18987422ac8db 100644 (file)
@@ -80,7 +80,7 @@ sub preprocess (@) { #{{{
        my $parent="";
        my $indent=0;
        my $openli=0;
-       my $dummy=0;
+       my $addparent="";
        my $map = "<div class='map'>\n<ul>\n";
        foreach my $item (sort keys %mapitems) {
                my @linktext = (length $mapitems{$item} ? (linktext => $mapitems{$item}) : ());
@@ -88,17 +88,16 @@ sub preprocess (@) { #{{{
                        if defined $common_prefix && length $common_prefix;
                my $depth = ($item =~ tr/\//\//) + 1;
                my $baseitem=IkiWiki::dirname($item);
-               print STDERR "!! parent: $parent baseitem: $baseitem\n";
                while (length $parent && length $baseitem && $baseitem !~ /^\Q$parent\E(\/|$)/) {
                        $parent=IkiWiki::dirname($parent);
-                       last if !$dummy && length $parent && $baseitem =~ /^\Q$parent\E(\/|$)/;
+                       last if length $addparent && $baseitem =~ /^\Q$addparent\E(\/|$)/;
+                       $addparent="";
                        $indent--;
                        $map .= "</li>\n";
                        if ($indent > 0) {
                                $map .= "</ul>\n";
                        }
                }
-               $dummy=0;
                while ($depth < $indent) {
                        $indent--;
                        $map .= "</li>\n";
@@ -116,14 +115,14 @@ sub preprocess (@) { #{{{
                        }
                        if ($depth > $indent) {
                                $p.="/".shift(@bits);
-                               #$p=~s/^\///;
+                               $addparent=$p;
+                               $addparent=~s/^\///;
                                $map .= "<li>"
                                        .htmllink($params{page}, $params{destpage},
                                                 "/".$common_prefix.$p, class => "mapparent",
                                                 noimageinline => 1)
                                        ."\n";
                                $openli=1;
-                               $dummy=1;
                        }
                        else {
                                $openli=0;
index 25beb28eaf8898bebbe7b6d383902d60e34d05fe..460ddc27fa43f0a8e26c3f8b4201ffa0d9de8df6 100644 (file)
@@ -5,6 +5,8 @@ ikiwiki (2.62) UNRELEASED; urgency=low
     instead, and prompt if it fails.
   * Fix bug in wikiname sanitisation in the setup automator.
   * ikiwiki-makerepo: Added support for monotone. (Thomas Keller)
+  * map: The fix for #449285 was buggy and broke display of parents in certian
+    circumstances.
 
  -- Joey Hess <joeyh@debian.org>  Thu, 21 Aug 2008 16:20:58 -0400
 
index dc2479e73c42b38f1bf2685e8c25ff04ea5fa83a..431a9938ae6c63662d2df760602882ef31c21a83 100644 (file)
@@ -76,49 +76,11 @@ One solution could also use the [[plugins/autoindex]] plugin to make sure that p
 
 Note: This patch adds items to a map while it is in a foreach loop over a sorted list of keys from that same map.  Changing a map while iterating through it is normally problematic.  I'm assuming the sort insulates the code from this - I do not need to iterate over any of the newly added elements.
 
-    diff --git a/IkiWiki/Plugin/map.pm b/IkiWiki/Plugin/map.pm
-    index 5b6a843..16de45e 100644
-    --- a/IkiWiki/Plugin/map.pm
-    +++ b/IkiWiki/Plugin/map.pm
-    @@ -67,6 +67,39 @@ sub preprocess (@) { #{{{
-       # are removed.
-       add_depends($params{page}, join(" or ", keys %mapitems));
-     
-    +  # Include all the parent directories in the map
-    +  my $lastbase="";
-    +  my $commonbase = "";
-    +  $commonbase = $common_prefix if defined $common_prefix && length $common_prefix;
-    +  foreach my $item (sort keys %mapitems) {
-    +          $item=~s/^\Q$common_prefix\E\///
-    +                  if defined $common_prefix && length $common_prefix;
-    +          my $itembase=IkiWiki::dirname($item);
-    +          if ($itembase ne $lastbase) {
-    +                  # find the common dir
-    +                  my @a=split(/\//, $itembase);
-    +                  my @b=split(/\//, $lastbase);
-    +                  my $common_dir=$commonbase;
-    +                  while (@a && @b && $a[0] eq $b[0]) {
-    +                          if (length $common_dir) {
-    +                                  $common_dir.="/";
-    +                          }
-    +                          $common_dir.=shift(@a);
-    +                          shift @b;
-    +                  }
-    +                  # add all the dirs down to the current base
-    +                  while (@a) {
-    +                          if (length $common_dir) {
-    +                                  $common_dir.="/";
-    +                          }
-    +                          $common_dir.=shift(@a);
-    +                          $mapitems{$common_dir}=''
-    +                                  unless defined $mapitems{$common_dir};
-    +                  }
-    +                  $lastbase = $itembase;
-    +          }
-    +  }
-    +
-       # Create the map.
-       my $parent="";
-       my $indent=0;
-
 -- [[users/Will]]
+
+> The patch is subtly buggy and just papers over the actual bug with a
+> lot of extra code. Thanks for trying to come up with a patch for this
+> annyoingly complicated bug.. I think I've fixed the underlying bug now.
+> --[[Joey]]
+> 
+> [[tag done]]