merge master + move changelog and news to readme

This commit is contained in:
Joakim Verona 2015-02-04 00:00:13 +01:00
commit b52e2e5598
11 changed files with 325 additions and 88 deletions

View file

@ -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 <joakim@verona.se>
Support for the new Xwidget feature.
* xwidget.el:

View file

@ -1,3 +1,7 @@
2015-02-03 Artur Malabarba <bruce.connor.am@gmail.com>
* NEWS: Document package.el's improved dependency-handling.
2015-01-29 Francesc Rocher <francesc.rocher@gmail.com>
* images/splash.svg, images/splash.png:

View file

@ -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

View file

@ -1,11 +1,102 @@
2015-02-01 Joakim Verona <joakim@verona.se>
Support for the new Xwidget feature.
* xwidget.el:
2015-02-03 Artur Malabarba <bruce.connor.am@gmail.com>
2015-02-01 Grégoire Jadi <daimrod@gmail.com>
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 <thierry.volpiatto@gmail.com>
* emacs-lisp/package.el (package-reinstall): Don't change package's selected status.
(package-delete): New NOSAVE argument.
2015-02-03 Michael Albinus <michael.albinus@gmx.de>
* 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 <bruce.connor.am@gmail.com>
* 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 <michael.albinus@gmx.de>
* 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 <thierry.volpiatto@gmail.com>
* emacs-lisp/package.el (package-delete): Remove package from
package-selected-packages.
(package-autoremove): Remove unneeded variable.
2015-02-01 Artur Malabarba <bruce.connor.am@gmail.com>
* 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 <thierry.volpiatto@gmail.com>
* 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 <monnier@iro.umontreal.ca>

View file

@ -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)

View file

@ -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))

View file

@ -1,3 +1,9 @@
2015-02-03 Paul Eggert <eggert@cs.ucla.edu>
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 <rudalics@gmx.at>
* xdisp.c (Fwindow_text_pixel_size): Add optional argument BUFFER.

View file

@ -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 *);

View file

@ -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);

View file

@ -2,9 +2,10 @@
Support for testing xwidgets
* xwidget-test-manual.el:
2015-02-01 Grégoire Jadi <daimrod@gmail.com>
Support for testing xwidgets
* automated/xwidget-tests.el:
2015-02-03 Artur Malabarba <bruce.connor.am@gmail.com>
* automated/package-test.el (package-test-get-deps): New test.
2015-01-31 Stefan Monnier <monnier@iro.umontreal.ca>

View file

@ -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