]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - doc/bugs/map_is_inconsistent_about_bare_directories.mdwn
Add proposed patch
[git.ikiwiki.info.git] / doc / bugs / map_is_inconsistent_about_bare_directories.mdwn
index c1f3880012c4a99637d95ee97fd5f6b2e9c9e7ee..dc2479e73c42b38f1bf2685e8c25ff04ea5fa83a 100644 (file)
@@ -72,18 +72,22 @@ I could imagine including all 'bare' directories in the map, and I could imagine
 
 Attached is a [[patch]] that fixes the issue.  The current map code makes one pass over the sorted list of pages.  This adds an initial pass that goes through and makes sure that all parent directories are included.  With this initial pass added, the following pass could probably be simplified.
 
+One solution could also use the [[plugins/autoindex]] plugin to make sure that parent pages actually exist.  This is really only a stop-gap solution until the patch is applied - map still needs to be made bug-free.
+
 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..142073d 100644
+    index 5b6a843..16de45e 100644
     --- a/IkiWiki/Plugin/map.pm
     +++ b/IkiWiki/Plugin/map.pm
-    @@ -67,6 +67,37 @@ sub preprocess (@) { #{{{
+    @@ -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;
@@ -92,7 +96,7 @@ Note: This patch adds items to a map while it is in a foreach loop over a sorted
     +                  # find the common dir
     +                  my @a=split(/\//, $itembase);
     +                  my @b=split(/\//, $lastbase);
-    +                  my $common_dir="";
+    +                  my $common_dir=$commonbase;
     +                  while (@a && @b && $a[0] eq $b[0]) {
     +                          if (length $common_dir) {
     +                                  $common_dir.="/";
@@ -116,3 +120,5 @@ Note: This patch adds items to a map while it is in a foreach loop over a sorted
        # Create the map.
        my $parent="";
        my $indent=0;
+
+-- [[users/Will]]