summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorJoey Hess <joey@kodama.kitenet.net>2008-08-23 13:10:49 -0400
committerJoey Hess <joey@kodama.kitenet.net>2008-08-23 13:10:49 -0400
commit9b10f5eab22be36cf3b3a217076c76a669b4aafa (patch)
treecb60acfdbc8e810d45ee108a5677d02865577160 /doc
parentd84e43faacbeb1e43224aa65d5ea8c19e657779e (diff)
map: The fix for #449285 was buggy and broke display of parents in certian circumstances.
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.
Diffstat (limited to 'doc')
-rw-r--r--doc/bugs/map_is_inconsistent_about_bare_directories.mdwn52
1 files changed, 7 insertions, 45 deletions
diff --git a/doc/bugs/map_is_inconsistent_about_bare_directories.mdwn b/doc/bugs/map_is_inconsistent_about_bare_directories.mdwn
index dc2479e73..431a9938a 100644
--- a/doc/bugs/map_is_inconsistent_about_bare_directories.mdwn
+++ b/doc/bugs/map_is_inconsistent_about_bare_directories.mdwn
@@ -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]]