Subject: Re: bug#16762: Installed packages are not considered part of the archive contents

From: Johan Andersson <[email-masked]>
Date: Mon, 24 Mar 2014 09:10:42 +0100

> Johan?

I actually found a way around the issue because I had no time waiting for
it to get fixed.

But I still think that this should be fixed for the reason I mention that
other packages, such as Epl depends on the (non) package API. This specific
issue will break for example this function:
https://github.com/cask/epl/blob/master/epl.el#L447-L452

On Mon, Mar 24, 2014 at 7:20 AM, Dmitry Gutov <[email-masked]> wrote:

> On 24.03.2014 02:55, Stefan wrote:
>
>  Does it affect the output of M-x package-list RET?
>>
>
> It's identical (checked with diff).
>
>  What about the package-menu-mark-upgrades?
>>
>
> It works. Don't see any problems.
>
>
>  If we can keep the already installed packages, couldn't we also keep the
>> already built-in packages?
>>
>
> Yes, seems so. I hadn't tried this before because the previous behavior
> was to omit them (I think), but the patch below seems to work fine WRT the
> questions above.
>
>
> === modified file 'lisp/emacs-lisp/package.el'
> --- lisp/emacs-lisp/package.el  2014-03-23 08:35:56 +0000
> +++ lisp/emacs-lisp/package.el  2014-03-24 06:11:52 +0000
> @@ -1047,14 +1047,9 @@
>
>           (existing-packages (assq name package-archive-contents))
>           (pinned-to-archive (assoc name package-pinned-packages)))
>      (cond
> -     ;; Skip entirely if pinned to another archive or already installed.
> -     ((or (and pinned-to-archive
> -               (not (equal (cdr pinned-to-archive) archive)))
> -          (let ((bi (assq name package--builtin-versions)))
>
> -            (and bi (version-list-= version (cdr bi))))
> -          (let ((ins (cdr (assq name package-alist))))
> -            (and ins (version-list-= version
> -                                     (package-desc-version (car ins))))))
> +     ;; Skip entirely if pinned to another archive.
> +     ((and pinned-to-archive
> +           (not (equal (cdr pinned-to-archive) archive)))
>
>        nil)
>       ((not existing-packages)
>        (push (list name pkg-desc) package-archive-contents))
> @@ -1090,8 +1085,11 @@
>
>         (package-refresh-contents))
>       (list (intern (completing-read
>                      "Install package: "
> -                    (mapcar (lambda (elt) (symbol-name (car elt)))
> -                            package-archive-contents)
> +                    (delq nil
> +                          (mapcar (lambda (elt)
> +                                    (unless (package-installed-p (car
> elt))
> +                                      (symbol-name (car elt))))
> +                                  package-archive-contents))
>                      nil t)))))
>    (package-download-transaction
>     (if (package-desc-p pkg)
>
>
>