Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit 9019b76

Browse files
committed
Fix setting name, email and remote
Add support for setting name and email when there is no repository yet.
1 parent a930cb9 commit 9019b76

File tree

3 files changed

+119
-24
lines changed

3 files changed

+119
-24
lines changed

src/GitHub.Api/Git/Repository.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ public ITask Revert(string changeset)
100100

101101
public ITask ListLocks()
102102
{
103+
if (repositoryManager == null)
104+
return new ActionTask(TaskExtensions.CompletedTask);
103105
return repositoryManager.ListLocks(false);
104106
}
105107

@@ -264,9 +266,16 @@ interface IUser
264266
string Name { get; set; }
265267
string Email { get; set; }
266268
}
269+
270+
[Serializable]
267271
class User : IUser
268272
{
269273
public string Name { get; set; }
270274
public string Email { get; set; }
275+
276+
public override string ToString()
277+
{
278+
return String.Format("Name: {0} Email: {1}", Name, Email);
279+
}
271280
}
272281
}

src/GitHub.Api/NewTaskSystem/TaskExtensions.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,20 @@ namespace GitHub.Unity
66
{
77
static class TaskExtensions
88
{
9+
private static Task completedTask;
10+
11+
public static Task CompletedTask
12+
{
13+
get
14+
{
15+
if (completedTask == null)
16+
{
17+
completedTask = TaskEx.FromResult(true);
18+
}
19+
return completedTask;
20+
}
21+
}
22+
923
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "task")]
1024
public static void Forget(this Task task)
1125
{

src/UnityExtension/Assets/Editor/GitHub.Unity/UI/SettingsView.cs

Lines changed: 96 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,12 @@ class SettingsView : Subview
8383
[SerializeField] private int lockedFileSelection = -1;
8484
[SerializeField] private bool hasRemote;
8585
[SerializeField] private bool remoteHasChanged;
86-
[SerializeField] private bool userDataHasChanged;
86+
[NonSerialized] private bool userDataHasChanged;
8787

8888
[SerializeField] private string newGitName;
8989
[SerializeField] private string newGitEmail;
9090
[SerializeField] private string newRepositoryRemoteUrl;
91+
[SerializeField] private User cachedUser;
9192

9293
public override void OnEnable()
9394
{
@@ -113,13 +114,16 @@ public override void OnRepositoryChanged(IRepository oldRepository)
113114

114115
DetachHandlers(oldRepository);
115116
AttachHandlers(Repository);
117+
activeRemote = Repository.CurrentRemote;
118+
remoteHasChanged = true;
116119
Refresh();
117120
}
118121

119122
public override void Refresh()
120123
{
121124
base.Refresh();
122-
Repository.ListLocks().Start();
125+
if (Repository != null)
126+
Repository.ListLocks().Start();
123127
}
124128

125129
private void AttachHandlers(IRepository repository)
@@ -144,12 +148,12 @@ public override void OnGUI()
144148
{
145149
scroll = GUILayout.BeginScrollView(scroll);
146150
{
147-
if (Repository != null)
148-
{
149-
OnUserSettingsGUI();
151+
OnUserSettingsGUI();
150152

151-
GUILayout.Space(EditorGUIUtility.standardVerticalSpacing);
153+
GUILayout.Space(EditorGUIUtility.standardVerticalSpacing);
152154

155+
if (Repository != null)
156+
{
153157
OnRepositorySettingsGUI();
154158

155159
GUILayout.Space(EditorGUIUtility.standardVerticalSpacing);
@@ -173,34 +177,62 @@ private void MaybeUpdateData()
173177
lockedFiles = new List<GitLock>();
174178

175179
if (Repository == null)
180+
{
181+
if (cachedUser == null || String.IsNullOrEmpty(cachedUser.Name))
182+
{
183+
var user = new User();
184+
GitClient.GetConfig("user.name", GitConfigSource.User)
185+
.Then((success, value) => user.Name = value).Then(
186+
GitClient.GetConfig("user.email", GitConfigSource.User)
187+
.Then((success, value) => user.Email = value))
188+
.FinallyInUI((success, ex) =>
189+
{
190+
if (success && !String.IsNullOrEmpty(user.Name))
191+
{
192+
cachedUser = user;
193+
userDataHasChanged = true;
194+
Redraw();
195+
}
196+
})
197+
.Start();
198+
}
199+
200+
if (userDataHasChanged)
201+
{
202+
newGitName = gitName = cachedUser.Name;
203+
newGitEmail = gitEmail = cachedUser.Email;
204+
userDataHasChanged = false;
205+
}
176206
return;
207+
}
177208

178-
userDataHasChanged = !(Repository.User.Name == gitName && Repository.User.Email == gitEmail);
209+
userDataHasChanged = Repository.User.Name != gitName || Repository.User.Email != gitEmail;
179210

180211
if (!remoteHasChanged && !userDataHasChanged)
181212
return;
182213

214+
if (userDataHasChanged)
215+
{
216+
userDataHasChanged = false;
217+
newGitName = gitName = Repository.User.Name;
218+
newGitEmail = gitEmail = Repository.User.Email;
219+
}
220+
183221
if (remoteHasChanged)
184222
{
185223
remoteHasChanged = false;
186224
hasRemote = activeRemote.HasValue && !String.IsNullOrEmpty(activeRemote.Value.Url);
187225
if (!hasRemote)
188226
{
189227
repositoryRemoteName = DefaultRepositoryRemoteName;
190-
repositoryRemoteUrl = string.Empty;
228+
newRepositoryRemoteUrl = repositoryRemoteUrl = string.Empty;
191229
}
192230
else
193231
{
194232
repositoryRemoteName = activeRemote.Value.Name;
195-
repositoryRemoteUrl = activeRemote.Value.Url;
233+
newRepositoryRemoteUrl = repositoryRemoteUrl = activeRemote.Value.Url;
196234
}
197235
}
198-
199-
if (userDataHasChanged)
200-
{
201-
gitName = Repository.User.Name;
202-
gitEmail = Repository.User.Email;
203-
}
204236
}
205237

206238
private void ResetToDefaults()
@@ -243,42 +275,80 @@ private void OnUserSettingsGUI()
243275

244276
EditorGUI.BeginDisabledGroup(isBusy);
245277
{
246-
newGitName = EditorGUILayout.TextField(GitConfigNameLabel, gitName);
247-
newGitEmail = EditorGUILayout.TextField(GitConfigEmailLabel, gitEmail);
278+
newGitName = EditorGUILayout.TextField(GitConfigNameLabel, newGitName);
279+
newGitEmail = EditorGUILayout.TextField(GitConfigEmailLabel, newGitEmail);
248280

249281
var needsSaving = newGitName != gitName || newGitEmail != gitEmail;
250-
EditorGUI.BeginDisabledGroup(needsSaving);
282+
EditorGUI.BeginDisabledGroup(!needsSaving);
251283
{
252284
if (GUILayout.Button(GitConfigUserSave, GUILayout.ExpandWidth(false)))
253285
{
254286
GitClient.SetConfig("user.name", newGitName, GitConfigSource.User)
255-
.Then((success, value) => { if (success) Repository.User.Name = value; })
287+
.Then((success, value) =>
288+
{
289+
if (success)
290+
{
291+
if (Repository != null)
292+
{
293+
Repository.User.Name = value;
294+
}
295+
else
296+
{
297+
if (cachedUser == null)
298+
{
299+
cachedUser = new User();
300+
}
301+
cachedUser.Name = value;
302+
}
303+
}
304+
})
256305
.Then(
257306
GitClient.SetConfig("user.email", newGitEmail, GitConfigSource.User)
258-
.Then((success, value) => { if (success) Repository.User.Email = value; }))
259-
.FinallyInUI((_, __) => isBusy = false)
307+
.Then((success, value) =>
308+
{
309+
if (success)
310+
{
311+
if (Repository != null)
312+
{
313+
Repository.User.Email = value;
314+
}
315+
else
316+
{
317+
cachedUser.Email = value;
318+
userDataHasChanged = true;
319+
}
320+
}
321+
}))
322+
.FinallyInUI((_, __) =>
323+
{
324+
isBusy = false;
325+
Redraw();
326+
})
260327
.Start();
261328
isBusy = true;
262329
}
263330
}
331+
EditorGUI.EndDisabledGroup();
264332
}
333+
EditorGUI.EndDisabledGroup();
265334
}
266335

267336
private void OnRepositorySettingsGUI()
268337
{
269338
GUILayout.Label(GitRepositoryTitle, EditorStyles.boldLabel);
339+
270340
EditorGUI.BeginDisabledGroup(isBusy);
271341
{
272342
newRepositoryRemoteUrl = EditorGUILayout.TextField(GitRepositoryRemoteLabel + ": " + repositoryRemoteName, newRepositoryRemoteUrl);
273-
var needsSaving = newRepositoryRemoteUrl != repositoryRemoteUrl;
274-
EditorGUI.BeginDisabledGroup(needsSaving);
343+
var needsSaving = newRepositoryRemoteUrl != repositoryRemoteUrl && !String.IsNullOrEmpty(newRepositoryRemoteUrl);
344+
EditorGUI.BeginDisabledGroup(!needsSaving);
275345
{
276346
if (GUILayout.Button(GitRepositorySave, GUILayout.ExpandWidth(false)))
277347
{
278348
try
279349
{
280350
isBusy = true;
281-
Repository.SetupRemote(repositoryRemoteName, repositoryRemoteUrl)
351+
Repository.SetupRemote(repositoryRemoteName, newRepositoryRemoteUrl)
282352
.FinallyInUI((_, __) =>
283353
{
284354
isBusy = false;
@@ -292,7 +362,9 @@ private void OnRepositorySettingsGUI()
292362
}
293363
}
294364
}
365+
EditorGUI.EndDisabledGroup();
295366
}
367+
EditorGUI.EndDisabledGroup();
296368
}
297369

298370
private bool ValidateGitInstall(string path)

0 commit comments

Comments
 (0)