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

Commit 5a6a093

Browse files
committed
Making sure running processes don't hang Unity when the domain reloads, part deux
Also ensuring that we get data from git commands that output progress in stderr
1 parent 43e1e78 commit 5a6a093

35 files changed

+356
-251
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ _NCrunch_GitHub.Unity
88
build/
99
TestResult.xml
1010
submodules/
11-
*.stackdump
11+
*.stackdump
12+
*.lastcodeanalysissucceeded

src/GitHub.Api/Application/ApplicationConfiguration.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ namespace GitHub.Unity
55
public static class ApplicationConfiguration
66
{
77
public const int DefaultWebTimeout = 3000;
8+
public const int DefaultGitTimeout = 5000;
89
public static int WebTimeout { get; set; } = DefaultWebTimeout;
10+
public static int GitTimeout { get; set; } = DefaultGitTimeout;
911
}
1012
}

src/GitHub.Api/Application/ApplicationManagerBase.cs

Lines changed: 9 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace GitHub.Unity
99
{
10-
abstract class ApplicationManagerBase : IApplicationManager
10+
class ApplicationManagerBase : IApplicationManager
1111
{
1212
protected static ILogging Logger { get; } = LogHelper.GetLogger<IApplicationManager>();
1313

@@ -45,9 +45,10 @@ protected void Initialize()
4545
{
4646
LogHelper.TracingEnabled = UserSettings.Get(Constants.TraceLoggingKey, false);
4747
ApplicationConfiguration.WebTimeout = UserSettings.Get(Constants.WebTimeoutKey, ApplicationConfiguration.WebTimeout);
48+
ApplicationConfiguration.GitTimeout = UserSettings.Get(Constants.GitTimeoutKey, ApplicationConfiguration.GitTimeout);
4849
Platform.Initialize(ProcessManager, TaskManager);
4950
progress.OnProgress += progressReporter.UpdateProgress;
50-
UsageTracker = new UsageTracker(TaskManager, UserSettings, Environment, InstanceId.ToString());
51+
UsageTracker = new UsageTracker(TaskManager, GitClient, ProcessManager, UserSettings, Environment, InstanceId.ToString());
5152

5253
#if ENABLE_METRICS
5354
var metricsService = new MetricsService(ProcessManager,
@@ -191,7 +192,6 @@ public void SetupGit(GitInstaller.GitInstallationState state)
191192
if (Environment.RepositoryPath.IsInitialized)
192193
{
193194
ConfigureMergeSettings();
194-
CaptureRepoSize();
195195

196196
GitClient.LfsInstall()
197197
.Catch(e =>
@@ -300,37 +300,6 @@ private void ConfigureMergeSettings()
300300
}).RunSynchronously();
301301
}
302302

303-
private void CaptureRepoSize()
304-
{
305-
GitClient.CountObjects()
306-
.Finally((success, gitObjects) =>
307-
{
308-
if (success)
309-
{
310-
UsageTracker.UpdateRepoSize(gitObjects.kilobytes);
311-
}
312-
})
313-
.Start();
314-
315-
var gitLfsDataPath = Environment.RepositoryPath.Combine(".git", "lfs");
316-
if (gitLfsDataPath.Exists())
317-
{
318-
var diskUsageTask = Environment.IsWindows
319-
? (IProcessTask<int>)new WindowsDiskUsageTask(gitLfsDataPath, TaskManager.Token)
320-
: new LinuxDiskUsageTask(gitLfsDataPath, TaskManager.Token);
321-
322-
diskUsageTask
323-
.Configure(ProcessManager)
324-
.Finally((success, kilobytes) =>
325-
{
326-
if (success)
327-
{
328-
UsageTracker.UpdateLfsDiskUsage(kilobytes);
329-
}
330-
}).Start();
331-
}
332-
}
333-
334303
public void RestartRepository()
335304
{
336305
if (!Environment.RepositoryPath.IsInitialized)
@@ -346,8 +315,8 @@ public void RestartRepository()
346315
Logger.Trace($"Got a repository? {(Environment.Repository != null ? Environment.Repository.LocalPath : "null")}");
347316
}
348317

349-
protected abstract void InitializeUI();
350-
protected abstract void InitializationComplete();
318+
protected virtual void InitializeUI() {}
319+
protected virtual void InitializationComplete() {}
351320

352321
private bool disposed = false;
353322
protected virtual void Dispose(bool disposing)
@@ -356,6 +325,10 @@ protected virtual void Dispose(bool disposing)
356325
{
357326
if (disposed) return;
358327
disposed = true;
328+
if (ProcessManager != null)
329+
{
330+
ProcessManager.Stop();
331+
}
359332
if (TaskManager != null)
360333
{
361334
TaskManager.Dispose();

src/GitHub.Api/Git/GitClient.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public interface IGitClient
3838
ITask<List<GitLogEntry>> Log(BaseOutputListProcessor<GitLogEntry> processor = null);
3939
ITask<TheVersion> Version(IOutputProcessor<TheVersion> processor = null);
4040
ITask<TheVersion> LfsVersion(IOutputProcessor<TheVersion> processor = null);
41-
ITask<GitCountObjects> CountObjects(IOutputProcessor<GitCountObjects> processor = null);
41+
ITask<int> CountObjects(IOutputProcessor<int> processor = null);
4242
ITask<GitUser> SetConfigNameAndEmail(string username, string email);
4343
ITask<string> GetHead(IOutputProcessor<string> processor = null);
4444
}
@@ -100,7 +100,7 @@ public ITask<TheVersion> LfsVersion(IOutputProcessor<TheVersion> processor = nul
100100
.Configure(processManager);
101101
}
102102

103-
public ITask<GitCountObjects> CountObjects(IOutputProcessor<GitCountObjects> processor = null)
103+
public ITask<int> CountObjects(IOutputProcessor<int> processor = null)
104104
{
105105
return new GitCountObjectsTask(cancellationToken, processor)
106106
.Configure(processManager);
@@ -151,7 +151,7 @@ public ITask<GitUser> SetConfigNameAndEmail(string username, string email)
151151
public ITask<List<GitLock>> ListLocks(bool local, BaseOutputListProcessor<GitLock> processor = null)
152152
{
153153
return new GitListLocksTask(local, cancellationToken, processor)
154-
.Configure(processManager);
154+
.Configure(processManager, environment.GitLfsExecutablePath);
155155
}
156156

157157
public ITask<string> Pull(string remote, string branch, IOutputProcessor<string> processor = null)
@@ -301,14 +301,14 @@ public ITask<string> Lock(NPath file,
301301
IOutputProcessor<string> processor = null)
302302
{
303303
return new GitLockTask(file, cancellationToken, processor)
304-
.Configure(processManager);
304+
.Configure(processManager, environment.GitLfsExecutablePath);
305305
}
306306

307307
public ITask<string> Unlock(NPath file, bool force,
308308
IOutputProcessor<string> processor = null)
309309
{
310310
return new GitUnlockTask(file, force, cancellationToken, processor)
311-
.Configure(processManager);
311+
.Configure(processManager, environment.GitLfsExecutablePath);
312312
}
313313

314314
public ITask<string> GetHead(IOutputProcessor<string> processor = null)

src/GitHub.Api/Git/GitCountObjects.cs

Lines changed: 0 additions & 23 deletions
This file was deleted.

src/GitHub.Api/Git/Repository.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -188,9 +188,6 @@ public void Refresh(CacheType cacheType)
188188
{
189189
var cache = cacheContainer.GetCache(cacheType);
190190
cache.InvalidateData();
191-
192-
// Ensuring that the GitLock cache is kept up to date
193-
cacheContainer.GetCache(CacheType.GitLocks).ValidateData();
194191
}
195192

196193
private void CacheHasBeenInvalidated(CacheType cacheType)
@@ -309,7 +306,6 @@ private static GitBranch GetLocalGitBranch(string currentBranchName, ConfigBranc
309306
{
310307
var branchName = x.Name;
311308
var trackingName = x.IsTracking ? x.Remote.Value.Name + "/" + branchName : "[None]";
312-
var isActive = branchName == currentBranchName;
313309
return new GitBranch(branchName, trackingName);
314310
}
315311

@@ -504,4 +500,4 @@ public string Email
504500

505501
protected static ILogging Logger { get; } = LogHelper.GetLogger<User>();
506502
}
507-
}
503+
}

src/GitHub.Api/Git/RepositoryManager.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,11 @@ public ITask CommitFiles(List<string> files, string message, string body)
195195
public ITask Fetch(string remote)
196196
{
197197
var task = GitClient.Fetch(remote);
198+
task.OnEnd += (_, __, success, ___) =>
199+
{
200+
if (success)
201+
UpdateGitAheadBehindStatus().Start();
202+
};
198203
return HookupHandlers(task, false);
199204
}
200205

@@ -207,6 +212,11 @@ public ITask Pull(string remote, string branch)
207212
public ITask Push(string remote, string branch)
208213
{
209214
var task = GitClient.Push(remote, branch);
215+
task.OnEnd += (_, __, success, ___) =>
216+
{
217+
if (success)
218+
UpdateGitAheadBehindStatus().Start();
219+
};
210220
return HookupHandlers(task, false);
211221
}
212222

src/GitHub.Api/Git/Tasks/GitCountObjectsTask.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
namespace GitHub.Unity
44
{
5-
class GitCountObjectsTask : ProcessTask<GitCountObjects>
5+
class GitCountObjectsTask : ProcessTask<int>
66
{
77
private const string TaskName = "git count-objects";
88

9-
public GitCountObjectsTask(CancellationToken token, IOutputProcessor<GitCountObjects> processor = null)
9+
public GitCountObjectsTask(CancellationToken token, IOutputProcessor<int> processor = null)
1010
: base(token, processor ?? new GitCountObjectsProcessor())
1111
{
1212
Name = TaskName;
@@ -19,4 +19,4 @@ public override string ProcessArguments
1919
public override TaskAffinity Affinity { get { return TaskAffinity.Exclusive; } }
2020
public override string Message { get; set; } = "Counting git objects...";
2121
}
22-
}
22+
}

src/GitHub.Api/Git/Tasks/GitListLocksTask.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,19 @@ namespace GitHub.Unity
44
{
55
class GitListLocksTask : ProcessTaskWithListOutput<GitLock>
66
{
7+
private const string TaskName = "git lfs locks";
78
private readonly string args;
89

910
public GitListLocksTask(bool local,
1011
CancellationToken token, BaseOutputListProcessor<GitLock> processor = null)
1112
: base(token, processor ?? new LocksOutputProcessor())
1213
{
13-
args = "lfs locks --json";
14+
Name = TaskName;
15+
args = "locks --json";
1416
if (local)
1517
{
1618
args += " --local";
1719
}
18-
Name = args;
1920
}
2021

2122
public override string ProcessArguments => args;

src/GitHub.Api/Git/Tasks/GitLockTask.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public GitLockTask(string path,
1414
{
1515
Name = TaskName;
1616
Guard.ArgumentNotNullOrWhiteSpace(path, "path");
17-
arguments = String.Format("lfs lock \"{0}\"", path);
17+
arguments = String.Format("lock \"{0}\"", path);
1818
}
1919

2020
public override string ProcessArguments => arguments;

0 commit comments

Comments
 (0)