From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Robert Pluim Newsgroups: gmane.emacs.bugs Subject: bug#57503: 28.1.91; package-selected-packages should not be saved to custom-file Date: Fri, 02 Sep 2022 16:33:52 +0200 Message-ID: <87bkrxg81b.fsf@gmail.com> References: <87bks0368n.fsf@fastmail.fm> <87h71pc450.fsf@posteo.net> <87y1v1j4os.fsf@gnus.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="20075"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Joost Kremers , 57503@debbugs.gnu.org, Philip Kaludercic To: Lars Ingebrigtsen Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Fri Sep 02 16:35:11 2022 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oU7lG-00052X-UC for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 02 Sep 2022 16:35:11 +0200 Original-Received: from localhost ([::1]:36838 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oU7lF-0005VJ-Rt for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 02 Sep 2022 10:35:09 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:41014) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oU7l8-0005Uv-VC for bug-gnu-emacs@gnu.org; Fri, 02 Sep 2022 10:35:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:57627) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oU7l8-0004iS-MY for bug-gnu-emacs@gnu.org; Fri, 02 Sep 2022 10:35:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1oU7l8-0006ds-Ck for bug-gnu-emacs@gnu.org; Fri, 02 Sep 2022 10:35:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Robert Pluim Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 02 Sep 2022 14:35:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 57503 X-GNU-PR-Package: emacs Original-Received: via spool by 57503-submit@debbugs.gnu.org id=B57503.166212924325459 (code B ref 57503); Fri, 02 Sep 2022 14:35:02 +0000 Original-Received: (at 57503) by debbugs.gnu.org; 2 Sep 2022 14:34:03 +0000 Original-Received: from localhost ([127.0.0.1]:47376 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oU7kB-0006cZ-1K for submit@debbugs.gnu.org; Fri, 02 Sep 2022 10:34:03 -0400 Original-Received: from mail-wr1-f47.google.com ([209.85.221.47]:43889) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oU7k8-0006c5-M2 for 57503@debbugs.gnu.org; Fri, 02 Sep 2022 10:34:01 -0400 Original-Received: by mail-wr1-f47.google.com with SMTP id u18so2558485wrq.10 for <57503@debbugs.gnu.org>; Fri, 02 Sep 2022 07:34:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:from:to:cc:subject:date; bh=a3kKrvZUNtyoq/fSq9yZPXukGmc6z4GzYV6m53wWdy0=; b=QkHF3MAn2FDZtvA2i7r0M9hrc8nAECGD3UIrLERwXLI6ysycNZMemSKHQ+rETlhmoK /mlaD2QykO7igWUAjyu9ENoXbMZndNfk/CHjukB7nujBS02olXauuwwI11Wg6Xd7eLug g9M4CnAjNGi+EiO0NQPx6fkYGF+i/R8lm9KEbtn4jEARSs4v8P3nc9i7AowuRZfKsIiB g2plOyxdS1ARaAP+iOb0C5lOMzZXg0Bd+h/yc/IRiciSb2HrXsdwIIsOsUaHslmCqF77 jmbPmwExiRl3ow1VCPs6zUnG0VXGjV5Dn9NXORS6HPoawVPHRzutk96axgR9aF5OpGa3 pZrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:x-gm-message-state:from:to:cc:subject:date; bh=a3kKrvZUNtyoq/fSq9yZPXukGmc6z4GzYV6m53wWdy0=; b=8HQlthiAmDsthP4Up7a5QenWH+D4tZDWvaPh3RJ7QJ6rNM7s/iEP+CgdCNlDfa6wxa SeUXYDf71EXzdw2nY7BKHnZkLEzgCb7Pbos9mhttfvGxZEC1Ir5S8j46nn/cka3qgrp6 2fW+vcNmNG42dPkWEwoR1wlqXJZ/vs6ndUbN3cw0HprrNCoi/4dyNb49pi60TMJ6Nj1B eh7ggaChocMM0Of1joImvNRlVKD65TPQgMk6wTrC8OdkLRXWFMgSZjOvL/6QIH8SEmLV Yd6OCCD1JWvRJqzpMlDgZ05N/icb9qkAosggl2Pltg72hg6JygaL4CFEfOTZIwgGZI2I dk3Q== X-Gm-Message-State: ACgBeo0Bz6zCvacSHQRcypgs4yxbLp67fh0cpWJMgB4b6y9ZFJ9rC5HS 2Yz9E9S3HhKqcX4VLbNQGDnBbzbkLqA= X-Google-Smtp-Source: AA6agR4a4N96LnriiUy1A6LFWghJfKBoLYEl3Ue+55VBxLpLkcwcXuIol84kC+SD0t5vywRr2e5Xsg== X-Received: by 2002:a05:6000:795:b0:226:e8d9:828c with SMTP id bu21-20020a056000079500b00226e8d9828cmr8785247wrb.464.1662129234328; Fri, 02 Sep 2022 07:33:54 -0700 (PDT) Original-Received: from rltb ([2a01:e0a:3f3:fb50:ac58:d3dc:7386:dfaf]) by smtp.gmail.com with ESMTPSA id x13-20020a1c7c0d000000b003a5ca627333sm8199308wmc.8.2022.09.02.07.33.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 02 Sep 2022 07:33:53 -0700 (PDT) In-Reply-To: <87y1v1j4os.fsf@gnus.org> (Lars Ingebrigtsen's message of "Fri, 02 Sep 2022 15:17:55 +0200") X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:241350 Archived-At: --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable >>>>> On Fri, 02 Sep 2022 15:17:55 +0200, Lars Ingebrigtsen said: Lars> Philip Kaludercic writes: >> How about writing it into a file like >> "~/.config/emacs/elpa/selected-packages"? Lars> The defcustom could just be changed to a define-multisession-vari= able. For values of 'just' that are a little bigger than changing that one line =F0=9F=98=80 rough=CA=BCn=CA=BCready patch attached. Seems to work fine. I=CA=BCve not t= ested the interaction with a .emacs that has package-selected-packages set, but if I understand multisession variables correctly that will just be ignored. --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0001-Make-package-selected-packages-a-multisession-variab.patch >From 1a84bfbc1b568da6bf63bf9679a317b29f78d0e9 Mon Sep 17 00:00:00 2001 From: Robert Pluim Date: Fri, 2 Sep 2022 16:28:11 +0200 Subject: [PATCH] Make package-selected-packages a multisession variable To: emacs-devel@gnu.org --- lisp/emacs-lisp/package.el | 63 ++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 33 deletions(-) diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index ed23ee5f22..cda55bd90e 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -384,7 +384,8 @@ package-unsigned-archives :risky t :version "24.4") -(defcustom package-selected-packages nil +(require 'multisession) +(define-multisession-variable package-selected-packages nil "Store here packages installed explicitly by user. This variable is fed automatically by Emacs when installing a new package. This variable is used by `package-autoremove' to decide @@ -395,8 +396,8 @@ package-selected-packages 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." - :version "25.1" - :type '(repeat symbol)) + :synchronized t + :package "package") (defcustom package-native-compile nil "Non-nil means to natively compile packages as part of their installation. @@ -1907,22 +1908,15 @@ package--find-non-dependencies unless (memq name dep-list) collect name))) -(defun package--save-selected-packages (&optional value) - "Set and save `package-selected-packages' to VALUE." - (when value - (setq package-selected-packages value)) - (if after-init-time - (customize-save-variable 'package-selected-packages package-selected-packages) - (add-hook 'after-init-hook #'package--save-selected-packages))) - (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) - (package--save-selected-packages (package--find-non-dependencies))) - (memq pkg package-selected-packages)) + (unless (consp (multisession-value package-selected-packages)) + (setf (multisession-value package-selected-packages) + (package--find-non-dependencies))) + (memq pkg (multisession-value package-selected-packages))) (defun package--get-deps (pkgs) (let ((seen '())) @@ -1950,7 +1944,7 @@ 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 (package--get-deps package-selected-packages))) + (let ((needed (package--get-deps (multisession-value package-selected-packages)))) (cl-loop for p in (mapcar #'car package-alist) unless (or (memq p needed) ;; Do not auto-remove external packages. @@ -2151,8 +2145,8 @@ package-install (package-desc-name pkg) pkg))) (unless (or dont-select (package--user-selected-p name)) - (package--save-selected-packages - (cons name package-selected-packages))) + (setf (multisession-value package-selected-packages) + (cons name (multisession-value package-selected-packages)))) (if-let* ((transaction (if (package-desc-p pkg) (unless (package-installed-p pkg) @@ -2284,8 +2278,8 @@ package-install-from-buffer ;; Install the package itself. (package-unpack pkg-desc) (unless (package--user-selected-p name) - (package--save-selected-packages - (cons name package-selected-packages))) + (setf (multisession-value package-selected-packages) + (cons name (multisession-value package-selected-packages)))) (package--quickstart-maybe-refresh) pkg-desc)) @@ -2317,9 +2311,9 @@ package-install-selected-packages ;; 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) + (if (not (multisession-value package-selected-packages)) (message "`package-selected-packages' is empty, nothing to install") - (let* ((not-installed (seq-remove #'package-installed-p package-selected-packages)) + (let* ((not-installed (seq-remove #'package-installed-p (multisession-value package-selected-packages))) (available (seq-filter (lambda (p) (assq p package-archive-contents)) not-installed)) (difference (- (length not-installed) (length available)))) (cond @@ -2393,7 +2387,8 @@ package-delete ;; Don't deselect if this is an older version of an ;; upgraded package. (package--newest-p pkg-desc)) - (package--save-selected-packages (remove name package-selected-packages))) + (setf (multisession-value package-selected-packages) + (remove name (multisession-value package-selected-packages)))) (cond ((not (string-prefix-p (file-name-as-directory (expand-file-name package-user-dir)) (expand-file-name dir))) @@ -2485,7 +2480,7 @@ package-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 + (when (or (multisession-value package-selected-packages) (yes-or-no-p (format-message "`package-selected-packages' is empty! Really remove ALL packages? "))) @@ -3730,15 +3725,17 @@ package--update-selected-packages ADD and REMOVE must be disjoint lists of package names (or `package-desc' objects) to be added and removed to the selected packages list, respectively." - (dolist (p add) - (cl-pushnew (if (package-desc-p p) (package-desc-name p) p) - package-selected-packages)) - (dolist (p remove) - (setq package-selected-packages - (remove (if (package-desc-p p) (package-desc-name p) p) - package-selected-packages))) - (when (or add remove) - (package--save-selected-packages package-selected-packages))) + (let ((packages (multisession-value package-selected-packages))) + (dolist (p add) + (cl-pushnew (if (package-desc-p p) (package-desc-name p) p) + packages)) + (dolist (p remove) + (setq packages + (remove (if (package-desc-p p) (package-desc-name p) p) + packages))) + (when (or add remove) + (setf (multisession-value package-selected-packages) + packages)))) (defun package-menu-execute (&optional noquery) "Perform marked Package Menu actions. @@ -3797,7 +3794,7 @@ package-menu-execute ;; Packages being upgraded are not marked as selected. (package--update-selected-packages .install .delete) (package-menu--perform-transaction install-list delete-list) - (when package-selected-packages + (when (multisession-value package-selected-packages) (if-let* ((removable (package--removable-packages))) (message "Operation finished. Packages that are no longer needed: %d. Type `%s' to remove them" (length removable) -- 2.37.2.382.g795ea8776b --=-=-=--