Internal structure, and some explanations. More...
Internal structure, and some explanations.
The ignore lists are first loaded into a global array. Then they should be distributed onto the directory structure; all applicable patterns get referenced by a directory.
Eg this directory tree
root +-- dirA +-- dirB +-- dirB1
with these ignore patterns
*.tmp **~ dirA/tmp*.lst dirB/**/*.o
would result in
root: *.tmp, **~ +-- dirA **~, tmp*.lst +-- dirB **/*.o +-- dirB1 **/*.o
Ignore patterns apply only to new entries, ie. entries already known stay known.
That's why we need an "add" command:
$ fsvs ignore '/proc/*'
$ fsvs add /proc/stat
would version /proc/stat
, but nothing else from /proc
.
A negative ignore-list is named take list.
The storage format is
header: number of entries %u\n pattern\0\n pattern\0\n
Whitespace are not allowed at the start of a pattern; use ./*
or something similar.
As low-level library pcre is used, the given shell-patterns are translated from the shell-like syntax into PCREs.
* -> [^/]* ** -> .* ? -> . . -> \.
All other \W
are escaped.