Enable to configure global core.autocrlf in Preference panel

This commit is contained in:
leo 2020-07-09 21:20:35 +08:00
parent da81d0c6c8
commit fd4cb12b4a
2 changed files with 374 additions and 308 deletions

View file

@ -8,7 +8,7 @@
xmlns:app="clr-namespace:SourceGit"
xmlns:git="clr-namespace:SourceGit.Git"
mc:Ignorable="d"
Height="472" Width="500">
Height="500" Width="500">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="36"/>
@ -21,6 +21,7 @@
<RowDefinition Height="36"/>
<RowDefinition Height="28"/>
<RowDefinition Height="28"/>
<RowDefinition Height="28"/>
<RowDefinition Height="18"/>
<RowDefinition Height="36"/>
<RowDefinition Height="28"/>
@ -81,16 +82,32 @@
</Grid>
<!-- Global User -->
<Label Grid.Row="7" Grid.ColumnSpan="2" Content="GLOBAL USER" FontSize="16" FontWeight="DemiBold" Opacity=".85"/>
<Label Grid.Row="7" Grid.ColumnSpan="2" Content="GLOBAL SETTING" FontSize="16" FontWeight="DemiBold" Opacity=".85"/>
<Label Grid.Row="8" Grid.Column="0" Content="Name :" HorizontalAlignment="Right"/>
<TextBox Grid.Row="8" Grid.Column="1" Height="24" helpers:TextBoxHelper.Placeholder="Global git user name" Text="{Binding ElementName=me, Path=GlobalUser, Mode=TwoWay}"/>
<Label Grid.Row="9" Grid.Column="0" Content="Email :" HorizontalAlignment="Right"/>
<TextBox Grid.Row="9" Grid.Column="1" Height="24" helpers:TextBoxHelper.Placeholder="Global git user email" Text="{Binding ElementName=me, Path=GlobalUserEmail, Mode=TwoWay}"/>
<Label Grid.Row="10" Grid.Column="0" Content="Auto CRLF :" HorizontalAlignment="Right"/>
<ComboBox Grid.Row="10" Grid.Column="1"
x:Name="cmbAutoCRLF"
Height="24"
HorizontalAlignment="Stretch"
VerticalContentAlignment="Center"
SelectionChanged="AutoCRLFSelectionChanged">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Height="20">
<Label Content="{Binding Value}" Padding="0" VerticalContentAlignment="Center"/>
<Label Content="{Binding Desc}" Foreground="{StaticResource Brush.FG2}" FontSize="10" Margin="8,0,0,0" Padding="0"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<!-- 合并工具配置 -->
<Label Grid.Row="11" Grid.ColumnSpan="2" Content="MERGE TOOL" FontSize="16" FontWeight="DemiBold" Opacity=".85"/>
<Label Grid.Row="12" Grid.Column="0" Content="Choose Merger :" HorizontalAlignment="Right"/>
<ComboBox Grid.Row="12" Grid.Column="1"
<Label Grid.Row="12" Grid.ColumnSpan="2" Content="MERGE TOOL" FontSize="16" FontWeight="DemiBold" Opacity=".85"/>
<Label Grid.Row="13" Grid.Column="0" Content="Choose Merger :" HorizontalAlignment="Right"/>
<ComboBox Grid.Row="13" Grid.Column="1"
Height="24"
Padding="2,0,0,0"
HorizontalContentAlignment="Left"
@ -99,8 +116,8 @@
ItemsSource="{Binding Source={x:Static git:MergeTool.Supported}}"
DisplayMemberPath="Name"
SelectionChanged="ChangeMergeTool"/>
<Label Grid.Row="13" Grid.Column="0" Content="Install Path :" HorizontalAlignment="Right"/>
<Grid Grid.Row="13" Grid.Column="1">
<Label Grid.Row="14" Grid.Column="0" Content="Install Path :" HorizontalAlignment="Right"/>
<Grid Grid.Row="14" Grid.Column="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="28"/>
@ -115,13 +132,13 @@
<Path Width="14" Style="{StaticResource Style.Icon}" Data="{StaticResource Icon.Folder}"/>
</Button>
</Grid>
<Label Grid.Row="14" Grid.Column="0" Content="Command :" HorizontalAlignment="Right"/>
<TextBlock Grid.Row="14" Grid.Column="1"
<Label Grid.Row="15" Grid.Column="0" Content="Command :" HorizontalAlignment="Right"/>
<TextBlock Grid.Row="15" Grid.Column="1"
x:Name="txtMergeParam"
VerticalAlignment="Center"
Foreground="{StaticResource Brush.FG2}"/>
<Button Grid.Row="16" Grid.Column="1"
<Button Grid.Row="17" Grid.Column="1"
Content="CLOSE"
Click="Close"
Width="80"

View file

@ -1,5 +1,6 @@
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Windows;
@ -28,12 +29,35 @@ namespace SourceGit.UI {
set;
}
/// <summary>
/// Git core.autocrlf setting.
/// </summary>
public string AutoCRLF {
get;
set;
}
/// <summary>
/// Options for core.autocrlf
/// </summary>
public class AutoCRLFOption {
public string Value { get; set; }
public string Desc { get; set; }
public AutoCRLFOption(string v, string d) {
Value = v;
Desc = d;
}
}
/// <summary>
/// Constructor.
/// </summary>
public Preference() {
GlobalUser = GetConfig("user.name");
GlobalUserEmail = GetConfig("user.email");
AutoCRLF = GetConfig("core.autocrlf");
if (string.IsNullOrEmpty(AutoCRLF)) AutoCRLF = "false";
InitializeComponent();
@ -41,6 +65,14 @@ namespace SourceGit.UI {
var merger = Git.MergeTool.Supported[mergeType];
txtMergePath.IsReadOnly = !merger.IsConfigured;
txtMergeParam.Text = merger.Parameter;
var crlfOptions = new List<AutoCRLFOption>() {
new AutoCRLFOption("true", "Commit as LF, checkout as CRLF"),
new AutoCRLFOption("input", "Only convert for commit"),
new AutoCRLFOption("false", "Do NOT convert"),
};
cmbAutoCRLF.ItemsSource = crlfOptions;
cmbAutoCRLF.SelectedItem = crlfOptions.Find(o => o.Value == AutoCRLF);
}
/// <summary>
@ -60,6 +92,9 @@ namespace SourceGit.UI {
var oldEmail = GetConfig("user.email");
if (oldEmail != GlobalUserEmail) SetConfig("user.email", GlobalUserEmail);
var oldAutoCRLF = GetConfig("core.autocrlf");
if (oldAutoCRLF != AutoCRLF) SetConfig("core.autocrlf", AutoCRLF);
PopupManager.Close();
}
@ -138,6 +173,20 @@ namespace SourceGit.UI {
}
}
/// <summary>
/// Set core.autocrlf
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void AutoCRLFSelectionChanged(object sender, SelectionChangedEventArgs e) {
if (e.AddedItems.Count != 1) return;
var mode = e.AddedItems[0] as AutoCRLFOption;
if (mode == null) return;
AutoCRLF = mode.Value;
}
#region CONFIG
private string GetConfig(string key) {
if (!App.IsGitConfigured) return "";