diff --git a/doc/history/2026-09-10-4차.md b/doc/history/2026-09-10-4차.md index dbad39d..dbd31f1 100644 --- a/doc/history/2026-09-10-4차.md +++ b/doc/history/2026-09-10-4차.md @@ -126,4 +126,34 @@ doc/ | [저장하지 않고 계속] | 파일은 손대지 않은 채 다음 파일이 열렸다 | | 고친 것 없이 두 번 연속 열기 | 창이 뜨지 않았다 | -검사 514건 통과 · 빌드 경고 0 · 오류 0. \ No newline at end of file +검사 514건 통과 · 빌드 경고 0 · 오류 0. +--- + +## A-2. 내보낸 보고서에 만든 사람이 없던 것 — **완료** (2026-09-10) + +**왜** - `결과 내보내기` 로 뽑은 글에 `만든 때` 는 있는데 **누가 뽑았는지가 없었다.** +남에게 보내라고 만든 기능인데 작성자가 없으면 받는 쪽이 되묻게 된다. + +**이름 판단을 한 함수로 모았다.** `MergeNote.AuthorOf` 를 새로 빼고 `MergeNote.Build` 도 그것을 쓴다. +설정에 적힌 이름이 없으면 윈도우 계정으로 물러선다. **같은 사람이 같은 화면에서 한 일인데 +주석과 보고서에 다른 이름이 남으면 그 자체가 버그다** - 판단이 두 군데로 갈리면 언젠가 어긋난다. + +**이름이 비어 있으면 줄 자체를 넣지 않는다.** `만든 사람: ` 만 덩그러니 있는 것보다 없는 편이 낫다. + +파일 비교 · 폴더 비교 두 보고서에 모두 들어간다. 자리는 `만든 때` 바로 아래다. + +**확인한 것** + +실제로 뽑아 본 파일 머리글이다. + +``` +MergeHub 파일 비교 결과 +만든 때: 2026-09-10 20:33:17 +만든 사람: 김승준 +왼쪽 : ...\left\Other.cpp +오른쪽: ...\right\Other.cpp +``` + +화면의 머지 주석 미리보기가 `// [김승준] 2026-09-10` 이었으니 **두 이름이 같다.** + +검사 8건 추가(`ReportTest` 23 → 31). 전체 **522건 통과** · 빌드 경고 0 · 오류 0. \ No newline at end of file diff --git a/doc/history/changelog.md b/doc/history/changelog.md index 8ec1919..ce347fa 100644 --- a/doc/history/changelog.md +++ b/doc/history/changelog.md @@ -8,6 +8,7 @@ | 날짜 | 항목 | 커밋 | |---|---|---| +| 2026-09-10 | **4차 A-2** — 내보낸 보고서 머리글에 만든 사람을 넣음. 이름 판단을 머지 주석과 한 함수로 모았다 | 아래 | | 2026-09-10 | **4차 A-1** — 저장하지 않은 편집이 말없이 사라지던 길 여덟 군데를 막음. 플랫폼에 세 갈래 확인 창을 새로 넣었다 | 아래 | | 2026-09-10 | **4차 D-2** — 항목을 끝내면 상세·상태·한 줄을 각각 어디에 적을지 공통 규칙으로 못박음 | 아래 | | 2026-09-10 | **4차 D-1** — 721줄짜리 진행상황을 `history/` 의 날짜별 파일로 나누고 지시서를 `작업지시/` 로 모음 | 아래 | @@ -28,6 +29,7 @@ | 날짜 | 문서 | 내용 | |---|---|---| +| 2026-09-10 | **4차 A-2** — 내보낸 보고서 머리글에 만든 사람을 넣음. 이름 판단을 머지 주석과 한 함수로 모았다 | 아래 | | 2026-09-10 | **4차 A-1** — 저장하지 않은 편집이 말없이 사라지던 길 여덟 군데를 막음. 플랫폼에 세 갈래 확인 창을 새로 넣었다 | 아래 | | 2026-09-10 | **4차 D-2** — 항목을 끝내면 상세·상태·한 줄을 각각 어디에 적을지 공통 규칙으로 못박음 | 아래 | | 2026-09-10 | **4차 D-1** — 721줄짜리 진행상황을 `history/` 의 날짜별 파일로 나누고 지시서를 `작업지시/` 로 모음 | 아래 | diff --git a/doc/진행상황.md b/doc/진행상황.md index c9a8a14..660669d 100644 --- a/doc/진행상황.md +++ b/doc/진행상황.md @@ -23,7 +23,7 @@ | 상태 | 항목 | |---|---| | **완료** | A-1 저장하지 않은 편집이 말없이 사라진다 | -| 대기 | A-2 내보낸 보고서에 만든 사람이 없다 | +| **완료** | A-2 내보낸 보고서에 만든 사람이 없다 | ### B. 매일 쓰는 마찰 줄이기 diff --git a/src/MergeHub/Services/CompareReport.cs b/src/MergeHub/Services/CompareReport.cs index a26f82b..65de3c3 100644 --- a/src/MergeHub/Services/CompareReport.cs +++ b/src/MergeHub/Services/CompareReport.cs @@ -20,11 +20,11 @@ namespace MergeHub.Services /// 파일 비교 결과. public static string ForFile(string leftLabel, string rightLabel, - IReadOnlyList lines, DateTime when) + IReadOnlyList lines, DateTime when, string? author = null) { var text = new StringBuilder(); - Head(text, "파일 비교 결과", leftLabel, rightLabel, when); + Head(text, "파일 비교 결과", leftLabel, rightLabel, when, author); var changed = 0; var added = 0; @@ -73,11 +73,11 @@ namespace MergeHub.Services /// 폴더 비교 결과. public static string ForFolder(string leftFolder, string rightFolder, - FolderCompareResult result, DateTime when) + FolderCompareResult result, DateTime when, string? author = null) { var text = new StringBuilder(); - Head(text, "폴더 비교 결과", leftFolder, rightFolder, when); + Head(text, "폴더 비교 결과", leftFolder, rightFolder, when, author); text.AppendLine("요약: " + result.Summary); if (result.Truncated) text.AppendLine("(항목이 너무 많아 도중에 멈춘 결과입니다)"); text.AppendLine(); @@ -115,10 +115,16 @@ namespace MergeHub.Services } } - private static void Head(StringBuilder text, string title, string left, string right, DateTime when) + /// + /// 뽑은 사람. 남에게 보내라고 만든 글이라 누가 뽑았는지가 없으면 받는 쪽이 되묻게 된다. + /// 비어 있으면 줄 자체를 넣지 않는다 - "만든 사람: " 만 덩그러니 있는 것보다 없는 편이 낫다. + /// + private static void Head(StringBuilder text, string title, string left, string right, DateTime when, + string? author) { text.AppendLine($"MergeHub {title}"); text.AppendLine($"만든 때: {when:yyyy-MM-dd HH:mm:ss}"); + if (!string.IsNullOrWhiteSpace(author)) text.AppendLine($"만든 사람: {author}"); text.AppendLine($"왼쪽 : {left}"); text.AppendLine($"오른쪽: {right}"); text.AppendLine(Rule); @@ -144,4 +150,4 @@ namespace MergeHub.Services _ => "같음" }; } -} \ No newline at end of file +} diff --git a/src/MergeHub/Services/MergeNote.cs b/src/MergeHub/Services/MergeNote.cs index bdf73cf..af2f91f 100644 --- a/src/MergeHub/Services/MergeNote.cs +++ b/src/MergeHub/Services/MergeNote.cs @@ -21,9 +21,19 @@ namespace MergeHub.Services /// 주석 한 조각을 만든다. 구성은 딱 세 가지 - [사용자] 날짜 설명. /// 설명이 비어 있어도 [사용자]와 날짜는 항상 남는다. /// + /// + /// 기록에 남길 사람 이름. 설정에 적힌 이름이 없으면 윈도우 계정으로 물러선다. + /// + /// 따로 뺀 까닭 - 머지 주석과 내보낸 보고서에 같은 이름이 찍혀야 한다. + /// 같은 사람이 같은 화면에서 한 일인데 두 곳에 다른 이름이 남으면 그 자체가 버그다. + /// 판단이 두 군데로 갈리면 언젠가 어긋난다. + /// + public static string AuthorOf(string? author) => + string.IsNullOrWhiteSpace(author) ? Environment.UserName : author!.Trim(); + public static string Build(string? author, DateTime when, string? comment, string? path) { - var who = string.IsNullOrWhiteSpace(author) ? Environment.UserName : author!.Trim(); + var who = AuthorOf(author); var body = $"[{who}] {when:yyyy-MM-dd}"; diff --git a/src/MergeHub/ViewModels/FolderViewModel.cs b/src/MergeHub/ViewModels/FolderViewModel.cs index feeac81..ef73643 100644 --- a/src/MergeHub/ViewModels/FolderViewModel.cs +++ b/src/MergeHub/ViewModels/FolderViewModel.cs @@ -270,7 +270,9 @@ namespace MergeHub.ViewModels try { - var report = CompareReport.ForFolder(LeftFolder, RightFolder, result, DateTime.Now); + // 파일 비교 쪽과 같은 이름이 찍혀야 한다(MergeNote.AuthorOf). + var report = CompareReport.ForFolder(LeftFolder, RightFolder, result, DateTime.Now, + MergeNote.AuthorOf(_workspace.AuthorName)); TextFile.Write(dialog.FileName, report); MessageUtil.ShowSuccessToast($"저장했습니다 · {Path.GetFileName(dialog.FileName)}"); } diff --git a/src/MergeHub/ViewModels/HomeViewModel.cs b/src/MergeHub/ViewModels/HomeViewModel.cs index 5d99cf1..baa0488 100644 --- a/src/MergeHub/ViewModels/HomeViewModel.cs +++ b/src/MergeHub/ViewModels/HomeViewModel.cs @@ -1591,9 +1591,11 @@ namespace MergeHub.ViewModels try { + // 머지 주석과 같은 자리에서 이름을 가져온다. 두 곳에 다른 이름이 찍히면 그 자체가 버그다. var report = CompareReport.ForFile(ReportLabel(BaseHeader, LeftFile), ReportLabel(LocalHeader, RightFile), - Lines, DateTime.Now); + Lines, DateTime.Now, + MergeNote.AuthorOf(_workspace.AuthorName)); TextFile.Write(dialog.FileName, report); MessageUtil.ShowSuccessToast($"저장했습니다 · {Path.GetFileName(dialog.FileName)}"); }