Repository navigation
Expand file tree
/
Copy path.gitattributes
More file actions
36 lines (34 loc) · 2.7 KB
/
Copy path.gitattributes
File metadata and controls
36 lines (34 loc) · 2.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# Language classification: the SHIPPED ARTIFACT is a C++23 binary. test/*.sh is the CLI-contract layer —
# hundreds of integration gates that run the binary, drive installers, manipulate HOME, and diff two runs
# byte-for-byte. Shell is the right tool for that and they are not going anywhere; unit-level testing is
# already C++ (doctest, inline in src/cli.h, src/graphlegend.h and others).
#
# Excluded from language statistics because those statistics answer "what is this project written in",
# and the answer is C++. This is NOT a claim that the gates are unimportant, vendored, or generated —
# they are none of those, which is exactly why linguist-vendored and linguist-generated would both be
# false statements and linguist-detectable=false is the honest attribute.
#
# Measured 2026-09-08: C++ 9,398,027 bytes vs Shell 8,921,478 — a 5% margin, roughly 30-90 more gates
# before the primary language would have flipped to Shell purely as a side effect of adding tests.
# 38.7% of that shell is comments (the "WHY THIS GATE EXISTS" headers); excluding them, shell code is
# 4.7 MB against C++'s 9.4 MB. The classification was only ever marginal because the gates are documented
# unusually well, and shrinking those headers to win a byte count would destroy the most useful thing in
# the files.
test/*.sh linguist-detectable=false
# scripts/*.sh are checked out and run directly by `bash scripts/<name>.sh` in the windows CI job
# (.github/workflows/ci.yml's #326 and eviction-smoke steps). Every earlier bash step in that job is an
# inline `run:` body, which the Actions runner writes to disk itself with LF endings — this is the first
# step to run a checked-out repo script instead. Windows runner images install Git for Windows with no
# CRLF option (runner-images Install-Git.ps1 passes no CRLFOption), which leaves the installer default,
# core.autocrlf=true, so a script with no eol rule is checked out CRLF and Git Bash's `bash script` fails
# loudly (rc=2 or rc=255: `\r` glued onto the last argument on each line, "invalid option", "not a valid
# identifier") on otherwise-correct code. test/*.sh does not need this: nothing
# in the windows job's steps runs a checked-out test/*.sh script directly, only inline `run:` bodies and
# the two scripts/*.sh helpers above.
scripts/*.sh text eol=lf
# skills/install.sh and hooks/*.sh are what a Windows user runs under Git Bash — from the windows-x64 zip, or from a
# clone. The zip is built with core.autocrlf=false (.github/workflows/windows-package.yml) and refuses a CR in them;
# this rule gives a Git for Windows clone (core.autocrlf=true by default) the same LF bytes, so `bash skills/install.sh`
# does not fail on "$'\r'" there either.
skills/*.sh text eol=lf
hooks/*.sh text eol=lf