22using System . Collections . Generic ;
33using System . IO ;
44using System . Linq ;
5+ using System . Text ;
56using System . Threading . Tasks ;
67using UnityEditor ;
78using UnityEngine ;
@@ -11,35 +12,34 @@ namespace GitHub.Unity
1112 [ Serializable ]
1213 class GitPathView : Subview
1314 {
14- private const string BrowseButton = "..." ;
1515 private const string GitInstallTitle = "Git installation" ;
16- private const string GitInstallBrowseTitle = "Select git binary" ;
17- private const string GitInstallPickInvalidTitle = "Invalid Git install" ;
18- private const string GitInstallPickInvalidMessage = "The selected file is not a valid Git install. {0}" ;
19- private const string GitInstallFindButton = "Find install" ;
20- private const string GitInstallPickInvalidOK = "OK" ;
2116 private const string PathToGit = "Path to Git" ;
2217 private const string GitPathSaveButton = "Save Path" ;
18+ private const string GitInstallFindButton = "Find install" ;
19+ private const string BrowseButton = "..." ;
20+ private const string GitInstallBrowseTitle = "Select git binary" ;
21+ private const string ErrorInvalidPathMessage = "Invalid Path." ;
22+ private const string ErrorGettingSoftwareVersionMessage = "Error getting software versions." ;
23+ private const string ErrorMinimumGitVersionMessageFormat = "Git version {0} found. Git version {1} is required." ;
24+ private const string ErrorMinimumGitLfsVersionMessageFormat = "Git LFS version {0} found. Git LFS version {1} is required." ;
2325
2426 [ SerializeField ] private string gitExec ;
2527 [ SerializeField ] private string gitExecParent ;
2628 [ SerializeField ] private string gitExecExtension ;
2729 [ SerializeField ] private string newGitExec ;
28- [ NonSerialized ] private bool gitExecHasChanged ;
2930
3031 [ NonSerialized ] private bool isBusy ;
32+ [ NonSerialized ] private string gitFileErrorMessage ;
33+ [ NonSerialized ] private string gitVersionErrorMessage ;
34+ [ NonSerialized ] private bool gitExecHasChanged ;
35+
3136 public override void OnEnable ( )
3237 {
3338 base . OnEnable ( ) ;
3439
3540 gitExecHasChanged = true ;
3641 }
3742
38- public override void OnDisable ( )
39- {
40- base . OnDisable ( ) ;
41- }
42-
4343 public override void OnDataUpdate ( )
4444 {
4545 base . OnDataUpdate ( ) ;
@@ -89,11 +89,16 @@ public override void OnGUI()
8989
9090 GUILayout . BeginHorizontal ( ) ;
9191 {
92- var needsSaving = ! string . IsNullOrEmpty ( newGitExec )
93- && newGitExec != gitExec
94- && newGitExec . ToNPath ( ) . FileExists ( ) ;
92+ var isValueChanged = ! string . IsNullOrEmpty ( newGitExec )
93+ && newGitExec != gitExec ;
94+
95+ var isValueChangedAndFileExists = isValueChanged && newGitExec . ToNPath ( ) . FileExists ( ) ;
9596
96- EditorGUI . BeginDisabledGroup ( ! needsSaving ) ;
97+ gitFileErrorMessage = isValueChanged && ! isValueChangedAndFileExists
98+ ? ErrorInvalidPathMessage
99+ : null ;
100+
101+ EditorGUI . BeginDisabledGroup ( ! isValueChangedAndFileExists ) ;
97102 {
98103 if ( GUILayout . Button ( GitPathSaveButton , GUILayout . ExpandWidth ( false ) ) )
99104 {
@@ -138,6 +143,24 @@ public override void OnGUI()
138143 }
139144 }
140145 GUILayout . EndHorizontal ( ) ;
146+
147+ if ( gitFileErrorMessage != null )
148+ {
149+ GUILayout . BeginHorizontal ( ) ;
150+ {
151+ GUILayout . Label ( gitFileErrorMessage , Styles . ErrorLabel ) ;
152+ }
153+ GUILayout . EndHorizontal ( ) ;
154+ }
155+
156+ if ( gitVersionErrorMessage != null )
157+ {
158+ GUILayout . BeginHorizontal ( ) ;
159+ {
160+ GUILayout . Label ( gitVersionErrorMessage , Styles . ErrorLabel ) ;
161+ }
162+ GUILayout . EndHorizontal ( ) ;
163+ }
141164 }
142165 EditorGUI . EndDisabledGroup ( ) ;
143166 }
@@ -146,11 +169,16 @@ private void ValidateAndSetGitInstallPath(string value)
146169 {
147170 Logger . Trace ( "Validating Git Path:{0}" , value ) ;
148171
172+ gitVersionErrorMessage = null ;
173+
149174 GitClient . ValidateGitInstall ( value ) . ThenInUI ( ( sucess , result ) => {
150175 if ( ! sucess )
151176 {
152- Logger . Trace ( "Error getting software versions" ) ;
177+ Logger . Trace ( ErrorGettingSoftwareVersionMessage ) ;
178+ gitVersionErrorMessage = ErrorGettingSoftwareVersionMessage ;
179+
153180 isBusy = false ;
181+
154182 return ;
155183 }
156184
@@ -162,6 +190,25 @@ private void ValidateAndSetGitInstallPath(string value)
162190 result . GitLfsVersionTask ,
163191 Constants . MinimumGitLfsVersion ) ;
164192
193+ var errorMessageStringBuilder = new StringBuilder ( ) ;
194+
195+ if ( result . GitVersionTask < Constants . MinimumGitVersion )
196+ {
197+ errorMessageStringBuilder . AppendFormat ( ErrorMinimumGitVersionMessageFormat , result . GitVersionTask , Constants . MinimumGitVersion ) ;
198+ }
199+
200+ if ( result . GitLfsVersionTask < Constants . MinimumGitLfsVersion )
201+ {
202+ if ( errorMessageStringBuilder . Length > 0 )
203+ {
204+ errorMessageStringBuilder . Append ( Environment . NewLine ) ;
205+ }
206+
207+ errorMessageStringBuilder . AppendFormat ( ErrorMinimumGitLfsVersionMessageFormat , result . GitLfsVersionTask , Constants . MinimumGitLfsVersion ) ;
208+ }
209+
210+ gitVersionErrorMessage = errorMessageStringBuilder . ToString ( ) ;
211+
165212 isBusy = false ;
166213 return ;
167214 }
0 commit comments