@@ -39,103 +39,81 @@ protected void Initialize()
39
39
Logging . TracingEnabled = UserSettings . Get ( Constants . TraceLoggingKey , false ) ;
40
40
ProcessManager = new ProcessManager ( Environment , Platform . GitEnvironment , CancellationToken ) ;
41
41
Platform . Initialize ( ProcessManager , TaskManager ) ;
42
- ITaskManager taskManager = TaskManager ;
43
- GitClient = new GitClient ( Environment , ProcessManager , taskManager . Token ) ;
42
+ GitClient = new GitClient ( Environment , ProcessManager , TaskManager . Token ) ;
44
43
SetupMetrics ( ) ;
45
44
}
46
45
47
46
public void Run ( bool firstRun )
48
47
{
49
48
Logger . Trace ( "Run - CurrentDirectory {0}" , NPath . CurrentDirectory ) ;
50
49
51
- SetupGit ( )
52
- . Then ( RestartRepository )
53
- . ThenInUI ( InitializeUI )
54
- . Start ( ) ;
55
- }
50
+ var afterGitSetup = new ActionTask ( CancellationToken , RestartRepository )
51
+ . ThenInUI ( InitializeUI ) ;
56
52
57
- private ITask SetupGit ( )
58
- {
59
- return BuildDetermineGitPathTask ( )
60
- . Then ( ( b , path ) => {
61
- Logger . Trace ( "Setting GitExecutablePath: {0}" , path ) ;
62
- Environment . GitExecutablePath = path ;
63
- } )
64
- . Then ( ( ) => {
65
- if ( Environment . GitExecutablePath == null )
53
+ //GitClient.GetConfig cannot be called until there is a git path set so it is wrapped in an ActionTask
54
+ var windowsCredentialSetup = new ActionTask ( CancellationToken , ( ) => {
55
+ GitClient . GetConfig ( "credential.helper" , GitConfigSource . Global ) . Then ( ( b , credentialHelper ) => {
56
+ if ( ! string . IsNullOrEmpty ( credentialHelper ) )
66
57
{
67
- if ( Environment . IsWindows )
68
- {
69
- GitClient . GetConfig ( "credential.helper" , GitConfigSource . Global ) . Then (
70
- ( b , credentialHelper ) => {
71
- if ( ! string . IsNullOrEmpty ( credentialHelper ) )
72
- {
73
- Logger . Trace ( "Windows CredentialHelper: {0}" , credentialHelper ) ;
74
- }
75
- else
76
- {
77
- Logger . Warning (
78
- "No Windows CredentialHeloper found: Setting to wincred" ) ;
79
-
80
- GitClient . SetConfig ( "credential.helper" , "wincred" , GitConfigSource . Global ) . Start ( ) . Wait ( ) ;
81
- }
82
- } ) ;
83
- }
58
+ Logger . Trace ( "Windows CredentialHelper: {0}" , credentialHelper ) ;
59
+ afterGitSetup . Start ( ) ;
84
60
}
85
- } )
86
- . ThenInUI ( ( ) => {
87
- Environment . User . Initialize ( GitClient ) ;
88
- } ) ;
89
- }
61
+ else
62
+ {
63
+ Logger . Warning ( "No Windows CredentialHeloper found: Setting to wincred" ) ;
90
64
91
- private TaskBase < NPath > BuildDetermineGitPathTask ( )
92
- {
93
- TaskBase < NPath > determinePath = new FuncTask < NPath > ( CancellationToken , ( ) => {
94
- if ( Environment . GitExecutablePath != null )
65
+ GitClient . SetConfig ( "credential.helper" , "wincred" , GitConfigSource . Global )
66
+ . Then ( ( ) => { afterGitSetup . Start ( ) ; } ) . Start ( ) ;
67
+ }
68
+ } ) . Start ( ) ;
69
+ } ) ;
70
+
71
+ var afterPathDetermined = new ActionTask < NPath > ( CancellationToken , ( b , path ) => {
72
+ Logger . Trace ( "Setting Environment git path: {0}" , path ) ;
73
+ Environment . GitExecutablePath = path ;
74
+ } ) . ThenInUI ( ( ) => {
75
+ Environment . User . Initialize ( GitClient ) ;
76
+
77
+ if ( Environment . IsWindows )
95
78
{
96
- return Environment . GitExecutablePath ;
79
+ windowsCredentialSetup . Start ( ) ;
97
80
}
98
-
99
- var gitExecutablePath = SystemSettings . Get ( Constants . GitInstallPathKey ) ? . ToNPath ( ) ;
100
- if ( gitExecutablePath != null && gitExecutablePath . FileExists ( ) )
81
+ else
101
82
{
102
- Logger . Trace ( "Using git install path from settings" ) ;
103
- return gitExecutablePath ;
83
+ afterGitSetup . Start ( ) ;
104
84
}
105
-
106
- return null ;
107
85
} ) ;
108
86
109
- var environmentIsWindows = Environment . IsWindows ;
110
- if ( environmentIsWindows )
111
- {
112
- var applicationDataPath = Environment . GetSpecialFolder ( System . Environment . SpecialFolder . LocalApplicationData ) . ToNPath ( ) ;
113
- var installDetails = new PortableGitInstallDetails ( applicationDataPath , true ) ;
114
- var installTask = new PortableGitInstallTask ( CancellationToken , Environment , installDetails ) ;
115
-
116
- determinePath = determinePath . Then ( new ShortCircuitTask < NPath > ( CancellationToken , installTask ) ) ;
117
- }
118
-
119
- if ( ! environmentIsWindows )
120
- {
121
- determinePath = determinePath . Then ( new ShortCircuitTask < NPath > ( CancellationToken , ( ) => {
122
- var p = new NPath ( "/usr/local/bin/git" ) ;
87
+ var findExecTask = new FindExecTask ( "git" , CancellationToken )
88
+ . Finally ( ( b , ex , path ) => {
89
+ if ( b && path != null )
90
+ {
91
+ Logger . Trace ( "FindExecTask Success: {0}" , path ) ;
123
92
124
- if ( p . FileExists ( ) )
93
+ new FuncTask < NPath > ( CancellationToken , ( ) => path )
94
+ . Then ( afterPathDetermined )
95
+ . Start ( ) ;
96
+ }
97
+ else
125
98
{
126
- return p ;
99
+ Logger . Warning ( "FindExecTask Failure" ) ;
100
+ Logger . Error ( "Git not found" ) ;
127
101
}
102
+ } ) ;
128
103
129
- return null ;
130
- } ) ) ;
131
-
132
- var findExecTask = new FindExecTask ( "git" , CancellationToken ) ;
133
- findExecTask . Configure ( ProcessManager ) ;
134
-
135
- determinePath = determinePath . Then ( new ShortCircuitTask < NPath > ( CancellationToken , findExecTask ) ) ;
136
- }
137
-
138
- return determinePath ;
104
+ var applicationDataPath = Environment . GetSpecialFolder ( System . Environment . SpecialFolder . LocalApplicationData ) . ToNPath ( ) ;
105
+ var installDetails = new GitInstallDetails ( applicationDataPath , true ) ;
106
+
107
+ var gitInstaller = new GitInstaller ( Environment , CancellationToken , installDetails ) ;
108
+ gitInstaller . SetupGitIfNeeded ( new ActionTask < NPath > ( CancellationToken , ( b , path ) => {
109
+ Logger . Trace ( "GitInstaller Success: {0}" , path ) ;
110
+ new FuncTask < NPath > ( CancellationToken , ( ) => path )
111
+ . Then ( afterPathDetermined )
112
+ . Start ( ) ;
113
+ } ) , new ActionTask ( CancellationToken , ( ) => {
114
+ Logger . Warning ( "GitInstaller Failure" ) ;
115
+ findExecTask . Start ( ) ;
116
+ } ) ) ;
139
117
}
140
118
141
119
public ITask InitializeRepository ( )
0 commit comments