11using AddActionsWorkflow . Options ;
22using CliWrap ;
3- using Microsoft ;
3+ using LibGit2Sharp ;
44using System . Diagnostics ;
55using System . IO ;
66using System . Text ;
@@ -11,7 +11,7 @@ namespace AddActionsWorkflow;
1111[ Command ( PackageIds . AddWorkflowCommand ) ]
1212internal sealed class AddWorkflowCommand : BaseCommand < AddWorkflowCommand >
1313{
14- string finaleWorkflowname = "" ;
14+ string finaleWorkflowname = string . Empty ;
1515 string branchName = "main" ;
1616
1717 protected override async Task ExecuteAsync ( OleMenuCmdEventArgs e )
@@ -23,7 +23,7 @@ protected override async Task ExecuteAsync(OleMenuCmdEventArgs e)
2323 var options = await General . GetLiveInstanceAsync ( ) ;
2424
2525 // try to get the repo root
26- string repoRoot = await GetGitRootDirAsync ( slnDir , options . UseCurrentBranchName ) ;
26+ string repoRoot = await GetGitRootDirAsync ( dirInfo . FullName , options . UseCurrentBranchName ) ;
2727 var workflowCreated = await CreateWorkflowTemplateAsync ( repoRoot , options ) ;
2828
2929 if ( workflowCreated )
@@ -88,50 +88,25 @@ internal async Task<String> GetGitRootDirAsync(string workingDirectory, bool use
8888 {
8989 await VS . StatusBar . ShowMessageAsync ( "Establishing git root directory..." ) ;
9090 var rootGitDir = workingDirectory ;
91- var stdOutBuffer = new StringBuilder ( ) ;
92- var stdErrBuffer = new StringBuilder ( ) ;
9391
94- var result = await Cli . Wrap ( "git" )
95- . WithArguments ( "rev-parse --show-toplevel" )
96- . WithWorkingDirectory ( workingDirectory )
97- . WithStandardOutputPipe ( PipeTarget . ToStringBuilder ( stdOutBuffer ) )
98- . WithStandardErrorPipe ( PipeTarget . ToStringBuilder ( stdErrBuffer ) )
99- . WithValidation ( CommandResultValidation . None )
100- . ExecuteAsync ( ) ;
101-
102- var stdOut = stdOutBuffer . ToString ( ) ;
103- var stdErr = stdErrBuffer . ToString ( ) ;
104-
105- if ( result . ExitCode == 0 )
92+ while ( ! Directory . Exists ( Path . Combine ( rootGitDir , ".git" ) ) )
10693 {
107- rootGitDir = stdOut ;
108- rootGitDir = rootGitDir . Replace ( '/' , '\\ ' ) . Replace ( "\n " , "" ) ;
109-
110- if ( useCurrentBranch ) await GetCurrentBranchNameAsync ( workingDirectory ) ;
94+ rootGitDir = Path . GetFullPath ( Path . Combine ( rootGitDir , ".." ) ) ;
11195 }
11296
113- return rootGitDir ;
114- }
115-
116- internal async Task GetCurrentBranchNameAsync ( string workingDirectory )
117- {
118- var stdOutBuffer = new StringBuilder ( ) ;
119- var stdErrBuffer = new StringBuilder ( ) ;
120-
121- var result = await Cli . Wrap ( "git" )
122- . WithArguments ( "branch --show-current" )
123- . WithWorkingDirectory ( workingDirectory )
124- . WithStandardOutputPipe ( PipeTarget . ToStringBuilder ( stdOutBuffer ) )
125- . WithStandardErrorPipe ( PipeTarget . ToStringBuilder ( stdErrBuffer ) )
126- . WithValidation ( CommandResultValidation . None )
127- . ExecuteAsync ( ) ;
128-
129- var stdOut = stdOutBuffer . ToString ( ) ;
130- var stdErr = stdErrBuffer . ToString ( ) ;
131-
132- if ( result . ExitCode == 0 )
97+ try
98+ {
99+ using ( var repo = new Repository ( rootGitDir ) )
100+ {
101+ if ( useCurrentBranch ) branchName = repo . Head . FriendlyName ;
102+ rootGitDir = repo . Info . WorkingDirectory ;
103+ }
104+ }
105+ catch ( Exception ex )
133106 {
134- branchName = stdOut ;
107+ Debug . WriteLine ( ex . Message ) ;
135108 }
109+
110+ return rootGitDir ;
136111 }
137112}
0 commit comments