Skip to content

fix(checkout): Windows CRLF·심볼릭 링크 체크아웃에서만 실패하던 로컬 검사를 고친다 - #8193

Open
planet6897 wants to merge 1 commit into
edwardkim:develfrom
planet6897:fix/windows-crlf-checkout
Open

planet6897 wants to merge 1 commit into
edwardkim:develfrom
planet6897:fix/windows-crlf-checkout

Conversation

@planet6897

Copy link
Copy Markdown
Contributor

요약

Windows 기본 Git 설정(core.autocrlf=true, core.symlinks=false)으로 체크아웃하면, 같은 커밋이 리눅스 CI 에서는 통과하는데 로컬 검사 13건이 실패했다. 이 중 체크아웃 방식 때문에 생기는 12건(CRLF 개행 변환 11건, 심볼릭 링크 1건)을 고친다. 저장소에 저장된 파일 바이트(인덱스)는 바뀌지 않고, Windows 체크아웃 결과만 리눅스와 같아진다.

원인과 변경

원인 실패 변경
테스트가 소스 원문을 읽어 \n 을 포함한 정규식·문자열로 찾는다. CRLF 로 체크아웃된 원문에서는 일치하지 않는다 npm test 9건 — chrome-mode 2 · dialog-policy-ledger · document-initialization-order · ruler-document-load-refresh · zoom-fit-mode-persistence · style-undo-routing(src/*.rs 함수 본문 발췌) · review-runtime-contracts 음성 대조 drop-engine-chain · subsecond-runtime(Cargo.lock 의 subsecond 블록) .gitattributes: *.rs·*.ts·/Cargo.lock 을 text eol=lf 로 체크아웃
자동 감지가 텍스트로 본 PDF 12개가 LF→CRLF 로 바뀌어 xref 오프셋이 어긋난다 nextest issue_7966_pdf_close_stroke 3건(ImportResourceLimit("unbounded object recovery disabled")) .gitattributes: *.pdf -text -diff — 기존의 디렉터리별 PDF 규칙과 같은 처리를 전체 PDF 에 적용
rhwp-studio/public/fonts 는 ../../assets/fonts 를 가리키는 심볼릭 링크다. 링크를 지원하지 않는 체크아웃에서는 경로 문자열만 담은 파일이 된다 canvaskit-sfnt-face 1건(ENOENT) 테스트가 링크 대상 assets/fonts/D2Coding-Regular.woff2 를 직접 읽는다(같은 파일)

인덱스 무변경 확인

  • 저장소의 *.rs·*.ts·Cargo.lock 은 모두 LF(git ls-files --eol 에서 i/lf)라 eol=lf 규칙이 저장 바이트를 바꾸지 않는다. 대상 PDF 도 저장 바이트 그대로다.
  • 새 규칙으로 영향 파일 4,778개를 다시 체크아웃하자 모두 인덱스 바이트와 같았고, 작업 트리 변경은 이 PR 의 두 파일뿐이었다. 예: pdf/issue7966/close-stroke-controls.pdf 의 작업 트리 MD5 가 blob 과 일치한다.
  • 저장소 전체에 * text=auto eol=lf 를 거는 방법은 쓰지 않았다. 이미 CRLF 로 저장된 텍스트 파일 약 500개가 다시 정규화 대상이 되기 때문이다. 대신 실패 원인인 확장자만 지정했다.

검증 (Windows, base upstream/devel e7a0dec55)

검사 수정 전 수정 후
rhwp-studio npm test 2,351 통과 · 10 실패 2,361 통과 · 0 실패
cargo nextest … -E 'test(issue_7966_pdf_close_stroke)' 3 실패 3 통과

리눅스 CI 는 원래 LF·심볼릭 링크로 체크아웃하므로 동작이 바뀌지 않는다. 조판·렌더링 코드는 바꾸지 않아 Visual Sweep 대상이 아니다.

범위 밖

  • issue_6520_svg_layer_contract::subset_font_bytes_are_deterministic_for_multiple_codepoints 는 로컬에 설치된 한컴 글꼴에 따라 결과가 달라지는 검사라 이 PR 범위가 아니다.
  • 이미 만들어 둔 Windows 작업 트리는 이 변경을 받은 뒤 해당 파일을 다시 체크아웃해야 LF 가 된다(git rm --cached -r . && git reset --hard 또는 해당 파일 삭제 후 git checkout -- <파일>).

🤖 Generated with Claude Code

`core.autocrlf=true`·`core.symlinks=false`(Windows 기본)로 체크아웃하면 같은 커밋이
리눅스 CI 에서는 통과하고 Windows 에서만 11건이 실패했다.

- `*.rs`·`*.ts`·`/Cargo.lock` 을 LF 로 체크아웃한다. Studio 계약 검사(chrome-mode·
  dialog-policy-ledger·document-initialization-order·ruler·zoom-fit·style-undo-routing·
  review-runtime-contracts 음성 대조·subsecond dioxus-cli 버전)는 원문을 읽어 `\n` 을 포함한
  패턴으로 찾는데 CRLF 원문에서 9건이 실패했다. 저장소의 해당 파일은 모두 LF 라 인덱스는
  바뀌지 않는다.
- `*.pdf` 를 `-text -diff` 로 둔다. 자동 감지가 텍스트로 본 PDF 12개가 LF→CRLF 로 바뀌어
  xref 가 어긋났고 `issue_7966_pdf_close_stroke` 3건이 `ImportResourceLimit` 로 실패했다.
- `canvaskit-sfnt-face` 검사는 심볼릭 링크 `public/fonts` 대신 그 대상 `assets/fonts` 의
  D2Coding 을 읽는다. 링크를 지원하지 않는 체크아웃에서는 `public/fonts` 가 경로 문자열만 담은
  파일이라 ENOENT 로 실패했다.

검증(Windows, devel e7a0dec 기준): `npm test` 2,351 통과·10 실패 → 2,361 통과·0 실패,
`issue_7966_pdf_close_stroke` 3건 실패 → 통과. 새 규칙으로 다시 체크아웃한 4,778개 파일이 모두
인덱스 바이트와 같아 작업 트리 변경은 이 두 파일뿐이다.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working rhwp-studio 브라우저에서 열리는 RHWP Studio UI/UX와 문서 열기·저장 등 작업 플로우 test regression test typescript

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants