From 3386cb177ba841683267c6d5b51d2682f4f7814c Mon Sep 17 00:00:00 2001 From: leo Date: Tue, 20 May 2025 21:26:41 +0800 Subject: [PATCH] refactor: rewrite `git flow init` Signed-off-by: leo --- src/Commands/GitFlow.cs | 16 ++-------------- src/ViewModels/InitGitFlow.cs | 33 ++++++++++++++++++++++++++++++--- src/ViewModels/Repository.cs | 9 ++++++++- 3 files changed, 40 insertions(+), 18 deletions(-) diff --git a/src/Commands/GitFlow.cs b/src/Commands/GitFlow.cs index 18f51359..1d33fa3a 100644 --- a/src/Commands/GitFlow.cs +++ b/src/Commands/GitFlow.cs @@ -1,24 +1,12 @@ -using System.Collections.Generic; -using System.Text; - +using System.Text; using Avalonia.Threading; namespace SourceGit.Commands { public static class GitFlow { - public static bool Init(string repo, List branches, string master, string develop, string feature, string release, string hotfix, string version, Models.ICommandLog log) + public static bool Init(string repo, string master, string develop, string feature, string release, string hotfix, string version, Models.ICommandLog log) { - var current = branches.Find(x => x.IsCurrent); - - var masterBranch = branches.Find(x => x.Name == master); - if (masterBranch == null && current != null) - Branch.Create(repo, master, current.Head, log); - - var devBranch = branches.Find(x => x.Name == develop); - if (devBranch == null && current != null) - Branch.Create(repo, develop, current.Head, log); - var config = new Config(repo); config.Set("gitflow.branch.master", master); config.Set("gitflow.branch.develop", develop); diff --git a/src/ViewModels/InitGitFlow.cs b/src/ViewModels/InitGitFlow.cs index 7706375e..5188b773 100644 --- a/src/ViewModels/InitGitFlow.cs +++ b/src/ViewModels/InitGitFlow.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Text.RegularExpressions; using System.Threading.Tasks; @@ -109,9 +110,35 @@ namespace SourceGit.ViewModels return Task.Run(() => { - var succ = Commands.GitFlow.Init( + var succ = false; + var current = _repo.CurrentBranch; + + var masterBranch = _repo.Branches.Find(x => x.IsLocal && x.Name.Equals(_master, StringComparison.Ordinal)); + if (masterBranch == null) + { + succ = Commands.Branch.Create(_repo.FullPath, _master, current.Head, log); + if (!succ) + { + log.Complete(); + CallUIThread(() => _repo.SetWatcherEnabled(true)); + return false; + } + } + + var developBranch = _repo.Branches.Find(x => x.IsLocal && x.Name.Equals(_develop, StringComparison.Ordinal)); + if (developBranch == null) + { + succ = Commands.Branch.Create(_repo.FullPath, _develop, current.Head, log); + if (!succ) + { + log.Complete(); + CallUIThread(() => _repo.SetWatcherEnabled(true)); + return false; + } + } + + succ = Commands.GitFlow.Init( _repo.FullPath, - _repo.Branches, _master, _develop, _featurePrefix, diff --git a/src/ViewModels/Repository.cs b/src/ViewModels/Repository.cs index c90cc88c..9eec1f53 100644 --- a/src/ViewModels/Repository.cs +++ b/src/ViewModels/Repository.cs @@ -1459,8 +1459,15 @@ namespace SourceGit.ViewModels init.Icon = App.CreateMenuIcon("Icons.Init"); init.Click += (_, e) => { - if (CanCreatePopup()) + if (_currentBranch == null) + { + App.RaiseException(_fullpath, "Git flow init failed: No branch found!!!"); + } + else if (CanCreatePopup()) + { ShowPopup(new InitGitFlow(this)); + } + e.Handled = true; }; menu.Items.Add(init);