[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] xwidget b52e2e5 1/2: merge master + move changelog and new
From: |
Joakim Verona |
Subject: |
[Emacs-diffs] xwidget b52e2e5 1/2: merge master + move changelog and news to readme |
Date: |
Wed, 04 Feb 2015 15:53:05 +0000 |
branch: xwidget
commit b52e2e5598aeb6dcc9bae5032ce4fa3da9bf40e9
Merge: aa89676 200a47d
Author: Joakim Verona <address@hidden>
Commit: Joakim Verona <address@hidden>
merge master + move changelog and news to readme
---
README.xwidget | 12 +++
etc/ChangeLog | 4 +
etc/NEWS | 24 ++++--
lisp/ChangeLog | 107 +++++++++++++++++++++++--
lisp/emacs-lisp/package.el | 169 ++++++++++++++++++++++++++--------------
lisp/net/tramp-sh.el | 33 +++++----
src/ChangeLog | 6 ++
src/frame.c | 4 +
src/frame.h | 2 +
test/ChangeLog | 7 +-
test/automated/package-test.el | 47 +++++++++++
11 files changed, 326 insertions(+), 89 deletions(-)
diff --git a/README.xwidget b/README.xwidget
index cfde411..b8ba6b8 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 <address@hidden>
+ Support for the new Xwidget feature.
+ * xwidget.el:
diff --git a/etc/ChangeLog b/etc/ChangeLog
index 8bc1afb..3703189 100644
--- a/etc/ChangeLog
+++ b/etc/ChangeLog
@@ -1,3 +1,7 @@
+2015-02-03 Artur Malabarba <address@hidden>
+
+ * NEWS: Document package.el's improved dependency-handling.
+
2015-01-29 Francesc Rocher <address@hidden>
* images/splash.svg, images/splash.png:
diff --git a/etc/NEWS b/etc/NEWS
index 4371a01..72e2356 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 b9570ba..c18a8ff 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,11 +1,102 @@
-2015-02-01 Joakim Verona <address@hidden>
- Support for the new Xwidget feature.
- * xwidget.el:
-
-2015-02-01 Grégoire Jadi <address@hidden>
- Support for testing xwidgets
- * emacs-parallel/parallell-remote.el,
emacs-parallel/parallell-xwidget.el:
- * emacs-parallel/parallell.el:
+2015-02-03 Artur Malabarba <address@hidden>
+
+ * 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 <address@hidden>
+
+ * emacs-lisp/package.el (package-reinstall): Don't change package's
selected status.
+ (package-delete): New NOSAVE argument.
+
+2015-02-03 Michael Albinus <address@hidden>
+
+ * 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 <address@hidden>
+
+ * 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 <address@hidden>
+
+ * 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 <address@hidden>
+
+ * emacs-lisp/package.el (package-delete): Remove package from
+ package-selected-packages.
+ (package-autoremove): Remove unneeded variable.
+
+2015-02-01 Artur Malabarba <address@hidden>
+
+ * 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 <address@hidden>
+
+ * 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 <address@hidden>
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 1627106..fa620eb 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 8e519b1..9c8a222 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 d45b4e3..9365641 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
+2015-02-03 Paul Eggert <address@hidden>
+
+ 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 <address@hidden>
* xdisp.c (Fwindow_text_pixel_size): Add optional argument BUFFER.
diff --git a/src/frame.c b/src/frame.c
index e4adfe8..890e897 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 cb0044c..0c08d12 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 2817881..60b3ed3 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 <address@hidden>
- Support for testing xwidgets
- * automated/xwidget-tests.el:
+2015-02-03 Artur Malabarba <address@hidden>
+
+ * automated/package-test.el (package-test-get-deps): New test.
+
2015-01-31 Stefan Monnier <address@hidden>
diff --git a/test/automated/package-test.el b/test/automated/package-test.el
index a848865..004e2e8 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