On Mon, Mar 24, 2025 at 9:03 AM Eli Zaretskii <eliz@gnu.org> wrote:
> Cc: 77122@debbugs.gnu.org, Dmitry Gutov <dmitry@gutov.dev>
> From: Ship Mints <shipmints@gmail.com>
> Date: Mon, 24 Mar 2025 06:40:29 -0400
>
> Since I suggested it be optional, it would be off by default, right?  If you think you'd want to canonicalize
> paths to project roots in some places and not others, perhaps we could contrive a project sentinel file ala .
> project-notruename.el/d or .project-config.el/d, and for people that want to do things in code, a list project
> can consult.

AFAIR, you didn't respond to my suggest to try a different solution.
Namely, instead of changing the file name by resolving links,
something that could cause problems for some people, how about using
file-equal-p to avoid duplication of projects in these cases?  If my
proposal makes sense, it will allow use to avoid duplication without
changing the file names, because symlinks will be chased internally,
only where we decide whether two projects are different or not.

This is better than having an optional behavior, because inevitably
someone will want to use this option, but also wouldn't like his/her
project directories appear under their resolved names, and then we are
back at the same problem.

I did consider it.  The most popular project objects, project-vc, and transient are defined as (list 'vc vcbackend dir) and (cons 'transient dir), respectively and vc objects are cached.  If we don't canonicalize the dir name, we can't find the vc cache entry if a probe is attempted from another dir, even if that dir morally is equivalent.  One can't change the embedded dir on the way out of without creating two objects, one with the first location to create the cache entry, and a second from an equivalent convenience dir.

I'm curious to hear more about why people would object to (project-root project-obj) being canonicalized.  I don't think many people ever manually enter project dirs.  The persisted known projects, I'd think, would also benefit from no duplicates.

If you see the place in project.el where file-equal-p helps, I'll happily hack on it.