1
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# File Name Glob Patterns
2
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
3
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
A [glob pattern][glob] is a text expression that matches one or more
4
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
file names using wildcards familiar to most users of a command line.
5
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
For example, `*` is a glob that matches any name at all, and
6
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`Readme.txt` is a glob that matches exactly one file. For purposes of
7
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Fossil's globs, a complete path name is just a string,
8
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
and the globs do not apply any special meaning to the directory part
9
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
of the name. Thus, the glob `*` matches any name, including any
10
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
directory prefix, and `*/*` matches a name with _one or more_
11
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
directory components.
12
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
13
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
A glob should not be confused with a [regular expression][regexp] (RE)
14
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
even though they use some of the same special characters for similar
15
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
purposes. [They are not fully compatible][greinc] pattern
16
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
matching languages. Fossil uses globs when matching file names with the
17
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
settings described in this document, not REs.
18
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
19
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[glob]: https://en.wikipedia.org/wiki/Glob_(programming)
20
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[greinc]: https://unix.stackexchange.com/a/57958/138
21
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[regexp]: https://en.wikipedia.org/wiki/Regular_expression
22
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
23
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[Fossil’s `*-glob` settings](#settings) hold one or more patterns to cause Fossil to
24
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
give matching named files special treatment. Glob patterns are also
25
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
accepted in options to certain commands and as query parameters to
26
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
certain Fossil UI web pages. For consistency, settings such as
27
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`empty-dirs` are parsed as a glob even though they aren’t then *applied*
28
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
as a glob since it allows [the same syntax rules](#syntax) to apply.
29
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
30
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Where Fossil also accepts globs in commands, this handling may interact
31
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
with your OS’s command shell or its C runtime system, because they may
32
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
have their own glob pattern handling. We will detail such interactions
33
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
below.
34
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
35
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
36
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## <a id="syntax"></a>Syntax
37
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
38
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Where Fossil accepts glob patterns, it will usually accept a *list* of
39
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
individual patterns separated from the others by whitespace or commas.
40
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
41
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The parser allows whitespace and commas in a pattern by quoting _the
42
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
entire pattern_ with either single or double quotation marks. Internal
43
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
quotation marks are treated literally. Moreover, a pattern that begins
44
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
with a quote mark ends when the first instance of the same mark occurs,
45
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
_not_ at a whitespace or comma. Thus, this:
46
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
47
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"foo bar"qux
48
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
49
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
…constitutes _two_ patterns rather than one with an embedded space, in
50
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
contravention of normal shell quoting rules.
51
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
52
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
A list matches a file when any pattern in that list matches.
53
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
54
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
A pattern must consume and
55
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
match the *entire* file name to succeed. Partial matches are failed matches.
56
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
57
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Most characters in a glob pattern consume a single character of the file
58
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
name and must match it exactly. For instance, “a” in a glob simply
59
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
matches the letter “a” in the file name unless it is inside a special
60
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
character sequence.
61
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
62
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Other characters have special meaning, and they may include otherwise
63
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
normal characters to give them special meaning:
64
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
65
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
:Pattern |:Effect
66
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---------------------------------------------------------------------
67
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`*` | Matches any sequence of zero or more characters
68
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`?` | Matches exactly one character
69
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`[...]` | Matches one character from the enclosed list of characters
70
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`[^...]` | Matches one character *not* in the enclosed list
71
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
72
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Note that unlike [POSIX globs][pg], these special characters and
73
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
sequences are allowed to match `/` directory separators as well as the
74
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
initial `.` in the name of a hidden file or directory. This is because
75
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Fossil file names are stored as complete path names. The distinction
76
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
between file name and directory name is “underneath” Fossil in this sense.
77
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
78
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[pg]: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_13
79
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
80
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The bracket expressions above require some additional explanation:
81
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
82
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* A range of characters may be specified with `-`, so `[a-f]` matches
83
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
exactly the same characters as `[abcdef]`. Ranges reflect Unicode
84
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
code points without any locale-specific collation sequence.
85
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Therefore, this particular sequence never matches the Unicode
86
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
pre-composed character `é`, for example. (U+00E9)
87
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
88
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* This dependence on character/code point ordering may have other
89
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
effects to surprise you. For example, the glob `[A-z]` not only
90
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
matches upper and lowercase ASCII letters, it also matches several
91
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
punctuation characters placed between `Z` and `a` in both ASCII and
92
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Unicode: `[`, `\`, `]`, `^`, `_`, and <tt>\`</tt>.
93
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
94
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* You may include a literal `-` in a list by placing it last, just
95
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
before the `]`.
96
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
97
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* You may include a literal `]` in a list by making the first
98
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
character after the `[` or `[^`. At any other place, `]` ends the list.
99
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
100
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* You may include a literal `^` in a list by placing it anywhere
101
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
except after the opening `[`.
102
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
103
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* Beware that a range must be specified from low value to high
104
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
value: `[z-a]` does not match any character at all, preventing the
105
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
entire glob from matching.
106
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
107
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Some examples of character lists:
108
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
109
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
:Pattern |:Effect
110
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---------------------------------------------------------------------
111
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`[a-d]` | Matches any one of `a`, `b`, `c`, or `d` but not `ä`
112
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`[^a-d]` | Matches exactly one character other than `a`, `b`, `c`, or `d`
113
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`[0-9a-fA-F]` | Matches exactly one hexadecimal digit
114
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`[a-]` | Matches either `a` or `-`
115
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`[][]` | Matches either `]` or `[`
116
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`[^]]` | Matches exactly one character other than `]`
117
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`[]^]` | Matches either `]` or `^`
118
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`[^-]` | Matches exactly one character other than `-`
119
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
120
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
White space means the specific ASCII characters TAB, LF, VT, FF, CR,
121
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
and SPACE. Note that this does not include any of the many additional
122
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
spacing characters available in Unicode such as
123
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
U+00A0, NO-BREAK SPACE.
124
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
125
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Because both LF and CR are white space and leading and trailing spaces
126
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
are stripped from each glob in a list, a list of globs may be broken
127
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
into lines between globs when the list is stored in a file, as for a
128
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
versioned setting.
129
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
130
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Note that 'single quotes' and "double quotes" are the ASCII straight
131
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
quote characters, not any of the other quotation marks provided in
132
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Unicode and specifically not the "curly" quotes preferred by
133
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
typesetters and word processors.
134
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
135
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
136
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## File Names to Match
137
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
138
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Before it is compared to a glob pattern, each file name is transformed
139
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to a canonical form:
140
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
141
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* all directory separators are changed to `/`
142
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* redundant slashes are removed
143
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* all `.` path components are removed
144
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* all `..` path components are resolved
145
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
146
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(There are additional details we are ignoring here, but they cover rare
147
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
edge cases and follow the principle of least surprise.)
148
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
149
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The glob must match the *entire* canonical file name to be considered a
150
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
match.
151
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
152
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The goal is to have a name that is the simplest possible for each
153
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
particular file, and that will be the same regardless of the platform
154
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
you run Fossil on. This is important when you have a repository cloned
155
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from multiple platforms and have globs in versioned settings: you want
156
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
those settings to be interpreted the same way everywhere.
157
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
158
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Beware, however, that all glob matching in Fossil is case sensitive
159
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
regardless of host platform and file system. This will not be a surprise
160
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
on POSIX platforms where file names are usually treated case
161
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
sensitively. However, most Windows file systems are case preserving but
162
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
case insensitive. That is, on Windows, the names `ReadMe` and `README`
163
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
are usually names of the same file. The same is true in other cases,
164
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
such as by default on macOS file systems and in the file system drivers
165
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for Windows file systems running on non-Windows systems. (e.g. exfat on
166
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Linux.) Therefore, write your Fossil glob patterns to match the name of
167
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the file as checked into the repository.
168
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
169
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Some example cases:
170
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
171
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
:Pattern |:Effect
172
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
--------------------------------------------------------------------------------
173
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`README` | Matches only a file named `README` in the root of the tree. It does not match a file named `src/README` because it does not include any characters that consume (and match) the `src/` part.
174
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`*/README` | Matches `src/README`. Unlike Unix file globs, it also matches `src/library/README`. However it does not match the file `README` in the root of the tree.
175
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`*README` | Matches `src/README` as well as the file `README` in the root of the tree as well as `foo/bar/README` or any other file named `README` in the tree. However, it also matches `A-DIFFERENT-README` and `src/DO-NOT-README`, or any other file whose name ends with `README`.
176
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`src/README` | Matches `src\README` on Windows because all directory separators are rewritten as `/` in the canonical name before the glob is matched. This makes it much easier to write globs that work on both Unix and Windows.
177
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`*.[ch]` | Matches every C source or header file in the tree at the root or at any depth. Again, this is (deliberately) different from Unix file globs and Windows wild cards.
178
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
179
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
180
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Where Globs are Used
181
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
182
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### <a id="settings"></a>Settings that are Globs
183
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
184
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
These settings are all lists of glob patterns:
185
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
186
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
:Setting |:Description
187
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
--------------------------------------------------------------------------------
188
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`binary-glob` | Files that should be treated as binary files for committing and merging purposes
189
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`clean-glob` | Files that the [`clean`][] command will delete without prompting or allowing undo
190
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`crlf-glob` | Files in which it is okay to have `CR`, `CR`+`LF` or mixed line endings. Set to "`*`" to disable CR+LF checking
191
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`crnl-glob` | Alias for the `crlf-glob` setting
192
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`encoding-glob` | Files that the [`commit`][] command will ignore when issuing warnings about text files that may use another encoding than ASCII or UTF-8. Set to "`*`" to disable encoding checking
193
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`ignore-glob` | Files that the [`add`][], [`addremove`][], [`clean`][], and [`extras`][] commands will ignore
194
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`keep-glob` | Files that the [`clean`][] command will keep
195
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
196
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
All may be [versioned, local, or global](settings.wiki). Use `fossil
197
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
settings` to manage local and global settings, or a file in the
198
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
repository's `.fossil-settings/` folder at the root of the tree named
199
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for each for versioned setting.
200
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
201
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Using versioned settings for these not only has the advantage that
202
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
they are tracked in the repository just like the rest of your project,
203
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
but you can more easily keep longer lists of more complicated glob
204
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
patterns than would be practical in either local or global settings.
205
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
206
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The `ignore-glob` is an example of one setting that frequently grows
207
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to be an elaborate list of files that should be ignored by most
208
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
commands. This is especially true when one (or more) IDEs are used in
209
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
a project because each IDE has its own ideas of how and where to cache
210
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
information that speeds up its browsing and building tasks but which
211
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
need not be preserved in your project's history.
212
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
213
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Although the `empty-dirs` setting is not a list of glob patterns as
214
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
such, it is *parsed* that way for consistency among the settings,
215
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
allowing [the list parsing rules above](#syntax) to apply.
216
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
217
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
218
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### <a id="commands"></a>Commands that Refer to Globs
219
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
220
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Many of the commands that respect the settings containing globs have
221
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
options to override some or all of the settings. These options are
222
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
usually named to correspond to the setting they override, such as
223
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`--ignore` to override the `ignore-glob` setting. These commands are:
224
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
225
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* [`add`][]
226
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* [`addremove`][]
227
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* [`changes`][]
228
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* [`clean`][]
229
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* [`commit`][]
230
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* [`extras`][]
231
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* [`merge`][]
232
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* [`settings`][]
233
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* [`status`][]
234
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* [`touch`][]
235
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* [`unset`][]
236
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
237
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The commands [`tarball`][] and [`zip`][] produce compressed archives of a
238
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
specific checkin. They may be further restricted by options that
239
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
specify glob patterns that name files to include or exclude rather
240
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
than archiving the entire checkin.
241
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
242
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The commands [`http`][], [`cgi`][], [`server`][], and [`ui`][] that
243
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
implement or support with web servers provide a mechanism to name some
244
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
files to serve with static content where a list of glob patterns
245
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
specifies what content may be served.
246
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
247
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`add`]: /help/add
248
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`addremove`]: /help/addremove
249
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`changes`]: /help/changes
250
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`clean`]: /help/clean
251
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`commit`]: /help/commit
252
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`extras`]: /help/extras
253
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`merge`]: /help/merge
254
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`settings`]: /help/settings
255
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`status`]: /help/status
256
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`touch`]: /help/touch
257
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`unset`]: /help/unset
258
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
259
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`tarball`]: /help/tarball
260
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`zip`]: /help/zip
261
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
262
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`http`]: /help/http
263
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`cgi`]: /help/cgi
264
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`server`]: /help/server
265
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`ui`]: /help/ui
266
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
267
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
268
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Web Pages that Refer to Globs
269
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
270
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The [`/timeline`][] page supports the query parameter `chng=GLOBLIST` that
271
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
names a list of glob patterns defining which files to focus the
272
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
timeline on. It also has the query parameters `t=TAG` and `r=TAG` that
273
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
names a tag to focus on, which can be configured with `ms=STYLE` to
274
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
use a glob pattern to match tag names instead of the default exact
275
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
match or a couple of other comparison styles.
276
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
277
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The pages [`/tarball`][] and [`/zip`][] generate compressed archives
278
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
of a specific checkin. They may be further restricted by query
279
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
parameters that specify glob patterns that name files to include or
280
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
exclude rather than taking the entire checkin.
281
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
282
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`/timeline`]: /help/www/timeline
283
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`/tarball`]: /help/www/tarball
284
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`/zip`]: /help/www/zip
285
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
286
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
287
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Platform Quirks
288
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
289
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Fossil glob patterns are based on the glob pattern feature of POSIX
290
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
shells. Fossil glob patterns also have a quoting mechanism, discussed
291
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[above](#syntax). Because other parts of your operating system may interpret glob
292
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
patterns and quotes separately from Fossil, it is often difficult to
293
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
give glob patterns correctly to Fossil on the command line. Quotes and
294
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
special characters in glob patterns are likely to be interpreted when
295
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
given as part of a `fossil` command, causing unexpected behavior.
296
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
297
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
These problems do not affect [versioned settings files](settings.wiki)
298
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
or Admin → Settings in Fossil UI. Consequently, it is better to
299
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
set long-term `*-glob` settings via these methods than to use `fossil
300
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
settings` commands.
301
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
302
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
That advice does not help you when you are giving one-off glob patterns
303
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
in `fossil` commands. The remainder of this section gives remedies and
304
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
workarounds for these problems.
305
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
306
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
307
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### <a id="posix"></a>POSIX Systems
308
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
309
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If you are using Fossil on a system with a POSIX-compatible shell
310
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
— Linux, macOS, the BSDs, Unix, Cygwin, WSL etc. — the shell
311
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
may expand the glob patterns before passing the result to the `fossil`
312
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
executable.
313
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
314
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Sometimes this is exactly what you want. Consider this command for
315
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
example:
316
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
317
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
$ fossil add RE*
318
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
319
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If you give that command in a directory containing `README.txt` and
320
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`RELEASE-NOTES.txt`, the shell will expand the command to:
321
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
322
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
$ fossil add README.txt RELEASE-NOTES.txt
323
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
324
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
…which is compatible with the `fossil add` command's argument list,
325
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
which allows multiple files.
326
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
327
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Now consider what happens instead if you say:
328
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
329
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
$ fossil add --ignore RE* src/*.c
330
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
331
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This *does not* do what you want because the shell will expand both `RE*`
332
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
and `src/*.c`, causing one of the two files matching the `RE*` glob
333
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
pattern to be ignored and the other to be added to the repository. You
334
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
need to say this in that case:
335
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
336
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
$ fossil add --ignore 'RE*' src/*.c
337
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
338
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The single quotes force a POSIX shell to pass the `RE*` glob pattern
339
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
through to Fossil untouched, which will do its own glob pattern
340
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
matching. There are other methods of quoting a glob pattern or escaping
341
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
its special characters; see your shell's manual.
342
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
343
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Beware that Fossil's `--ignore` option does not override explicit file
344
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
mentions:
345
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
346
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
$ fossil add --ignore 'REALLY SECRET STUFF.txt' RE*
347
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
348
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
You might think that would add everything beginning with `RE` *except*
349
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for `REALLY SECRET STUFF.txt`, but when a file is both given
350
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
explicitly to Fossil and also matches an ignore rule, Fossil asks what
351
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
you want to do with it in the default case; and it does not even ask
352
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if you gave the `-f` or `--force` option along with `--ignore`.
353
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
354
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The spaces in the ignored file name above bring us to another point:
355
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
such file names must be quoted in Fossil glob patterns, lest Fossil
356
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
interpret it as multiple glob patterns, but the shell interprets
357
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
quotation marks itself.
358
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
359
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
One way to fix both this and the previous problem is:
360
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
361
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
$ fossil add --ignore "'REALLY SECRET STUFF.txt'" READ*
362
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
363
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The nested quotation marks cause the inner set to be passed through to
364
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Fossil, and the more specific glob pattern at the end — that is,
365
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`READ*` vs `RE*` — avoids a conflict between explicitly-listed
366
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
files and `--ignore` rules in the `fossil add` command.
367
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
368
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Another solution would be to use shell escaping instead of nested
369
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
quoting:
370
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
371
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
$ fossil add --ignore "\"REALLY SECRET STUFF.txt\"" READ*
372
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
373
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
It bears repeating that the two glob patterns here are not interpreted
374
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the same way when running this command from a *subdirectory* of the top
375
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
checkout directory as when running it at the top of the checkout tree.
376
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
If these files were in a subdirectory of the checkout tree called `doc`
377
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
and that was your current working directory, the command would instead
378
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
have to be:
379
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
380
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
$ fossil add --ignore "'doc/REALLY SECRET STUFF.txt'" READ*
381
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
382
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The Fossil glob pattern still needs the `doc/` prefix because
383
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Fossil always interprets glob patterns from the base of the checkout
384
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
directory, not from the current working directory as POSIX shells do.
385
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
386
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
When in doubt, use `fossil status` after running commands like the
387
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
above to make sure the right set of files were scheduled for insertion
388
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
into the repository before checking the changes in. You never want to
389
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
accidentally check something like a password, an API key, or the
390
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
private half of a public cryptographic key into Fossil repository that
391
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
can be read by people who should not have such secrets.
392
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
393
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
394
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### <a id="windows"></a>Windows
395
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
396
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Before we get into Windows-specific details here, beware that this
397
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
section does not apply to the several Microsoft Windows extensions that
398
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
provide POSIX semantics to Windows, for which you want to use the advice
399
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
in [the POSIX section above](#posix) instead:
400
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
401
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* the ancient and rarely-used [Microsoft POSIX subsystem][mps];
402
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* its now-discontinued replacement feature, [Services for Unix][sfu]; or
403
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* their modern replacement, the [Windows Subsystem for Linux][wsl]
404
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
405
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[mps]: https://en.wikipedia.org/wiki/Microsoft_POSIX_subsystem
406
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[sfu]: https://en.wikipedia.org/wiki/Windows_Services_for_UNIX
407
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[wsl]: https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux
408
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
409
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(The latter is sometimes incorrectly called "Bash on Windows" or "Ubuntu
410
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
on Windows," but the feature provides much more than just Bash or Ubuntu
411
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for Windows.)
412
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
413
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Neither standard Windows command shell — `cmd.exe` or PowerShell
414
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
— expands glob patterns the way POSIX shells do. Windows command
415
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
shells rely on the command itself to do the glob pattern expansion. The
416
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
way this works depends on several factors:
417
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
418
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* the version of Windows you are using
419
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* which OS upgrades have been applied to it
420
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* the compiler that built your Fossil executable
421
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* whether you are running the command interactively
422
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* whether the command is built against a runtime system that does this
423
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
at all
424
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* whether the Fossil command is being run from a file named `*.BAT` vs
425
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
being named `*.CMD`
426
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
427
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Usually (but not always!) the C runtime library that your `fossil.exe`
428
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
executable is built against does this glob expansion on Windows so the
429
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
program proper does not have to. This may then interact with the way the
430
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Windows command shell you’re using handles argument quoting. Because of
431
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
these differences, it is common to find perfectly valid Fossil command
432
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
examples that were written and tested on a POSIX system which then fail
433
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
when tried on Windows.
434
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
435
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The most common problem is figuring out how to get a glob pattern passed
436
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
on the command line into `fossil.exe` without it being expanded by the C
437
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
runtime library that your particular Fossil executable is linked to,
438
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
which tries to act like [the POSIX systems described above](#posix). Windows is
439
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
not strongly governed by POSIX, so it has not historically hewed closely
440
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to its strictures.
441
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
442
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
For example, consider how you would set `crlf-glob` to `*` in order to
443
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
get normal Windows text files with CR+LF line endings past Fossil's
444
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"looks like a binary file" check. The naïve approach will not work:
445
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
446
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
C:\...> fossil setting crlf-glob *
447
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
448
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The C runtime library will expand that to the list of all files in the
449
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
current directory, which will probably cause a Fossil error because
450
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Fossil expects either nothing or option flags after the setting's new
451
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
value, not a list of file names. (To be fair, the same thing will happen
452
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
on POSIX systems, only at the shell level, before `.../bin/fossil` even
453
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
gets run by the shell.)
454
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
455
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Let's try again:
456
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
457
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
C:\...> fossil setting crlf-glob '*'
458
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
459
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Quoting the argument like that will work reliably on POSIX, but it may
460
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
or may not work on Windows. If your Windows command shell interprets the
461
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
quotes, it means `fossil.exe` will see only the bare `*` so the C
462
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
runtime library it is linked to will likely expand the list of files in
463
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the current directory before the `setting` command gets a chance to
464
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
parse the command line arguments, causing the same failure as above.
465
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This alternative only works if you’re using a Windows command shell that
466
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
passes the quotes through to the executable *and* you have linked Fossil
467
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to a C runtime library that interprets the quotes properly itself,
468
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
resulting in a bare `*` getting clear down to Fossil’s `setting` command
469
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
parser.
470
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
471
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
An approach that *will* work reliably is:
472
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
473
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
C:\...> echo * | fossil setting crlf-glob --args -
474
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
475
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This works because the built-in Windows command `echo` does not expand its
476
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
arguments, and the `--args -` option makes Fossil read further command
477
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
arguments from its standard input, which is connected to the output
478
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
of `echo` by the pipe. (`-` is a common Unix convention meaning
479
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"standard input," which Fossil obeys.) A [batch script][fng.cmd] to automate this trick was
480
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
posted on the now-inactive Fossil Mailing List.
481
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
482
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[fng.cmd]: https://www.mail-archive.com/[email protected] /msg25099.html
483
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
484
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
(Ironically, this method will *not* work on POSIX systems because it is
485
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
not up to the command to expand globs. The shell will expand the `*` in
486
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the `echo` command, so the list of file names will be passed to the
487
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`fossil` standard input, just as with the first example above!)
488
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
489
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Another (usually) correct approach which will work on both Windows and
490
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
POSIX systems:
491
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
492
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
C:\...> fossil setting crlf-glob *,
493
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
494
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This works because the trailing comma prevents the glob pattern from
495
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
matching any files, unless you happen to have files named with a
496
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
trailing comma in the current directory. If the pattern matches no
497
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
files, it is passed into Fossil's `main()` function as-is by the C
498
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
runtime system. Since Fossil uses commas to separate multiple glob
499
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
patterns, this means "all files from the root of the Fossil checkout
500
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
directory downward and nothing else," which is of course equivalent to
501
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"all managed files in this repository," our original goal.
502
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
503
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
504
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Experimenting
505
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
506
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
To preview the effects of command line glob pattern expansion for
507
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
various glob patterns (unquoted, quoted, comma-terminated), for any
508
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
combination of command shell, OS, C run time, and Fossil version,
509
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
precede the command you want to test with [`test-echo`][] like so:
510
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
511
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
$ fossil test-echo setting crlf-glob "*"
512
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
C:\> echo * | fossil test-echo setting crlf-glob --args -
513
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
514
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The [`test-glob`][] command is also handy to test if a string
515
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
matches a glob pattern.
516
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
517
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`test-echo`]: /help/test-echo
518
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`test-glob`]: /help/test-glob
519
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
520
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
521
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Converting `.gitignore` to `ignore-glob`
522
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
523
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Many other version control systems handle the specific case of
524
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ignoring certain files differently from Fossil: they have you create
525
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
individual "ignore" files in each folder, which specify things ignored
526
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
in that folder and below. Usually some form of glob patterns are used
527
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
in those files, but the details differ from Fossil.
528
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
529
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
In many simple cases, you can just store a top level "ignore" file in
530
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`.fossil-settings/ignore-glob`. But as usual, there will be lots of
531
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
edge cases.
532
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
533
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[Git has a rich collection of ignore files][gitignore] which
534
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
accumulate rules that affect the current command. There are global
535
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
files, per-user files, per workspace unmanaged files, and fully
536
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
version controlled files. Some of the files used have no set name, but
537
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
are called out in configuration files.
538
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
539
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[gitignore]: https://git-scm.com/docs/gitignore
540
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
541
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
In contrast, Fossil has a global setting and a local setting, but the local setting
542
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
overrides the global rather than extending it. Similarly, a Fossil
543
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
command's `--ignore` option replaces the `ignore-glob` setting rather
544
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
than extending it.
545
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
546
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
With that in mind, translating a `.gitignore` file into
547
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`.fossil-settings/ignore-glob` may be possible in many cases. Here are
548
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
some of features of `.gitignore` and comments on how they relate to
549
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Fossil:
550
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
551
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* "A blank line matches no files...": same in Fossil.
552
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* "A line starting with # serves as a comment...": same in Fossil, including
553
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
the possibility of escaping an initial `#` with a backslash to allow globs
554
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
beginning with a hash.
555
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* "Trailing spaces are ignored unless they are quoted..." is similar
556
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
in Fossil. All whitespace before and after a glob is trimmed in
557
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Fossil unless quoted with single or double quotes. Git uses
558
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
backslash quoting instead, which Fossil does not.
559
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* "An optional prefix "!" which negates the pattern...": not in
560
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Fossil.
561
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* Git's globs are relative to the location of the `.gitignore` file:
562
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Fossil's globs are relative to the root of the workspace.
563
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
* Git's globs and Fossil's globs treat directory separators
564
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
differently. Git includes a notation for zero or more directories
565
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
that is not needed in Fossil.
566
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
567
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Example
568
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
569
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
In a project with source and documentation:
570
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
571
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
work
572
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
+-- doc
573
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
+-- src
574
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
575
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The file `doc/.gitignore` might contain:
576
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
577
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Finished documents by pandoc via LaTeX
578
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*.pdf
579
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Intermediate files
580
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*.tex
581
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*.toc
582
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*.log
583
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*.out
584
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*.tmp
585
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
586
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Entries in `.fossil-settings/ignore-glob` with similar effect, also
587
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
limited to the `doc` folder:
588
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
589
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
doc/*.pdf
590
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
doc/*.tex, doc/*.toc, doc/*.log, doc/*.out, doc/*.tmp
591
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
592
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
593
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
594
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
595
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
596
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Implementation and References
597
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
598
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The implementation of the Fossil-specific glob pattern handling is here:
599
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
600
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
:File |:Description
601
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
--------------------------------------------------------------------------------
602
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`src/glob.c`][] | pattern list loading, parsing, and generic matching code
603
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`src/file.c`][] | application of glob patterns to file names
604
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
605
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`src/glob.c`]: https://fossil-scm.org/home/file/src/glob.c
606
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[`src/file.c`]: https://fossil-scm.org/home/file/src/file.c
607
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
608
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
See the [Adding Features to Fossil][aff] document for broader details
609
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
about finding and working with such code.
610
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
611
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The actual pattern matching leverages the `GLOB` operator in SQLite, so
612
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
you may find [its documentation][gdoc], [source code][gsrc] and [test
613
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
harness][gtst] helpful.
614
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
615
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[aff]: ./adding_code.wiki
616
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[gdoc]: https://sqlite.org/lang_expr.html#like
617
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[gsrc]: https://www.sqlite.org/src/artifact?name=9d52522cc8ae7f5c&ln=570-768
618
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[gtst]: https://www.sqlite.org/src/artifact?name=66a2c9ac34f74f03&ln=586-673
619
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!