]> git.eshelyaron.com Git - emacs.git/commitdiff
emacs-lisp/package.el (package-install): Add ASYNC and CALLBACK
authorArtur Malabarba <bruce.connor.am@gmail.com>
Sun, 5 Apr 2015 22:21:26 +0000 (23:21 +0100)
committerArtur Malabarba <bruce.connor.am@gmail.com>
Mon, 6 Apr 2015 10:19:04 +0000 (11:19 +0100)
lisp/ChangeLog
lisp/emacs-lisp/package.el

index 8f51db64f350540aeb1a43a00917bbe8682d30c3..07e9542937512199dd50ff1c5429f5eb20455059 100644 (file)
@@ -87,6 +87,7 @@
        (package-menu--prompt-transaction-p): New function.
        (package-menu-execute): Use it to prompt the user about operations
        to be executed.
+       (package-install): Add ASYNC and CALLBACK arguments.
 
 2015-04-05  Pete Williamson  <petewil@chromium.org>  (tiny-change)
 
index e7c33db75283b32088cdab19a0ac90e8e068c060..6d5d46c14bbba7038f25d68737b2c4c55586a6fd 100644 (file)
@@ -1773,13 +1773,16 @@ using `package-compute-transaction'."
               (kill-buffer (current-buffer)))))))))
 
 ;;;###autoload
-(defun package-install (pkg &optional dont-select)
+(defun package-install (pkg &optional dont-select async callback)
   "Install the package PKG.
 PKG can be a package-desc or the package name of one the available packages
 in an archive in `package-archives'.  Interactively, prompt for its name.
 
 If called interactively or if DONT-SELECT nil, add PKG to
 `package-selected-packages'.
+If ASYNC is non-nil, perform the downloads asynchronously.
+If CALLBACK is non-nil, call it with no arguments once the
+entire operation is done.
 
 If PKG is a package-desc and it is already installed, don't try
 to install it but still mark it as selected."
@@ -1807,15 +1810,14 @@ to install it but still mark it as selected."
     (unless (or dont-select (package--user-selected-p name))
       (customize-save-variable 'package-selected-packages
                                (cons name package-selected-packages))))
-  (if (package-desc-p pkg)
-      (if (package-installed-p pkg)
-          (message "`%s' is already installed" (package-desc-full-name pkg))
-        (package-download-transaction
-         (package-compute-transaction (list pkg)
-                                      (package-desc-reqs pkg))))
-    (package-download-transaction
-     (package-compute-transaction ()
-                                  (list (list pkg))))))
+  (if-let ((transaction
+            (if (package-desc-p pkg)
+                (unless (package-installed-p pkg)
+                  (package-compute-transaction (list pkg)
+                                               (package-desc-reqs pkg)))
+              (package-compute-transaction () (list (list pkg))))))
+      (package-download-transaction transaction async callback)
+    (message "`%s' is already installed" (package-desc-full-name pkg))))
 
 (defun package-strip-rcs-id (str)
   "Strip RCS version ID from the version string STR.