From 6ad9f33ccb2d8702dd1d4375dd82998f72078e60 Mon Sep 17 00:00:00 2001 From: David Maus Date: Sun, 26 Jun 2011 20:02:42 +0200 Subject: [PATCH] Properly handle relative symlinks when publishing * org-publish.el (org-publish-cache-ctime-of-src): Properly handle relative symlinks. At Thu, 07 Apr 2011 01:11:00 -0400, Nick Dokos wrote: > > org-publish-cache-ctime-of-src tries (but does not always succeed) to > deal with symlinks: file-symlink-p returns the target as a string, but > if the target is relative to the symlink, that's not going to fly. > e.g. if c is a symlink like this > > /a/b/c->../d/f > > then (file-symlink-p "/a/b/c") -> "../d/f" > but if the current directory is any place other than /a/b, the target > will not be found, the file attributes are going to be nil and > the function will blow up. --- lisp/org-publish.el | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lisp/org-publish.el b/lisp/org-publish.el index 56cc80a..5646430 100644 --- a/lisp/org-publish.el +++ b/lisp/org-publish.el @@ -1157,9 +1157,12 @@ Returns value on success, else nil." (defun org-publish-cache-ctime-of-src (filename) "Get the FILENAME ctime as an integer." - (let ((src-attr (file-attributes (if (stringp (file-symlink-p filename)) - (file-symlink-p filename) - filename)))) + (let* ((symlink-maybe (or (file-symlink-p filename) filename)) + (src-attr (file-attributes (if (file-name-absolute-p symlink-maybe) + symlink-maybe + (expand-file-name + symlink-maybe + (file-name-directory filename)))))) (+ (lsh (car (nth 5 src-attr)) 16) (cadr (nth 5 src-attr))))) -- 1.7.2.5