]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - doc/bugs/multiple_pages_with_same_name.mdwn
doesn't look like an ikiwiki bug
[git.ikiwiki.info.git] / doc / bugs / multiple_pages_with_same_name.mdwn
index 58a004da827a5d29c113b53ae09149c18d6b6329..20c38c06202c1d0b7f1fbd7f33da7f31af2cbb48 100644 (file)
@@ -4,6 +4,10 @@ I realised that this is going to have problems when you ask it to process `.c` a
 
 I tested it briefly with `test.java` and `test.mdwn` just to see what would happen.  Things got quite strange.  The source-highlighting plugin was called (probably for the java file), but then when it calls `pagetype($pagesources{$page})` to figure out the file type, that function returns `mdwn`, which confuses things somewhat.
 
 
 I tested it briefly with `test.java` and `test.mdwn` just to see what would happen.  Things got quite strange.  The source-highlighting plugin was called (probably for the java file), but then when it calls `pagetype($pagesources{$page})` to figure out the file type, that function returns `mdwn`, which confuses things somewhat.
 
+> This is a known possible point of confusion. If there are multiple source
+> files, it will render them both, in an arbitrary sequence, so one "wins".
+> --[[Joey]]
+
 Anyway, I'm thinking about possible solutions.  The best option I've come up with so far is: when registering an htmlize hook, add a new optional paramter 'keep_extension'.  This would make a source file of `hello.c` generate a page with name `hello.c` rather than the current `hello`.  This would keep the pages unique (until someone makes `hello.c.mdwn`...).
 
 Suggestions welcome.
 Anyway, I'm thinking about possible solutions.  The best option I've come up with so far is: when registering an htmlize hook, add a new optional paramter 'keep_extension'.  This would make a source file of `hello.c` generate a page with name `hello.c` rather than the current `hello`.  This would keep the pages unique (until someone makes `hello.c.mdwn`...).
 
 Suggestions welcome.
@@ -12,18 +16,26 @@ Suggestions welcome.
 
 > Ok, this turned out not to be a hard change.  [[patch]] is below.  With this patch you can tell IkiWiki not to drop the suffix when you register a hook: `hook(type => "htmlize", id => $lang, call => \&htmlize, leavesuffix => 1);`
 
 
 > Ok, this turned out not to be a hard change.  [[patch]] is below.  With this patch you can tell IkiWiki not to drop the suffix when you register a hook: `hook(type => "htmlize", id => $lang, call => \&htmlize, leavesuffix => 1);`
 
+>> I think that's a good solution to the problem that most syntax plugins
+>> have struggled with. It makes sense. It doesn't solve the case where
+>> you have source files without any extension (eg `Makefile`), but at
+>> least it covers the common cases.
+>>
+>> I'm going to be annoying and call it "keepextension", otherwise, applied
+>> as-is. --[[Joey]] [[done]]
+
     diff --git a/IkiWiki.pm b/IkiWiki.pm
     index 4e4da11..853f905 100644
     --- a/IkiWiki.pm
     +++ b/IkiWiki.pm
     diff --git a/IkiWiki.pm b/IkiWiki.pm
     index 4e4da11..853f905 100644
     --- a/IkiWiki.pm
     +++ b/IkiWiki.pm
-    @@ -618,7 +618,7 @@ sub pagename ($) { #{{{
+    @@ -618,7 +618,7 @@ sub pagename ($) {
      
        my $type=pagetype($file);
        my $page=$file;
     -  $page=~s/\Q.$type\E*$// if defined $type;
     +  $page=~s/\Q.$type\E*$// if defined $type && !$hooks{htmlize}{$type}{leavesuffix};
        return $page;
      
        my $type=pagetype($file);
        my $page=$file;
     -  $page=~s/\Q.$type\E*$// if defined $type;
     +  $page=~s/\Q.$type\E*$// if defined $type && !$hooks{htmlize}{$type}{leavesuffix};
        return $page;
-     } #}}}
+     }
      
     diff --git a/t/pagename.t b/t/pagename.t
     index 96e6a87..58811b9 100755
      
     diff --git a/t/pagename.t b/t/pagename.t
     index 96e6a87..58811b9 100755
@@ -38,3 +50,27 @@ Suggestions welcome.
      
      is(pagename("foo.mdwn"), "foo");
      is(pagename("foo/bar.mdwn"), "foo/bar");
      
      is(pagename("foo.mdwn"), "foo");
      is(pagename("foo/bar.mdwn"), "foo/bar");
+
+----
+
+I wonder if this patch will also be useful:
+
+> Reasonable, applied.
+
+    diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm
+    index 752d176..3f1b67b 100644
+    --- a/IkiWiki/Render.pm
+    +++ b/IkiWiki/Render.pm
+    @@ -279,7 +279,11 @@ sub refresh () {
+                               else {
+                                       $f=~s/^\Q$config{srcdir}\E\/?//;
+                                       push @files, $f;
+    -                                  $exists{pagename($f)}=1;
+    +                                  my $pagename = pagename($f);
+    +                                  if ($exists{$pagename}) {
+    +                                          warn(sprintf(gettext("Page %s has multiple possible source pages"), $pagename)."\n");
+    +                                  }
+    +                                  $exists{$pagename}=1;
+                               }
+                       }
+               },