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

Commit 2942e24

Browse files
StanleyGoldmanshana
authored andcommitted
Doing delete with .Net is a whole lot faster
1 parent 5a478a1 commit 2942e24

File tree

5 files changed

+16
-46
lines changed

5 files changed

+16
-46
lines changed

src/GitHub.Api/Application/ApplicationManagerBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ public void RestartRepository()
128128
{
129129
if (Environment.RepositoryPath != null)
130130
{
131-
repositoryManager = Unity.RepositoryManager.CreateInstance(Platform, TaskManager, GitClient, ProcessManager, Environment.RepositoryPath);
131+
repositoryManager = Unity.RepositoryManager.CreateInstance(Platform, TaskManager, GitClient, ProcessManager, Environment.RepositoryPath, Environment.FileSystem);
132132
repositoryManager.Initialize();
133133
Environment.Repository.Initialize(repositoryManager);
134134
repositoryManager.Start();

src/GitHub.Api/Git/RepositoryManager.cs

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ class RepositoryManager : IRepositoryManager
100100
private readonly IGitClient gitClient;
101101
private readonly IProcessManager processManager;
102102
private readonly IRepositoryPathConfiguration repositoryPaths;
103+
private readonly IFileSystem fileSystem;
103104
private readonly IRepositoryWatcher watcher;
104105

105106
private bool isBusy;
@@ -116,9 +117,11 @@ class RepositoryManager : IRepositoryManager
116117
public RepositoryManager(IGitConfig gitConfig,
117118
IRepositoryWatcher repositoryWatcher, IGitClient gitClient,
118119
IProcessManager processManager,
119-
IRepositoryPathConfiguration repositoryPaths)
120+
IRepositoryPathConfiguration repositoryPaths,
121+
IFileSystem fileSystem)
120122
{
121123
this.repositoryPaths = repositoryPaths;
124+
this.fileSystem = fileSystem;
122125
this.gitClient = gitClient;
123126
this.processManager = processManager;
124127
this.watcher = repositoryWatcher;
@@ -127,7 +130,7 @@ public RepositoryManager(IGitConfig gitConfig,
127130
SetupWatcher();
128131
}
129132

130-
public static RepositoryManager CreateInstance(IPlatform platform, ITaskManager taskManager, IGitClient gitClient, IProcessManager processManager, NPath repositoryRoot)
133+
public static RepositoryManager CreateInstance(IPlatform platform, ITaskManager taskManager, IGitClient gitClient, IProcessManager processManager, NPath repositoryRoot, IFileSystem fileSystem)
131134
{
132135
var repositoryPathConfiguration = new RepositoryPathConfiguration(repositoryRoot);
133136
string filePath = repositoryPathConfiguration.DotGitConfig;
@@ -136,7 +139,7 @@ public static RepositoryManager CreateInstance(IPlatform platform, ITaskManager
136139
var repositoryWatcher = new RepositoryWatcher(platform, repositoryPathConfiguration, taskManager.Token);
137140

138141
return new RepositoryManager(gitConfig, repositoryWatcher,
139-
gitClient, processManager, repositoryPathConfiguration);
142+
gitClient, processManager, repositoryPathConfiguration, fileSystem);
140143
}
141144

142145
public void Initialize()
@@ -298,17 +301,16 @@ public ITask CheckoutFiles(List<string> files)
298301

299302
public ITask DeleteFiles(List<string> list)
300303
{
301-
ITask<List<string>> task = new DeleteFilesExecTask(list.ToArray(), CancellationToken.None)
302-
.Configure(processManager);
303-
304-
task = HookupHandlers(task, true, true);
305-
306-
var @finally = task.Finally((b, exception, arg3) => {
307-
Logger.Trace("Delete Files success:{0} output: {1}", b, arg3 != null ? string.Join(",", arg3.ToArray()) : "[NULL]");
304+
var delete = new ActionTask(CancellationToken.None, () => {
305+
for (var index = 0; index < list.Count; index++)
306+
{
307+
fileSystem.FileDelete(list[index]);
308+
}
308309
});
309310

310-
return @finally
311-
.Start();
311+
delete.OnStart += t => IsBusy = true;
312+
313+
return delete.Finally(() => IsBusy = false);
312314
}
313315

314316
public void UpdateGitAheadBehindStatus()

src/GitHub.Api/GitHub.Api.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,6 @@
147147
<Compile Include="Tasks\TaskCanceledExceptions.cs" />
148148
<Compile Include="Tasks\TaskExtensions.cs" />
149149
<Compile Include="Tasks\TaskManager.cs" />
150-
<Compile Include="Platform\DeleteFilesExecTask.cs" />
151150
<Compile Include="Platform\FindExecTask.cs" />
152151
<Compile Include="Helpers\Progress.cs" />
153152
<Compile Include="Metrics\IMetricsService.cs" />

src/GitHub.Api/Platform/DeleteFilesExecTask.cs

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

src/tests/IntegrationTests/BaseGitEnvironmentTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ protected IEnvironment Initialize(NPath repoPath, NPath environmentPath = null,
1414
{
1515
InitializePlatform(repoPath, environmentPath, enableEnvironmentTrace);
1616

17-
var repositoryManager = GitHub.Unity.RepositoryManager.CreateInstance(Platform, TaskManager, GitClient, ProcessManager, repoPath);
17+
var repositoryManager = GitHub.Unity.RepositoryManager.CreateInstance(Platform, TaskManager, GitClient, ProcessManager, repoPath, Environment.FileSystem);
1818
onRepositoryManagerCreated?.Invoke(repositoryManager);
1919

2020
RepositoryManager = repositoryManager;

0 commit comments

Comments
 (0)