Add path and path_natural sort orders

These correspond to title and title_natural, but compare the entire
path: a < a/b < a/z < ab < b.
(cherry picked from commit 903a5a314f)
master
Simon McVittie 2011-11-12 16:02:20 +00:00 committed by Joey Hess
parent 5333c113d6
commit ea313b8133
2 changed files with 50 additions and 2 deletions

48
t/cmp_path.t 100755
View File

@ -0,0 +1,48 @@
#!/usr/bin/perl
use warnings;
use strict;
use Test::More tests => 25;
BEGIN { use_ok("IkiWiki"); }
%config=IkiWiki::defaultconfig();
$config{srcdir}=$config{destdir}="/dev/null";
IkiWiki::checkconfig();
sub test {
my ($before, $after) = @_;
$IkiWiki::SortSpec::a = $before;
$IkiWiki::SortSpec::b = $after;
my $r = IkiWiki::SortSpec::cmp_path();
if ($before eq $after) {
is($r, 0);
}
else {
is($r, -1);
}
$IkiWiki::SortSpec::a = $after;
$IkiWiki::SortSpec::b = $before;
$r = IkiWiki::SortSpec::cmp_path();
if ($before eq $after) {
is($r, 0);
}
else {
is($r, 1);
}
is_deeply([IkiWiki::SortSpec::sort_pages(\&IkiWiki::SortSpec::cmp_path, $before, $after)],
[$before, $after]);
is_deeply([IkiWiki::SortSpec::sort_pages(\&IkiWiki::SortSpec::cmp_path, $after, $before)],
[$before, $after]);
}
test("a/b/c", "a/b/c");
test("a/b", "a/c");
test("a/z", "z/a");
test("a", "a/b");
test("a", "a/b");
test("a/z", "ab");

View File

@ -12,7 +12,7 @@ IkiWiki::checkconfig();
{ {
package IkiWiki::SortSpec; package IkiWiki::SortSpec;
sub cmp_path { $a cmp $b } sub cmp_raw_path { $a cmp $b }
} }
%pagesources=( %pagesources=(
@ -53,7 +53,7 @@ is_deeply([pagespec_match_list("foo", "post/*", sort => "title", num => 50, reve
is_deeply([pagespec_match_list("foo", "post/*", sort => "title", is_deeply([pagespec_match_list("foo", "post/*", sort => "title",
filter => sub { $_[0] =~ /3/}) ], filter => sub { $_[0] =~ /3/}) ],
["post/1", "post/2"]); ["post/1", "post/2"]);
is_deeply([pagespec_match_list("foo", "*", sort => "path", num => 2)], is_deeply([pagespec_match_list("foo", "*", sort => "raw_path", num => 2)],
["bar", "foo"]); ["bar", "foo"]);
is_deeply([pagespec_match_list("foo", "foo* or bar*", is_deeply([pagespec_match_list("foo", "foo* or bar*",
sort => "-age title")], # oldest first, break ties by title sort => "-age title")], # oldest first, break ties by title