From 85369d951a5355098ee1ece027a8121c6947eb7d Mon Sep 17 00:00:00 2001 From: ksj09406 Date: Tue, 22 Sep 2026 11:26:04 +0900 Subject: [PATCH] =?UTF-8?q?11=EC=B0=A8=20B-2:=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EC=97=86=EB=8A=94=20=EC=B2=AB=20=EC=8B=A4=ED=96=89=20=C2=B7=20?= =?UTF-8?q?D=20=EB=93=9C=EB=9D=BC=EC=9D=B4=EB=B8=8C=EA=B0=80=20=EC=97=86?= =?UTF-8?q?=EB=8A=94=20PC=20=EB=A5=BC=20=EC=9E=AC=EA=B3=A0=20=ED=94=8C?= =?UTF-8?q?=EB=9E=AB=ED=8F=BC=EC=97=90=EC=84=9C=20=EA=B3=A0=EC=B9=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 첫 실행(D:\UbisamConfig 를 백업하고 이름만 바꿔 잼)은 오류 창 없이 되고 기본값이 매뉴얼 설정 표와 같다. D 드라이브가 없으면 플랫폼이 켜자마자 UiSettingsService.cs:86 에서 실패해, "계속 쓸 수 있습니다" 창 뒤 창 없는 프로세스만 남았다(같은 이름 파일을 두어 같은 줄에서 재현). 플랫폼 377ffd3 에서 고침(사용자 결정): D 를 못 쓰면 %LOCALAPPDATA%\UbisamConfig, 켜는 중 실패는 "켜지 못했습니다" 를 보이고 끝낸다. 플랫폼 배포는 하지 않음. MergeHub 쪽: 매뉴얼의 설정 저장 자리 문장, MergeHubSettings 주석, 세 문서 기록. 빌드 경고 0 · 오류 0 · 하네스 22벌 1,247건 그대로. Co-Authored-By: Claude Opus 5 --- doc/history/2026-09-18-11차.md | 45 ++++++++++++++++++++++++++++++++ doc/history/changelog.md | 1 + doc/web/index.html | 2 +- doc/진행상황.md | 2 +- src/MergeHub/MergeHubSettings.cs | 3 ++- 5 files changed, 50 insertions(+), 3 deletions(-) diff --git a/doc/history/2026-09-18-11차.md b/doc/history/2026-09-18-11차.md index 3487b06..ef351dd 100644 --- a/doc/history/2026-09-18-11차.md +++ b/doc/history/2026-09-18-11차.md @@ -184,6 +184,51 @@ A-1 에서 값으로 확인한 것 — 지운 파일은 "삭제되어 건너뜀 - 웹 문서 발행(아티팩트)은 E-2 에서. - 플랫폼 배포 폴더(`D:\UbisamPlatform\bin`)는 **손대지 않았다**. 플랫폼 README 가 "UbisamBase.Shell 을 Release 로 빌드하면 이 폴더를 갱신" 한다고 하므로, 플랫폼을 새로 배포하면 이 스크립트를 다시 돌려야 한다. +## B-2. D 드라이브가 없는 PC · 설정이 없는 첫 실행 (2026-09-22, 플랫폼에서 고침 — 배포는 확인 뒤) + +지시서대로 **D 드라이브는 건드리지 않았다.** `D:\UbisamConfig` 는 먼저 통째로 백업하고(20개, 파일마다 SHA256 · 크기 · 수정 시각 목록) 이름만 잠시 바꿔 재고, 끝날 때마다 되돌려 목록과 대조했다(두 번 모두 같음). 시험은 모두 UIA 로만 누르고 읽었다(마우스 · 키보드 · 화면 찍기 없음). + +### 설정이 없는 첫 실행 (배포 묶음 `%TEMP%\mergehub-beta`, `e11-b2.ps1`) + +| 볼 것 | 결과 | +|---|---| +| 오류 창 | **없음** | +| 이름 창 | 빈 칸으로 뜬다 · 빈 채로 [저장] 하면 "이름을 입력하세요." 로 막힘 · 이름을 넣고 [저장] 하면 닫힘 | +| 켜는 순간 생기는 것 | `Settings\MergeHubSettings.json` · `Settings\UiSettingsService.json`. 이름을 저장하면 `CurrentUserService.json`, 첫 기록 때 `Log\` | +| 기본값 | `MergeHubSettings.json` 이 매뉴얼 설정 표와 **모두 같다** — 원격 이름 origin · 줄 필터 켬 · 단어 단위 · 문법 강조 켬 · 커밋 조회 200 · 머지 주석 남기기 · 무시 켬 · C# 스타일 1(AURORA, F-12) · 공백 단계 0 · 나머지 비움 | +| 창 위치 | 주 모니터에 **최대화**(2560×1600). 닫으면 `ShellWindowPlacement.json`(보통 크기 2048×1222 · Maximized true) | +| 네 탭 | 모두 열림, 오류 글 없음 | + +### D 드라이브가 없을 때 — 코드로 따라가고, 같은 줄에서 실패하게 해 봄 + +- 셸 `App.OnStartup` → `UbisamAppBuilder.Run` 의 첫 줄 `UiSettingsService.Initialize(D:\UbisamConfig)` → `Directory.CreateDirectory(D:\UbisamConfig\Settings)`(`UiSettingsService.cs:86`)에 **감싼 곳이 없다**. 드라이브가 없으면 `DirectoryNotFoundException`. 로그 서비스는 그보다 **뒤에** 준비된다. +- 드라이브를 없애는 대신 `D:\UbisamConfig` 자리에 **같은 이름의 빈 파일**을 두면 같은 줄이 `IOException` 으로 실패한다. +- 결과: 셸의 공용 예외 창 **"문제가 생겼습니다 — 작업 중 문제가 생겨 이 동작을 멈췄습니다. 프로그램은 계속 쓸 수 있습니다 … 자세한 내용은 D:\UbisamConfig\Log 아래 로그 파일에 남았습니다."** 두 말 모두 사실이 아니다(본 창 없음 · 로그 없음). [확인] 을 누르면 **창 없는 프로세스가 30초 뒤에도 남았다**. 다시 켜면 하나씩 더 쌓인다. + +### 정한 것 (2026-09-22 사용자) · 고친 것 — 플랫폼 + +- **D 를 못 쓰면 `%LOCALAPPDATA%\UbisamConfig`** 에 쓴다(권장안). **켜는 중 실패는 알리고 끝낸다**(권장안). +- 플랫폼 커밋 `377ffd3` — `Bootstrap/ConfigLocation`(새) · `Bootstrap/StartupMessages`(새) · `UbisamAppBuilder.ConfigRoot` 를 `const` → 속성(+ `ConfigFallbackReason`), 로그를 가장 먼저 준비 · `LockConfirmDialog` 의 ScreenSaver 자리 · `LogService.LogDirectory` · 셸 `App.OnStartup` 에서 켜는 중 실패를 받아 `Shutdown(1)`. 플랫폼 `changelog.md` 에 다른 소비 프로그램 영향과 함께 적음, `platform-guide.md` 11장 · 세 곳 고침. +- 하네스 `PlatformCfgTest`(새, 플랫폼 두 파일을 엮음) **24건** — 자리 고르기 · 둘 다 안 될 때 · 실제 임시 폴더 · 같은 이름 파일 · **없는 드라이브 글자**로 실제로 다른 자리를 고름 · 실패 글(켜는 중에는 "계속 쓸 수 있습니다" 를 안 함 · 로그가 없으면 "남았습니다" 를 안 함). +- 플랫폼은 **Debug 로만** 빌드했다(경고 0 · 오류 0). Release 는 빌드 후 단계가 곧바로 `D:\UbisamPlatform\bin` 을 덮어쓰기 때문이다 — 배포 폴더는 그대로(09-16). + +### 고친 뒤 (배포 묶음에 고친 Debug Core · Shell 두 파일만 바꿔 넣은 `%TEMP%\mergehub-beta-b2`) + +| 경우 | 결과 | +|---|---| +| D:\ 에 만들 수 있을 때 | 예전처럼 `D:\UbisamConfig` · `%LOCALAPPDATA%` 에 아무것도 안 생김 · 경고 없음 | +| D:\ 자리가 막혔을 때 | `C:\Users\Ubisam\AppData\Local\UbisamConfig` 에 Settings 넷 · Log 가 생기고 이름 창 → 네 탭 → 정상 종료. 로그 첫 줄 `[W] Platform: D:\UbisamConfig 를 쓸 수 없어 C:\Users\Ubisam\AppData\Local\UbisamConfig 에 설정 · 로그를 둡니다 (같은 이름을 가진 파일 또는 디렉터리가 이미 있어서 …)` | +| 두 자리 모두 막혔을 때 | 창 **"켜지 못했습니다"** — "프로그램을 켜지 못해 끝냅니다. 설정 폴더를 만들 수 없습니다. D:\UbisamConfig : … / C:\Users\Ubisam\AppData\Local\UbisamConfig : …" (로그가 없으니 로그 얘기는 없음) → [확인] 뒤 **프로세스 끝남** | + +- MergeHub 는 이전 Core 로 빌드된 그대로 새 Core 위에서 돌았다(바뀐 것은 속성 추가뿐, MergeHub 는 `ConfigRoot` 를 읽지 않는다). +- MergeHub 쪽: 매뉴얼 "설정 — … MergeHubSettings.json 에 저장된다" 에 D 없는 PC 의 자리를 덧붙이고, `MergeHubSettings.cs` 주석을 사실대로. 하네스 22벌 1,247건 그대로 · 빌드 경고 0 · 오류 0. + +### 남은 것 + +- **플랫폼 배포(`publish-platform.ps1` → `D:\UbisamPlatform\bin`)는 사용자 확인 뒤.** 배포한 뒤 `scripts\make-bundle.ps1` 로 묶음을 다시 만들어야 MergeHub 묶음에 들어간다. +- 시험이 남긴 것(모두 시험이 만든 것, 원본과 무관): `D:\UbisamConfig_b2시험1` · `_b2시험2` · `_b2시험3`(폴더) · `D:\UbisamConfig_b2막힘시험.빈파일` · `_b2막힘시험2.빈파일`, `%LOCALAPPDATA%\UbisamConfig_b2시험폴백`(폴더) · `UbisamConfig_b2막힘.빈파일`. `D:\UbisamConfig` 쪽 지우기가 보호되어 있어 지우지 않고 이름을 바꿔 두었다. +- 드라이브는 있는데 **읽기 전용**(CD · 쓰기 막힌 USB)인 경우도 같은 길(`CreateDirectory` 실패 → 다른 자리)로 가지만 재 보지는 않았다. 폴더는 있는데 파일만 못 쓰는 경우(권한)는 이번에 다루지 않았다. + ## C-1. 있는 [커밋 수정] 을 다시 내 보고 바로잡음 (2026-09-18, 완료 — 8 만 이번 범위 밖) ### 고치기 전에 여덟 가지를 화면에서 다시 냈다 diff --git a/doc/history/changelog.md b/doc/history/changelog.md index cafc11d..853c87a 100644 --- a/doc/history/changelog.md +++ b/doc/history/changelog.md @@ -8,6 +8,7 @@ | 날짜 | 항목 | 커밋 | |---|---|---| +| 2026-09-22 | **11차 B-2** — 설정 없는 첫 실행을 `D:\UbisamConfig` 를 백업 · 이름 바꿔 재 봄: 오류 창 없음 · 이름 창 → 네 탭 · 기본값이 매뉴얼 설정 표와 같음 · 최대화. D 드라이브가 없는 경우는 코드로 따라가고 같은 줄(`UiSettingsService.cs:86`)에서 실패하게 해 보니, 공용 예외 창이 "계속 쓸 수 있습니다 · 로그에 남았습니다" 라고 한 뒤 **창 없는 프로세스만 남았다**. 플랫폼에서 고침(플랫폼 `377ffd3`, 사용자 결정) — D 를 못 쓰면 `%LOCALAPPDATA%\UbisamConfig`, 켜는 중 실패는 "켜지 못했습니다" 뒤 끝냄. MergeHub 쪽은 매뉴얼 설정 자리 문장 · 설정 클래스 주석만. 플랫폼 배포는 확인 뒤 | 아래 | | 2026-09-22 | **11차 B-1** — 배포 묶음. 매뉴얼이 가리키던 Release 출력이 09-07 것이라 폴더 비교 탭 등 6차 이후가 없었다(형식 142개 중 74개 없음). Release 로 다시 빌드하고, 셸 · MergeHub 에서 참조를 따라가 **어디서도 닿지 않는 dll 7개**(OpenTK · GLWpfControl · SkiaSharp.Views · LiveCharts WPF · Extensions.Options 둘)와 맥 · 리눅스 · ARM 용 네이티브 · pdb · 빈 Lang 을 뺀 묶음을 만든다 — 97MB → 43.5MB. 플랫폼 Core 가 직접 참조하는 LiveCharts · Skia 는 사용자 결정대로 남김. 새 `scripts\make-bundle.ps1` 이 빌드 · 묶기 · `배포묶음.txt`(무엇이 왜 들었는지)를 하고, 남의 파일이 든 폴더는 비우지 않는다. 빈 폴더에서 켜 네 탭 · 병합 한 길 끝까지. 제품 코드 변경 없음 | 아래 | | 2026-09-22 | **11차 C-2** — 마지막이 아닌 커밋의 메시지를 바꾼다(기획안 "커밋 우클릭 → 이름 변경", 사용자 결정 좁은 범위). 이력 줄 우클릭 [메시지 바꾸기...] — MergeHub 첫 우클릭 메뉴이고, 우클릭한 줄을 먼저 고른다. 여러 줄 창과 확인 창("이 커밋과 그 뒤 N개가 새 해시로 다시 써집니다")을 거쳐, 고른 커밋 메시지만 갈고 뒤 커밋은 트리 · 작성자 · 작성 시각 그대로 다시 쓴다. 바꾸기 전 자리를 `refs/original/…` 에 남기고 알림 · 로그에 옛 → 새 HEAD. 올린 커밋 · 사이 병합 · 다른 브랜치도 품음 · 태그 · 작업 중 · 커밋 안 한 변경 · 다른 브랜치에만 있는 커밋이면 까닭을 알림으로 말하고 막는다. 화면에서 새 메시지가 끝 줄바꿈 없이 저장되는 것을 찾아 git `-m` 처럼 다듬게 함. 하네스 MergeSaveTest +40(272건) | 아래 | | 2026-09-18 | **11차 C-1 (마무리)** — [커밋 수정] 을 누르기 전에 **먼저 묻는다**(사용자 결정): 스테이징해 둔 파일이 있으면 "파일 N개도 이 커밋에 들어갑니다", 이미 올린 커밋이면 "origin/… 에 이미 올라가 있습니다 · 고치면 다음 Push 가 거부됩니다". 둘 다면 두 줄을 한 창에. [아니오] 면 커밋도 메시지 칸도 그대로 둔다. 막지 않는 까닭은 앞선 커밋 수가 마지막 fetch 시점 기준이라 확실치 않아서다. 하네스 MergeSaveTest +7(232건) | 아래 | diff --git a/doc/web/index.html b/doc/web/index.html index c60fe99..3bf4f73 100644 --- a/doc/web/index.html +++ b/doc/web/index.html @@ -309,7 +309,7 @@ figcaption{font-size:.82rem;color:var(--ink-3);margin-top:6px} 폴더 비교두 폴더에서 어느 파일이 다른지 찾는다. 파일을 두 번 누르면 파일 비교 탭으로 넘어간다. 파일 비교두 칸(기준 · 내 파일) 또는 네 칸(LOCAL · BASE · REMOTE · MERGED)으로 보고, 줄을 골라 반영하고 저장한다. Git 저장소면 커밋 이력이 함께 나온다. Git저장소 열기, 브랜치 · 병합, 충돌 목록, 스테이징 · 커밋, 이력, Blame, 태그 · 서브모듈. - 설정셸의 설정 탭 안 MergeHub 항목. D:\UbisamConfig\Settings\MergeHubSettings.json 에 저장된다. + 설정셸의 설정 탭 안 MergeHub 항목. D:\UbisamConfig\Settings\MergeHubSettings.json 에 저장된다. D 드라이브가 없는 PC 에서는 %LOCALAPPDATA%\UbisamConfig 아래 같은 자리(플랫폼, 로그 첫 줄에 까닭).

탭 순서가 작업 순서다. 폴더 비교로 다른 파일을 찾고 → 파일 비교로 들어가 고치고 → Git 에서 커밋한다. 켤 때 작업자 이름을 묻는 창이 뜬다(지난 이름이 채워져 있어 같은 사람이면 Enter 한 번). 이 이름이 머지 주석과 보고서에 들어간다. 이름을 저장하기 전에는 그 창이 닫히지도, 끌려 움직이지도 않는다.

diff --git a/doc/진행상황.md b/doc/진행상황.md index 23c1da2..d7a3478 100644 --- a/doc/진행상황.md +++ b/doc/진행상황.md @@ -344,7 +344,7 @@ | 상태 | 항목 | |---|---| | **완료** | B-1 배포 묶음 — 옛 Release(09-07)는 본 탭 3개 · 지금 형식 142개 중 74개가 없었다. Release 다시 빌드(경고 0 · 오류 0) · 참조를 따라가 **65개 97MB → 41개 43.5MB**(안 닿는 dll 7개 · 맥/리눅스/ARM 용 · pdb · 빈 Lang 뺌, 플랫폼 Core 가 참조하는 차트 몫은 사용자 결정대로 남김) · `scripts\make-bundle.ps1` 이 묶음과 `배포묶음.txt`(파일 · 크기 · 까닭) 를 만든다 · 빈 폴더(`%TEMP%\mergehub-beta`)에서 켜 네 탭 · 병합 한 길 끝까지(`647f1f8`, 줄끝 · BOM 바뀐 파일 0) · 매뉴얼 실행 위치 문장 고침 | -| 대기 | B-2 D 드라이브가 없는 PC · 설정 파일이 없는 첫 실행 (`D:\UbisamConfig` 고정, 플랫폼) | +| **완료(배포 대기)** | B-2 D 드라이브가 없는 PC · 설정 없는 첫 실행 — 첫 실행은 오류 없이 되고 기본값이 매뉴얼 표와 같다. D 를 못 쓰면 `UiSettingsService.cs:86` 에서 실패해 "계속 쓸 수 있습니다" 창 뒤 **창 없는 프로세스가 남는 것**을 같은 줄에서 재현. 플랫폼에서 고침(`377ffd3`, 사용자 결정): D 를 못 쓰면 `%LOCALAPPDATA%\UbisamConfig` · 켜는 중 실패는 "켜지 못했습니다" 뒤 끝냄. 세 경우 화면 확인 · 플랫폼 하네스 24건. **플랫폼 배포(`D:\UbisamPlatform\bin`)는 사용자 확인 뒤** | ### C. 커밋 메시지 수정 diff --git a/src/MergeHub/MergeHubSettings.cs b/src/MergeHub/MergeHubSettings.cs index 39af4bc..216f113 100644 --- a/src/MergeHub/MergeHubSettings.cs +++ b/src/MergeHub/MergeHubSettings.cs @@ -4,7 +4,8 @@ namespace MergeHub { /// /// 설정 탭에 자동 생성되는 편집 화면의 원본. - /// D:\UbisamConfig\Settings\MergeHubSettings.json 으로 저장된다. + /// {설정 폴더}\Settings\MergeHubSettings.json 으로 저장된다. 설정 폴더는 플랫폼이 정한다 - + /// 보통 D:\UbisamConfig, D 드라이브를 못 쓰면 %LOCALAPPDATA%\UbisamConfig (11차 B-2). /// public class MergeHubSettings {