From 3ebee033103ccd3c3e8c354bad01c15332b9d901 Mon Sep 17 00:00:00 2001 From: Kyle Meyer Date: Mon, 8 Jun 2020 20:25:22 -0400 Subject: [PATCH] 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 https://orgmode.org/list/6fb12326-52d3-7177-eff5-62603261b388@ucmerced.edu --- lisp/ob-tangle.el | 4 ++-- testing/lisp/test-ob-tangle.el | 37 ++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/lisp/ob-tangle.el b/lisp/ob-tangle.el index 946039869..1fb26a71d 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 301f7aff7..df45c97fa 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.