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:
authorDavid Karlaš <david.karlas@microsoft.com>2018-02-19 14:25:06 +0300
committerDavid Karlaš <david.karlas@microsoft.com>2018-02-19 14:25:06 +0300
commitdbdaab50d6180ff550a26be76464a594844cdc06 (patch)
treedc0d1bb1901ea00737155433c2f79cc996a8b7c6 /main/src/addins/VersionControl
parent1a25c528482c4da7efad946ec671abe198d3f1d4 (diff)
parent4b8cf8c8e191ca65142d0b2afbc7131116818f65 (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')
-rw-r--r--main/src/addins/VersionControl/Makefile.am2
-rw-r--r--main/src/addins/VersionControl/MonoDevelop.VersionControl.Git.Tests/BaseGitRepositoryTests.cs22
-rw-r--r--main/src/addins/VersionControl/MonoDevelop.VersionControl.Git/MonoDevelop.VersionControl.Git/GitRepository.cs69
-rw-r--r--main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/CheckoutCommand.cs7
-rw-r--r--main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlTask.cs4
-rw-r--r--main/src/addins/VersionControl/Subversion.Win32.Tests/Makefile.am1
-rw-r--r--main/src/addins/VersionControl/Subversion.Win32/Makefile.am1
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