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:
leo
2025-07-09 17:25:06 +08:00
parent 7b0292722e
commit d3d1377334
2 changed files with 7 additions and 27 deletions

View File

@@ -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");

View File

@@ -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;
}