URL:
  <https://savannah.gnu.org/bugs/?66135>

                 Summary: loop: different error messages describe an identical
(?) error
                   Group: findutils
               Submitter: jbdlt
               Submitted: Wed 28 Aug 2024 01:33:40 PM UTC
                Category: find
                Severity: 3 - Normal
              Item Group: None
                  Status: None
                 Privacy: Public
             Assigned to: None
         Originator Name: 
        Originator Email: 
             Open/Closed: Open
         Discussion Lock: Any
                 Release: 4.10.0
           Fixed Release: None


    _______________________________________________________

Follow-up Comments:


-------------------------------------------------------
Date: Wed 28 Aug 2024 01:33:40 PM UTC By: Jean-Baptiste de la Tour <jbdlt>
== The issue ==

In case of loops, *find* prints a different error message depending on if a
loop includes:
* either: only symbolic links
* or: at least one directory
     
length = 1:

$ ln -s link link
$ find -L -xtype l
find: ‘./link’: Too many levels of symbolic links
$ 


length = 2 / two symbolic links:

$ ln -s symb link
$ ln -s link symb
$ find -L -xtype l
find: ‘./link’: Too many levels of symbolic links
find: ‘./symb’: Too many levels of symbolic links
$ 


length = 2 / one symbolic link and one directory:

$ ln -s . link
$ find -L -xtype l
find: File system loop detected; ‘./link’ is part of the same file system
loop as ‘.’.
$ 


Having two different error messages implies that *find* somehow interprets
these loops differently (and that the user _must know_ the difference and
_must adjust_ their command line consequently).

If *find* _does_ process these loops differently (meaning: *find* requires an
adjustement on the command line (input), or will produce a different result
(output) in some specific cases), then it should be explained in the
[https://www.gnu.org/software/findutils/manual/html_node/find_html/Symbolic-Links.html
GNU Findutils manual in section "2.4.1 Symbolic Links"] where the only
reference on this subject (explaining that both are treated identically) is:
* "This also occurs if a symbolic link exists but points to a file that is
missing [broken link], or where _the symbolic link points to itself [loop]
(directly or indirectly)_."

If *find* processes these loops identically, then there should be only one
type of error message. The message _"File system loop detected […]"_ should
be chosen, being more useful due to:
* properly explaining that it is an actual _loop_ and not simply a number of
links (not forming a loop) exceeding some hard-coded maximum level of
indirection
* providing the start and the end of the loop

This difference or equality of treatment should also be referred to in section
[https://www.gnu.org/software/findutils/manual/html_node/find_html/Error-Messages-From-find.html
12.1 Error Messages From find].

This may not seem important, however:
* If the user *grep*-s the standard error of *find* to filter some error
messages
([https://stackoverflow.com/questions/762348/how-can-i-exclude-all-permission-denied-messages-from-find#762360
see this example]), two different error messages for one error is, for the
user, more work for nothing more to gain.
* When testing some options of *find*, it is more work to assert that
_link-to-link_ loops and _link-to-directory-to-link_ loops produce an
identical result (these extracts above are from my own personal test trying to
understand "-L -xtype l" depending on {broken | link-to-self | link-to-link |
link-to-directory-to-link | normal}).
* It may have an impact on bug reporting. (see below)
* It may have an impact on web searches: requesting help using one error
message might not result in a solution provided by a forum to the same problem
but raised by another error message.

== Concrete case of bug reporting ==

According to bug #65831, the following example is a bug concerning
_link-to-link_ loops:

$ ln -s link link
$ find -L -type l
find: ‘./link’: Too many levels of symbolic links
$ echo $?
1
$ 


I quote: "The exit status is 1. Nothing is printed on stdout."

But this bug says nothing on this following _link-to-directory-to-link_ loop:

$ ln -s . link
$ find -L -type l
find: File system loop detected; ‘./link’ is part of the same file system
loop as ‘.’.
$ echo $?
1
$ 


Same result: The exist status is 1. Nothing is printed on stdout.

However, the error message is _different_. Should it be considered a variation
of the same bug, or should a different bug report be filed? A user who does
not know that both error messages are the same error (after all, they are not
even documented on the
[https://www.gnu.org/software/findutils/manual/html_node/find_html/Error-Messages-From-find.html
12.1 Error Messages From find]), and even going the extra mile of checking
that their bug has not already been reported, may not find the previous bug
due to the error message being different.







    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?66135>

_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/

Attachment: signature.asc
Description: PGP signature

Reply via email to