E-1. 원본 세 칸에 세로 스크롤 막대를 켰다. 가로와 달리 세로는 이 칸들이 실제로 굴러가므로 ScrollViewer 가 주는 막대를 그대로 쓴다. 대신 막대가 자리를 차지하는 만큼 여백 보정을 걷어냈다. 전에는 편집기 막대 폭만큼 오른쪽 여백을 줘서 글자 폭을 맞췄는데, 이제 진짜 막대가 그 자리를 차지하므로 여백까지 주면 글자 폭이 좁아져 접히는 자리가 어긋난다. E-2. 칸 폭을 줄였다 늘리면 행 높이가 돌아오지 않던 문제. 행 높이는 각 칸이 알려 온 글 높이 중 가장 큰 것을 쓴다. 그런데 글자를 그리는 칸이 세로로 늘어나 있어서(WPF 기본값 Stretch) 행이 한 번 커지면 그 다음부터는 "행 높이만큼 높다"고 되돌려 보냈다. 자기가 만든 값을 자기가 다시 읽는 셈이라 높이가 올라가기만 하고 내려오지 않았다. 글자 칸을 위로 붙여 자기 글 높이만 알리도록 고쳤다. E-3. 경로 줄과 코드 사이의 빈 공간. 패널 머리 높이를 상수로 못 박아 두어(124 / 74) 실제 내용보다 훨씬 컸다. 상수를 없애고 내용에 맞춰 줄어들게 한 뒤, 나란히 놓인 칸끼리는 SharedSizeGroup 으로 가장 큰 것에 맞춘다(REMOTE 만 Conflict 줄이 하나 더 있다). 2-Way 에서는 MERGED 머리도 같은 무리에 넣고 3-Way 에서는 뺀다. 2-Way 에서 한 화면에 보이는 코드가 29줄에서 34줄로 늘었다. 확인: 세로 막대를 끌면 세 칸이 함께 움직인다. 2560x1600 <-> 1920x1080 을 오가도, 가운데 구분선을 끌었다 되돌려도 처음과 같은 화면이 된다. 테스트 399건 그대로 통과. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
178 lines
11 KiB
Markdown
178 lines
11 KiB
Markdown
# 작업 지시 — MergeHub 3차 (버그 정리 + 기능 확장)
|
|
|
|
대상: `D:\Sorce\MergeTool\MergeHub` (플러그인) · `D:\Sorce\MergeTool\UbisamPlatform` (셸)
|
|
전제: 1차·2차 지시서와 `진행상황.md` 의 ①~⑤ 는 끝난 상태다. 아래는 실제로 써 보고 나온 문제와 다음 요구사항이다.
|
|
|
|
---
|
|
|
|
## 공통 규칙
|
|
|
|
- **A → B → C → D 순서로 진행한다.** A 는 프로그램이 죽거나 화면이 망가지는 문제라 제일 먼저다.
|
|
- **항목 하나를 끝낼 때마다** 빌드하고 실제로 실행해 화면을 확인한 뒤 보고한다. 전부 끝내고 한 번에 보고하지 않는다.
|
|
- 항목 하나가 끝나면 `doc/진행상황.md` 의 대기/진행/완료를 갱신하고 **로컬 커밋**한다. 커밋 메시지는 한국어 한 줄로 무엇을 고쳤는지 적는다.
|
|
- **푸쉬하지 않는다.** 원격 저장소가 생기기 전까지 `.git` 에만 쌓아 둔다.
|
|
- 기존 테스트 하네스(총 356건)는 계속 통과해야 한다. 로직을 건드리면 테스트를 먼저 늘린다.
|
|
- 빌드 경고 0 · 오류 0 을 유지한다. 앱이 실행 중이면 빌드가 파일 잠금으로 실패하므로 `UbisamBase.Shell` 을 먼저 종료한다.
|
|
- 플랫폼을 고치면 **다른 소비 프로그램에 미치는 영향**을 함께 적고 `doc/history/changelog.md` 에 남긴다.
|
|
|
|
---
|
|
|
|
## A. 먼저 고칠 것 — 죽거나 화면이 망가지는 문제
|
|
|
|
### A-1. 폴더 비교 탭에서 "왼쪽 폴더..." 를 누르면 프로그램이 다운된다
|
|
|
|
- 증상: 폴더 비교 탭의 왼쪽 폴더 선택 버튼(`FolderView.xaml` 의 `PickLeftFolderCommand`)을 누르면 프로그램이 그대로 죽는다.
|
|
- 오른쪽 폴더도 같은 증상인지 반드시 함께 확인한다.
|
|
- 죽는 지점을 먼저 특정한다(예외 로그 · 대화상자 호출 스레드 · 셸의 잠금/오버레이와의 충돌).
|
|
- **판정 기준**: 왼쪽·오른쪽 폴더를 연속으로 열 번 골라도 죽지 않는다.
|
|
|
|
### A-2. "화면 이동" 을 누르면 프로그램이 종료되거나 최소화된다
|
|
|
|
- 위치: `UbisamPlatform/src/UbisamBase.Core/Shell/ShellWindow.xaml.cs` 의 `MoveToNextMonitor`.
|
|
- 코드 주석에 이미 "새 자리의 다른 버튼에 떨어진다" 는 언급이 있다. 창을 옮긴 뒤 마우스 아래 버튼이 눌리거나 포커스가 엉키는 것으로 보인다.
|
|
- **판정 기준**: 모니터 두 대에서 화면 이동을 스무 번 연속으로 눌러도 종료·최소화가 한 번도 없다.
|
|
|
|
### A-3. 파일 비교 화면에서 "화면 이동" 을 누르면 원래 모니터로 되돌아온다
|
|
|
|
- 증상: 다른 탭에서는 옮겨지는데 파일 비교 탭에서 누르면 창이 원래 모니터로 복귀한다.
|
|
- 파일 비교 화면이 자기 위치를 되돌리는 코드(창 위치 복원 · 레이아웃 재계산 · 포커스 복원)를 찾아 원인을 적고 고친다.
|
|
- **판정 기준**: 파일 비교 탭에서도 다른 탭과 똑같이 다음 모니터로 옮겨지고, 그 자리에 남는다.
|
|
|
|
### A-4. "화면 이동" 을 누르면 잠금 관련 팝업이 뜬다
|
|
|
|
- 증상: 화면 이동을 눌렀는데 `LockConfirmDialog` 로 보이는 확인 창이 뜬다. 화면 이동과 화면 잠금은 별개 기능이므로 떠서는 안 된다.
|
|
- A-2 와 원인이 같을 수 있다(옮긴 뒤 다른 내비 버튼이 눌림). 같은 원인이면 함께 정리하고 그렇게 보고한다.
|
|
- **판정 기준**: 화면 이동으로는 어떤 팝업도 뜨지 않는다.
|
|
|
|
### A-5. 폴더 고르는 창에서 상위 폴더를 고를 수 없다
|
|
|
|
- 증상: 폴더 비교 탭에서 폴더를 고르면 <b>그 폴더 안으로 들어가야만</b> 선택된다.
|
|
목록에 보이는 상위 폴더를 눌러서 고를 수가 없어 늘 가장 깊은 폴더만 고르게 된다.
|
|
상위 폴더를 골라 놓고 하위까지 한꺼번에 비교하는 것이 폴더 비교의 기본 사용법인데 그것이 막힌다.
|
|
- 윈도우가 원래 가지고 있는 <b>폴더 선택 창</b>을 쓴다. 목록에서 폴더를 한 번 눌러 고를 수 있어야 한다.
|
|
- 창은 지금 경로 칸에 적힌 폴더에서 연다. 윈도우가 기억한 "마지막으로 본 폴더"에서 열면 엉뚱한 곳에서 시작한다.
|
|
- 곁들여: Git 탭에서 하위 폴더를 골랐더라도 위로 거슬러 올라가며 `.git` 이 있는 최상위를 찾아 연다.
|
|
- **판정 기준**: 목록에서 상위 폴더를 한 번 눌러 고를 수 있고, 그 폴더로 비교하면 하위 폴더까지 나온다.
|
|
|
|
---
|
|
|
|
## B. 3-Way 화면
|
|
|
|
### B-1. 3-Way 에서 가로 스크롤 막대가 보이지 않는다
|
|
|
|
- 지금은 가로 휠로만 움직인다. 막대가 없으면 긴 줄이 있다는 사실 자체를 모른다.
|
|
- 워드랩이 켜져 있을 때는 가로 스크롤이 필요 없으므로 막대도 숨긴다. 꺼져 있을 때만 보인다.
|
|
- 소스 3칸(LOCAL/BASE/REMOTE)과 MERGED 는 스크롤 그룹이 다르다. 막대도 그 구분을 따라야 한다.
|
|
- **판정 기준**: 워드랩을 끄고 긴 줄이 있는 파일을 3-Way 로 열면 막대가 보이고, 막대를 끌면 해당 그룹이 함께 움직인다.
|
|
|
|
### B-2. 3-Way 에서 아래로 스크롤하면 창마다 보이는 행 수가 달라진다
|
|
|
|
- 증상: 스크롤을 내릴수록 네 칸의 줄 맞춤이 어긋나 같은 줄이 나란히 보이지 않는다.
|
|
- 워드랩이 켜졌을 때와 꺼졌을 때를 모두 확인한다. 접힌 줄이 있으면 시각 줄 수가 칸마다 달라진다는 점이 원인일 가능성이 크다.
|
|
- **판정 기준**: 파일 끝까지 내려도 같은 줄 번호가 네 칸에서 같은 높이에 있다.
|
|
|
|
### B-3. Take Mine / Take Theirs 가 3-Way 에서 실제로 동작하는지 확인
|
|
|
|
- 2-Way 에서는 동작한다. 3-Way 에서 두 버튼과 단축키가 모두 먹는지, 충돌 줄에서 버튼이 회색으로 죽지 않는지 확인한다.
|
|
- 동작하지 않으면 고치고, 동작하면 "확인함" 으로 보고한다.
|
|
- **판정 기준**: 3-Way 충돌 줄에서 두 버튼이 눌리고 MERGED 에 반영되며, 해결한 만큼 남은 충돌 수가 줄어든다.
|
|
|
|
---
|
|
|
|
## C. 잔손질
|
|
|
|
### C-1. 소스 창의 코드 위 툴팁을 없앤다
|
|
|
|
- 증상: 파일 비교 화면에서 코드 위에 마우스를 올리면 그 줄 내용이 툴팁으로 다시 뜬다. 코드가 이미 보이는데 겹쳐 가려 방해만 된다.
|
|
- 코드 본문 툴팁만 없앤다. 버튼·상태 아이콘 툴팁은 그대로 둔다.
|
|
- **판정 기준**: 코드 위 어디에 올려도 툴팁이 뜨지 않는다.
|
|
|
|
### C-2. Git 탭에서 버튼과 텍스트 상자가 잘린다
|
|
|
|
- 증상: 작업 취소 등 버튼 글자와 입력 상자가 잘려 보인다.
|
|
- 창을 좁혔을 때·넓혔을 때 모두 확인한다. 고정 폭 대신 내용에 맞게 늘어나도록 정리한다.
|
|
- **판정 기준**: 창을 최소 크기까지 줄여도 글자가 잘리지 않는다.
|
|
|
|
### C-3. 폴더 복사 확인 팝업을 플랫폼 토스트 방식으로 바꾼다
|
|
|
|
- 지금은 별도 확인 창이 뜬다. 플랫폼이 제공하는 토스트 메시지와 같은 모양으로 맞춘다.
|
|
- **되돌릴 수 없는 동작(복사·삭제)의 확인 자체를 없애지는 않는다.** 확인은 남기되 생김새를 토스트와 통일한다. 완료 알림은 토스트로 띄운다.
|
|
- **판정 기준**: 폴더 복사·삭제 시 확인과 완료 알림이 프로그램의 다른 알림과 같은 모양이다.
|
|
|
|
---
|
|
|
|
## D. 기능 추가
|
|
|
|
### D-1. 코드는 같고 주석만 다른 파일을 다른 색으로
|
|
|
|
- 폴더 비교 결과에서 "코드가 다름" 과 "주석만 다름" 을 구분해 다른 색으로 보여 준다.
|
|
- 판단은 언어별 주석 기호(`LanguageProfile`)를 써서 주석과 공백을 뺀 뒤 비교한다.
|
|
- 어느 색이 무슨 뜻인지 화면 어딘가에 알려 준다.
|
|
- **판정 기준**: 주석 한 줄만 다른 파일과 코드가 다른 파일이 서로 다른 색으로 나온다.
|
|
|
|
### D-2. C++ 문법 강조
|
|
|
|
- 지금 C# 은 되고 C++ 은 안 된다. `.h .hpp .c .cpp .cc .cxx .inl` 을 포함한다.
|
|
- 키워드 · 문자열 · 주석 · 전처리기(`#include` 등)를 구분한다.
|
|
- **판정 기준**: C++ 파일을 열면 C# 과 같은 수준으로 색이 입혀진다.
|
|
|
|
### D-3. 폴더 안 전체 검색
|
|
|
|
- 폴더 비교 대상 폴더 전체에서 문자열을 찾는다.
|
|
- 대소문자 구분 · 확장자 필터 정도는 있어야 한다. 결과를 누르면 그 파일이 비교 화면으로 열린다.
|
|
- 큰 폴더에서도 화면이 멈추면 안 된다. 취소할 수 있어야 한다.
|
|
- **판정 기준**: 결과 목록에서 항목을 고르면 해당 파일이 열리고, 검색 중에도 창이 반응한다.
|
|
|
|
### D-4. 비교 창을 여러 개 띄울 수 있게 — **취소** (2026-09-09)
|
|
|
|
사용자 판단으로 뺀다. 번호는 그대로 둔다 — 뒤 번호를 밀면 앞서 오간 이야기와 어긋난다.
|
|
|
|
### D-5. 덩어리 단위 반영
|
|
|
|
- 덩어리 단위 반영은 2-Way 에 이미 들어가 있다(`de1a43c`). **먼저 지금 무엇이 되고 무엇이 안 되는지 확인해 보고한 뒤** 빠진 곳을 채운다.
|
|
- 3-Way 화면과 단축키에서도 같은 방식으로 동작해야 한다.
|
|
- **판정 기준**: 연속된 변경 줄 묶음이 한 번의 조작으로 통째로 반영된다.
|
|
|
|
### D-6. 비교 결과 텍스트 내보내기
|
|
|
|
- 비교 결과를 텍스트 파일로 저장한다. 파일 비교와 폴더 비교 양쪽에서 된다.
|
|
- 내용에는 양쪽 경로 · 요약(같음/다름/한쪽만) · 다른 줄 목록이 들어간다.
|
|
- **판정 기준**: 내보낸 파일을 메모장으로 열어 무엇이 어떻게 다른지 알아볼 수 있다.
|
|
|
|
### D-7. 파일·폴더 드래그 앤 드롭으로 열기
|
|
|
|
- 파일 두 개를 끌어다 놓으면 파일 비교, 폴더 두 개면 폴더 비교로 연다.
|
|
- 하나만 놓으면 그 자리(왼쪽/오른쪽)에만 넣는다.
|
|
- **판정 기준**: 탐색기에서 끌어다 놓는 것만으로 비교가 시작된다.
|
|
|
|
---
|
|
|
|
## 보고 형식
|
|
|
|
항목마다 이렇게 적는다.
|
|
|
|
- 무엇이 원인이었는지 한두 줄
|
|
- 어떤 파일을 어떻게 고쳤는지
|
|
- 실제로 실행해 확인한 결과
|
|
- 커밋 해시
|
|
|
|
---
|
|
|
|
## E. 추가 요청 (2026-09-09 오후)
|
|
|
|
### E-1. 원본 세 칸에 세로 스크롤 막대가 없다
|
|
|
|
- B-1 에서 가로 막대를 붙였는데 세로가 빠져 있었다.
|
|
- **판정 기준**: 세 칸 오른쪽에 막대가 보이고, 하나를 끌면 셋이 함께 움직인다.
|
|
|
|
### E-2. 칸 폭을 줄였다 늘리면 행 높이가 돌아오지 않는다
|
|
|
|
- 증상: 화면을 좁혔다가 다시 넓히면 접혔던 행이 <b>넓은 자리를 그대로 차지한 채</b> 남는다.
|
|
- 창을 옮겨 크기가 바뀌는 경우와 가운데 구분선을 끄는 경우 둘 다 확인한다.
|
|
- **판정 기준**: 좁혔다 되돌리면 처음과 똑같은 화면이 된다.
|
|
|
|
### E-3. 경로 줄과 코드 사이의 빈 공간을 없앤다
|
|
|
|
- 증상: 패널 머리(제목·경로) 아래에 쓰이지 않는 빈 자리가 넓게 남아 코드가 그만큼 덜 보인다.
|
|
- 나란히 놓인 칸끼리는 머리 높이가 같아야 첫 줄이 같은 눈높이에 온다. 그 조건은 지킨다.
|
|
- **판정 기준**: 경로 줄 바로 아래에서 코드가 시작하고, 두(세) 칸의 01행이 같은 높이에 있다. |