* Package installation messages @ 2015-05-14 21:23 Bozhidar Batsov 2015-05-14 22:38 ` Artur Malabarba 2015-05-14 22:40 ` Dmitry Gutov 0 siblings, 2 replies; 27+ messages in thread From: Bozhidar Batsov @ 2015-05-14 21:23 UTC (permalink / raw) To: emacs-devel [-- Attachment #1: Type: text/plain, Size: 435 bytes --] Hi everyone, When I updated my Emacs from master a few days ago I noticed that package installation has been changed significantly: * the process starts with the super cryptic message "Transaction started" * you get no visual indication that something is being done * package compilation warnings are now to visible * the process ends with the super cryptic message "Transaction done" Seems to me we can do a bit better than this. [-- Attachment #2: Type: text/html, Size: 580 bytes --] ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-14 21:23 Package installation messages Bozhidar Batsov @ 2015-05-14 22:38 ` Artur Malabarba 2015-05-14 22:40 ` Dmitry Gutov 1 sibling, 0 replies; 27+ messages in thread From: Artur Malabarba @ 2015-05-14 22:38 UTC (permalink / raw) To: Bozhidar Batsov; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 717 bytes --] > When I updated my Emacs from master a few days ago I noticed that package installation has been changed significantly: > > * the process starts with the super cryptic message "Transaction started" > * the process ends with the super cryptic message "Transaction done" What do you think could make them less cryptic? I'd rather not spam the echo area with progress reports. > * you get no visual indication that something is being done Yes, something should at least be added to the mode line process. > * package compilation warnings are now to visible That's intentional. The warnings buffer is still created, but I think it's bad user experience to pop up a bunch of warnings that are not the user's fault. [-- Attachment #2: Type: text/html, Size: 892 bytes --] ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-14 21:23 Package installation messages Bozhidar Batsov 2015-05-14 22:38 ` Artur Malabarba @ 2015-05-14 22:40 ` Dmitry Gutov 2015-05-14 23:15 ` Artur Malabarba 1 sibling, 1 reply; 27+ messages in thread From: Dmitry Gutov @ 2015-05-14 22:40 UTC (permalink / raw) To: Bozhidar Batsov, emacs-devel; +Cc: Artur Malabarba On 05/15/2015 12:23 AM, Bozhidar Batsov wrote: > Seems to me we can do a bit better than this. Yes, some of these points have been raised before. Hopefully, they'll be resolved before the release. Here's another scenario: M-x package-install slime RET. See nothing of interest happening, try to do something else, maybe open a file. While navigating to it, see Emacs seemingly freeze. Press C-g instinctively - congrats, you've aborted the installation. Or stopped it in an interesting place, I've got some sort of "transfer interrupted" message once this way. ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-14 22:40 ` Dmitry Gutov @ 2015-05-14 23:15 ` Artur Malabarba 2015-05-15 0:00 ` Dmitry Gutov 0 siblings, 1 reply; 27+ messages in thread From: Artur Malabarba @ 2015-05-14 23:15 UTC (permalink / raw) To: Dmitry Gutov; +Cc: Bozhidar Batsov, emacs-devel [-- Attachment #1: Type: text/plain, Size: 1062 bytes --] > Here's another scenario: > > M-x package-install slime RET. > > See nothing of interest happening, try to do something else, maybe open a file. While navigating to it, see Emacs seemingly freeze. Press C-g instinctively - congrats, you've aborted the installation. Or stopped it in an interesting place, I've got some sort of "transfer interrupted" message once this way. Yes, I've been meaning to mention that for a while now. Now that the async features have been out for a few months, I can say I like the async refreshing but I'm not a fan of how async installation turned out (for the exact reasons you mention above). I see 3 options, and I'd like to know what people think. 1. Keep the feature but disable by default. Async refreshing would still be enabled. 2. Implement it using a background emacs process. This has been mentioned here before, it would not cause emacs to hang during the unpacking stage, and would not be interrupted by C-g. 3. Just revert it. This has the advantage of simplifying the logic. Async refreshing would still be kept. [-- Attachment #2: Type: text/html, Size: 1220 bytes --] ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-14 23:15 ` Artur Malabarba @ 2015-05-15 0:00 ` Dmitry Gutov 2015-05-15 2:00 ` Stefan Monnier 2015-05-15 7:51 ` Artur Malabarba 0 siblings, 2 replies; 27+ messages in thread From: Dmitry Gutov @ 2015-05-15 0:00 UTC (permalink / raw) To: bruce.connor.am; +Cc: Bozhidar Batsov, emacs-devel On 05/15/2015 02:15 AM, Artur Malabarba wrote: > Now that the async features have been out for a few months, I can say I > like the async refreshing but I'm not a fan of how async installation > turned out (for the exact reasons you mention above). I see 3 options, > and I'd like to know what people think. Async refreshing has grown on me too, but it still needs to implement retaining the marks set by the user. > 1. Keep the feature but disable by default. Async refreshing would still > be enabled. I'd rather we not keep options for behavior nobody has specifically asked for. > 2. Implement it using a background emacs process. This has been > mentioned here before, it would not cause emacs to hang during the > unpacking stage, and would not be interrupted by C-g. Guess that's an option, if maybe a heavy-weight one. > 3. Just revert it. This has the advantage of simplifying the logic. > Async refreshing would still be kept. IIUC, async installation also performs downloads concurrently, right? That would be a useful trait to keep. ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-15 0:00 ` Dmitry Gutov @ 2015-05-15 2:00 ` Stefan Monnier 2015-05-15 2:24 ` Kaushal ` (2 more replies) 2015-05-15 7:51 ` Artur Malabarba 1 sibling, 3 replies; 27+ messages in thread From: Stefan Monnier @ 2015-05-15 2:00 UTC (permalink / raw) To: Dmitry Gutov; +Cc: Bozhidar Batsov, bruce.connor.am, emacs-devel >> 1. Keep the feature but disable by default. Async refreshing would still >> be enabled. > I'd rather we not keep options for behavior nobody has specifically > asked for. I asked for it. But after using it I agree that it sucks UI-wise. I think to make it work better, we'd need to make the download and the install more separate. E.g. when the download is done, rather than go ahead and perform the install, inform the user that the download is done and the install process can proceed, but wait for the user to explicitly say "install now". Stefan ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-15 2:00 ` Stefan Monnier @ 2015-05-15 2:24 ` Kaushal 2015-05-15 4:49 ` Bozhidar Batsov 2015-05-15 8:01 ` Artur Malabarba 2015-05-15 7:56 ` Artur Malabarba 2015-05-15 8:20 ` Dmitry Gutov 2 siblings, 2 replies; 27+ messages in thread From: Kaushal @ 2015-05-15 2:24 UTC (permalink / raw) To: Stefan Monnier Cc: emacs-devel, Artur Malabarba, Bozhidar Batsov, Dmitry Gutov [-- Attachment #1: Type: text/plain, Size: 1867 bytes --] @Stefan I actually like the hassle-free install process. If I mark stuff with `i` or `U` followed by `x`, I mean to download and install those packages in one go. I have been spoilt by how it is currently; would be good to at least have an option to keep it that way. @Dmitry I have never needed to do `C-g` while an installation is going on. But I can understand how that can cause problem. @Bozhidar I also like the clutter-free installation process, without the compilaiton buffer popping up. If the "Transaction started" message is cryptic, it can probably be replaced with something that indicates that package(s) are being installed; or something like below? Package Manager: In progress [upgrade(<num>), install(<num>), delete(<num>)] ... Once everything is done, Package Manager: Done [Upgraded(<num>), Installed(<num>), Deleted(<num>)]. @Artur Regarding the 3 options: 1. I wouldn't mind that as I can always enable that in my emacs config 2. Can't comment on this as I don't understand the how-to or implications of using a "background process" 3. I believe that people who have the Paradox package installed wouldn't be affected by this right? -- Kaushal Modi On Thu, May 14, 2015 at 10:00 PM, Stefan Monnier <monnier@iro.umontreal.ca> wrote: > >> 1. Keep the feature but disable by default. Async refreshing would still > >> be enabled. > > I'd rather we not keep options for behavior nobody has specifically > > asked for. > > I asked for it. But after using it I agree that it sucks UI-wise. > I think to make it work better, we'd need to make the download and the > install more separate. E.g. when the download is done, rather than go > ahead and perform the install, inform the user that the download is done > and the install process can proceed, but wait for the user to > explicitly say "install now". > > > Stefan > > [-- Attachment #2: Type: text/html, Size: 4672 bytes --] ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-15 2:24 ` Kaushal @ 2015-05-15 4:49 ` Bozhidar Batsov 2015-05-15 5:45 ` Thierry Volpiatto [not found] ` <CAAdUY-K8h41cY0e1XB30rzoYOmuM2sFctAxhcF2B2D3R54V8Tw@mail.gmail.com> 2015-05-15 8:01 ` Artur Malabarba 1 sibling, 2 replies; 27+ messages in thread From: Bozhidar Batsov @ 2015-05-15 4:49 UTC (permalink / raw) To: Kaushal; +Cc: emacs-devel, Stefan Monnier, Artur Malabarba, Dmitry Gutov [-- Attachment #1: Type: text/plain, Size: 2555 bytes --] While I can live without the compilation warnings (and many users are scared by them) I've found and fixed a ton of compilation warnings in various packages, because they we're displayed so prominently. Maybe this should be an optional behaviour or they should simply be dumped into **Messages*. As for the messages themselves - yeah, anything featuring a summary of the operation that started and ended would do IMO. Some progress indicator would be awesome (maybe counting down the operations that are remaining or something). On 15 May 2015 at 05:24, Kaushal <kaushal.modi@gmail.com> wrote: > @Stefan > I actually like the hassle-free install process. If I mark stuff with `i` > or `U` followed by `x`, I mean to download and install those packages in > one go. I have been spoilt by how it is currently; would be good to at > least have an option to keep it that way. > > @Dmitry > I have never needed to do `C-g` while an installation is going on. But I > can understand how that can cause problem. > > @Bozhidar > I also like the clutter-free installation process, without the compilaiton > buffer popping up. > If the "Transaction started" message is cryptic, it can probably be > replaced with something that indicates that package(s) are being installed; > or something like below? > > Package Manager: In progress [upgrade(<num>), install(<num>), > delete(<num>)] ... > > Once everything is done, > > Package Manager: Done [Upgraded(<num>), Installed(<num>), > Deleted(<num>)]. > @Artur > Regarding the 3 options: > 1. I wouldn't mind that as I can always enable that in my emacs config > 2. Can't comment on this as I don't understand the how-to or implications > of using a "background process" > 3. I believe that people who have the Paradox package installed wouldn't > be affected by this right? > > > -- > Kaushal Modi > > On Thu, May 14, 2015 at 10:00 PM, Stefan Monnier <monnier@iro.umontreal.ca > > wrote: > >> >> 1. Keep the feature but disable by default. Async refreshing would >> still >> >> be enabled. >> > I'd rather we not keep options for behavior nobody has specifically >> > asked for. >> >> I asked for it. But after using it I agree that it sucks UI-wise. >> I think to make it work better, we'd need to make the download and the >> install more separate. E.g. when the download is done, rather than go >> ahead and perform the install, inform the user that the download is done >> and the install process can proceed, but wait for the user to >> explicitly say "install now". >> >> >> Stefan >> >> > [-- Attachment #2: Type: text/html, Size: 5598 bytes --] ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-15 4:49 ` Bozhidar Batsov @ 2015-05-15 5:45 ` Thierry Volpiatto [not found] ` <CAAdUY-K8h41cY0e1XB30rzoYOmuM2sFctAxhcF2B2D3R54V8Tw@mail.gmail.com> 1 sibling, 0 replies; 27+ messages in thread From: Thierry Volpiatto @ 2015-05-15 5:45 UTC (permalink / raw) To: emacs-devel Bozhidar Batsov <bozhidar@batsov.com> writes: > While I can live without the compilation warnings (and many users are > scared by them) I've found and fixed a ton of compilation warnings in > various packages, because they we're displayed so prominently. Maybe this > should be an optional behaviour or they should simply be dumped into > **Messages*. FYI you can compile your packages async and have the compile buffer showing warnings and errors as normal using async package. Don't know though what emacs-25 is using actually. -- Thierry Get my Gnupg key: gpg --keyserver pgp.mit.edu --recv-keys 59F29997 ^ permalink raw reply [flat|nested] 27+ messages in thread
[parent not found: <CAAdUY-K8h41cY0e1XB30rzoYOmuM2sFctAxhcF2B2D3R54V8Tw@mail.gmail.com>]
* Re: Package installation messages [not found] ` <CAAdUY-K8h41cY0e1XB30rzoYOmuM2sFctAxhcF2B2D3R54V8Tw@mail.gmail.com> @ 2015-05-15 8:49 ` Artur Malabarba 2015-05-20 13:45 ` Artur Malabarba 0 siblings, 1 reply; 27+ messages in thread From: Artur Malabarba @ 2015-05-15 8:49 UTC (permalink / raw) To: Bozhidar Batsov; +Cc: Kaushal, Dmitry Gutov, Stefan Monnier, emacs-devel [-- Attachment #1: Type: text/plain, Size: 961 bytes --] On May 15, 2015 5:49 AM, "Bozhidar Batsov" <bozhidar@batsov.com> wrote: > > While I can live without the compilation warnings (and many users are scared by them) I've found and fixed a ton of compilation warnings in various packages, because they we're displayed so prominently. Maybe this should be an optional behaviour or they should simply be dumped into **Messages*. Once the whole thing is done, we could say how many warnings occurred along with the finished message. Not sure what's the appropriate way to count them though, since they happen between bytecomp and warnings.el. > As for the messages themselves - yeah, anything featuring a summary of the operation that started and ended would do IMO. Some progress indicator would be awesome (maybe counting down the operations that are remaining or something). A progress indicator is certainly doable, though its implementation will have to wait until we decide how to do the installation process. [-- Attachment #2: Type: text/html, Size: 1128 bytes --] ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-15 8:49 ` Artur Malabarba @ 2015-05-20 13:45 ` Artur Malabarba 2015-05-20 15:36 ` raman 0 siblings, 1 reply; 27+ messages in thread From: Artur Malabarba @ 2015-05-20 13:45 UTC (permalink / raw) To: Bozhidar Batsov; +Cc: Kaushal, Dmitry Gutov, Stefan Monnier, emacs-devel Alright, I think I'll just undo all of the async installation stuff. I agree with Stefan that download and installation should be more separate, but (1) I'm unlikely to have time for that before 25.1, and (2) make transactions synchronous only makes this easier anyway. After that, I can add a user option to display compilation warnings again, and I can make the transaction messages more descriptive (as suggested above (maybe even with progress report)). ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-20 13:45 ` Artur Malabarba @ 2015-05-20 15:36 ` raman 2015-05-20 15:53 ` Bozhidar Batsov 2015-05-20 15:58 ` Artur Malabarba 0 siblings, 2 replies; 27+ messages in thread From: raman @ 2015-05-20 15:36 UTC (permalink / raw) To: Artur Malabarba Cc: Dmitry Gutov, emacs-devel, Stefan Monnier, Bozhidar Batsov, Kaushal Actually it would be sad to see the async package bits go -- it's *almost* working. Can we live with silenced messages as at present, and a slightly more descriptive message for "transaction ..." rather than losing the async goodness? -- ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-20 15:36 ` raman @ 2015-05-20 15:53 ` Bozhidar Batsov 2015-05-20 15:58 ` Artur Malabarba 1 sibling, 0 replies; 27+ messages in thread From: Bozhidar Batsov @ 2015-05-20 15:53 UTC (permalink / raw) To: raman; +Cc: Dmitry Gutov, emacs-devel, Stefan Monnier, Artur Malabarba, Kaushal [-- Attachment #1: Type: text/plain, Size: 391 bytes --] I'm fine with Artur's proposal. "Almost working" is the same as not working. :-) On 20 May 2015 at 18:36, raman <raman@google.com> wrote: > Actually it would be sad to see the async package bits go -- it's > *almost* working. Can we live with silenced messages as at present, and > a slightly more descriptive message for "transaction ..." rather than > losing the async goodness? > -- > [-- Attachment #2: Type: text/html, Size: 810 bytes --] ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-20 15:36 ` raman 2015-05-20 15:53 ` Bozhidar Batsov @ 2015-05-20 15:58 ` Artur Malabarba 2015-05-20 16:39 ` T.V Raman 1 sibling, 1 reply; 27+ messages in thread From: Artur Malabarba @ 2015-05-20 15:58 UTC (permalink / raw) To: raman; +Cc: Bozhidar Batsov, emacs-devel [-- Attachment #1: Type: text/plain, Size: 806 bytes --] On May 20, 2015 4:36 PM, "raman" <raman@google.com> wrote: > > Actually it would be sad to see the async package bits go -- it's > *almost* working. Can we live with silenced messages as at present, and > a slightly more descriptive message for "transaction ..." rather than > losing the async goodness? The messaging stuff is mostly independent of this. The problem is the fact that it's not really async. After the download is done emacs hangs between 0.5 and 5 seconds while the installation is happening. And that happens for each download. So it's essentially not really achieving anything, but it carries the coat of code complexity. But just to be clear. This is just for package installation. Async refreshing is much smoother and won't be removed (though it's still due for a bit of polishing). [-- Attachment #2: Type: text/html, Size: 990 bytes --] ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-20 15:58 ` Artur Malabarba @ 2015-05-20 16:39 ` T.V Raman 2015-05-20 19:59 ` Artur Malabarba 0 siblings, 1 reply; 27+ messages in thread From: T.V Raman @ 2015-05-20 16:39 UTC (permalink / raw) To: bruce.connor.am; +Cc: emacs-devel, bozhidar, raman thanks for the clarification. Perhaps we should off-load the async installation to a perl/python/shell script and not let emacs participate in that dance? -- -- ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-20 16:39 ` T.V Raman @ 2015-05-20 19:59 ` Artur Malabarba 2015-05-20 20:02 ` Artur Malabarba 0 siblings, 1 reply; 27+ messages in thread From: Artur Malabarba @ 2015-05-20 19:59 UTC (permalink / raw) To: T.V Raman; +Cc: Bozhidar Batsov, emacs-devel 2015-05-20 17:39 GMT+01:00 T.V Raman <raman@google.com>: > thanks for the clarification. Perhaps we should off-load the async > installation to a perl/python/shell script and not let emacs > participate in that dance? Using a background process is certainly possible (though I'd prefer an elisp script, as I mentioned here before), but it's not likely that I'll have the time for that. If anyone wants to try, I should be able to offer helpul guidance because that is what I use on Paradox (it's not trivial to transfer to package.el because Paradox uses the `async' package and it's a little hacky). ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-20 19:59 ` Artur Malabarba @ 2015-05-20 20:02 ` Artur Malabarba 2015-05-20 20:05 ` Dmitry Gutov 2015-05-21 9:03 ` Artur Malabarba 0 siblings, 2 replies; 27+ messages in thread From: Artur Malabarba @ 2015-05-20 20:02 UTC (permalink / raw) Cc: emacs-devel Here is the patch that I'm about to push. Is it OK that it removes some arguments from some functions? I think it is, since it was never on a stable build, but I'm asking anyway. Subject: [PATCH] * lisp/emacs-lisp/package.el: Revert async package transactions (package-menu-async): Update doc. (package-install-from-archive, package-download-transaction) (package-install, package-menu--perform-transaction) (package-menu-execute): Remove asynchronous functionality. --- lisp/emacs-lisp/package.el | 93 ++++++++++++++++------------------------------ 1 file changed, 32 insertions(+), 61 deletions(-) diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 1ab1b4b..faab5c9 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -350,8 +350,9 @@ a sane initial value." (defcustom package-menu-async t "If non-nil, package-menu will use async operations when possible. -This includes refreshing archive contents as well as installing -packages." +Currently, only the refreshing of archive contents supports +asynchronous operations. Package transactions are still done +synchronously." :type 'boolean :version "25.1") @@ -1712,31 +1713,26 @@ if all the in-between dependencies are also in PACKAGE-LIST." "Return the archive containing the package NAME." (cdr (assoc (package-desc-archive desc) package-archives))) -(defun package-install-from-archive (pkg-desc &optional async callback) - "Download and install a tar package. -If ASYNC is non-nil, perform the download asynchronously. -If CALLBACK is non-nil, call it with no arguments once the -operation is done." +(defun package-install-from-archive (pkg-desc) + "Download and install a tar package." ;; This won't happen, unless the archive is doing something wrong. (when (eq (package-desc-kind pkg-desc) 'dir) (error "Can't install directory package from archive")) (let* ((location (package-archive-base pkg-desc)) (file (concat (package-desc-full-name pkg-desc) (package-desc-suffix pkg-desc)))) - (package--with-work-buffer-async location file async + (package--with-work-buffer location file (if (or (not package-check-signature) (member (package-desc-archive pkg-desc) package-unsigned-archives)) ;; If we don't care about the signature, unpack and we're ;; done. - (progn (let ((save-silently async) - (inhibit-message async)) - (package-unpack pkg-desc)) - (funcall callback)) + (let ((save-silently t)) + (package-unpack pkg-desc)) ;; If we care, check it and *then* write the file. (let ((content (buffer-string))) (package--check-signature - location file content async + location file content nil ;; This function will be called after signature checking. (lambda (&optional good-sigs) (unless (or good-sigs (eq package-check-signature 'allow-unsigned)) @@ -1746,8 +1742,7 @@ operation is done." (package-desc-name pkg-desc))) ;; Signature checked, unpack now. (with-temp-buffer (insert content) - (let ((save-silently async) - (inhibit-message async)) + (let ((save-silently t)) (package-unpack pkg-desc))) ;; Here the package has been installed successfully, mark it as ;; signed if appropriate. @@ -1763,9 +1758,7 @@ operation is done." (setf (package-desc-signed pkg-desc) t) ;; Update the new (activated) pkg-desc as well. (when-let ((pkg-descs (cdr (assq (package-desc-name pkg-desc) package-alist)))) - (setf (package-desc-signed (car pkg-descs)) t))) - (when (functionp callback) - (funcall callback))))))))) + (setf (package-desc-signed (car pkg-descs)) t)))))))))) (defun package-installed-p (package &optional min-version) "Return true if PACKAGE, of MIN-VERSION or newer, is installed. @@ -1786,25 +1779,13 @@ If PACKAGE is a package-desc object, MIN-VERSION is ignored." ;; Also check built-in packages. (package-built-in-p package min-version)))) -(defun package-download-transaction (packages &optional async callback) +(defun package-download-transaction (packages) "Download and install all the packages in PACKAGES. PACKAGES should be a list of package-desc. -If ASYNC is non-nil, perform the downloads asynchronously. -If CALLBACK is non-nil, call it with no arguments once the -entire operation is done. - This function assumes that all package requirements in PACKAGES are satisfied, i.e. that PACKAGES is computed using `package-compute-transaction'." - (cond - (packages (package-install-from-archive - (car packages) - async - (lambda () - (package-download-transaction (cdr packages)) - (when (functionp callback) - (funcall callback))))) - (callback (funcall callback)))) + (mapc #'package-install-from-archive packages)) (defun package--ensure-init-file () "Ensure that the user's init file has `package-initialize'. @@ -1857,16 +1838,13 @@ add a call to it along with some explanatory comments." (setq package--init-file-ensured t)) ;;;###autoload -(defun package-install (pkg &optional dont-select async callback) +(defun package-install (pkg &optional dont-select) "Install the package PKG. PKG can be a package-desc or the package name of one the available packages in an archive in `package-archives'. Interactively, prompt for its name. If called interactively or if DONT-SELECT nil, add PKG to `package-selected-packages'. -If ASYNC is non-nil, perform the downloads asynchronously. -If CALLBACK is non-nil, call it with no arguments once the -entire operation is done. If PKG is a package-desc and it is already installed, don't try to install it but still mark it as selected." @@ -1899,9 +1877,8 @@ to install it but still mark it as selected." (package-compute-transaction (list pkg) (package-desc-reqs pkg))) (package-compute-transaction () (list (list pkg)))))) - (package-download-transaction transaction async callback) - (message "`%s' is already installed" (package-desc-full-name pkg)) - (funcall callback))) + (package-download-transaction transaction) + (message "`%s' is already installed" (package-desc-full-name pkg)))) (defun package-strip-rcs-id (str) "Strip RCS version ID from the version string STR. @@ -2938,30 +2915,25 @@ nil, but not both." (package-menu--list-to-prompt upg) "? ")))) -(defun package-menu--perform-transaction (install-list delete-list &optional async) - "Install packages in INSTALL-LIST and delete DELETE-LIST. -If ASYNC is non-nil, perform the installation downloads -asynchronously." +(defun package-menu--perform-transaction (install-list delete-list) + "Install packages in INSTALL-LIST and delete DELETE-LIST." ;; While there are packages to install, call `package-install' on ;; the next one and defer deletion to the callback function. (if install-list - (let* ((pkg (car install-list)) - (rest (cdr install-list)) - ;; Don't mark as selected if it's a new version of an - ;; installed package. - (dont-mark (and (not (package-installed-p pkg)) - (package-installed-p - (package-desc-name pkg))))) + (dolist (pkg install-list) (package-install - pkg dont-mark async - (lambda () (package-menu--perform-transaction rest delete-list async)))) - (let ((inhibit-message async)) - ;; Once there are no more packages to install, proceed to - ;; deletion. - (dolist (elt (package--sort-by-dependence delete-list)) - (condition-case-unless-debug err - (package-delete elt) - (error (message (cadr err)))))) + ;; Don't mark as selected if it's a new version of an + ;; installed package. + pkg (and (not (package-installed-p pkg)) + (package-installed-p + (package-desc-name pkg))))) + ;; Once there are no more packages to install, proceed to + ;; deletion. + (dolist (elt (package--sort-by-dependence delete-list)) + (condition-case-unless-debug err + (let ((inhibit-message t)) + (package-delete elt)) + (error (message (cadr err))))) (message "Transaction done") (when package-selected-packages (when-let ((removable (package--removable-packages))) @@ -2997,8 +2969,7 @@ Optional argument NOQUERY non-nil means do not ask the user to confirm." (package-menu--prompt-transaction-p install-list delete-list)) (message "Transaction started") ;; This calls `package-menu--generate' after everything's done. - (package-menu--perform-transaction - install-list delete-list package-menu-async)))) + (package-menu--perform-transaction install-list delete-list)))) (defun package-menu--version-predicate (A B) (let ((vA (or (aref (cadr A) 1) '(0))) -- 2.4.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-20 20:02 ` Artur Malabarba @ 2015-05-20 20:05 ` Dmitry Gutov 2015-05-21 0:15 ` Kaushal 2015-05-21 9:03 ` Artur Malabarba 1 sibling, 1 reply; 27+ messages in thread From: Dmitry Gutov @ 2015-05-20 20:05 UTC (permalink / raw) To: bruce.connor.am; +Cc: emacs-devel On 05/20/2015 11:02 PM, Artur Malabarba wrote: > Here is the patch that I'm about to push. Is it OK that it removes > some arguments from some functions? I think it is, since it was never > on a stable build, but I'm asking anyway. "Never was in a stable build" is a good criterion. ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-20 20:05 ` Dmitry Gutov @ 2015-05-21 0:15 ` Kaushal 0 siblings, 0 replies; 27+ messages in thread From: Kaushal @ 2015-05-21 0:15 UTC (permalink / raw) To: Dmitry Gutov, bruce.connor.am; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 807 bytes --] I thought some more about this. I think that more than the async install and download, I like the fact that once I hit `x` in the package manager after choosing what to install/delete, I can just sit back and wait for the process to complete neatly by itself without needing any more input and without popping up any compilation windows and such. It's good to see a nice summary message at the end to know what the package manager did. On Wed, May 20, 2015, 4:05 PM Dmitry Gutov <dgutov@yandex.ru> wrote: > On 05/20/2015 11:02 PM, Artur Malabarba wrote: > > Here is the patch that I'm about to push. Is it OK that it removes > > some arguments from some functions? I think it is, since it was never > > on a stable build, but I'm asking anyway. > > "Never was in a stable build" is a good criterion. > > [-- Attachment #2: Type: text/html, Size: 1075 bytes --] ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-20 20:02 ` Artur Malabarba 2015-05-20 20:05 ` Dmitry Gutov @ 2015-05-21 9:03 ` Artur Malabarba 2015-05-21 14:35 ` Kaushal 1 sibling, 1 reply; 27+ messages in thread From: Artur Malabarba @ 2015-05-21 9:03 UTC (permalink / raw) To: emacs-devel Alright, pushed. Just for future record, in case anyone ever tries this again, the commit that removed async transactions was: Commit 0060c0d7b15ed1510583eb738baa0c9bf9f02721 And the one before that is Commit 6f4b0e8153c8e83d03ed1c3c37065e5bf56685f1 ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-21 9:03 ` Artur Malabarba @ 2015-05-21 14:35 ` Kaushal 2015-05-21 14:46 ` Kaushal 0 siblings, 1 reply; 27+ messages in thread From: Kaushal @ 2015-05-21 14:35 UTC (permalink / raw) To: bruce.connor.am, emacs-devel [-- Attachment #1: Type: text/plain, Size: 1130 bytes --] 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. For example, I have this in my init: ;; Display date+time in the minibuffer instead of in the mode-line (use-package minibuffer-line :if (null modi/show-date-time-in-mode-line) :defer 1 ; to prevent 'Invalid face reference: minibuffer-line' ; when launching emacsclient :init (progn (setq minibuffer-line-format '((:eval (format-time-string "%l:%M %b %d %a"))))) :config (progn (set-face-attribute 'minibuffer-line nil :inherit font-lock-type-face) (minibuffer-line-mode))) On Thu, May 21, 2015 at 5:03 AM Artur Malabarba <bruce.connor.am@gmail.com> wrote: > Alright, pushed. > Just for future record, in case anyone ever tries this again, the > commit that removed async transactions was: > Commit 0060c0d7b15ed1510583eb738baa0c9bf9f02721 > And the one before that is > Commit 6f4b0e8153c8e83d03ed1c3c37065e5bf56685f1 > > [-- Attachment #2: Type: text/html, Size: 1591 bytes --] ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-21 14:35 ` Kaushal @ 2015-05-21 14:46 ` Kaushal 2015-05-21 14:49 ` Kaushal 0 siblings, 1 reply; 27+ messages in thread From: Kaushal @ 2015-05-21 14:46 UTC (permalink / raw) To: bruce.connor.am, emacs-devel [-- Attachment #1: Type: text/plain, Size: 1408 bytes --] Looks like some how those 3 packages did not get added to package-selected-packages when I installed them. Or they did not get saved to custom.el. On Thu, May 21, 2015 at 10:35 AM Kaushal <kaushal.modi@gmail.com> wrote: > 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. > > For example, I have this in my init: > > ;; Display date+time in the minibuffer instead of in the mode-line > (use-package minibuffer-line > :if (null modi/show-date-time-in-mode-line) > :defer 1 ; to prevent 'Invalid face reference: minibuffer-line' > ; when launching emacsclient > :init > (progn > (setq minibuffer-line-format '((:eval (format-time-string "%l:%M %b %d > %a"))))) > :config > (progn > (set-face-attribute 'minibuffer-line nil :inherit font-lock-type-face) > (minibuffer-line-mode))) > > > On Thu, May 21, 2015 at 5:03 AM Artur Malabarba <bruce.connor.am@gmail.com> > wrote: > >> Alright, pushed. >> Just for future record, in case anyone ever tries this again, the >> commit that removed async transactions was: >> Commit 0060c0d7b15ed1510583eb738baa0c9bf9f02721 >> And the one before that is >> Commit 6f4b0e8153c8e83d03ed1c3c37065e5bf56685f1 >> >> [-- Attachment #2: Type: text/html, Size: 2054 bytes --] ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-21 14:46 ` Kaushal @ 2015-05-21 14:49 ` Kaushal 0 siblings, 0 replies; 27+ messages in thread From: Kaushal @ 2015-05-21 14:49 UTC (permalink / raw) To: bruce.connor.am, emacs-devel [-- Attachment #1: Type: text/plain, Size: 1723 bytes --] Also all 3 of those packages have the status as "dependency" even when no other package requires them. I had installed those packages using the package manager; they did not get auto installed. On Thu, May 21, 2015 at 10:46 AM Kaushal <kaushal.modi@gmail.com> wrote: > Looks like some how those 3 packages did not get added to > package-selected-packages when I installed them. Or they did not get saved > to custom.el. > > On Thu, May 21, 2015 at 10:35 AM Kaushal <kaushal.modi@gmail.com> wrote: > >> 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. >> >> For example, I have this in my init: >> >> ;; Display date+time in the minibuffer instead of in the mode-line >> (use-package minibuffer-line >> :if (null modi/show-date-time-in-mode-line) >> :defer 1 ; to prevent 'Invalid face reference: minibuffer-line' >> ; when launching emacsclient >> :init >> (progn >> (setq minibuffer-line-format '((:eval (format-time-string "%l:%M %b >> %d %a"))))) >> :config >> (progn >> (set-face-attribute 'minibuffer-line nil :inherit font-lock-type-face) >> (minibuffer-line-mode))) >> >> >> On Thu, May 21, 2015 at 5:03 AM Artur Malabarba < >> bruce.connor.am@gmail.com> wrote: >> >>> Alright, pushed. >>> Just for future record, in case anyone ever tries this again, the >>> commit that removed async transactions was: >>> Commit 0060c0d7b15ed1510583eb738baa0c9bf9f02721 >>> And the one before that is >>> Commit 6f4b0e8153c8e83d03ed1c3c37065e5bf56685f1 >>> >>> [-- Attachment #2: Type: text/html, Size: 2574 bytes --] ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-15 2:24 ` Kaushal 2015-05-15 4:49 ` Bozhidar Batsov @ 2015-05-15 8:01 ` Artur Malabarba 1 sibling, 0 replies; 27+ messages in thread From: Artur Malabarba @ 2015-05-15 8:01 UTC (permalink / raw) To: Kaushal; +Cc: Dmitry Gutov, Stefan Monnier, Bozhidar Batsov, emacs-devel [-- Attachment #1: Type: text/plain, Size: 598 bytes --] > @Stefan > I actually like the hassle-free install process. If I mark stuff with `i` or `U` followed by `x`, I mean to download and install those packages in one go. I have been spoilt by how it is currently; would be good to at least have an option to keep it that way. Don't worry. Having the opinion to skip a prompt is the easy part. > @Artur > 3. I believe that people who have the Paradox package installed wouldn't be affected by this right? You are correct. Paradox relies on package.el for async refreshing, but it does its own thing for async installation, so you wouldn't lose that. [-- Attachment #2: Type: text/html, Size: 707 bytes --] ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-15 2:00 ` Stefan Monnier 2015-05-15 2:24 ` Kaushal @ 2015-05-15 7:56 ` Artur Malabarba 2015-05-15 8:20 ` Dmitry Gutov 2 siblings, 0 replies; 27+ messages in thread From: Artur Malabarba @ 2015-05-15 7:56 UTC (permalink / raw) To: Stefan Monnier; +Cc: Dmitry Gutov, Bozhidar Batsov, emacs-devel [-- Attachment #1: Type: text/plain, Size: 869 bytes --] On May 15, 2015 3:00 AM, "Stefan Monnier" <monnier@iro.umontreal.ca> wrote: > > >> 1. Keep the feature but disable by default. Async refreshing would still > >> be enabled. > > I'd rather we not keep options for behavior nobody has specifically > > asked for. > > I asked for it. But after using it I agree that it sucks UI-wise. > I think to make it work better, we'd need to make the download and the > install more separate. E.g. when the download is done, rather than go > ahead and perform the install, inform the user that the download is done > and the install process can proceed, but wait for the user to > explicitly say "install now". It'd be nice if someone did this, but that's a non trivial effort atm. package.el just unpacks the package as soon as it's downloaded, so this needs to be changed before we can have a prompt between download and install. [-- Attachment #2: Type: text/html, Size: 1119 bytes --] ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-15 2:00 ` Stefan Monnier 2015-05-15 2:24 ` Kaushal 2015-05-15 7:56 ` Artur Malabarba @ 2015-05-15 8:20 ` Dmitry Gutov 2 siblings, 0 replies; 27+ messages in thread From: Dmitry Gutov @ 2015-05-15 8:20 UTC (permalink / raw) To: Stefan Monnier; +Cc: Bozhidar Batsov, bruce.connor.am, emacs-devel On 05/15/2015 05:00 AM, Stefan Monnier wrote: > I asked for it. But after using it I agree that it sucks UI-wise. I didn't mean to imply that Arthur implemented something entirely unwanted. > I think to make it work better, we'd need to make the download and the > install more separate. E.g. when the download is done, rather than go > ahead and perform the install, inform the user that the download is done > and the install process can proceed, but wait for the user to > explicitly say "install now". When that happens, will the user still be in the list-packages buffer? Or will they have an opportunity to quit and then be surprised by the yes-no install prompt? What you're describing, looking at other applications, sounds more like an automated system to download *updates*, so that when the user does M-x list-packages, they can immediately install the updates. However, that might not be the best idea for us - the MELPA packages, for instance, update *very* often. ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: Package installation messages 2015-05-15 0:00 ` Dmitry Gutov 2015-05-15 2:00 ` Stefan Monnier @ 2015-05-15 7:51 ` Artur Malabarba 1 sibling, 0 replies; 27+ messages in thread From: Artur Malabarba @ 2015-05-15 7:51 UTC (permalink / raw) To: Dmitry Gutov; +Cc: Bozhidar Batsov, emacs-devel [-- Attachment #1: Type: text/plain, Size: 789 bytes --] >> Now that the async features have been out for a few months, I can say I >> like the async refreshing but I'm not a fan of how async installation >> turned out (for the exact reasons you mention above). I see 3 options, >> and I'd like to know what people think. > > Async refreshing has grown on me too, but it still needs to implement retaining the marks set by the user. Yes, it needs to be done, and it's on my "next time I have time" list. >> 3. Just revert it. This has the advantage of simplifying the logic. >> Async refreshing would still be kept. > > IIUC, async installation also performs downloads concurrently, right? That would be a useful trait to keep. No, it performs the downloads in sequence. It would be nice if someone made it concurrent (with or without async). [-- Attachment #2: Type: text/html, Size: 958 bytes --] ^ permalink raw reply [flat|nested] 27+ messages in thread
end of thread, other threads:[~2015-05-21 14:49 UTC | newest] Thread overview: 27+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-05-14 21:23 Package installation messages Bozhidar Batsov 2015-05-14 22:38 ` Artur Malabarba 2015-05-14 22:40 ` Dmitry Gutov 2015-05-14 23:15 ` Artur Malabarba 2015-05-15 0:00 ` Dmitry Gutov 2015-05-15 2:00 ` Stefan Monnier 2015-05-15 2:24 ` Kaushal 2015-05-15 4:49 ` Bozhidar Batsov 2015-05-15 5:45 ` Thierry Volpiatto [not found] ` <CAAdUY-K8h41cY0e1XB30rzoYOmuM2sFctAxhcF2B2D3R54V8Tw@mail.gmail.com> 2015-05-15 8:49 ` Artur Malabarba 2015-05-20 13:45 ` Artur Malabarba 2015-05-20 15:36 ` raman 2015-05-20 15:53 ` Bozhidar Batsov 2015-05-20 15:58 ` Artur Malabarba 2015-05-20 16:39 ` T.V Raman 2015-05-20 19:59 ` Artur Malabarba 2015-05-20 20:02 ` Artur Malabarba 2015-05-20 20:05 ` Dmitry Gutov 2015-05-21 0:15 ` Kaushal 2015-05-21 9:03 ` Artur Malabarba 2015-05-21 14:35 ` Kaushal 2015-05-21 14:46 ` Kaushal 2015-05-21 14:49 ` Kaushal 2015-05-15 8:01 ` Artur Malabarba 2015-05-15 7:56 ` Artur Malabarba 2015-05-15 8:20 ` Dmitry Gutov 2015-05-15 7:51 ` Artur Malabarba
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).