diff options
author | David Karlaš <david.karlas@microsoft.com> | 2018-02-19 14:25:06 +0300 |
---|---|---|
committer | David Karlaš <david.karlas@microsoft.com> | 2018-02-19 14:25:06 +0300 |
commit | dbdaab50d6180ff550a26be76464a594844cdc06 (patch) | |
tree | dc0d1bb1901ea00737155433c2f79cc996a8b7c6 /main/src/addins/VersionControl | |
parent | 1a25c528482c4da7efad946ec671abe198d3f1d4 (diff) | |
parent | 4b8cf8c8e191ca65142d0b2afbc7131116818f65 (diff) |
Merge master into editorFeatures
# Conflicts:
# main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeCompletion/CompletionController.cs
# version-checks
Diffstat (limited to 'main/src/addins/VersionControl')
7 files changed, 66 insertions, 40 deletions
diff --git a/main/src/addins/VersionControl/Makefile.am b/main/src/addins/VersionControl/Makefile.am index 19a1809c7a..9b8e787dbb 100644 --- a/main/src/addins/VersionControl/Makefile.am +++ b/main/src/addins/VersionControl/Makefile.am @@ -5,4 +5,6 @@ SUBDIRS = \ MonoDevelop.VersionControl.Subversion.Unix \ MonoDevelop.VersionControl.Git \ MonoDevelop.VersionControl.Subversion.Tests \ + Subversion.Win32 \ + Subversion.Win32.Tests \ MonoDevelop.VersionControl.Git.Tests diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Git.Tests/BaseGitRepositoryTests.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Git.Tests/BaseGitRepositoryTests.cs index ff1f80b733..1c3f6add56 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Git.Tests/BaseGitRepositoryTests.cs +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Git.Tests/BaseGitRepositoryTests.cs @@ -532,5 +532,27 @@ namespace MonoDevelop.VersionControl.Git.Tests Assert.AreEqual (string.Format ("Commit #{0}\n", i), history [i].Message); } } + + // If this starts passing, either the git backend was fixed or the repository has changed + // a submodule whose loose object cannot be found. + [Test] + public void TestGitRecursiveCloneFailsAndDoesntCrash () + { + var toCheckout = new GitRepository { + Url = "git://github.com/xamarin/xamarin-android.git", + }; + + var directory = FileService.CreateTempDirectory (); + try { + toCheckout.Checkout (directory, true, new ProgressMonitor ()); + } catch (VersionControlException e) { + Assert.That (e.InnerException, Is.InstanceOf<LibGit2Sharp.NotFoundException> ()); + return; + } finally { + Directory.Delete (directory, true); + } + + Assert.Fail ("Repository is not reporting loose object cannot be found. Consider removing test."); + } } } 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 0209b93c1d..5f2783bfc8 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 @@ -171,7 +171,7 @@ namespace MonoDevelop.VersionControl.Git { if (progress == 0 && tp.ReceivedObjects == 0) { progress = 1; - monitor.BeginTask (GettextCatalog.GetString ("Receiving and indexing objects"), 2 * tp.TotalObjects); + monitor.Log.WriteLine (GettextCatalog.GetString ("Receiving and indexing objects"), 2 * tp.TotalObjects); throttleWatch.Restart (); } @@ -184,7 +184,6 @@ namespace MonoDevelop.VersionControl.Git } if (tp.IndexedObjects >= tp.TotalObjects) { - monitor.EndTask (); throttleWatch.Stop (); } @@ -195,7 +194,7 @@ namespace MonoDevelop.VersionControl.Git { if (progress == 0 && completedSteps == 0) { progress = 1; - monitor.BeginTask (GettextCatalog.GetString ("Checking out files"), 2 * totalSteps); + monitor.Log.WriteLine (GettextCatalog.GetString ("Checking out files"), 2 * totalSteps); throttleWatch.Restart (); } @@ -207,7 +206,6 @@ namespace MonoDevelop.VersionControl.Git } if (completedSteps >= totalSteps) { - monitor.EndTask (); throttleWatch.Stop (); } } @@ -667,7 +665,7 @@ namespace MonoDevelop.VersionControl.Git else message = e.Message; - throw new VersionControlException (message); + throw new VersionControlException (message, e); } } while (retry); } @@ -931,41 +929,43 @@ namespace MonoDevelop.VersionControl.Git int transferProgress = 0; int checkoutProgress = 0; - monitor.BeginTask ("Cloning...", 2); + try { + monitor.BeginTask ("Cloning...", 2); - RetryUntilSuccess (monitor, credType => { - RootPath = LibGit2Sharp.Repository.Clone (Url, targetLocalPath, new CloneOptions { - CredentialsProvider = (url, userFromUrl, types) => { - transferProgress = checkoutProgress = 0; - return GitCredentials.TryGet (url, userFromUrl, types, credType); - }, - RepositoryOperationStarting = ctx => { - Runtime.RunInMainThread (() => { - monitor.Log.WriteLine ("Checking out repository at '{0}'", ctx.RepositoryPath); - }); - return true; - }, - OnTransferProgress = (tp) => OnTransferProgress (tp, monitor, ref transferProgress), - OnCheckoutProgress = (path, completedSteps, totalSteps) => { - OnCheckoutProgress (completedSteps, totalSteps, monitor, ref checkoutProgress); - Runtime.RunInMainThread (() => { - monitor.Log.WriteLine ("Checking out file '{0}'", path); - }); - }, + RetryUntilSuccess (monitor, credType => { + RootPath = LibGit2Sharp.Repository.Clone (Url, targetLocalPath, new CloneOptions { + CredentialsProvider = (url, userFromUrl, types) => { + transferProgress = checkoutProgress = 0; + return GitCredentials.TryGet (url, userFromUrl, types, credType); + }, + RepositoryOperationStarting = ctx => { + Runtime.RunInMainThread (() => { + monitor.Log.WriteLine ("Checking out repository at '{0}'", ctx.RepositoryPath); + }); + return true; + }, + OnTransferProgress = (tp) => OnTransferProgress (tp, monitor, ref transferProgress), + OnCheckoutProgress = (path, completedSteps, totalSteps) => { + OnCheckoutProgress (completedSteps, totalSteps, monitor, ref checkoutProgress); + Runtime.RunInMainThread (() => { + monitor.Log.WriteLine ("Checking out file '{0}'", path); + }); + }, + }); }); - }); - if (monitor.CancellationToken.IsCancellationRequested || RootPath.IsNull) - return; + if (monitor.CancellationToken.IsCancellationRequested || RootPath.IsNull) + return; - monitor.Step (1); - - RootPath = RootPath.ParentDirectory; - RootRepository = new LibGit2Sharp.Repository (RootPath); + monitor.Step (1); - RecursivelyCloneSubmodules (RootPath, monitor); + RootPath = RootPath.ParentDirectory; + RootRepository = new LibGit2Sharp.Repository (RootPath); - monitor.EndTask (); + RecursivelyCloneSubmodules (RootPath, monitor); + } finally { + monitor.EndTask (); + } } static void RecursivelyCloneSubmodules (string path, ProgressMonitor monitor) @@ -1006,6 +1006,7 @@ namespace MonoDevelop.VersionControl.Git submodules.Add (Path.Combine (repo.Info.WorkingDirectory, sm.Path)); } + monitor.EndTask (); }); } diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/CheckoutCommand.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/CheckoutCommand.cs index 33763dd9de..b50acf324a 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/CheckoutCommand.cs +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/CheckoutCommand.cs @@ -66,12 +66,7 @@ namespace MonoDevelop.VersionControl FileService.CreateDirectory (path);
}
- try {
- vc.Checkout (path, null, true, Monitor);
- } catch (VersionControlException e) {
- Monitor.ReportError (e.Message, null);
- return;
- }
+ vc.Checkout (path, null, true, Monitor);
if (Monitor.CancellationToken.IsCancellationRequested) {
Monitor.ReportSuccess (GettextCatalog.GetString ("Checkout operation cancelled"));
diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlTask.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlTask.cs index 295dee069d..96727e2422 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlTask.cs +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlTask.cs @@ -54,6 +54,10 @@ namespace MonoDevelop.VersionControl string msg = GettextCatalog.GetString ("The operation could not be completed because a shared library is missing: "); tracker.ReportError (msg + e.Message, null); LoggingService.LogError ("Version Control command failed: ", e); + } catch (VersionControlException e) { + string msg = GettextCatalog.GetString ("Version control operation failed: "); + tracker.ReportError (msg + e.Message, e); + LoggingService.LogError ("Version Control command failed: ", e); } catch (Exception e) { string msg = GettextCatalog.GetString ("Version control operation failed: "); tracker.ReportError (msg, e); diff --git a/main/src/addins/VersionControl/Subversion.Win32.Tests/Makefile.am b/main/src/addins/VersionControl/Subversion.Win32.Tests/Makefile.am new file mode 100644 index 0000000000..c9cc87438f --- /dev/null +++ b/main/src/addins/VersionControl/Subversion.Win32.Tests/Makefile.am @@ -0,0 +1 @@ +include $(top_srcdir)/xbuild.include diff --git a/main/src/addins/VersionControl/Subversion.Win32/Makefile.am b/main/src/addins/VersionControl/Subversion.Win32/Makefile.am new file mode 100644 index 0000000000..c9cc87438f --- /dev/null +++ b/main/src/addins/VersionControl/Subversion.Win32/Makefile.am @@ -0,0 +1 @@ +include $(top_srcdir)/xbuild.include |