summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyle Meyer <kyle@kyleam.com>2020-06-08 20:25:22 -0400
committerKyle Meyer <kyle@kyleam.com>2020-06-08 20:25:22 -0400
commit3ebee033103ccd3c3e8c354bad01c15332b9d901 (patch)
tree2c89ee6f544815495d153e58dbbf0840b4e5204a
parent706970efb1d86cf5a8e2eba3d8cd894138a0c333 (diff)
downloadorg-mode-3ebee033103ccd3c3e8c354bad01c15332b9d901.tar.gz
ob-tangle: Restore handling of relative file links
* lisp/ob-tangle.el (org-babel-tangle-single-block): Fix regression from v9.0.2 that resulted in org-babel-tangle-use-relative-file-links being ignored. * testing/lisp/test-ob-tangle.el (ob-tangle/comment-links-relative-file): Add test. As of 7b148e2d0 (ob-tangle: Respect buffer local variables, 2016-12-10), the condition in org-babel-tangle-single-block that checks whether to return a file link with a relative target always returns nil because the full org-link-types-re match, including the final colon, is compared with "file" (no colon). Also, were this condition to succeed, "file:" would be used as the file name. Adjust the condition and fix the extracted file name. Reported-by: Jeremias Gonzalez <jgonzalez49@ucmerced.edu> https://orgmode.org/list/6fb12326-52d3-7177-eff5-62603261b388@ucmerced.edu
-rw-r--r--lisp/ob-tangle.el4
-rw-r--r--testing/lisp/test-ob-tangle.el37
2 files changed, 39 insertions, 2 deletions
diff --git a/lisp/ob-tangle.el b/lisp/ob-tangle.el
index 9460398..1fb26a7 100644
--- a/lisp/ob-tangle.el
+++ b/lisp/ob-tangle.el
@@ -471,9 +471,9 @@ non-nil, return the full association list to be used by
file)
(if (and org-babel-tangle-use-relative-file-links
(string-match org-link-types-re link)
- (string= (match-string 0 link) "file"))
+ (string= (match-string 1 link) "file"))
(concat "file:"
- (file-relative-name (match-string 1 link)
+ (file-relative-name (substring link (match-end 0))
(file-name-directory
(cdr (assq :tangle params)))))
link)
diff --git a/testing/lisp/test-ob-tangle.el b/testing/lisp/test-ob-tangle.el
index 301f7af..df45c97 100644
--- a/testing/lisp/test-ob-tangle.el
+++ b/testing/lisp/test-ob-tangle.el
@@ -120,6 +120,43 @@ echo 1
(search-forward "[H:2]]" nil t))))
(delete-file "test-ob-tangle.el")))))
+(ert-deftest ob-tangle/comment-links-relative-file ()
+ "Test relative file name handling when commenting with links."
+ (should
+ (org-test-with-temp-text-in-file
+ "* H
+#+header: :tangle \"test-ob-tangle.el\" :comments link
+#+begin_src emacs-lisp
+1
+#+end_src"
+ (unwind-protect
+ (let ((org-babel-tangle-use-relative-file-links t))
+ (org-babel-tangle)
+ (with-temp-buffer
+ (insert-file-contents "test-ob-tangle.el")
+ (buffer-string)
+ (goto-char (point-min))
+ (search-forward
+ (concat "[file:" (file-name-nondirectory file))
+ nil t)))
+ (delete-file "test-ob-tangle.el"))))
+ (should
+ (org-test-with-temp-text-in-file
+ "* H
+#+header: :tangle \"test-ob-tangle.el\" :comments link
+#+begin_src emacs-lisp
+1
+#+end_src"
+ (unwind-protect
+ (let ((org-babel-tangle-use-relative-file-links nil))
+ (org-babel-tangle)
+ (with-temp-buffer
+ (insert-file-contents "test-ob-tangle.el")
+ (buffer-string)
+ (goto-char (point-min))
+ (search-forward (concat "[file:" file) nil t)))
+ (delete-file "test-ob-tangle.el")))))
+
(ert-deftest ob-tangle/jump-to-org ()
"Test `org-babel-tangle-jump-to-org' specifications."
;; Standard test.