diff options
author | Ungureanu Marius <teromario@yahoo.com> | 2013-08-21 20:23:09 +0400 |
---|---|---|
committer | Ungureanu Marius <teromario@yahoo.com> | 2013-08-21 20:23:09 +0400 |
commit | 41d6f980cf53430df035314ca63fe8aa814b80be (patch) | |
tree | ae32626922d0d8a179c8122cdee854bfc1a61e24 /main/src | |
parent | ef2bcb46586b16d17c57d5356b7072d4ef1e5d0a (diff) | |
parent | 658a65aea6d79d0dd9b30ceec5a711bb8bba01d1 (diff) |
Merge pull request #381 from mono/mergecsproj
[Version Control] Resolve Conflicts command for broken projects/solutions.
Diffstat (limited to 'main/src')
9 files changed, 115 insertions, 13 deletions
diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion/MonoDevelop.VersionControl.Subversion/SubversionNodeExtension.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion/MonoDevelop.VersionControl.Subversion/SubversionNodeExtension.cs index 2fe6ae665c..b31938e789 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion/MonoDevelop.VersionControl.Subversion/SubversionNodeExtension.cs +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl.Subversion/MonoDevelop.VersionControl.Subversion/SubversionNodeExtension.cs @@ -72,20 +72,23 @@ namespace MonoDevelop.VersionControl.Subversion [CommandUpdateHandler (Commands.Resolve)]
protected void UpdateResolve (CommandInfo item) { - foreach (VersionControlItem vit in GetItems ()) { + foreach (VersionControlItem vit in GetItems (false)) { if (!(vit.Repository is SubversionRepository)) { item.Visible = false; return; } - if (!vit.IsDirectory) { - VersionInfo vi = vit.Repository.GetVersionInfo (vit.Path); - if (vi != null && (vi.Status & VersionStatus.Conflicted) == 0) { - item.Visible = false; - return; - } + if (vit.IsDirectory) { + item.Visible = false; + return; } - }
+ + VersionInfo vi = vit.Repository.GetVersionInfo (vit.Path); + if (vi != null && (vi.Status & VersionStatus.Conflicted) == 0) { + item.Visible = false; + return; + } + } }
}
} diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.Views/EditorCompareWidgetBase.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.Views/EditorCompareWidgetBase.cs index 42e827a26b..a3acb31b22 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.Views/EditorCompareWidgetBase.cs +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.Views/EditorCompareWidgetBase.cs @@ -446,7 +446,9 @@ namespace MonoDevelop.VersionControl.Views hscrollbar.Destroy (); } - children.ForEach (child => child.Child.Destroy ()); + foreach (var child in children.ToArray ()) { + child.Child.Destroy (); + } base.OnDestroyed (); } diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.Views/SubviewAttachmentHandler.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.Views/SubviewAttachmentHandler.cs index b311c05a05..917c7e8a34 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.Views/SubviewAttachmentHandler.cs +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.Views/SubviewAttachmentHandler.cs @@ -30,6 +30,7 @@ using Mono.Addins; using MonoDevelop.VersionControl; using MonoDevelop.Ide.Gui; using MonoDevelop.Core.LogReporting; +using MonoDevelop.Projects; namespace MonoDevelop.VersionControl.Views { @@ -44,10 +45,23 @@ namespace MonoDevelop.VersionControl.Views { var document = Ide.IdeApp.Workbench.ActiveDocument; try { - if (document == null || !document.IsFile || document.Project == null || document.Window.FindView<IDiffView> () >= 0) + if (document == null || !document.IsFile || document.Window.FindView<IDiffView> () >= 0) return; + + IWorkspaceObject project = document.Project; + if (project == null) { + // Fix for broken .csproj and .sln files not being seen as having a project. + foreach (var projItem in Ide.IdeApp.Workspace.GetAllSolutionItems<UnknownSolutionItem> ()) { + if (projItem.FileName == document.FileName) { + project = projItem; + } + } + + if (project == null) + return; + } - var repo = VersionControlService.GetRepository (document.Project); + var repo = VersionControlService.GetRepository (project); if (repo == null) return; @@ -55,7 +69,7 @@ namespace MonoDevelop.VersionControl.Views if (!versionInfo.IsVersioned) return; - var item = new VersionControlItem (repo, document.Project, document.FileName, false, null); + var item = new VersionControlItem (repo, project, document.FileName, false, null); var vcInfo = new VersionControlDocumentInfo (document.PrimaryView, item, item.Repository); TryAttachView <IDiffView> (document, vcInfo, DiffCommand.DiffViewHandlers); TryAttachView <IBlameView> (document, vcInfo, BlameCommand.BlameViewHandlers); diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.csproj b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.csproj index 5919e2a283..c4058cc3f7 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.csproj +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl.csproj @@ -236,6 +236,7 @@ <Compile Include="MonoDevelop.VersionControl\BlameCommand.cs" /> <Compile Include="MonoDevelop.VersionControl\VersionInfoCache.cs" /> <Compile Include="MonoDevelop.VersionControl\IgnoreCommand.cs" /> + <Compile Include="MonoDevelop.VersionControl\ResolveConflictsCommand.cs" /> </ItemGroup> <ItemGroup> <None Include="Makefile.am" /> diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/Commands.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/Commands.cs index a6f81f02a8..80aa37a43a 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/Commands.cs +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/Commands.cs @@ -26,7 +26,8 @@ namespace MonoDevelop.VersionControl HideAnnotations, CreatePatch, Ignore, - Unignore + Unignore, + ResolveConflicts } class SolutionVersionControlCommandHandler: CommandHandler diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/ResolveConflictsCommand.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/ResolveConflictsCommand.cs new file mode 100644 index 0000000000..c288504686 --- /dev/null +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/ResolveConflictsCommand.cs @@ -0,0 +1,52 @@ +//
+// ResolveConflictsCommands.cs
+//
+// Author:
+// Therzok <teromario@yahoo.com>
+//
+// Copyright (c) 2013 Therzok
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using MonoDevelop.Ide;
+using MonoDevelop.VersionControl.Views;
+using MonoDevelop.Ide.Gui;
+
+namespace MonoDevelop.VersionControl
+{
+ public class ResolveConflictsCommand
+ {
+ public static bool ResolveConflicts (VersionControlItemList list, bool test)
+ {
+ VersionStatus status = list [0].VersionInfo.Status;
+ bool conflicted = (status & VersionStatus.Conflicted) == VersionStatus.Conflicted;
+ if (test)
+ return conflicted;
+
+ foreach (var item in list) {
+ Document doc = IdeApp.Workbench.OpenDocument (item.Path, true);
+ foreach (var view in doc.Views) {
+ if (view.GetContent <MergeView> () != null)
+ view.Select ();
+ }
+ }
+ return true;
+ }
+ }
+}
+
diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlCommandHandler.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlCommandHandler.cs index ebf2a95537..90a1a020a5 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlCommandHandler.cs +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlCommandHandler.cs @@ -99,6 +99,11 @@ namespace MonoDevelop.VersionControl path = proj.FileName; isDir = false; pentry = proj; + } else if (!projRecurse && obj is UnknownSolutionItem) { + UnknownSolutionItem item = (UnknownSolutionItem)obj; + path = item.FileName; + isDir = false; + pentry = item; } else if (obj is IWorkspaceObject) { pentry = ((IWorkspaceObject)obj); path = pentry.BaseDirectory; diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlNodeExtension.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlNodeExtension.cs index 1c2bd2a11e..53bff837a2 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlNodeExtension.cs +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlNodeExtension.cs @@ -411,6 +411,23 @@ namespace MonoDevelop.VersionControl TestCommand(Commands.Unignore, item);
}
+ [CommandHandler (Commands.ResolveConflicts)]
+ protected void OnResolveConflicts ()
+ {
+ RunCommand (Commands.ResolveConflicts, false, false);
+ }
+
+ [CommandUpdateHandler (Commands.ResolveConflicts)]
+ protected void UpdateResolveConflicts (CommandInfo item)
+ {
+ if (!(CurrentNode.DataItem is UnknownSolutionItem)) {
+ item.Visible = false;
+ return;
+ }
+
+ TestCommand (Commands.ResolveConflicts, item, false);
+ }
+
private void TestCommand(Commands cmd, CommandInfo item, bool projRecurse = true)
{
TestResult res = RunCommand(cmd, true, projRecurse);
@@ -484,6 +501,9 @@ namespace MonoDevelop.VersionControl case Commands.Unignore:
res = UnignoreCommand.Unignore (items, test);
break;
+ case Commands.ResolveConflicts:
+ res = ResolveConflictsCommand.ResolveConflicts (items, test);
+ break;
}
}
catch (Exception ex) { diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/VersionControl.addin.xml b/main/src/addins/VersionControl/MonoDevelop.VersionControl/VersionControl.addin.xml index 7cd5d5b5f5..d0d84d596a 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/VersionControl.addin.xml +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/VersionControl.addin.xml @@ -194,6 +194,9 @@ <Command id = "MonoDevelop.VersionControl.Commands.Unignore" _label = "Remove from ignore list" description = "Add items to version control ignore list"/> + <Command id = "MonoDevelop.VersionControl.Commands.ResolveConflicts" + _label = "Resolve Conflicts" + description = "Resolve conflicts on the project file."/> <Command id = "MonoDevelop.VersionControl.Views.BlameCommands.CopyRevision" _label = "_Copy revision"/> @@ -246,6 +249,7 @@ <Extension path = "/MonoDevelop/Ide/ContextMenu/ProjectPad"> <Condition id="ItemType" value="IFileItem|IFolderItem"> <ItemSet id = "VersionControl" _label = "_Version Control" insertafter = "Tools"> + <CommandItem id = "MonoDevelop.VersionControl.Commands.ResolveConflicts"/> <Condition id="ItemType" value="Project|WorkspaceItem"> <CommandItem id = "MonoDevelop.VersionControl.Commands.Publish"/> </Condition> |