emacs-eldev / eldev

Elisp development tool
https://emacs-eldev.github.io/eldev/
GNU General Public License v3.0
227 stars 17 forks source link

Error when using melpa-stable + buttercup #12

Closed DarwinAwardWinner closed 4 years ago

DarwinAwardWinner commented 4 years ago

In eldev 0.3, it seems that I can't use melpa-stable if I'm using buttercup. To verify this, I put the following in an Eldev file in an empty directory:

(eldev-use-package-archive 'melpa-stable)
(setq eldev-test-framework 'buttercup)

Then, I created a package for it to compile:

;;; mypkg.el --- My pkg -*- lexical-binding: t -*-

;; Version: 1.0

(defun myfunc (a b)
  (+ a (* 2 b)))

(provide 'mypkg)

;;; mypkg.el ends here

Now, when I run eldev compile, I get:

$ eldev compile
Wrong type argument: listp, melpa-stable
$ eldev -S '(toggle-debug-on-error)' compile
Debug on Error enabled globally
Debugger entered--Lisp error: (wrong-type-argument listp melpa-stable)
  eldev--install-or-upgrade-dependencies(nil runtime nil nil t nil nil)
  eldev-load-extra-dependencies(runtime)
  eldev--test-autoinstalling-framework(t #f(compiled-function () #<bytecode 0x10cbd25>))
  eldev-build(":compile")
  eldev-compile()
  apply(eldev-compile nil)
  eldev-cli(("-S" "(toggle-debug-on-error)" "compile"))
  (kill-emacs (eldev-cli (append (cdr (member "--" command-line-args)) nil)))
  eval((kill-emacs (eldev-cli (append (cdr (member "--" command-line-args)) nil))))
  command-line-1(("--execute" "(let ((eldev--emacs-version (format \"%s.%s\" emacs-major-version emacs-minor-version))\n      (eldev--dir           (getenv \"ELDEV_DIR\"))\n      ;; This is intentional.  First, this is in case ELDEV_LOCAL is\n      ;; defined, second, this is just Eldev default for packages.\n      (load-prefer-newer    t))\n  ;; Setting `debug-on-error' would be useful, but it can break many\n  ;; `package-*' functions, since those use `with-demoted-errors' and\n  ;; so `condition-case-unless-debug'.\n  (unless (and (fboundp 'version<=) (version<= \"24.1\" eldev--emacs-version))\n    (error \"Eldev requires Emacs 24.1 or newer\"))\n  (setf package-user-dir       (expand-file-name \"bootstrap\" (expand-file-name eldev--emacs-version (if (= (length eldev--dir) 0) \"~/.eldev\" eldev--dir)))\n        package-directory-list nil\n        package-archives       nil)\n  (require 'package)\n  (package-initialize t)\n  (let ((package-archives '((\"melpa-stable\" . \"http://stable.melpa.org/packages/\")))\n        (archive-name      \"Melpa stable\")\n        (inhibit-message  t)\n        (eldev-local      (getenv \"ELDEV_LOCAL\"))\n        eldev-pkg\n        requirements)\n    (unless (= (length eldev-local) 0)\n      (if (string-prefix-p \":pa:\" eldev-local)\n          (setf package-archives `((\"bootstrap-pa\" . ,(file-name-as-directory (substring eldev-local (length \":pa:\")))))\n                archive-name     \"a local package archive\")\n        (with-temp-buffer\n          (insert-file-contents-literally (expand-file-name \"eldev.el\" eldev-local))\n          (setf eldev-pkg                    (package-buffer-info)\n                (package-desc-dir eldev-pkg) (expand-file-name eldev-local))\n          ;; Currently Eldev has no external dependencies, but let's be generic.\n          (dolist (requirement (package-desc-reqs eldev-pkg))\n            (unless (package-activate (car requirement))\n              (push requirement requirements))))))\n    (when (if eldev-pkg\n              requirements\n            (not (package-activate 'eldev)))\n      (let ((inhibit-message nil))\n        (message \"Bootstrapping Eldev for Emacs %s from %s...\\n\" eldev--emacs-version archive-name)\n        (when eldev-pkg\n          (message \"Eldev package itself will be used from `%s'\\n\" eldev-local)))\n      (package-refresh-contents)\n      (if eldev-pkg\n          (package-download-transaction (package-compute-transaction nil requirements))\n        (package-install 'eldev)))\n    (when eldev-pkg\n      (push `(eldev . (,eldev-pkg)) package-alist)\n      ;; `package--autoloads-file-name' is package-private.\n      (let* ((autoloads-file     (expand-file-name (format \"%s-autoloads\" (package-desc-name eldev-pkg))\n                                                   (package-desc-dir eldev-pkg)))\n             (autoloads-disabler (lambda (do-load file &rest args) (unless (equal file autoloads-file) (apply do-load file args)))))\n        (advice-add #'load :around autoloads-disabler)\n        (package-activate-1 eldev-pkg)\n        (advice-remove #'load autoloads-disabler))))\n  (require 'eldev)\n  (eldev-start-up))" "--execute" "(kill-emacs (eldev-cli (append (cdr (member \"--\" command-line-args)) nil)))" "--" "-S" "(toggle-debug-on-error)" "compile"))
  command-line()
  normal-top-level()

Removing either of the 2 lines from the Eldev file allows eldev to run normally, as does changing melpa-stable to anything else (e.g. melpa-unstable). However, this obviously isn't an option for a package that actually requires both.

doublep commented 4 years ago

For the record, you can use option -d, it is much more convenient than -S '(toggle-debug-on-error)'.

doublep commented 4 years ago

0.3.1 fixes the issue. Should become available for upgrade-self in a few hours.

I also added a regression test for the issue.

DarwinAwardWinner commented 4 years ago

Whoops, I guess the help text for -d just barely scrolled off the top of my terminal window. Anyway, thanks for the fix!