ksj09406 7719094edf 최초 커밋: MergeHub (사내 Git Merge/Diff 도구)
UbisamBase 플랫폼 위에서 도는 플러그인. 지금까지 만든 것을 그대로 담는다.
- 폴더 비교 / 파일 비교(부분 수용·워드랩·찾기) / 3-Way 병합 / Git 조작
- 비교 엔진: histogram 정렬 · 이동 블록 감지 · 무시 규칙 · 13개 언어 토크나이저
- doc/ 에 작업 지시서와 진행 기록

빌드 산출물(bin/obj)은 추적하지 않는다 - 플랫폼 런타임이 빌드 때마다
D:\UbisamPlatform\bin 에서 복사되어 들어오므로 저장소에 담을 이유가 없다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-08 10:13:27 +09:00

60 lines
2.6 KiB
C#

using System.Windows;
using Microsoft.Extensions.DependencyInjection;
using MergeHub.Services;
using MergeHub.ViewModels;
using MergeHub.Views;
using UbisamBase.Core.Modules;
using UbisamBase.Core.Setup;
namespace MergeHub
{
/// <summary>
/// UbisamBase.Shell.exe 가 리플렉션으로 찾아 로드하는 단일 진입점.
/// 이 dll 자체는 실행 파일이 아니다.
/// </summary>
public class AppSetup : IAppSetup
{
public string GetAppName() => "MergeHub - 사내 Git Merge/Diff";
public void RegisterViews(ITabManager manager)
{
// 머지툴은 3분할 비교라 가로 공간이 곧 성능이다.
// 셸 기본 여백(26,22)을 없애고 창 전체를 쓴다 - 안쪽 여백은 HomeView가 직접 준다.
// 이 키는 테마 전환에도 유지되므로 한 번만 덮어쓰면 되고,
// ShellWindow가 창 생성 시점에 읽어가므로 RegisterViews 안에서 정해야 한다.
if (Application.Current is { } app)
app.Resources["Ubisam.Metric.ContentPadding"] = new Thickness(0);
// 탭 순서는 실제 작업 순서를 따른다.
// 폴더 비교로 "어느 파일이 다른가"를 먼저 보고 → 그 파일을 골라 파일 비교로 들어가고
// → 필요하면 Git 으로 커밋한다.
// 폴더 비교에서 항목을 더블클릭하면 파일 비교 탭으로 넘어가므로 흐름이 이어진다.
manager.AddMain<FolderView, FolderViewModel>(Icon.Folder, ViewIds.Folder, "폴더 비교");
manager.AddMain<HomeView, HomeViewModel>(Icon.Document, ViewIds.Home, "파일 비교");
manager.AddMain<GitView, GitViewModel>(Icon.Link, ViewIds.Git, "Git");
}
public void RegisterSettings(ITabManager manager)
{
manager.AddSettingsSub<MergeHubSettings>(TabManager.SettingsTabKey, "MergeHub");
}
public void RegisterServices(IServiceCollection services)
{
// Git 조작 계층. Repository 핸들 하나를 화면 전체가 공유하므로 싱글턴.
services.AddSingleton<IGitService, GitService>();
// 홈(머지툴) 탭과 Git 탭이 함께 보는 저장소 상태. 호출 직렬화도 여기서 한다.
services.AddSingleton<GitWorkspace>();
}
}
/// <summary>AddMain/AddSub 에서 탭을 다시 찾을 때 쓰는 키.</summary>
public static class ViewIds
{
public const string Home = "MergeHub.Home";
public const string Folder = "MergeHub.Folder";
public const string Git = "MergeHub.Git";
}
}