Commit 227b7c6
authored
Replace go-git gitignore matcher with custom implementation (#99)
* Replace go-git gitignore matcher with custom implementation
go-git's gitignore.Matcher doesn't handle negation patterns correctly.
Repos with deny-by-default .gitignore patterns (/* then !.github/) cause
DependenciesInWorkingDir and where to skip entire directory trees that
should be visible, breaking diff on clean working trees.
Add internal/gitignore package with a matcher that correctly implements
gitignore semantics: last-match-wins, directory-only trailing slash,
leading/middle slash anchoring, ** in all positions, and pattern scoping
for nested .gitignore files. Verified against git check-ignore.
Remove LoadIgnoreMatcher/IgnoreMatcher from repository.go. Add
GetExcludeDirs for configurable directory skipping via git config.
Ref #98
* Skip escaped wildcards test on Windows
The "escaped wildcards" test case creates files named hello* and hello?
on disk, which Windows does not support. Skip this case on Windows since
it's a filesystem limitation, not a matcher bug.
* Fix phantom diffs for packages with multiple versions in lockfiles
npm lockfiles can contain the same package at multiple versions due to
dependency hoisting (e.g. [email protected] and [email protected]). Both computeDiff
and AnalyzeCommit used single-value maps keyed by package name, so
duplicate versions collapsed to whichever was iterated last. When the
database and working tree paths iterated in different orders, this
produced phantom "modified" entries on clean workspaces.
Replace single-value maps with multi-maps in both locations:
- computeDiff: group by manifest:name, compare version sets when a
package appears at multiple versions
- AnalyzeCommit: replace beforeByName/afterByName with multi-maps so
PreviousRequirement reflects the actual replaced version
Fixes #53
* Support POSIX character classes in gitignore patterns
Git's wildmatch supports POSIX character classes like [[:space:]],
[[:alpha:]], [[:digit:]] inside bracket expressions. Our parseBracket
found the first ] as the closing bracket, splitting [[:space:]] into
[[:space:] plus a literal ]. Fix by skipping past [:...:] sequences
when scanning for the closing bracket.
Test cases adapted from git/t/t3070-wildmatch.sh, including multiple
classes in one bracket and mixing ranges with POSIX classes.
* Handle backslash escapes inside bracket expressions
In wildmatch, \X inside a bracket expression means literal X. The
bracket parser was blindly doubling all backslashes for the regex
engine, which broke patterns like [\-_] (literal dash and underscore),
[\1-\3] (range 1-3), and [[-\]] (range [ to ]).
The fix processes escape sequences during both bracket scanning (so \]
does not prematurely close the bracket) and content building (so \X
resolves to the literal character).
* Use github.com/git-pkgs/gitignore v0.1.0
Replace the internal gitignore package with the standalone module.
* Bump gitignore to v1.0.01 parent 6a7c099 commit 227b7c6
File tree
11 files changed
+494
-100
lines changed- cmd
- internal
- analyzer
- testdata
- git
11 files changed
+494
-100
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
158 | 158 | | |
159 | 159 | | |
160 | 160 | | |
161 | | - | |
162 | | - | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
163 | 169 | | |
164 | | - | |
165 | | - | |
| 170 | + | |
| 171 | + | |
166 | 172 | | |
167 | 173 | | |
168 | | - | |
| 174 | + | |
169 | 175 | | |
170 | | - | |
171 | | - | |
| 176 | + | |
| 177 | + | |
172 | 178 | | |
173 | 179 | | |
174 | 180 | | |
175 | | - | |
176 | | - | |
177 | | - | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
178 | 200 | | |
179 | | - | |
180 | | - | |
181 | | - | |
182 | | - | |
183 | | - | |
184 | | - | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
185 | 241 | | |
186 | 242 | | |
187 | | - | |
188 | | - | |
189 | | - | |
190 | | - | |
191 | | - | |
192 | | - | |
193 | | - | |
194 | | - | |
195 | 243 | | |
196 | 244 | | |
197 | 245 | | |
198 | | - | |
199 | | - | |
200 | | - | |
201 | | - | |
202 | | - | |
203 | | - | |
204 | | - | |
205 | | - | |
206 | | - | |
207 | | - | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
208 | 258 | | |
209 | 259 | | |
210 | 260 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
428 | 428 | | |
429 | 429 | | |
430 | 430 | | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
431 | 472 | | |
432 | 473 | | |
433 | 474 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
12 | | - | |
13 | 12 | | |
| 13 | + | |
| 14 | + | |
14 | 15 | | |
15 | 16 | | |
16 | 17 | | |
| |||
53 | 54 | | |
54 | 55 | | |
55 | 56 | | |
56 | | - | |
57 | | - | |
58 | | - | |
59 | | - | |
60 | | - | |
| 57 | + | |
61 | 58 | | |
62 | 59 | | |
63 | 60 | | |
| |||
92 | 89 | | |
93 | 90 | | |
94 | 91 | | |
95 | | - | |
| 92 | + | |
96 | 93 | | |
97 | 94 | | |
98 | 95 | | |
99 | 96 | | |
100 | 97 | | |
101 | 98 | | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
102 | 106 | | |
103 | 107 | | |
104 | 108 | | |
105 | 109 | | |
106 | | - | |
| 110 | + | |
107 | 111 | | |
108 | 112 | | |
109 | 113 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
7 | 8 | | |
8 | 9 | | |
9 | 10 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
39 | | - | |
40 | | - | |
| 39 | + | |
| 40 | + | |
41 | 41 | | |
42 | 42 | | |
43 | 43 | | |
| |||
0 commit comments