Skip to content

Support .gitattributes export-ignore in distribution archives#515

Open
jberdine wants to merge 2 commits intotarides:mainfrom
jberdine:export-ignore
Open

Support .gitattributes export-ignore in distribution archives#515
jberdine wants to merge 2 commits intotarides:mainfrom
jberdine:export-ignore

Conversation

@jberdine
Copy link

Parse .gitattributes files and exclude paths marked with the export-ignore
attribute from distribution tarballs. This is the mechanism used by
git-archive to exclude files, allowing projects to exclude dev-only files
like dune-workspace from releases.

Supported patterns:

  • Exact matches: dune-workspace
  • Directory patterns: .github/**
  • Glob patterns: .log, test_, file?.txt
  • Double star: /build, src//test.ml

Paths are normalized before matching (handles ./ and ../).

Not supported:

  • Escaped patterns (\! for literal !)
  • Quoted patterns ("a b" for patterns with spaces)
  • Case insensitivity (core.ignorecase)
  • Negation patterns (!pattern)
  • Subdirectory .gitattributes files

Testing:

  • Unit tests comparing behavior against git check-attr
  • Tests cover pattern matching and parsing edge cases
  • .gitattributes content is generated from test cases to ensure sync
  • Archive integration test verifies end-to-end exclusion without requiring git

Signed-off-by: Josh Berdine josh@berdine.net

Parse .gitattributes files and exclude paths marked with the export-ignore
attribute from distribution tarballs. This is the mechanism used by
git-archive to exclude files, allowing projects to exclude dev-only files
like dune-workspace from releases.

Supported patterns:
- Exact matches: dune-workspace
- Directory patterns: .github/**
- Glob patterns: *.log, test_*, file?.txt
- Double star: **/build, src/**/test.ml

Paths are normalized before matching (handles ./ and ../).

Not supported:
- Escaped patterns (\\! for literal \!)
- Quoted patterns ("a b" for patterns with spaces)
- Case insensitivity (core.ignorecase)
- Negation patterns (\!pattern)
- Subdirectory .gitattributes files

Testing:
- Unit tests comparing behavior against git check-attr
- Tests cover pattern matching and parsing edge cases
- .gitattributes content is generated from test cases to ensure sync
- Archive integration test verifies end-to-end exclusion without requiring git

Signed-off-by: Josh Berdine <josh@berdine.net>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant