[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master bc2f8d0 3/6: (package-install-from-buffer): Install
From: |
Artur Malabarba |
Subject: |
[Emacs-diffs] master bc2f8d0 3/6: (package-install-from-buffer): Install packages from dired buffer. |
Date: |
Sat, 17 Jan 2015 00:26:43 +0000 |
branch: master
commit bc2f8d064bad4da0325a09179b420f75c941ffd9
Author: Artur Malabarba <address@hidden>
Commit: Artur Malabarba <address@hidden>
(package-install-from-buffer): Install packages from dired buffer.
---
lisp/ChangeLog | 1 +
lisp/emacs-lisp/package.el | 39 ++++++++++++++++++++++++++++++++++-----
2 files changed, 35 insertions(+), 5 deletions(-)
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index dce08a4..13a8722 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -5,6 +5,7 @@
the pkg-desc, with desc-kind set to KIND.
(package-dir-info): New function. Find package information for a
directory. The return result is a `package-desc'.
+ (package-install-from-buffer): Install packages from dired buffer.
2015-01-16 Jorgen Schaefer <address@hidden>
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 77b15c1..78138e9 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -800,6 +800,20 @@ untar into a directory named DIR; otherwise, signal an
error."
(dirname (package-desc-full-name pkg-desc))
(pkg-dir (expand-file-name dirname package-user-dir)))
(pcase (package-desc-kind pkg-desc)
+ (`dir
+ (make-directory pkg-dir t)
+ (let ((file-list
+ (directory-files
+ default-directory 'full "\\`[^.].*\\.el\\'" 'nosort)))
+ (dolist (source-file file-list)
+ (let ((target-el-file
+ (expand-file-name (file-name-nondirectory source-file)
pkg-dir)))
+ (copy-file source-file target-el-file t)))
+ ;; Now that the files have been installed, this package is
+ ;; indistinguishable from a `tar' or a `single'. Let's make
+ ;; things simple by ensuring we're one of them.
+ (setf (package-desc-kind pkg-desc)
+ (if (> (length file-list) 1) 'tar 'single))))
(`tar
(make-directory package-user-dir t)
;; FIXME: should we delete PKG-DIR if it exists?
@@ -1318,13 +1332,28 @@ Return the pkg-desc, with desc-kind set to KIND."
;;;###autoload
(defun package-install-from-buffer ()
"Install a package from the current buffer.
-The current buffer is assumed to be a single .el or .tar file that follows the
-packaging guidelines; see info node `(elisp)Packaging'.
+The current buffer is assumed to be a single .el or .tar file or
+a directory. These must follow the packaging guidelines (see
+info node `(elisp)Packaging').
+
+Specially, if current buffer is a directory, the -pkg.el
+description file is not mandatory, in which case the information
+is derived from the main .el file in the directory.
+
Downloads and installs required packages as needed."
(interactive)
- (let ((pkg-desc (if (derived-mode-p 'tar-mode)
- (package-tar-file-info)
- (package-buffer-info))))
+ (let ((pkg-desc
+ (cond
+ ((derived-mode-p 'dired-mode)
+ ;; This is the only way a package-desc object with a `dir'
+ ;; desc-kind can be created. Such packages can't be
+ ;; uploaded or installed from archives, they can only be
+ ;; installed from local buffers or directories.
+ (package-dir-info))
+ ((derived-mode-p 'tar-mode)
+ (package-tar-file-info))
+ (t
+ (package-buffer-info)))))
;; Download and install the dependencies.
(let* ((requires (package-desc-reqs pkg-desc))
(transaction (package-compute-transaction nil requires)))
- [Emacs-diffs] master updated (69f36af -> a2cd6d9), Artur Malabarba, 2015/01/16
- [Emacs-diffs] master be6dbd4 1/6: * emacs-lisp/package.el (package--read-pkg-desc): New function., Artur Malabarba, 2015/01/16
- [Emacs-diffs] master 2fe6110 2/6: * emacs-lisp/package.el (package-dir-info): New function., Artur Malabarba, 2015/01/16
- [Emacs-diffs] master bc2f8d0 3/6: (package-install-from-buffer): Install packages from dired buffer.,
Artur Malabarba <=
- [Emacs-diffs] master 40d963f 5/6: * NEWS: Document installing packages from directories., Artur Malabarba, 2015/01/16
- [Emacs-diffs] master 64fd1a5 4/6: (package-install-file): Install packages from directory., Artur Malabarba, 2015/01/16
- [Emacs-diffs] master a2cd6d9 6/6: emacs-lisp/package.el and package-x.el: References to package-desc-kind, Artur Malabarba, 2015/01/16