From aa22aacf2aa7b101e424cabb4b016f36719645c7 Mon Sep 17 00:00:00 2001 From: Ruben Willems Date: Fri, 20 Apr 2018 10:53:29 +0200 Subject: [PATCH 01/18] 1) foresee TeamChangesetProvider : get all not yet merged changesets. 2) refactored IChangesetProvider : the username is only needed for MyChangesetProvider --> username is passed via constructor --- .gitignore | 2 + src/AutoMerge.Tests/AutoMerge.Tests.csproj | 6 ++- src/AutoMerge/AutoMerge.csproj | 3 +- .../ChangesetByIdChangesetProvider.cs | 6 +-- .../RecentChangesets/ChangesetProviderBase.cs | 8 ++-- .../RecentChangesets/IChangesetProvider.cs | 8 ++-- .../MyChangesetChangesetProvider.cs | 12 +++--- .../RecentChangesetsViewModel.cs | 12 +++--- .../TeamChangesetChangesetProvider.cs | 43 +++++++++++++++++++ src/AutoMerge/Resources.Designer.cs | 2 +- src/AutoMerge/Services/ChangesetService.cs | 22 +++++++++- 11 files changed, 98 insertions(+), 26 deletions(-) create mode 100644 src/AutoMerge/RecentChangesets/TeamChangesetChangesetProvider.cs diff --git a/.gitignore b/.gitignore index a3a8ec3..e8fcf3a 100644 --- a/.gitignore +++ b/.gitignore @@ -106,3 +106,5 @@ $RECYCLE.BIN/ # ide temp *.sln.ide/ +/.vs +/src/.vs/AutoMerge/v15/Server/sqlite3 diff --git a/src/AutoMerge.Tests/AutoMerge.Tests.csproj b/src/AutoMerge.Tests/AutoMerge.Tests.csproj index 8869404..b898e53 100644 --- a/src/AutoMerge.Tests/AutoMerge.Tests.csproj +++ b/src/AutoMerge.Tests/AutoMerge.Tests.csproj @@ -11,9 +11,10 @@ AutoMerge.Tests AutoMerge.Tests v4.5 - v4.6.2 + v4.6.1 512 ea07ad34 + true @@ -70,6 +71,9 @@ AutoMerge + + + diff --git a/src/AutoMerge/AutoMerge.csproj b/src/AutoMerge/AutoMerge.csproj index af59e48..7d3af36 100644 --- a/src/AutoMerge/AutoMerge.csproj +++ b/src/AutoMerge/AutoMerge.csproj @@ -23,7 +23,7 @@ True Key.snk v4.5 - v4.6.2 + v4.6.1 true @@ -321,6 +321,7 @@ + True True diff --git a/src/AutoMerge/RecentChangesets/ChangesetByIdChangesetProvider.cs b/src/AutoMerge/RecentChangesets/ChangesetByIdChangesetProvider.cs index e8d65f2..2344919 100644 --- a/src/AutoMerge/RecentChangesets/ChangesetByIdChangesetProvider.cs +++ b/src/AutoMerge/RecentChangesets/ChangesetByIdChangesetProvider.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; @@ -17,7 +17,7 @@ public ChangesetByIdChangesetProvider(IServiceProvider serviceProvider, IEnumera _changesetIds = changesetIds; } - protected override List GetChangesetsInternal(string userLogin) + protected override List GetChangesetsInternal() { var changesets = new List(); var changesetService = GetChangesetService(); @@ -33,4 +33,4 @@ protected override List GetChangesetsInternal(string userLog return changesets; } } -} \ No newline at end of file +} diff --git a/src/AutoMerge/RecentChangesets/ChangesetProviderBase.cs b/src/AutoMerge/RecentChangesets/ChangesetProviderBase.cs index 17627e5..0940f82 100644 --- a/src/AutoMerge/RecentChangesets/ChangesetProviderBase.cs +++ b/src/AutoMerge/RecentChangesets/ChangesetProviderBase.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -17,12 +17,12 @@ protected ChangesetProviderBase(IServiceProvider serviceProvider) _changesetService = new Lazy(InitChangesetService); } - public Task> GetChangesets(string userLogin) + public Task> GetChangesets() { - return Task.Run(() => GetChangesetsInternal(userLogin)); + return Task.Run(() => GetChangesetsInternal()); } - protected abstract List GetChangesetsInternal(string userLogin); + protected abstract List GetChangesetsInternal(); protected ChangesetViewModel ToChangesetViewModel(Changeset tfsChangeset, ChangesetService changesetService) { diff --git a/src/AutoMerge/RecentChangesets/IChangesetProvider.cs b/src/AutoMerge/RecentChangesets/IChangesetProvider.cs index e140326..e41a9c5 100644 --- a/src/AutoMerge/RecentChangesets/IChangesetProvider.cs +++ b/src/AutoMerge/RecentChangesets/IChangesetProvider.cs @@ -1,10 +1,10 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Threading.Tasks; namespace AutoMerge { public interface IChangesetProvider { - Task> GetChangesets(string userLogin); - } -} \ No newline at end of file + Task> GetChangesets(); + } +} diff --git a/src/AutoMerge/RecentChangesets/MyChangesetChangesetProvider.cs b/src/AutoMerge/RecentChangesets/MyChangesetChangesetProvider.cs index 733d923..4fd2e0a 100644 --- a/src/AutoMerge/RecentChangesets/MyChangesetChangesetProvider.cs +++ b/src/AutoMerge/RecentChangesets/MyChangesetChangesetProvider.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; @@ -7,25 +7,27 @@ namespace AutoMerge public class MyChangesetChangesetProvider : ChangesetProviderBase { private readonly int _maxChangesetCount; + private readonly string _userLogin; - public MyChangesetChangesetProvider(IServiceProvider serviceProvider, int maxChangesetCount) + public MyChangesetChangesetProvider(IServiceProvider serviceProvider, int maxChangesetCount, string userLogin) : base(serviceProvider) { _maxChangesetCount = maxChangesetCount; + _userLogin = userLogin; } - protected override List GetChangesetsInternal(string userLogin) + protected override List GetChangesetsInternal() { var changesets = new List(); - if (!string.IsNullOrEmpty(userLogin)) + if (!string.IsNullOrEmpty(_userLogin)) { var changesetService = GetChangesetService(); if (changesetService != null) { var projectName = GetProjectName(); - var tfsChangesets = changesetService.GetUserChangesets(projectName, userLogin, _maxChangesetCount); + var tfsChangesets = changesetService.GetUserChangesets(projectName, _userLogin, _maxChangesetCount); changesets = tfsChangesets .Select(tfsChangeset => ToChangesetViewModel(tfsChangeset, changesetService)) .ToList(); diff --git a/src/AutoMerge/RecentChangesets/RecentChangesetsViewModel.cs b/src/AutoMerge/RecentChangesets/RecentChangesetsViewModel.cs index c5c5567..99b8c77 100644 --- a/src/AutoMerge/RecentChangesets/RecentChangesetsViewModel.cs +++ b/src/AutoMerge/RecentChangesets/RecentChangesetsViewModel.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Collections.ObjectModel; using AutoMerge.Events; @@ -137,11 +137,13 @@ protected override async Task RefreshAsync() { Changesets.Clear(); - var changesetProvider = new MyChangesetChangesetProvider(ServiceProvider, Settings.Instance.ChangesetCount); - var userLogin = VersionControlNavigationHelper.GetAuthorizedUser(ServiceProvider); + //var userLogin = VersionControlNavigationHelper.GetAuthorizedUser(ServiceProvider); + //var changesetProvider = new MyChangesetChangesetProvider(ServiceProvider, Settings.Instance.ChangesetCount, userLogin); + + var changesetProvider = new TeamChangesetChangesetProvider(ServiceProvider, "/Branches/B01", Settings.Instance.ChangesetCount); Logger.Info("Getting changesets ..."); - var changesets = await changesetProvider.GetChangesets(userLogin); + var changesets = await changesetProvider.GetChangesets(); Logger.Info("Getting changesets end"); Changesets = new ObservableCollection(changesets); @@ -211,7 +213,7 @@ private async void AddChangesetByIdExecute() if (changesetIds.Count > 0) { var changesetProvider = new ChangesetByIdChangesetProvider(ServiceProvider, changesetIds); - var changesets = await changesetProvider.GetChangesets(null); + var changesets = await changesetProvider.GetChangesets(); if (changesets.Count > 0) { diff --git a/src/AutoMerge/RecentChangesets/TeamChangesetChangesetProvider.cs b/src/AutoMerge/RecentChangesets/TeamChangesetChangesetProvider.cs new file mode 100644 index 0000000..342e846 --- /dev/null +++ b/src/AutoMerge/RecentChangesets/TeamChangesetChangesetProvider.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AutoMerge +{ + public class TeamChangesetChangesetProvider : ChangesetProviderBase + { + private readonly int _maxChangesetCount; + private readonly string _branchLocation; + + public TeamChangesetChangesetProvider(IServiceProvider serviceProvider, string branchLocation, int maxChangesetCount) : base(serviceProvider) + { + _maxChangesetCount = maxChangesetCount; + _branchLocation = branchLocation; + } + + protected override List GetChangesetsInternal() + { + var changesets = new List(); + + var changesetService = GetChangesetService(); + + if (changesetService != null) + { + var projectName = GetProjectName(); + var tfsChangesets = changesetService.GetMergeCandidates("$/Test/Branches/B01", "$/Test/Main"); + + //var tfsChangesets = changesetService.GetTeamChangesets(projectName, _branchLocation, _maxChangesetCount); + + changesets = tfsChangesets + .Select(tfsChangeset => ToChangesetViewModel(tfsChangeset, changesetService)) + .ToList(); + + } + + return changesets; + } + + } +} diff --git a/src/AutoMerge/Resources.Designer.cs b/src/AutoMerge/Resources.Designer.cs index c2905fa..6a1fc89 100644 --- a/src/AutoMerge/Resources.Designer.cs +++ b/src/AutoMerge/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace AutoMerge { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { diff --git a/src/AutoMerge/Services/ChangesetService.cs b/src/AutoMerge/Services/ChangesetService.cs index 612c2a7..92a5c26 100644 --- a/src/AutoMerge/Services/ChangesetService.cs +++ b/src/AutoMerge/Services/ChangesetService.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using Microsoft.TeamFoundation.VersionControl.Client; @@ -37,7 +37,25 @@ public Changeset GetChangeset(int changesetId) return changeset; } - public Change[] GetChanges(int changesetId) + + + public ICollection GetMergeCandidates(string tfsLocationFrom, string tfsLocationTo) + { + var smos = _versionControlServer.GetMergeCandidates(tfsLocationFrom, tfsLocationTo, RecursionType.Full); + + List result = new List(); + + foreach (MergeCandidate mc in smos) + { + result.Add(mc.Changeset); + } + + return result; + } + + + + public Change[] GetChanges(int changesetId) { return _versionControlServer.GetChangesForChangeset(changesetId, false, int.MaxValue, null, null, null, true); } From 3a6583468272cee5524053f7731447d1cb0680e3 Mon Sep 17 00:00:00 2001 From: "Dieter.Vantilt" Date: Fri, 20 Apr 2018 10:55:48 +0200 Subject: [PATCH 02/18] Initial split team and solo --- .gitignore | 4 + src/AutoMerge.Tests/AutoMerge.Tests.csproj | 3 + src/AutoMerge/AutoMerge.csproj | 18 ++- src/AutoMerge/AutoMergeTeamNavigationItem.cs | 23 +++ src/AutoMerge/AutoMergeTeamPage.cs | 14 ++ src/AutoMerge/Guids.cs | 13 +- .../RecentChangesetsSection.cs | 7 +- .../RecentChangesetsTeamSection.cs | 25 ++++ .../RecentChangesetsViewModel.cs | 129 ++-------------- .../RecentChangesetsSoloView.xaml} | 2 +- .../RecentChangesetsSoloView.xaml.cs} | 6 +- .../Solo/RecentChangesetsSoloViewModel.cs | 138 ++++++++++++++++++ .../Team/RecentChangesetsTeamView.xaml | 82 +++++++++++ .../Team/RecentChangesetsTeamView.xaml.cs | 42 ++++++ .../Team/RecentChangesetsTeamViewModel.cs | 24 +++ src/AutoMerge/Resources.Designer.cs | 11 +- src/AutoMerge/Resources.resx | 59 ++++---- 17 files changed, 436 insertions(+), 164 deletions(-) create mode 100644 src/AutoMerge/AutoMergeTeamNavigationItem.cs create mode 100644 src/AutoMerge/AutoMergeTeamPage.cs create mode 100644 src/AutoMerge/RecentChangesets/RecentChangesetsTeamSection.cs rename src/AutoMerge/RecentChangesets/{RecentChangesetsView.xaml => Solo/RecentChangesetsSoloView.xaml} (99%) rename src/AutoMerge/RecentChangesets/{RecentChangesetsView.xaml.cs => Solo/RecentChangesetsSoloView.xaml.cs} (87%) create mode 100644 src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloViewModel.cs create mode 100644 src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml create mode 100644 src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml.cs create mode 100644 src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs diff --git a/.gitignore b/.gitignore index a3a8ec3..8579e72 100644 --- a/.gitignore +++ b/.gitignore @@ -106,3 +106,7 @@ $RECYCLE.BIN/ # ide temp *.sln.ide/ +/src/.vs/AutoMerge/v15/Server/sqlite3/storage.ide-wal +/src/.vs/AutoMerge/v15/Server/sqlite3/storage.ide-shm +/src/.vs/AutoMerge/v15/Server/sqlite3/storage.ide +/src/.vs/AutoMerge/v15/Server/sqlite3/db.lock diff --git a/src/AutoMerge.Tests/AutoMerge.Tests.csproj b/src/AutoMerge.Tests/AutoMerge.Tests.csproj index 8869404..62e9e6b 100644 --- a/src/AutoMerge.Tests/AutoMerge.Tests.csproj +++ b/src/AutoMerge.Tests/AutoMerge.Tests.csproj @@ -70,6 +70,9 @@ AutoMerge + + + diff --git a/src/AutoMerge/AutoMerge.csproj b/src/AutoMerge/AutoMerge.csproj index af59e48..87e3bcf 100644 --- a/src/AutoMerge/AutoMerge.csproj +++ b/src/AutoMerge/AutoMerge.csproj @@ -242,6 +242,8 @@ + + @@ -316,11 +318,17 @@ - - RecentChangesetsView.xaml + + + RecentChangesetsSoloView.xaml + + + RecentChangesetsTeamView.xaml + + True True @@ -393,10 +401,14 @@ Designer MSBuild:Compile - + Designer MSBuild:Compile + + MSBuild:Compile + Designer + Designer MSBuild:Compile diff --git a/src/AutoMerge/AutoMergeTeamNavigationItem.cs b/src/AutoMerge/AutoMergeTeamNavigationItem.cs new file mode 100644 index 0000000..953d60d --- /dev/null +++ b/src/AutoMerge/AutoMergeTeamNavigationItem.cs @@ -0,0 +1,23 @@ +using System; +using System.ComponentModel.Composition; +using AutoMerge.Base; +using AutoMerge.VersionControl; +using Microsoft.TeamFoundation.Controls; +using Microsoft.VisualStudio.Shell; + +namespace AutoMerge +{ + [TeamExplorerNavigationItem(GuidList.AutoMergeTeamNavigationItemId, 211, TargetPageId = GuidList.AutoMergeTeamPageId)] + class AutoMergeTeamNavigationItem : TeamExplorerNavigationItemBase + { + [ImportingConstructor] + public AutoMergeTeamNavigationItem( + [Import(typeof(SVsServiceProvider))] + IServiceProvider serviceProvider) + : base(serviceProvider, GuidList.AutoMergeTeamPageId, VersionControlProvider.TeamFoundation) + { + Text = Resources.AutoMergeTeamPageName; + Image = Resources.MergeImage; + } + } +} diff --git a/src/AutoMerge/AutoMergeTeamPage.cs b/src/AutoMerge/AutoMergeTeamPage.cs new file mode 100644 index 0000000..1e70b1f --- /dev/null +++ b/src/AutoMerge/AutoMergeTeamPage.cs @@ -0,0 +1,14 @@ +using AutoMerge.Base; +using Microsoft.TeamFoundation.Controls; + +namespace AutoMerge +{ + [TeamExplorerPage(GuidList.AutoMergeTeamPageId)] + public class AutoMergeTeamPage : TeamExplorerPageBase + { + public AutoMergeTeamPage() + { + Title = Resources.AutoMergeTeamPageName; + } + } +} diff --git a/src/AutoMerge/Guids.cs b/src/AutoMerge/Guids.cs index 661cd47..26b0962 100644 --- a/src/AutoMerge/Guids.cs +++ b/src/AutoMerge/Guids.cs @@ -1,4 +1,4 @@ -// Guids.cs +// Guids.cs // MUST match guids.h using System; @@ -12,9 +12,12 @@ public static class GuidList public static readonly Guid guidAutoMergeCmdSet = new Guid(guidAutoMergeCmdSetString); public const string AutoMergeNavigationItemId = "02A9D8B3-287B-4C55-83E7-7BFDB435546D"; - public const string AutoMergePageId = "3B582638-5F12-4715-8719-5E5777AB4581"; - public const string RecentChangesetsSectionId = "8DA59790-3996-465E-A13F-27D64B3C2A9D"; + public const string AutoMergeTeamNavigationItemId = "3439f733-0177-4db4-b12b-85f19a4ac78a"; + public const string AutoMergePageId = "3B582638-5F12-4715-8719-5E5777AB4581"; + public const string AutoMergeTeamPageId = "246ccc66-d988-44d4-8d1e-e84ee846acd5"; + public const string RecentChangesetsSectionId = "8DA59790-3996-465E-A13F-27D64B3C2A9D"; + public const string RecentChangesetsTeamSectionId = "b7dc6fbe-c3b1-47d8-805c-cce8c3dbedfb"; - public const string BranchesSectionId = "36BF6F52-F4AC-44A0-9985-817B2A65B3B0"; + public const string BranchesSectionId = "36BF6F52-F4AC-44A0-9985-817B2A65B3B0"; }; -} \ No newline at end of file +} diff --git a/src/AutoMerge/RecentChangesets/RecentChangesetsSection.cs b/src/AutoMerge/RecentChangesets/RecentChangesetsSection.cs index 77b2d79..f0a6c58 100644 --- a/src/AutoMerge/RecentChangesets/RecentChangesetsSection.cs +++ b/src/AutoMerge/RecentChangesets/RecentChangesetsSection.cs @@ -1,4 +1,5 @@ -using AutoMerge.Base; +using AutoMerge.Base; +using AutoMerge.RecentChangesets.Solo; using Microsoft.TeamFoundation.Controls; namespace AutoMerge @@ -8,14 +9,14 @@ public class RecentChangesetsSection : TeamExplorerSectionBase { protected override ITeamExplorerSection CreateViewModel(SectionInitializeEventArgs e) { - var viewModel = base.CreateViewModel(e) ?? new RecentChangesetsViewModel(new VsLogger(ServiceProvider)); + var viewModel = base.CreateViewModel(e) ?? new RecentChangesetsSoloViewModel(new VsLogger(ServiceProvider)); return viewModel; } protected override object CreateView(SectionInitializeEventArgs e) { - return new RecentChangesetsView(); + return new RecentChangesetsSoloView(); } } } diff --git a/src/AutoMerge/RecentChangesets/RecentChangesetsTeamSection.cs b/src/AutoMerge/RecentChangesets/RecentChangesetsTeamSection.cs new file mode 100644 index 0000000..8722deb --- /dev/null +++ b/src/AutoMerge/RecentChangesets/RecentChangesetsTeamSection.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using AutoMerge.Base; +using Microsoft.TeamFoundation.Controls; +using Microsoft.VisualStudio.Shell; + +namespace AutoMerge.RecentChangesets +{ + [TeamExplorerSection(GuidList.RecentChangesetsTeamSectionId, GuidList.AutoMergeTeamPageId, 11)] + public class RecentChangesetsTeamSection : TeamExplorerSectionBase + { + protected override ITeamExplorerSection CreateViewModel(SectionInitializeEventArgs e) + { + return base.CreateViewModel(e) ?? new RecentChangesetsTeamViewModel(new VsLogger(ServiceProvider)); + } + + protected override object CreateView(SectionInitializeEventArgs e) + { + return new RecentChangesetsTeamView(); + } + } +} diff --git a/src/AutoMerge/RecentChangesets/RecentChangesetsViewModel.cs b/src/AutoMerge/RecentChangesets/RecentChangesetsViewModel.cs index c5c5567..53f19dd 100644 --- a/src/AutoMerge/RecentChangesets/RecentChangesetsViewModel.cs +++ b/src/AutoMerge/RecentChangesets/RecentChangesetsViewModel.cs @@ -1,6 +1,7 @@ -using System; +using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Threading.Tasks; using AutoMerge.Events; using AutoMerge.Prism.Command; using AutoMerge.Prism.Events; @@ -14,12 +15,12 @@ namespace AutoMerge { - public sealed class RecentChangesetsViewModel : TeamExplorerSectionViewModelBase + public abstract class RecentChangesetsViewModel : TeamExplorerSectionViewModelBase { private readonly string _baseTitle; private readonly IEventAggregator _eventAggregator; - public RecentChangesetsViewModel(ILogger logger) + protected RecentChangesetsViewModel(ILogger logger) : base(logger) { Title = Resources.RecentChangesetSectionName; @@ -34,9 +35,6 @@ public RecentChangesetsViewModel(ILogger logger) .Subscribe(OnMergeComplete); ViewChangesetDetailsCommand = new DelegateCommand(ViewChangesetDetailsExecute, ViewChangesetDetailsCanExecute); - ToggleAddByIdCommand = new DelegateCommand(ToggleAddByIdExecute, ToggleAddByIdCanExecute); - CancelAddChangesetByIdCommand = new DelegateCommand(CancelAddByIdExecute); - AddChangesetByIdCommand = new DelegateCommand(AddChangesetByIdExecute, AddChangesetByIdCanExecute); } public ChangesetViewModel SelectedChangeset @@ -99,12 +97,6 @@ public string ChangesetIdsText public DelegateCommand ViewChangesetDetailsCommand { get; private set; } - public DelegateCommand ToggleAddByIdCommand { get; private set; } - - public DelegateCommand AddChangesetByIdCommand { get; private set; } - - public DelegateCommand CancelAddChangesetByIdCommand { get; private set; } - private void ViewChangesetDetailsExecute() { var changesetId = SelectedChangeset.ChangesetId; @@ -137,11 +129,8 @@ protected override async Task RefreshAsync() { Changesets.Clear(); - var changesetProvider = new MyChangesetChangesetProvider(ServiceProvider, Settings.Instance.ChangesetCount); - var userLogin = VersionControlNavigationHelper.GetAuthorizedUser(ServiceProvider); - Logger.Info("Getting changesets ..."); - var changesets = await changesetProvider.GetChangesets(userLogin); + var changesets = await GetChangesets(); Logger.Info("Getting changesets end"); Changesets = new ObservableCollection(changesets); @@ -154,118 +143,18 @@ protected override async Task RefreshAsync() } } - private void UpdateTitle() + public abstract Task> GetChangesets(); + + protected void UpdateTitle() { Title = Changesets.Count > 0 ? string.Format("{0} ({1})", _baseTitle, Changesets.Count) : _baseTitle; } - private void ToggleAddByIdExecute() - { - try - { - ShowAddByIdChangeset = true; - InvalidateCommands(); - ResetAddById(); - SetMvvmFocus(RecentChangesetFocusableControlNames.ChangesetIdTextBox); - } - catch (Exception ex) - { - ShowException(ex); - throw; - } - } - - private bool ToggleAddByIdCanExecute() - { - return !ShowAddByIdChangeset; - } - - private void CancelAddByIdExecute() - { - try - { - ShowAddByIdChangeset = false; - InvalidateCommands(); - SetMvvmFocus(RecentChangesetFocusableControlNames.AddChangesetByIdLink); - ResetAddById(); - } - catch (Exception ex) - { - ShowException(ex); - } - } - - private void ResetAddById() - { - ChangesetIdsText = string.Empty; - } - - private async void AddChangesetByIdExecute() - { - ShowBusy(); - try - { - var changesetIds = GeChangesetIdsToAdd(ChangesetIdsText); - if (changesetIds.Count > 0) - { - var changesetProvider = new ChangesetByIdChangesetProvider(ServiceProvider, changesetIds); - var changesets = await changesetProvider.GetChangesets(null); - - if (changesets.Count > 0) - { - Changesets.Add(changesets[0]); - SelectedChangeset = changesets[0]; - SetMvvmFocus(RecentChangesetFocusableControlNames.ChangesetList); - UpdateTitle(); - } - ShowAddByIdChangeset = false; - } - } - catch (Exception ex) - { - ShowException(ex); - } - HideBusy(); - } - - private bool AddChangesetByIdCanExecute() - { - try - { - return GeChangesetIdsToAdd(ChangesetIdsText).Count > 0; - } - catch (Exception ex) - { - ShowException(ex); - TeamFoundationTrace.TraceException(ex); - } - return false; - } - - private static List GeChangesetIdsToAdd(string text) - { - var list = new List(); - var idsStrArray = string.IsNullOrEmpty(text) ? new string[0] : text.Split(new[] { ',', ';' }); - if (idsStrArray.Length > 0) - { - foreach (var idStr in idsStrArray) - { - int result; - if (int.TryParse(idStr.Trim(), out result) && result > 0) - list.Add(result); - } - } - return list; - } - - private void InvalidateCommands() + protected virtual void InvalidateCommands() { ViewChangesetDetailsCommand.RaiseCanExecuteChanged(); - ToggleAddByIdCommand.RaiseCanExecuteChanged(); - CancelAddChangesetByIdCommand.RaiseCanExecuteChanged(); - AddChangesetByIdCommand.RaiseCanExecuteChanged(); } public override void Dispose() diff --git a/src/AutoMerge/RecentChangesets/RecentChangesetsView.xaml b/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloView.xaml similarity index 99% rename from src/AutoMerge/RecentChangesets/RecentChangesetsView.xaml rename to src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloView.xaml index 93a6afc..040e92e 100644 --- a/src/AutoMerge/RecentChangesets/RecentChangesetsView.xaml +++ b/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloView.xaml @@ -1,4 +1,4 @@ - /// Interaction logic for RecentChangesetsView.xaml /// - public partial class RecentChangesetsView : UserControl, IFocusService + public partial class RecentChangesetsSoloView : UserControl, IFocusService { - public RecentChangesetsView() + public RecentChangesetsSoloView() { InitializeComponent(); } diff --git a/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloViewModel.cs b/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloViewModel.cs new file mode 100644 index 0000000..e3d3aa6 --- /dev/null +++ b/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloViewModel.cs @@ -0,0 +1,138 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using AutoMerge.Prism.Command; +using Microsoft.TeamFoundation; + +namespace AutoMerge.RecentChangesets.Solo +{ + public class RecentChangesetsSoloViewModel : RecentChangesetsViewModel + { + public RecentChangesetsSoloViewModel(ILogger logger) : base(logger) + { + ToggleAddByIdCommand = new DelegateCommand(ToggleAddByIdExecute, ToggleAddByIdCanExecute); + CancelAddChangesetByIdCommand = new DelegateCommand(CancelAddByIdExecute); + AddChangesetByIdCommand = new DelegateCommand(AddChangesetByIdExecute, AddChangesetByIdCanExecute); + } + + public DelegateCommand ToggleAddByIdCommand { get; private set; } + public DelegateCommand CancelAddChangesetByIdCommand { get; private set; } + public DelegateCommand AddChangesetByIdCommand { get; private set; } + + public override async Task> GetChangesets() + { + var changesetProvider = new MyChangesetChangesetProvider(ServiceProvider, Settings.Instance.ChangesetCount); + var userLogin = VersionControlNavigationHelper.GetAuthorizedUser(ServiceProvider); + + return await changesetProvider.GetChangesets(userLogin); + } + + private void ToggleAddByIdExecute() + { + try + { + ShowAddByIdChangeset = true; + InvalidateCommands(); + ResetAddById(); + SetMvvmFocus(RecentChangesetFocusableControlNames.ChangesetIdTextBox); + } + catch (Exception ex) + { + ShowException(ex); + throw; + } + } + + private bool ToggleAddByIdCanExecute() + { + return !ShowAddByIdChangeset; + } + + private void CancelAddByIdExecute() + { + try + { + ShowAddByIdChangeset = false; + InvalidateCommands(); + SetMvvmFocus(RecentChangesetFocusableControlNames.AddChangesetByIdLink); + ResetAddById(); + } + catch (Exception ex) + { + ShowException(ex); + } + } + + private void ResetAddById() + { + ChangesetIdsText = string.Empty; + } + + private async void AddChangesetByIdExecute() + { + ShowBusy(); + try + { + var changesetIds = GeChangesetIdsToAdd(ChangesetIdsText); + if (changesetIds.Count > 0) + { + var changesetProvider = new ChangesetByIdChangesetProvider(ServiceProvider, changesetIds); + var changesets = await changesetProvider.GetChangesets(null); + + if (changesets.Count > 0) + { + Changesets.Add(changesets[0]); + SelectedChangeset = changesets[0]; + SetMvvmFocus(RecentChangesetFocusableControlNames.ChangesetList); + UpdateTitle(); + } + ShowAddByIdChangeset = false; + } + } + catch (Exception ex) + { + ShowException(ex); + } + HideBusy(); + } + + private bool AddChangesetByIdCanExecute() + { + try + { + return GeChangesetIdsToAdd(ChangesetIdsText).Count > 0; + } + catch (Exception ex) + { + ShowException(ex); + TeamFoundationTrace.TraceException(ex); + } + return false; + } + + private static List GeChangesetIdsToAdd(string text) + { + var list = new List(); + var idsStrArray = string.IsNullOrEmpty(text) ? new string[0] : text.Split(new[] { ',', ';' }); + if (idsStrArray.Length > 0) + { + foreach (var idStr in idsStrArray) + { + int result; + if (int.TryParse(idStr.Trim(), out result) && result > 0) + list.Add(result); + } + } + return list; + } + + protected override void InvalidateCommands() + { + base.InvalidateCommands(); + + ToggleAddByIdCommand.RaiseCanExecuteChanged(); + CancelAddChangesetByIdCommand.RaiseCanExecuteChanged(); + AddChangesetByIdCommand.RaiseCanExecuteChanged(); + } + } +} diff --git a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml new file mode 100644 index 0000000..9e7573a --- /dev/null +++ b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml.cs b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml.cs new file mode 100644 index 0000000..6f1bddb --- /dev/null +++ b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml.cs @@ -0,0 +1,42 @@ +using System.Windows.Controls; +using Microsoft.TeamFoundation.Controls.MVVM; + +namespace AutoMerge +{ + /// + /// Interaction logic for RecentChangesetsView.xaml + /// + public partial class RecentChangesetsTeamView : UserControl + { + public RecentChangesetsTeamView() + { + InitializeComponent(); + } + + //public void SetFocus(string id, params object[] args) + //{ + // switch (id) + // { + // case RecentChangesetFocusableControlNames.AddChangesetByIdLink: + // addChangesetByIdLink.Focus(); + // break; + // case RecentChangesetFocusableControlNames.ChangesetIdTextBox: + // changesetIdTextBox.FocusTextBox(); + // changesetIdTextBox.TextBoxControl.SelectionStart = changesetIdTextBox.TextBoxControl.Text.Length; + // break; + // case RecentChangesetFocusableControlNames.ChangesetList: + // if (changesetList.SelectedItem != null) + // { + // changesetList.UpdateLayout(); + // var item = changesetList.ItemContainerGenerator.ContainerFromIndex(changesetList.SelectedIndex); + // ((ListBoxItem) item).Focus(); + // } + // else + // { + // changesetList.Focus(); + // } + // break; + // } + //} + } +} diff --git a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs new file mode 100644 index 0000000..987a336 --- /dev/null +++ b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Threading.Tasks; + +namespace AutoMerge +{ + public class RecentChangesetsTeamViewModel : RecentChangesetsViewModel + { + public RecentChangesetsTeamViewModel(ILogger logger) : base(logger) + { + SelectedChangesets = new ObservableCollection(); + } + + public override async Task> GetChangesets() + { + var changesetProvider = new MyChangesetChangesetProvider(ServiceProvider, Settings.Instance.ChangesetCount); + var userLogin = VersionControlNavigationHelper.GetAuthorizedUser(ServiceProvider); + + return await changesetProvider.GetChangesets(userLogin); + } + + public ObservableCollection SelectedChangesets { get; } + } +} diff --git a/src/AutoMerge/Resources.Designer.cs b/src/AutoMerge/Resources.Designer.cs index c2905fa..16c14ba 100644 --- a/src/AutoMerge/Resources.Designer.cs +++ b/src/AutoMerge/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace AutoMerge { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { @@ -69,6 +69,15 @@ internal static string AutoMergePageName { } } + /// + /// Looks up a localized string similar to Auto Merge (Team). + /// + internal static string AutoMergeTeamPageName { + get { + return ResourceManager.GetString("AutoMergeTeamPageName", resourceCulture); + } + } + /// /// Looks up a localized string similar to Target branches. /// diff --git a/src/AutoMerge/Resources.resx b/src/AutoMerge/Resources.resx index 27b993e..6534a6f 100644 --- a/src/AutoMerge/Resources.resx +++ b/src/AutoMerge/Resources.resx @@ -1,17 +1,17 @@  - @@ -130,4 +130,7 @@ Resources\merge.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - + + Auto Merge (Team) + + \ No newline at end of file From 6adb43cc84ce1127e7430fabf46cecb6fd521a1f Mon Sep 17 00:00:00 2001 From: Ruben Willems Date: Fri, 20 Apr 2018 11:04:37 +0200 Subject: [PATCH 03/18] reworked teamChangesetProvider : removed hard coded test settings --- .../TeamChangesetChangesetProvider.cs | 15 +++++++-------- src/AutoMerge/Services/ChangesetService.cs | 4 ++-- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/AutoMerge/RecentChangesets/TeamChangesetChangesetProvider.cs b/src/AutoMerge/RecentChangesets/TeamChangesetChangesetProvider.cs index 342e846..c998170 100644 --- a/src/AutoMerge/RecentChangesets/TeamChangesetChangesetProvider.cs +++ b/src/AutoMerge/RecentChangesets/TeamChangesetChangesetProvider.cs @@ -8,13 +8,14 @@ namespace AutoMerge { public class TeamChangesetChangesetProvider : ChangesetProviderBase { - private readonly int _maxChangesetCount; - private readonly string _branchLocation; + private readonly string _sourceBranch; + private readonly string _targetBranch; - public TeamChangesetChangesetProvider(IServiceProvider serviceProvider, string branchLocation, int maxChangesetCount) : base(serviceProvider) + + public TeamChangesetChangesetProvider(IServiceProvider serviceProvider, string sourceBranch, string targetBranch) : base(serviceProvider) { - _maxChangesetCount = maxChangesetCount; - _branchLocation = branchLocation; + _sourceBranch = sourceBranch; + _targetBranch = targetBranch; } protected override List GetChangesetsInternal() @@ -26,9 +27,7 @@ protected override List GetChangesetsInternal() if (changesetService != null) { var projectName = GetProjectName(); - var tfsChangesets = changesetService.GetMergeCandidates("$/Test/Branches/B01", "$/Test/Main"); - - //var tfsChangesets = changesetService.GetTeamChangesets(projectName, _branchLocation, _maxChangesetCount); + var tfsChangesets = changesetService.GetMergeCandidates(_sourceBranch, _targetBranch); changesets = tfsChangesets .Select(tfsChangeset => ToChangesetViewModel(tfsChangeset, changesetService)) diff --git a/src/AutoMerge/Services/ChangesetService.cs b/src/AutoMerge/Services/ChangesetService.cs index 92a5c26..15858e9 100644 --- a/src/AutoMerge/Services/ChangesetService.cs +++ b/src/AutoMerge/Services/ChangesetService.cs @@ -39,9 +39,9 @@ public Changeset GetChangeset(int changesetId) - public ICollection GetMergeCandidates(string tfsLocationFrom, string tfsLocationTo) + public ICollection GetMergeCandidates(string sourceBranch, string targetBranch) { - var smos = _versionControlServer.GetMergeCandidates(tfsLocationFrom, tfsLocationTo, RecursionType.Full); + var smos = _versionControlServer.GetMergeCandidates(sourceBranch, targetBranch, RecursionType.Full); List result = new List(); From 30da8ab4a672e23be3085690047a8962c1875a5b Mon Sep 17 00:00:00 2001 From: "Dieter.Vantilt" Date: Fri, 20 Apr 2018 11:08:25 +0200 Subject: [PATCH 04/18] Branch change set --- src/AutoMerge/AutoMerge.csproj | 20 +++++++++++++++---- .../Solo/RecentChangesetsSoloViewModel.cs | 6 +++--- .../Team/RecentChangesetsTeamViewModel.cs | 5 ++--- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/AutoMerge/AutoMerge.csproj b/src/AutoMerge/AutoMerge.csproj index 7d3af36..4bf0657 100644 --- a/src/AutoMerge/AutoMerge.csproj +++ b/src/AutoMerge/AutoMerge.csproj @@ -242,6 +242,8 @@ + + @@ -316,12 +318,18 @@ - - RecentChangesetsView.xaml - + + + RecentChangesetsSoloView.xaml + + + + RecentChangesetsTeamView.xaml + + True True @@ -394,9 +402,13 @@ Designer MSBuild:Compile - + + MSBuild:Compile Designer + + MSBuild:Compile + Designer Designer diff --git a/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloViewModel.cs b/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloViewModel.cs index e3d3aa6..8fdbdab 100644 --- a/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloViewModel.cs +++ b/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloViewModel.cs @@ -21,10 +21,10 @@ public RecentChangesetsSoloViewModel(ILogger logger) : base(logger) public override async Task> GetChangesets() { - var changesetProvider = new MyChangesetChangesetProvider(ServiceProvider, Settings.Instance.ChangesetCount); var userLogin = VersionControlNavigationHelper.GetAuthorizedUser(ServiceProvider); + var changesetProvider = new MyChangesetChangesetProvider(ServiceProvider, Settings.Instance.ChangesetCount, userLogin); - return await changesetProvider.GetChangesets(userLogin); + return await changesetProvider.GetChangesets(); } private void ToggleAddByIdExecute() @@ -77,7 +77,7 @@ private async void AddChangesetByIdExecute() if (changesetIds.Count > 0) { var changesetProvider = new ChangesetByIdChangesetProvider(ServiceProvider, changesetIds); - var changesets = await changesetProvider.GetChangesets(null); + var changesets = await changesetProvider.GetChangesets(); if (changesets.Count > 0) { diff --git a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs index 987a336..01a4f0a 100644 --- a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs +++ b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs @@ -13,10 +13,9 @@ public RecentChangesetsTeamViewModel(ILogger logger) : base(logger) public override async Task> GetChangesets() { - var changesetProvider = new MyChangesetChangesetProvider(ServiceProvider, Settings.Instance.ChangesetCount); - var userLogin = VersionControlNavigationHelper.GetAuthorizedUser(ServiceProvider); + var changesetProvider = new TeamChangesetChangesetProvider(ServiceProvider, "$/Test/Branches/B01", "$/Test/Main"); - return await changesetProvider.GetChangesets(userLogin); + return await changesetProvider.GetChangesets(); } public ObservableCollection SelectedChangesets { get; } From 5f672fe9ee03fbe44190bb2ebbc9998527d22d5b Mon Sep 17 00:00:00 2001 From: "Dieter.Vantilt" Date: Fri, 20 Apr 2018 13:02:28 +0200 Subject: [PATCH 05/18] Choosing the source and target branch --- .../RecentChangesets/ChangesetProviderBase.cs | 2 +- .../RecentChangesetsViewModel.cs | 10 +-- .../RecentChangesetsViewModelContext.cs | 8 ++- .../Solo/RecentChangesetsSoloViewModel.cs | 3 + .../Team/RecentChangesetsTeamView.xaml | 16 ++++- .../Team/RecentChangesetsTeamViewModel.cs | 61 ++++++++++++++++++- 6 files changed, 89 insertions(+), 11 deletions(-) diff --git a/src/AutoMerge/RecentChangesets/ChangesetProviderBase.cs b/src/AutoMerge/RecentChangesets/ChangesetProviderBase.cs index 0940f82..458764a 100644 --- a/src/AutoMerge/RecentChangesets/ChangesetProviderBase.cs +++ b/src/AutoMerge/RecentChangesets/ChangesetProviderBase.cs @@ -57,7 +57,7 @@ private ChangesetService InitChangesetService() return null; } - protected string GetProjectName() + public string GetProjectName() { var context = VersionControlNavigationHelper.GetTeamFoundationContext(_serviceProvider); if (context != null) diff --git a/src/AutoMerge/RecentChangesets/RecentChangesetsViewModel.cs b/src/AutoMerge/RecentChangesets/RecentChangesetsViewModel.cs index 53f19dd..a24c9ef 100644 --- a/src/AutoMerge/RecentChangesets/RecentChangesetsViewModel.cs +++ b/src/AutoMerge/RecentChangesets/RecentChangesetsViewModel.cs @@ -17,18 +17,16 @@ namespace AutoMerge { public abstract class RecentChangesetsViewModel : TeamExplorerSectionViewModelBase { - private readonly string _baseTitle; private readonly IEventAggregator _eventAggregator; protected RecentChangesetsViewModel(ILogger logger) : base(logger) { - Title = Resources.RecentChangesetSectionName; + Title = BaseTitle; IsVisible = true; IsExpanded = true; IsBusy = false; Changesets = new ObservableCollection(); - _baseTitle = Title; _eventAggregator = EventAggregatorFactory.Get(); _eventAggregator.GetEvent() @@ -148,8 +146,8 @@ protected override async Task RefreshAsync() protected void UpdateTitle() { Title = Changesets.Count > 0 - ? string.Format("{0} ({1})", _baseTitle, Changesets.Count) - : _baseTitle; + ? string.Format("{0} ({1})", BaseTitle, Changesets.Count) + : BaseTitle; } protected virtual void InvalidateCommands() @@ -192,5 +190,7 @@ protected override void OnContextChanged(object sender, ContextChangedEventArgs { Refresh(); } + + protected abstract string BaseTitle { get; } } } diff --git a/src/AutoMerge/RecentChangesets/RecentChangesetsViewModelContext.cs b/src/AutoMerge/RecentChangesets/RecentChangesetsViewModelContext.cs index 06ba726..a838ed8 100644 --- a/src/AutoMerge/RecentChangesets/RecentChangesetsViewModelContext.cs +++ b/src/AutoMerge/RecentChangesets/RecentChangesetsViewModelContext.cs @@ -1,4 +1,4 @@ -using System.Collections.ObjectModel; +using System.Collections.ObjectModel; namespace AutoMerge { @@ -14,4 +14,10 @@ public class RecentChangesetsViewModelContext public string Title { get; set; } } + + public class RecentChangesetsTeamViewModelContext : RecentChangesetsViewModelContext + { + public string SourceBranch { get; set; } + public string TargetBranch { get; set; } + } } diff --git a/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloViewModel.cs b/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloViewModel.cs index 8fdbdab..45fa09f 100644 --- a/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloViewModel.cs +++ b/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloViewModel.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using AutoMerge.Prism.Command; using Microsoft.TeamFoundation; +using Microsoft.TeamFoundation.Controls; namespace AutoMerge.RecentChangesets.Solo { @@ -134,5 +135,7 @@ protected override void InvalidateCommands() CancelAddChangesetByIdCommand.RaiseCanExecuteChanged(); AddChangesetByIdCommand.RaiseCanExecuteChanged(); } + + protected override string BaseTitle => Resources.RecentChangesetSectionName; } } diff --git a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml index 9e7573a..844a331 100644 --- a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml +++ b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml @@ -55,8 +55,22 @@ + + + + + + + + + + + + (); + SourcesBranches = new ObservableCollection(); + TargetBranches = new ObservableCollection(); } - public override async Task> GetChangesets() + public ObservableCollection SourcesBranches { get; set; } + public ObservableCollection TargetBranches { get; set; } + + private string _sourceBranch; + + public string SourceBranch { - var changesetProvider = new TeamChangesetChangesetProvider(ServiceProvider, "$/Test/Branches/B01", "$/Test/Main"); + get { return _sourceBranch; } + set + { + _sourceBranch = value; + RaisePropertyChanged(nameof(SourceBranch)); + InitializeTargetBranches(); + } + } + + private string _targetBranch; - return await changesetProvider.GetChangesets(); + public string TargetBranch + { + get { return _targetBranch; } + set + { + _targetBranch = value; + RaisePropertyChanged(nameof(TargetBranch)); + + RefreshAsync(); + } } public ObservableCollection SelectedChangesets { get; } + + protected override Task InitializeAsync(object sender, SectionInitializeEventArgs e) + { + //Find all sources branches. + SourcesBranches.Add("$/Test/Branches/B01"); + + return base.InitializeAsync(sender, e); + } + + public override async Task> GetChangesets() + { + if (SourceBranch != null && TargetBranch != null) + { + var changesetProvider = new TeamChangesetChangesetProvider(ServiceProvider, SourceBranch, TargetBranch); + return await changesetProvider.GetChangesets(); + } + + return await Task.FromResult(new List()); + } + + public void InitializeTargetBranches() + { + TargetBranches.Clear(); + + //Find all possible target branches + TargetBranches.Add("$/Test/Main"); + } + + protected override string BaseTitle => "Project name: " + new TeamChangesetChangesetProvider(ServiceProvider, "$/Test/Branches/B01", "$/Test/Main").GetProjectName(); } } From ab56d59986ee796d5bbcc584c22399d930e07970 Mon Sep 17 00:00:00 2001 From: Wurzug Date: Tue, 1 May 2018 21:43:05 +0200 Subject: [PATCH 06/18] Implementation for the merging and adding all associated work items. --- src/AutoMerge/AutoMerge.csproj | 7 ++ src/AutoMerge/Branches/BranchesViewModel.cs | 14 +-- src/AutoMerge/Helpers/ProjectNameHelper.cs | 18 ++++ src/AutoMerge/Helpers/WorkspaceHelper.cs | 13 ++- .../RecentChangesets/ChangesetProviderBase.cs | 10 +- .../MyChangesetChangesetProvider.cs | 2 +- .../RecentChangesetsViewModel.cs | 56 +---------- .../RecentChangesetsViewModelContext.cs | 20 ++-- .../Solo/RecentChangesetsSoloView.xaml | 34 +------ .../Solo/RecentChangesetsSoloViewModel.cs | 56 +++++++++++ .../Team/RecentChangesetsTeamView.xaml | 60 ++++-------- .../Team/RecentChangesetsTeamView.xaml.cs | 26 ----- .../Team/RecentChangesetsTeamViewModel.cs | 96 +++++++++++++++++-- .../TeamChangesetChangesetProvider.cs | 2 +- src/AutoMerge/Services/BranchTeamService.cs | 52 ++++++++++ .../Styles/RecentChangesetResource.xaml | 43 +++++++++ src/AutoMerge/UI/AutoMergeListBox.cs | 37 +++++++ 17 files changed, 354 insertions(+), 192 deletions(-) create mode 100644 src/AutoMerge/Helpers/ProjectNameHelper.cs create mode 100644 src/AutoMerge/Services/BranchTeamService.cs create mode 100644 src/AutoMerge/Styles/RecentChangesetResource.xaml create mode 100644 src/AutoMerge/UI/AutoMergeListBox.cs diff --git a/src/AutoMerge/AutoMerge.csproj b/src/AutoMerge/AutoMerge.csproj index 4bf0657..a3549a2 100644 --- a/src/AutoMerge/AutoMerge.csproj +++ b/src/AutoMerge/AutoMerge.csproj @@ -290,6 +290,7 @@ + @@ -338,10 +339,12 @@ + + @@ -402,6 +405,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + MSBuild:Compile Designer diff --git a/src/AutoMerge/Branches/BranchesViewModel.cs b/src/AutoMerge/Branches/BranchesViewModel.cs index a80d6d5..8b12fde 100644 --- a/src/AutoMerge/Branches/BranchesViewModel.cs +++ b/src/AutoMerge/Branches/BranchesViewModel.cs @@ -177,16 +177,6 @@ public ObservableCollection MergeModes public DelegateCommand OpenSourceControlExplorerCommand { get; set; } - private static ObservableCollection GetWorkspaces(VersionControlServer versionControl, TfsTeamProjectCollection tfs) - { - var queryWorkspaces = versionControl.QueryWorkspaces(null, tfs.AuthorizedIdentity.UniqueName, Environment.MachineName); - if (queryWorkspaces.Length > 1) - { - return new ObservableCollection(queryWorkspaces.OrderBy(w => w.Name)); - } - return new ObservableCollection(queryWorkspaces); - } - protected async override Task InitializeAsync(object sender, SectionInitializeEventArgs e) { Logger.Debug("Start initilize branches section"); @@ -204,7 +194,7 @@ protected async override Task InitializeAsync(object sender, SectionInitializeEv if (e.Context == null) { - Workspaces = GetWorkspaces(versionControl, tfs); + Workspaces = WorkspaceHelper.GetWorkspaces(versionControl, tfs); if (Workspaces.Count > 0) { Workspace = WorkspaceHelper.GetWorkspace(versionControl, Workspaces); @@ -1252,7 +1242,7 @@ private void RefreshWorkspaces(object sender, WorkspaceEventArgs e) var tfs = Context.TeamProjectCollection; var versionControl = tfs.GetService(); - Workspaces = GetWorkspaces(versionControl, tfs); + Workspaces = WorkspaceHelper.GetWorkspaces(versionControl, tfs); if (Workspaces.Count > 0) { Workspace = Workspaces[0]; diff --git a/src/AutoMerge/Helpers/ProjectNameHelper.cs b/src/AutoMerge/Helpers/ProjectNameHelper.cs new file mode 100644 index 0000000..e876ad2 --- /dev/null +++ b/src/AutoMerge/Helpers/ProjectNameHelper.cs @@ -0,0 +1,18 @@ +using System; + +namespace AutoMerge +{ + public static class ProjectNameHelper + { + public static string GetProjectName(IServiceProvider serviceProvider) + { + var context = VersionControlNavigationHelper.GetTeamFoundationContext(serviceProvider); + + if (context != null) + { + return context.TeamProjectName; + } + return null; + } + } +} diff --git a/src/AutoMerge/Helpers/WorkspaceHelper.cs b/src/AutoMerge/Helpers/WorkspaceHelper.cs index 4612c12..cf18cf7 100644 --- a/src/AutoMerge/Helpers/WorkspaceHelper.cs +++ b/src/AutoMerge/Helpers/WorkspaceHelper.cs @@ -1,5 +1,6 @@ -using System; +using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using Microsoft.TeamFoundation.Client; using Microsoft.TeamFoundation.VersionControl.Client; @@ -107,5 +108,15 @@ private static RegistryKey GetFeatureServerKey(string featurePath, string server } return null; } + + public static ObservableCollection GetWorkspaces(VersionControlServer versionControl, TfsTeamProjectCollection tfs) + { + var queryWorkspaces = versionControl.QueryWorkspaces(null, tfs.AuthorizedIdentity.UniqueName, Environment.MachineName); + if (queryWorkspaces.Length > 1) + { + return new ObservableCollection(queryWorkspaces.OrderBy(w => w.Name)); + } + return new ObservableCollection(queryWorkspaces); + } } } diff --git a/src/AutoMerge/RecentChangesets/ChangesetProviderBase.cs b/src/AutoMerge/RecentChangesets/ChangesetProviderBase.cs index 458764a..c908866 100644 --- a/src/AutoMerge/RecentChangesets/ChangesetProviderBase.cs +++ b/src/AutoMerge/RecentChangesets/ChangesetProviderBase.cs @@ -57,14 +57,6 @@ private ChangesetService InitChangesetService() return null; } - public string GetProjectName() - { - var context = VersionControlNavigationHelper.GetTeamFoundationContext(_serviceProvider); - if (context != null) - { - return context.TeamProjectName; - } - return null; - } + protected IServiceProvider ServiceProvider => _serviceProvider; } } diff --git a/src/AutoMerge/RecentChangesets/MyChangesetChangesetProvider.cs b/src/AutoMerge/RecentChangesets/MyChangesetChangesetProvider.cs index 4fd2e0a..e93dba4 100644 --- a/src/AutoMerge/RecentChangesets/MyChangesetChangesetProvider.cs +++ b/src/AutoMerge/RecentChangesets/MyChangesetChangesetProvider.cs @@ -26,7 +26,7 @@ protected override List GetChangesetsInternal() if (changesetService != null) { - var projectName = GetProjectName(); + var projectName = ProjectNameHelper.GetProjectName(ServiceProvider); var tfsChangesets = changesetService.GetUserChangesets(projectName, _userLogin, _maxChangesetCount); changesets = tfsChangesets .Select(tfsChangeset => ToChangesetViewModel(tfsChangeset, changesetService)) diff --git a/src/AutoMerge/RecentChangesets/RecentChangesetsViewModel.cs b/src/AutoMerge/RecentChangesets/RecentChangesetsViewModel.cs index a24c9ef..fb79fe8 100644 --- a/src/AutoMerge/RecentChangesets/RecentChangesetsViewModel.cs +++ b/src/AutoMerge/RecentChangesets/RecentChangesetsViewModel.cs @@ -56,7 +56,7 @@ public ObservableCollection Changesets { return _changesets; } - private set + protected set { _changesets = value; RaisePropertyChanged("Changesets"); @@ -64,34 +64,7 @@ private set } private ObservableCollection _changesets; - public bool ShowAddByIdChangeset - { - get - { - return _showAddByIdChangeset; - } - set - { - _showAddByIdChangeset = value; - RaisePropertyChanged("ShowAddByIdChangeset"); - } - } - private bool _showAddByIdChangeset; - - public string ChangesetIdsText - { - get - { - return _changesetIdsText; - } - set - { - _changesetIdsText = value; - RaisePropertyChanged("ChangesetIdsText"); - InvalidateCommands(); - } - } - private string _changesetIdsText; + public DelegateCommand ViewChangesetDetailsCommand { get; private set; } @@ -161,30 +134,7 @@ public override void Dispose() _eventAggregator.GetEvent().Unsubscribe(OnMergeComplete); } - public override void SaveContext(object sender, SectionSaveContextEventArgs e) - { - base.SaveContext(sender, e); - var context = new RecentChangesetsViewModelContext - { - ChangesetIdsText = ChangesetIdsText, - Changesets = Changesets, - SelectedChangeset = SelectedChangeset, - ShowAddByIdChangeset = ShowAddByIdChangeset, - Title = Title - }; - - e.Context = context; - } - - private void RestoreContext(SectionInitializeEventArgs e) - { - var context = (RecentChangesetsViewModelContext)e.Context; - ChangesetIdsText = context.ChangesetIdsText; - Changesets = context.Changesets; - SelectedChangeset = context.SelectedChangeset; - ShowAddByIdChangeset = context.ShowAddByIdChangeset; - Title = context.Title; - } + protected abstract void RestoreContext(SectionInitializeEventArgs e); protected override void OnContextChanged(object sender, ContextChangedEventArgs e) { diff --git a/src/AutoMerge/RecentChangesets/RecentChangesetsViewModelContext.cs b/src/AutoMerge/RecentChangesets/RecentChangesetsViewModelContext.cs index a838ed8..77b0a2d 100644 --- a/src/AutoMerge/RecentChangesets/RecentChangesetsViewModelContext.cs +++ b/src/AutoMerge/RecentChangesets/RecentChangesetsViewModelContext.cs @@ -4,20 +4,26 @@ namespace AutoMerge { public class RecentChangesetsViewModelContext { - public ChangesetViewModel SelectedChangeset { get; set; } - - public ObservableCollection Changesets { get; set; } - - public bool ShowAddByIdChangeset { get; set; } - - public string ChangesetIdsText { get; set; } + public ObservableCollection Changesets { get; set; } public string Title { get; set; } + + public ChangesetViewModel SelectedChangeset { get; set; } } public class RecentChangesetsTeamViewModelContext : RecentChangesetsViewModelContext { public string SourceBranch { get; set; } + public string TargetBranch { get; set; } + + public ObservableCollection SelectedChangesets { get; set; } + } + + public class RecentChangesetsSoloViewModelContext : RecentChangesetsViewModelContext + { + public bool ShowAddByIdChangeset { get; set; } + + public string ChangesetIdsText { get; set; } } } diff --git a/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloView.xaml b/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloView.xaml index 040e92e..d4694b4 100644 --- a/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloView.xaml +++ b/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloView.xaml @@ -18,41 +18,11 @@ + - - - - - - - - - - - - - - + diff --git a/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloViewModel.cs b/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloViewModel.cs index 45fa09f..5c9ac83 100644 --- a/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloViewModel.cs +++ b/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloViewModel.cs @@ -20,6 +20,35 @@ public RecentChangesetsSoloViewModel(ILogger logger) : base(logger) public DelegateCommand CancelAddChangesetByIdCommand { get; private set; } public DelegateCommand AddChangesetByIdCommand { get; private set; } + public bool ShowAddByIdChangeset + { + get + { + return _showAddByIdChangeset; + } + set + { + _showAddByIdChangeset = value; + RaisePropertyChanged("ShowAddByIdChangeset"); + } + } + private bool _showAddByIdChangeset; + + public string ChangesetIdsText + { + get + { + return _changesetIdsText; + } + set + { + _changesetIdsText = value; + RaisePropertyChanged("ChangesetIdsText"); + InvalidateCommands(); + } + } + private string _changesetIdsText; + public override async Task> GetChangesets() { var userLogin = VersionControlNavigationHelper.GetAuthorizedUser(ServiceProvider); @@ -136,6 +165,33 @@ protected override void InvalidateCommands() AddChangesetByIdCommand.RaiseCanExecuteChanged(); } + public override void SaveContext(object sender, SectionSaveContextEventArgs e) + { + base.SaveContext(sender, e); + + var context = new RecentChangesetsSoloViewModelContext + { + ChangesetIdsText = ChangesetIdsText, + Changesets = Changesets, + SelectedChangeset = SelectedChangeset, + ShowAddByIdChangeset = ShowAddByIdChangeset, + Title = Title + }; + + e.Context = context; + } + + protected override void RestoreContext(SectionInitializeEventArgs e) + { + var context = (RecentChangesetsSoloViewModelContext)e.Context; + + ChangesetIdsText = context.ChangesetIdsText; + Changesets = context.Changesets; + SelectedChangeset = context.SelectedChangeset; + ShowAddByIdChangeset = context.ShowAddByIdChangeset; + Title = context.Title; + } + protected override string BaseTitle => Resources.RecentChangesetSectionName; } } diff --git a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml index 844a331..87ff649 100644 --- a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml +++ b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml @@ -8,6 +8,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:teamExplorer="clr-namespace:Microsoft.TeamFoundation.Controls.WPF.TeamExplorer;assembly=Microsoft.TeamFoundation.Controls" xmlns:wpf="clr-namespace:Microsoft.TeamFoundation.Controls.WPF;assembly=Microsoft.TeamFoundation.Controls" + xmlns:automerge="clr-namespace:AutoMerge" TextOptions.TextFormattingMode="Display" UseLayoutRounding="True" d:DataContext="{d:DesignInstance autoMerge:RecentChangesetsTeamViewModel}" @@ -18,67 +19,35 @@ + - - - - - - - - - - - - - - - - + - + - - + SelectedItemsList="{Binding SelectedChangesets}" + SelectionMode="Extended"> + - + @@ -91,6 +60,11 @@ - + + + + diff --git a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml.cs b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml.cs index 6f1bddb..002139e 100644 --- a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml.cs +++ b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml.cs @@ -12,31 +12,5 @@ public RecentChangesetsTeamView() { InitializeComponent(); } - - //public void SetFocus(string id, params object[] args) - //{ - // switch (id) - // { - // case RecentChangesetFocusableControlNames.AddChangesetByIdLink: - // addChangesetByIdLink.Focus(); - // break; - // case RecentChangesetFocusableControlNames.ChangesetIdTextBox: - // changesetIdTextBox.FocusTextBox(); - // changesetIdTextBox.TextBoxControl.SelectionStart = changesetIdTextBox.TextBoxControl.Text.Length; - // break; - // case RecentChangesetFocusableControlNames.ChangesetList: - // if (changesetList.SelectedItem != null) - // { - // changesetList.UpdateLayout(); - // var item = changesetList.ItemContainerGenerator.ContainerFromIndex(changesetList.SelectedIndex); - // ((ListBoxItem) item).Focus(); - // } - // else - // { - // changesetList.Focus(); - // } - // break; - // } - //} } } diff --git a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs index 46937cd..f0cb7d5 100644 --- a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs +++ b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs @@ -1,19 +1,28 @@ using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Linq; using System.Threading.Tasks; +using AutoMerge.Prism.Command; using Microsoft.TeamFoundation.Controls; namespace AutoMerge { public class RecentChangesetsTeamViewModel : RecentChangesetsViewModel { + private BranchTeamService _branchTeamService; + private string _projectName; + public RecentChangesetsTeamViewModel(ILogger logger) : base(logger) { SelectedChangesets = new ObservableCollection(); SourcesBranches = new ObservableCollection(); TargetBranches = new ObservableCollection(); + + MergeCommand = new DelegateCommand(Merge, CanMerge); } + public DelegateCommand MergeCommand { get; private set; } + public ObservableCollection SourcesBranches { get; set; } public ObservableCollection TargetBranches { get; set; } @@ -44,16 +53,68 @@ public string TargetBranch } } - public ObservableCollection SelectedChangesets { get; } + private ObservableCollection _selectedChangesets; + + public ObservableCollection SelectedChangesets + { + get { return _selectedChangesets; } + set + { + if (_selectedChangesets != null) + { + _selectedChangesets.CollectionChanged -= SelectedChangesets_CollectionChanged; + } + + _selectedChangesets = value; + RaisePropertyChanged(nameof(SelectedChangesets)); + + if (_selectedChangesets != null) + { + _selectedChangesets.CollectionChanged += SelectedChangesets_CollectionChanged; + } + } + } + + private void SelectedChangesets_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) + { + MergeCommand.RaiseCanExecuteChanged(); + } + + private void Merge() + { + var orderedSelectedChangesets = SelectedChangesets.OrderBy(x => x.ChangesetId).ToList(); + + _branchTeamService.MergeBranches(SourceBranch, TargetBranch, orderedSelectedChangesets.First().ChangesetId, orderedSelectedChangesets.Last().ChangesetId); + _branchTeamService.AddWorkItemsAndNavigate(orderedSelectedChangesets.Select(x => x.ChangesetId)); + } + + private bool CanMerge() + { + return SelectedChangesets != null + && SelectedChangesets.Any() + && Changesets.Count(x => x.ChangesetId >= SelectedChangesets.Min(y => y.ChangesetId) && + x.ChangesetId <= SelectedChangesets.Max(y => y.ChangesetId)) == SelectedChangesets.Count; + } protected override Task InitializeAsync(object sender, SectionInitializeEventArgs e) { + _projectName = ProjectNameHelper.GetProjectName(ServiceProvider); //Find all sources branches. - SourcesBranches.Add("$/Test/Branches/B01"); + SourcesBranches.Add("$/TestVoorAutomerge/DEV"); + + _branchTeamService = new BranchTeamService(Context.TeamProjectCollection, (ITeamExplorer) ServiceProvider.GetService(typeof(ITeamExplorer))); return base.InitializeAsync(sender, e); } + public void InitializeTargetBranches() + { + TargetBranches.Clear(); + + //Find all possible target branches + TargetBranches.Add("$/TestVoorAutomerge/MAIN"); + } + public override async Task> GetChangesets() { if (SourceBranch != null && TargetBranch != null) @@ -65,14 +126,35 @@ public override async Task> GetChangesets() return await Task.FromResult(new List()); } - public void InitializeTargetBranches() + public override void SaveContext(object sender, SectionSaveContextEventArgs e) { - TargetBranches.Clear(); + base.SaveContext(sender, e); - //Find all possible target branches - TargetBranches.Add("$/Test/Main"); + var context = new RecentChangesetsTeamViewModelContext + { + Changesets = Changesets, + Title = Title, + SelectedChangeset = SelectedChangeset, + SelectedChangesets = SelectedChangesets, + SourceBranch = SourceBranch, + TargetBranch = TargetBranch + }; + + e.Context = context; + } + + protected override void RestoreContext(SectionInitializeEventArgs e) + { + var context = (RecentChangesetsTeamViewModelContext) e.Context; + + Changesets = context.Changesets; + Title = context.Title; + SelectedChangeset = context.SelectedChangeset; + SelectedChangesets = context.SelectedChangesets; + SourceBranch = context.SourceBranch; + TargetBranch = context.TargetBranch; } - protected override string BaseTitle => "Project name: " + new TeamChangesetChangesetProvider(ServiceProvider, "$/Test/Branches/B01", "$/Test/Main").GetProjectName(); + protected override string BaseTitle => "Project name: " + _projectName; } } diff --git a/src/AutoMerge/RecentChangesets/TeamChangesetChangesetProvider.cs b/src/AutoMerge/RecentChangesets/TeamChangesetChangesetProvider.cs index c998170..8e75e41 100644 --- a/src/AutoMerge/RecentChangesets/TeamChangesetChangesetProvider.cs +++ b/src/AutoMerge/RecentChangesets/TeamChangesetChangesetProvider.cs @@ -26,7 +26,7 @@ protected override List GetChangesetsInternal() if (changesetService != null) { - var projectName = GetProjectName(); + var projectName = ProjectNameHelper.GetProjectName(ServiceProvider); var tfsChangesets = changesetService.GetMergeCandidates(_sourceBranch, _targetBranch); changesets = tfsChangesets diff --git a/src/AutoMerge/Services/BranchTeamService.cs b/src/AutoMerge/Services/BranchTeamService.cs new file mode 100644 index 0000000..022d0ab --- /dev/null +++ b/src/AutoMerge/Services/BranchTeamService.cs @@ -0,0 +1,52 @@ +using Microsoft.TeamFoundation.Client; +using Microsoft.TeamFoundation.Controls; +using Microsoft.TeamFoundation.Controls.WPF.TeamExplorer; +using Microsoft.TeamFoundation.VersionControl.Client; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; + +namespace AutoMerge +{ + public class BranchTeamService + { + private readonly Workspace _workspace; + private readonly ITeamExplorer _teamExplorer; + private readonly ChangesetService _changesetService; + + public BranchTeamService(TfsTeamProjectCollection tfs, ITeamExplorer teamExplorer) + { + var versionControlServer = tfs.GetService(); + + _workspace = WorkspaceHelper.GetWorkspace(versionControlServer, WorkspaceHelper.GetWorkspaces(versionControlServer, tfs)); + _teamExplorer = teamExplorer; + _changesetService = new ChangesetService(versionControlServer); + } + + public bool MergeBranches(string source, string target, int from, int to) + { + var result = _workspace.Merge(source, target, new ChangesetVersionSpec(from), new ChangesetVersionSpec(to), LockLevel.None, RecursionType.Full, MergeOptions.None); + + return result.NoActionNeeded; + } + + public void AddWorkItemsAndNavigate(IEnumerable changesetIds) + { + var workItemIds = new List(); + + foreach(var changesetId in changesetIds) + { + var changeSet = _changesetService.GetChangeset(changesetId); + workItemIds.AddRange(changeSet.AssociatedWorkItems?.Select(x => x.Id) ?? new List()); + } + + var pendingChangePage = (TeamExplorerPageBase) _teamExplorer.NavigateToPage(new Guid(TeamExplorerPageIds.PendingChanges), null); + var pendingChangeModel = (IPendingCheckin) pendingChangePage.Model; + + var modelType = pendingChangeModel.GetType(); + var method = modelType.GetMethod("AddWorkItemsByIdAsync", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.FlattenHierarchy); + method.Invoke(pendingChangeModel, new object[] { workItemIds.ToArray(), 1 }); + } + } +} diff --git a/src/AutoMerge/Styles/RecentChangesetResource.xaml b/src/AutoMerge/Styles/RecentChangesetResource.xaml new file mode 100644 index 0000000..a220fde --- /dev/null +++ b/src/AutoMerge/Styles/RecentChangesetResource.xaml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/AutoMerge/UI/AutoMergeListBox.cs b/src/AutoMerge/UI/AutoMergeListBox.cs new file mode 100644 index 0000000..0ba6947 --- /dev/null +++ b/src/AutoMerge/UI/AutoMergeListBox.cs @@ -0,0 +1,37 @@ +using System.Collections.ObjectModel; +using System.Linq; +using System.Windows; +using System.Windows.Controls; + +namespace AutoMerge +{ + public class AutoMergeListBox : ListBox + { + public AutoMergeListBox() + { + SelectionChanged += AutoMergeListBox_SelectionChanged; + } + + private void AutoMergeListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + foreach(var removedItem in e.RemovedItems.Cast()) + { + SelectedItemsList.Remove(removedItem); + } + + foreach(var addItem in e.AddedItems.Cast()) + { + SelectedItemsList.Add(addItem); + } + } + + public ObservableCollection SelectedItemsList + { + get { return (ObservableCollection)GetValue(SelectedItemsListProperty); } + set { SetValue(SelectedItemsListProperty, value); } + } + + public static readonly DependencyProperty SelectedItemsListProperty = + DependencyProperty.Register("SelectedItemsList", typeof(ObservableCollection), typeof(AutoMergeListBox), new PropertyMetadata(null)); + } +} From 64b855c2fef5c8e59306f3455b7df8c05bad601a Mon Sep 17 00:00:00 2001 From: Ruben Willems Date: Thu, 3 May 2018 10:31:30 +0200 Subject: [PATCH 07/18] nameof operator iso strings for raise event --- .../ChangesetByIdChangesetProvider.cs | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/AutoMerge/RecentChangesets/ChangesetByIdChangesetProvider.cs b/src/AutoMerge/RecentChangesets/ChangesetByIdChangesetProvider.cs index 2344919..2ccf209 100644 --- a/src/AutoMerge/RecentChangesets/ChangesetByIdChangesetProvider.cs +++ b/src/AutoMerge/RecentChangesets/ChangesetByIdChangesetProvider.cs @@ -4,33 +4,33 @@ namespace AutoMerge { - public class ChangesetByIdChangesetProvider : ChangesetProviderBase - { - private readonly IEnumerable _changesetIds; + public class ChangesetByIdChangesetProvider : ChangesetProviderBase + { + private readonly IEnumerable _changesetIds; - public ChangesetByIdChangesetProvider(IServiceProvider serviceProvider, IEnumerable changesetIds) - : base(serviceProvider) - { - if (changesetIds == null) - throw new ArgumentNullException("changesetIds"); + public ChangesetByIdChangesetProvider(IServiceProvider serviceProvider, IEnumerable changesetIds) + : base(serviceProvider) + { + if (changesetIds == null) + throw new ArgumentNullException(nameof(changesetIds)); - _changesetIds = changesetIds; - } + _changesetIds = changesetIds; + } - protected override List GetChangesetsInternal() - { - var changesets = new List(); - var changesetService = GetChangesetService(); - if (changesetService != null) - { - changesets = _changesetIds - .Select(changesetService.GetChangeset) - .Where(c => c != null) - .Select(tfsChangeset => ToChangesetViewModel(tfsChangeset, changesetService)) - .ToList(); - } + protected override List GetChangesetsInternal() + { + var changesets = new List(); + var changesetService = GetChangesetService(); + if (changesetService != null) + { + changesets = _changesetIds + .Select(changesetService.GetChangeset) + .Where(c => c != null) + .Select(tfsChangeset => ToChangesetViewModel(tfsChangeset, changesetService)) + .ToList(); + } - return changesets; - } - } + return changesets; + } + } } From 749bbf1ff156f08577cfc1fb2479c946d9e8d6a3 Mon Sep 17 00:00:00 2001 From: Ruben Willems Date: Thu, 3 May 2018 10:34:08 +0200 Subject: [PATCH 08/18] move providers into separate folder --- src/AutoMerge/AutoMerge.csproj | 6 +++--- .../{ => Providers}/ChangesetByIdChangesetProvider.cs | 0 .../{ => Providers}/MyChangesetChangesetProvider.cs | 0 .../{ => Providers}/TeamChangesetChangesetProvider.cs | 0 4 files changed, 3 insertions(+), 3 deletions(-) rename src/AutoMerge/RecentChangesets/{ => Providers}/ChangesetByIdChangesetProvider.cs (100%) rename src/AutoMerge/RecentChangesets/{ => Providers}/MyChangesetChangesetProvider.cs (100%) rename src/AutoMerge/RecentChangesets/{ => Providers}/TeamChangesetChangesetProvider.cs (100%) diff --git a/src/AutoMerge/AutoMerge.csproj b/src/AutoMerge/AutoMerge.csproj index a3549a2..689f76a 100644 --- a/src/AutoMerge/AutoMerge.csproj +++ b/src/AutoMerge/AutoMerge.csproj @@ -311,12 +311,12 @@ - + - + @@ -326,7 +326,7 @@ RecentChangesetsSoloView.xaml - + RecentChangesetsTeamView.xaml diff --git a/src/AutoMerge/RecentChangesets/ChangesetByIdChangesetProvider.cs b/src/AutoMerge/RecentChangesets/Providers/ChangesetByIdChangesetProvider.cs similarity index 100% rename from src/AutoMerge/RecentChangesets/ChangesetByIdChangesetProvider.cs rename to src/AutoMerge/RecentChangesets/Providers/ChangesetByIdChangesetProvider.cs diff --git a/src/AutoMerge/RecentChangesets/MyChangesetChangesetProvider.cs b/src/AutoMerge/RecentChangesets/Providers/MyChangesetChangesetProvider.cs similarity index 100% rename from src/AutoMerge/RecentChangesets/MyChangesetChangesetProvider.cs rename to src/AutoMerge/RecentChangesets/Providers/MyChangesetChangesetProvider.cs diff --git a/src/AutoMerge/RecentChangesets/TeamChangesetChangesetProvider.cs b/src/AutoMerge/RecentChangesets/Providers/TeamChangesetChangesetProvider.cs similarity index 100% rename from src/AutoMerge/RecentChangesets/TeamChangesetChangesetProvider.cs rename to src/AutoMerge/RecentChangesets/Providers/TeamChangesetChangesetProvider.cs From bbdebe173687095cf76e217f073fb75088419980 Mon Sep 17 00:00:00 2001 From: Ruben Willems Date: Thu, 3 May 2018 11:54:33 +0200 Subject: [PATCH 09/18] list tfs projects, list branches of project --- .../TeamChangesetChangesetProvider.cs | 68 ++++++++-- .../Team/RecentChangesetsTeamViewModel.cs | 3 +- src/AutoMerge/Services/ChangesetService.cs | 117 +++++++++++------- 3 files changed, 129 insertions(+), 59 deletions(-) diff --git a/src/AutoMerge/RecentChangesets/Providers/TeamChangesetChangesetProvider.cs b/src/AutoMerge/RecentChangesets/Providers/TeamChangesetChangesetProvider.cs index 8e75e41..a25d3d4 100644 --- a/src/AutoMerge/RecentChangesets/Providers/TeamChangesetChangesetProvider.cs +++ b/src/AutoMerge/RecentChangesets/Providers/TeamChangesetChangesetProvider.cs @@ -3,16 +3,57 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using Microsoft.TeamFoundation.VersionControl.Client; + namespace AutoMerge { public class TeamChangesetChangesetProvider : ChangesetProviderBase { - private readonly string _sourceBranch; - private readonly string _targetBranch; + private string _sourceBranch; + private string _targetBranch; + + public TeamChangesetChangesetProvider(IServiceProvider serviceProvider) : base(serviceProvider) + { + } - public TeamChangesetChangesetProvider(IServiceProvider serviceProvider, string sourceBranch, string targetBranch) : base(serviceProvider) + public List ListProjects() + { + List result = new List(); + + var changesetService = GetChangesetService(); + + if (changesetService != null) + { + result.AddRange(changesetService.ListTfsProjects()); + } + + return result; + } + + public List ListBranches(string projectName) + { + List result = new List(); + + result.Add("Test/Main"); + result.Add("ROL-Omgeving/Main"); + + + var changesetService = GetChangesetService(); + + if (changesetService != null) + { + changesetService.ListBranches("jos"); + + } + + + return result; + + } + + public void SetSourceAndTargetBranch(string sourceBranch, string targetBranch) { _sourceBranch = sourceBranch; _targetBranch = targetBranch; @@ -22,17 +63,20 @@ protected override List GetChangesetsInternal() { var changesets = new List(); - var changesetService = GetChangesetService(); + var changesetService = GetChangesetService(); + + if (changesetService != null) + { + + var prj = changesetService.ListTfsProjects(); + var s = changesetService.ListBranches("test"); + + var tfsChangesets = changesetService.GetMergeCandidates(_sourceBranch, _targetBranch); - if (changesetService != null) - { - var projectName = ProjectNameHelper.GetProjectName(ServiceProvider); - var tfsChangesets = changesetService.GetMergeCandidates(_sourceBranch, _targetBranch); + changesets = tfsChangesets + .Select(tfsChangeset => ToChangesetViewModel(tfsChangeset, changesetService)) + .ToList(); - changesets = tfsChangesets - .Select(tfsChangeset => ToChangesetViewModel(tfsChangeset, changesetService)) - .ToList(); - } return changesets; diff --git a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs index f0cb7d5..e6a3676 100644 --- a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs +++ b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs @@ -119,7 +119,8 @@ public override async Task> GetChangesets() { if (SourceBranch != null && TargetBranch != null) { - var changesetProvider = new TeamChangesetChangesetProvider(ServiceProvider, SourceBranch, TargetBranch); + var changesetProvider = new TeamChangesetChangesetProvider(ServiceProvider); + changesetProvider.SetSourceAndTargetBranch(SourceBranch, TargetBranch); return await changesetProvider.GetChangesets(); } diff --git a/src/AutoMerge/Services/ChangesetService.cs b/src/AutoMerge/Services/ChangesetService.cs index 15858e9..3f0f83f 100644 --- a/src/AutoMerge/Services/ChangesetService.cs +++ b/src/AutoMerge/Services/ChangesetService.cs @@ -4,48 +4,60 @@ namespace AutoMerge { - public class ChangesetService - { - private readonly VersionControlServer _versionControlServer; - - public ChangesetService(VersionControlServer versionControlServer) - { - _versionControlServer = versionControlServer; - } - - public ICollection GetUserChangesets(string teamProjectName, string userName, int count) - { - var path = "$/" + teamProjectName; - return _versionControlServer.QueryHistory(path, - VersionSpec.Latest, - 0, - RecursionType.Full, - userName, - null, - null, - count, - false, - true) - .Cast() - .ToList(); - } - - public Changeset GetChangeset(int changesetId) - { - var changeset = _versionControlServer.GetChangeset(changesetId, false, false); - - return changeset; - } - - + public class ChangesetService + { + private readonly VersionControlServer _versionControlServer; + + public ChangesetService(VersionControlServer versionControlServer) + { + _versionControlServer = versionControlServer; + } + + public ICollection GetUserChangesets(string teamProjectName, string userName, int count) + { + var path = "$/" + teamProjectName; + return _versionControlServer.QueryHistory(path, + VersionSpec.Latest, + 0, + RecursionType.Full, + userName, + null, + null, + count, + false, + true) + .Cast() + .ToList(); + } + + public Changeset GetChangeset(int changesetId) + { + var changeset = _versionControlServer.GetChangeset(changesetId, false, false); + + return changeset; + } + + + public Change[] GetChanges(int changesetId) + { + return _versionControlServer.GetChangesForChangeset(changesetId, false, int.MaxValue, null, null, null, true); + } + + public List GetAssociatedBranches(params int[] changesetId) + { + var branches = _versionControlServer.QueryBranchObjectOwnership(changesetId); + + return branches.Select(b => b.RootItem).ToList(); + } + public ICollection GetMergeCandidates(string sourceBranch, string targetBranch) { - var smos = _versionControlServer.GetMergeCandidates(sourceBranch, targetBranch, RecursionType.Full); + var dummy = _versionControlServer.GetMergeCandidates(sourceBranch, targetBranch, RecursionType.Full); List result = new List(); - foreach (MergeCandidate mc in smos) + foreach (MergeCandidate mc in dummy) { result.Add(mc.Changeset); } @@ -53,18 +65,31 @@ public ICollection GetMergeCandidates(string sourceBranch, string tar return result; } + public IEnumerable ListTfsProjects() + { + var result = _versionControlServer.GetAllTeamProjects(true); + return result; + } - public Change[] GetChanges(int changesetId) - { - return _versionControlServer.GetChangesForChangeset(changesetId, false, int.MaxValue, null, null, null, true); - } + public IEnumerable ListBranches(string projectName) + { + var dummy = _versionControlServer.QueryRootBranchObjects(RecursionType.OneLevel); + + List result = new List(); + foreach(BranchObject bo in dummy) + { + var ro = bo.Properties.RootItem; + + System.Diagnostics.Debug.WriteLine(ro.Item); + + if (!ro.IsDeleted && ro.Item.Replace(@"$/", "").StartsWith(projectName + @"/")) + result.Add(bo); + } + + return result; + } - public List GetAssociatedBranches(params int[] changesetId) - { - var branches = _versionControlServer.QueryBranchObjectOwnership(changesetId); - return branches.Select(b => b.RootItem).ToList(); - } - } + } } From cf4bd95475e12a90fa87845d86553cfb67e67575 Mon Sep 17 00:00:00 2001 From: Ruben Willems Date: Thu, 3 May 2018 12:03:47 +0200 Subject: [PATCH 10/18] show all branches, --> recursionType Full --- .../Providers/TeamChangesetChangesetProvider.cs | 2 +- src/AutoMerge/Services/ChangesetService.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/AutoMerge/RecentChangesets/Providers/TeamChangesetChangesetProvider.cs b/src/AutoMerge/RecentChangesets/Providers/TeamChangesetChangesetProvider.cs index a25d3d4..9833df1 100644 --- a/src/AutoMerge/RecentChangesets/Providers/TeamChangesetChangesetProvider.cs +++ b/src/AutoMerge/RecentChangesets/Providers/TeamChangesetChangesetProvider.cs @@ -69,7 +69,7 @@ protected override List GetChangesetsInternal() { var prj = changesetService.ListTfsProjects(); - var s = changesetService.ListBranches("test"); + var s = changesetService.ListBranches("Test"); var tfsChangesets = changesetService.GetMergeCandidates(_sourceBranch, _targetBranch); diff --git a/src/AutoMerge/Services/ChangesetService.cs b/src/AutoMerge/Services/ChangesetService.cs index 3f0f83f..3786151 100644 --- a/src/AutoMerge/Services/ChangesetService.cs +++ b/src/AutoMerge/Services/ChangesetService.cs @@ -74,7 +74,7 @@ public IEnumerable ListTfsProjects() public IEnumerable ListBranches(string projectName) { - var dummy = _versionControlServer.QueryRootBranchObjects(RecursionType.OneLevel); + var dummy = _versionControlServer.QueryRootBranchObjects(RecursionType.Full); List result = new List(); foreach(BranchObject bo in dummy) @@ -83,7 +83,7 @@ public IEnumerable ListBranches(string projectName) System.Diagnostics.Debug.WriteLine(ro.Item); - if (!ro.IsDeleted && ro.Item.Replace(@"$/", "").StartsWith(projectName + @"/")) + if (!ro.IsDeleted && ro.Item.Replace(@"$/", "").StartsWith(projectName + @"/")) result.Add(bo); } From e431011b255c3d3cb318dcec12e5b335ad1d2b18 Mon Sep 17 00:00:00 2001 From: "Dieter.Vantilt" Date: Tue, 8 May 2018 08:17:26 +0200 Subject: [PATCH 11/18] Adding button to fetch all changesets --- .../Base/TeamExplorerSectionViewModelBase.cs | 26 +++++------ .../Team/RecentChangesetsTeamView.xaml | 4 ++ .../Team/RecentChangesetsTeamViewModel.cs | 46 +++++++++++++++---- src/AutoMerge/Services/BranchTeamService.cs | 6 +-- src/AutoMerge/UI/AutoMergeListBox.cs | 15 +++--- 5 files changed, 64 insertions(+), 33 deletions(-) diff --git a/src/AutoMerge/Base/TeamExplorerSectionViewModelBase.cs b/src/AutoMerge/Base/TeamExplorerSectionViewModelBase.cs index 5bfb91e..736c256 100644 --- a/src/AutoMerge/Base/TeamExplorerSectionViewModelBase.cs +++ b/src/AutoMerge/Base/TeamExplorerSectionViewModelBase.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Threading.Tasks; using Microsoft.TeamFoundation.Client; using Microsoft.TeamFoundation.Common.Internal; @@ -33,11 +33,9 @@ protected virtual Task InitializeAsync(object sender, SectionInitializeEventArgs return _emptyTask; } - public async override void Initialize(object sender, SectionInitializeEventArgs e) + public override async void Initialize(object sender, SectionInitializeEventArgs e) { - ShowBusy(); - - try + await SetBusyWhileExecutingAsync(async () => { base.Initialize(sender, e); if (ServiceProvider != null) @@ -52,22 +50,24 @@ public async override void Initialize(object sender, SectionInitializeEventArgs } } await InitializeAsync(sender, e); - } - catch (Exception ex) - { - ShowError(ex.Message); - } + }); + } - HideBusy(); + public override async void Refresh() + { + await SetBusyWhileExecutingAsync(async () => + { + await RefreshAsync(); + }); } - public async override void Refresh() + protected async Task SetBusyWhileExecutingAsync(Func task) { ShowBusy(); try { - await RefreshAsync(); + await task(); } catch (Exception ex) { diff --git a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml index 87ff649..d1ef6fb 100644 --- a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml +++ b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml @@ -62,6 +62,10 @@ + + diff --git a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs index f0cb7d5..dc46255 100644 --- a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs +++ b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using AutoMerge.Prism.Command; @@ -18,10 +19,12 @@ public RecentChangesetsTeamViewModel(ILogger logger) : base(logger) SourcesBranches = new ObservableCollection(); TargetBranches = new ObservableCollection(); - MergeCommand = new DelegateCommand(Merge, CanMerge); + MergeCommand = DelegateCommand.FromAsyncHandler(MergeAsync, CanMerge); + FetchChangesetsCommand = DelegateCommand.FromAsyncHandler(FetchChangesetsAsync, CanFetchChangesets); } - public DelegateCommand MergeCommand { get; private set; } + public DelegateCommand MergeCommand { get; } + public DelegateCommand FetchChangesetsCommand { get; } public ObservableCollection SourcesBranches { get; set; } public ObservableCollection TargetBranches { get; set; } @@ -36,6 +39,8 @@ public string SourceBranch _sourceBranch = value; RaisePropertyChanged(nameof(SourceBranch)); InitializeTargetBranches(); + + FetchChangesetsCommand.RaiseCanExecuteChanged(); } } @@ -49,7 +54,7 @@ public string TargetBranch _targetBranch = value; RaisePropertyChanged(nameof(TargetBranch)); - RefreshAsync(); + FetchChangesetsCommand.RaiseCanExecuteChanged(); } } @@ -80,27 +85,46 @@ private void SelectedChangesets_CollectionChanged(object sender, System.Collecti MergeCommand.RaiseCanExecuteChanged(); } - private void Merge() + private async Task MergeAsync() { - var orderedSelectedChangesets = SelectedChangesets.OrderBy(x => x.ChangesetId).ToList(); + await SetBusyWhileExecutingAsync(async () => + { + var orderedSelectedChangesets = SelectedChangesets.OrderBy(x => x.ChangesetId).ToList(); - _branchTeamService.MergeBranches(SourceBranch, TargetBranch, orderedSelectedChangesets.First().ChangesetId, orderedSelectedChangesets.Last().ChangesetId); - _branchTeamService.AddWorkItemsAndNavigate(orderedSelectedChangesets.Select(x => x.ChangesetId)); + await Task.Run(() => _branchTeamService.MergeBranches(SourceBranch, TargetBranch, orderedSelectedChangesets.First().ChangesetId, orderedSelectedChangesets.Last().ChangesetId)); + _branchTeamService.AddWorkItemsAndNavigate(orderedSelectedChangesets.Select(x => x.ChangesetId)); + }); } private bool CanMerge() { return SelectedChangesets != null + && !IsBusy && SelectedChangesets.Any() && Changesets.Count(x => x.ChangesetId >= SelectedChangesets.Min(y => y.ChangesetId) && x.ChangesetId <= SelectedChangesets.Max(y => y.ChangesetId)) == SelectedChangesets.Count; } + private async Task FetchChangesetsAsync() + { + await SetBusyWhileExecutingAsync(async () => await RefreshAsync()); + + //This is needed because HideBusy will set IsBusy on false much later. And the raise can execute checks on this boolean + IsBusy = false; + + MergeCommand.RaiseCanExecuteChanged(); + } + + private bool CanFetchChangesets() + { + return SourceBranch != null && TargetBranch != null && !IsBusy; + } + protected override Task InitializeAsync(object sender, SectionInitializeEventArgs e) { _projectName = ProjectNameHelper.GetProjectName(ServiceProvider); //Find all sources branches. - SourcesBranches.Add("$/TestVoorAutomerge/DEV"); + SourcesBranches.Add("$/Test/Main"); _branchTeamService = new BranchTeamService(Context.TeamProjectCollection, (ITeamExplorer) ServiceProvider.GetService(typeof(ITeamExplorer))); @@ -112,7 +136,7 @@ public void InitializeTargetBranches() TargetBranches.Clear(); //Find all possible target branches - TargetBranches.Add("$/TestVoorAutomerge/MAIN"); + TargetBranches.Add("$/Test/Branches/BO1"); } public override async Task> GetChangesets() @@ -149,10 +173,12 @@ protected override void RestoreContext(SectionInitializeEventArgs e) Changesets = context.Changesets; Title = context.Title; - SelectedChangeset = context.SelectedChangeset; SelectedChangesets = context.SelectedChangesets; + SelectedChangeset = context.SelectedChangeset; SourceBranch = context.SourceBranch; TargetBranch = context.TargetBranch; + + MergeCommand.RaiseCanExecuteChanged(); } protected override string BaseTitle => "Project name: " + _projectName; diff --git a/src/AutoMerge/Services/BranchTeamService.cs b/src/AutoMerge/Services/BranchTeamService.cs index 022d0ab..c4daeaf 100644 --- a/src/AutoMerge/Services/BranchTeamService.cs +++ b/src/AutoMerge/Services/BranchTeamService.cs @@ -24,11 +24,9 @@ public BranchTeamService(TfsTeamProjectCollection tfs, ITeamExplorer teamExplore _changesetService = new ChangesetService(versionControlServer); } - public bool MergeBranches(string source, string target, int from, int to) + public void MergeBranches(string source, string target, int from, int to) { - var result = _workspace.Merge(source, target, new ChangesetVersionSpec(from), new ChangesetVersionSpec(to), LockLevel.None, RecursionType.Full, MergeOptions.None); - - return result.NoActionNeeded; + _workspace.Merge(source, target, new ChangesetVersionSpec(from), new ChangesetVersionSpec(to), LockLevel.None, RecursionType.Full, MergeOptions.None); } public void AddWorkItemsAndNavigate(IEnumerable changesetIds) diff --git a/src/AutoMerge/UI/AutoMergeListBox.cs b/src/AutoMerge/UI/AutoMergeListBox.cs index 0ba6947..c60df71 100644 --- a/src/AutoMerge/UI/AutoMergeListBox.cs +++ b/src/AutoMerge/UI/AutoMergeListBox.cs @@ -14,14 +14,17 @@ public AutoMergeListBox() private void AutoMergeListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { - foreach(var removedItem in e.RemovedItems.Cast()) + if (SelectedItemsList != null) { - SelectedItemsList.Remove(removedItem); - } + foreach (var removedItem in e.RemovedItems.Cast()) + { + SelectedItemsList.Remove(removedItem); + } - foreach(var addItem in e.AddedItems.Cast()) - { - SelectedItemsList.Add(addItem); + foreach (var addItem in e.AddedItems.Cast()) + { + SelectedItemsList.Add(addItem); + } } } From d15fc401550f9409437afdb0096f491ef78377b5 Mon Sep 17 00:00:00 2001 From: Ruben Willems Date: Thu, 17 May 2018 14:10:36 +0200 Subject: [PATCH 12/18] dummy values for testing (remove later on) --- .../Providers/TeamChangesetChangesetProvider.cs | 1 + .../RecentChangesets/Team/RecentChangesetsTeamViewModel.cs | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/AutoMerge/RecentChangesets/Providers/TeamChangesetChangesetProvider.cs b/src/AutoMerge/RecentChangesets/Providers/TeamChangesetChangesetProvider.cs index 9833df1..24b7e61 100644 --- a/src/AutoMerge/RecentChangesets/Providers/TeamChangesetChangesetProvider.cs +++ b/src/AutoMerge/RecentChangesets/Providers/TeamChangesetChangesetProvider.cs @@ -68,6 +68,7 @@ protected override List GetChangesetsInternal() if (changesetService != null) { + ///dummy calls for testing the functionality var prj = changesetService.ListTfsProjects(); var s = changesetService.ListBranches("Test"); diff --git a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs index e6a3676..779736a 100644 --- a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs +++ b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs @@ -100,7 +100,7 @@ protected override Task InitializeAsync(object sender, SectionInitializeEventArg { _projectName = ProjectNameHelper.GetProjectName(ServiceProvider); //Find all sources branches. - SourcesBranches.Add("$/TestVoorAutomerge/DEV"); + SourcesBranches.Add("$/Test/B01"); _branchTeamService = new BranchTeamService(Context.TeamProjectCollection, (ITeamExplorer) ServiceProvider.GetService(typeof(ITeamExplorer))); @@ -112,7 +112,7 @@ public void InitializeTargetBranches() TargetBranches.Clear(); //Find all possible target branches - TargetBranches.Add("$/TestVoorAutomerge/MAIN"); + TargetBranches.Add("$/Test/MAIN"); } public override async Task> GetChangesets() From 5fc01daf40d9e5df67069549f74e00a686782458 Mon Sep 17 00:00:00 2001 From: Wurzug Date: Thu, 17 May 2018 23:20:17 +0200 Subject: [PATCH 13/18] Project source en target branches --- src/AutoMerge/AutoMerge.csproj | 1 + src/AutoMerge/Helpers/CollectionExtensions.cs | 16 ++++ .../TeamChangesetChangesetProvider.cs | 13 +-- .../RecentChangesetsViewModel.cs | 6 +- .../RecentChangesetsViewModelContext.cs | 2 +- .../Solo/RecentChangesetsSoloViewModel.cs | 7 +- .../Team/RecentChangesetsTeamView.xaml | 6 ++ .../Team/RecentChangesetsTeamViewModel.cs | 90 ++++++++++++------- src/AutoMerge/Services/ChangesetService.cs | 6 +- 9 files changed, 96 insertions(+), 51 deletions(-) create mode 100644 src/AutoMerge/Helpers/CollectionExtensions.cs diff --git a/src/AutoMerge/AutoMerge.csproj b/src/AutoMerge/AutoMerge.csproj index 689f76a..8af0317 100644 --- a/src/AutoMerge/AutoMerge.csproj +++ b/src/AutoMerge/AutoMerge.csproj @@ -290,6 +290,7 @@ + diff --git a/src/AutoMerge/Helpers/CollectionExtensions.cs b/src/AutoMerge/Helpers/CollectionExtensions.cs new file mode 100644 index 0000000..eff17c1 --- /dev/null +++ b/src/AutoMerge/Helpers/CollectionExtensions.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; +using System.Collections.ObjectModel; + +namespace AutoMerge.Helpers +{ + public static class CollectionExtensions + { + public static void AddRange(this Collection list, IEnumerable itemsToAdd) + { + foreach(var itemToAdd in itemsToAdd) + { + list.Add(itemToAdd); + } + } + } +} diff --git a/src/AutoMerge/RecentChangesets/Providers/TeamChangesetChangesetProvider.cs b/src/AutoMerge/RecentChangesets/Providers/TeamChangesetChangesetProvider.cs index a25d3d4..ed8aa11 100644 --- a/src/AutoMerge/RecentChangesets/Providers/TeamChangesetChangesetProvider.cs +++ b/src/AutoMerge/RecentChangesets/Providers/TeamChangesetChangesetProvider.cs @@ -36,19 +36,15 @@ public List ListBranches(string projectName) { List result = new List(); - result.Add("Test/Main"); - result.Add("ROL-Omgeving/Main"); - - var changesetService = GetChangesetService(); if (changesetService != null) { - changesetService.ListBranches("jos"); + var branches = changesetService.ListBranches(projectName); + result.AddRange(branches.Select(x => x.Properties.RootItem.Item)); } - return result; } @@ -67,16 +63,11 @@ protected override List GetChangesetsInternal() if (changesetService != null) { - - var prj = changesetService.ListTfsProjects(); - var s = changesetService.ListBranches("test"); - var tfsChangesets = changesetService.GetMergeCandidates(_sourceBranch, _targetBranch); changesets = tfsChangesets .Select(tfsChangeset => ToChangesetViewModel(tfsChangeset, changesetService)) .ToList(); - } return changesets; diff --git a/src/AutoMerge/RecentChangesets/RecentChangesetsViewModel.cs b/src/AutoMerge/RecentChangesets/RecentChangesetsViewModel.cs index fb79fe8..8a67adb 100644 --- a/src/AutoMerge/RecentChangesets/RecentChangesetsViewModel.cs +++ b/src/AutoMerge/RecentChangesets/RecentChangesetsViewModel.cs @@ -96,12 +96,12 @@ protected override async Task InitializeAsync(object sender, SectionInitializeEv } } - protected override async Task RefreshAsync() + protected async Task GetChangesetAndUpdateTitleAsync() { Changesets.Clear(); Logger.Info("Getting changesets ..."); - var changesets = await GetChangesets(); + var changesets = await GetChangesetsAsync(); Logger.Info("Getting changesets end"); Changesets = new ObservableCollection(changesets); @@ -114,7 +114,7 @@ protected override async Task RefreshAsync() } } - public abstract Task> GetChangesets(); + public abstract Task> GetChangesetsAsync(); protected void UpdateTitle() { diff --git a/src/AutoMerge/RecentChangesets/RecentChangesetsViewModelContext.cs b/src/AutoMerge/RecentChangesets/RecentChangesetsViewModelContext.cs index 77b0a2d..2c38af9 100644 --- a/src/AutoMerge/RecentChangesets/RecentChangesetsViewModelContext.cs +++ b/src/AutoMerge/RecentChangesets/RecentChangesetsViewModelContext.cs @@ -17,7 +17,7 @@ public class RecentChangesetsTeamViewModelContext : RecentChangesetsViewModelCon public string TargetBranch { get; set; } - public ObservableCollection SelectedChangesets { get; set; } + public string SelectedProjectName { get; set; } } public class RecentChangesetsSoloViewModelContext : RecentChangesetsViewModelContext diff --git a/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloViewModel.cs b/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloViewModel.cs index 5c9ac83..b1e69c2 100644 --- a/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloViewModel.cs +++ b/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloViewModel.cs @@ -49,7 +49,7 @@ public string ChangesetIdsText } private string _changesetIdsText; - public override async Task> GetChangesets() + public override async Task> GetChangesetsAsync() { var userLogin = VersionControlNavigationHelper.GetAuthorizedUser(ServiceProvider); var changesetProvider = new MyChangesetChangesetProvider(ServiceProvider, Settings.Instance.ChangesetCount, userLogin); @@ -98,6 +98,11 @@ private void ResetAddById() ChangesetIdsText = string.Empty; } + protected override async Task RefreshAsync() + { + await GetChangesetAndUpdateTitleAsync(); + } + private async void AddChangesetByIdExecute() { ShowBusy(); diff --git a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml index d1ef6fb..163b045 100644 --- a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml +++ b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml @@ -26,6 +26,12 @@ + + + + + diff --git a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs index 77a12d2..8a12268 100644 --- a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs +++ b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs @@ -3,6 +3,7 @@ using System.Diagnostics; using System.Linq; using System.Threading.Tasks; +using AutoMerge.Helpers; using AutoMerge.Prism.Command; using Microsoft.TeamFoundation.Controls; @@ -11,13 +12,15 @@ namespace AutoMerge public class RecentChangesetsTeamViewModel : RecentChangesetsViewModel { private BranchTeamService _branchTeamService; - private string _projectName; + private TeamChangesetChangesetProvider _teamChangesetChangesetProvider; + private List _currentBranches; public RecentChangesetsTeamViewModel(ILogger logger) : base(logger) { SelectedChangesets = new ObservableCollection(); SourcesBranches = new ObservableCollection(); TargetBranches = new ObservableCollection(); + ProjectNames = new ObservableCollection(); MergeCommand = DelegateCommand.FromAsyncHandler(MergeAsync, CanMerge); FetchChangesetsCommand = DelegateCommand.FromAsyncHandler(FetchChangesetsAsync, CanFetchChangesets); @@ -26,9 +29,31 @@ public RecentChangesetsTeamViewModel(ILogger logger) : base(logger) public DelegateCommand MergeCommand { get; } public DelegateCommand FetchChangesetsCommand { get; } + public ObservableCollection ProjectNames { get; set; } public ObservableCollection SourcesBranches { get; set; } public ObservableCollection TargetBranches { get; set; } + private string _selectedProjectName; + + public string SelectedProjectName + { + get { return _selectedProjectName; } + set + { + _selectedProjectName = value; + RaisePropertyChanged(nameof(SelectedProjectName)); + + _currentBranches = _teamChangesetChangesetProvider.ListBranches(SelectedProjectName); + + Changesets.Clear(); + SourcesBranches.Clear(); + TargetBranches.Clear(); + SourcesBranches.AddRange(_currentBranches); + + UpdateTitle(); + } + } + private string _sourceBranch; public string SourceBranch @@ -65,11 +90,6 @@ public ObservableCollection SelectedChangesets get { return _selectedChangesets; } set { - if (_selectedChangesets != null) - { - _selectedChangesets.CollectionChanged -= SelectedChangesets_CollectionChanged; - } - _selectedChangesets = value; RaisePropertyChanged(nameof(SelectedChangesets)); @@ -107,10 +127,7 @@ private bool CanMerge() private async Task FetchChangesetsAsync() { - await SetBusyWhileExecutingAsync(async () => await RefreshAsync()); - - //This is needed because HideBusy will set IsBusy on false much later. And the raise can execute checks on this boolean - IsBusy = false; + await SetBusyWhileExecutingAsync(async () => await GetChangesetAndUpdateTitleAsync()); MergeCommand.RaiseCanExecuteChanged(); } @@ -122,11 +139,11 @@ private bool CanFetchChangesets() protected override Task InitializeAsync(object sender, SectionInitializeEventArgs e) { - _projectName = ProjectNameHelper.GetProjectName(ServiceProvider); - //Find all sources branches. - SourcesBranches.Add("$/Test/Main"); + _branchTeamService = new BranchTeamService(Context.TeamProjectCollection, (ITeamExplorer)ServiceProvider.GetService(typeof(ITeamExplorer))); + _teamChangesetChangesetProvider = new TeamChangesetChangesetProvider(ServiceProvider); - _branchTeamService = new BranchTeamService(Context.TeamProjectCollection, (ITeamExplorer) ServiceProvider.GetService(typeof(ITeamExplorer))); + var projectNames = _teamChangesetChangesetProvider.ListProjects(); + projectNames.ForEach(x => ProjectNames.Add(x.Name)); return base.InitializeAsync(sender, e); } @@ -134,21 +151,13 @@ protected override Task InitializeAsync(object sender, SectionInitializeEventArg public void InitializeTargetBranches() { TargetBranches.Clear(); - - //Find all possible target branches - TargetBranches.Add("$/Test/Branches/BO1"); + TargetBranches.AddRange(_currentBranches.Except(new List { SourceBranch })); } - public override async Task> GetChangesets() + public override async Task> GetChangesetsAsync() { - if (SourceBranch != null && TargetBranch != null) - { - var changesetProvider = new TeamChangesetChangesetProvider(ServiceProvider); - changesetProvider.SetSourceAndTargetBranch(SourceBranch, TargetBranch); - return await changesetProvider.GetChangesets(); - } - - return await Task.FromResult(new List()); + _teamChangesetChangesetProvider.SetSourceAndTargetBranch(SourceBranch, TargetBranch); + return await _teamChangesetChangesetProvider.GetChangesets(); } public override void SaveContext(object sender, SectionSaveContextEventArgs e) @@ -157,10 +166,9 @@ public override void SaveContext(object sender, SectionSaveContextEventArgs e) var context = new RecentChangesetsTeamViewModelContext { + SelectedProjectName = SelectedProjectName, Changesets = Changesets, Title = Title, - SelectedChangeset = SelectedChangeset, - SelectedChangesets = SelectedChangesets, SourceBranch = SourceBranch, TargetBranch = TargetBranch }; @@ -171,17 +179,35 @@ public override void SaveContext(object sender, SectionSaveContextEventArgs e) protected override void RestoreContext(SectionInitializeEventArgs e) { var context = (RecentChangesetsTeamViewModelContext) e.Context; - + + SelectedProjectName = context.SelectedProjectName; Changesets = context.Changesets; Title = context.Title; - SelectedChangesets = context.SelectedChangesets; - SelectedChangeset = context.SelectedChangeset; SourceBranch = context.SourceBranch; TargetBranch = context.TargetBranch; + } + + public override void Loaded(object sender, SectionLoadedEventArgs e) + { + base.Loaded(sender, e); + + //manuelly set to false beacause apparently Hidebusy will set isbuys on false much later... + IsBusy = false; MergeCommand.RaiseCanExecuteChanged(); + FetchChangesetsCommand.RaiseCanExecuteChanged(); + } + + public override void Dispose() + { + base.Dispose(); + + if (_selectedChangesets != null) + { + _selectedChangesets.CollectionChanged -= SelectedChangesets_CollectionChanged; + } } - protected override string BaseTitle => "Project name: " + _projectName; + protected override string BaseTitle => "Project name: " + SelectedProjectName; } } diff --git a/src/AutoMerge/Services/ChangesetService.cs b/src/AutoMerge/Services/ChangesetService.cs index 3f0f83f..c127d23 100644 --- a/src/AutoMerge/Services/ChangesetService.cs +++ b/src/AutoMerge/Services/ChangesetService.cs @@ -74,10 +74,10 @@ public IEnumerable ListTfsProjects() public IEnumerable ListBranches(string projectName) { - var dummy = _versionControlServer.QueryRootBranchObjects(RecursionType.OneLevel); + var dummy = _versionControlServer.QueryRootBranchObjects(RecursionType.Full); - List result = new List(); - foreach(BranchObject bo in dummy) + var result = new List(); + foreach(var bo in dummy) { var ro = bo.Properties.RootItem; From 5bdf8c0a1ace5f2ce02d1a3a9861a0b5d37f68a4 Mon Sep 17 00:00:00 2001 From: "Dieter.Vantilt" Date: Fri, 18 May 2018 11:47:13 +0200 Subject: [PATCH 14/18] Change to target branch --- src/AutoMerge/AutoMerge.csproj | 1 + src/AutoMerge/Branches/Branch.cs | 11 ++++++++++ .../TeamChangesetChangesetProvider.cs | 20 ++++++++++++++++--- .../Team/RecentChangesetsTeamViewModel.cs | 11 +++++++--- 4 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 src/AutoMerge/Branches/Branch.cs diff --git a/src/AutoMerge/AutoMerge.csproj b/src/AutoMerge/AutoMerge.csproj index 8af0317..3a880fb 100644 --- a/src/AutoMerge/AutoMerge.csproj +++ b/src/AutoMerge/AutoMerge.csproj @@ -251,6 +251,7 @@ + diff --git a/src/AutoMerge/Branches/Branch.cs b/src/AutoMerge/Branches/Branch.cs new file mode 100644 index 0000000..5b536ee --- /dev/null +++ b/src/AutoMerge/Branches/Branch.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; + +namespace AutoMerge.Branches +{ + public class Branch + { + public string Name { get; set; } + + public List Branches { get; set; } + } +} diff --git a/src/AutoMerge/RecentChangesets/Providers/TeamChangesetChangesetProvider.cs b/src/AutoMerge/RecentChangesets/Providers/TeamChangesetChangesetProvider.cs index ed8aa11..c896de4 100644 --- a/src/AutoMerge/RecentChangesets/Providers/TeamChangesetChangesetProvider.cs +++ b/src/AutoMerge/RecentChangesets/Providers/TeamChangesetChangesetProvider.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using AutoMerge.Branches; using Microsoft.TeamFoundation.VersionControl.Client; @@ -32,9 +33,9 @@ public List ListProjects() return result; } - public List ListBranches(string projectName) + public List ListBranches(string projectName) { - List result = new List(); + var result = new List(); var changesetService = GetChangesetService(); @@ -42,7 +43,20 @@ public List ListBranches(string projectName) { var branches = changesetService.ListBranches(projectName); - result.AddRange(branches.Select(x => x.Properties.RootItem.Item)); + foreach (var branchObject in branches) + { + var branch = new Branch(); + + branch.Name = branchObject.Properties.RootItem.Item; + branch.Branches = branchObject.ChildBranches.Where(x => !x.IsDeleted).Select(x => x.Item).ToList(); + + if (branchObject.Properties.ParentBranch != null) + { + branch.Branches.Add(branchObject.Properties.ParentBranch.Item); + } + + result.Add(branch); + } } return result; diff --git a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs index 8a12268..0cf00db 100644 --- a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs +++ b/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs @@ -3,6 +3,7 @@ using System.Diagnostics; using System.Linq; using System.Threading.Tasks; +using AutoMerge.Branches; using AutoMerge.Helpers; using AutoMerge.Prism.Command; using Microsoft.TeamFoundation.Controls; @@ -13,7 +14,7 @@ public class RecentChangesetsTeamViewModel : RecentChangesetsViewModel { private BranchTeamService _branchTeamService; private TeamChangesetChangesetProvider _teamChangesetChangesetProvider; - private List _currentBranches; + private List _currentBranches; public RecentChangesetsTeamViewModel(ILogger logger) : base(logger) { @@ -48,7 +49,7 @@ public string SelectedProjectName Changesets.Clear(); SourcesBranches.Clear(); TargetBranches.Clear(); - SourcesBranches.AddRange(_currentBranches); + SourcesBranches.AddRange(_currentBranches.Select(x => x.Name)); UpdateTitle(); } @@ -151,7 +152,11 @@ protected override Task InitializeAsync(object sender, SectionInitializeEventArg public void InitializeTargetBranches() { TargetBranches.Clear(); - TargetBranches.AddRange(_currentBranches.Except(new List { SourceBranch })); + + if (SourceBranch != null) + { + TargetBranches.AddRange(_currentBranches.Single(x => x.Name == SourceBranch).Branches); + } } public override async Task> GetChangesetsAsync() From 6b225fba8708bf3de0123708b884938de0ec1eda Mon Sep 17 00:00:00 2001 From: Ruben Willems Date: Fri, 18 May 2018 13:15:13 +0200 Subject: [PATCH 15/18] clean up code --- src/AutoMerge/AutoMerge.csproj | 40 ++++++++++--------- .../ChangesetCommentConverter.cs | 0 .../ChangesetFocusableControlNames.cs} | 6 +-- .../ChangesetProviderBase.cs | 0 .../ChangesetViewModel.cs | 0 .../ChangesetsViewModel.cs} | 4 +- .../Changesets/ChangesetsViewModelContext.cs | 14 +++++++ .../IChangesetProvider.cs | 0 .../ChangesetByIdChangesetProvider.cs | 0 .../Providers/MyChangesetChangesetProvider.cs | 0 .../TeamChangesetChangesetProvider.cs | 0 .../RecentChangesetsSection.cs | 0 .../Solo/RecentChangesetsSoloView.xaml | 0 .../Solo/RecentChangesetsSoloView.xaml.cs | 6 +-- .../Solo/RecentChangesetsSoloViewModel.cs | 8 ++-- .../RecentChangesetsSoloViewModelContext.cs | 15 +++++++ .../Team/RecentChangesetsTeamViewModel.cs | 8 ++-- .../Team/TeamChangesetsView.xaml} | 4 +- .../Team/TeamChangesetsView.xaml.cs} | 6 +-- .../Team/TeamChangesetsViewModelContext.cs | 17 ++++++++ .../TeamChangesetsSection.cs} | 8 ++-- src/AutoMerge/Guids.cs | 2 +- .../RecentChangesetsViewModelContext.cs | 29 -------------- 23 files changed, 93 insertions(+), 74 deletions(-) rename src/AutoMerge/{RecentChangesets => Changesets}/ChangesetCommentConverter.cs (100%) rename src/AutoMerge/{RecentChangesets/RecentChangesetFocusableControlNames.cs => Changesets/ChangesetFocusableControlNames.cs} (72%) rename src/AutoMerge/{RecentChangesets => Changesets}/ChangesetProviderBase.cs (100%) rename src/AutoMerge/{RecentChangesets => Changesets}/ChangesetViewModel.cs (100%) rename src/AutoMerge/{RecentChangesets/RecentChangesetsViewModel.cs => Changesets/ChangesetsViewModel.cs} (96%) create mode 100644 src/AutoMerge/Changesets/ChangesetsViewModelContext.cs rename src/AutoMerge/{RecentChangesets => Changesets}/IChangesetProvider.cs (100%) rename src/AutoMerge/{RecentChangesets => Changesets}/Providers/ChangesetByIdChangesetProvider.cs (100%) rename src/AutoMerge/{RecentChangesets => Changesets}/Providers/MyChangesetChangesetProvider.cs (100%) rename src/AutoMerge/{RecentChangesets => Changesets}/Providers/TeamChangesetChangesetProvider.cs (100%) rename src/AutoMerge/{RecentChangesets => Changesets}/RecentChangesetsSection.cs (100%) rename src/AutoMerge/{RecentChangesets => Changesets}/Solo/RecentChangesetsSoloView.xaml (100%) rename src/AutoMerge/{RecentChangesets => Changesets}/Solo/RecentChangesetsSoloView.xaml.cs (82%) rename src/AutoMerge/{RecentChangesets => Changesets}/Solo/RecentChangesetsSoloViewModel.cs (94%) create mode 100644 src/AutoMerge/Changesets/Solo/RecentChangesetsSoloViewModelContext.cs rename src/AutoMerge/{RecentChangesets => Changesets}/Team/RecentChangesetsTeamViewModel.cs (96%) rename src/AutoMerge/{RecentChangesets/Team/RecentChangesetsTeamView.xaml => Changesets/Team/TeamChangesetsView.xaml} (96%) rename src/AutoMerge/{RecentChangesets/Team/RecentChangesetsTeamView.xaml.cs => Changesets/Team/TeamChangesetsView.xaml.cs} (53%) create mode 100644 src/AutoMerge/Changesets/Team/TeamChangesetsViewModelContext.cs rename src/AutoMerge/{RecentChangesets/RecentChangesetsTeamSection.cs => Changesets/TeamChangesetsSection.cs} (58%) delete mode 100644 src/AutoMerge/RecentChangesets/RecentChangesetsViewModelContext.cs diff --git a/src/AutoMerge/AutoMerge.csproj b/src/AutoMerge/AutoMerge.csproj index 3a880fb..efe8d3a 100644 --- a/src/AutoMerge/AutoMerge.csproj +++ b/src/AutoMerge/AutoMerge.csproj @@ -275,6 +275,8 @@ + + @@ -313,26 +315,26 @@ - - - - - - - - - - - - + + + + + + + + + + + + RecentChangesetsSoloView.xaml - - - - RecentChangesetsTeamView.xaml + + + + TeamChangesetsView.xaml - + True True @@ -411,11 +413,11 @@ Designer MSBuild:Compile - + MSBuild:Compile Designer - + MSBuild:Compile Designer diff --git a/src/AutoMerge/RecentChangesets/ChangesetCommentConverter.cs b/src/AutoMerge/Changesets/ChangesetCommentConverter.cs similarity index 100% rename from src/AutoMerge/RecentChangesets/ChangesetCommentConverter.cs rename to src/AutoMerge/Changesets/ChangesetCommentConverter.cs diff --git a/src/AutoMerge/RecentChangesets/RecentChangesetFocusableControlNames.cs b/src/AutoMerge/Changesets/ChangesetFocusableControlNames.cs similarity index 72% rename from src/AutoMerge/RecentChangesets/RecentChangesetFocusableControlNames.cs rename to src/AutoMerge/Changesets/ChangesetFocusableControlNames.cs index 2f9b966..e445736 100644 --- a/src/AutoMerge/RecentChangesets/RecentChangesetFocusableControlNames.cs +++ b/src/AutoMerge/Changesets/ChangesetFocusableControlNames.cs @@ -1,9 +1,9 @@ -namespace AutoMerge +namespace AutoMerge { - public class RecentChangesetFocusableControlNames + public class ChangesetFocusableControlNames { public const string ChangesetIdTextBox = "changesetIdTextBox"; public const string AddChangesetByIdLink = "addChangesetByIdLink"; public const string ChangesetList = "changesetList"; } -} \ No newline at end of file +} diff --git a/src/AutoMerge/RecentChangesets/ChangesetProviderBase.cs b/src/AutoMerge/Changesets/ChangesetProviderBase.cs similarity index 100% rename from src/AutoMerge/RecentChangesets/ChangesetProviderBase.cs rename to src/AutoMerge/Changesets/ChangesetProviderBase.cs diff --git a/src/AutoMerge/RecentChangesets/ChangesetViewModel.cs b/src/AutoMerge/Changesets/ChangesetViewModel.cs similarity index 100% rename from src/AutoMerge/RecentChangesets/ChangesetViewModel.cs rename to src/AutoMerge/Changesets/ChangesetViewModel.cs diff --git a/src/AutoMerge/RecentChangesets/RecentChangesetsViewModel.cs b/src/AutoMerge/Changesets/ChangesetsViewModel.cs similarity index 96% rename from src/AutoMerge/RecentChangesets/RecentChangesetsViewModel.cs rename to src/AutoMerge/Changesets/ChangesetsViewModel.cs index 8a67adb..143e2b2 100644 --- a/src/AutoMerge/RecentChangesets/RecentChangesetsViewModel.cs +++ b/src/AutoMerge/Changesets/ChangesetsViewModel.cs @@ -15,11 +15,11 @@ namespace AutoMerge { - public abstract class RecentChangesetsViewModel : TeamExplorerSectionViewModelBase + public abstract class ChangesetsViewModel : TeamExplorerSectionViewModelBase { private readonly IEventAggregator _eventAggregator; - protected RecentChangesetsViewModel(ILogger logger) + protected ChangesetsViewModel(ILogger logger) : base(logger) { Title = BaseTitle; diff --git a/src/AutoMerge/Changesets/ChangesetsViewModelContext.cs b/src/AutoMerge/Changesets/ChangesetsViewModelContext.cs new file mode 100644 index 0000000..1b4fe88 --- /dev/null +++ b/src/AutoMerge/Changesets/ChangesetsViewModelContext.cs @@ -0,0 +1,14 @@ +using System.Collections.ObjectModel; + +namespace AutoMerge +{ + public class ChangesetsViewModelContext + { + public ObservableCollection Changesets { get; set; } + + public string Title { get; set; } + + public ChangesetViewModel SelectedChangeset { get; set; } + } + +} diff --git a/src/AutoMerge/RecentChangesets/IChangesetProvider.cs b/src/AutoMerge/Changesets/IChangesetProvider.cs similarity index 100% rename from src/AutoMerge/RecentChangesets/IChangesetProvider.cs rename to src/AutoMerge/Changesets/IChangesetProvider.cs diff --git a/src/AutoMerge/RecentChangesets/Providers/ChangesetByIdChangesetProvider.cs b/src/AutoMerge/Changesets/Providers/ChangesetByIdChangesetProvider.cs similarity index 100% rename from src/AutoMerge/RecentChangesets/Providers/ChangesetByIdChangesetProvider.cs rename to src/AutoMerge/Changesets/Providers/ChangesetByIdChangesetProvider.cs diff --git a/src/AutoMerge/RecentChangesets/Providers/MyChangesetChangesetProvider.cs b/src/AutoMerge/Changesets/Providers/MyChangesetChangesetProvider.cs similarity index 100% rename from src/AutoMerge/RecentChangesets/Providers/MyChangesetChangesetProvider.cs rename to src/AutoMerge/Changesets/Providers/MyChangesetChangesetProvider.cs diff --git a/src/AutoMerge/RecentChangesets/Providers/TeamChangesetChangesetProvider.cs b/src/AutoMerge/Changesets/Providers/TeamChangesetChangesetProvider.cs similarity index 100% rename from src/AutoMerge/RecentChangesets/Providers/TeamChangesetChangesetProvider.cs rename to src/AutoMerge/Changesets/Providers/TeamChangesetChangesetProvider.cs diff --git a/src/AutoMerge/RecentChangesets/RecentChangesetsSection.cs b/src/AutoMerge/Changesets/RecentChangesetsSection.cs similarity index 100% rename from src/AutoMerge/RecentChangesets/RecentChangesetsSection.cs rename to src/AutoMerge/Changesets/RecentChangesetsSection.cs diff --git a/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloView.xaml b/src/AutoMerge/Changesets/Solo/RecentChangesetsSoloView.xaml similarity index 100% rename from src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloView.xaml rename to src/AutoMerge/Changesets/Solo/RecentChangesetsSoloView.xaml diff --git a/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloView.xaml.cs b/src/AutoMerge/Changesets/Solo/RecentChangesetsSoloView.xaml.cs similarity index 82% rename from src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloView.xaml.cs rename to src/AutoMerge/Changesets/Solo/RecentChangesetsSoloView.xaml.cs index 74f7d74..80ef617 100644 --- a/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloView.xaml.cs +++ b/src/AutoMerge/Changesets/Solo/RecentChangesetsSoloView.xaml.cs @@ -17,14 +17,14 @@ public void SetFocus(string id, params object[] args) { switch (id) { - case RecentChangesetFocusableControlNames.AddChangesetByIdLink: + case ChangesetFocusableControlNames.AddChangesetByIdLink: addChangesetByIdLink.Focus(); break; - case RecentChangesetFocusableControlNames.ChangesetIdTextBox: + case ChangesetFocusableControlNames.ChangesetIdTextBox: changesetIdTextBox.FocusTextBox(); changesetIdTextBox.TextBoxControl.SelectionStart = changesetIdTextBox.TextBoxControl.Text.Length; break; - case RecentChangesetFocusableControlNames.ChangesetList: + case ChangesetFocusableControlNames.ChangesetList: if (changesetList.SelectedItem != null) { changesetList.UpdateLayout(); diff --git a/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloViewModel.cs b/src/AutoMerge/Changesets/Solo/RecentChangesetsSoloViewModel.cs similarity index 94% rename from src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloViewModel.cs rename to src/AutoMerge/Changesets/Solo/RecentChangesetsSoloViewModel.cs index b1e69c2..9374d49 100644 --- a/src/AutoMerge/RecentChangesets/Solo/RecentChangesetsSoloViewModel.cs +++ b/src/AutoMerge/Changesets/Solo/RecentChangesetsSoloViewModel.cs @@ -7,7 +7,7 @@ namespace AutoMerge.RecentChangesets.Solo { - public class RecentChangesetsSoloViewModel : RecentChangesetsViewModel + public class RecentChangesetsSoloViewModel : ChangesetsViewModel { public RecentChangesetsSoloViewModel(ILogger logger) : base(logger) { @@ -64,7 +64,7 @@ private void ToggleAddByIdExecute() ShowAddByIdChangeset = true; InvalidateCommands(); ResetAddById(); - SetMvvmFocus(RecentChangesetFocusableControlNames.ChangesetIdTextBox); + SetMvvmFocus(ChangesetFocusableControlNames.ChangesetIdTextBox); } catch (Exception ex) { @@ -84,7 +84,7 @@ private void CancelAddByIdExecute() { ShowAddByIdChangeset = false; InvalidateCommands(); - SetMvvmFocus(RecentChangesetFocusableControlNames.AddChangesetByIdLink); + SetMvvmFocus(ChangesetFocusableControlNames.AddChangesetByIdLink); ResetAddById(); } catch (Exception ex) @@ -118,7 +118,7 @@ private async void AddChangesetByIdExecute() { Changesets.Add(changesets[0]); SelectedChangeset = changesets[0]; - SetMvvmFocus(RecentChangesetFocusableControlNames.ChangesetList); + SetMvvmFocus(ChangesetFocusableControlNames.ChangesetList); UpdateTitle(); } ShowAddByIdChangeset = false; diff --git a/src/AutoMerge/Changesets/Solo/RecentChangesetsSoloViewModelContext.cs b/src/AutoMerge/Changesets/Solo/RecentChangesetsSoloViewModelContext.cs new file mode 100644 index 0000000..6a7853b --- /dev/null +++ b/src/AutoMerge/Changesets/Solo/RecentChangesetsSoloViewModelContext.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AutoMerge +{ + public class RecentChangesetsSoloViewModelContext : ChangesetsViewModelContext + { + public bool ShowAddByIdChangeset { get; set; } + + public string ChangesetIdsText { get; set; } + } +} diff --git a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs b/src/AutoMerge/Changesets/Team/RecentChangesetsTeamViewModel.cs similarity index 96% rename from src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs rename to src/AutoMerge/Changesets/Team/RecentChangesetsTeamViewModel.cs index 0cf00db..3feb0af 100644 --- a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamViewModel.cs +++ b/src/AutoMerge/Changesets/Team/RecentChangesetsTeamViewModel.cs @@ -10,13 +10,13 @@ namespace AutoMerge { - public class RecentChangesetsTeamViewModel : RecentChangesetsViewModel + public class TeamChangesetsViewModel : ChangesetsViewModel { private BranchTeamService _branchTeamService; private TeamChangesetChangesetProvider _teamChangesetChangesetProvider; private List _currentBranches; - public RecentChangesetsTeamViewModel(ILogger logger) : base(logger) + public TeamChangesetsViewModel(ILogger logger) : base(logger) { SelectedChangesets = new ObservableCollection(); SourcesBranches = new ObservableCollection(); @@ -169,7 +169,7 @@ public override void SaveContext(object sender, SectionSaveContextEventArgs e) { base.SaveContext(sender, e); - var context = new RecentChangesetsTeamViewModelContext + var context = new TeamChangesetsViewModelContext { SelectedProjectName = SelectedProjectName, Changesets = Changesets, @@ -183,7 +183,7 @@ public override void SaveContext(object sender, SectionSaveContextEventArgs e) protected override void RestoreContext(SectionInitializeEventArgs e) { - var context = (RecentChangesetsTeamViewModelContext) e.Context; + var context = (TeamChangesetsViewModelContext) e.Context; SelectedProjectName = context.SelectedProjectName; Changesets = context.Changesets; diff --git a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml b/src/AutoMerge/Changesets/Team/TeamChangesetsView.xaml similarity index 96% rename from src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml rename to src/AutoMerge/Changesets/Team/TeamChangesetsView.xaml index 163b045..11bee45 100644 --- a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml +++ b/src/AutoMerge/Changesets/Team/TeamChangesetsView.xaml @@ -1,4 +1,4 @@ - diff --git a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml.cs b/src/AutoMerge/Changesets/Team/TeamChangesetsView.xaml.cs similarity index 53% rename from src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml.cs rename to src/AutoMerge/Changesets/Team/TeamChangesetsView.xaml.cs index 002139e..97d2867 100644 --- a/src/AutoMerge/RecentChangesets/Team/RecentChangesetsTeamView.xaml.cs +++ b/src/AutoMerge/Changesets/Team/TeamChangesetsView.xaml.cs @@ -4,11 +4,11 @@ namespace AutoMerge { /// - /// Interaction logic for RecentChangesetsView.xaml + /// Interaction logic for TeamChangesetsView.xaml /// - public partial class RecentChangesetsTeamView : UserControl + public partial class TeamChangesetsView : UserControl { - public RecentChangesetsTeamView() + public TeamChangesetsView() { InitializeComponent(); } diff --git a/src/AutoMerge/Changesets/Team/TeamChangesetsViewModelContext.cs b/src/AutoMerge/Changesets/Team/TeamChangesetsViewModelContext.cs new file mode 100644 index 0000000..8771ee3 --- /dev/null +++ b/src/AutoMerge/Changesets/Team/TeamChangesetsViewModelContext.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AutoMerge +{ + public class TeamChangesetsViewModelContext : ChangesetsViewModelContext + { + public string SourceBranch { get; set; } + + public string TargetBranch { get; set; } + + public string SelectedProjectName { get; set; } + } +} diff --git a/src/AutoMerge/RecentChangesets/RecentChangesetsTeamSection.cs b/src/AutoMerge/Changesets/TeamChangesetsSection.cs similarity index 58% rename from src/AutoMerge/RecentChangesets/RecentChangesetsTeamSection.cs rename to src/AutoMerge/Changesets/TeamChangesetsSection.cs index 8722deb..f0ca209 100644 --- a/src/AutoMerge/RecentChangesets/RecentChangesetsTeamSection.cs +++ b/src/AutoMerge/Changesets/TeamChangesetsSection.cs @@ -9,17 +9,17 @@ namespace AutoMerge.RecentChangesets { - [TeamExplorerSection(GuidList.RecentChangesetsTeamSectionId, GuidList.AutoMergeTeamPageId, 11)] - public class RecentChangesetsTeamSection : TeamExplorerSectionBase + [TeamExplorerSection(GuidList.TeamChangesetsSectionId, GuidList.AutoMergeTeamPageId, 11)] + public class TeamChangesetsSection : TeamExplorerSectionBase { protected override ITeamExplorerSection CreateViewModel(SectionInitializeEventArgs e) { - return base.CreateViewModel(e) ?? new RecentChangesetsTeamViewModel(new VsLogger(ServiceProvider)); + return base.CreateViewModel(e) ?? new TeamChangesetsViewModel(new VsLogger(ServiceProvider)); } protected override object CreateView(SectionInitializeEventArgs e) { - return new RecentChangesetsTeamView(); + return new TeamChangesetsView(); } } } diff --git a/src/AutoMerge/Guids.cs b/src/AutoMerge/Guids.cs index 26b0962..297dae0 100644 --- a/src/AutoMerge/Guids.cs +++ b/src/AutoMerge/Guids.cs @@ -16,7 +16,7 @@ public static class GuidList public const string AutoMergePageId = "3B582638-5F12-4715-8719-5E5777AB4581"; public const string AutoMergeTeamPageId = "246ccc66-d988-44d4-8d1e-e84ee846acd5"; public const string RecentChangesetsSectionId = "8DA59790-3996-465E-A13F-27D64B3C2A9D"; - public const string RecentChangesetsTeamSectionId = "b7dc6fbe-c3b1-47d8-805c-cce8c3dbedfb"; + public const string TeamChangesetsSectionId = "b7dc6fbe-c3b1-47d8-805c-cce8c3dbedfb"; public const string BranchesSectionId = "36BF6F52-F4AC-44A0-9985-817B2A65B3B0"; }; diff --git a/src/AutoMerge/RecentChangesets/RecentChangesetsViewModelContext.cs b/src/AutoMerge/RecentChangesets/RecentChangesetsViewModelContext.cs deleted file mode 100644 index 2c38af9..0000000 --- a/src/AutoMerge/RecentChangesets/RecentChangesetsViewModelContext.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Collections.ObjectModel; - -namespace AutoMerge -{ - public class RecentChangesetsViewModelContext - { - public ObservableCollection Changesets { get; set; } - - public string Title { get; set; } - - public ChangesetViewModel SelectedChangeset { get; set; } - } - - public class RecentChangesetsTeamViewModelContext : RecentChangesetsViewModelContext - { - public string SourceBranch { get; set; } - - public string TargetBranch { get; set; } - - public string SelectedProjectName { get; set; } - } - - public class RecentChangesetsSoloViewModelContext : RecentChangesetsViewModelContext - { - public bool ShowAddByIdChangeset { get; set; } - - public string ChangesetIdsText { get; set; } - } -} From c09eaa2de2a7feb2979c7cebb075e24d93450bd7 Mon Sep 17 00:00:00 2001 From: Ruben Willems Date: Fri, 18 May 2018 13:50:18 +0200 Subject: [PATCH 16/18] clean up code --- src/AutoMerge/AutoMerge.csproj | 6 +++--- .../Changesets/{ => Providers}/ChangesetProviderBase.cs | 0 .../Changesets/{ => Providers}/IChangesetProvider.cs | 0 ...hangesetsTeamViewModel.cs => TeamChangesetsViewModel.cs} | 0 4 files changed, 3 insertions(+), 3 deletions(-) rename src/AutoMerge/Changesets/{ => Providers}/ChangesetProviderBase.cs (100%) rename src/AutoMerge/Changesets/{ => Providers}/IChangesetProvider.cs (100%) rename src/AutoMerge/Changesets/Team/{RecentChangesetsTeamViewModel.cs => TeamChangesetsViewModel.cs} (100%) diff --git a/src/AutoMerge/AutoMerge.csproj b/src/AutoMerge/AutoMerge.csproj index efe8d3a..cec4e40 100644 --- a/src/AutoMerge/AutoMerge.csproj +++ b/src/AutoMerge/AutoMerge.csproj @@ -317,9 +317,9 @@ - + - + @@ -334,7 +334,7 @@ TeamChangesetsView.xaml - + True True diff --git a/src/AutoMerge/Changesets/ChangesetProviderBase.cs b/src/AutoMerge/Changesets/Providers/ChangesetProviderBase.cs similarity index 100% rename from src/AutoMerge/Changesets/ChangesetProviderBase.cs rename to src/AutoMerge/Changesets/Providers/ChangesetProviderBase.cs diff --git a/src/AutoMerge/Changesets/IChangesetProvider.cs b/src/AutoMerge/Changesets/Providers/IChangesetProvider.cs similarity index 100% rename from src/AutoMerge/Changesets/IChangesetProvider.cs rename to src/AutoMerge/Changesets/Providers/IChangesetProvider.cs diff --git a/src/AutoMerge/Changesets/Team/RecentChangesetsTeamViewModel.cs b/src/AutoMerge/Changesets/Team/TeamChangesetsViewModel.cs similarity index 100% rename from src/AutoMerge/Changesets/Team/RecentChangesetsTeamViewModel.cs rename to src/AutoMerge/Changesets/Team/TeamChangesetsViewModel.cs From b4fa7a78108827f4b45ac08089e6797ede3c379b Mon Sep 17 00:00:00 2001 From: Ruben Willems Date: Fri, 15 Jun 2018 10:51:54 +0200 Subject: [PATCH 17/18] set .Net target framework back to 4.6.2 --- src/AutoMerge.Tests/AutoMerge.Tests.csproj | 2 +- src/AutoMerge/AutoMerge.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/AutoMerge.Tests/AutoMerge.Tests.csproj b/src/AutoMerge.Tests/AutoMerge.Tests.csproj index b898e53..e1b7b79 100644 --- a/src/AutoMerge.Tests/AutoMerge.Tests.csproj +++ b/src/AutoMerge.Tests/AutoMerge.Tests.csproj @@ -11,7 +11,7 @@ AutoMerge.Tests AutoMerge.Tests v4.5 - v4.6.1 + v4.6.2 512 ea07ad34 diff --git a/src/AutoMerge/AutoMerge.csproj b/src/AutoMerge/AutoMerge.csproj index cec4e40..21b69c0 100644 --- a/src/AutoMerge/AutoMerge.csproj +++ b/src/AutoMerge/AutoMerge.csproj @@ -23,7 +23,7 @@ True Key.snk v4.5 - v4.6.1 + v4.6.2 true From 38e9251c6125a84c231fca17cc7cea751713b9e2 Mon Sep 17 00:00:00 2001 From: Ruben Willems Date: Tue, 19 Jun 2018 13:22:56 +0200 Subject: [PATCH 18/18] fix build ? removed newer C# syntax features --- src/AutoMerge/AutoMerge.csproj | 846 +++++++++--------- .../ChangesetByIdChangesetProvider.cs | 2 +- .../Providers/ChangesetProviderBase.cs | 5 +- .../Providers/MyChangesetChangesetProvider.cs | 2 +- .../Solo/RecentChangesetsSoloViewModel.cs | 8 +- .../Team/TeamChangesetsViewModel.cs | 29 +- src/AutoMerge/Services/BranchTeamService.cs | 6 +- 7 files changed, 459 insertions(+), 439 deletions(-) diff --git a/src/AutoMerge/AutoMerge.csproj b/src/AutoMerge/AutoMerge.csproj index 21b69c0..11c43e0 100644 --- a/src/AutoMerge/AutoMerge.csproj +++ b/src/AutoMerge/AutoMerge.csproj @@ -1,448 +1,448 @@ - + - - $(VisualStudioVersion) - 12.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - Program - $(DevEnvDir)\devenv.exe - /rootsuffix Exp - - - - - Debug - AnyCPU - 2.0 - {726ED85E-2274-4D95-B822-B2CFE2CE44B9} - {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - Properties - AutoMerge - AutoMerge - True - Key.snk - v4.5 - v4.6.2 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - true - - - - - ..\..\lib\System.Windows.Interactivity.WPF.2.0.20525\lib\net40\Microsoft.Expression.Interactions.dll - True - - - False - - - False - - - False - - - False - - - False - - - true - - - true - - - False - - - False - - - False - - - False - - - False - - - - - - - - - - - - - ..\..\lib\System.Windows.Interactivity.WPF.2.0.20525\lib\net40\System.Windows.Interactivity.dll - True - - - - - - - - - - - - - - - - - - - - False + + $(VisualStudioVersion) + 12.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + Program + $(DevEnvDir)\devenv.exe + /rootsuffix Exp + + + + + Debug + AnyCPU + 2.0 + {726ED85E-2274-4D95-B822-B2CFE2CE44B9} + {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Properties + AutoMerge + AutoMerge + True + Key.snk + v4.5 + v4.6.2 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + true + + + + + ..\..\lib\System.Windows.Interactivity.WPF.2.0.20525\lib\net40\Microsoft.Expression.Interactions.dll + True - - False + + False - - False + + False - - False + + False - - False + + False - - False + + False - - - - - - C:\Program Files\Common Files\microsoft shared\Team Foundation Server\14.0\Microsoft.TeamFoundation.Client.dll - False + + true - - C:\Program Files\Common Files\microsoft shared\Team Foundation Server\14.0\Microsoft.TeamFoundation.Common.dll - False + + true - - C:\Program Files\Common Files\microsoft shared\Team Foundation Server\14.0\Microsoft.TeamFoundation.Controls.dll - False + + False - - C:\Program Files\Common Files\microsoft shared\Team Foundation Server\14.0\Microsoft.TeamFoundation.VersionControl.Client.dll - False + + False - - C:\Program Files\Common Files\microsoft shared\Team Foundation Server\14.0\Microsoft.TeamFoundation.VersionControl.Common.dll - False + + False - - C:\Program Files\Common Files\microsoft shared\Team Foundation Server\14.0\Microsoft.TeamFoundation.WorkItemTracking.Client.dll - False + + False - - - - - - - C:\Program Files\Common Files\microsoft shared\Team Foundation Server\15.0\Microsoft.TeamFoundation.Client.dll - False + + False - - C:\Program Files\Common Files\microsoft shared\Team Foundation Server\15.0\Microsoft.TeamFoundation.Common.dll - False + + + + + + + + + + + + ..\..\lib\System.Windows.Interactivity.WPF.2.0.20525\lib\net40\System.Windows.Interactivity.dll + True - - C:\Program Files\Common Files\microsoft shared\Team Foundation Server\15.0\Microsoft.TeamFoundation.Controls.dll - False + + + + + + + + + + + + + + + + + + + False + + + False + + + False + + + False + + + False + + + False + + + + + + + C:\Program Files\Common Files\microsoft shared\Team Foundation Server\14.0\Microsoft.TeamFoundation.Client.dll + False + + + C:\Program Files\Common Files\microsoft shared\Team Foundation Server\14.0\Microsoft.TeamFoundation.Common.dll + False + + + C:\Program Files\Common Files\microsoft shared\Team Foundation Server\14.0\Microsoft.TeamFoundation.Controls.dll + False + + + C:\Program Files\Common Files\microsoft shared\Team Foundation Server\14.0\Microsoft.TeamFoundation.VersionControl.Client.dll + False + + + C:\Program Files\Common Files\microsoft shared\Team Foundation Server\14.0\Microsoft.TeamFoundation.VersionControl.Common.dll + False + + + C:\Program Files\Common Files\microsoft shared\Team Foundation Server\14.0\Microsoft.TeamFoundation.WorkItemTracking.Client.dll + False + + + + + + + + C:\Program Files\Common Files\microsoft shared\Team Foundation Server\15.0\Microsoft.TeamFoundation.Client.dll + False + + + C:\Program Files\Common Files\microsoft shared\Team Foundation Server\15.0\Microsoft.TeamFoundation.Common.dll + False + + + C:\Program Files\Common Files\microsoft shared\Team Foundation Server\15.0\Microsoft.TeamFoundation.Controls.dll + False + + + C:\Program Files\Common Files\microsoft shared\Team Foundation Server\15.0\Microsoft.TeamFoundation.VersionControl.Client.dll + False + + + C:\Program Files\Common Files\microsoft shared\Team Foundation Server\15.0\Microsoft.TeamFoundation.VersionControl.Common.dll + False + + + C:\Program Files\Common Files\microsoft shared\Team Foundation Server\15.0\Microsoft.TeamFoundation.WorkItemTracking.Client.dll + False + + + + + + + True + ..\..\lib\EnvDTE.8.0.1\lib\net10\EnvDTE.dll + True - - C:\Program Files\Common Files\microsoft shared\Team Foundation Server\15.0\Microsoft.TeamFoundation.VersionControl.Client.dll - False + + True + ..\..\lib\EnvDTE100.10.0.1\lib\net20\EnvDTE100.dll + True - - C:\Program Files\Common Files\microsoft shared\Team Foundation Server\15.0\Microsoft.TeamFoundation.VersionControl.Common.dll - False + + True + ..\..\lib\EnvDTE80.8.0.1\lib\net10\EnvDTE80.dll + True - - C:\Program Files\Common Files\microsoft shared\Team Foundation Server\15.0\Microsoft.TeamFoundation.WorkItemTracking.Client.dll - False + + True + ..\..\lib\EnvDTE90.9.0.1\lib\net10\EnvDTE90.dll + True - - - - - - True - ..\..\lib\EnvDTE.8.0.1\lib\net10\EnvDTE.dll - True - - - True - ..\..\lib\EnvDTE100.10.0.1\lib\net20\EnvDTE100.dll - True - - - True - ..\..\lib\EnvDTE80.8.0.1\lib\net10\EnvDTE80.dll - True - - - True - ..\..\lib\EnvDTE90.9.0.1\lib\net10\EnvDTE90.dll - True - - - True - ..\..\lib\EnvDTE90a.9.0.1\lib\net10\EnvDTE90a.dll - True - - - {1CBA492E-7263-47BB-87FE-639000619B15} - 8 - 0 - 0 - primary - False - False - - - {00020430-0000-0000-C000-000000000046} - 2 - 0 - 0 - primary - False - False - - - - - - - - - - - - - - - - - - - BranchesView.xaml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SplitButton.xaml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - RecentChangesetsSoloView.xaml - - - - - TeamChangesetsView.xaml - - - - True - True - Resources.resx - - - - - - - - - - - - - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - true - VSPackage - - - - - - - - LICENSE.txt - true - - - RELEASE_NOTES.md - true - - - Always - true - - - - Always - true - - - - - - Designer - - - - - - - - - - - - - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - Designer - MSBuild:Compile - - - - - true - - - - - - - - - - + + + + + + + + + + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + Designer + MSBuild:Compile + + + + + true + + + + + + + + + + - \ No newline at end of file + diff --git a/src/AutoMerge/Changesets/Providers/ChangesetByIdChangesetProvider.cs b/src/AutoMerge/Changesets/Providers/ChangesetByIdChangesetProvider.cs index 2ccf209..2d38b38 100644 --- a/src/AutoMerge/Changesets/Providers/ChangesetByIdChangesetProvider.cs +++ b/src/AutoMerge/Changesets/Providers/ChangesetByIdChangesetProvider.cs @@ -12,7 +12,7 @@ public ChangesetByIdChangesetProvider(IServiceProvider serviceProvider, IEnumera : base(serviceProvider) { if (changesetIds == null) - throw new ArgumentNullException(nameof(changesetIds)); + throw new ArgumentNullException("changesetIds"); _changesetIds = changesetIds; } diff --git a/src/AutoMerge/Changesets/Providers/ChangesetProviderBase.cs b/src/AutoMerge/Changesets/Providers/ChangesetProviderBase.cs index c908866..fc8446c 100644 --- a/src/AutoMerge/Changesets/Providers/ChangesetProviderBase.cs +++ b/src/AutoMerge/Changesets/Providers/ChangesetProviderBase.cs @@ -57,6 +57,9 @@ private ChangesetService InitChangesetService() return null; } - protected IServiceProvider ServiceProvider => _serviceProvider; + protected IServiceProvider ServiceProvider() + { + return _serviceProvider; + } } } diff --git a/src/AutoMerge/Changesets/Providers/MyChangesetChangesetProvider.cs b/src/AutoMerge/Changesets/Providers/MyChangesetChangesetProvider.cs index e93dba4..ea3b9b1 100644 --- a/src/AutoMerge/Changesets/Providers/MyChangesetChangesetProvider.cs +++ b/src/AutoMerge/Changesets/Providers/MyChangesetChangesetProvider.cs @@ -26,7 +26,7 @@ protected override List GetChangesetsInternal() if (changesetService != null) { - var projectName = ProjectNameHelper.GetProjectName(ServiceProvider); + var projectName = ProjectNameHelper.GetProjectName(ServiceProvider()); var tfsChangesets = changesetService.GetUserChangesets(projectName, _userLogin, _maxChangesetCount); changesets = tfsChangesets .Select(tfsChangeset => ToChangesetViewModel(tfsChangeset, changesetService)) diff --git a/src/AutoMerge/Changesets/Solo/RecentChangesetsSoloViewModel.cs b/src/AutoMerge/Changesets/Solo/RecentChangesetsSoloViewModel.cs index 9374d49..e1b5d8b 100644 --- a/src/AutoMerge/Changesets/Solo/RecentChangesetsSoloViewModel.cs +++ b/src/AutoMerge/Changesets/Solo/RecentChangesetsSoloViewModel.cs @@ -197,6 +197,12 @@ protected override void RestoreContext(SectionInitializeEventArgs e) Title = context.Title; } - protected override string BaseTitle => Resources.RecentChangesetSectionName; + protected override string BaseTitle + { + get + { + return Resources.RecentChangesetSectionName; + } + } } } diff --git a/src/AutoMerge/Changesets/Team/TeamChangesetsViewModel.cs b/src/AutoMerge/Changesets/Team/TeamChangesetsViewModel.cs index 3feb0af..cfb2fe7 100644 --- a/src/AutoMerge/Changesets/Team/TeamChangesetsViewModel.cs +++ b/src/AutoMerge/Changesets/Team/TeamChangesetsViewModel.cs @@ -27,8 +27,8 @@ public TeamChangesetsViewModel(ILogger logger) : base(logger) FetchChangesetsCommand = DelegateCommand.FromAsyncHandler(FetchChangesetsAsync, CanFetchChangesets); } - public DelegateCommand MergeCommand { get; } - public DelegateCommand FetchChangesetsCommand { get; } + public DelegateCommand MergeCommand { get; private set; } + public DelegateCommand FetchChangesetsCommand { get; private set; } public ObservableCollection ProjectNames { get; set; } public ObservableCollection SourcesBranches { get; set; } @@ -42,7 +42,7 @@ public string SelectedProjectName set { _selectedProjectName = value; - RaisePropertyChanged(nameof(SelectedProjectName)); + RaisePropertyChanged("SelectedProjectName"); _currentBranches = _teamChangesetChangesetProvider.ListBranches(SelectedProjectName); @@ -63,7 +63,7 @@ public string SourceBranch set { _sourceBranch = value; - RaisePropertyChanged(nameof(SourceBranch)); + RaisePropertyChanged("SourceBranch"); InitializeTargetBranches(); FetchChangesetsCommand.RaiseCanExecuteChanged(); @@ -78,7 +78,7 @@ public string TargetBranch set { _targetBranch = value; - RaisePropertyChanged(nameof(TargetBranch)); + RaisePropertyChanged("TargetBranch"); FetchChangesetsCommand.RaiseCanExecuteChanged(); } @@ -92,12 +92,12 @@ public ObservableCollection SelectedChangesets set { _selectedChangesets = value; - RaisePropertyChanged(nameof(SelectedChangesets)); + RaisePropertyChanged("SelectedChangesets"); if (_selectedChangesets != null) { _selectedChangesets.CollectionChanged += SelectedChangesets_CollectionChanged; - } + } } } @@ -183,7 +183,7 @@ public override void SaveContext(object sender, SectionSaveContextEventArgs e) protected override void RestoreContext(SectionInitializeEventArgs e) { - var context = (TeamChangesetsViewModelContext) e.Context; + var context = (TeamChangesetsViewModelContext)e.Context; SelectedProjectName = context.SelectedProjectName; Changesets = context.Changesets; @@ -191,12 +191,12 @@ protected override void RestoreContext(SectionInitializeEventArgs e) SourceBranch = context.SourceBranch; TargetBranch = context.TargetBranch; } - + public override void Loaded(object sender, SectionLoadedEventArgs e) { base.Loaded(sender, e); - //manuelly set to false beacause apparently Hidebusy will set isbuys on false much later... + //manually set to false because apparently HideBusy will set isBusy on false much later... IsBusy = false; MergeCommand.RaiseCanExecuteChanged(); @@ -213,6 +213,13 @@ public override void Dispose() } } - protected override string BaseTitle => "Project name: " + SelectedProjectName; + protected override string BaseTitle + { + get + { + return "Project name: " + SelectedProjectName; + } + } + } } diff --git a/src/AutoMerge/Services/BranchTeamService.cs b/src/AutoMerge/Services/BranchTeamService.cs index c4daeaf..7b150ed 100644 --- a/src/AutoMerge/Services/BranchTeamService.cs +++ b/src/AutoMerge/Services/BranchTeamService.cs @@ -36,7 +36,11 @@ public void AddWorkItemsAndNavigate(IEnumerable changesetIds) foreach(var changesetId in changesetIds) { var changeSet = _changesetService.GetChangeset(changesetId); - workItemIds.AddRange(changeSet.AssociatedWorkItems?.Select(x => x.Id) ?? new List()); + + if (changeSet != null && changeSet.AssociatedWorkItems != null) + { + workItemIds.AddRange(changeSet.AssociatedWorkItems.Select(x => x.Id)); + } } var pendingChangePage = (TeamExplorerPageBase) _teamExplorer.NavigateToPage(new Guid(TeamExplorerPageIds.PendingChanges), null);