On Sat, 07 Oct 2017, Hiltjo Posthuma <hil...@codemadness.org> wrote:
> I think this is still not clear: what if a file is hidden due to its path?
> for example: $HOME/.config/somefile
>
> should it be visible or not?
>
> the stest man page uses the term "file" but "path" is meant.
> for example:
>       -d     Test that files are directories.
>
> I think the -a option looks out of place to be honest. Should it be removed
> or at the very least better documented?

I've meditated on this and I have two propositions.

I believe the original motivation for including "-a" at all was to
mirror the behavior of plain "ls". "stest -l ." will in fact work very
similarly to "ls", and "stest -la ." will match the behavior of "ls -a".

Otherwise, stest in any other mode will only look at what it gets from
stat(2), and IMHO any filename/path processing feels out of place there.

So the proposition #1 is to match the behavior of "ls -d", unless using
"stest -l". Currently:

> $ ls -a
> .  ..  .hidden  dir  file
> $ stest -f * .* . ..
> file
> $ stest -d * .* . ..
> dir
> $ stest -af * .* . ..
> file
> .hidden
> $ stest -ad * .* . ..
> dir
> .
> ..
> $ stest -l .
> dir
> file
> $ stest -al .
> .
> ..
> .hidden
> dir
> file

Proposed behavior:

> $ stest -f * .* . ..
> file
> .hidden
> $ stest -d * .* . ..
> dir
> .
> ..
> $ stest -l .
> dir
> file
> $ stest -al .
> .
> ..
> .hidden
> dir
> file

And for the manual:

> -a     In conjunction with -l, also test hidden files.
> [...]
> -l     Test the contents of a directory given as an argument,
>        ignoring hidden files (unless -a is also specified).

Q&D diff:

-       if ((!stat(path, &st) && (FLAG('a') || name[0] != '.')        /* hidden 
files      */
+       if ((!stat(path, &st)
+       && (!FLAG('l') || (FLAG('a') || name[0] != '.'))              /* hidden 
files      */

Seems to be doing the right thing.

Proposal 2 is to get rid of "-a" entirely (or make it a no-op to avoid
breaking existing scripts) and always process hidden files.

<3,K.

Reply via email to