emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/system-packages 1c1faa4 016/117: Merge pull request #1


From: Stefan Monnier
Subject: [elpa] externals/system-packages 1c1faa4 016/117: Merge pull request #1 from jiegec/master
Date: Fri, 14 Dec 2018 17:02:00 -0500 (EST)

branch: externals/system-packages
commit 1c1faa4a3aa2e2a70402760dbad3650f3e90d01d
Merge: 0534179 a6dcd04
Author: Alex Branham <address@hidden>
Commit: GitHub <address@hidden>

    Merge pull request #1 from jiegec/master
    
    Refactor the package manager specific commands into a defconst
---
 system-packages.el | 125 ++++++++++++++++++++++++++++++-----------------------
 1 file changed, 71 insertions(+), 54 deletions(-)

diff --git a/system-packages.el b/system-packages.el
index dbcadad..20b1b15 100644
--- a/system-packages.el
+++ b/system-packages.el
@@ -38,29 +38,84 @@
 
 ;;; Code:
 
+(eval-when-compile
+  (require 'cl))
+
 (defgroup system-packages nil
   "Manages system packages"
   :tag "System Packages"
   :prefix "system-packages"
   :group 'packages)
 
+(defconst system-packages-supported-package-managers
+  '((pacaur .
+            ((default-sudo . nil)
+             (install . "pacaur -S")
+             (search . "pacaur -Ss")
+             (uninstall . "pacaur -Rs")
+             (update . "pacaur -Syu")
+             (remove-orphaned . "pacman -Rns $(pacman -Qtdq)")
+             (list-installed-packages . "pacman -Q")
+             (list-installed-packages-all . "pacman -Qe")))
+    (pacman .
+            ((default-sudo . t)
+             (install . "pacman -S")
+             (search . "pacman -Ss")
+             (uninstall . "pacman -Rs")
+             (update . "pacman -Syu")
+             (remove-orphaned . "pacman -Rns $(pacman -Qtdq)")
+             (list-installed-packages . "pacman -Q")
+             (list-installed-packages-all . "pacman -Q")))
+    (apt .
+         ((default-sudo . t)
+          (install . "apt-get install")
+          (search . "apt-cache search")
+          (uninstall . "apt-get remove")
+          (update . ("apt-get update" "apt-get upgrade"))
+          (remove-orphaned . "apt-get autoremove")
+          (list-installed-packages . nil)
+          (list-installed-packages-all . nil)))
+    (brew .
+          ((default-sudo . nil)
+           (install . "brew install")
+           (search . "brew search")
+           (uninstall . "brew uninstall")
+           (update . ("brew update" "brew upgrade --all"))
+           (remove-orphaned . nil)
+           (list-installed-packages . "brew list")
+           (list-installed-packages-all . nil)))))
+
 (defvar system-packages-packagemanager
-  (if (executable-find "pacaur") "pacaur"
-    (if (executable-find "pacman") "pacman"
-      (if (executable-find "apt") "apt"
-        (if (executable-find "brew") "brew"))))
+  (cl-loop for (name . prop) in system-packages-supported-package-managers
+           for path = (executable-find (symbol-name name))
+           when path
+           return name)
   "String containing the package manager to use. Currently
     system-packages supports pacman, pacaur, apt, and
     homebrew. Tries to be smart about selecting the default.")
 
 (defvar system-packages-usesudo
-  (if (equal system-packages-packagemanager "pacman") t
-    (if (equal system-packages-packagemanager "apt") t
-      (if (equal system-packages-packagemanager "brew") nil
-        (if (equal system-packages-packagemanager "pacaur") nil))))
+  (cdr (assoc 'default-sudo (cdr (assoc system-packages-packagemanager
+                                        
system-packages-supported-package-managers))))
   "If non-nil, system-packages will use sudo for appropriate
   commands. Tries to be smart for selecting the default.")
 
+(defun system-packages--run-command (action &optional pack)
+  "ACTION can be `default-sudo', `install', `search',
+`uninstall' etc. Run the command according to
+`system-packages-supported-package-managers' and ACTION."
+  (let ((command
+         (cdr (assoc action (cdr (assoc system-packages-packagemanager
+                                        
system-packages-supported-package-managers))))))
+    (unless command
+      (error (format "%S not supported in %S" action 
system-packages-packagemanager)))
+    (unless (listp command)
+      (setq command (list command)))
+    (when system-packages-usesudo
+      (setq command (mapcar (lambda (part) (concat "sudo " part)) command)))
+    (setq command (mapconcat 'identity command " && "))
+    (async-shell-command (mapconcat 'identity (list command pack) " "))))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; functions on named packages
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -69,38 +124,19 @@
   "Installs system packages using the package manager named in
 system-packages-packagemanager."
   (interactive "sWhat package to install?")
-  (let ((command
-         (if (equal system-packages-packagemanager "pacaur") "pacaur -S"
-           (if (equal system-packages-packagemanager "pacman") "pacman -S"
-             (if (equal system-packages-packagemanager "apt") "apt-get install"
-               (if (equal system-packages-packagemanager "brew") "brew 
install"))))))
-    (if (equal system-packages-usesudo t)
-        (async-shell-command (mapconcat 'identity (list "sudo" command pack) " 
"))
-      (async-shell-command (mapconcat 'identity (list command pack) " ")))))
+  (system-packages--run-command 'install pack))
 
 (defun system-packages-search (pack)
   "Search for system packages using the package manager named in
 system-packages-packagemanager."
   (interactive "sSearch string?")
-  (let ((command
-         (if (equal system-packages-packagemanager "pacaur") "pacaur -Ss"
-           (if (equal system-packages-packagemanager "pacman") "pacman -Ss"
-             (if (equal system-packages-packagemanager "apt") "apt-cache 
search"
-               (if (equal system-packages-packagemanager "brew") "brew 
search"))))))
-    (async-shell-command (mapconcat 'identity (list command pack) " "))))
+  (system-packages--run-command 'search pack))
 
 (defun system-packages-uninstall (pack)
   "Uninstalls installed system packages using the package manager named in
 system-packages-packagemanager."
   (interactive "sWhat package to uninstall?")
-  (let ((command
-         (if (equal system-packages-packagemanager "pacaur") "pacaur -Rs"
-           (if (equal system-packages-packagemanager "pacman") "pacman -Rs"
-             (if (equal system-packages-packagemanager "apt") "apt-get remove"
-               (if (equal system-packages-packagemanager "brew") "brew 
uninstall"))))))
-    (if (equal system-packages-usesudo t)
-        (async-shell-command (mapconcat 'identity (list "sudo" command pack) " 
"))
-      (async-shell-command (mapconcat 'identity (list command pack) " ")))))
+  (system-packages--run-command 'uninstall pack))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; functions that don't take a named package
@@ -110,40 +146,21 @@ system-packages-packagemanager."
   "Updates installed system packages using the package manager named in
 system-packages-packagemanager."
   (interactive)
-  (let ((command
-         (if (equal system-packages-packagemanager "pacaur") "pacaur -Syu"
-           (if (equal system-packages-packagemanager "pacman") "pacman -Syu"
-             (if (equal system-packages-packagemanager "apt") "apt-get update 
&& sudo apt-get upgrade"
-               (if (equal system-packages-packagemanager "brew") "brew update 
&& brew upgrade"))))))
-    (if (equal system-packages-usesudo t)
-        (async-shell-command (mapconcat 'identity (list "sudo" command) " "))
-      (async-shell-command (mapconcat 'identity (list command) " ")))))
+  (system-packages--run-command 'update))
 
 (defun system-packages-remove-orphaned ()
   "This function removes orphaned packages (i.e. unused packages). using the 
package manager named in
 system-packages-packagemanager."
   (interactive)
-  (if (equal system-packages-packagemanager "brew")
-      (error "Not supported on homebrew"))
-  (let ((command
-         (if (equal system-packages-packagemanager "pacaur") "pacman -Rns 
$(pacman -Qtdq)"
-           (if (equal system-packages-packagemanager "pacman") "pacman -Rns 
$(pacman -Qtdq)"
-             (if (equal system-packages-packagemanager "apt") "apt-get 
autoremove")))))
-    (if (equal system-packages-usesudo t)
-        (async-shell-command (mapconcat 'identity (list "sudo" command) " "))
-      (async-shell-command (mapconcat 'identity (list command) " ")))))
+  (system-packages--run-command 'remove-orphaned))
 
 (defun system-packages-list-installed-packages (arg)
   "List explicitly installed packages using the package manager
 named in system-packages-packagemanager. With
 \\[universal-argument], list all installed packages."
   (interactive "P")
-  (if (equal system-packages-packagemanager "apt")
-      (error "Not supported on apt systems"))
-  (let ((command
-         (if (and arg (or (equal system-packages-packagemanager "pacaur") 
(equal system-packages-packagemanager "pacman"))) "pacman -Q"
-           (if (or (equal system-packages-packagemanager "pacaur") (equal 
system-packages-packagemanager "pacman")) "pacman -Qe"
-             (if (equal system-packages-packagemanager "brew") "brew list")))))
-    (async-shell-command command)))
+  (if arg
+      (system-packages--run-command 'list-installed-packages-all)
+    (system-packages--run-command 'list-installed-packages)))
                
 (provide 'system-packages)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]