@@ -158,8 +158,36 @@ protected async Task<Result> ReadToEndAsync()
158158
159159 protected ProcessStartInfo CreateGitStartInfo ( bool redirect )
160160 {
161+ var useSetSid = OperatingSystem . IsLinux ( ) && CancellationToken . CanBeCanceled ;
162+ var selfExecFile = Environment . ProcessPath ;
163+ var builder = new StringBuilder ( 2048 ) ;
164+
165+ if ( useSetSid )
166+ builder . Append ( Native . OS . GitExecutable . Quoted ( ) ) . Append ( ' ' ) ;
167+
168+ builder
169+ . Append ( "--no-pager -c core.quotepath=off -c credential.helper=" )
170+ . Append ( Native . OS . CredentialHelper )
171+ . Append ( ' ' ) ;
172+
173+ switch ( Editor )
174+ {
175+ case EditorType . CoreEditor :
176+ builder . Append ( $ """ -c core.editor="\"{ selfExecFile } \" --core-editor" """ ) ;
177+ break ;
178+ case EditorType . RebaseEditor :
179+ builder . Append ( $ """ -c core.editor="\"{ selfExecFile } \" --rebase-message-editor" -c sequence.editor="\"{ selfExecFile } \" --rebase-todo-editor" -c rebase.abbreviateCommands=true """ ) ;
180+ break ;
181+ default :
182+ builder . Append ( "-c core.editor=true " ) ;
183+ break ;
184+ }
185+
186+ builder . Append ( Args ) ;
187+
161188 var start = new ProcessStartInfo ( ) ;
162- start . FileName = Native . OS . GitExecutable ;
189+ start . FileName = useSetSid ? "setsid" : Native . OS . GitExecutable ;
190+ start . Arguments = builder . ToString ( ) ;
163191 start . UseShellExecute = false ;
164192 start . CreateNoWindow = true ;
165193
@@ -172,7 +200,6 @@ protected ProcessStartInfo CreateGitStartInfo(bool redirect)
172200 }
173201
174202 // Force using this app as SSH askpass program
175- var selfExecFile = Environment . ProcessPath ;
176203 start . Environment . Add ( "SSH_ASKPASS" , selfExecFile ) ; // Can not use parameter here, because it invoked by SSH with `exec`
177204 start . Environment . Add ( "SSH_ASKPASS_REQUIRE" , "prefer" ) ;
178205 start . Environment . Add ( "SOURCEGIT_LAUNCH_AS_ASKPASS" , "TRUE" ) ;
@@ -190,28 +217,6 @@ protected ProcessStartInfo CreateGitStartInfo(bool redirect)
190217 start . Environment . Add ( "LC_ALL" , "C" ) ;
191218 }
192219
193- var builder = new StringBuilder ( 2048 ) ;
194- builder
195- . Append ( "--no-pager -c core.quotepath=off -c credential.helper=" )
196- . Append ( Native . OS . CredentialHelper )
197- . Append ( ' ' ) ;
198-
199- switch ( Editor )
200- {
201- case EditorType . CoreEditor :
202- builder . Append ( $ """ -c core.editor="\"{ selfExecFile } \" --core-editor" """ ) ;
203- break ;
204- case EditorType . RebaseEditor :
205- builder . Append ( $ """ -c core.editor="\"{ selfExecFile } \" --rebase-message-editor" -c sequence.editor="\"{ selfExecFile } \" --rebase-todo-editor" -c rebase.abbreviateCommands=true """ ) ;
206- break ;
207- default :
208- builder . Append ( "-c core.editor=true " ) ;
209- break ;
210- }
211-
212- builder . Append ( Args ) ;
213- start . Arguments = builder . ToString ( ) ;
214-
215220 // Working directory
216221 if ( ! string . IsNullOrEmpty ( WorkingDirectory ) )
217222 start . WorkingDirectory = WorkingDirectory ;
0 commit comments