]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - doc/bugs/map_is_inconsistent_about_bare_directories.mdwn
Optimize away most expensive file prune calls, when refreshing
[git.ikiwiki.info.git] / doc / bugs / map_is_inconsistent_about_bare_directories.mdwn
index 479db3e0f28bd2b7be613443a2b38b314d2f11cd..a53296dfc31c219dfb3f737f27dc96aff5cedf28 100644 (file)
@@ -1,26 +1,86 @@
 The [[plugins/map]] plugin has inconsistent behaviour.  In particular, I have in my wiki some directory structures holding files without wikitext pointers (I point directly to the files from elsewhere).  For example, imagine the following file structure in the source dir:
 
-* Assignments.mdwn
-* Assignments
-    * 2004
-        * Assign1.pdf
-        * Assign2.pdf
-    * 2005
-        * Assign1.pdf
-        * Assign2.pdf
-    * 2006
-        * etc., etc.
+    ; ls -R dirA dirB
+    dirA:
+    subA       subB
+    
+    dirA/subA:
+    filea.mdwn fileb.mdwn
+    
+    dirA/subB:
+    filec.mdwn filed.mdwn
+    
+    dirB:
+    subA       subC
+    
+    dirB/subA:
+    filea.mdwn
+    
+    dirB/subC:
+    fileb.mdwn filec.mdwn
 
 When I use map to make a map of this, the result looks more like this:
 
-* Assignments        # this is a link to the correct page
-    * 2004                   # this has a create link
-        * Assign1.pdf
-        * Assign2.pdf
-        * Assign1.pdf
-        * Assign2.pdf
-        * etc., etc.
+<ul>
+<li><span class="createlink">? dirA</span>
+<ul>
+<li><span class="createlink">? subA</span>
+<ul>
+<li>filea
+</li>
+</ul>
+<ul>
+<li>fileb
+</li>
+</ul>
+<ul>
+<li>filec
+</li>
+<li>filed
+</li>
+</ul>
+</li>
+</ul>
+</li>
+<li><span class="createlink">? dirB</span>
+<ul>
+<li><span class="createlink">? subA</span>
+<ul>
+<li>filea
+</li>
+</ul>
+</li>
+</ul>
+<ul>
+<li><span class="createlink">? subC</span>
+<ul>
+<li>fileb
+</li>
+</ul>
+<ul>
+<li>filec
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
 
-Note that while the 2004 directory exists with a create link, the 2005 and 2006 (etc) directories are missing from the site map.
+Note that while the dirA/subA directory exists with a create link, the dirA/subB directory is missing from the map.  Interestingly, dirB/subC is shown in the map.  If you add a second file to dirB/subA then dirB/subC disappears as well.
 
 I could imagine including all 'bare' directories in the map, and I could imagine including no 'bare' directories in the map.  Just including the first bare directory seems a strange intermediate point.
+
+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.
+
+-- [[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]]