From d6576ef35dc393e924f6afaba5ee8e1b6290894f Mon Sep 17 00:00:00 2001 From: cuttlefisch Date: Tue, 14 Apr 2026 23:30:10 +0200 Subject: [PATCH 1/2] Fix --install-from-content failing when root-directory doesn't exist When root-directory points to a not-yet-cloned path, call-process fails with "No such file or directory" because default-directory must exist. Add make-directory before the pipeline runs so the CWD is created first. Co-Authored-By: Claude Opus 4.6 --- declarative-project-mode.el | 1 + test/test-declarative-project.el | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/declarative-project-mode.el b/declarative-project-mode.el index 1a924de..9e783cc 100644 --- a/declarative-project-mode.el +++ b/declarative-project-mode.el @@ -215,6 +215,7 @@ EXTRA-KEYS is an alist of additional keys to set in the resource hash." (file-name-as-directory (expand-file-name rd)))) (default-directory (or root-from-spec (file-name-as-directory (expand-file-name project-dir))))) + (make-directory default-directory t) (puthash 'project-root default-directory project-resources) (dolist (pair extra-keys) (puthash (car pair) (cdr pair) project-resources)) diff --git a/test/test-declarative-project.el b/test/test-declarative-project.el index 79146d8..d887451 100644 --- a/test/test-declarative-project.el +++ b/test/test-declarative-project.el @@ -299,7 +299,25 @@ (expect (gethash 'project-root result) :to-equal (file-name-as-directory (expand-file-name root-dir))))) - (delete-directory root-dir t)))))) + (delete-directory root-dir t))))) + + (it "creates non-existent root-directory before running pipeline" + (with-temp-project-dir + (let* ((novel-root (concat (make-temp-file "dpm-novel-" t) "/subdir"))) + (unwind-protect + (progn + (spy-on 'declarative-project--check-required-resources) + (spy-on 'declarative-project--install-project-dependencies) + (spy-on 'declarative-project--copy-local-files) + (spy-on 'declarative-project--create-symlinks) + (spy-on 'declarative-project--apply-treemacs-workspaces) + (let* ((yaml (format "name: Test\nroot-directory: %s\n" novel-root)) + (result (declarative-project--install-from-content + yaml project-dir))) + (expect (gethash 'project-root result) + :to-equal (file-name-as-directory + (expand-file-name novel-root))))) + (delete-directory (file-name-directory novel-root) t)))))) ;;; ========================================================================== ;;; declarative-project--install-project (parsing) From f1542db8541292a5d32a60f95bbb1ac80ec8a57b Mon Sep 17 00:00:00 2001 From: cuttlefisch Date: Tue, 14 Apr 2026 23:32:50 +0200 Subject: [PATCH 2/2] Bump version to 0.3.4 Co-Authored-By: Claude Opus 4.6 --- CHANGELOG.org | 14 ++++++++++++++ declarative-project-mode.el | 2 +- declarative-project-treemacs.el | 2 +- ob-declarative-project.el | 2 +- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.org b/CHANGELOG.org index 2b2d8fd..579c564 100644 --- a/CHANGELOG.org +++ b/CHANGELOG.org @@ -1,6 +1,20 @@ #+title: Changelog #+author: Hayden Stanko +* 0.3.4 — 2026-04-14 + +** Bug fixes +- Fix =--install-from-content= failing when =root-directory= doesn't exist :: + =call-process= requires =default-directory= to be a valid path. When + =root-directory= in the spec pointed to a not-yet-cloned directory, the + install pipeline crashed with "No such file or directory". Now + =(make-directory default-directory t)= is called before the pipeline runs. + +** Tests +- 1 new spec: non-existent =root-directory= is created before pipeline + stages execute. +- Total spec count: 105 (up from 104 in 0.3.3). + * 0.3.3 — 2026-03-21 ** Bug fixes diff --git a/declarative-project-mode.el b/declarative-project-mode.el index 9e783cc..0c70c61 100644 --- a/declarative-project-mode.el +++ b/declarative-project-mode.el @@ -6,7 +6,7 @@ ;; Maintainer: Hayden Stanko ;; Created: January 13, 2023 ;; Modified: March 21, 2026 -;; Version: 0.3.3 +;; Version: 0.3.4 ;; Keywords: convenience, tools, project ;; Homepage: https://github.com/cuttlefisch/declarative-project-mode ;; Package-Requires: ((emacs "28.1") (yaml "0.5.1")) diff --git a/declarative-project-treemacs.el b/declarative-project-treemacs.el index 32aaa7c..22a39f3 100644 --- a/declarative-project-treemacs.el +++ b/declarative-project-treemacs.el @@ -6,7 +6,7 @@ ;; Maintainer: Hayden Stanko ;; Created: January 14, 2023 ;; Modified: March 21, 2026 -;; Version: 0.3.3 +;; Version: 0.3.4 ;; Keywords: convenience, tools, project ;; Homepage: https://github.com/cuttlefisch/declarative-project-mode ;; Package-Requires: ((emacs "28.1") (treemacs "2.10") (declarative-project-mode "0.3.3")) diff --git a/ob-declarative-project.el b/ob-declarative-project.el index e6ce3e7..eb2158c 100644 --- a/ob-declarative-project.el +++ b/ob-declarative-project.el @@ -6,7 +6,7 @@ ;; Maintainer: Hayden Stanko ;; Created: March 15, 2026 ;; Modified: March 21, 2026 -;; Version: 0.3.3 +;; Version: 0.3.4 ;; Keywords: convenience, tools, project ;; Homepage: https://github.com/cuttlefisch/declarative-project-mode ;; Package-Requires: ((emacs "28.1") (org "9.0") (declarative-project-mode "0.3.3"))