Discussion:
package-autoremove (was: Package installation messages)
Artur Malabarba
10 years ago
Permalink
I just updated to the latest commit on emacs master and tried out
package-autoremove.
That suggested removing 3 packages (symon, minibuffer-line,
git-timemachine), out of which I actually use 2: minibuffer-line,
git-timemachine.
;; Display date+time in the minibuffer instead of in the mode-line
(use-package minibuffer-line
There are two possibilities for why this happened.

1. The first time you start Emacs after the commit that introduced
selected-packages, package.el will try to guess which of your packages
were explicitly installed by you, and which were pulled in as deps.
It's impossible to know for sure, so this guessing is bound to go
wrong on some instances.

2. The list of selected packages is stored with your
custom-set-variables. So, if your `use-package' form comes before your
`custom-set-variables', then that might cause it to not get stored
correctly.

I'm not sure if there's a global fix we can do for case 2. Either way,
you (the user) can manually fix that by simply trying to install the
package you already have (`minibuffer-line', in this case). You can do
that from the package menu or with `M-x package-install'. You'll get a
message that "package already installed", and then package.el will
store this package in your list of `selected-packages'.
Another way to fix that is to `M-x customize-variable RET
package-selected-packages' and manually add `minibuffer-line' to it.
Kaushal
10 years ago
Permalink
About 2) the use-package forms happen after I load custom-file.

I just manually deleted those 3 packages and reinstalled them from the
package manager and then M-x package-autoremove displayed "Nothing to
autoremove". But I noticed that that process did not update the
package-selected-packages to the custom.el. I had to manually eval

(package--save-selected-packages (package--find-non-dependencies))

in order to update the custom.el

Before that, of course, after each emacs restart, package.el was trying to
autoremove those 3 packages.
...
Artur Malabarba
10 years ago
Permalink
Then it sounds like we have a bug. I think I introduced it when
reverting the async stuff.
I just pushed a fix, could you try again with the latest master?
...
Kaushal
10 years ago
Permalink
I edited package.el as per the diff of that commit and eval'd the changed
function.

I can still recreate the problem. Here's what I did:
1. Uninstall git-timemachine using package manager.
2. See that the custom.el is updated (git-timemachine getting removed from
package-selected-packages)
3. Re-install git-timemachine
4. Now the package-selected-packages var gets updated but does not get
written to custom.el automatically.

I believe this issue has been here for a while but I didn't get to chasing
it; doesn't have to do with async install feature revert. It's just that
now it matters more since we have the package-autoremove function.
...
Artur Malabarba
10 years ago
Permalink
I edited package.el as per the diff of that commit and eval'd the changed function.
You mean "functions", plural, right? There are two changed functions
in that commit.

Here's something to try. After you verify that the value of the var
was updated but wasn't saved to custom.el, what happens if you
evaluate the following?

(package--save-selected-packages package-selected-packages)

Does the value then get saved properly?
Kaushal
10 years ago
Permalink
Sorry, yes, I meant function*s*.
Yes, evaluating that updates the custom.el fine.
I will edebug (probably later) to see why that is not getting executed from
within `package-install`.
Post by Kaushal
I edited package.el as per the diff of that commit and eval'd the
changed function.
You mean "functions", plural, right? There are two changed functions
in that commit.
Here's something to try. After you verify that the value of the var
was updated but wasn't saved to custom.el, what happens if you
evaluate the following?
(package--save-selected-packages package-selected-packages)
Does the value then get saved properly?
Artur Malabarba
10 years ago
Permalink
Post by Kaushal
Sorry, yes, I meant function*s*.
Yes, evaluating that updates the custom.el fine.
I will edebug (probably later) to see why that is not getting executed from
within `package-install`.
Thanks, that would be helpful. But it's not inside package-install,
it's inside `package-menu-execute' (so this is the function you'll
have to edebug). Specifically, this form:

(package--save-selected-packages
(remove-dups (append (mapcar #'package-desc-name .install)
package-selected-packages)))
Kaushal
10 years ago
Permalink
I might be missing something.. but I can't find where remove-dups is
defined.
Post by Artur Malabarba
Post by Kaushal
Sorry, yes, I meant function*s*.
Yes, evaluating that updates the custom.el fine.
I will edebug (probably later) to see why that is not getting executed
from
Post by Kaushal
within `package-install`.
Thanks, that would be helpful. But it's not inside package-install,
it's inside `package-menu-execute' (so this is the function you'll
(package--save-selected-packages
(remove-dups (append (mapcar #'package-desc-name .install)
package-selected-packages)))
Artur Malabarba
10 years ago
Permalink
Oh damn, that was stupid. Sorry about that Kaushal, I'll fix it in a moment.
...
Artur Malabarba
10 years ago
Permalink
Should be fixed now, and this time I promise I tested it. :-)
Kaushal
10 years ago
Permalink
Thanks! I confirm that to be fixed. :)
Post by Artur Malabarba
Should be fixed now, and this time I promise I tested it. :-)
Continue reading on narkive:
Loading...