From 7d48090af644b4459728139733fc98ae7d263762 Mon Sep 17 00:00:00 2001 From: choiminyeong Date: Mon, 21 Sep 2026 22:12:37 +0900 Subject: [PATCH] =?UTF-8?q?=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20?= =?UTF-8?q?=ED=99=95=EC=9D=B8=20=EA=B3=BC=EC=A0=95=EC=9D=84=20update-log.t?= =?UTF-8?q?xt=EC=97=90=20=EB=82=A8=EA=B8=B0=EB=8F=84=EB=A1=9D=20-=20?= =?UTF-8?q?=EC=99=9C=20=EC=95=88=20=EB=96=B4=EB=8A=94=EC=A7=80=20=EB=B3=BC?= =?UTF-8?q?=20=EC=88=98=20=EC=9E=88=EA=B2=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5 --- dist/README.txt | 2 +- dist/UbisamBase.Core.dll | Bin 676864 -> 676864 bytes dist/UbisamBase.Launcher.exe | Bin 100352 -> 101888 bytes dist/UbisamBase.Shell.exe | Bin 86016 -> 86016 bytes dist/platform-version.json | 2 +- src/UbisamBase.Launcher/PlatformUpdater.cs | 46 +++++++++++++++++++++ 6 files changed, 48 insertions(+), 2 deletions(-) diff --git a/dist/README.txt b/dist/README.txt index f653698..2959f3b 100644 --- a/dist/README.txt +++ b/dist/README.txt @@ -1,5 +1,5 @@ UbisamBase 플랫폼 배포 폴더 (빌드할 때 자동 생성 - 직접 고치지 마세요) -갱신 시각 : 2026-09-21 22:06:55 +갱신 시각 : 2026-09-21 22:12:36 빌드 구성 : Release 원본 소스 : D:\업무\03_개발\Source\용접기\08_UbisamPlatform\ ---- diff --git a/dist/UbisamBase.Core.dll b/dist/UbisamBase.Core.dll index 9efcf653030ced0a97aeab5f02c306cadf3ec11c..230b4550a968605b043ab3a682389269e745fb06 100644 GIT binary patch delta 146 zcmZozq1muPb3zA8`VyC0jXhg?7&8tD*zC`IKIKKEQvq_vAo!eOsGXgOa5HkZY z3lOscF&hxG12M;TmcyJYI#^b`(R?s{gEv=zz}M})(|=67<=k^{%c4ipsSBqI_;A%I hKt(s7frb fD*6Z}3REwB*3M;y-}Y@5TbOz!wy*Kw3SkET0F*lc diff --git a/dist/UbisamBase.Launcher.exe b/dist/UbisamBase.Launcher.exe index 3c935973de59659fda977cc6179110ff6a9782ca..2a6e4ea0594da1580b9fd95b732d7cdf09d929e1 100644 GIT binary patch delta 9214 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 delta 7756 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 Fwg5%SES3NO delta 111 zcmZozz}m2YbwUTrn=MjvHukLH5;&~+%y?ePIgbenf3+vutTWu~!To}jrF!1|6_ZT_ z0|c11h_Nr8zSe!Z@51Y8N=v>?o+4PM02LG$hYEsJ|2deDyh!-ayX#6@8k&uSwi^jC Hp0fo2zS}X@ diff --git a/dist/platform-version.json b/dist/platform-version.json index cc83585..da7fe65 100644 --- a/dist/platform-version.json +++ b/dist/platform-version.json @@ -1,4 +1,4 @@ { -"version": "2026-09-21 22:06:55", +"version": "2026-09-21 22:12:36", "configuration": "Release" } diff --git a/src/UbisamBase.Launcher/PlatformUpdater.cs b/src/UbisamBase.Launcher/PlatformUpdater.cs index de2df40..536676a 100644 --- a/src/UbisamBase.Launcher/PlatformUpdater.cs +++ b/src/UbisamBase.Launcher/PlatformUpdater.cs @@ -26,10 +26,31 @@ namespace UbisamBase.Launcher; internal static class PlatformUpdater { private const string SettingsPath = @"D:\UbisamPlatform\update-settings.json"; + // 업데이트 확인은 조용히 지나가는 것이 기본이라, 왜 안 떴는지 볼 방법이 하나는 있어야 한다. + // 실행할 때마다 덮어쓰므로 파일이 쌓이지 않는다. + private const string LogPath = @"D:\UbisamPlatform\update-log.txt"; private const string VersionFileName = "platform-version.json"; private const int LsRemoteTimeoutMs = 10000; private const int CloneTimeoutMs = 180000; + private static readonly StringBuilder LogBuffer = new StringBuilder(); + + /// 확인 과정을 한 줄씩 남긴다(D:\UbisamPlatform\update-log.txt). 토큰이나 응답 내용은 남기지 않는다. + private static void Note(string message) + => LogBuffer.AppendLine(DateTime.Now.ToString("HH:mm:ss") + " " + message); + + private static void FlushLog() + { + try + { + File.WriteAllText(LogPath, LogBuffer.ToString()); + } + catch + { + // 로그를 못 써도 실행에는 지장이 없다. + } + } + /// 플랫폼 배포 폴더를 최신으로 만든다. 실패해도 예외를 밖으로 내보내지 않는다. public static void TryUpdate(string platformDir) { @@ -39,28 +60,38 @@ internal static class PlatformUpdater } catch (Exception ex) { + Note("예외 : " + ex.Message); MessageBox.Show( "플랫폼 업데이트를 확인하는 중 문제가 발생했습니다:\n" + ex.Message + "\n\n기존 버전으로 계속 실행합니다.", "UbisamBase 업데이트", MessageBoxButton.OK, MessageBoxImage.Warning); } + finally + { + FlushLog(); + } } private static void Run(string platformDir) { var settings = Settings.Load(SettingsPath); + Note($"시작 — 사용:{settings.Enabled} 자동:{settings.AutoUpdate} 주소:{(string.IsNullOrWhiteSpace(settings.RepositoryUrl) ? "(없음)" : settings.RepositoryUrl)}"); + if (!settings.Enabled || string.IsNullOrWhiteSpace(settings.RepositoryUrl)) { + Note("설정이 꺼져 있거나 주소가 비어 있어 건너뜀"); return; } // 1) 인터넷 연결 확인 — 연결이 없으면 깃을 부르지도 않는다(오프라인 현장 PC). if (!NetworkInterface.GetIsNetworkAvailable()) { + Note("인터넷 연결 없음 — 건너뜀"); return; } if (!TryRunGit("--version", null, LsRemoteTimeoutMs, out _)) { + Note("git을 찾지 못함 — 건너뜀"); return; // git이 깔려 있지 않은 PC — 업데이트 기능만 조용히 쉰다. } @@ -68,12 +99,16 @@ internal static class PlatformUpdater var branch = string.IsNullOrWhiteSpace(settings.Branch) ? "main" : settings.Branch.Trim(); if (!TryRunGit($"ls-remote \"{settings.RepositoryUrl}\" \"refs/heads/{branch}\"", null, LsRemoteTimeoutMs, out var lsRemote)) { + Note("원격 확인 실패(주소·권한·네트워크) — 건너뜀"); return; // 주소가 틀렸거나 접근 권한이 없다 — 실행을 막지 않는다. } var remoteCommit = FirstToken(lsRemote); + Note($"원격 커밋:{Short(remoteCommit)} / 설치된 커밋:{Short(settings.InstalledCommit)}"); + if (string.IsNullOrEmpty(remoteCommit) || remoteCommit == settings.InstalledCommit) { + Note("새 커밋 없음 — 끝"); return; } @@ -87,17 +122,20 @@ internal static class PlatformUpdater $"clone --depth 1 --branch \"{branch}\" --filter=blob:none --sparse \"{settings.RepositoryUrl}\" \"{tempDir}\"", null, CloneTimeoutMs, out _)) { + Note("업데이트 파일을 내려받지 못함(clone 실패) — 건너뜀"); return; } if (!TryRunGit($"sparse-checkout set \"{distName}\"", tempDir, CloneTimeoutMs, out _)) { + Note("업데이트 폴더를 꺼내지 못함(sparse-checkout 실패) — 건너뜀"); return; } var remoteDist = Path.Combine(tempDir, distName.Replace('/', '\\')); if (!Directory.Exists(remoteDist)) { + Note($"저장소에 {distName} 폴더가 없음 — 커밋만 기록"); // 저장소에 아직 업데이트 파일이 없다 — 이 커밋은 확인했다고 기록만 하고 넘어간다. settings.InstalledCommit = remoteCommit; settings.Save(SettingsPath); @@ -109,8 +147,11 @@ internal static class PlatformUpdater // 버전은 배포 시각("yyyy-MM-dd HH:mm:ss")이라 문자열 비교로 앞뒤가 가려진다. // 원격이 더 새것일 때만 업데이트한다 — 소스만 바뀐 커밋이면 확인 기록만 남긴다. + Note($"원격 버전:{remoteVersion} / 지금 버전:{localVersion}"); + if (string.IsNullOrEmpty(remoteVersion) || string.CompareOrdinal(remoteVersion, localVersion) <= 0) { + Note("더 새 버전이 아님 — 커밋만 기록"); settings.InstalledCommit = remoteCommit; settings.Save(SettingsPath); return; @@ -119,11 +160,13 @@ internal static class PlatformUpdater // 3) 자동 업데이트가 아니면 물어본다. if (!settings.AutoUpdate && !UpdateDialog.Ask(localVersion, remoteVersion)) { + Note("사용자가 \"나중에\"를 선택 — 다음 실행 때 다시 물어본다"); // 기록을 남기지 않는다 — 다음에 켤 때 다시 물어본다. return; } var failed = CopyAll(remoteDist, platformDir); + Note($"업데이트 완료 — 바꾸지 못한 파일:{failed}개"); settings.InstalledCommit = remoteCommit; settings.InstalledVersion = remoteVersion; settings.Save(SettingsPath); @@ -142,6 +185,9 @@ internal static class PlatformUpdater } } + private static string Short(string commit) + => string.IsNullOrEmpty(commit) ? "(없음)" : commit.Substring(0, Math.Min(7, commit.Length)); + private static string FirstToken(string text) { var trimmed = (text ?? string.Empty).Trim();