summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Maus <dmaus@ictsoc.de>2011-06-26 20:02:42 +0200
committerBastien Guerry <bzg@altern.org>2011-07-03 13:06:52 +0200
commit60d24c01ea5ade82c156f195cce4abc81027c76a (patch)
tree9b2e706a0ac374acdb153c95e595766cc0e5912a
parentc4066dca8e6779abbf9fc3c4619f6e906ab1e68a (diff)
downloadorg-mode-60d24c01ea5ade82c156f195cce4abc81027c76a.tar.gz
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.
-rw-r--r--lisp/org-publish.el9
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)))))