Subject: bug#66649: 29.1; `project-remember-projects-under' behavior doesn't match its doc

From: Dmitry Gutov <[email-masked]>
Date: Fri, 20 Oct 2023 18:46:41 +0300

Hi Damien, thanks for the report.

On 20/10/2023 14:48, Damien Cassou wrote:
> the documentation of `project-remember-projects-under' is:
> 
>        "Index all projects below a directory DIR.  If RECURSIVE is
>      non-nil, recurse into all subdirectories to find more projects.
>      After finishing, a message is printed summarizing the progress.  The
>      function returns the number of detected projects."
> 
> Regardless of the value of RECURSIVE, I understand from the above that
> all child directories of the DIR argument will be investigated. The doc
> doesn't say anything about investigating if DIR is itself a project or
> not so I think it would make sense if the function wasn't.
> 
> But the code says otherwise (as far as I understand it):
> 
> (defun project-remember-projects-under (dir &optional recursive)
>    (let ((queue (list dir)))
>      ;; …
>      (while queue
>        (when-let ((subdir (pop queue))
>                   ((file-directory-p subdir)))
>          ;; maybe register `subdir' as a project
>          ;; …
>          (when (and recursive (file-directory-p subdir))
>            (setq queue (nconc (directory-files subdir …) queue)))))))
> 
> The code above seems to investigate DIR first and, if RECURSIVE is
> non-nil, look at the directories below it.
> 
> Also, the second check (file-directory-p subdir) seems unnecessary
> because of the first one.
> 
> There is a part of the code I don't understand:
> 
>    (unless (eq recursive 'in-progress)
> 
> It seems nowhere in the code nor in the documentation do we say anything
> about this 'in-progress special value. Is it a left over from a previous
> (recursive) version of the algorithm?

Philip, could you look into this?