feat(core): core:update 기본을 코어 변경분만 적용(3-way skip)으로 전환

core:update Step 7 이 targets 전체를 무조건 재복사하고 orphan 을 삭제하여
사용자 .htaccess 커스텀 블록·_bundled 커스텀 확장이 소실되던 사고(공개 )를
차단한다. 백업(base)↔_pending(theirs) 3-way md5 비교로 코어가 실제 변경/추가한
파일만 산출해 적용하고, 코어 미변경 파일은 복사·권한·mtime 을 전부 스킵해 현재
디스크 상태(사용자 수정 포함)를 보존한다. 전체 덮어쓰기 + orphan 정리가 필요하면
--prune 으로 opt-in. 백업 부재(--no-backup) 시 base 가 없어 전체 덮어쓰기로 안전
회귀 + 안내를 출력한다.

기존 stale 정리 테스트는 새 기본(증분)에서 orphan 을 삭제하지 않으므로 prune
컨텍스트로 전환했고, 증분 3-way 판정·목록 적용·fallback 단위 테스트와 --prune
커맨드 표면 테스트를 추가했다.

번들 ja 언어팩은 코어 apply_mode 안내 키(g7-core-ja)와 함께, 같은 빌드에서
동기화된 관리자↔유저 크로스링크 라벨(board/ecommerce/admin_basic/basic)의 일본어
번역을 반영하고 각 패키지 버전·CHANGELOG 를 갱신했다.
This commit is contained in:
HeuJung committed 2026-07-07 22:45:16 +09:00
1 parent efc8a7ae6b
commit d0943d6cb6
26 files changed
+921 -29

No files matched your search

@@ -120,4 +120,17 @@ class CoreUpdateWithBundleTest extends TestCase
->expectsOutputToContain('--vendor-mode')
->assertExitCode(0);
}
/**
* `--prune` 옵션이 등록되어 있는지 검증합니다 (공개 #64).
*
* 실제 파일 적용 로직(증분/prune)은 CoreUpdateServiceTest 의 applyUpdate 단위
* 테스트가 커버하며, 여기서는 커맨드 표면에 옵션이 노출되는지만 확인한다.
*/
public function test_core_update_command_accepts_prune_option(): void
{
$this->artisan('core:update', ['--help' => true])
->expectsOutputToContain('--prune')
->assertExitCode(0);
}
}