refactor: git version related commands

* use `--pathspec-from-file=<FILE>` in `git add` command if git >= 2.25.0
* use `--pathspec-from-file=<FILE>` in `git stash push` command if git >= 2.26.0
* use `--staged` in `git stash push` command only if git >= 2.35.0
This commit is contained in:
leo 2025-01-11 17:29:38 +08:00
parent c939308e4c
commit b26838ff68
No known key found for this signature in database
10 changed files with 306 additions and 103 deletions

View file

@ -263,7 +263,8 @@
<TextBox Grid.Row="0" Grid.Column="1"
Height="28"
CornerRadius="3"
Text="{Binding GitInstallPath, Mode=TwoWay}">
Text="{Binding GitInstallPath, Mode=TwoWay}"
TextChanged="OnGitInstallPathChanged">
<TextBox.InnerRightContent>
<Button Classes="icon_button" Width="30" Height="30" Click="SelectGitExecutable">
<Path Data="{StaticResource Icons.Folder.Open}" Fill="{DynamicResource Brush.FG1}"/>
@ -282,7 +283,7 @@
<Border Background="Transparent"
ToolTip.Tip="{DynamicResource Text.Preference.Git.Invalid}"
IsVisible="{Binding #ThisControl.GitVersion, Converter={x:Static c:StringConverters.UnderRecommendGitVersion}}">
IsVisible="{Binding #ThisControl.ShowGitVersionWarning}">
<Path Width="14" Height="14" Data="{StaticResource Icons.Error}" Fill="Red"/>
</Border>
</StackPanel>

View file

@ -37,6 +37,15 @@ namespace SourceGit.Views
set => SetValue(GitVersionProperty, value);
}
public static readonly StyledProperty<bool> ShowGitVersionWarningProperty =
AvaloniaProperty.Register<Preference, bool>(nameof(ShowGitVersionWarning));
public bool ShowGitVersionWarning
{
get => GetValue(ShowGitVersionWarningProperty);
set => SetValue(ShowGitVersionWarningProperty, value);
}
public bool EnableGPGCommitSigning
{
get;
@ -93,7 +102,6 @@ namespace SourceGit.Views
var pref = ViewModels.Preference.Instance;
DataContext = pref;
var ver = string.Empty;
if (pref.IsGitConfigured())
{
var config = new Commands.Config(null).ListAll();
@ -122,12 +130,10 @@ namespace SourceGit.Views
EnableHTTPSSLVerify = sslVerify == "true";
else
EnableHTTPSSLVerify = true;
ver = new Commands.Version().Query();
}
UpdateGitVersion();
InitializeComponent();
GitVersion = ver;
}
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
@ -207,7 +213,7 @@ namespace SourceGit.Views
if (selected.Count == 1)
{
ViewModels.Preference.Instance.GitInstallPath = selected[0].Path.LocalPath;
GitVersion = new Commands.Version().Query();
UpdateGitVersion();
}
e.Handled = true;
@ -328,6 +334,11 @@ namespace SourceGit.Views
e.Handled = true;
}
private void OnGitInstallPathChanged(object sender, TextChangedEventArgs e)
{
UpdateGitVersion();
}
private void OnAddOpenAIService(object sender, RoutedEventArgs e)
{
var service = new Models.OpenAIService() { Name = "Unnamed Service" };
@ -346,5 +357,11 @@ namespace SourceGit.Views
SelectedOpenAIService = null;
e.Handled = true;
}
private void UpdateGitVersion()
{
GitVersion = Native.OS.GitVersionString;
ShowGitVersionWarning = !string.IsNullOrEmpty(GitVersion) && Native.OS.GitVersion < Models.GitVersions.MINIMAL;
}
}
}