DJB 커스텀 소스 납품본 수집
발주사 납품용으로, 기준 시점 이후 신규로 추가된 커스텀 소스 파일만 모아
디렉터리 구조를 유지한 채 한곳에 복사하고 MANIFEST.csv / SUMMARY.md / zip 을 만든다.
파일
| 파일 | 용도 |
|---|---|
export-custom.sh |
macOS / Linux 실행 스크립트 |
export-custom.ps1 |
Windows PowerShell 실행 스크립트 (실제 로직) |
export-custom.bat |
Windows cmd 래퍼 — 인자를 .ps1 로 그대로 전달 |
modules.conf |
대상 모듈 / 소스 경로 / 수집 확장자 |
export-filter.rules |
포함·제외 규칙 (.gitignore 유사 문법) |
filelist.txt |
마지막으로 뽑은 수집 대상 목록 (검토용, 재생성 가능) |
filelist-no-djb-marker.txt |
그중 djb / custom 마커가 없는 파일 — 업그레이드 유입분 검토 대상 |
수집 방식
- 모듈별로 컷오프 날짜 직전의 마지막 커밋을 base 로 잡는다.
git rev-list -1 --before=<CUTOFF> HEAD컷오프 이전 커밋이 아예 없으면 저장소 전체를 신규로 본다. git diff --name-only --diff-filter=A -M <base> HEAD -- <소스경로>로 신규 추가(A) 파일만 뽑는다.-M이라 단순 rename 은 신규로 잡히지 않는다.modules.conf의 확장자 allowlist 로 거른다. (확장자 없는 파일은 제외)export-filter.rules로 포함·제외를 최종 결정한다.- 남은 파일을
<out>/src/<모듈>/<원래 경로>로 복사한다.
사용법
# macOS / Linux
./export-custom.sh --dry-run > filelist.txt # 목록만 뽑기 (로그는 stderr)
./export-custom.sh --show-excluded # 규칙에 걸려 빠진 목록 + 걸린 규칙
./export-custom.sh # 실제 수집
./export-custom.sh --zip # 수집 + zip
./export-custom.sh -c 2026-05-01 -m eapim-portal
# Windows
.\export-custom.ps1 -DryRun > filelist.txt
.\export-custom.ps1 -ShowExcluded
.\export-custom.ps1 -Zip
.\export-custom.ps1 -Cutoff 2026-05-01 -Module eapim-portal,eapim-admin
# cmd 에서
export-custom.bat -DryRun > filelist.txt
주요 옵션
| sh | ps1 | 설명 |
|---|---|---|
-c, --cutoff |
-Cutoff |
기준 날짜 (기본 2026-05-01) |
-r, --root |
-Root |
저장소 루트. 미지정 시 스크립트 위치 기준 자동 탐지 |
-o, --out |
-Out |
출력 디렉터리 (기본 <root>/build/djb-custom-export) |
-m, --module |
-Module |
특정 모듈만 |
--zip |
-Zip |
zip 생성 |
--include-untracked |
-IncludeUntracked |
미커밋 신규 파일도 포함 |
--dry-run |
-DryRun |
복사 없이 목록만 |
--show-excluded |
-ShowExcluded |
규칙에 걸려 빠진 목록 |
export-filter.rules 문법
.gitignore 와 비슷하되 더 단순하다.
- 한 줄에 패턴 하나.
#주석, 빈 줄 무시 - 기본은 모두 포함. 패턴에 걸리면 제외
!로 시작하면 예외(다시 포함)- 뒤에 오는 규칙이 앞 규칙을 덮는다 — 순서가 중요하다
- 패턴에
/가 있으면<모듈>/<경로>전체와 매칭, 없으면 파일명만 매칭 /로 끝나면 그 디렉터리 하위 전체*는/도 포함해 매칭한다 (단순 glob,**없음)
매칭 대상 경로 예:
eapim-portal/src/main/java/com/eactive/apim/portal/djb/webhook/WebhookService.java
eapim-admin/WebContent/jsp/onl/apim/webhook/webhookList.jsp
규칙 파일은 세 구역으로 나뉜다.
- 업그레이드 유입분 제외 —
filelist-no-djb-marker.txt를 검토하며 채운다 !*djb*예외 — djb 마커가 붙은 파일은 커스텀이므로 되살린다- 무조건 제외 — 빌드 산출물·서드파티. 2)보다 뒤에 있어 최종 승리한다
신규지만 커스텀이 아닌 파일 걸러내기
신규 파일이라도 제품 업그레이드로 딸려 온 것일 수 있다. 판별 순서:
# 1) 전체 목록
./export-custom.sh --dry-run > filelist.txt
# 2) djb / custom 마커가 없는 것 = 검토 대상
grep -vi djb filelist.txt | grep -v '/custom/' > filelist-no-djb-marker.txt
# 3) 검토 후 업그레이드 유입분을 export-filter.rules 의 1) 구역에 추가
# 4) 반영 확인
./export-custom.sh --show-excluded
주의
- 컷오프 이전 커밋이 없으면 base 가 빈 트리가 되어 저장소 전체가 신규로 잡힌다.
SUMMARY.md의 base 컬럼에(컷오프 이전 커밋 없음 …)으로 표시된다. - 모듈에 컷오프 직전 커밋이 드문드문 있으면 base 가 컷오프보다 훨씬 이전으로 잡힐 수 있다.
실행 로그의
base:날짜를 항상 확인할 것. - 추가된 뒤 삭제·이동된 파일은 현재 트리에 없으므로 건너뛰고, 건수를
SUMMARY.md에 남긴다.