<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sourcewatch.git/gitignore.go, branch main</title>
<subtitle>experimental filesync for windows docker bindmounts</subtitle>
<link rel='alternate' type='text/html' href='https://git.begu.at/sourcewatch.git/'/>
<entry>
<title>Docker test fixes: directory pattern matching, mtime-based sync, Go version</title>
<updated>2026-07-06T19:47:30+00:00</updated>
<author>
<name>Bernhard Guillon</name>
<email>Bernhard.Guillon@begu.org</email>
</author>
<published>2026-07-06T19:47:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.begu.at/sourcewatch.git/commit/?id=5137f2cf25a71cfaf6d7794d86ea2ed52bb001d3'/>
<id>5137f2cf25a71cfaf6d7794d86ea2ed52bb001d3</id>
<content type='text'>
- Fixed directory pattern matching: go-gitignore doesn't match 'build/'
  against bare 'build', now checks with trailing slash appended
- Added ModTime to FileMeta for reliable change detection (same-size
  file modifications now sync correctly)
- Updated Dockerfile to golang:1.24-alpine (was 1.22)
- Downgraded go.mod to Go 1.24 (system has custom 1.26.4 build)

Docker tested with podman:
- Initial sync correctly excludes ignored dirs/files
- Nested .gitignore works (sub/ ignores *.tmp)
- Watcher syncs new/modified/deleted files
- Case-sensitive rename (Foo→foo) handled correctly
- Same-size file modifications sync correctly
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- Fixed directory pattern matching: go-gitignore doesn't match 'build/'
  against bare 'build', now checks with trailing slash appended
- Added ModTime to FileMeta for reliable change detection (same-size
  file modifications now sync correctly)
- Updated Dockerfile to golang:1.24-alpine (was 1.22)
- Downgraded go.mod to Go 1.24 (system has custom 1.26.4 build)

Docker tested with podman:
- Initial sync correctly excludes ignored dirs/files
- Nested .gitignore works (sub/ ignores *.tmp)
- Watcher syncs new/modified/deleted files
- Case-sensitive rename (Foo→foo) handled correctly
- Same-size file modifications sync correctly
</pre>
</div>
</content>
</entry>
<entry>
<title>Implement nested .gitignore support with GitignoreStack</title>
<updated>2026-07-06T19:36:29+00:00</updated>
<author>
<name>Bernhard Guillon</name>
<email>Bernhard.Guillon@begu.org</email>
</author>
<published>2026-07-06T19:36:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.begu.at/sourcewatch.git/commit/?id=ad7575e85ebf6332d324ca5997db18ea81065df4'/>
<id>ad7575e85ebf6332d324ca5997db18ea81065df4</id>
<content type='text'>
- Replaced go-gitignore with custom GitignoreStack that tracks
  multiple .gitignore files hierarchically
- Patterns are processed in root-to-leaf order, last match wins
- Negation patterns in child dirs override parent ignores
- Patterns only apply within their directory scope (no leaking)
- Added 6 new tests for nested .gitignore:
  - Scoped: patterns only affect own directory
  - Dir-scoped: different dirs can ignore different things
  - Negation override: child !pattern un-ignores parent's *.pattern
  - Deep nesting: 3+ levels of .gitignore
  - Parent scope doesn't leak to siblings
- All 35 tests passing
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- Replaced go-gitignore with custom GitignoreStack that tracks
  multiple .gitignore files hierarchically
- Patterns are processed in root-to-leaf order, last match wins
- Negation patterns in child dirs override parent ignores
- Patterns only apply within their directory scope (no leaking)
- Added 6 new tests for nested .gitignore:
  - Scoped: patterns only affect own directory
  - Dir-scoped: different dirs can ignore different things
  - Negation override: child !pattern un-ignores parent's *.pattern
  - Deep nesting: 3+ levels of .gitignore
  - Parent scope doesn't leak to siblings
- All 35 tests passing
</pre>
</div>
</content>
</entry>
<entry>
<title>Add sync and gitignore tests, fix loadGitignore bug</title>
<updated>2026-07-06T19:21:53+00:00</updated>
<author>
<name>Bernhard Guillon</name>
<email>Bernhard.Guillon@begu.org</email>
</author>
<published>2026-07-06T19:21:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.begu.at/sourcewatch.git/commit/?id=7512c95fa3f4b4e4ccdf452024f314a9a3c3b60f'/>
<id>7512c95fa3f4b4e4ccdf452024f314a9a3c3b60f</id>
<content type='text'>
- Added gitignore_test.go: comprehensive tests for go-gitignore patterns
  - Verified: *, **, [], negation, anchored patterns, comments
  - Documented limitation: ? wildcard not supported by go-gitignore
- Added sync_test.go: integration tests for initial sync
  - Tests: basic files, gitignore excludes, negation, double-star,
    directory patterns, symlinks, permissions, dry-run, .git skip,
    nested gitignore, complex combined patterns
- Fixed gitignore.go: use CompileIgnoreFile instead of passing
  entire file content as single string to CompileIgnoreLines
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- Added gitignore_test.go: comprehensive tests for go-gitignore patterns
  - Verified: *, **, [], negation, anchored patterns, comments
  - Documented limitation: ? wildcard not supported by go-gitignore
- Added sync_test.go: integration tests for initial sync
  - Tests: basic files, gitignore excludes, negation, double-star,
    directory patterns, symlinks, permissions, dry-run, .git skip,
    nested gitignore, complex combined patterns
- Fixed gitignore.go: use CompileIgnoreFile instead of passing
  entire file content as single string to CompileIgnoreLines
</pre>
</div>
</content>
</entry>
<entry>
<title>Initial project scaffolding</title>
<updated>2026-07-06T19:15:17+00:00</updated>
<author>
<name>Bernhard Guillon</name>
<email>Bernhard.Guillon@begu.org</email>
</author>
<published>2026-07-06T19:15:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.begu.at/sourcewatch.git/commit/?id=b505ac2fe010fcc24b774c313d33dc099214e8ed'/>
<id>b505ac2fe010fcc24b774c313d33dc099214e8ed</id>
<content type='text'>
- main.go: CLI entry point with flag parsing
- gitignore.go: .gitignore loading and parsing
- sync.go: initial sync with manifest tracking
- watcher.go: fsnotify-based file watcher with debouncing
- Dockerfile: multi-stage build for Alpine runtime
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- main.go: CLI entry point with flag parsing
- gitignore.go: .gitignore loading and parsing
- sync.go: initial sync with manifest tracking
- watcher.go: fsnotify-based file watcher with debouncing
- Dockerfile: multi-stage build for Alpine runtime
</pre>
</div>
</content>
</entry>
</feed>
