From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: sbaugh@catern.com Newsgroups: gmane.emacs.bugs Subject: bug#64088: [PATCH] Make project-root for vc projects return an absolute path Date: Sat, 19 Aug 2023 12:31:03 +0000 (UTC) Message-ID: <87ttsvgqnt.fsf@catern.com> References: <3c6078aa-4089-46fd-18bb-d92be101ca4f@gutov.dev> <2690528f-bfc8-d164-c522-cd2fcf2ba1ba@gutov.dev> <16c053e0-cd4b-295d-2dae-e97bcf25f3b3@gutov.dev> 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="35120"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Cc: Spencer Baugh , 64088@debbugs.gnu.org To: Dmitry Gutov Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sat Aug 19 14:32:22 2023 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 1qXL7t-0008u9-7a for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 19 Aug 2023 14:32:21 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qXL7c-0003Ac-Bd; Sat, 19 Aug 2023 08:32:04 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qXL7Z-0003A1-ME for bug-gnu-emacs@gnu.org; Sat, 19 Aug 2023 08:32:01 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qXL7Z-0003W2-DY for bug-gnu-emacs@gnu.org; Sat, 19 Aug 2023 08:32:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1qXL7a-0005bG-C1 for bug-gnu-emacs@gnu.org; Sat, 19 Aug 2023 08:32:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: sbaugh@catern.com Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 19 Aug 2023 12:32:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 64088 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 64088-submit@debbugs.gnu.org id=B64088.169244828021477 (code B ref 64088); Sat, 19 Aug 2023 12:32:02 +0000 Original-Received: (at 64088) by debbugs.gnu.org; 19 Aug 2023 12:31:20 +0000 Original-Received: from localhost ([127.0.0.1]:49662 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qXL6q-0005aI-Br for submit@debbugs.gnu.org; Sat, 19 Aug 2023 08:31:20 -0400 Original-Received: from s.wrqvtbkv.outbound-mail.sendgrid.net ([149.72.123.24]:24546) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qXL6k-0005Zv-8E for 64088@debbugs.gnu.org; Sat, 19 Aug 2023 08:31:14 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=catern.com; h=from:subject:in-reply-to:references:mime-version:to:cc:content-type: cc:content-type:from:subject:to; s=s1; bh=iDczrhMAxZbMOjAynzt2F1Uo1GWz6qMh9oelMxodlFk=; b=ovOIwuXXVqnghu9RFTLs4QIfjqvTlH5QqbLjCMZBYrdCQPqazVLCCu7KdnOr7WzLqeD0 DFFkvnIzsnP/jriKg8d89Xkdmlwvii6Ms4FaAG1iXHkxemajiFf+91akNeJyDKlmPFpZGr t6n+zQvRpX1h97L/RWJW9CyEKCzQU4wcWH/1Hb5gU6bRR2rPPtn7FdFTfhlZW9rTeReXuk 1T75jT4QJWTCuSxCO1v2nDPe/4mzWs4kStViV5olW47U1eubjTt/qaIfC6Zr1GyK4WmqY0 Me1Y6rNFEkywB8EpN+R+NxWO6Sq/5564cjXvVk5aVdr7I71QZ7w2Itu3F0m6zQQQ== Original-Received: by filterdrecv-d7bbbc8bf-nzpnk with SMTP id filterdrecv-d7bbbc8bf-nzpnk-1-64E0B607-2B 2023-08-19 12:31:03.473763158 +0000 UTC m=+8686270.417954681 Original-Received: from earth.catern.com (unknown) by geopod-ismtpd-canary-0 (SG) with ESMTP id NrmXQvPdQhW6JmU9qvcRYw Sat, 19 Aug 2023 12:31:03.384 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=::1; helo=localhost; envelope-from=sbaugh@catern.com; receiver=gutov.dev Original-Received: from localhost (localhost [IPv6:::1]) by earth.catern.com (Postfix) with ESMTPSA id F3D526001E; Sat, 19 Aug 2023 08:31:02 -0400 (EDT) In-Reply-To: <16c053e0-cd4b-295d-2dae-e97bcf25f3b3@gutov.dev> (Dmitry Gutov's message of "Sat, 12 Aug 2023 03:45:26 +0300") X-SG-EID: ZgbRq7gjGrt0q/Pjvxk7wM0yQFRdOkTJAtEbkjCkHbLL5XPXsLI6mNQnuo3Ha4hW+Iw/0RZxyhmiOX0k+1lf72g90WjWkmEnfcveY6XYW0SH0usqaZy5zMOqHeJmO2P8PHPtHIKsv80C9vRPAq4QCzbquhW7QQlxSOD/4SznPDMllDhgEpXlTdWHaThibzKTgAtuwwSZLbpztu4u0vWKsg== X-Entity-ID: d/0VcHixlS0t7iB1YKCv4Q== 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-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:267860 Archived-At: --=-=-= Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Dmitry Gutov writes: > On 11/07/2023 02:45, Spencer Baugh wrote: >> Dmitry Gutov writes: >>> On 27/06/2023 23:01, Spencer Baugh wrote: >>>> OK, how about this? >>> >>> Maybe we should go in the other direction? And call >>> abbreviate-file-name on them? >>> >>> Because otherwise in project-prompt-project-dir we'll always show the >>> expanded directory names, taking up extra space and usually repeating >>> the full name of the user's home directory for no good reason. >> That seems reasonable if we let-bind directory-abbrev-alist to nil >> around it; otherwise we'll be dependent on the user's configuration and >> we might add a directory in one way, and then they add a new value to >> directory-abbrev-alist and we add it again a second way. > > That's also fair. > >> Although maybe that's fine? And probably users of >> directory-abbrev-alist would like to have those abbreviations show up in >> project-prompt-project-dir. > > They probably would. But indeed if the list was saved with one > configuration, and read with another, it could lead to a mistake. > >> Also we could always call abbreviate-file-name at >> project-prompt-project-dir time. > > Meaning it will be called N times (for the number of projects) every > time the list is displayed, instead of just once, when the project is > saved/visited. But maybe it's fine too? How slow could that be? I was sad about this but I think I've got the solution now: We just maintain project--list in abbreviated form and project-list-file in expanded form. I think that solves all the problems: the persistent file is independent of user configuration, so if the user changes their abbreviations they'll get new ones the next time the file is read (presumably the next time they run Emacs). But project--list is abbreviated, so project-prompt-project-dir gets abbreviated dirs. It does mean that if they change their directory-abbrev-alist while Emacs is running they could get duplicate entries, but that already could happen before this patch, and it's not a big problem IMO. See patch below. --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0001-Expand-project-file-names-before-storing-them.patch >From 193a105b40b3a002f51e1f59dd2a3d48443e11fe Mon Sep 17 00:00:00 2001 From: Spencer Baugh Date: Sat, 19 Aug 2023 08:24:45 -0400 Subject: [PATCH] Expand project file names before storing them Before, whatever project-root returned, we stored as the root directory of the project in project-list and project-list-file. This could lead to duplicate entries or bad behavior if projects were accessed by different file names, e.g. both /home/user/src/emacs and ~/src/emacs. Now project-list-file contains only expanded paths and project--list contains only abbreviated paths. We abbreviate filenames before setting project--list, and expand filenames before writing to project-list-file. * lisp/progmodes/project.el (project--write-project-list): Call expand-file-name. (project--read-project-list, project-remember-project) (project--remove-from-project-list): Call abbreviate-file-name. --- lisp/progmodes/project.el | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index 11fa93fb70d..e99a9061275 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -1586,7 +1586,7 @@ project--read-project-list (when (file-exists-p filename) (with-temp-buffer (insert-file-contents filename) - (read (current-buffer))))) + (mapcar #'abbreviate-file-name (read (current-buffer)))))) (unless (seq-every-p (lambda (elt) (stringp (car-safe elt))) project--list) @@ -1606,7 +1606,7 @@ project--write-project-list (insert ";;; -*- lisp-data -*-\n") (let ((print-length nil) (print-level nil)) - (pp project--list (current-buffer))) + (pp (mapcar #'expand-file-name project--list) (current-buffer))) (write-region nil nil filename nil 'silent)))) ;;;###autoload @@ -1615,7 +1615,7 @@ project-remember-project Save the result in `project-list-file' if the list of projects has changed, and NO-WRITE is nil." (project--ensure-read-project-list) - (let ((dir (project-root pr))) + (let ((dir (abbreviate-file-name (project-root pr)))) (unless (equal (caar project--list) dir) (dolist (ent project--list) (when (equal dir (car ent)) @@ -1631,7 +1631,7 @@ project--remove-from-project-list from the list using REPORT-MESSAGE, which is a format string passed to `message' as its first argument." (project--ensure-read-project-list) - (when-let ((ent (assoc project-root project--list))) + (when-let ((ent (assoc (abbreviate-file-name project-root) project--list))) (setq project--list (delq ent project--list)) (message report-message project-root) (project--write-project-list))) -- 2.41.0 --=-=-=--