diff --git a/README.xwidget b/README.xwidget index cfde411082b..b8ba6b872b3 100644 --- a/README.xwidget +++ b/README.xwidget @@ -1,2 +1,14 @@ -*-org-*- Please see https://github.com/jave/xwidget-aux for documentation. + +* NEWS +** Xwidgets : A new feature for embedding native widgets +inside Emacs buffers. If you have gtk3 and webkit-devel installed, +you can try the embedded webkit browser with m-x xwidget-webkit-browse-url. + + +* lisp/Changelog + +2015-02-01 Joakim Verona + Support for the new Xwidget feature. + * xwidget.el: diff --git a/etc/ChangeLog b/etc/ChangeLog index 8bc1afbef52..37031890945 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,7 @@ +2015-02-03 Artur Malabarba + + * NEWS: Document package.el's improved dependency-handling. + 2015-01-29 Francesc Rocher * images/splash.svg, images/splash.png: diff --git a/etc/NEWS b/etc/NEWS index 4371a01ec7c..72e23562868 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -65,12 +65,6 @@ so if you want to use it, you can always take a copy from an older Emacs. * Changes in Emacs 25.1 -** Xwidgets : A new feature for embedding native widgets -inside Emacs buffers. If you have gtk3 and webkit-devel installed, -you can try the embedded webkit browser with m-x xwidget-webkit-browse-url. -** `package-install-from-buffer' and `package-install-file' work on directories. -This follows the same rules as installing from a .tar file, except the --pkg file is optional. ** New function `custom-prompt-customize-unsaved-options' checks for unsaved customizations and prompts user to customize (if found). @@ -203,6 +197,24 @@ Unicode standards. * Changes in Specialized Modes and Packages in Emacs 25.1 +** package.el +*** `package-install-from-buffer' and `package-install-file' work on directories. +This follows the same rules as installing from a .tar file, except the +-pkg file is optional. + +*** Packages which are dependencies of other packages cannot be deleted. +The FORCE argument to `package-delete' overrides this. + +*** New custom variable `package-selected-packages' tracks packages +which were installed by the user (as opposed to installed as +dependencies). This variable can also be manually customized. + +*** New command `package-install-user-selected-packages' installs all +packages from `package-selected-packages' which are currently missing. + +*** New command `package-autoremove' removes all packages which were +installed strictly as dependencies but are no longer needed. + ** Shell When you invoke `shell' interactively, the *shell* buffer will now diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b9570badea0..c18a8ff0f52 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,11 +1,102 @@ -2015-02-01 Joakim Verona - Support for the new Xwidget feature. - * xwidget.el: +2015-02-03 Artur Malabarba -2015-02-01 Grégoire Jadi - Support for testing xwidgets - * emacs-parallel/parallell-remote.el, emacs-parallel/parallell-xwidget.el: - * emacs-parallel/parallell.el: + * emacs-lisp/package.el (package-delete): Document NOSAVE. + (package--get-deps): delete-dups when ONLY is nil. + (package-autoremove): Warn the user if `package-selected-packages' + is empty. + + (package--user-selected-p): New function. + (package-delete, package-install, package-install-from-buffer): + Use it + (package-selected-packages): Mention it. + + (package-initialize): Don't populate `package-selected-packages'. + (package-install-user-selected-packages, package-autoremove): + Special handling for empty `package-selected-packages'. + (package-install): Fix when PKG is a package-desc. + + (package-desc-status): Add "dependency" status to the Package + Menu. + (package-menu--status-predicate, package-menu--print-info) + (package-menu-mark-delete, package-menu--find-upgrades) + (package-menu--status-predicate, describe-package-1): Use it + + (package--removable-packages): New function. + (package-autoremove): Use it. + (package-menu-execute): Offer to remove unneeded packages. + + (package--read-pkg-desc, package-tar-file-info): Fix reference to + tar-desc. + +2015-02-03 Thierry Volpiatto + + * emacs-lisp/package.el (package-reinstall): Don't change package's selected status. + (package-delete): New NOSAVE argument. + +2015-02-03 Michael Albinus + + * net/tramp-sh.el (tramp-histfile-override): Fix docstring. + (tramp-open-shell, tramp-maybe-open-connection): Set also + HISTFILESIZE and HISTSIZE when needed. (Bug#19731) + +2015-02-02 Artur Malabarba + + * emacs-lisp/package.el (package--find-non-dependencies): New + function. + (package-initialize): Use it to populate `package-selected-packages'. + (package-menu-execute): Clean unnecessary `and'. + (package--get-deps): Fix returning duplicates. + +2015-02-02 Michael Albinus + + * net/tramp-sh.el (tramp-histfile-override): Add another choice t. + Use it as default. + (tramp-open-shell, tramp-maybe-open-connection): Support it. + (Bug#19731) + +2015-02-02 Thierry Volpiatto + + * emacs-lisp/package.el (package-delete): Remove package from + package-selected-packages. + (package-autoremove): Remove unneeded variable. + +2015-02-01 Artur Malabarba + + * emacs-lisp/package.el (package-selected-packages): Fix :type + (package-install): Rename ARG to MARK-SELECTED. + (package--get-deps): Fix for indirect dependencies. + (package-used-elsewhere-p): Rename to + (package--used-elsewhere-p): New function. + (package-reinstall, package-user-selected-packages-install) + (package-autoremove): Use sharp-quote. + (package-user-selected-packages-install): Reindent and rename to + (package-install-user-selected-packages): New function. + +2015-02-01 Thierry Volpiatto + + * emacs-lisp/package.el: Don't allow deleting dependencies. + + (package-used-elsewhere-p): New function. + (package-delete): Use it, return now an error when trying to + delete a package used as dependency by another package. + + Add a reinstall package command. + (package-reinstall): New function. + + Add a package-autoremove command. + (package-selected-packages): New user var. + (package-install): Add an optional arg to notify interactive use. + Fix docstring. Save installed package to + packages-installed-directly. + (package-install-from-buffer): Same. + (package-user-selected-packages-install): Allow installing all + packages in packages-installed-directly at once. + (package--get-deps): New function. + (package-autoremove): New function. + (package-install-button-action): Call package-install with + interactive arg. + (package-menu-execute): Same but only for only for not installed + packages. 2015-01-31 Stefan Monnier diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 16271060626..fa620eb6bb6 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -340,7 +340,11 @@ when installing a new package. This variable will be used by `package-autoremove' to decide which packages are no more needed. You can use it to (re)install packages on other machines -by running `package-user-selected-packages-install'." +by running `package-user-selected-packages-install'. + +To check if a package is contained in this list here, use +`package--user-selected-p', as it may populate the variable with +a sane initial value." :group 'package :type '(repeat symbol)) @@ -1189,6 +1193,17 @@ number." nil)) alist))) +(defun package--user-selected-p (pkg) + "Return non-nil if PKG is a package was installed by the user. +PKG is a package name. +This looks into `package-selected-packages', populating it first +if it is still empty." + (unless (consp package-selected-packages) + (customize-save-variable + 'package-selected-packages + (setq package-selected-packages (package--find-non-dependencies)))) + (memq pkg package-selected-packages)) + (defun package-download-transaction (packages) "Download and install all the packages in PACKAGES. PACKAGES should be a list of package-desc. @@ -1222,9 +1237,12 @@ to `package-selected-packages'." package-archive-contents)) nil t)) t))) - (when (and mark-selected (not (memq pkg package-selected-packages))) - (customize-save-variable 'package-selected-packages - (cons pkg package-selected-packages))) + (let ((name (if (package-desc-p pkg) + (package-desc-name pkg) + pkg))) + (when (and mark-selected (not (package--user-selected-p name))) + (customize-save-variable 'package-selected-packages + (cons name package-selected-packages)))) (package-download-transaction (if (package-desc-p pkg) (package-compute-transaction (list pkg) @@ -1239,7 +1257,7 @@ to `package-selected-packages'." "Reinstall package: " (mapcar #'symbol-name (mapcar #'car package-alist)))))) - (package-delete (cadr (assq pkg package-alist)) t) + (package-delete (cadr (assq pkg package-alist)) 'force 'nosave) (package-install pkg)) (defun package-strip-rcs-id (str) @@ -1327,7 +1345,9 @@ The return result is a `package-desc'." (error "No package descriptor file found")) (with-current-buffer (tar--extract tar-desc) (unwind-protect - (package--read-pkg-desc 'tar) + (or (package--read-pkg-desc 'tar) + (error "Can't find define-package in %s" + (tar-header-name tar-desc))) (kill-buffer (current-buffer)))))) (defun package-dir-info () @@ -1360,13 +1380,12 @@ Return the pkg-desc, with desc-kind set to KIND." (unwind-protect (let* ((pkg-def-parsed (read (current-buffer))) (pkg-desc - (if (not (eq (car pkg-def-parsed) 'define-package)) - (error "Can't find define-package in %s" - (tar-header-name tar-desc)) + (when (eq (car pkg-def-parsed) 'define-package) (apply #'package-desc-from-define (append (cdr pkg-def-parsed)))))) - (setf (package-desc-kind pkg-desc) kind) - pkg-desc))) + (when pkg-desc + (setf (package-desc-kind pkg-desc) kind) + pkg-desc)))) ;;;###autoload @@ -1401,10 +1420,9 @@ Downloads and installs required packages as needed." (package-download-transaction transaction)) ;; Install the package itself. (package-unpack pkg-desc) - (unless (memq name package-selected-packages) - (push name package-selected-packages) + (unless (package--user-selected-p name) (customize-save-variable 'package-selected-packages - package-selected-packages)) + (cons name package-selected-packages))) pkg-desc)) ;;;###autoload @@ -1435,24 +1453,29 @@ The file can either be a tar file or an Emacs Lisp file." (direct direct-deps) (separate (list direct-deps indirect-deps)) (indirect indirect-deps) - (t (append direct-deps indirect-deps))))) + (t (delete-dups (append direct-deps indirect-deps)))))) ;;;###autoload (defun package-install-user-selected-packages () "Ensure packages in `package-selected-packages' are installed. If some packages are not installed propose to install them." (interactive) - (cl-loop for p in package-selected-packages - unless (package-installed-p p) - collect p into lst - finally - (if lst - (when (y-or-n-p - (format "%s packages will be installed:\n%s, proceed?" - (length lst) - (mapconcat #'symbol-name lst ", "))) - (mapc #'package-install lst)) - (message "All your packages are already installed")))) + ;; We don't need to populate `package-selected-packages' before + ;; using here, because the outcome is the same either way (nothing + ;; gets installed). + (if (not package-selected-packages) + (message "`package-selected-packages' is empty, nothing to install") + (cl-loop for p in package-selected-packages + unless (package-installed-p p) + collect p into lst + finally + (if lst + (when (y-or-n-p + (format "%s packages will be installed:\n%s, proceed?" + (length lst) + (mapconcat #'symbol-name lst ", "))) + (mapc #'package-install lst)) + (message "All your packages are already installed"))))) (defun package--used-elsewhere-p (pkg-desc &optional pkg-list) "Non-nil if PKG-DESC is a dependency of a package in PKG-LIST. @@ -1470,14 +1493,16 @@ with PKG-DESC entry removed." (and (memq pkg (mapcar #'car (package-desc-reqs (cadr p)))) (car p)))))) -(defun package-delete (pkg-desc &optional force) +(defun package-delete (pkg-desc &optional force nosave) "Delete package PKG-DESC. Argument PKG-DESC is a full description of package as vector. When package is used elsewhere as dependency of another package, refuse deleting it and return an error. -If FORCE is non--nil package will be deleted even if it is used -elsewhere." +If FORCE is non-nil package will be deleted even if it is used +elsewhere. +If NOSAVE is non-nil, the package is not removed from +`package-selected-packages'." (let ((dir (package-desc-dir pkg-desc)) (name (package-desc-name pkg-desc)) pkg-used-elsewhere-by) @@ -1506,11 +1531,24 @@ elsewhere." (unless (cdr pkgs) (setq package-alist (delq pkgs package-alist)))) ;; Update package-selected-packages. - (when (memq name package-selected-packages) + (when (and (null nosave) + (package--user-selected-p name)) (customize-save-variable 'package-selected-packages (remove name package-selected-packages))) (message "Package `%s' deleted." (package-desc-full-name pkg-desc)))))) +(defun package--removable-packages () + "Return a list of names of packages no longer needed. +These are packages which are neither contained in +`package-selected-packages' nor a dependency of one that is." + (let ((needed (cl-loop for p in package-selected-packages + if (assq p package-alist) + ;; `p' and its dependencies are needed. + append (cons p (package--get-deps p))))) + (cl-loop for p in (mapcar #'car package-alist) + unless (memq p needed) + collect p))) + ;;;###autoload (defun package-autoremove () "Remove packages that are no more needed. @@ -1519,21 +1557,22 @@ Packages that are no more needed by other packages in `package-selected-packages' and their dependencies will be deleted." (interactive) - (let ((needed (cl-loop for p in package-selected-packages - if (assq p package-alist) - append (package--get-deps p)))) - (cl-loop for p in (mapcar #'car package-alist) - unless (or (memq p needed) - (memq p package-selected-packages)) - collect p into lst - finally (if lst - (when (y-or-n-p (format "%s packages will be deleted:\n%s, proceed? " - (length lst) - (mapconcat #'symbol-name lst ", "))) - (mapc (lambda (p) - (package-delete (cadr (assq p package-alist)) t)) - lst)) - (message "Nothing to autoremove"))))) + ;; If `package-selected-packages' is nil, it would make no sense to + ;; try to populate it here, because then `package-autoremove' will + ;; do absolutely nothing. + (when (or package-selected-packages + (yes-or-no-p + "`package-selected-packages' is empty! Really remove ALL packages? ")) + (let ((removable (package--removable-packages))) + (if removable + (when (y-or-n-p + (format "%s packages will be deleted:\n%s, proceed? " + (length removable) + (mapconcat #'symbol-name removable ", "))) + (mapc (lambda (p) + (package-delete (cadr (assq p package-alist)) t)) + removable) + (message "Nothing to autoremove")))))) (defun package-archive-base (desc) "Return the archive containing the package NAME." @@ -1659,9 +1698,6 @@ If optional arg NO-ACTIVATE is non-nil, don't activate packages." (unless no-activate (dolist (elt package-alist) (package-activate (car elt)))) - (when (and package-alist (not package-selected-packages)) - (customize-save-variable 'package-selected-packages - (package--find-non-dependencies))) (setq package--initialized t)) @@ -1730,7 +1766,7 @@ If optional arg NO-ACTIVATE is non-nil, don't activate packages." 'font-lock-face 'font-lock-builtin-face) ".")) (pkg-dir - (insert (propertize (if (equal status "unsigned") + (insert (propertize (if (member status '("unsigned" "dependency")) "Installed" (capitalize status)) ;FIXME: Why comment-face? 'font-lock-face 'font-lock-comment-face)) @@ -1996,7 +2032,8 @@ package PKG-DESC, add one. The alist is keyed with PKG-DESC." (lle (assq name package-load-list)) (held (cadr lle)) (version (package-desc-version pkg-desc)) - (signed (package-desc-signed pkg-desc))) + (signed (or (not package-list-unsigned) + (package-desc-signed pkg-desc)))) (cond ((eq dir 'builtin) "built-in") ((and lle (null held)) "disabled") @@ -2011,7 +2048,9 @@ package PKG-DESC, add one. The alist is keyed with PKG-DESC." (cond ((not (file-exists-p (package-desc-dir pkg-desc))) "deleted") ((eq pkg-desc (cadr (assq name package-alist))) - (if (or (not package-list-unsigned) signed) "installed" "unsigned")) + (if (not signed) "unsigned" + (if (package--user-selected-p name) + "installed" "dependency"))) (t "obsolete"))) (t (let* ((ins (cadr (assq name package-alist))) @@ -2022,8 +2061,9 @@ package PKG-DESC, add one. The alist is keyed with PKG-DESC." "new" "available")) ((version-list-< version ins-v) "obsolete") ((version-list-= version ins-v) - (if (or (not package-list-unsigned) signed) - "installed" "unsigned")))))))) + (if (not signed) "unsigned" + (if (package--user-selected-p name) + "installed" "dependency"))))))))) (defun package-menu--refresh (&optional packages keywords) "Re-populate the `tabulated-list-entries'. @@ -2152,6 +2192,7 @@ Return (PKG-DESC [NAME VERSION STATUS DOC])." (`"held" 'font-lock-constant-face) (`"disabled" 'font-lock-warning-face) (`"installed" 'font-lock-comment-face) + (`"dependency" 'font-lock-comment-face) (`"unsigned" 'font-lock-warning-face) (_ 'font-lock-warning-face)))) ; obsolete. (list pkg-desc @@ -2194,7 +2235,8 @@ If optional arg BUTTON is non-nil, describe its associated package." (defun package-menu-mark-delete (&optional _num) "Mark a package for deletion and move to the next line." (interactive "p") - (if (member (package-menu-get-status) '("installed" "obsolete" "unsigned")) + (if (member (package-menu-get-status) + '("installed" "dependency" "obsolete" "unsigned")) (tabulated-list-put-tag "D" t) (forward-line))) @@ -2248,7 +2290,7 @@ If optional arg BUTTON is non-nil, describe its associated package." ;; ENTRY is (PKG-DESC [NAME VERSION STATUS DOC]) (let ((pkg-desc (car entry)) (status (aref (cadr entry) 2))) - (cond ((member status '("installed" "unsigned")) + (cond ((member status '("installed" "dependency" "unsigned")) (push pkg-desc installed)) ((member status '("available" "new")) (setq available (package--append-to-alist pkg-desc available)))))) @@ -2342,9 +2384,18 @@ Optional argument NOQUERY non-nil means do not ask the user to confirm." (package-delete elt) (error (message (cadr err))))) (error "Aborted"))) - (if (or delete-list install-list) - (package-menu--generate t t) - (message "No operations specified.")))) + (if (not (or delete-list install-list)) + (message "No operations specified.") + (when package-selected-packages + (let ((removable (package--removable-packages))) + (when (and removable + (y-or-n-p + (format "These %d packages are no longer needed, delete them (%s)? " + (length removable) + (mapconcat #'symbol-name removable ", ")))) + (mapc (lambda (p) (package-delete (cadr (assq p package-alist)))) + removable)))) + (package-menu--generate t t)))) (defun package-menu--version-predicate (A B) (let ((vA (or (aref (cadr A) 1) '(0))) @@ -2364,6 +2415,8 @@ Optional argument NOQUERY non-nil means do not ask the user to confirm." ((string= sB "available") nil) ((string= sA "installed") t) ((string= sB "installed") nil) + ((string= sA "dependency") t) + ((string= sB "dependency") nil) ((string= sA "unsigned") t) ((string= sB "unsigned") nil) ((string= sA "held") t) diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 8e519b13e5f..9c8a222285c 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -71,10 +71,11 @@ When setting to a string, it redirects the shell history to that file. Be careful when setting to \"/dev/null\"; this might result in undesired results when using \"bash\" as shell. -The value t, the default value, unsets any setting of HISTFILE. -If you set this variable to nil, however, the *override* is -disabled, so the history will go to the default storage -location, e.g. \"$HOME/.sh_history\"." +The value t, the default value, unsets any setting of HISTFILE, +and sets both HISTFILESIZE and HISTSIZE to 0. If you set this +variable to nil, however, the *override* is disabled, so the +history will go to the default storage location, +e.g. \"$HOME/.sh_history\"." :group 'tramp :version "25.1" :type '(choice (const :tag "Do not override HISTFILE" nil) @@ -3901,15 +3902,16 @@ file exists and nonzero exit status otherwise." ;; when called as sh) on startup; this way, we avoid the startup ;; file clobbering $PS1. $PROMPT_COMMAND is another way to set ;; the prompt in /bin/bash, it must be discarded as well. + ;; $HISTFILE is set according to `tramp-histfile-override'. (tramp-send-command vec (format "exec env ENV='' %s PROMPT_COMMAND='' PS1=%s PS2='' PS3='' %s %s" - (if tramp-histfile-override - (concat - "HISTFILE=" - (if (stringp tramp-histfile-override) - (tramp-shell-quote-argument tramp-histfile-override) "")) - "") + (if (stringp tramp-histfile-override) + (format "HISTFILE=%s" + (tramp-shell-quote-argument tramp-histfile-override)) + (if tramp-histfile-override + "HISTFILE='' HISTFILESIZE=0 HISTSIZE=0" + "")) (tramp-shell-quote-argument tramp-end-of-output) shell (or extra-args "")) t)) @@ -4631,10 +4633,13 @@ connection if a previous connection has died for some reason." (delete-process p)) (setenv "TERM" tramp-terminal-type) (setenv "LC_ALL" "en_US.utf8") - (when tramp-histfile-override - (setenv "HISTFILE" - (and (stringp tramp-histfile-override) - tramp-histfile-override))) + (if (stringp tramp-histfile-override) + (setenv "HISTFILE" tramp-histfile-override) + (if tramp-histfile-override + (progn + (setenv "HISTFILE") + (setenv "HISTFILESIZE" "0") + (setenv "HISTSIZE" "0")))) (setenv "PROMPT_COMMAND") (setenv "PS1" tramp-initial-end-of-output) (let* ((target-alist (tramp-compute-multi-hops vec)) diff --git a/src/ChangeLog b/src/ChangeLog index d45b4e332c6..936564183bb 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2015-02-03 Paul Eggert + + Omit unnecessary var if GTK or NS + * frame.c, frame.h (frame_default_tool_bar_height) [USE_GTK||HAVE_NS]: + Now a constant zero on these platforms. + 2015-02-01 Martin Rudalics * xdisp.c (Fwindow_text_pixel_size): Add optional argument BUFFER. diff --git a/src/frame.c b/src/frame.c index e4adfe8f08f..890e8972617 100644 --- a/src/frame.c +++ b/src/frame.c @@ -68,7 +68,11 @@ static struct frame *last_nonminibuf_frame; bool frame_garbaged; /* The default tool bar height for future frames. */ +#if defined USE_GTK || defined HAVE_NS +enum { frame_default_tool_bar_height = 0 }; +#else int frame_default_tool_bar_height; +#endif #ifdef HAVE_WINDOW_SYSTEM static void x_report_frame_params (struct frame *, Lisp_Object *); diff --git a/src/frame.h b/src/frame.h index cb0044cfe23..0c08d12c92e 100644 --- a/src/frame.h +++ b/src/frame.h @@ -1100,7 +1100,9 @@ SET_FRAME_VISIBLE (struct frame *f, int v) extern Lisp_Object selected_frame; +#if ! (defined USE_GTK || defined HAVE_NS) extern int frame_default_tool_bar_height; +#endif extern struct frame *decode_window_system_frame (Lisp_Object); extern struct frame *decode_live_frame (Lisp_Object); diff --git a/test/ChangeLog b/test/ChangeLog index 28178812a95..60b3ed352d0 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -2,9 +2,10 @@ Support for testing xwidgets * xwidget-test-manual.el: -2015-02-01 Grégoire Jadi - Support for testing xwidgets - * automated/xwidget-tests.el: +2015-02-03 Artur Malabarba + + * automated/package-test.el (package-test-get-deps): New test. + 2015-01-31 Stefan Monnier diff --git a/test/automated/package-test.el b/test/automated/package-test.el index a8488652c2f..004e2e89895 100644 --- a/test/automated/package-test.el +++ b/test/automated/package-test.el @@ -73,6 +73,24 @@ :kind 'single) "Expected `package-desc' parsed from new-pkg-1.0.el.") +(defvar simple-depend-desc-1 + (package-desc-create :name 'simple-depend-1 + :version '(1 0) + :summary "A single-file package with a dependency." + :kind 'single + :reqs '((simple-depend (1 0)) + (multi-file (0 1)))) + "`package-desc' used for testing dependencies.") + +(defvar simple-depend-desc-2 + (package-desc-create :name 'simple-depend-2 + :version '(1 0) + :summary "A single-file package with a dependency." + :kind 'single + :reqs '((simple-depend-1 (1 0)) + (multi-file (0 1)))) + "`package-desc' used for testing dependencies.") + (defvar package-test-data-dir (expand-file-name "data/package" package-test-file-dir) "Base directory of package test files.") @@ -479,6 +497,35 @@ Must called from within a `tar-mode' buffer." (should (equal archive-contents (list 1 package-x-test--single-archive-entry-1-4)))))) +(ert-deftest package-test-get-deps () + "Test `package-test-get-deps' with complex structures." + (let ((package-alist + (mapcar (lambda (p) (list (package-desc-name p) p)) + (list simple-single-desc + simple-depend-desc + multi-file-desc + new-pkg-desc + simple-depend-desc-1 + simple-depend-desc-2)))) + (should + (equal (package--get-deps 'simple-depend) + '(simple-single))) + (should + (equal (package--get-deps 'simple-depend 'indirect) + nil)) + (should + (equal (package--get-deps 'simple-depend 'direct) + '(simple-single))) + (should + (equal (package--get-deps 'simple-depend-2) + '(simple-depend-1 multi-file simple-depend simple-single))) + (should + (equal (package--get-deps 'simple-depend-2 'indirect) + '(simple-depend multi-file simple-single))) + (should + (equal (package--get-deps 'simple-depend-2 'direct) + '(simple-depend-1 multi-file))))) + (provide 'package-test) ;;; package-test.el ends here