10차 C-1: 머지 주석 무시를 끈 채 다시 정렬해도 반영 색이 코드 줄에 남는다
설정 "머지 주석 무시" 를 끄고 네 칸을 다시 정렬하면 주석 줄이 BASE 코드 줄과 한 행이 되어 반영 표시(BASE 줄 번호)가 주석 줄에, 반영한 코드 줄은 "직접 수정" 으로 보였다. - 네 칸은 규칙과 상관없이 NoteRows.SplitFour 로 주석 줄과 코드 줄을 떼어 놓는다 - 다시 정렬한 우리 주석 줄은 "반영함" 으로 칠하지 않는다(넣는 순간과 같은 모양) - 두 칸은 그대로 - 떼어 보니 규칙 끔에서 남은 차이가 4 → 5줄로 늘었다 - 하네스 NoteTest +5 (74건), 22벌 1,131건 통과, 빌드 경고 0 오류 0 확인: Weld/Unit1.cs 규칙 끔 넣은 직후 = 다시 정렬 뒤(반영함 6 · 추가 6), 규칙 켬 그대로, 요약 · 줄 수 · 저장 SHA256 고치기 전과 같음. 두 칸 차이 수 고치기 전과 같음. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
5eaf6011dd
commit
fc6c5846ae
@ -112,3 +112,63 @@
|
|||||||
|
|
||||||
- UI 자동화의 `SelectionItemPattern.Select()` 처럼 **마우스 · 키보드를 거치지 않고** 목록 선택을 바꾸면 묻지 않고 따라간다(사람 길이 아님).
|
- UI 자동화의 `SelectionItemPattern.Select()` 처럼 **마우스 · 키보드를 거치지 않고** 목록 선택을 바꾸면 묻지 않고 따라간다(사람 길이 아님).
|
||||||
- 처음 켰을 때 Git 탭 커밋 내용 칸이 비어 있는 것은 전부터 그렇다(이력에서 고르면 그려진다).
|
- 처음 켰을 때 Git 탭 커밋 내용 칸이 비어 있는 것은 전부터 그렇다(이력에서 고르면 그려진다).
|
||||||
|
|
||||||
|
## C-1. "머지 주석 무시" 를 끈 채 다시 정렬하면 반영 색이 옆 줄로 옮겨 간다 (2026-09-17, 완료)
|
||||||
|
|
||||||
|
### 고치기 전에 다시 났다 (새로 만든 저장소, 병합 → `Weld/Unit1.cs` 네 칸, `d10-c1.ps1`)
|
||||||
|
|
||||||
|
설정 `IgnoreMergeNotes` 를 끄고(켬도 같이 잼) 첫 충돌 Take Theirs → 비교 규칙 [Aa] 두 번(다시 정렬) → 나머지 5개 Take Theirs → 다시 정렬 두 번 → [Save].
|
||||||
|
|
||||||
|
| 때 | 규칙 끔 범례 | 규칙 켬 범례 |
|
||||||
|
|---|---|---|
|
||||||
|
| Take Theirs 직후 | 머지 반영함 1 · 추가 1 | 머지 반영함 1 · 무시 1 |
|
||||||
|
| 다시 정렬 뒤 | 머지 반영함 1 · **직접 수정 1** · 추가 0 | 같음 |
|
||||||
|
| 여섯 모두 Theirs | 머지 반영함 6 · 추가 6 | 머지 반영함 6 · 무시 6 |
|
||||||
|
| 다시 정렬 뒤 | 머지 반영함 6 · **직접 수정 6** · 추가 0 | 같음 |
|
||||||
|
| Save 한 파일 | 3793줄 · 주석 6 · SHA256 `6FE4994D…` | 같은 해시 |
|
||||||
|
|
||||||
|
- 규칙 끔에서 다시 정렬하면 초록(반영함)이 **주석 줄**에, 보라(직접 수정)가 **반영한 코드 줄**에 붙었다. 요약 · 줄 수 · 저장 내용은 같았다.
|
||||||
|
|
||||||
|
### 원인
|
||||||
|
|
||||||
|
- 주석 줄과 코드 줄이 한 행에 짝지어진 것을 떼어 놓는 `NoteRows.SplitFour` 를 **규칙이 켜져 있을 때만** 했다(6차 B-5).
|
||||||
|
끄면 정렬기가 MERGED 의 주석 줄을 BASE 의 코드 줄(`Power93`)과 한 행에 두고, 반영한 코드 줄은 BASE 없는 다음 행으로 밀린다.
|
||||||
|
- 반영 표시는 **BASE 줄 번호**로 붙들어 두므로(`_appliedBaseNumbers`) 주석 행에 붙고, BASE 없는 코드 행은 글이 바뀐 줄이라 "직접 수정" 이 됐다.
|
||||||
|
- 덧: 다시 정렬할 때 우리 주석 줄을 `IsApplied = true` 로 두어, 떼어 놓기만 고치면 이번에는 주석 줄도 "머지 반영함" 이 되어 반영 수가 두 배(12)로 셌다.
|
||||||
|
|
||||||
|
### 고친 것
|
||||||
|
|
||||||
|
- `HomeViewModel.BuildThreeWayLines` — 네 칸은 규칙과 상관없이 `NoteRows.SplitFour` 로 떼어 놓는다. 무시할지(색 · 차이 수)는 규칙이 따로 정한다.
|
||||||
|
- `HomeViewModel.ReloadLinesFrom` — 다시 만든 줄이 우리 주석 줄이면 `IsMergeNote` 만 되찾고 **"반영함" 으로 칠하지 않는다**(넣는 순간과 같은 모양 - 9차 B-1 과 같은 원칙). "직접 수정" 으로도 치지 않는다.
|
||||||
|
- **두 칸은 규칙을 끄면 떼어 놓지 않는 그대로 둔다** — 아래 "두 칸도 떼어 봤다".
|
||||||
|
- 하네스 `NoteTest` 5건(74건): 비교 키 없이(규칙 끔) 정렬하면 주석 줄과 코드 줄이 한 행에 섞이고, 떼어 놓으면 주석 줄은 혼자 서고 반영한 코드 줄이 BASE(2행) · MINE · REMOTE 와 한 행이 된다.
|
||||||
|
|
||||||
|
### 두 칸도 떼어 봤다 → 되돌림
|
||||||
|
|
||||||
|
규칙 끔 · 두 칸 비교(Git 아님, `d10-c1-two.ps1`) — 주석만 끼어든 줄 · 주석 + 코드 고침 · 줄 끝 주석을 한 파일에:
|
||||||
|
|
||||||
|
| 빌드 | 연 뒤 | 다시 정렬 뒤 |
|
||||||
|
|---|---|---|
|
||||||
|
| 고치기 전 | 남은 차이 4줄 | 2줄 (반영함 2 · 추가 1) |
|
||||||
|
| 두 칸도 늘 떼어 놓음 | **5줄** (삭제 1 이 새로 생김) | **3줄** |
|
||||||
|
| 최종(두 칸은 규칙 켤 때만) | 4줄 | 2줄 (반영함 0 · 추가 2 — 주석 줄을 반영함으로 안 칠함) |
|
||||||
|
| 규칙 켬(세 빌드 모두) | 1줄 | 1줄 |
|
||||||
|
|
||||||
|
- 규칙을 끄면 주석 줄에 비교 키가 없어 **정렬기가 이미 한 줄씩 밀려 짝짓는다**(`int Speed3 = 303;` ↔ `int Speed2 = 222;`). 떼어 놓아도 밀린 짝은 풀리지 않고 한 줄이 더 갈라졌다.
|
||||||
|
두 칸에는 반영 표시를 BASE 줄 번호로 붙드는 일도 없어 되돌렸다.
|
||||||
|
|
||||||
|
### 확인한 것 (최종 빌드)
|
||||||
|
|
||||||
|
| 네 칸 · `Weld/Unit1.cs` | 규칙 끔 | 규칙 켬 |
|
||||||
|
|---|---|---|
|
||||||
|
| Take Theirs 직후 → 다시 정렬 뒤 | 반영함 1 · 추가 1 → **반영함 1 · 추가 1** | 반영함 1 · 무시 1 → 같음 |
|
||||||
|
| 여섯 모두 → 다시 정렬 뒤 | 반영함 6 · 추가 6 → **반영함 6 · 추가 6** | 반영함 6 · 무시 6 → 같음 |
|
||||||
|
| 요약 · 총 줄 수 | 고치기 전과 같음(남은 충돌 5 → 충돌 정리 끝 · 3788 → 3793줄) | 같음 |
|
||||||
|
| Save 한 파일 | 3793줄 · 주석 6 · SHA256 `6FE4994D…` (고치기 전과 같음) | 같음 |
|
||||||
|
| 화면(다시 정렬 뒤) | 주석 줄 파랑(추가) · 반영한 코드 줄 초록 · BASE `Power93` 은 코드 줄과 한 행 | - |
|
||||||
|
|
||||||
|
- 하네스 22벌 1,131건 통과(+5) · 빌드 경고 0 · 오류 0. 설정은 시험마다 백업 → 되돌림(해시 같음).
|
||||||
|
|
||||||
|
### 남긴 것
|
||||||
|
|
||||||
|
- 규칙을 끈 두 칸 비교에서 주석 줄이 끼어들면 정렬이 한 줄씩 밀리는 것(위 표의 `Speed3` ↔ `Speed2`)은 규칙을 끈 이상 비교 키가 없어 생기는 모양이라 그대로 둔다. 기본값(켬)에서는 나지 않는다.
|
||||||
|
|||||||
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
| 날짜 | 항목 | 커밋 |
|
| 날짜 | 항목 | 커밋 |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
|
| 2026-09-17 | **10차 C-1** — 설정 "머지 주석 무시" 를 끈 채 네 칸을 다시 정렬하면 주석 줄이 BASE 코드 줄과 한 행이 되어 반영 표시(BASE 줄 번호)가 주석 줄에, 반영한 코드 줄은 "직접 수정" 으로 보였다. 네 칸은 규칙과 상관없이 주석 줄과 코드 줄을 떼어 놓고, 다시 정렬한 주석 줄을 "반영함" 으로 칠하지 않게 함. 요약 · 줄 수 · 저장 해시 그대로. 두 칸도 떼어 보니 차이 수가 늘어(4 → 5줄) 두 칸은 그대로. 하네스 NoteTest +5 | 아래 |
|
||||||
| 2026-09-17 | **10차 B-1** — Git 탭과 파일 비교 탭이 고른 커밋 값을 함께 쓰는데 표시는 새로고침 전까지 서로 안 따라왔다. 파일 비교 탭에서 고르면 Git 탭은 옛 커밋에 선택 표시가 남은 채 **[Revert] 가 보이지 않는 커밋에 걸렸다.** 사용자 결정대로 양방향으로 바로 따라가고(`CommitChosen`), 파일 비교 탭에 저장 안 한 편집이 있으면 Git 탭 목록이 선택을 바꾸기 전에 물어 [취소] 면 누름을 막는다. 하네스 +4 | 아래 |
|
| 2026-09-17 | **10차 B-1** — Git 탭과 파일 비교 탭이 고른 커밋 값을 함께 쓰는데 표시는 새로고침 전까지 서로 안 따라왔다. 파일 비교 탭에서 고르면 Git 탭은 옛 커밋에 선택 표시가 남은 채 **[Revert] 가 보이지 않는 커밋에 걸렸다.** 사용자 결정대로 양방향으로 바로 따라가고(`CommitChosen`), 파일 비교 탭에 저장 안 한 편집이 있으면 Git 탭 목록이 선택을 바꾸기 전에 물어 [취소] 면 누름을 막는다. 하네스 +4 | 아래 |
|
||||||
| 2026-09-17 | **10차 A-1** — 9차 D-1 N1(네 칸에서 고르기 한 번이 안 남아 멈춤)을 앱 안 임시 로그(잰 뒤 되돌림)와 함께 61회 · 누름 366번(병합 · cherry-pick × 9차 간격 · 0.1초) 되풀이 — 다시 안 남, 앱은 Take 372번 모두 충돌 줄에서 받아 하나씩 줄임(헛돈 0). Take 뒤 [다음 충돌] 처리 전에는 Take 단추가 꺼져 있는데 9차 시험 도구가 "꺼져서 안 누름" 을 버린 것으로 보임. 제품 코드 변경 없음, 시험 도구가 다시 누르고 못 누르면 적게 고침 | 아래 |
|
| 2026-09-17 | **10차 A-1** — 9차 D-1 N1(네 칸에서 고르기 한 번이 안 남아 멈춤)을 앱 안 임시 로그(잰 뒤 되돌림)와 함께 61회 · 누름 366번(병합 · cherry-pick × 9차 간격 · 0.1초) 되풀이 — 다시 안 남, 앱은 Take 372번 모두 충돌 줄에서 받아 하나씩 줄임(헛돈 0). Take 뒤 [다음 충돌] 처리 전에는 Take 단추가 꺼져 있는데 9차 시험 도구가 "꺼져서 안 누름" 을 버린 것으로 보임. 제품 코드 변경 없음, 시험 도구가 다시 누르고 못 누르면 적게 고침 | 아래 |
|
||||||
| 2026-09-17 | **10차 지시서** — 9차 전부 끝. D-1 에서 새로 걸린 N1(A-1 네 칸에서 고르기 한 번이 남지 않아 멈춤 — 자동 조작인지 제품인지 원인부터)과 9차에서 적어 둔 셋(B-1 Git 탭에서 고른 커밋을 파일 비교 탭이 안 따라옴 — 먼저 정함 · C-1 머지 주석 무시를 끈 채 다시 정렬하면 반영 색이 옆 줄로 · D-1 첫 폴더 비교 9.2초 — 재고 정함) · E-1 다섯 길 + pull · E-2 웹 문서. 코드 변경 없음 | 아래 |
|
| 2026-09-17 | **10차 지시서** — 9차 전부 끝. D-1 에서 새로 걸린 N1(A-1 네 칸에서 고르기 한 번이 남지 않아 멈춤 — 자동 조작인지 제품인지 원인부터)과 9차에서 적어 둔 셋(B-1 Git 탭에서 고른 커밋을 파일 비교 탭이 안 따라옴 — 먼저 정함 · C-1 머지 주석 무시를 끈 채 다시 정렬하면 반영 색이 옆 줄로 · D-1 첫 폴더 비교 9.2초 — 재고 정함) · E-1 다섯 길 + pull · E-2 웹 문서. 코드 변경 없음 | 아래 |
|
||||||
|
|||||||
@ -298,7 +298,7 @@
|
|||||||
|
|
||||||
| 상태 | 항목 |
|
| 상태 | 항목 |
|
||||||
|---|---|
|
|---|---|
|
||||||
| 대기 | C-1 "머지 주석 무시" 를 끈 채 다시 정렬하면 반영 색이 옆 줄로 옮겨 간다 |
|
| **완료** | C-1 "머지 주석 무시" 를 끈 채 다시 정렬하면 반영 색이 옆 줄로 옮겨 간다 — 네 칸은 규칙과 상관없이 주석 줄과 코드 줄을 떼어 놓고, 다시 정렬한 주석 줄을 "반영함" 으로 칠하지 않음. 규칙 끔 넣은 직후 = 다시 정렬 뒤(반영함 6 · 추가 6), 요약 · 줄 수 · 저장 해시 그대로. 두 칸도 떼어 보니 차이 수가 4 → 5줄로 늘어 두 칸은 그대로 둠 |
|
||||||
|
|
||||||
### D. 처음 한 번이 느리다
|
### D. 처음 한 번이 느리다
|
||||||
|
|
||||||
|
|||||||
@ -1530,7 +1530,9 @@ namespace MergeHub.ViewModels
|
|||||||
baseKeys, mineKeys, remoteKeys, mergedKeys);
|
baseKeys, mineKeys, remoteKeys, mergedKeys);
|
||||||
|
|
||||||
// 머지 주석 줄과 코드 줄이 한 행에 짝지어졌으면 떼어 놓는다(6차 B-5, NoteRows 설명 참고).
|
// 머지 주석 줄과 코드 줄이 한 행에 짝지어졌으면 떼어 놓는다(6차 B-5, NoteRows 설명 참고).
|
||||||
if (Rules.IgnoreMergeNotes) aligned = NoteRows.SplitFour(aligned, IsNoteLine);
|
// 규칙 "머지 주석 무시" 를 꺼도 뗀다(10차 C-1) - 끄면 주석 줄이 BASE 의 코드 줄과 한 행이 되어, BASE 줄 번호로 붙든
|
||||||
|
// 반영 표시가 주석 줄에 붙고 반영한 코드 줄은 BASE 없는 "직접 수정" 으로 보였다. 무시할지(색 · 차이 수)는 규칙이 따로 정한다.
|
||||||
|
aligned = NoteRows.SplitFour(aligned, IsNoteLine);
|
||||||
|
|
||||||
var rows = new List<MergeLine>(aligned.Count);
|
var rows = new List<MergeLine>(aligned.Count);
|
||||||
|
|
||||||
@ -1605,6 +1607,8 @@ namespace MergeHub.ViewModels
|
|||||||
var aligned = LineAligner.Align(baseLines, localLines, baseKeys, localKeys);
|
var aligned = LineAligner.Align(baseLines, localLines, baseKeys, localKeys);
|
||||||
|
|
||||||
// 머지 주석 줄과 코드 줄이 한 행에 짝지어졌으면 떼어 놓는다(6차 B-5).
|
// 머지 주석 줄과 코드 줄이 한 행에 짝지어졌으면 떼어 놓는다(6차 B-5).
|
||||||
|
// 네 칸과 달리 규칙을 끄면 떼지 않는다(10차 C-1 에서 잼) - 끄면 주석 줄에 비교 키가 없어 정렬기가 이미 한 줄씩 밀려 짝짓고,
|
||||||
|
// 떼어 놓아도 밀린 짝이 풀리지 않아 "남은 차이" 가 4 → 5줄로 늘었다. 두 칸에는 반영 표시를 BASE 줄 번호로 붙드는 일도 없다.
|
||||||
if (Rules.IgnoreMergeNotes) aligned = NoteRows.SplitTwo(aligned, IsNoteLine);
|
if (Rules.IgnoreMergeNotes) aligned = NoteRows.SplitTwo(aligned, IsNoteLine);
|
||||||
|
|
||||||
var rows = new List<MergeLine>(aligned.Count);
|
var rows = new List<MergeLine>(aligned.Count);
|
||||||
@ -2284,13 +2288,12 @@ namespace MergeHub.ViewModels
|
|||||||
|
|
||||||
// 우리가 남긴 머지 주석 줄은 "사용자가 직접 넣은 줄"이 아니다.
|
// 우리가 남긴 머지 주석 줄은 "사용자가 직접 넣은 줄"이 아니다.
|
||||||
// 표시가 줄 객체에만 있어서 다시 만들면 사라진다 - 글을 보고 되찾는다.
|
// 표시가 줄 객체에만 있어서 다시 만들면 사라진다 - 글을 보고 되찾는다.
|
||||||
|
// "반영함" 으로도 칠하지 않는다(10차 C-1) - 넣는 순간은 반영 표시가 없는데(규칙 끔이면 "추가") 다시 정렬하면
|
||||||
|
// "머지 반영함" 이 되어 반영 수가 코드 줄 · 주석 줄 두 번 셌다. 넣는 순간과 같은 모양으로 둔다(9차 B-1 과 같은 원칙).
|
||||||
if (MergeNote.LooksLikeNote(row.LocalText, SelectedFile))
|
if (MergeNote.LooksLikeNote(row.LocalText, SelectedFile))
|
||||||
{
|
|
||||||
row.IsMergeNote = true;
|
row.IsMergeNote = true;
|
||||||
row.IsApplied = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!row.IsApplied && row.LocalNumber is int number && touched.Contains(number))
|
if (!row.IsApplied && !row.IsMergeNote && row.LocalNumber is int number && touched.Contains(number))
|
||||||
row.IsManuallyEdited = true;
|
row.IsManuallyEdited = true;
|
||||||
|
|
||||||
Lines.Add(row);
|
Lines.Add(row);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user