diff --git a/src/Tgstation.Server.Host/Components/Repository/IRepositoryManager.cs b/src/Tgstation.Server.Host/Components/Repository/IRepositoryManager.cs index 92b5ad0edd..1279f7285a 100644 --- a/src/Tgstation.Server.Host/Components/Repository/IRepositoryManager.cs +++ b/src/Tgstation.Server.Host/Components/Repository/IRepositoryManager.cs @@ -23,7 +23,7 @@ namespace Tgstation.Server.Host.Components.Repository /// The branch to clone /// The access string to clone from /// The for the operation - /// The newly cloned + /// The newly cloned , if one already exists Task CloneRepository(Uri url, string initialBranch, string accessString, CancellationToken cancellationToken); /// diff --git a/src/Tgstation.Server.Host/Components/Repository/RepositoryManager.cs b/src/Tgstation.Server.Host/Components/Repository/RepositoryManager.cs index 25cd954457..3187d6dfe2 100644 --- a/src/Tgstation.Server.Host/Components/Repository/RepositoryManager.cs +++ b/src/Tgstation.Server.Host/Components/Repository/RepositoryManager.cs @@ -55,8 +55,6 @@ namespace Tgstation.Server.Host.Components.Repository if (!await ioManager.DirectoryExists(".", cancellationToken).ConfigureAwait(false)) try { - await DeleteRepository(cancellationToken).ConfigureAwait(false); - await Task.Factory.StartNew(() => { string path = null; @@ -85,6 +83,8 @@ namespace Tgstation.Server.Host.Components.Repository catch { } throw; } + else + return null; return await LoadRepository(cancellationToken).ConfigureAwait(false); } @@ -102,7 +102,10 @@ namespace Tgstation.Server.Host.Components.Repository catch (RepositoryNotFoundException) { } }, cancellationToken, TaskCreationOptions.LongRunning, TaskScheduler.Current).ConfigureAwait(false); if (repo == null) + { + semaphore.Release(); return null; + } var localSemaphore = semaphore; return new Repository(repo, ioManager, eventConsumer, () => { diff --git a/src/Tgstation.Server.Host/Controllers/RepositoryController.cs b/src/Tgstation.Server.Host/Controllers/RepositoryController.cs index 97afc62c66..9a703fb956 100644 --- a/src/Tgstation.Server.Host/Controllers/RepositoryController.cs +++ b/src/Tgstation.Server.Host/Controllers/RepositoryController.cs @@ -141,13 +141,13 @@ namespace Tgstation.Server.Host.Controllers using (var repo = await repoManager.LoadRepository(cancellationToken).ConfigureAwait(false)) { - if (repo == null) + if (repo != null) //clone conflict return Conflict(); var job = new Models.Job { - Description = String.Format(CultureInfo.InvariantCulture, "Clone branch {1} of repository {0}", origin, cloneBranch), + Description = String.Format(CultureInfo.InvariantCulture, "Clone branch {1} of repository {0}", origin, cloneBranch ?? "master"), StartedBy = AuthenticationContext.User, CancelRightsType = RightsType.Repository, CancelRight = (int)RepositoryRights.CancelClone, @@ -219,7 +219,7 @@ namespace Tgstation.Server.Host.Controllers using (var repo = await instanceManager.GetInstance(Instance).RepositoryManager.LoadRepository(cancellationToken).ConfigureAwait(false)) { - if (await PopulateApi(api, repo, currentModel.LastOriginCommitSha, null, cancellationToken).ConfigureAwait(false)) + if (repo != null && await PopulateApi(api, repo, currentModel.LastOriginCommitSha, null, cancellationToken).ConfigureAwait(false)) await DatabaseContext.Save(cancellationToken).ConfigureAwait(false); return Json(api); } @@ -283,6 +283,8 @@ namespace Tgstation.Server.Host.Controllers using (var repo = await instanceManager.GetInstance(Instance).RepositoryManager.LoadRepository(cancellationToken).ConfigureAwait(false)) { + if (repo == null) + return StatusCode((int)HttpStatusCode.Gone); var startSha = repo.Head; if (newTestMerges && !repo.IsGitHubRepository)