better long filename detection method
authorJoey Hess <joey@kitenet.net>
Fri, 10 Jun 2011 23:04:18 +0000 (19:04 -0400)
committerJoey Hess <joey@kitenet.net>
Fri, 10 Jun 2011 23:04:18 +0000 (19:04 -0400)
Let's just try to write and fall back to a short ugly filename on error.

IkiWiki/Plugin/aggregate.pm
doc/bugs/aggregate_generates_long_filenames.mdwn

index 7f50b54f0cc18fa2f960b5df2ce95e607a62d22b..5e22609c9b354a2b2770762a17cd60bcd5c36535 100644 (file)
@@ -614,6 +614,7 @@ sub add_page (@) {
                # updating an existing post
                $guid=$guids{$params{guid}};
                return if $guid->{expired};
+               write_page($feed, $guid, $mtime, \%params);
        }
        else {
                # new post
@@ -640,23 +641,33 @@ sub add_page (@) {
                        $c++
                }
 
-               # Make sure that the file name isn't too long. 
-               # NB: This doesn't check for path length limits.
-               my $max=POSIX::pathconf($config{srcdir}, &POSIX::_PC_NAME_MAX);
-               if (defined $max && length(htmlfn($page).".ikiwiki-new") >= $max) {
+               $guid->{page}=$page;
+               eval { write_page($feed, $guid, $mtime, \%params) };
+               if ($@) {
+                       # assume failure was due to a too long filename
+                       # (or o
                        $c="";
                        $page=$feed->{dir}."/item";
                        while (exists $IkiWiki::pagecase{lc $page.$c} ||
                              -e $IkiWiki::Plugin::transient::transientdir."/".htmlfn($page.$c) ||
-
-                              -e "$config{srcdir}/".htmlfn($page.$c)) {
+                             -e "$config{srcdir}/".htmlfn($page.$c)) {
                                $c++
                        }
+
+                       $guid->{page}=$page;
+                       write_page($feed, $guid, $mtime, \%params);
                }
 
-               $guid->{page}=$page;
                debug(sprintf(gettext("creating new page %s"), $page));
        }
+}
+
+sub write_page ($$$$$) {
+       my $feed=shift;
+       my $guid=shift;
+       my $mtime=shift;
+       my %params=%{shift()};
+
        $guid->{feed}=$feed->{name};
        
        # To write or not to write? Need to avoid writing unchanged pages
index fae8333ab81718a1dfdc72694609ebd6a408ea43..33c300bd2c1be0138776e9ee40a46114156fc6c5 100644 (file)
@@ -35,3 +35,6 @@ It would also appear this abrubtly terminates aggregate processing (if not ikiwi
 
 >>> Path length seems unlikely, since the max is 4096 there.
 >>> --[[Joey]] 
+
+>>>> Aggregate now used a "if it crashes, it must be too long" strategy.
+>>>> [[done]] --[[Joey]]