mirror of
https://fastgit.cc/github.com/sourcegit-scm/sourcegit
synced 2026-04-22 13:51:15 +08:00
refactor: auto-select merge mode
- Change the description of `Default` merge mode to `Use git configuration` - It's not necessary to read global `merge.ff` configuration
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
public class MergeMode(string n, string d, string a)
|
||||
{
|
||||
public static readonly MergeMode Default =
|
||||
new MergeMode("Default", "Fast-forward if possible", "");
|
||||
new MergeMode("Default", "Use git configuration", "");
|
||||
|
||||
public static readonly MergeMode FastForward =
|
||||
new MergeMode("Fast-forward", "Refuse to merge when fast-forward is not possible", "--ff-only");
|
||||
|
||||
@@ -78,47 +78,27 @@ namespace SourceGit.ViewModels
|
||||
}
|
||||
|
||||
private Models.MergeMode AutoSelectMergeMode()
|
||||
{
|
||||
return
|
||||
GetGitConfigBranchMergeOptions() // Branch
|
||||
?? GetSettingsPreferredMergeMode() // Repository
|
||||
?? GetGitConfigMergeFF(); // Global
|
||||
}
|
||||
|
||||
private Models.MergeMode GetGitConfigBranchMergeOptions()
|
||||
{
|
||||
var config = new Commands.Config(_repo.FullPath).GetAsync($"branch.{Into}.mergeoptions").Result;
|
||||
return config switch
|
||||
var mode = config switch
|
||||
{
|
||||
null or "" => null,
|
||||
"--ff-only" => Models.MergeMode.FastForward,
|
||||
"--no-ff" => Models.MergeMode.NoFastForward,
|
||||
"--squash" => Models.MergeMode.Squash,
|
||||
"--no-commit" or "--no-ff --no-commit" => Models.MergeMode.DontCommit,
|
||||
_ => null
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
||||
private Models.MergeMode GetSettingsPreferredMergeMode()
|
||||
{
|
||||
if (mode != null)
|
||||
return mode;
|
||||
|
||||
var preferredMergeModeIdx = _repo.Settings.PreferredMergeMode;
|
||||
if (preferredMergeModeIdx < 0 || preferredMergeModeIdx > Models.MergeMode.Supported.Length)
|
||||
return null;
|
||||
return Models.MergeMode.Default;
|
||||
|
||||
return Models.MergeMode.Supported[preferredMergeModeIdx];
|
||||
}
|
||||
|
||||
private Models.MergeMode GetGitConfigMergeFF()
|
||||
{
|
||||
var config = new Commands.Config(_repo.FullPath).GetAsync("merge.ff").Result;
|
||||
return config switch
|
||||
{
|
||||
"false" => Models.MergeMode.NoFastForward,
|
||||
"only" => Models.MergeMode.FastForward,
|
||||
_ => Models.MergeMode.Default
|
||||
};
|
||||
}
|
||||
|
||||
private readonly Repository _repo = null;
|
||||
private readonly string _sourceName;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user