]> git.eshelyaron.com Git - emacs.git/commitdiff
[] Install system packages using system-packages-install
authorLaurence Rochfort <laurence.rochfort@gmail.com>
Wed, 12 Sep 2018 16:53:26 +0000 (17:53 +0100)
committerLaurence Rochfort <laurence.rochfort@gmail.com>
Wed, 12 Sep 2018 18:12:49 +0000 (19:12 +0100)
:ensure-system-package was installing packages by running
system-packages-get-command via async-shell-command. This meant that
system-packages-use-sudo wasn't being honoured.

This patch makes :ensure-system-package use system-packages-install
for all cases, except where a custom install command is supplied, in
which case async-shell-command is used.

This issue was introduced in 9f034a0bcfdd8c4 [https://github.com/jwiegley/use-package/issues/673], as a fix for
[https://github.com/jwiegley/use-package/issues/661]. Prior to that commit, system-packages-use-sudo was being
honoured.

This patch also fixes a bug where a cons containing a lone symbol in a
list of conses causes nil to used as the package to install.
GitHub-reference: fix https://github.com/jwiegley/use-package/issues/720
Copyright-paperwork-exempt: yes

lisp/use-package/use-package-ensure-system-package.el

index eaf6de79a123106a1c4a5af78fb0891603e3543a..87abf407020f481efb7e9ef62a20e42a8cd63ae9 100644 (file)
@@ -5,7 +5,7 @@
 ;; Author: Justin Talbott <justin@waymondo.com>
 ;; Keywords: convenience, tools, extensions
 ;; URL: https://github.com/waymondo/use-package-ensure-system-package
-;; Version: 0.1
+;; Version: 0.2
 ;; Package-Requires: ((use-package "2.1") (system-packages "1.0.4"))
 ;; Filename: use-package-ensure-system-package.el
 ;; License: GNU General Public License version 3, or (at your option) any later version
 (eval-when-compile
   (declare-function system-packages-get-command "system-packages"))
 
-(defun use-package-ensure-system-package-install-command (pack)
-  "Return the default install command for PACK."
-  (system-packages-get-command 'install pack))
 
 (defun use-package-ensure-system-package-consify (arg)
   "Turn `arg' into a cons of (`package-name' . `install-command')."
   (cond
    ((stringp arg)
-    (cons arg (use-package-ensure-system-package-install-command arg)))
+    (cons arg `(system-packages-install ,arg)))
    ((symbolp arg)
-    (cons arg (use-package-ensure-system-package-install-command (symbol-name arg))))
+    (cons arg `(system-packages-install ,(symbol-name arg))))
    ((consp arg)
-    (if (stringp (cdr arg))
-        arg
+    (cond
+     ((not (cdr arg))
+      (use-package-ensure-system-package-consify (car arg)))
+     ((stringp (cdr arg))
+      (cons (car arg) `(async-shell-command ,(cdr arg))))
+     (t
       (cons (car arg)
-            (use-package-ensure-system-package-install-command (symbol-name (cdr arg))))))))
+           `(system-packages-install ,(symbol-name (cdr arg)))))))))
 
 ;;;###autoload
 (defun use-package-normalize/:ensure-system-package (_name-symbol keyword args)
@@ -60,6 +61,7 @@ If it is a symbol, ensure the binary exist."
       (file-exists-p file-or-exe)
     (executable-find (symbol-name file-or-exe))))
 
+
 ;;;###autoload
 (defun use-package-handler/:ensure-system-package (name _keyword arg rest state)
   "Execute the handler for `:ensure-system-package' keyword in `use-package'."
@@ -67,7 +69,7 @@ If it is a symbol, ensure the binary exist."
     (use-package-concat
      (mapcar #'(lambda (cons)
                  `(unless (use-package-ensure-system-package-exists? ',(car cons))
-                    (async-shell-command ,(cdr cons)))) arg)
+                   ,(cdr cons))) arg)
      body)))
 
 (add-to-list 'use-package-keywords :ensure-system-package t)