Subject: 29.1.50; upgrading of multiple packages should only call package-quickstart-refresh once

From: Kai Ma <[email-masked]>
Date: Fri, 04 Aug 2023 18:19:11 +0800

Severity: wishlist

When a user requests package upgrades via M-x list-packages, the
function package-menu-execute is invoked, which upgrades each marked
package one by one.  However, if the user has package-quickstart set to
t, each package installation/upgrade would cause a call to the very
costly package-quickstart-refresh.  If there are more than a handful of
packages to upgrade, the total consumed time would become much longer
than it could be.

It is therefore desirable that package-menu-execute (or some other more
appropriate function) masks package-quickstart before upgrading all the
packages.

(There is a related problem: package-install during initialization would
also trigger package-quickstart-refresh, but that's another topic.)

In GNU Emacs 29.1.50 (build 1, x86_64-apple-darwin22.6.0, NS
 appkit-2299.70 Version 13.5 (Build 22G74)) of 2023-08-03 built on
 Kais-MacBook.local
Repository revision: 7280e6aaa1978c6e26c4286db9c446fa74637fa4
Repository branch: emacs-29
Windowing system distributor 'Apple', version 10.3.2299
System Description:  macOS 13.5

Configured using:
 'configure --with-xwidgets --with-ns --with-tree-sitter -C
 'LDFLAGS=-L/usr/local/opt/llvm/lib -L/usr/local/opt/bison/lib
 -L/usr/local/opt/flex/lib' 'CPPFLAGS=-I/usr/local/opt/llvm/include
 -I/usr/local/opt/flex/include''

Configured features:
ACL DBUS GIF GLIB GMP GNUTLS JPEG JSON LCMS2 LIBXML2 MODULES NOTIFY
KQUEUE NS PDUMPER PNG RSVG SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS
TREE_SITTER WEBP XIM XWIDGETS ZLIB

Important settings:
  value of $LC_ALL: zh_CN.utf-8
  value of $LANG: zh_CN.utf-8
  locale-coding-system: utf-8-unix

Major mode: ELisp/l

Minor modes in effect:
  bug-reference-prog-mode: t
  global-git-commit-mode: t
  magit-auto-revert-mode: t
  windmove-mode: t
  shell-dirtrack-mode: t
  display-line-numbers-mode: t
  hl-todo-mode: t
  rainbow-delimiters-mode: t
  copilot-mode: t
  symbol-overlay-mode: t
  diff-hl-margin-local-mode: t
  diff-hl-margin-mode: t
  diff-hl-mode: t
  recentf-mode: t
  yas-global-mode: t
  yas-minor-mode: t
  doom-modeline-mode: t
  winner-mode: t
  winum-mode: t
  which-key-mode: t
  global-hl-line-mode: t
  projectile-mode: t
  vertico-multiform-mode: t
  vertico-mouse-mode: t
  vertico-mode: t
  keyfreq-autosave-mode: t
  keyfreq-mode: t
  evil-leader-mode: t
  global-evil-surround-mode: t
  evil-surround-mode: t
  global-evil-collection-unimpaired-mode: t
  evil-collection-unimpaired-mode: t
  diredfl-global-mode: t
  evil-mode: t
  evil-local-mode: t
  corfu-popupinfo-mode: t
  global-corfu-mode: t
  corfu-mode: t
  marginalia-mode: t
  prescient-persist-mode: t
  global-ligature-mode: t
  ligature-mode: t
  pixel-scroll-precision-mode: t
  save-place-mode: t
  adaptive-wrap-prefix-mode: t
  server-mode: t
  electric-pair-mode: t
  global-so-long-mode: t
  delete-selection-mode: t
  global-auto-revert-mode: t
  override-global-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  context-menu-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  hs-minor-mode: t

Load-path shadows:
/Users/kaima/.emacs.d/elpa/transient-20230723.1411/transient hides /Applications/Emacs.app/Contents/Resources/lisp/transient
/Users/kaima/.emacs.d/elpa/eglot-1.15/eglot hides /Applications/Emacs.app/Contents/Resources/lisp/progmodes/eglot
/Users/kaima/.emacs.d/elpa/eldoc-1.14.0/eldoc hides /Applications/Emacs.app/Contents/Resources/lisp/emacs-lisp/eldoc

Features:
(shadow evil-collection-helpful helpful cc-langs trace
evil-collection-edebug edebug info-look evil-collection-elisp-refs
elisp-refs bug-reference magit-bookmark evil-collection-magit
magit-submodule magit-blame magit-stash magit-reflog magit-bisect
magit-push magit-pull magit-fetch magit-clone magit-remote magit-commit
magit-sequence magit-notes magit-worktree magit-tag magit-merge
magit-branch magit-reset magit-files magit-refs magit-status magit
magit-repos magit-apply magit-wip magit-log which-func magit-diff
git-commit evil-collection-log-edit log-edit add-log magit-core
magit-autorevert magit-margin magit-transient magit-process with-editor
magit-mode transient magit-git magit-base evil-collection-magit-section
magit-section crm all-the-icons-dired dired-filter dired-hacks-utils
dired-aux dired-x evil-collection-shortdoc shortdoc package-vc url-http
url-auth url-gw evil-collection-finder finder cursor-sensor smerge-mode
diff ecomplete evil-collection-view view emacsbug flow-fill mm-archive
qp gnus-html url-queue help-fns radix-tree url-cache mm-url sort smiley
gnus-cite mail-extr textsec uni-scripts idna-mapping uni-confusable
textsec-check gnus-async gnus-bcklg gnus-dup gnus-ml disp-table nndraft
nnmh utf-7 nnfolder nnnil gnus-agent gnus-srvr gnus-score score-mode
nnvirtual gnus-msg gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls
dig nntp gnus-cache gnus-sum shr pixel-fill kinsoku url-file gnus-topic
gnus-group gnus-undo gnus-start gnus-dbus gnus-cloud nnimap nnmail
mail-source utf7 nnoo gnus-spec gnus-int gnus-range message sendmail
yank-media rfc822 mml mml-sec evil-collection-epa epa mm-decode
mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 ietf-drums
mailabbrev gmm-utils mailheader gnus-win evil-collection-gnus gnus
nnheader gnus-util mail-utils range mm-util mail-prsvr battery dbus time
hardhacker-theme evil-collection-cus-theme cus-theme jka-compr windmove
consult-xref misearch multi-isearch avy consult-imenu consult-compile
consult-flymake cus-start align evil-collection-speedbar speedbar
ezimage dframe haskell-mode haskell-cabal haskell-utils
haskell-font-lock haskell-indentation haskell-string
haskell-sort-imports haskell-lexeme haskell-align-imports
haskell-complete-module haskell-ghc-support etags fileloop
haskell-customize evil-collection-eglot eglot external-completion
evil-collection-flymake flymake-proc flymake cap-words superword subword
cargo cargo-process tramp tramp-loaddefs trampver tramp-integration
files-x tramp-compat shell rust-ts-mode c-ts-common org-protocol
evil-org-agenda evil-org evil-collection-org citeproc
citeproc-itemgetters citeproc-biblatex parse-time citeproc-bibtex
parsebib ol-bibtex bibtex iso8601 citeproc-cite citeproc-subbibs
citeproc-sort citeproc-name citeproc-formatters citeproc-number rst
citeproc-proc citeproc-disamb citeproc-itemdata
citeproc-generic-elements citeproc-macro citeproc-choose citeproc-date
citeproc-context citeproc-prange citeproc-style citeproc-locale
citeproc-term citeproc-rt citeproc-lib citeproc-s let-alist queue
oc-bibtex ox-odt rng-loc rng-uri rng-parse rng-match rng-dt rng-util
rng-pttrn nxml-parse nxml-ns nxml-enc xmltok nxml-util ox-latex
ox-icalendar org-agenda ox-html table ox-ascii ox-publish ox org-element
org-persist org-id org-refile avl-tree generator org-tempo tempo org
org-macro org-pcomplete pcomplete org-list org-footnote org-faces
org-entities ob-d2 ob-dot ob-python evil-collection-python python
treesit ob-rust ob-C ob ob-tangle org-src ob-ref ob-lob ob-table ob-exp
ob-comint ccls ccls-member-hierarchy ccls-inheritance-hierarchy
ccls-call-hierarchy ccls-tree ccls-code-lens ccls-semantic-highlight
ccls-common lsp-mode lsp-protocol evil-collection-xref xref spinner
network-stream puny nsm evil-collection-markdown-mode markdown-mode
edit-indirect evil-collection-outline noutline outline inline
evil-collection-imenu imenu ht epg rfc6068 epg-config cc-mode cc-fonts
cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs
ob-emacs-lisp ob-core ob-eval org-cycle org-table ol org-fold
org-fold-core org-keys oc org-loaddefs evil-collection-calendar cal-menu
calendar cal-loaddefs org-compat org-version org-macs format-spec
vertico-directory evil-collection-vc-git vc-git evil-collection-consult
consult evil-collection-bookmark bookmark time-date autoinsert pulse
hideshow display-line-numbers hl-todo rainbow-delimiters copilot
copilot-balancer editorconfig editorconfig-core editorconfig-core-handle
editorconfig-fnmatch jsonrpc evil-collection-ert ert
evil-collection-debug debug backtrace find-func warnings symbol-overlay
evil-collection-diff-hl diff-hl-margin diff-hl-dired diff-hl
evil-collection-log-view log-view pcvs-util evil-collection-vc-dir
vc-dir ewoc vc vc-dispatcher evil-collection-diff-mode diff-mode recentf
tree-widget yasnippet-snippets yasnippet doom-modeline
doom-modeline-segments doom-modeline-env doom-modeline-core shrink-path
f f-shortdoc s nerd-icons nerd-icons-faces nerd-icons-data
nerd-icons-data-mdicon nerd-icons-data-flicon nerd-icons-data-codicon
nerd-icons-data-devicon nerd-icons-data-sucicon nerd-icons-data-wicon
nerd-icons-data-faicon nerd-icons-data-powerline nerd-icons-data-octicon
nerd-icons-data-pomicon nerd-icons-data-ipsicon winner winum
evil-collection-which-key which-key hl-line solaire-mode face-remap
projectile project lisp-mnt evil-collection-grep grep
evil-collection-compile compile text-property-search
evil-collection-comint comint ansi-osc ansi-color ibuf-ext
evil-collection-ibuffer ibuffer ibuffer-loaddefs evil-collection-vertico
vertico-multiform vertico-mouse vertico catppuccin-theme keyfreq
prelude-nix prelude-evil evil-leader evil-surround
evil-collection-unimpaired evil-collection-tabulated-list
evil-collection-tab-bar evil-collection-so-long evil-collection-simple
evil-collection-replace evil-collection-process-menu
evil-collection-popup evil-collection-package-menu evil-collection-info
evil-collection-indent evil-collection-image image-mode
evil-collection-dired diredfl dired dired-loaddefs exif
evil-collection-help evil-collection-elisp-mode evil-collection-eldoc
evil-collection-custom evil-collection-corfu evil-collection-buff-menu
evil-collection annalist evil evil-integration evil-maps evil-commands
reveal evil-jumps evil-command-window evil-search evil-ex evil-types
evil-macros evil-repeat evil-states evil-core evil-common thingatpt rect
evil-vars prelude-irc prelude-apps prelude-mail prelude-os prelude-help
prelude-lang-zig prelude-lang-web prelude-lang-agda agda2
prelude-lang-haskell derived prelude-lang-js prelude-lang-ml
prelude-lang-coq prelude-lang-rust prelude-lang-python prelude-lang-cc
prelude-lang-lisp prelude-prog prelude-blog prelude-org hydra lv
prelude-tex prelude-git prelude-dired prelude-chinese rime
rime-predicates xdg posframe popup dash prelude-ibuffer prelude-search
prelude-completion kind-icon svg-lib svg dom xml corfu-popupinfo corfu
pcase cape marginalia orderless prescient char-fold prelude-project
prelude-ui centaur-tabs centaur-tabs-interactive centaur-tabs-functions
centaur-tabs-elements powerline powerline-separators powerline-themes
color cus-edit pp cus-load icons wid-edit rx ligature all-the-icons
all-the-icons-faces data-material data-weathericons data-octicons
data-fileicons data-faicons data-alltheicons pixel-scroll cua-base ring
prelude-core saveplace adaptive-wrap dabbrev server finder-inf elec-pair
diminish exec-path-from-shell undohist edmacro kmacro so-long delsel
autorevert filenotify prelude-benchmark benchmark-init advice cl-extra
help-mode prelude-common prelude-package vc-use-package use-package
use-package-delight use-package-diminish use-package-bind-key bind-key
easy-mmode prelude-loaddefs no-littering compat package browse-url url
url-proxy url-privacy url-expand url-methods url-history url-cookie
generate-lisp-file url-domsuf url-util mailcap url-handlers url-parse
auth-source eieio eieio-core password-cache json subr-x map byte-opt
url-vars cl-macs gv use-package-ensure cl-seq use-package-core
cl-loaddefs cl-lib bytecomp byte-compile info adaptive-wrap-autoloads
all-the-icons-dired-autoloads all-the-icons-ibuffer-autoloads
ample-theme-autoloads auctex-autoloads tex-site ayu-theme-autoloads
benchmark-init-autoloads cape-autoloads carbon-now-sh-autoloads
cargo-autoloads catppuccin-theme-autoloads ccls-autoloads
cdlatex-autoloads centaur-tabs-autoloads cider-autoloads citre-autoloads
clojure-mode-autoloads cmake-mode-autoloads cmm-mode-autoloads
color-theme-sanityinc-tomorrow-autoloads company-box-autoloads
company-coq-autoloads company-math-autoloads company-autoloads
copilot-autoloads corfu-prescient-autoloads corfu-autoloads
d2-mode-autoloads dap-mode-autoloads bui-autoloads
dash-at-point-autoloads dashboard-autoloads debbugs-autoloads
deft-autoloads devdocs-autoloads diff-hl-autoloads diminish-autoloads
dired-filter-autoloads dired-hacks-utils-autoloads diredfl-autoloads
dockerfile-mode-autoloads doom-modeline-autoloads doom-themes-autoloads
dracula-theme-autoloads dumb-jump-autoloads dune-autoloads
ebib-autoloads edit-indirect-autoloads editorconfig-autoloads
eglot-autoloads eldoc-box-autoloads elfeed-autoloads
emacs-gc-stats-autoloads embark-consult-autoloads consult-autoloads
embark-autoloads evil-cleverparens-autoloads evil-collection-autoloads
annalist-autoloads evil-leader-autoloads evil-org-autoloads
evil-paredit-autoloads evil-surround-autoloads evil-autoloads
exec-path-from-shell-autoloads expand-region-autoloads
fish-mode-autoloads flatui-theme-autoloads flycheck-haskell-autoloads
flycheck-autoloads forge-autoloads closql-autoloads
frame-local-autoloads fsharp-mode-autoloads geiser-guile-autoloads
geiser-racket-autoloads geiser-autoloads general-autoloads
ghub-autoloads git-timemachine-autoloads go-mode-autoloads
go-translate-autoloads google-translate-autoloads goto-chg-autoloads
gptel-autoloads haskell-mode-autoloads helm-bibtex-autoloads
helm-autoloads helm-core-autoloads helpful-autoloads
elisp-refs-autoloads hl-todo-autoloads humanoid-themes-autoloads
indent-bars-autoloads info-colors-autoloads js2-mode-autoloads
jupyter-autoloads keyfreq-autoloads kind-icon-autoloads
ligature-autoloads lsp-docker-autoloads lsp-treemacs-autoloads
lsp-ui-autoloads lsp-mode-autoloads eldoc-autoloads lua-mode-autoloads
magit-autoloads git-commit-autoloads marginalia-autoloads
markdown-mode-autoloads math-symbol-lists-autoloads maxima-autoloads
meow-autoloads merlin-autoloads mindre-theme-autoloads minimap-autoloads
mixed-pitch-autoloads modern-cpp-font-lock-autoloads
modus-themes-autoloads moe-theme-autoloads monokai-alt-theme-autoloads
monokai-pro-theme-autoloads monokai-theme-autoloads
multiple-cursors-autoloads neotree-autoloads nerd-icons-autoloads
nginx-mode-autoloads nix-mode-autoloads nix-sandbox-autoloads
no-littering-autoloads nov-autoloads esxml-autoloads
ns-auto-titlebar-autoloads nyan-mode-autoloads ob-d2-autoloads
ob-rust-autoloads olivetti-autoloads one-themes-autoloads
orderless-autoloads org-appear-autoloads org-bullets-autoloads
org-download-autoloads async-autoloads org-gcal-autoloads
elnode-autoloads db-autoloads fakir-autoloads creole-autoloads
kv-autoloads noflet-autoloads alert-autoloads log4e-autoloads
gntp-autoloads aio-autoloads org-journal-autoloads
org-latex-impatient-autoloads org-noter-autoloads
org-preview-html-autoloads org-ref-autoloads citeproc-autoloads
htmlize-autoloads org-roam-bibtex-autoloads bibtex-completion-autoloads
biblio-autoloads biblio-core-autoloads org-roam-ui-autoloads
org-roam-autoloads magit-section-autoloads emacsql-autoloads
org-xlatex-autoloads ormolu-autoloads ox-pandoc-autoloads
paredit-autoloads parsebib-autoloads parseedn-autoloads
parseclj-autoloads pdf-tools-autoloads persist-autoloads
pinyinlib-autoloads pkg-info-autoloads epl-autoloads powerline-autoloads
prescient-autoloads proof-general-autoloads proof-site proof-autoloads
queue-autoloads quickrun-autoloads racket-mode-autoloads
rainbow-delimiters-autoloads rainbow-mode-autoloads
request-deferred-autoloads request-autoloads deferred-autoloads
rg-autoloads rime-autoloads popup-autoloads ripgrep-autoloads
rotate-autoloads rust-mode-autoloads scala-mode-autoloads
sesman-autoloads setup-autoloads shackle-autoloads shrink-path-autoloads
f-autoloads simple-httpd-autoloads sis-autoloads sly-autoloads
smartparens-autoloads solaire-mode-autoloads solo-jazz-theme-autoloads
spacemacs-theme-autoloads speed-type-autoloads spinner-autoloads
srcery-theme-autoloads standard-themes-autoloads
string-inflection-autoloads svg-lib-autoloads symbol-overlay-autoloads
tablist-autoloads tabspaces-autoloads telega-autoloads
rainbow-identifiers-autoloads terminal-focus-reporting-autoloads
test-simple-autoloads theme-emacs-autoloads transient-autoloads
treemacs-all-the-icons-autoloads all-the-icons-autoloads
treemacs-persp-autoloads persp-mode-autoloads
treemacs-projectile-autoloads projectile-autoloads
treemacs-tab-bar-autoloads treemacs-autoloads cfrs-autoloads
posframe-autoloads ht-autoloads hydra-autoloads lv-autoloads
pfuture-autoloads ace-window-autoloads avy-autoloads treepy-autoloads
treesit-auto-autoloads undohist-autoloads utop-autoloads
tuareg-autoloads caml-autoloads valign-autoloads
vc-use-package-autoloads vertico-autoloads visual-fill-column-autoloads
vterm-toggle-autoloads vterm-autoloads vundo-autoloads
wakatime-mode-autoloads web-autoloads s-autoloads web-mode-autoloads
websocket-autoloads wfnames-autoloads wgrep-autoloads
wgsl-mode-autoloads which-key-autoloads winum-autoloads dash-autoloads
with-editor-autoloads compat-autoloads yaml-autoloads
yaml-mode-autoloads yasnippet-snippets-autoloads yasnippet-autoloads
zig-mode-autoloads reformatter-autoloads zmq-autoloads rmc iso-transl
tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks
lisp-float-type elisp-mode mwheel term/ns-win ns-win ucs-normalize
mule-util term/common-win tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-mode lisp-mode prog-mode register
page tab-bar menu-bar rfn-eshadow isearch easymenu timer select
scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors
frame minibuffer nadvice seq simple cl-generic indonesian philippine
cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech
european ethiopic indian cyrillic chinese composite emoji-zwj charscript
charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure
cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp
files window text-properties overlay sha1 md5 base64 format env
code-pages mule custom widget keymap hashtable-print-readable backquote
threads xwidget-internal dbusbind kqueue cocoa ns lcms2 multi-tty
make-network-process emacs)

Memory information:
((conses 16 2411804 703681)
 (symbols 48 84289 6)
 (strings 32 542738 67807)
 (string-bytes 1 15667056)
 (vectors 16 167560)
 (vector-slots 8 3541864 256708)
 (floats 8 1707 10428)
 (intervals 56 209880 5208)
 (buffers 984 54))
--