Skip to content

Commit dba6b75

Browse files
committed
feature: supports to use git-credential-libsecret instead of git-credential-manager on Linux (#1560)
Signed-off-by: leo <longshuang@msn.cn>
1 parent 5ed2c7b commit dba6b75

File tree

7 files changed

+49
-10
lines changed

7 files changed

+49
-10
lines changed

src/Commands/Command.cs

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,6 @@ private ProcessStartInfo CreateGitStartInfo(bool redirect)
153153
{
154154
var start = new ProcessStartInfo();
155155
start.FileName = Native.OS.GitExecutable;
156-
start.Arguments = "--no-pager -c core.quotepath=off -c credential.helper=manager ";
157156
start.UseShellExecute = false;
158157
start.CreateNoWindow = true;
159158

@@ -182,16 +181,27 @@ private ProcessStartInfo CreateGitStartInfo(bool redirect)
182181
start.Environment.Add("LC_ALL", "C");
183182
}
184183

185-
// Force using this app as git editor.
186-
start.Arguments += Editor switch
184+
var builder = new StringBuilder();
185+
builder
186+
.Append("--no-pager -c core.quotepath=off -c credential.helper=")
187+
.Append(Native.OS.CredentialHelper)
188+
.Append(' ');
189+
190+
switch (Editor)
187191
{
188-
EditorType.CoreEditor => $"""-c core.editor="\"{selfExecFile}\" --core-editor" """,
189-
EditorType.RebaseEditor => $"""-c core.editor="\"{selfExecFile}\" --rebase-message-editor" -c sequence.editor="\"{selfExecFile}\" --rebase-todo-editor" -c rebase.abbreviateCommands=true """,
190-
_ => "-c core.editor=true ",
191-
};
192+
case EditorType.CoreEditor:
193+
builder.Append($"""-c core.editor="\"{selfExecFile}\" --core-editor" """);
194+
break;
195+
case EditorType.RebaseEditor:
196+
builder.Append($"""-c core.editor="\"{selfExecFile}\" --rebase-message-editor" -c sequence.editor="\"{selfExecFile}\" --rebase-todo-editor" -c rebase.abbreviateCommands=true """);
197+
break;
198+
default:
199+
builder.Append("-c core.editor=true ");
200+
break;
201+
}
192202

193-
// Append command args
194-
start.Arguments += Args;
203+
builder.Append(Args);
204+
start.Arguments = builder.ToString();
195205

196206
// Working directory
197207
if (!string.IsNullOrEmpty(WorkingDirectory))

src/Native/OS.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,12 @@ public static Version GitVersion
5858
private set;
5959
} = new Version(0, 0, 0);
6060

61+
public static string CredentialHelper
62+
{
63+
get;
64+
set;
65+
} = "manager";
66+
6167
public static string ShellOrTerminal
6268
{
6369
get;

src/Resources/Locales/en_US.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,7 @@
555555
<x:String x:Key="Text.Preferences.Git.Invalid" xml:space="preserve">Git (&gt;= 2.25.1) is required by this app</x:String>
556556
<x:String x:Key="Text.Preferences.Git.Path" xml:space="preserve">Install Path</x:String>
557557
<x:String x:Key="Text.Preferences.Git.SSLVerify" xml:space="preserve">Enable HTTP SSL Verify</x:String>
558+
<x:String x:Key="Text.Preferences.Git.UseLibsecret" xml:space="preserve">Use git-credential-libsecret instead of git-credential-manager</x:String>
558559
<x:String x:Key="Text.Preferences.Git.User" xml:space="preserve">User Name</x:String>
559560
<x:String x:Key="Text.Preferences.Git.User.Placeholder" xml:space="preserve">Global git user name</x:String>
560561
<x:String x:Key="Text.Preferences.Git.Version" xml:space="preserve">Git version</x:String>

src/Resources/Locales/zh_CN.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,7 @@
559559
<x:String x:Key="Text.Preferences.Git.Invalid" xml:space="preserve">本软件要求GIT最低版本为2.25.1</x:String>
560560
<x:String x:Key="Text.Preferences.Git.Path" xml:space="preserve">安装路径</x:String>
561561
<x:String x:Key="Text.Preferences.Git.SSLVerify" xml:space="preserve">启用HTTP SSL验证</x:String>
562+
<x:String x:Key="Text.Preferences.Git.UseLibsecret" xml:space="preserve">使用 git-credential-libsecret 替代 git-credential-manager</x:String>
562563
<x:String x:Key="Text.Preferences.Git.User" xml:space="preserve">用户名</x:String>
563564
<x:String x:Key="Text.Preferences.Git.User.Placeholder" xml:space="preserve">默认GIT用户名</x:String>
564565
<x:String x:Key="Text.Preferences.Git.Version" xml:space="preserve">Git 版本</x:String>

src/Resources/Locales/zh_TW.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,7 @@
559559
<x:String x:Key="Text.Preferences.Git.Invalid" xml:space="preserve">本軟體要求 Git 最低版本為 2.25.1</x:String>
560560
<x:String x:Key="Text.Preferences.Git.Path" xml:space="preserve">安裝路徑</x:String>
561561
<x:String x:Key="Text.Preferences.Git.SSLVerify" xml:space="preserve">啟用 HTTP SSL 驗證</x:String>
562+
<x:String x:Key="Text.Preferences.Git.UseLibsecret" xml:space="preserve">使用 git-credential-libsecret 取代 git-credential-manager</x:String>
562563
<x:String x:Key="Text.Preferences.Git.User" xml:space="preserve">使用者名稱</x:String>
563564
<x:String x:Key="Text.Preferences.Git.User.Placeholder" xml:space="preserve">預設 Git 使用者名稱</x:String>
564565
<x:String x:Key="Text.Preferences.Git.Version" xml:space="preserve">Git 版本</x:String>

src/ViewModels/Preferences.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,20 @@ public string GitDefaultCloneDir
310310
set => SetProperty(ref _gitDefaultCloneDir, value);
311311
}
312312

313+
public bool UseLibsecretInsteadOfGCM
314+
{
315+
get => Native.OS.CredentialHelper.Equals("libsecret", StringComparison.Ordinal);
316+
set
317+
{
318+
var helper = value ? "libsecret" : "manager";
319+
if (OperatingSystem.IsLinux() && !Native.OS.CredentialHelper.Equals(helper, StringComparison.Ordinal))
320+
{
321+
Native.OS.CredentialHelper = helper;
322+
OnPropertyChanged();
323+
}
324+
}
325+
}
326+
313327
public int ShellOrTerminal
314328
{
315329
get => _shellOrTerminal;

src/Views/Preferences.axaml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@
279279
<TextBlock Classes="tab_header" Text="{DynamicResource Text.Preferences.Git}"/>
280280
</TabItem.Header>
281281

282-
<Grid Margin="8" RowDefinitions="32,32,32,32,32,32,32,32" ColumnDefinitions="Auto,*">
282+
<Grid Margin="8" RowDefinitions="32,32,32,32,32,32,32,32,Auto" ColumnDefinitions="Auto,*">
283283
<TextBlock Grid.Row="0" Grid.Column="0"
284284
Text="{DynamicResource Text.Preferences.Git.Path}"
285285
HorizontalAlignment="Right"
@@ -366,6 +366,12 @@
366366
Height="32"
367367
Content="{DynamicResource Text.Preferences.Git.SSLVerify}"
368368
IsChecked="{Binding #ThisControl.EnableHTTPSSLVerify, Mode=TwoWay}"/>
369+
370+
<CheckBox Grid.Row="8" Grid.Column="1"
371+
Height="32"
372+
Content="{DynamicResource Text.Preferences.Git.UseLibsecret}"
373+
IsChecked="{Binding UseLibsecretInsteadOfGCM, Mode=TwoWay}"
374+
IsVisible="{OnPlatform False, Linux=True}"/>
369375
</Grid>
370376
</TabItem>
371377

0 commit comments

Comments
 (0)