Skip to content

Commit 49322c7

Browse files
committed
Fix errors with developing Emacs built-in packages using Eldev (issue #102).
1 parent d6f091e commit 49322c7

File tree

3 files changed

+37
-3
lines changed

3 files changed

+37
-3
lines changed

eldev.el

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2919,7 +2919,10 @@ Since 0.2."
29192919
(clrhash considered)
29202920
(throw 'restart-planning t))
29212921
(unless (and considered-before (version-list-<= required-version considered-version))
2922-
(unless (package-built-in-p package-name required-version)
2922+
(when (or (not (package-built-in-p package-name required-version))
2923+
;; See issue 102. Do replace built-in packages with the project itself
2924+
;; and local dependencies. See `local' below.
2925+
(and (not self) (eldev--loading-mode package-name)))
29232926
(when (eq package-name 'emacs)
29242927
(when optional
29252928
(eldev-verbose "Emacs version %s (this is %s) is %s; skipping the optional dependency"
@@ -3174,8 +3177,8 @@ for all archives instead."
31743177

31753178
(defun eldev--loading-mode (dependency)
31763179
"Get loading mode of package DEPENDENCY.
3177-
DEPENDENCY can be either a name (symbol) or a package
3178-
descriptor."
3180+
DEPENDENCY can be either a name (symbol) or a package descriptor.
3181+
Returns nil if it is neither a project nor a local dependency."
31793182
(let ((dependency-name (if (symbolp dependency) dependency (package-desc-name dependency))))
31803183
(if (eq dependency-name (package-desc-name (eldev-package-descriptor)))
31813184
(or eldev-project-loading-mode 'as-is)

test/misc.el

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,26 @@
3636
(should (= exit-code 0)))))
3737

3838

39+
(ert-deftest eldev-issue-102-1 ()
40+
;; Org is an Emacs built-in. Make sure it still can be developed with Eldev.
41+
(let ((eldev--test-project "project-fake-org"))
42+
(eldev--test-delete-cache)
43+
(eldev--test-run nil ("eval" `(bound-and-true-p org-is-fake))
44+
(should (string= stdout "t\n"))
45+
(should (= exit-code 0)))))
46+
47+
(ert-deftest eldev-issue-102-2 ()
48+
(let ((eldev--test-project "dependency-org"))
49+
(eldev--test-run nil ("eval" `(progn (require 'org) (bound-and-true-p org-is-fake)))
50+
(should (string= stdout "nil\n"))
51+
(should (= exit-code 0)))
52+
;; Must load the local dependency if requested, even if Org is a built-in.
53+
(eldev--test-run nil ("--setup" `(eldev-use-local-dependency "../project-fake-org")
54+
"eval" `(progn (require 'org) (bound-and-true-p org-is-fake)))
55+
(should (string= stdout "t\n"))
56+
(should (= exit-code 0)))))
57+
58+
3959
;; Not a bug, just doesn't seem to fit anywhere else. Test that
4060
;; `eldev-known-tool-packages' can be customized.
4161
(ert-deftest eldev-known-tool-packages-1 ()

test/project-fake-org/org.el

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
;;; org.el --- Fake of an Org snapshot
2+
3+
;; Version: 99999999.9999
4+
5+
(defvar org-version "99999999.9999")
6+
7+
(defvar org-is-fake t)
8+
9+
(provide 'org)
10+
11+
;;; org.el ends here

0 commit comments

Comments
 (0)