mirror of
https://github.com/sourcegit-scm/sourcegit.git
synced 2024-12-22 20:37:19 -08:00
feature<GPG>: add gpg signing feature #5
This commit is contained in:
parent
a677f409a2
commit
c1c57f9b1d
6 changed files with 157 additions and 10 deletions
|
@ -91,11 +91,11 @@
|
|||
<sys:String x:Key="Text.CommitViewer.Files">FILES</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Configure">Configure</sys:String>
|
||||
<sys:String x:Key="Text.Configure.User">User :</sys:String>
|
||||
<sys:String x:Key="Text.Configure.User">User Name</sys:String>
|
||||
<sys:String x:Key="Text.Configure.User.Placeholder">User name for this repository</sys:String>
|
||||
<sys:String x:Key="Text.Configure.Email">Email :</sys:String>
|
||||
<sys:String x:Key="Text.Configure.Email">Email Address</sys:String>
|
||||
<sys:String x:Key="Text.Configure.Email.Placeholder">Email address</sys:String>
|
||||
<sys:String x:Key="Text.Configure.Proxy">Proxy :</sys:String>
|
||||
<sys:String x:Key="Text.Configure.Proxy">HTTP Proxy</sys:String>
|
||||
<sys:String x:Key="Text.Configure.Proxy.Placeholder">HTTP proxy used by this repository</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.CreateBranch">Create Branch</sys:String>
|
||||
|
@ -507,6 +507,13 @@
|
|||
<sys:String x:Key="Text.Sort.RecentlyOpened">By Recently Opened</sys:String>
|
||||
<sys:String x:Key="Text.Sort.Bookmark">By Bookmark Color</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.GPG">GPG SIGNING</sys:String>
|
||||
<sys:String x:Key="Text.GPG.Enabled">Commit GPG signing</sys:String>
|
||||
<sys:String x:Key="Text.GPG.Path">Install Path</sys:String>
|
||||
<sys:String x:Key="Text.GPG.Path.Placeholder">Input path for installed gpg program</sys:String>
|
||||
<sys:String x:Key="Text.GPG.UserKey">User Signing Key</sys:String>
|
||||
<sys:String x:Key="Text.GPG.UserKey.Placeholder">User's gpg signing key</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.NotConfigured">Git has NOT been configured. Please to go [Preference] and configure it first.</sys:String>
|
||||
<sys:String x:Key="Text.PathNotFound">Path[{0}] not exists!</sys:String>
|
||||
<sys:String x:Key="Text.MissingBash">Can NOT locate bash.exe. Make sure bash.exe exists under the same folder with git.exe</sys:String>
|
||||
|
|
|
@ -90,11 +90,11 @@
|
|||
<sys:String x:Key="Text.CommitViewer.Files">文件列表</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.Configure">仓库配置</sys:String>
|
||||
<sys:String x:Key="Text.Configure.User">用户 :</sys:String>
|
||||
<sys:String x:Key="Text.Configure.User">用户名</sys:String>
|
||||
<sys:String x:Key="Text.Configure.User.Placeholder">应用于本仓库的用户名</sys:String>
|
||||
<sys:String x:Key="Text.Configure.Email">邮箱 :</sys:String>
|
||||
<sys:String x:Key="Text.Configure.Email">电子邮箱</sys:String>
|
||||
<sys:String x:Key="Text.Configure.Email.Placeholder">邮箱地址</sys:String>
|
||||
<sys:String x:Key="Text.Configure.Proxy">代理 :</sys:String>
|
||||
<sys:String x:Key="Text.Configure.Proxy">HTTP代理</sys:String>
|
||||
<sys:String x:Key="Text.Configure.Proxy.Placeholder">HTTP网络代理</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.CreateBranch">新建分支</sys:String>
|
||||
|
@ -506,6 +506,13 @@
|
|||
<sys:String x:Key="Text.Sort.RecentlyOpened">按最近访问</sys:String>
|
||||
<sys:String x:Key="Text.Sort.Bookmark">按书签颜色</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.GPG">GPG签名</sys:String>
|
||||
<sys:String x:Key="Text.GPG.Enabled">启用提交签名</sys:String>
|
||||
<sys:String x:Key="Text.GPG.Path">可执行文件位置</sys:String>
|
||||
<sys:String x:Key="Text.GPG.Path.Placeholder">gpg.exe所在路径</sys:String>
|
||||
<sys:String x:Key="Text.GPG.UserKey">用户签名KEY</sys:String>
|
||||
<sys:String x:Key="Text.GPG.UserKey.Placeholder">输入签名提交所使用的KEY</sys:String>
|
||||
|
||||
<sys:String x:Key="Text.NotConfigured">GIT尚未配置。请打开【偏好设置】配置GIT路径。</sys:String>
|
||||
<sys:String x:Key="Text.PathNotFound">路径({0})不存在或不可读取!</sys:String>
|
||||
<sys:String x:Key="Text.MissingBash">无法找到bash.exe,请确保其在git.exe同目录中!</sys:String>
|
||||
|
|
|
@ -13,6 +13,8 @@
|
|||
<RowDefinition Height="32"/>
|
||||
<RowDefinition Height="32"/>
|
||||
<RowDefinition Height="32"/>
|
||||
<RowDefinition Height="32"/>
|
||||
<RowDefinition Height="32"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Grid.ColumnDefinitions>
|
||||
|
@ -52,5 +54,25 @@
|
|||
Text="{Binding ElementName=me, Path=Proxy, Mode=TwoWay}"
|
||||
Height="24"
|
||||
Placeholder="{DynamicResource Text.Configure.Proxy.Placeholder}"/>
|
||||
|
||||
<TextBlock
|
||||
Grid.Row="3" Grid.Column="0"
|
||||
Margin="0,0,8,0"
|
||||
Text="{DynamicResource Text.GPG.Enabled}"
|
||||
HorizontalAlignment="Right"/>
|
||||
<CheckBox
|
||||
Grid.Row="3" Grid.Column="1"
|
||||
IsChecked="{Binding ElementName=me, Path=GPGSigningEnabled, Mode=TwoWay}"/>
|
||||
|
||||
<TextBlock
|
||||
Grid.Row="4" Grid.Column="0"
|
||||
Margin="0,0,8,0"
|
||||
Text="{DynamicResource Text.GPG.UserKey}"
|
||||
HorizontalAlignment="Right"/>
|
||||
<controls:TextEdit
|
||||
Grid.Row="4" Grid.Column="1"
|
||||
Text="{Binding ElementName=me, Path=GPGUserSigningKey, Mode=TwoWay}"
|
||||
Height="24"
|
||||
Placeholder="{DynamicResource Text.GPG.UserKey.Placeholder}"/>
|
||||
</Grid>
|
||||
</controls:PopupWidget>
|
||||
|
|
|
@ -9,6 +9,8 @@ namespace SourceGit.Views.Popups {
|
|||
|
||||
public string UserName { get; set; }
|
||||
public string UserEmail { get; set; }
|
||||
public bool GPGSigningEnabled { get; set; }
|
||||
public string GPGUserSigningKey { get; set; }
|
||||
public string Proxy { get; set; }
|
||||
|
||||
public Configure(string repo) {
|
||||
|
@ -17,6 +19,8 @@ namespace SourceGit.Views.Popups {
|
|||
var cmd = new Commands.Config(repo);
|
||||
UserName = cmd.Get("user.name");
|
||||
UserEmail = cmd.Get("user.email");
|
||||
GPGSigningEnabled = cmd.Get("commit.gpgsign") == "true";
|
||||
GPGUserSigningKey = cmd.Get("user.signingkey");
|
||||
Proxy = cmd.Get("http.proxy");
|
||||
|
||||
InitializeComponent();
|
||||
|
@ -36,6 +40,11 @@ namespace SourceGit.Views.Popups {
|
|||
if (oldEmail != UserEmail) cmd.Set("user.email", UserEmail);
|
||||
var oldProxy = cmd.Get("http.proxy");
|
||||
if (oldProxy != Proxy) cmd.Set("http.proxy", Proxy);
|
||||
var oldGPGSigningEnabled = cmd.Get("commit.gpgsign") == "true";
|
||||
if (oldGPGSigningEnabled != GPGSigningEnabled) cmd.Set("commit.gpgsign", GPGSigningEnabled ? "true" : "false");
|
||||
var oldGPGUserSigningKey = cmd.Get("user.signingkey");
|
||||
if (oldGPGUserSigningKey != GPGUserSigningKey) cmd.Set("user.signingkey", GPGUserSigningKey);
|
||||
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
|
|
@ -287,6 +287,69 @@
|
|||
</Grid>
|
||||
</TabItem>
|
||||
|
||||
<!-- GPG Signing -->
|
||||
<TabItem Header="{DynamicResource Text.GPG}">
|
||||
<Grid Margin="8">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="28"/>
|
||||
<RowDefinition Height="28"/>
|
||||
<RowDefinition Height="28"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="140"/>
|
||||
<ColumnDefinition Width="8"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<TextBlock
|
||||
Grid.Row="0" Grid.Column="0"
|
||||
Text="{DynamicResource Text.GPG.Enabled}"
|
||||
HorizontalAlignment="Right"/>
|
||||
<CheckBox
|
||||
Grid.Row="0" Grid.Column="2"
|
||||
IsChecked="{Binding ElementName=me, Path=GPGSigningEnabled, Mode=TwoWay}"/>
|
||||
|
||||
<TextBlock
|
||||
Grid.Row="1" Grid.Column="0"
|
||||
Text="{DynamicResource Text.GPG.Path}"
|
||||
HorizontalAlignment="Right"
|
||||
Margin="0,0,8,0"/>
|
||||
<Grid Grid.Row="1" Grid.Column="2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<controls:TextEdit
|
||||
Grid.Column="0"
|
||||
Height="24"
|
||||
x:Name="txtGPGExec"
|
||||
Placeholder="{DynamicResource Text.GPG.Path.Placeholder}"
|
||||
Text="{Binding ElementName=me, Path=GPGExec, Mode=TwoWay}"/>
|
||||
<controls:IconButton
|
||||
Grid.Column="1"
|
||||
Click="SelectGPGExec"
|
||||
Width="24" Height="24"
|
||||
Margin="4,0,0,0" Padding="4"
|
||||
BorderThickness="1" BorderBrush="{DynamicResource Brush.Border1}"
|
||||
Icon="{StaticResource Icon.Folder.Open}"/>
|
||||
</Grid>
|
||||
|
||||
<TextBlock
|
||||
Grid.Row="2" Grid.Column="0"
|
||||
Text="{DynamicResource Text.GPG.UserKey}"
|
||||
HorizontalAlignment="Right"
|
||||
Margin="0,0,8,0"/>
|
||||
<controls:TextEdit
|
||||
Grid.Row="2" Grid.Column="2"
|
||||
Height="24"
|
||||
Text="{Binding ElementName=me, Path=GPGUserSigningKey, Mode=TwoWay}"
|
||||
Placeholder="{DynamicResource Text.GPG.UserKey.Placeholder}"/>
|
||||
</Grid>
|
||||
</TabItem>
|
||||
|
||||
<!-- External Merger -->
|
||||
<TabItem Header="{DynamicResource Text.Preference.Merger}">
|
||||
<Grid Margin="8">
|
||||
<Grid.RowDefinitions>
|
||||
|
@ -295,7 +358,7 @@
|
|||
</Grid.RowDefinitions>
|
||||
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="100"/>
|
||||
<ColumnDefinition Width="120"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
|
|
|
@ -15,6 +15,9 @@ namespace SourceGit.Views {
|
|||
public string Email { get; set; }
|
||||
public string CRLF { get; set; }
|
||||
public string Version { get; set; }
|
||||
public string GPGExec { get; set; }
|
||||
public bool GPGSigningEnabled { get; set; }
|
||||
public string GPGUserSigningKey { get; set; }
|
||||
|
||||
public Preference() {
|
||||
UpdateGitInfo(false);
|
||||
|
@ -24,22 +27,35 @@ namespace SourceGit.Views {
|
|||
private bool UpdateGitInfo(bool updateUi) {
|
||||
var isReady = Models.Preference.Instance.IsReady;
|
||||
if (isReady) {
|
||||
User = new Commands.Config().Get("user.name");
|
||||
Email = new Commands.Config().Get("user.email");
|
||||
CRLF = new Commands.Config().Get("core.autocrlf");
|
||||
var cmd = new Commands.Config();
|
||||
User = cmd.Get("user.name");
|
||||
Email = cmd.Get("user.email");
|
||||
CRLF = cmd.Get("core.autocrlf");
|
||||
Version = new Commands.Version().Query();
|
||||
if (string.IsNullOrEmpty(CRLF)) CRLF = "false";
|
||||
GPGExec = cmd.Get("gpg.program");
|
||||
if (string.IsNullOrEmpty(GPGExec)) {
|
||||
string gitInstallFolder = Path.GetDirectoryName(Models.Preference.Instance.Git.Path);
|
||||
string defaultGPG = Path.GetFullPath(Path.Join(gitInstallFolder, "..", "usr", "bin", "gpg.exe"));
|
||||
if (File.Exists(defaultGPG)) GPGExec = defaultGPG;
|
||||
}
|
||||
GPGSigningEnabled = cmd.Get("commit.gpgsign") == "true";
|
||||
GPGUserSigningKey = cmd.Get("user.signingkey");
|
||||
} else {
|
||||
User = "";
|
||||
Email = "";
|
||||
CRLF = "false";
|
||||
Version = "Unknown";
|
||||
GPGExec = "";
|
||||
GPGSigningEnabled = false;
|
||||
GPGUserSigningKey = "";
|
||||
}
|
||||
if (updateUi) {
|
||||
editGitUser?.GetBindingExpression(TextBox.TextProperty).UpdateTarget();
|
||||
editGitEmail?.GetBindingExpression(TextBox.TextProperty).UpdateTarget();
|
||||
editGitCrlf?.GetBindingExpression(ComboBox.SelectedValueProperty).UpdateTarget();
|
||||
textGitVersion?.GetBindingExpression(TextBlock.TextProperty).UpdateTarget();
|
||||
txtGPGExec?.GetBindingExpression(TextBox.TextProperty).UpdateTarget();
|
||||
}
|
||||
return isReady;
|
||||
}
|
||||
|
@ -81,6 +97,19 @@ namespace SourceGit.Views {
|
|||
}
|
||||
}
|
||||
|
||||
private void SelectGPGExec(object sender, RoutedEventArgs e) {
|
||||
var dialog = new OpenFileDialog();
|
||||
dialog.Filter = $"GPG Executable|gpg.exe";
|
||||
dialog.Title = App.Text("Text.GPG.Path.Placeholder");
|
||||
dialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
|
||||
dialog.CheckFileExists = true;
|
||||
|
||||
if (dialog.ShowDialog() == true) {
|
||||
GPGExec = dialog.FileName;
|
||||
txtGPGExec?.GetBindingExpression(TextBox.TextProperty).UpdateTarget();
|
||||
}
|
||||
}
|
||||
|
||||
private void SelectMergeTool(object sender, RoutedEventArgs e) {
|
||||
var type = Models.Preference.Instance.MergeTool.Type;
|
||||
var tool = Models.MergeTool.Supported.Find(x => x.Type == type);
|
||||
|
@ -123,6 +152,16 @@ namespace SourceGit.Views {
|
|||
|
||||
var oldCRLF = cmd.Get("core.autocrlf");
|
||||
if (oldCRLF != CRLF) cmd.Set("core.autocrlf", CRLF);
|
||||
|
||||
var oldGPGExec = cmd.Get("gpg.program");
|
||||
if (oldGPGExec != GPGExec) cmd.Set("gpg.program", GPGExec);
|
||||
|
||||
var oldGPGSigningEnabledStr = cmd.Get("commit.gpgsign");
|
||||
var oldGPGSigningEnabled = "true" == oldGPGSigningEnabledStr;
|
||||
if (oldGPGSigningEnabled != GPGSigningEnabled) cmd.Set("commit.gpgsign", GPGSigningEnabled ? "true" : "false");
|
||||
|
||||
var oldGPGUserSigningKey = cmd.Get("user.signingkey");
|
||||
if (oldGPGUserSigningKey != GPGUserSigningKey) cmd.Set("user.signingkey", GPGUserSigningKey);
|
||||
}
|
||||
|
||||
Models.Preference.Save();
|
||||
|
|
Loading…
Reference in a new issue