emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 255b7e1a046: Expand project file names before storing them


From: Dmitry Gutov
Subject: master 255b7e1a046: Expand project file names before storing them
Date: Tue, 22 Aug 2023 20:12:51 -0400 (EDT)

branch: master
commit 255b7e1a046cbf9a745d58080d74983bfe205859
Author: Spencer Baugh <sbaugh@catern.com>
Commit: Dmitry Gutov <dmitry@gutov.dev>

    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.  We only do this for local files, though, to avoid
    making remote connections; the situation will still be bad for remote
    projects, but at least this is an improvement.
    
    * 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 | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index 6f35b3cc1b1..32eb3bbb89f 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -1597,7 +1597,12 @@ With some possible metadata (to be decided).")
           (when (file-exists-p filename)
             (with-temp-buffer
               (insert-file-contents filename)
-              (read (current-buffer)))))
+              (mapcar
+               (lambda (elem)
+                 (let ((name (car elem)))
+                   (list (if (file-remote-p name) name
+                           (abbreviate-file-name name)))))
+               (read (current-buffer))))))
     (unless (seq-every-p
              (lambda (elt) (stringp (car-safe elt)))
              project--list)
@@ -1617,7 +1622,12 @@ With some possible metadata (to be decided).")
       (insert ";;; -*- lisp-data -*-\n")
       (let ((print-length nil)
             (print-level nil))
-        (pp project--list (current-buffer)))
+        (pp (mapcar (lambda (elem)
+                      (let ((name (car elem)))
+                        (list (if (file-remote-p name) name
+                                (expand-file-name name)))))
+                    project--list)
+            (current-buffer)))
       (write-region nil nil filename nil 'silent))))
 
 ;;;###autoload
@@ -1626,7 +1636,7 @@ With some possible metadata (to be decided).")
 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))
@@ -1642,7 +1652,7 @@ result in `project-list-file'.  Announce the project's 
removal
 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)))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]