aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authordakkar <dakkar@luxion>2007-08-13 15:26:50 +0000
committerdakkar <dakkar@luxion>2007-08-13 15:26:50 +0000
commitfe5fb68a82036dfafdb515295020dd29ddf84f3d (patch)
tree609f09da856ba0948dbf12a4d6f4d35f455d9bb6 /lib
parentnomi dai test (diff)
downloadWebCoso-fe5fb68a82036dfafdb515295020dd29ddf84f3d.tar.gz
WebCoso-fe5fb68a82036dfafdb515295020dd29ddf84f3d.tar.bz2
WebCoso-fe5fb68a82036dfafdb515295020dd29ddf84f3d.zip
symlink resolver, per aiutare la cache dei template
git-svn-id: svn://luxion/repos/WebCoso/trunk@272 fcb26f47-9200-0410-b104-b98ab5b095f3
Diffstat (limited to 'lib')
-rw-r--r--lib/Path/ResolveSymlinks.pm39
1 files changed, 39 insertions, 0 deletions
diff --git a/lib/Path/ResolveSymlinks.pm b/lib/Path/ResolveSymlinks.pm
new file mode 100644
index 0000000..695122a
--- /dev/null
+++ b/lib/Path/ResolveSymlinks.pm
@@ -0,0 +1,39 @@
+package Path::ResolveSymlinks;
+use strict;
+use warnings;
+use Cwd 'abs_path';
+use Path::Class;
+use Carp;
+
+sub resolve_symlinks {
+ my ($name)=@_;
+
+ my ($dir,$file);
+ if (-d $name) {
+ $dir=dir($name);
+ }
+ elsif (-f $name) {
+ $file=file($name);
+ $dir=$file->parent;
+ $file=$file->basename;
+ }
+ else {
+ croak "$name is neither a file nor a directory";
+ }
+
+ $dir=dir(abs_path($dir));warn "dir: $dir\n";
+ return $dir unless defined $file;
+
+ $file=$dir->file($file);warn "file: $file\n";
+ return $file unless -l $file;
+
+ my $dest=file(readlink $file);warn "dest: $dest\n";
+ if ($dest->is_absolute) {
+ return resolve_symlinks($dest);
+ }
+ else {
+ return resolve_symlinks($dir->file($dest));
+ }
+}
+
+1;