diff options
author | Javier Suárez Ruiz <javiersuarezruiz@hotmail.com> | 2019-02-19 10:07:20 +0300 |
---|---|---|
committer | Vsevolod Kukol <sevoku@microsoft.com> | 2019-02-20 21:51:26 +0300 |
commit | a56329b0234dc94a1907877a0f56715e9a78a28c (patch) | |
tree | 892c3ba3d646bbc46b2f0efa387f1e6bc52e5f6f | |
parent | 6ccfe24063dbeeaae1aa3ea79a78070e04400547 (diff) |
[Git] Clean up repository after cancelled publishing
Fixes gh #7175
2 files changed, 24 insertions, 11 deletions
diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Git/MonoDevelop.VersionControl.Git/GitRepository.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Git/MonoDevelop.VersionControl.Git/GitRepository.cs index 77a2f93dea..6ec66d3095 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Git/MonoDevelop.VersionControl.Git/GitRepository.cs +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Git/MonoDevelop.VersionControl.Git/GitRepository.cs @@ -572,20 +572,33 @@ namespace MonoDevelop.VersionControl.Git RootRepository.Branches.Update (RootRepository.Branches ["master"], branch => branch.TrackedBranch = "refs/remotes/origin/master"); - RetryUntilSuccess (monitor, credType => RootRepository.Network.Push (RootRepository.Head, new PushOptions { - OnPushStatusError = delegate (PushStatusError e) { - RootRepository.Dispose (); - RootRepository = null; - if (RootPath.Combine (".git").IsDirectory) - Directory.Delete (RootPath.Combine (".git"), true); - throw new VersionControlException (e.Message); - }, - CredentialsProvider = (url, userFromUrl, types) => GitCredentials.TryGet (url, userFromUrl, types, credType) - })); + RetryUntilSuccess (monitor, credType => { + + try { + RootRepository.Network.Push (RootRepository.Head, new PushOptions { + OnPushStatusError = delegate (PushStatusError e) { + throw new VersionControlException (e.Message); + }, + CredentialsProvider = (url, userFromUrl, types) => GitCredentials.TryGet (url, userFromUrl, types, credType) + }); + } catch(VersionControlException vcex) { + LoggingService.LogError ("Failed to publish to the repository", vcex); + DeleteGitFolder (); + throw; + } + }); return this; } + void DeleteGitFolder() + { + RootRepository.Dispose (); + RootRepository = null; + if (RootPath.Combine (".git").IsDirectory) + Directory.Delete (RootPath.Combine (".git"), true); + } + protected override void OnUpdate (FilePath[] localPaths, bool recurse, ProgressMonitor monitor) { // TODO: Make it work differently for submodules. diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/Repository.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/Repository.cs index f5b4c4b020..db2def296a 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/Repository.cs +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/Repository.cs @@ -519,7 +519,7 @@ namespace MonoDevelop.VersionControl // repository directory (must use absolute local paths). public Repository Publish (string serverPath, FilePath localPath, FilePath[] files, string message, ProgressMonitor monitor) { - var metadata = new PublishMetadata (VersionControlSystem) { PathsCount = files.Length, SubFolder = localPath.IsChildPathOf (RootPath) }; + var metadata = new PublishMetadata (VersionControlSystem) { PathsCount = files.Length, SubFolder = localPath.IsChildPathOf(RootPath) }; using (var tracker = Instrumentation.PublishCounter.BeginTiming (metadata, monitor.CancellationToken)) { try { var res = OnPublish (serverPath, localPath, files, message, monitor); |