aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess <joey@kitenet.net>2010-08-30 13:36:00 -0400
committerJoey Hess <joey@kitenet.net>2010-08-30 13:36:00 -0400
commit991d01f5b53250b962725110903b0324c93fbfb6 (patch)
tree77f5bad195b6659423f1bfb14a725ca17cba7765
parent7d1cc3a0209980bdbec59ffd0b6171898a1cc066 (diff)
downloadikiwiki-991d01f5b53250b962725110903b0324c93fbfb6.tar
ikiwiki-991d01f5b53250b962725110903b0324c93fbfb6.tar.gz
optimise single dot detection
Since it already looks for things starting with a dot, I was able to avoid matching against the string twice. This also fixes a minor bug; $from may not be defined. Avoid uninitialized value warnings in this case.
-rw-r--r--IkiWiki.pm17
1 files changed, 10 insertions, 7 deletions
diff --git a/IkiWiki.pm b/IkiWiki.pm
index 6fd112960..6da281999 100644
--- a/IkiWiki.pm
+++ b/IkiWiki.pm
@@ -2401,14 +2401,17 @@ package IkiWiki::PageSpec;
sub derel ($$) {
my $path=shift;
my $from=shift;
- if ($path eq '.') {
- $path = $from;
- }
- if ($path =~ m!^\./!) {
- $from=~s#/?[^/]+$## if defined $from;
- $path=~s#^\./##;
- $path="$from/$path" if defined $from && length $from;
+ if ($path =~ m!^\.(/|$)!) {
+ if ($1) {
+ $from=~s#/?[^/]+$## if defined $from;
+ $path=~s#^\./##;
+ $path="$from/$path" if defined $from && length $from;
+ }
+ else {
+ $path = $from;
+ $path = "" unless defined $path;
+ }
}
return $path;