mirror of
https://github.com/sourcegit-scm/sourcegit.git
synced 2024-12-25 21:07:20 -08:00
code_review: PR #793
* do NOT modify the existing merge, and add a new constructor for `Commands.Merge` instead * rewrite `ViewModels.MergeMultiple` - since `_histories.Commits.Find` may returns null, use `List<object>` instead of `List<Models.Commits>` - supports display merge target as both `Models.Commit` and `Models.Branch` * rename translation key `Text.MergeMultiple.Commit` to `Text.MergeMultiple.Targets`, and add translations for zh_CN and zh_TW * some UI/UX changes
This commit is contained in:
parent
4eed9674b4
commit
94daa46db9
10 changed files with 122 additions and 40 deletions
|
@ -1,18 +1,41 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
namespace SourceGit.Commands
|
namespace SourceGit.Commands
|
||||||
{
|
{
|
||||||
public class Merge : Command
|
public class Merge : Command
|
||||||
{
|
{
|
||||||
public Merge(string repo, string source, string mode, string strategy, Action<string> outputHandler)
|
public Merge(string repo, string source, string mode, Action<string> outputHandler)
|
||||||
{
|
{
|
||||||
_outputHandler = outputHandler;
|
_outputHandler = outputHandler;
|
||||||
WorkingDirectory = repo;
|
WorkingDirectory = repo;
|
||||||
Context = repo;
|
Context = repo;
|
||||||
TraitErrorAsOutput = true;
|
TraitErrorAsOutput = true;
|
||||||
if (strategy != null)
|
Args = $"merge --progress {source} {mode}";
|
||||||
strategy = string.Concat("--strategy=", strategy);
|
}
|
||||||
Args = $"merge --progress {strategy} {source} {mode}";
|
|
||||||
|
public Merge(string repo, List<string> targets, bool autoCommit, string strategy, Action<string> outputHandler)
|
||||||
|
{
|
||||||
|
_outputHandler = outputHandler;
|
||||||
|
WorkingDirectory = repo;
|
||||||
|
Context = repo;
|
||||||
|
TraitErrorAsOutput = true;
|
||||||
|
|
||||||
|
var builder = new StringBuilder();
|
||||||
|
builder.Append("merge --progress ");
|
||||||
|
if (!string.IsNullOrEmpty(strategy))
|
||||||
|
builder.Append($"--strategy={strategy} ");
|
||||||
|
if (!autoCommit)
|
||||||
|
builder.Append("--no-commit ");
|
||||||
|
|
||||||
|
foreach (var t in targets)
|
||||||
|
{
|
||||||
|
builder.Append(t);
|
||||||
|
builder.Append(' ');
|
||||||
|
}
|
||||||
|
|
||||||
|
Args = builder.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnReadline(string line)
|
protected override void OnReadline(string line)
|
||||||
|
|
|
@ -9,7 +9,7 @@ namespace SourceGit.Models
|
||||||
public string Arg { get; internal set; }
|
public string Arg { get; internal set; }
|
||||||
|
|
||||||
public static List<MergeStrategy> ForMultiple { get; private set; } = [
|
public static List<MergeStrategy> ForMultiple { get; private set; } = [
|
||||||
new MergeStrategy(string.Empty, "Let Git automatically select a strategy", null),
|
new MergeStrategy("Default", "Let Git automatically select a strategy", string.Empty),
|
||||||
new MergeStrategy("Octopus", "Attempt merging multiple heads", "octopus"),
|
new MergeStrategy("Octopus", "Attempt merging multiple heads", "octopus"),
|
||||||
new MergeStrategy("Ours", "Record the merge without modifying the tree", "ours"),
|
new MergeStrategy("Ours", "Record the merge without modifying the tree", "ours"),
|
||||||
];
|
];
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
<x:String x:Key="Text.BranchCM.FetchInto" xml:space="preserve">Fetch ${0}$ into ${1}$...</x:String>
|
<x:String x:Key="Text.BranchCM.FetchInto" xml:space="preserve">Fetch ${0}$ into ${1}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Finish" xml:space="preserve">Git Flow - Finish ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Finish" xml:space="preserve">Git Flow - Finish ${0}$</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Merge" xml:space="preserve">Merge ${0}$ into ${1}$...</x:String>
|
<x:String x:Key="Text.BranchCM.Merge" xml:space="preserve">Merge ${0}$ into ${1}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.MergeMultiBranches" xml:space="preserve">Merge selected {0} branches</x:String>
|
<x:String x:Key="Text.BranchCM.MergeMultiBranches" xml:space="preserve">Merge selected {0} branches into current</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Pull" xml:space="preserve">Pull ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Pull" xml:space="preserve">Pull ${0}$</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.PullInto" xml:space="preserve">Pull ${0}$ into ${1}$...</x:String>
|
<x:String x:Key="Text.BranchCM.PullInto" xml:space="preserve">Pull ${0}$ into ${1}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">Push ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">Push ${0}$</x:String>
|
||||||
|
@ -406,10 +406,10 @@
|
||||||
<x:String x:Key="Text.Merge.Into" xml:space="preserve">Into:</x:String>
|
<x:String x:Key="Text.Merge.Into" xml:space="preserve">Into:</x:String>
|
||||||
<x:String x:Key="Text.Merge.Mode" xml:space="preserve">Merge Option:</x:String>
|
<x:String x:Key="Text.Merge.Mode" xml:space="preserve">Merge Option:</x:String>
|
||||||
<x:String x:Key="Text.Merge.Source" xml:space="preserve">Source Branch:</x:String>
|
<x:String x:Key="Text.Merge.Source" xml:space="preserve">Source Branch:</x:String>
|
||||||
<x:String x:Key="Text.MergeMultiple" xml:space="preserve">Merge commits</x:String>
|
<x:String x:Key="Text.MergeMultiple" xml:space="preserve">Merge (Multiple)</x:String>
|
||||||
<x:String x:Key="Text.MergeMultiple.Commit" xml:space="preserve">Commit(s):</x:String>
|
|
||||||
<x:String x:Key="Text.MergeMultiple.CommitChanges" xml:space="preserve">Commit all changes</x:String>
|
<x:String x:Key="Text.MergeMultiple.CommitChanges" xml:space="preserve">Commit all changes</x:String>
|
||||||
<x:String x:Key="Text.MergeMultiple.Strategy" xml:space="preserve">Strategy:</x:String>
|
<x:String x:Key="Text.MergeMultiple.Strategy" xml:space="preserve">Strategy:</x:String>
|
||||||
|
<x:String x:Key="Text.MergeMultiple.Targets" xml:space="preserve">Targets:</x:String>
|
||||||
<x:String x:Key="Text.MoveRepositoryNode" xml:space="preserve">Move Repository Node</x:String>
|
<x:String x:Key="Text.MoveRepositoryNode" xml:space="preserve">Move Repository Node</x:String>
|
||||||
<x:String x:Key="Text.MoveRepositoryNode.Target" xml:space="preserve">Select parent node for:</x:String>
|
<x:String x:Key="Text.MoveRepositoryNode.Target" xml:space="preserve">Select parent node for:</x:String>
|
||||||
<x:String x:Key="Text.Name" xml:space="preserve">Name:</x:String>
|
<x:String x:Key="Text.Name" xml:space="preserve">Name:</x:String>
|
||||||
|
|
|
@ -61,6 +61,7 @@
|
||||||
<x:String x:Key="Text.BranchCM.FetchInto" xml:space="preserve">拉取(fetch) ${0}$ 至 ${1}$...</x:String>
|
<x:String x:Key="Text.BranchCM.FetchInto" xml:space="preserve">拉取(fetch) ${0}$ 至 ${1}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Finish" xml:space="preserve">GIT工作流 - 完成 ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Finish" xml:space="preserve">GIT工作流 - 完成 ${0}$</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Merge" xml:space="preserve">合并 ${0}$ 到 ${1}$...</x:String>
|
<x:String x:Key="Text.BranchCM.Merge" xml:space="preserve">合并 ${0}$ 到 ${1}$...</x:String>
|
||||||
|
<x:String x:Key="Text.BranchCM.MergeMultiBranches" xml:space="preserve">合并 {0} 个分支到当前分支</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Pull" xml:space="preserve">拉回(pull) ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Pull" xml:space="preserve">拉回(pull) ${0}$</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.PullInto" xml:space="preserve">拉回(pull) ${0}$ 内容至 ${1}$...</x:String>
|
<x:String x:Key="Text.BranchCM.PullInto" xml:space="preserve">拉回(pull) ${0}$ 内容至 ${1}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">推送(push)${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">推送(push)${0}$</x:String>
|
||||||
|
@ -113,6 +114,7 @@
|
||||||
<x:String x:Key="Text.CommitCM.CopySHA" xml:space="preserve">复制提交指纹</x:String>
|
<x:String x:Key="Text.CommitCM.CopySHA" xml:space="preserve">复制提交指纹</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.CustomAction" xml:space="preserve">自定义操作</x:String>
|
<x:String x:Key="Text.CommitCM.CustomAction" xml:space="preserve">自定义操作</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.InteractiveRebase" xml:space="preserve">交互式变基(rebase -i) ${0}$ 到此处</x:String>
|
<x:String x:Key="Text.CommitCM.InteractiveRebase" xml:space="preserve">交互式变基(rebase -i) ${0}$ 到此处</x:String>
|
||||||
|
<x:String x:Key="Text.CommitCM.MergeMultiple" xml:space="preserve">合并(merge)...</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.Rebase" xml:space="preserve">变基(rebase) ${0}$ 到此处</x:String>
|
<x:String x:Key="Text.CommitCM.Rebase" xml:space="preserve">变基(rebase) ${0}$ 到此处</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.Reset" xml:space="preserve">重置(reset) ${0}$ 到此处</x:String>
|
<x:String x:Key="Text.CommitCM.Reset" xml:space="preserve">重置(reset) ${0}$ 到此处</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.Revert" xml:space="preserve">回滚此提交</x:String>
|
<x:String x:Key="Text.CommitCM.Revert" xml:space="preserve">回滚此提交</x:String>
|
||||||
|
@ -407,6 +409,10 @@
|
||||||
<x:String x:Key="Text.Merge.Into" xml:space="preserve">目标分支 :</x:String>
|
<x:String x:Key="Text.Merge.Into" xml:space="preserve">目标分支 :</x:String>
|
||||||
<x:String x:Key="Text.Merge.Mode" xml:space="preserve">合并方式 :</x:String>
|
<x:String x:Key="Text.Merge.Mode" xml:space="preserve">合并方式 :</x:String>
|
||||||
<x:String x:Key="Text.Merge.Source" xml:space="preserve">合并分支 :</x:String>
|
<x:String x:Key="Text.Merge.Source" xml:space="preserve">合并分支 :</x:String>
|
||||||
|
<x:String x:Key="Text.MergeMultiple" xml:space="preserve">合并(多目标)</x:String>
|
||||||
|
<x:String x:Key="Text.MergeMultiple.CommitChanges" xml:space="preserve">提交变化</x:String>
|
||||||
|
<x:String x:Key="Text.MergeMultiple.Strategy" xml:space="preserve">合并策略 :</x:String>
|
||||||
|
<x:String x:Key="Text.MergeMultiple.Targets" xml:space="preserve">目标列表 :</x:String>
|
||||||
<x:String x:Key="Text.MoveRepositoryNode" xml:space="preserve">调整仓库分组</x:String>
|
<x:String x:Key="Text.MoveRepositoryNode" xml:space="preserve">调整仓库分组</x:String>
|
||||||
<x:String x:Key="Text.MoveRepositoryNode.Target" xml:space="preserve">请选择目标分组:</x:String>
|
<x:String x:Key="Text.MoveRepositoryNode.Target" xml:space="preserve">请选择目标分组:</x:String>
|
||||||
<x:String x:Key="Text.Name" xml:space="preserve">名称 :</x:String>
|
<x:String x:Key="Text.Name" xml:space="preserve">名称 :</x:String>
|
||||||
|
|
|
@ -61,6 +61,7 @@
|
||||||
<x:String x:Key="Text.BranchCM.FetchInto" xml:space="preserve">提取 (fetch) ${0}$ 到 ${1}$...</x:String>
|
<x:String x:Key="Text.BranchCM.FetchInto" xml:space="preserve">提取 (fetch) ${0}$ 到 ${1}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Finish" xml:space="preserve">Git 工作流 - 完成 ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Finish" xml:space="preserve">Git 工作流 - 完成 ${0}$</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Merge" xml:space="preserve">合併 ${0}$ 到 ${1}$...</x:String>
|
<x:String x:Key="Text.BranchCM.Merge" xml:space="preserve">合併 ${0}$ 到 ${1}$...</x:String>
|
||||||
|
<x:String x:Key="Text.BranchCM.MergeMultiBranches" xml:space="preserve">合併 {0} 個分支到目前分支</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Pull" xml:space="preserve">拉取 (pull) ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Pull" xml:space="preserve">拉取 (pull) ${0}$</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.PullInto" xml:space="preserve">拉取 (pull) ${0}$ 內容至 ${1}$...</x:String>
|
<x:String x:Key="Text.BranchCM.PullInto" xml:space="preserve">拉取 (pull) ${0}$ 內容至 ${1}$...</x:String>
|
||||||
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">推送 (push) ${0}$</x:String>
|
<x:String x:Key="Text.BranchCM.Push" xml:space="preserve">推送 (push) ${0}$</x:String>
|
||||||
|
@ -113,6 +114,7 @@
|
||||||
<x:String x:Key="Text.CommitCM.CopySHA" xml:space="preserve">複製提交編號</x:String>
|
<x:String x:Key="Text.CommitCM.CopySHA" xml:space="preserve">複製提交編號</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.CustomAction" xml:space="preserve">自訂動作</x:String>
|
<x:String x:Key="Text.CommitCM.CustomAction" xml:space="preserve">自訂動作</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.InteractiveRebase" xml:space="preserve">互動式重定基底 (rebase -i) ${0}$ 到此處</x:String>
|
<x:String x:Key="Text.CommitCM.InteractiveRebase" xml:space="preserve">互動式重定基底 (rebase -i) ${0}$ 到此處</x:String>
|
||||||
|
<x:String x:Key="Text.CommitCM.MergeMultiple" xml:space="preserve">合併 (merge)...</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.Rebase" xml:space="preserve">重定基底 (rebase) ${0}$ 到此處</x:String>
|
<x:String x:Key="Text.CommitCM.Rebase" xml:space="preserve">重定基底 (rebase) ${0}$ 到此處</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.Reset" xml:space="preserve">重設 (reset) ${0}$ 到此處</x:String>
|
<x:String x:Key="Text.CommitCM.Reset" xml:space="preserve">重設 (reset) ${0}$ 到此處</x:String>
|
||||||
<x:String x:Key="Text.CommitCM.Revert" xml:space="preserve">復原此提交</x:String>
|
<x:String x:Key="Text.CommitCM.Revert" xml:space="preserve">復原此提交</x:String>
|
||||||
|
@ -407,6 +409,10 @@
|
||||||
<x:String x:Key="Text.Merge.Into" xml:space="preserve">目標分支:</x:String>
|
<x:String x:Key="Text.Merge.Into" xml:space="preserve">目標分支:</x:String>
|
||||||
<x:String x:Key="Text.Merge.Mode" xml:space="preserve">合併方式:</x:String>
|
<x:String x:Key="Text.Merge.Mode" xml:space="preserve">合併方式:</x:String>
|
||||||
<x:String x:Key="Text.Merge.Source" xml:space="preserve">合併分支:</x:String>
|
<x:String x:Key="Text.Merge.Source" xml:space="preserve">合併分支:</x:String>
|
||||||
|
<x:String x:Key="Text.MergeMultiple" xml:space="preserve">合併(多目標)</x:String>
|
||||||
|
<x:String x:Key="Text.MergeMultiple.CommitChanges" xml:space="preserve">提交變更</x:String>
|
||||||
|
<x:String x:Key="Text.MergeMultiple.Strategy" xml:space="preserve">合併策略:</x:String>
|
||||||
|
<x:String x:Key="Text.MergeMultiple.Targets" xml:space="preserve">目標列表:</x:String>
|
||||||
<x:String x:Key="Text.MoveRepositoryNode" xml:space="preserve">調整存放庫分組</x:String>
|
<x:String x:Key="Text.MoveRepositoryNode" xml:space="preserve">調整存放庫分組</x:String>
|
||||||
<x:String x:Key="Text.MoveRepositoryNode.Target" xml:space="preserve">請選擇目標分組:</x:String>
|
<x:String x:Key="Text.MoveRepositoryNode.Target" xml:space="preserve">請選擇目標分組:</x:String>
|
||||||
<x:String x:Key="Text.Name" xml:space="preserve">名稱:</x:String>
|
<x:String x:Key="Text.Name" xml:space="preserve">名稱:</x:String>
|
||||||
|
|
|
@ -37,7 +37,7 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
return Task.Run(() =>
|
return Task.Run(() =>
|
||||||
{
|
{
|
||||||
var succ = new Commands.Merge(_repo.FullPath, Source, SelectedMode.Arg, null, SetProgressDescription).Exec();
|
var succ = new Commands.Merge(_repo.FullPath, Source, SelectedMode.Arg, SetProgressDescription).Exec();
|
||||||
CallUIThread(() => _repo.SetWatcherEnabled(true));
|
CallUIThread(() => _repo.SetWatcherEnabled(true));
|
||||||
return succ;
|
return succ;
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,18 +1,15 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using SourceGit.Models;
|
|
||||||
|
|
||||||
namespace SourceGit.ViewModels
|
namespace SourceGit.ViewModels
|
||||||
{
|
{
|
||||||
public class MergeMultiple : Popup
|
public class MergeMultiple : Popup
|
||||||
{
|
{
|
||||||
public List<string> Strategies = ["octopus", "ours"];
|
public List<object> Targets
|
||||||
|
|
||||||
public List<Commit> Targets
|
|
||||||
{
|
{
|
||||||
get;
|
get;
|
||||||
private set;
|
private set;
|
||||||
}
|
} = [];
|
||||||
|
|
||||||
public bool AutoCommit
|
public bool AutoCommit
|
||||||
{
|
{
|
||||||
|
@ -20,18 +17,27 @@ namespace SourceGit.ViewModels
|
||||||
set;
|
set;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MergeStrategy Strategy
|
public Models.MergeStrategy Strategy
|
||||||
{
|
{
|
||||||
get;
|
get;
|
||||||
set;
|
set;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MergeMultiple(Repository repo, List<Commit> targets)
|
public MergeMultiple(Repository repo, List<Models.Commit> commits)
|
||||||
{
|
{
|
||||||
_repo = repo;
|
_repo = repo;
|
||||||
Targets = targets;
|
Targets.AddRange(commits);
|
||||||
AutoCommit = true;
|
AutoCommit = true;
|
||||||
Strategy = MergeStrategy.ForMultiple.Find(s => s.Arg == null);
|
Strategy = Models.MergeStrategy.ForMultiple[0];
|
||||||
|
View = new Views.MergeMultiple() { DataContext = this };
|
||||||
|
}
|
||||||
|
|
||||||
|
public MergeMultiple(Repository repo, List<Models.Branch> branches)
|
||||||
|
{
|
||||||
|
_repo = repo;
|
||||||
|
Targets.AddRange(branches);
|
||||||
|
AutoCommit = true;
|
||||||
|
Strategy = Models.MergeStrategy.ForMultiple[0];
|
||||||
View = new Views.MergeMultiple() { DataContext = this };
|
View = new Views.MergeMultiple() { DataContext = this };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,9 +50,9 @@ namespace SourceGit.ViewModels
|
||||||
{
|
{
|
||||||
var succ = new Commands.Merge(
|
var succ = new Commands.Merge(
|
||||||
_repo.FullPath,
|
_repo.FullPath,
|
||||||
string.Join(" ", Targets.ConvertAll(c => c.Decorators.Find(d => d.Type == DecoratorType.RemoteBranchHead || d.Type == DecoratorType.LocalBranchHead)?.Name ?? c.Decorators.Find(d => d.Type == DecoratorType.Tag)?.Name ?? c.SHA)),
|
ConvertTargetToMergeSources(),
|
||||||
AutoCommit ? string.Empty : "--no-commit",
|
AutoCommit,
|
||||||
Strategy?.Arg,
|
Strategy.Arg,
|
||||||
SetProgressDescription).Exec();
|
SetProgressDescription).Exec();
|
||||||
|
|
||||||
CallUIThread(() => _repo.SetWatcherEnabled(true));
|
CallUIThread(() => _repo.SetWatcherEnabled(true));
|
||||||
|
@ -54,6 +60,34 @@ namespace SourceGit.ViewModels
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<string> ConvertTargetToMergeSources()
|
||||||
|
{
|
||||||
|
var ret = new List<string>();
|
||||||
|
foreach (var t in Targets)
|
||||||
|
{
|
||||||
|
if (t is Models.Branch branch)
|
||||||
|
{
|
||||||
|
ret.Add(branch.FriendlyName);
|
||||||
|
}
|
||||||
|
else if (t is Models.Commit commit)
|
||||||
|
{
|
||||||
|
var d = commit.Decorators.Find(x =>
|
||||||
|
{
|
||||||
|
return x.Type == Models.DecoratorType.LocalBranchHead ||
|
||||||
|
x.Type == Models.DecoratorType.RemoteBranchHead ||
|
||||||
|
x.Type == Models.DecoratorType.Tag;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (d != null)
|
||||||
|
ret.Add(d.Name);
|
||||||
|
else
|
||||||
|
ret.Add(commit.SHA);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
private readonly Repository _repo = null;
|
private readonly Repository _repo = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -172,7 +172,7 @@ namespace SourceGit.ViewModels
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SetProgressDescription($"Merge {_selectedBranch.FriendlyName} into {_current.Name} ...");
|
SetProgressDescription($"Merge {_selectedBranch.FriendlyName} into {_current.Name} ...");
|
||||||
rs = new Commands.Merge(_repo.FullPath, _selectedBranch.FriendlyName, "", null, SetProgressDescription).Exec();
|
rs = new Commands.Merge(_repo.FullPath, _selectedBranch.FriendlyName, "", SetProgressDescription).Exec();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -13,7 +13,6 @@ using Avalonia.Media.Imaging;
|
||||||
using Avalonia.Threading;
|
using Avalonia.Threading;
|
||||||
|
|
||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
using SourceGit.Models;
|
|
||||||
|
|
||||||
namespace SourceGit.ViewModels
|
namespace SourceGit.ViewModels
|
||||||
{
|
{
|
||||||
|
@ -954,7 +953,7 @@ namespace SourceGit.ViewModels
|
||||||
public void MergeMultipleBranches(List<Models.Branch> branches)
|
public void MergeMultipleBranches(List<Models.Branch> branches)
|
||||||
{
|
{
|
||||||
if (PopupHost.CanCreatePopup())
|
if (PopupHost.CanCreatePopup())
|
||||||
PopupHost.ShowPopup(new MergeMultiple(this, branches.ConvertAll(b => _histories?.Commits?.Find(c => c.SHA == b.Head))));
|
PopupHost.ShowPopup(new MergeMultiple(this, branches));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CreateNewTag()
|
public void CreateNewTag()
|
||||||
|
|
|
@ -12,13 +12,14 @@
|
||||||
<TextBlock FontSize="18"
|
<TextBlock FontSize="18"
|
||||||
Classes="bold"
|
Classes="bold"
|
||||||
Text="{DynamicResource Text.MergeMultiple}"/>
|
Text="{DynamicResource Text.MergeMultiple}"/>
|
||||||
|
|
||||||
<Grid Margin="0,16,0,0" RowDefinitions="Auto,32,32" ColumnDefinitions="100,*">
|
<Grid Margin="0,16,0,0" RowDefinitions="Auto,32,32" ColumnDefinitions="100,*">
|
||||||
<TextBlock Grid.Row="0" Grid.Column="0"
|
<TextBlock Grid.Row="0" Grid.Column="0"
|
||||||
HorizontalAlignment="Right" VerticalAlignment="Center"
|
HorizontalAlignment="Right" VerticalAlignment="Center"
|
||||||
Margin="0,0,8,0"
|
Margin="0,0,8,0"
|
||||||
Text="{DynamicResource Text.MergeMultiple.Commit}"/>
|
Text="{DynamicResource Text.MergeMultiple.Targets}"/>
|
||||||
<ListBox Grid.Row="0" Grid.Column="1"
|
<ListBox Grid.Row="0" Grid.Column="1"
|
||||||
MinHeight="32" MaxHeight="100"
|
MinHeight="32" MaxHeight="100" Margin="0,0,0,4"
|
||||||
ItemsSource="{Binding Targets}"
|
ItemsSource="{Binding Targets}"
|
||||||
Background="{DynamicResource Brush.Contents}"
|
Background="{DynamicResource Brush.Contents}"
|
||||||
BorderThickness="1"
|
BorderThickness="1"
|
||||||
|
@ -42,6 +43,9 @@
|
||||||
</ListBox.ItemsPanel>
|
</ListBox.ItemsPanel>
|
||||||
|
|
||||||
<ListBox.ItemTemplate>
|
<ListBox.ItemTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<ContentControl Content="{Binding}">
|
||||||
|
<ContentControl.DataTemplates>
|
||||||
<DataTemplate DataType="m:Commit">
|
<DataTemplate DataType="m:Commit">
|
||||||
<Grid ColumnDefinitions="14,Auto,*">
|
<Grid ColumnDefinitions="14,Auto,*">
|
||||||
<Path Grid.Column="0" Width="14" Height="14" Margin="0,8,0,0" Data="{StaticResource Icons.Commit}"/>
|
<Path Grid.Column="0" Width="14" Height="14" Margin="0,8,0,0" Data="{StaticResource Icons.Commit}"/>
|
||||||
|
@ -49,18 +53,24 @@
|
||||||
<TextBlock Grid.Column="2" VerticalAlignment="Center" Text="{Binding Subject}" TextTrimming="CharacterEllipsis"/>
|
<TextBlock Grid.Column="2" VerticalAlignment="Center" Text="{Binding Subject}" TextTrimming="CharacterEllipsis"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
|
|
||||||
|
<DataTemplate DataType="m:Branch">
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<Path Width="14" Height="14" Data="{StaticResource Icons.Branch}"/>
|
||||||
|
<TextBlock VerticalAlignment="Center" Text="{Binding FriendlyName}" Margin="8,0,0,0"/>
|
||||||
|
</StackPanel>
|
||||||
|
</DataTemplate>
|
||||||
|
</ContentControl.DataTemplates>
|
||||||
|
</ContentControl>
|
||||||
|
</DataTemplate>
|
||||||
</ListBox.ItemTemplate>
|
</ListBox.ItemTemplate>
|
||||||
</ListBox>
|
</ListBox>
|
||||||
|
|
||||||
<CheckBox Grid.Row="1" Grid.Column="1"
|
<TextBlock Grid.Row="1" Grid.Column="0"
|
||||||
Content="{DynamicResource Text.MergeMultiple.CommitChanges}"
|
|
||||||
IsChecked="{Binding AutoCommit, Mode=TwoWay}"/>
|
|
||||||
|
|
||||||
<TextBlock Grid.Row="2" Grid.Column="0"
|
|
||||||
HorizontalAlignment="Right" VerticalAlignment="Center"
|
HorizontalAlignment="Right" VerticalAlignment="Center"
|
||||||
Margin="0,0,8,0"
|
Margin="0,0,8,0"
|
||||||
Text="{DynamicResource Text.MergeMultiple.Strategy}"/>
|
Text="{DynamicResource Text.MergeMultiple.Strategy}"/>
|
||||||
<ComboBox Grid.Row="2" Grid.Column="1"
|
<ComboBox Grid.Row="1" Grid.Column="1"
|
||||||
Height="28" Padding="8,0"
|
Height="28" Padding="8,0"
|
||||||
VerticalAlignment="Center" HorizontalAlignment="Stretch"
|
VerticalAlignment="Center" HorizontalAlignment="Stretch"
|
||||||
ItemsSource="{Binding Source={x:Static m:MergeStrategy.ForMultiple}}"
|
ItemsSource="{Binding Source={x:Static m:MergeStrategy.ForMultiple}}"
|
||||||
|
@ -74,6 +84,10 @@
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ComboBox.ItemTemplate>
|
</ComboBox.ItemTemplate>
|
||||||
</ComboBox>
|
</ComboBox>
|
||||||
|
|
||||||
|
<CheckBox Grid.Row="2" Grid.Column="1"
|
||||||
|
Content="{DynamicResource Text.MergeMultiple.CommitChanges}"
|
||||||
|
IsChecked="{Binding AutoCommit, Mode=TwoWay}"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
|
|
Loading…
Reference in a new issue