pyfilesystem2 icon indicating copy to clipboard operation
pyfilesystem2 copied to clipboard

Maybe consider a "visibility" info namespace for "hidden" files

Open althonos opened this issue 7 years ago • 3 comments

Hi Will,

now that the typing is merged, I was thinking about adding support for a visibility (or hidden) info namespace, with a simple hidden key.

If that does seem like a good idead, I'll start working on a PR.

Concerned filesystems

In the core library, we could probably support:

  • ZipFS (I read somewhere it supports a hidden flag in the external attributes of each entry)
  • OSFS (I'll detail my idea below).

I could also add support for hidden files once the namespace is stabilised to:

  • ISOFS in fs.archive
  • SMBFS in fs.smbfs

Semantics of OSFS

So here's what the situation about hidden files:

  • Windows has a special attribute for hidden files
  • UNIX has no attribute, but files starting with a dot are considered hidden
  • MacOS follow the UNIX convention, but also has the stat.UF_HIDDEN flag to hide files as well

But if we were to support it directly that way, there would be an ambiguity on MacOS where we would not really know if a file is just a dotted file or a dotted file with the UF_HIDDEN flag as well.

So instead, here's what I propose:

  • on Windows, files are hidden only with the hidden flag
  • on MacOS, files are hidden only with the stat.UF_HIDDEN flag
  • on Linux, files are never hidden

and then addind a HideDotted wrapper that:

  • sets hidden to True if the file is a dotted file
  • raises a ValueError when trying to setinfo with the hidden flag set to avoid ambiguity

althonos avatar May 02 '18 09:05 althonos

Agree with exposing any 'hidden' state with an info namespace. But I'd probably not take dotfiles in to consideration at that level. Since 'hide dotfiles' is more of a convention of the OS and not really of the filesystem.

With regards to a wrapper, how about one which just removes hidden files / directories? It could take two switches omit_dotfiles and omit_hidden. Rather than set the hidden flag, it would just create the illusion that they didn't exist in the filesystem?

willmcgugan avatar May 02 '18 15:05 willmcgugan

With regards to a wrapper, how about one which just removes hidden files / directories? It could take two switches omit_dotfiles and omit_hidden. Rather than set the hidden flag, it would just create the illusion that they didn't exist in the filesystem?

I thought that with a HideDotted wrapper, then you can quite easily filter out the hidden files if needed by your app.

Anyway, I'll open a PR so that we can see we are talking about the same thing ;)

althonos avatar May 02 '18 15:05 althonos

regarding omit_dotfiles, would it make sense to just add that to the walker? I currently use walk.files and exclude anything with /. in the name.

geoffjukes avatar Jun 02 '18 05:06 geoffjukes