Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJavier Suárez Ruiz <javiersuarezruiz@hotmail.com>2019-02-19 10:07:20 +0300
committerVsevolod Kukol <sevoku@microsoft.com>2019-02-20 21:51:26 +0300
commita56329b0234dc94a1907877a0f56715e9a78a28c (patch)
tree892c3ba3d646bbc46b2f0efa387f1e6bc52e5f6f
parent6ccfe24063dbeeaae1aa3ea79a78070e04400547 (diff)
[Git] Clean up repository after cancelled publishing
Fixes gh #7175
-rw-r--r--main/src/addins/VersionControl/MonoDevelop.VersionControl.Git/MonoDevelop.VersionControl.Git/GitRepository.cs33
-rw-r--r--main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/Repository.cs2
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);