Skip to content

CLI Tools

Won-Kyu Park edited this page Aug 4, 2026 · 2 revisions

CLI 도구

tools/ 아래에 있는 명령줄 스크립트들이다. 전부 저장소 루트에서 uv run tools/<이름>.py로 실행한다. 라이브러리를 직접 코드로 쓰지 않고 터미널에서 빠르게 시험해보고 싶을 때 쓰면 된다.

srcs_commit.py — 파일 커밋

uv run tools/srcs_commit.py my_doc.txt -m "initial commit"
  • content_file (필수) — 커밋할 원본 파일
  • rcs_file (선택) — .srcs 파일 경로. 생략하면 .srcs/<파일명>.srcs로 자동 배치
  • -m/--message (필수) — 커밋 로그 메시지
  • -a/--author — 기본값은 $USER
  • --no-sign — GPG 서명 끄기
  • --binary — 텍스트로 디코딩 가능해도 강제로 바이너리 커밋
  • --srcs-dir — 자동 배치 시 사용할 디렉토리 (기본 .srcs)

파일을 먼저 바이트로 읽은 뒤, 첫 8KB 안에 NUL 바이트가 없고 UTF-8로 디코딩되면 텍스트로 커밋한다 (git이 텍스트/바이너리를 구분하는 방식과 같음). 그 판단은 라이브러리가 아니라 이 스크립트가 한다 — SimpleRCS.commit() 자체는 bytes를 넘기면 무조건 바이너리 경로로 간다.

srcs_log.py — 히스토리 조회

uv run tools/srcs_log.py my_doc.txt.srcs
uv run tools/srcs_log.py my_doc.txt.srcs -n 5 --reverse --show-signature
  • -n/--limit — 최근 N개만
  • -r/--reverse — 오래된 것부터
  • --show-signature — GPG 서명 검증까지 같이

srcs_diff.py — 버전 간 diff

uv run tools/srcs_diff.py my_doc.txt.srcs -r 1.1:1.3
uv run tools/srcs_diff.py my_doc.txt.srcs --engine ses
  • -r/--revision'1.1'(HEAD와 비교) 또는 '1.1:1.2'(두 버전 간)
  • --enginedifflib(기본) / pydifflib / myers / ses / dmp. ses/dmp는 Cython 확장을 빌드해뒀을 때만 동작

엔진별 비교가 필요할 때, 즉 Diff Engines에서 설명한 여러 diff 알고리즘을 실제로 눈으로 비교해보고 싶을 때 쓰는 도구다.

srcs_blame.py — 라인별 저자 추적

uv run tools/srcs_blame.py my_doc.txt
uv run tools/srcs_blame.py my_doc.txt --depth 10
  • content_file — 원본 파일 (또는 .srcs 파일 자체를 직접 지정 가능)
  • rcs_file (선택) — 명시적 .srcs 경로
  • --srcs-dir — 자동 탐색 디렉토리 (기본 .srcs)
  • --depth — 이 개수만큼만 뒤로 거슬러 올라가고, 그 이전 라인은 가장 오래된 도달 버전에 귀속시킴

HEAD가 바이너리면 blame을 지원하지 않는다(라인이라는 개념이 없으니까).

srcs_verify.py — 무결성 검증

uv run tools/srcs_verify.py my_doc.txt.srcs

해시체인 전체와 GPG 서명을 검증한다. 실패하면 exit code 1과 함께 ❌ VERIFICATION FAILED를 출력한다.

srcs_sign_head.py — HEAD 서명

uv run tools/srcs_sign_head.py my_doc.txt.srcs -s <GPG_KEY_ID>
  • -s/--signer — 서명자 GPG 키 ID. 여러 번 지정하면 다중 서명
  • 지정하지 않으면 SRCS_SIGNING_KEY 환경변수를 본다
  • v1 파일에는 쓸 수 없다 (서명은 v2 전용 기능)

bench_diff.py — diff 엔진 벤치마크

uv run tools/bench_diff.py
uv run tools/bench_diff.py --size 500 --diff-ratio 0.1 --runs 5
  • --size (KB) — 합성 테스트 데이터 크기
  • --diff-ratio — 두 입력 사이 변경 비율
  • --file-a/--file-b — 합성 데이터 대신 실제 파일로 비교
  • --runs — 반복 횟수 (평균/최솟값 계산용)
  • --skip — 특정 엔진 제외

시간과 peak 메모리(tracemalloc)를 함께 보여준다. 순수 파이썬 Myers, Cython SES/DMP, StreamSequenceMatcher, StreamTextSequenceMatcher, 표준 difflib까지 전부 한 번에 비교된다.

compare_memory_usage.py

메모리 사용량만 따로 비교하는 보조 유틸리티. bench_diff.py가 이미 메모리까지 측정하기 때문에 지금은 거의 쓸 일이 없다.

Clone this wiki locally