bpath cleans to ".", but paths "./*" clean to "*".
This results in "." not found as prefix of "*" except
for hidden files and dirs.
Skip the prefix check if bpath == "." as this is
lexically equivalent to "", which could satisfy the
check.
The interface has one method returning the `FileInfo` and a flag telling if `Lstat` was called or not.
```go
type Lstater interface {
LstatIfPossible(name string) (os.FileInfo, bool, error)
}
```
`Lstat` is currently only supported by the `OsFs`, but since that `Fs` can be used in others, they will also support it by proxy.
But not always, so hence this optional interface.
The interface is in this commit implemented for:
* BasePathFs
* OsFs
* CopyOnWriteFs
* ReadOnlyFs
Fixes#75
A common mistake in using the BasePathFs is to give it a real
OS absolute file path instead of a virtual one relative to the virtual base.
This commit adds some tests and returns an error on Windows in this case.
On Unix we have to train the users to do a better job.
See https://github.com/spf13/hugo/issues/1800
* add a BasePathFs implemented as FilterFs:
The BasePathFs restricts all operations to a given path within an Fs.
The given file name to the operations on this Fs will be prepended
with the base path before calling the base Fs.
Any file name (after filepath.Clean()) outside this base path will be
treated as non existing file.
* fix meaning of "facere" - "facio" means "I do", "facere" is the base
form