From 722395dffc8da491fcb50f393933ed02b7c94ded Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 8 Nov 2017 14:49:30 -0500 Subject: [PATCH 01/35] Removing chunks from tests that no longer make sense --- .../Events/RepositoryManagerTests.cs | 118 +----------------- .../Events/IRepositoryManagerListener.cs | 11 -- 2 files changed, 2 insertions(+), 127 deletions(-) diff --git a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs index 8d18690f8..106d800a3 100644 --- a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs +++ b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs @@ -11,7 +11,7 @@ namespace IntegrationTests { - [TestFixture, Ignore] + [TestFixture] class RepositoryManagerTests : BaseGitEnvironmentTest { private RepositoryManagerEvents repositoryManagerEvents; @@ -67,32 +67,14 @@ public async Task ShouldDetectFileChanges() var repositoryManagerListener = Substitute.For(); repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); - var expected = new GitStatus { - Behind = 1, - LocalBranch = "master", - RemoteBranch = "origin/master", - Entries = - new List { - new GitStatusEntry("foobar.txt", TestRepoMasterCleanSynchronized.Combine("foobar.txt"), - "foobar.txt", GitFileStatus.Untracked) - } - }; - - var result = new GitStatus(); - //TODO: Figure this out - //Environment.Repository.OnStatusChanged += status => { result = status; }; - var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt"); foobarTxt.WriteAllText("foobar"); await TaskManager.Wait(); RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); - repositoryManagerEvents.WaitForStatusUpdated(); repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.Received().OnStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock); repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); @@ -101,8 +83,6 @@ public async Task ShouldDetectFileChanges() repositoryManagerListener.DidNotReceive().OnLocalBranchRemoved(Args.String); repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); - - result.AssertEqual(expected); } [Test] @@ -114,22 +94,6 @@ public async Task ShouldAddAndCommitFiles() repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); var expectedLocalBranch = "master"; - var expectedAfterChanges = new GitStatus { - Behind = 1, - LocalBranch = expectedLocalBranch, - RemoteBranch = "origin/master", - Entries = - new List { - new GitStatusEntry("Assets\\TestDocument.txt", - TestRepoMasterCleanSynchronized.Combine("Assets", "TestDocument.txt"), - "Assets\\TestDocument.txt", GitFileStatus.Modified), - new GitStatusEntry("foobar.txt", TestRepoMasterCleanSynchronized.Combine("foobar.txt"), - "foobar.txt", GitFileStatus.Untracked) - } - }; - - var result = new GitStatus(); - //RepositoryManager.OnStatusUpdated += status => { result = status; }; var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt"); foobarTxt.WriteAllText("foobar"); @@ -142,15 +106,10 @@ public async Task ShouldAddAndCommitFiles() //Intentionally wait two cycles, in case the first cycle did not pick up all events RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); - repositoryManagerEvents.WaitForStatusUpdated(); RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); - repositoryManagerEvents.WaitForStatusUpdated(); - repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.Received().OnStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock); repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); @@ -160,8 +119,6 @@ public async Task ShouldAddAndCommitFiles() repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); - result.AssertEqual(expectedAfterChanges); - repositoryManagerListener.ClearReceivedCalls(); repositoryManagerEvents.Reset(); @@ -174,8 +131,6 @@ await RepositoryManager repositoryManagerEvents.WaitForNotBusy(); repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().OnStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock); repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); @@ -186,7 +141,7 @@ await RepositoryManager repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); } - [Test, Ignore("Fails often")] + [Test] public async Task ShouldAddAndCommitAllFiles() { await Initialize(TestRepoMasterCleanSynchronized); @@ -195,23 +150,6 @@ public async Task ShouldAddAndCommitAllFiles() repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); var expectedLocalBranch = "master"; - var expectedAfterChanges = new GitStatus { - Behind = 1, - LocalBranch = expectedLocalBranch, - RemoteBranch = "origin/master", - Entries = - new List { - new GitStatusEntry("Assets\\TestDocument.txt", - TestRepoMasterCleanSynchronized.Combine("Assets", "TestDocument.txt"), - "Assets\\TestDocument.txt", GitFileStatus.Modified), - new GitStatusEntry("foobar.txt", TestRepoMasterCleanSynchronized.Combine("foobar.txt"), - "foobar.txt", GitFileStatus.Untracked) - } - }; - - var result = new GitStatus(); - //TODO: Figure this out - //RepositoryManager.OnStatusUpdated += status => { result = status; }; var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt"); foobarTxt.WriteAllText("foobar"); @@ -222,11 +160,8 @@ public async Task ShouldAddAndCommitAllFiles() await TaskManager.Wait(); RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); - repositoryManagerEvents.WaitForStatusUpdated(); repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.Received().OnStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock); repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); @@ -236,8 +171,6 @@ public async Task ShouldAddAndCommitAllFiles() repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); - result.AssertEqual(expectedAfterChanges); - repositoryManagerListener.ClearReceivedCalls(); repositoryManagerEvents.Reset(); @@ -250,8 +183,6 @@ await RepositoryManager repositoryManagerEvents.WaitForNotBusy(); repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().OnStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock); repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); @@ -271,15 +202,6 @@ public async Task ShouldDetectBranchChange() repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); var expectedLocalBranch = "feature/document"; - var expected = new GitStatus { - LocalBranch = expectedLocalBranch, - RemoteBranch = "origin/feature/document", - Entries = new List() - }; - - var result = new GitStatus(); - //TODO: Figure this out - //RepositoryManager.OnStatusUpdated += status => { result = status; }; Logger.Trace("Starting test"); @@ -288,11 +210,8 @@ public async Task ShouldDetectBranchChange() await TaskManager.Wait(); RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); - repositoryManagerEvents.WaitForStatusUpdated(); repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.Received().OnStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock); repositoryManagerListener.Received().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); @@ -302,8 +221,6 @@ public async Task ShouldDetectBranchChange() repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); - result.AssertEqual(expected); - Repository.Name.Should().Be("IOTestsRepo"); Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); Repository.Owner.Should().Be("EvilStanleyGoldman"); @@ -343,8 +260,6 @@ public async Task ShouldDetectBranchDelete() repositoryManagerEvents.WaitForNotBusy(); repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().OnStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock); repositoryManagerListener.Received().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.Received().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.Received().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); @@ -392,8 +307,6 @@ public async Task ShouldDetectBranchCreate() repositoryManagerEvents.WaitForNotBusy(); repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().OnStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock); repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); @@ -437,8 +350,6 @@ public async Task ShouldDetectBranchCreate() repositoryManagerEvents.WaitForNotBusy(); repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().OnStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock); repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); @@ -520,8 +431,6 @@ public async Task ShouldDetectChangesToRemotes() repositoryManagerEvents.OnLocalBranchListUpdated.WaitOne(TimeSpan.FromSeconds(1)); repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().OnStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock); repositoryManagerListener.Received().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.Received().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.Received().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); @@ -554,8 +463,6 @@ public async Task ShouldDetectChangesToRemotes() repositoryManagerEvents.OnLocalBranchListUpdated.WaitOne(TimeSpan.FromSeconds(1)); repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().OnStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock); repositoryManagerListener.Received().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.Received().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.Received().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); @@ -634,8 +541,6 @@ await RepositoryManager.CreateBranch("branch2", "another/master") repositoryManagerEvents.WaitForNotBusy(); repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().OnStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock); repositoryManagerListener.Received().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.Received().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.Received().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); @@ -686,8 +591,6 @@ await RepositoryManager.SwitchBranch("branch2") repositoryManagerEvents.WaitForHeadUpdated(); repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.Received().OnStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock); repositoryManagerListener.Received().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); @@ -735,25 +638,12 @@ public async Task ShouldDetectGitPull() var repositoryManagerListener = Substitute.For(); repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); - var expected = new GitStatus { - LocalBranch = "master", - RemoteBranch = "origin/master", - Entries = new List() - }; - - var result = new GitStatus(); - //TODO: Figure this out - //RepositoryManager.OnStatusUpdated += status => { result = status; }; - await RepositoryManager.Pull("origin", "master").StartAsAsync(); await TaskManager.Wait(); RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); - repositoryManagerEvents.WaitForStatusUpdated(); repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.Received().OnStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock); repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); @@ -763,8 +653,6 @@ public async Task ShouldDetectGitPull() repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); - result.AssertEqual(expected); - Repository.Name.Should().Be("IOTestsRepo"); Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); Repository.Owner.Should().Be("EvilStanleyGoldman"); @@ -832,8 +720,6 @@ public async Task ShouldDetectGitFetch() repositoryManagerEvents.WaitForNotBusy(); repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().OnStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock); repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); diff --git a/src/tests/TestUtils/Events/IRepositoryManagerListener.cs b/src/tests/TestUtils/Events/IRepositoryManagerListener.cs index 2d43f6304..f232b0fe4 100644 --- a/src/tests/TestUtils/Events/IRepositoryManagerListener.cs +++ b/src/tests/TestUtils/Events/IRepositoryManagerListener.cs @@ -10,8 +10,6 @@ namespace TestUtils.Events interface IRepositoryManagerListener { void OnIsBusyChanged(bool busy); - void OnStatusUpdated(GitStatus status); - void OnLocksUpdated(IEnumerable locks); void OnLocalBranchListUpdated(Dictionary branchList); void OnRemoteBranchListUpdated(Dictionary remotesList, Dictionary> remoteBranchList); void OnLocalBranchUpdated(string name); @@ -27,7 +25,6 @@ class RepositoryManagerEvents { public EventWaitHandle OnIsBusy { get; } = new AutoResetEvent(false); public EventWaitHandle OnIsNotBusy { get; } = new AutoResetEvent(false); - public EventWaitHandle OnStatusUpdated { get; } = new AutoResetEvent(false); public EventWaitHandle OnLocksUpdated { get; } = new AutoResetEvent(false); public EventWaitHandle OnCurrentBranchAndRemoteUpdated { get; } = new AutoResetEvent(false); public EventWaitHandle OnHeadUpdated { get; } = new AutoResetEvent(false); @@ -44,7 +41,6 @@ public void Reset() { OnIsBusy.Reset(); OnIsNotBusy.Reset(); - OnStatusUpdated.Reset(); OnLocksUpdated.Reset(); OnCurrentBranchAndRemoteUpdated.Reset(); OnHeadUpdated.Reset(); @@ -64,11 +60,6 @@ public void WaitForNotBusy(int seconds = 1) OnIsNotBusy.WaitOne(TimeSpan.FromSeconds(seconds)); } - public void WaitForStatusUpdated(int seconds = 1) - { - OnStatusUpdated.WaitOne(TimeSpan.FromSeconds(seconds)); - } - public void WaitForHeadUpdated(int seconds = 1) { OnHeadUpdated.WaitOne(TimeSpan.FromSeconds(seconds)); @@ -149,8 +140,6 @@ public static void AttachListener(this IRepositoryManagerListener listener, public static void AssertDidNotReceiveAnyCalls(this IRepositoryManagerListener repositoryManagerListener) { repositoryManagerListener.DidNotReceive().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().OnStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock); repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); From eaa2c3e82c73a250416b277154be305c882b8e1a Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 8 Nov 2017 15:02:37 -0500 Subject: [PATCH 02/35] Removing testing of Repository from testing of RepositoryManager --- .../BaseGitEnvironmentTest.cs | 9 +- .../Events/RepositoryManagerTests.cs | 363 +----------------- 2 files changed, 18 insertions(+), 354 deletions(-) diff --git a/src/tests/IntegrationTests/BaseGitEnvironmentTest.cs b/src/tests/IntegrationTests/BaseGitEnvironmentTest.cs index 892878acf..d9a74da97 100644 --- a/src/tests/IntegrationTests/BaseGitEnvironmentTest.cs +++ b/src/tests/IntegrationTests/BaseGitEnvironmentTest.cs @@ -9,7 +9,7 @@ namespace IntegrationTests class BaseGitEnvironmentTest : BaseGitRepoTest { protected async Task Initialize(NPath repoPath, NPath environmentPath = null, - bool enableEnvironmentTrace = false) + bool enableEnvironmentTrace = false, bool initializeRepository = true) { TaskManager = new TaskManager(); SyncContext = new ThreadSynchronizationContext(TaskManager.Token); @@ -34,8 +34,11 @@ protected async Task Initialize(NPath repoPath, NPath environmentP RepositoryManager = GitHub.Unity.RepositoryManager.CreateInstance(Platform, TaskManager, GitClient, repoPath); RepositoryManager.Initialize(); - Environment.Repository = new Repository(repoPath, cacheContainer); - Environment.Repository.Initialize(RepositoryManager); + if (initializeRepository) + { + Environment.Repository = new Repository(repoPath, cacheContainer); + Environment.Repository.Initialize(RepositoryManager); + } RepositoryManager.Start(); diff --git a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs index 106d800a3..2069604fd 100644 --- a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs +++ b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs @@ -25,44 +25,21 @@ public override void OnSetup() [Test] public async Task ShouldDoNothingOnInitialize() { - await Initialize(TestRepoMasterCleanSynchronized); + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); var repositoryManagerListener = Substitute.For(); repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); RepositoryManager.WaitForEvents(); - repositoryManagerEvents.WaitForNotBusy(2); + repositoryManagerEvents.WaitForNotBusy(); repositoryManagerListener.AssertDidNotReceiveAnyCalls(); - - Repository.Name.Should().Be("IOTestsRepo"); - Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); - Repository.Owner.Should().Be("EvilStanleyGoldman"); - Repository.LocalPath.Should().Be(TestRepoMasterCleanSynchronized); - Repository.IsGitHub.Should().BeTrue(); - Repository.CurrentBranchName.Should().Be("master"); - Repository.CurrentBranch.HasValue.Should().BeTrue(); - Repository.CurrentBranch.Value.Name.Should().Be("master"); - Repository.CurrentRemote.HasValue.Should().BeTrue(); - Repository.CurrentRemote.Value.Name.Should().Be("origin"); - Repository.CurrentRemote.Value.Url.Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); - Repository.LocalBranches.Should().BeEquivalentTo(new[] { - new GitBranch("master", "origin/master", true), - new GitBranch("feature/document", "origin/feature/document", false), - new GitBranch("feature/other-feature", "origin/feature/other-feature", false), - }); - Repository.Remotes.Should().BeEquivalentTo(new GitRemote("origin", "https://github.com/EvilStanleyGoldman/IOTestsRepo.git")); - Repository.RemoteBranches.Should().BeEquivalentTo(new[] { - new GitBranch("origin/master", "[None]", false), - new GitBranch("origin/feature/document-2", "[None]", false), - new GitBranch("origin/feature/other-feature", "[None]", false), - }); } [Test] public async Task ShouldDetectFileChanges() { - await Initialize(TestRepoMasterCleanSynchronized); + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); var repositoryManagerListener = Substitute.For(); repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); @@ -88,7 +65,7 @@ public async Task ShouldDetectFileChanges() [Test] public async Task ShouldAddAndCommitFiles() { - await Initialize(TestRepoMasterCleanSynchronized); + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); var repositoryManagerListener = Substitute.For(); repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); @@ -144,7 +121,7 @@ await RepositoryManager [Test] public async Task ShouldAddAndCommitAllFiles() { - await Initialize(TestRepoMasterCleanSynchronized); + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); var repositoryManagerListener = Substitute.For(); repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); @@ -196,7 +173,7 @@ await RepositoryManager [Test] public async Task ShouldDetectBranchChange() { - await Initialize(TestRepoMasterCleanSynchronized); + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); var repositoryManagerListener = Substitute.For(); repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); @@ -220,35 +197,12 @@ public async Task ShouldDetectBranchChange() repositoryManagerListener.DidNotReceive().OnLocalBranchRemoved(Args.String); repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); - - Repository.Name.Should().Be("IOTestsRepo"); - Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); - Repository.Owner.Should().Be("EvilStanleyGoldman"); - Repository.LocalPath.Should().Be(TestRepoMasterCleanSynchronized); - Repository.IsGitHub.Should().BeTrue(); - Repository.CurrentBranchName.Should().Be("feature/document"); - Repository.CurrentBranch.HasValue.Should().BeTrue(); - Repository.CurrentBranch.Value.Name.Should().Be("feature/document"); - Repository.CurrentRemote.HasValue.Should().BeTrue(); - Repository.CurrentRemote.Value.Name.Should().Be("origin"); - Repository.CurrentRemote.Value.Url.Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); - Repository.LocalBranches.Should().BeEquivalentTo(new[] { - new GitBranch("master", "origin/master", false), - new GitBranch("feature/document", "origin/feature/document", true), - new GitBranch("feature/other-feature", "origin/feature/other-feature", false), - }); - Repository.Remotes.Should().BeEquivalentTo(new GitRemote("origin", "https://github.com/EvilStanleyGoldman/IOTestsRepo.git")); - Repository.RemoteBranches.Should().BeEquivalentTo(new[] { - new GitBranch("origin/master", "[None]", false), - new GitBranch("origin/feature/document-2", "[None]", false), - new GitBranch("origin/feature/other-feature", "[None]", false), - }); } [Test] public async Task ShouldDetectBranchDelete() { - await Initialize(TestRepoMasterCleanSynchronized); + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); var repositoryManagerListener = Substitute.For(); repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); @@ -268,34 +222,12 @@ public async Task ShouldDetectBranchDelete() repositoryManagerListener.Received().OnLocalBranchRemoved(deletedBranch); repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); - - Repository.Name.Should().Be("IOTestsRepo"); - Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); - Repository.Owner.Should().Be("EvilStanleyGoldman"); - Repository.LocalPath.Should().Be(TestRepoMasterCleanSynchronized); - Repository.IsGitHub.Should().BeTrue(); - Repository.CurrentBranchName.Should().Be("master"); - Repository.CurrentBranch.HasValue.Should().BeTrue(); - Repository.CurrentBranch.Value.Name.Should().Be("master"); - Repository.CurrentRemote.HasValue.Should().BeTrue(); - Repository.CurrentRemote.Value.Name.Should().Be("origin"); - Repository.CurrentRemote.Value.Url.Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); - Repository.LocalBranches.Should().BeEquivalentTo(new[] { - new GitBranch("master", "origin/master", true), - new GitBranch("feature/other-feature", "origin/feature/other-feature", false), - }); - Repository.Remotes.Should().BeEquivalentTo(new GitRemote("origin","https://github.com/EvilStanleyGoldman/IOTestsRepo.git")); - Repository.RemoteBranches.Should().BeEquivalentTo(new[] { - new GitBranch("origin/master", "[None]", false), - new GitBranch("origin/feature/document-2", "[None]", false), - new GitBranch("origin/feature/other-feature", "[None]", false), - }); } [Test] public async Task ShouldDetectBranchCreate() { - await Initialize(TestRepoMasterCleanSynchronized); + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); var repositoryManagerListener = Substitute.For(); repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); @@ -316,30 +248,6 @@ public async Task ShouldDetectBranchCreate() repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); - Repository.Name.Should().Be("IOTestsRepo"); - Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); - Repository.Owner.Should().Be("EvilStanleyGoldman"); - Repository.LocalPath.Should().Be(TestRepoMasterCleanSynchronized); - Repository.IsGitHub.Should().BeTrue(); - Repository.CurrentBranchName.Should().Be("master"); - Repository.CurrentBranch.HasValue.Should().BeTrue(); - Repository.CurrentBranch.Value.Name.Should().Be("master"); - Repository.CurrentRemote.HasValue.Should().BeTrue(); - Repository.CurrentRemote.Value.Name.Should().Be("origin"); - Repository.CurrentRemote.Value.Url.Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); - Repository.LocalBranches.Should().BeEquivalentTo(new[] { - new GitBranch("master", "origin/master", true), - new GitBranch("feature/document", "origin/feature/document", false), - new GitBranch("feature/document2", "[None]", false), - new GitBranch("feature/other-feature", "origin/feature/other-feature", false), - }); - Repository.Remotes.Should().BeEquivalentTo(new GitRemote("origin","https://github.com/EvilStanleyGoldman/IOTestsRepo.git")); - Repository.RemoteBranches.Should().BeEquivalentTo(new[] { - new GitBranch("origin/master", "[None]", false), - new GitBranch("origin/feature/document-2", "[None]", false), - new GitBranch("origin/feature/other-feature", "[None]", false), - }); - repositoryManagerListener.ClearReceivedCalls(); repositoryManagerEvents.Reset(); @@ -358,69 +266,16 @@ public async Task ShouldDetectBranchCreate() repositoryManagerListener.DidNotReceive().OnLocalBranchRemoved(Args.String); repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); - - Repository.Name.Should().Be("IOTestsRepo"); - Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); - Repository.Owner.Should().Be("EvilStanleyGoldman"); - Repository.LocalPath.Should().Be(TestRepoMasterCleanSynchronized); - Repository.IsGitHub.Should().BeTrue(); - Repository.CurrentBranchName.Should().Be("master"); - Repository.CurrentBranch.HasValue.Should().BeTrue(); - Repository.CurrentBranch.Value.Name.Should().Be("master"); - Repository.CurrentRemote.HasValue.Should().BeTrue(); - Repository.CurrentRemote.Value.Name.Should().Be("origin"); - Repository.CurrentRemote.Value.Url.Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); - Repository.LocalBranches.Should().BeEquivalentTo(new[] { - new GitBranch("master", "origin/master", true), - new GitBranch("feature/document", "origin/feature/document", false), - new GitBranch("feature/document2", "[None]", false), - new GitBranch("feature2/document2", "[None]", false), - new GitBranch("feature/other-feature", "origin/feature/other-feature", false), - }); - Repository.Remotes.Should().BeEquivalentTo(new GitRemote("origin","https://github.com/EvilStanleyGoldman/IOTestsRepo.git")); - Repository.RemoteBranches.Should().BeEquivalentTo(new[] { - new GitBranch("origin/master", "[None]", false), - new GitBranch("origin/feature/document-2", "[None]", false), - new GitBranch("origin/feature/other-feature", "[None]", false), - }); } [Test] public async Task ShouldDetectChangesToRemotes() { - await Initialize(TestRepoMasterCleanSynchronized); + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); var repositoryManagerListener = Substitute.For(); repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); - RepositoryManager.WaitForEvents(); - repositoryManagerEvents.WaitForNotBusy(2); - - repositoryManagerListener.AssertDidNotReceiveAnyCalls(); - - Repository.Name.Should().Be("IOTestsRepo"); - Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); - Repository.Owner.Should().Be("EvilStanleyGoldman"); - Repository.LocalPath.Should().Be(TestRepoMasterCleanSynchronized); - Repository.IsGitHub.Should().BeTrue(); - Repository.CurrentBranchName.Should().Be("master"); - Repository.CurrentBranch.HasValue.Should().BeTrue(); - Repository.CurrentBranch.Value.Name.Should().Be("master"); - Repository.CurrentRemote.HasValue.Should().BeTrue(); - Repository.CurrentRemote.Value.Name.Should().Be("origin"); - Repository.CurrentRemote.Value.Url.Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); - Repository.LocalBranches.Should().BeEquivalentTo(new[] { - new GitBranch("master", "origin/master", true), - new GitBranch("feature/document", "origin/feature/document", false), - new GitBranch("feature/other-feature", "origin/feature/other-feature", false), - }); - Repository.Remotes.Should().BeEquivalentTo(new GitRemote("origin","https://github.com/EvilStanleyGoldman/IOTestsRepo.git")); - Repository.RemoteBranches.Should().BeEquivalentTo(new[] { - new GitBranch("origin/master", "[None]", false), - new GitBranch("origin/feature/document-2", "[None]", false), - new GitBranch("origin/feature/other-feature", "[None]", false), - }); - await RepositoryManager.RemoteRemove("origin").StartAsAsync(); await TaskManager.Wait(); @@ -440,18 +295,6 @@ public async Task ShouldDetectChangesToRemotes() repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); repositoryManagerListener.Received().OnRemoteBranchRemoved(Args.String, Args.String); - Repository.Name.Should().Be("IOTestsRepo_master_clean_sync"); - Repository.CloneUrl.Should().BeNull(); - Repository.Owner.Should().BeNull(); - Repository.LocalPath.Should().Be(TestRepoMasterCleanSynchronized); - Repository.IsGitHub.Should().BeFalse(); - Repository.CurrentBranchName.Should().Be("master"); - Repository.CurrentBranch.HasValue.Should().BeTrue(); - Repository.CurrentBranch.Value.Name.Should().Be("master"); - Repository.CurrentRemote.HasValue.Should().BeFalse(); - Repository.Remotes.Should().BeEquivalentTo(); - Repository.RemoteBranches.Should().BeEmpty(); - repositoryManagerListener.ClearReceivedCalls(); repositoryManagerEvents.Reset(); @@ -471,68 +314,16 @@ public async Task ShouldDetectChangesToRemotes() repositoryManagerListener.DidNotReceive().OnLocalBranchRemoved(Args.String); repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); - - Repository.Name.Should().Be("IOTestsRepo"); - Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilShana/IOTestsRepo.git"); - Repository.Owner.Should().Be("EvilShana"); - Repository.LocalPath.Should().Be(TestRepoMasterCleanSynchronized); - Repository.IsGitHub.Should().BeTrue(); - Repository.CurrentBranchName.Should().Be("master"); - Repository.CurrentBranch.HasValue.Should().BeTrue(); - Repository.CurrentBranch.Value.Name.Should().Be("master"); - Repository.CurrentRemote.HasValue.Should().BeTrue(); - Repository.CurrentRemote.Value.Name.Should().Be("origin"); - Repository.CurrentRemote.Value.Url.Should().Be("https://github.com/EvilShana/IOTestsRepo.git"); - Repository.LocalBranches.Should().BeEquivalentTo(new[] { - new GitBranch("master", "[None]", true), - new GitBranch("feature/document", "[None]", false), - new GitBranch("feature/other-feature", "[None]", false), - }); - Repository.Remotes.Should().BeEquivalentTo(new GitRemote("origin","https://github.com/EvilShana/IOTestsRepo.git")); - Repository.RemoteBranches.Should().BeEmpty(); } [Test] public async Task ShouldDetectChangesToRemotesWhenSwitchingBranches() { - await Initialize(TestRepoMasterTwoRemotes); + await Initialize(TestRepoMasterTwoRemotes, initializeRepository: false); var repositoryManagerListener = Substitute.For(); repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); - RepositoryManager.WaitForEvents(); - repositoryManagerEvents.WaitForNotBusy(2); - - repositoryManagerListener.AssertDidNotReceiveAnyCalls(); - - Repository.Name.Should().Be("IOTestsRepo"); - Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); - Repository.Owner.Should().Be("EvilStanleyGoldman"); - Repository.LocalPath.Should().Be(TestRepoMasterTwoRemotes); - Repository.IsGitHub.Should().BeTrue(); - Repository.CurrentBranchName.Should().Be("master"); - Repository.CurrentBranch.HasValue.Should().BeTrue(); - Repository.CurrentBranch.Value.Name.Should().Be("master"); - Repository.CurrentRemote.HasValue.Should().BeTrue(); - Repository.CurrentRemote.Value.Name.Should().Be("origin"); - Repository.CurrentRemote.Value.Url.Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); - Repository.LocalBranches.Should().BeEquivalentTo(new[] { - new GitBranch("master", "origin/master", true), - new GitBranch("feature/document", "origin/feature/document", false), - new GitBranch("feature/other-feature", "origin/feature/other-feature", false), - }); - Repository.Remotes.Should().BeEquivalentTo( - new GitRemote("origin","https://github.com/EvilStanleyGoldman/IOTestsRepo.git"), - new GitRemote("another","https://another.remote/Owner/Url.git")); - Repository.RemoteBranches.Should().BeEquivalentTo(new[] { - new GitBranch("origin/master", "[None]", false), - new GitBranch("origin/feature/document-2", "[None]", false), - new GitBranch("origin/feature/other-feature", "[None]", false), - new GitBranch("another/master", "[None]", false), - new GitBranch("another/feature/document-2", "[None]", false), - new GitBranch("another/feature/other-feature", "[None]", false), - }); - await RepositoryManager.CreateBranch("branch2", "another/master") .StartAsAsync(); @@ -550,35 +341,6 @@ await RepositoryManager.CreateBranch("branch2", "another/master") repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); - Repository.Name.Should().Be("IOTestsRepo"); - Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); - Repository.Owner.Should().Be("EvilStanleyGoldman"); - Repository.LocalPath.Should().Be(TestRepoMasterTwoRemotes); - Repository.IsGitHub.Should().BeTrue(); - Repository.CurrentBranchName.Should().Be("master"); - Repository.CurrentBranch.HasValue.Should().BeTrue(); - Repository.CurrentBranch.Value.Name.Should().Be("master"); - Repository.CurrentRemote.HasValue.Should().BeTrue(); - Repository.CurrentRemote.Value.Name.Should().Be("origin"); - Repository.CurrentRemote.Value.Url.Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); - Repository.LocalBranches.Should().BeEquivalentTo(new[] { - new GitBranch("master", "origin/master", true), - new GitBranch("branch2", "another/branch2", false), - new GitBranch("feature/document", "origin/feature/document", false), - new GitBranch("feature/other-feature", "origin/feature/other-feature", false), - }); - Repository.Remotes.Should().BeEquivalentTo( - new GitRemote("origin","https://github.com/EvilStanleyGoldman/IOTestsRepo.git"), - new GitRemote("another","https://another.remote/Owner/Url.git")); - Repository.RemoteBranches.Should().BeEquivalentTo(new[] { - new GitBranch("origin/master", "[None]", false), - new GitBranch("origin/feature/document-2", "[None]", false), - new GitBranch("origin/feature/other-feature", "[None]", false), - new GitBranch("another/master", "[None]", false), - new GitBranch("another/feature/document-2", "[None]", false), - new GitBranch("another/feature/other-feature", "[None]", false), - }); - repositoryManagerListener.ClearReceivedCalls(); repositoryManagerEvents.Reset(); @@ -599,41 +361,12 @@ await RepositoryManager.SwitchBranch("branch2") repositoryManagerListener.DidNotReceive().OnLocalBranchRemoved(Args.String); repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); - - Repository.Name.Should().Be("Url"); - Repository.CloneUrl.ToString().Should().Be("https://another.remote/Owner/Url.git"); - Repository.Owner.Should().Be("Owner"); - Repository.LocalPath.Should().Be(TestRepoMasterTwoRemotes); - Repository.IsGitHub.Should().BeFalse(); - Repository.CurrentBranchName.Should().Be("branch2"); - Repository.CurrentBranch.HasValue.Should().BeTrue(); - Repository.CurrentBranch.Value.Name.Should().Be("branch2"); - Repository.CurrentRemote.HasValue.Should().BeTrue(); - Repository.CurrentRemote.Value.Name.Should().Be("another"); - Repository.CurrentRemote.Value.Url.Should().Be("https://another.remote/Owner/Url.git"); - Repository.LocalBranches.Should().BeEquivalentTo(new[] { - new GitBranch("master", "origin/master", false), - new GitBranch("branch2", "another/branch2", true), - new GitBranch("feature/document", "origin/feature/document", false), - new GitBranch("feature/other-feature", "origin/feature/other-feature", false), - }); - Repository.Remotes.Should().BeEquivalentTo( - new GitRemote("origin","https://github.com/EvilStanleyGoldman/IOTestsRepo.git"), - new GitRemote("another","https://another.remote/Owner/Url.git")); - Repository.RemoteBranches.Should().BeEquivalentTo(new[] { - new GitBranch("origin/master", "[None]", false), - new GitBranch("origin/feature/document-2", "[None]", false), - new GitBranch("origin/feature/other-feature", "[None]", false), - new GitBranch("another/master", "[None]", false), - new GitBranch("another/feature/document-2", "[None]", false), - new GitBranch("another/feature/other-feature", "[None]", false), - }); } [Test] public async Task ShouldDetectGitPull() { - await Initialize(TestRepoMasterCleanSynchronized); + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); var repositoryManagerListener = Substitute.For(); repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); @@ -653,29 +386,6 @@ public async Task ShouldDetectGitPull() repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); - Repository.Name.Should().Be("IOTestsRepo"); - Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); - Repository.Owner.Should().Be("EvilStanleyGoldman"); - Repository.LocalPath.Should().Be(TestRepoMasterCleanSynchronized); - Repository.IsGitHub.Should().BeTrue(); - Repository.CurrentBranchName.Should().Be("master"); - Repository.CurrentBranch.HasValue.Should().BeTrue(); - Repository.CurrentBranch.Value.Name.Should().Be("master"); - Repository.CurrentRemote.HasValue.Should().BeTrue(); - Repository.CurrentRemote.Value.Name.Should().Be("origin"); - Repository.CurrentRemote.Value.Url.Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); - Repository.LocalBranches.Should().BeEquivalentTo(new[] { - new GitBranch("master", "origin/master", true), - new GitBranch("feature/document", "origin/feature/document", false), - new GitBranch("feature/other-feature", "origin/feature/other-feature", false), - }); - Repository.Remotes.Should().BeEquivalentTo(new GitRemote("origin","https://github.com/EvilStanleyGoldman/IOTestsRepo.git")); - Repository.RemoteBranches.Should().BeEquivalentTo(new[] { - new GitBranch("origin/master", "[None]", false), - new GitBranch("origin/feature/document-2", "[None]", false), - new GitBranch("origin/feature/other-feature", "[None]", false), - }); - repositoryManagerEvents.Reset(); repositoryManagerEvents.WaitForNotBusy(); } @@ -683,37 +393,11 @@ public async Task ShouldDetectGitPull() [Test] public async Task ShouldDetectGitFetch() { - await Initialize(TestRepoMasterCleanUnsynchronized); + await Initialize(TestRepoMasterCleanUnsynchronized, initializeRepository: false); var repositoryManagerListener = Substitute.For(); repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); - RepositoryManager.WaitForEvents(); - repositoryManagerEvents.WaitForNotBusy(2); - - repositoryManagerListener.AssertDidNotReceiveAnyCalls(); - - Repository.Name.Should().Be("IOTestsRepo"); - Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); - Repository.Owner.Should().Be("EvilStanleyGoldman"); - Repository.LocalPath.Should().Be(TestRepoMasterCleanUnsynchronized); - Repository.IsGitHub.Should().BeTrue(); - Repository.CurrentBranchName.Should().Be("master"); - Repository.CurrentBranch.HasValue.Should().BeTrue(); - Repository.CurrentBranch.Value.Name.Should().Be("master"); - Repository.CurrentRemote.HasValue.Should().BeTrue(); - Repository.CurrentRemote.Value.Name.Should().Be("origin"); - Repository.CurrentRemote.Value.Url.Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); - Repository.LocalBranches.Should().BeEquivalentTo(new[] { - new GitBranch("feature/document", "origin/feature/document", false), - }); - Repository.Remotes.Should().BeEquivalentTo(new GitRemote("origin","https://github.com/EvilStanleyGoldman/IOTestsRepo.git")); - Repository.RemoteBranches.Should().BeEquivalentTo(new[] { - new GitBranch("origin/master", "[None]", false), - new GitBranch("origin/feature/document", "[None]", false), - new GitBranch("origin/feature/document-2", "[None]", false), - }); - await RepositoryManager.Fetch("origin").StartAsAsync(); await TaskManager.Wait(); RepositoryManager.WaitForEvents(); @@ -728,29 +412,6 @@ public async Task ShouldDetectGitFetch() repositoryManagerListener.DidNotReceive().OnLocalBranchRemoved(Args.String); repositoryManagerListener.Received().OnRemoteBranchAdded(Args.String, Args.String); repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); - - Repository.Name.Should().Be("IOTestsRepo"); - Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); - Repository.Owner.Should().Be("EvilStanleyGoldman"); - Repository.LocalPath.Should().Be(TestRepoMasterCleanUnsynchronized); - Repository.IsGitHub.Should().BeTrue(); - Repository.CurrentBranchName.Should().Be("master"); - Repository.CurrentBranch.HasValue.Should().BeTrue(); - Repository.CurrentBranch.Value.Name.Should().Be("master"); - Repository.CurrentRemote.HasValue.Should().BeTrue(); - Repository.CurrentRemote.Value.Name.Should().Be("origin"); - Repository.CurrentRemote.Value.Url.Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); - Repository.LocalBranches.Should().BeEquivalentTo(new[] { - new GitBranch("feature/document", "origin/feature/document", false), - }); - Repository.Remotes.Should().BeEquivalentTo(new GitRemote("origin","https://github.com/EvilStanleyGoldman/IOTestsRepo.git")); - Repository.RemoteBranches.Should().BeEquivalentTo(new[] { - new GitBranch("origin/master", "[None]", false), - new GitBranch("origin/feature/document", "[None]", false), - new GitBranch("origin/feature/document-2", "[None]", false), - new GitBranch("origin/feature/new-feature", "[None]", false), - new GitBranch("origin/feature/other-feature", "[None]", false), - }); } } } From b9e67e6e9fc5637e2a86a7738635cf95b726bccf Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 8 Nov 2017 15:19:16 -0500 Subject: [PATCH 03/35] Fixing test --- src/tests/IntegrationTests/Events/RepositoryManagerTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs index 2069604fd..8adc5ffea 100644 --- a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs +++ b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs @@ -51,7 +51,7 @@ public async Task ShouldDetectFileChanges() RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); - repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); + repositoryManagerListener.DidNotReceive().OnIsBusyChanged(Args.Bool); repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); From 55bb4685687bb16fd492d4b416000989ca5dfdf8 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 8 Nov 2017 16:49:08 -0500 Subject: [PATCH 04/35] Enabling console logging for integration tests --- src/tests/IntegrationTests/SetUpFixture.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests/IntegrationTests/SetUpFixture.cs b/src/tests/IntegrationTests/SetUpFixture.cs index 21c14f375..62793030c 100644 --- a/src/tests/IntegrationTests/SetUpFixture.cs +++ b/src/tests/IntegrationTests/SetUpFixture.cs @@ -14,7 +14,7 @@ public void Setup() Logging.LogAdapter = new MultipleLogAdapter( new FileLogAdapter($"..\\{DateTime.UtcNow.ToString("yyyyMMddHHmmss")}-integration-tests.log") - //, new ConsoleLogAdapter() + , new ConsoleLogAdapter() ); } } From d6a9ebefb4be3177bb5db4e7b8f1c2a49554f94e Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 8 Nov 2017 16:54:38 -0500 Subject: [PATCH 05/35] Should not receive busy change events --- src/tests/IntegrationTests/Events/RepositoryManagerTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs index 8adc5ffea..2a759617f 100644 --- a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs +++ b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs @@ -86,7 +86,7 @@ public async Task ShouldAddAndCommitFiles() RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); - repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); + repositoryManagerListener.DidNotReceive().OnIsBusyChanged(Args.Bool); repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); @@ -138,7 +138,7 @@ public async Task ShouldAddAndCommitAllFiles() RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); - repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); + repositoryManagerListener.DidNotReceive().OnIsBusyChanged(Args.Bool); repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); From 0f5148541182e65ba236794fcca2f9bc255a923a Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Thu, 9 Nov 2017 15:33:25 -0500 Subject: [PATCH 06/35] Dumping file watcher events --- src/GitHub.Api/Events/RepositoryWatcher.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GitHub.Api/Events/RepositoryWatcher.cs b/src/GitHub.Api/Events/RepositoryWatcher.cs index 6528b0d3a..4832f453f 100644 --- a/src/GitHub.Api/Events/RepositoryWatcher.cs +++ b/src/GitHub.Api/Events/RepositoryWatcher.cs @@ -167,7 +167,7 @@ private int ProcessEvents(Event[] fileEvents) break; } - //Logger.Trace(fileEvent.Describe()); + Logger.Trace(fileEvent.Describe()); var eventDirectory = new NPath(fileEvent.Directory); var fileA = eventDirectory.Combine(fileEvent.FileA); From dbd2b9138633657349769edf809bde6a13171d6a Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 14 Nov 2017 14:59:46 -0500 Subject: [PATCH 07/35] Removing large swaths of code --- src/GitHub.Api/Events/RepositoryWatcher.cs | 176 +----------------- src/GitHub.Api/Git/Repository.cs | 36 ---- src/GitHub.Api/Git/RepositoryManager.cs | 32 ---- .../Events/RepositoryManagerTests.cs | 60 ------ .../Events/RepositoryWatcherTests.cs | 89 --------- .../Events/IRepositoryManagerListener.cs | 32 ---- 6 files changed, 2 insertions(+), 423 deletions(-) diff --git a/src/GitHub.Api/Events/RepositoryWatcher.cs b/src/GitHub.Api/Events/RepositoryWatcher.cs index 6528b0d3a..891270767 100644 --- a/src/GitHub.Api/Events/RepositoryWatcher.cs +++ b/src/GitHub.Api/Events/RepositoryWatcher.cs @@ -15,11 +15,7 @@ interface IRepositoryWatcher : IDisposable event Action IndexChanged; event Action ConfigChanged; event Action LocalBranchChanged; - event Action LocalBranchCreated; - event Action LocalBranchDeleted; event Action RepositoryChanged; - event Action RemoteBranchCreated; - event Action RemoteBranchDeleted; void Initialize(); int CheckAndProcessEvents(); } @@ -40,11 +36,7 @@ class RepositoryWatcher : IRepositoryWatcher public event Action IndexChanged; public event Action ConfigChanged; public event Action LocalBranchChanged; - public event Action LocalBranchCreated; - public event Action LocalBranchDeleted; public event Action RepositoryChanged; - public event Action RemoteBranchCreated; - public event Action RemoteBranchDeleted; public RepositoryWatcher(IPlatform platform, RepositoryPathConfiguration paths, CancellationToken cancellationToken) { @@ -195,116 +187,11 @@ private int ProcessEvents(Event[] fileEvents) } else if (fileA.IsChildOf(paths.RemotesPath)) { - var relativePath = fileA.RelativeTo(paths.RemotesPath); - var relativePathElements = relativePath.Elements.ToArray(); - - if (!relativePathElements.Any()) - { - continue; - } - - var origin = relativePathElements[0]; - - if (fileEvent.Type == sfw.net.EventType.DELETED) - { - if (fileA.ExtensionWithDot == ".lock") - { - continue; - } - - var branch = string.Join(@"/", relativePathElements.Skip(1).ToArray()); - AddOrUpdateEventData(events, EventType.RemoteBranchDeleted, new EventData { Origin = origin, Branch = branch }); - } - else if (fileEvent.Type == sfw.net.EventType.RENAMED) - { - if (fileA.ExtensionWithDot != ".lock") - { - continue; - } - - if (fileB != null && fileB.FileExists()) - { - if (fileA.FileNameWithoutExtension == fileB.FileNameWithoutExtension) - { - var branchPathElement = relativePathElements - .Skip(1).Take(relativePathElements.Length - 2) - .Union(new[] { fileA.FileNameWithoutExtension }).ToArray(); - - var branch = string.Join(@"/", branchPathElement); - AddOrUpdateEventData(events, EventType.RemoteBranchCreated, new EventData { Origin = origin, Branch = branch }); - } - } - } + throw new NotImplementedException(); } else if (fileA.IsChildOf(paths.BranchesPath)) { - if (fileEvent.Type == sfw.net.EventType.MODIFIED) - { - if (fileA.DirectoryExists()) - { - continue; - } - - if (fileA.ExtensionWithDot == ".lock") - { - continue; - } - - var relativePath = fileA.RelativeTo(paths.BranchesPath); - var relativePathElements = relativePath.Elements.ToArray(); - - if (!relativePathElements.Any()) - { - continue; - } - - var branch = string.Join(@"/", relativePathElements.ToArray()); - - AddOrUpdateEventData(events, EventType.LocalBranchChanged, new EventData { Branch = branch }); - - } - else if (fileEvent.Type == sfw.net.EventType.DELETED) - { - if (fileA.ExtensionWithDot == ".lock") - { - continue; - } - - var relativePath = fileA.RelativeTo(paths.BranchesPath); - var relativePathElements = relativePath.Elements.ToArray(); - - if (!relativePathElements.Any()) - { - continue; - } - - var branch = string.Join(@"/", relativePathElements.ToArray()); - AddOrUpdateEventData(events, EventType.LocalBranchDeleted, new EventData { Branch = branch }); - } - else if (fileEvent.Type == sfw.net.EventType.RENAMED) - { - if (fileA.ExtensionWithDot != ".lock") - { - continue; - } - - if (fileB != null && fileB.FileExists()) - { - if (fileA.FileNameWithoutExtension == fileB.FileNameWithoutExtension) - { - var relativePath = fileB.RelativeTo(paths.BranchesPath); - var relativePathElements = relativePath.Elements.ToArray(); - - if (!relativePathElements.Any()) - { - continue; - } - - var branch = string.Join(@"/", relativePathElements.ToArray()); - AddOrUpdateEventData(events, EventType.LocalBranchCreated, new EventData { Branch = branch }); - } - } - } + throw new NotImplementedException(); } } else @@ -358,60 +245,6 @@ private int FireEvents(Dictionary> events) eventsProcessed++; } - List localBranchesCreated; - if (events.TryGetValue(EventType.LocalBranchCreated, out localBranchesCreated)) - { - foreach (var evt in localBranchesCreated) - { - Logger.Trace($"LocalBranchCreated: {evt.Branch}"); - LocalBranchCreated?.Invoke(evt.Branch); - eventsProcessed++; - } - } - - List localBranchesChanged; - if (events.TryGetValue(EventType.LocalBranchChanged, out localBranchesChanged)) - { - foreach (var evt in localBranchesChanged) - { - Logger.Trace($"LocalBranchChanged: {evt.Branch}"); - LocalBranchChanged?.Invoke(evt.Branch); - eventsProcessed++; - } - } - - List localBranchesDeleted; - if (events.TryGetValue(EventType.LocalBranchDeleted, out localBranchesDeleted)) - { - foreach (var evt in localBranchesDeleted) - { - Logger.Trace($"LocalBranchDeleted: {evt.Branch}"); - LocalBranchDeleted?.Invoke(evt.Branch); - eventsProcessed++; - } - } - - List remoteBranchesCreated; - if (events.TryGetValue(EventType.RemoteBranchCreated, out remoteBranchesCreated)) - { - foreach (var evt in remoteBranchesCreated) - { - Logger.Trace($"RemoteBranchCreated: {evt.Origin}/{evt.Branch}"); - RemoteBranchCreated?.Invoke(evt.Origin, evt.Branch); - eventsProcessed++; - } - } - - List remoteBranchesDeleted; - if (events.TryGetValue(EventType.RemoteBranchDeleted, out remoteBranchesDeleted)) - { - foreach (var evt in remoteBranchesDeleted) - { - Logger.Trace($"RemoteBranchDeleted: {evt.Origin}/{evt.Branch}"); - RemoteBranchDeleted?.Invoke(evt.Origin, evt.Branch); - eventsProcessed++; - } - } return eventsProcessed; } @@ -447,11 +280,6 @@ private enum EventType HeadChanged, RepositoryChanged, IndexChanged, - RemoteBranchDeleted, - RemoteBranchCreated, - LocalBranchDeleted, - LocalBranchCreated, - LocalBranchChanged } private class EventData diff --git a/src/GitHub.Api/Git/Repository.cs b/src/GitHub.Api/Git/Repository.cs index 629077dbd..864b44ca7 100644 --- a/src/GitHub.Api/Git/Repository.cs +++ b/src/GitHub.Api/Git/Repository.cs @@ -52,10 +52,6 @@ public void Initialize(IRepositoryManager initRepositoryManager) repositoryManager.OnLocalBranchListUpdated += RepositoryManager_OnLocalBranchListUpdated; repositoryManager.OnRemoteBranchListUpdated += RepositoryManager_OnRemoteBranchListUpdated; repositoryManager.OnLocalBranchUpdated += RepositoryManager_OnLocalBranchUpdated; - repositoryManager.OnLocalBranchAdded += RepositoryManager_OnLocalBranchAdded; - repositoryManager.OnLocalBranchRemoved += RepositoryManager_OnLocalBranchRemoved; - repositoryManager.OnRemoteBranchAdded += RepositoryManager_OnRemoteBranchAdded; - repositoryManager.OnRemoteBranchRemoved += RepositoryManager_OnRemoteBranchRemoved; UpdateGitStatus(); UpdateGitLog(); @@ -463,38 +459,6 @@ private void UpdateRepositoryInfo() } } - private void RepositoryManager_OnLocalBranchRemoved(string name) - { - new ActionTask(CancellationToken.None, () => { - cacheContainer.BranchCache.RemoveLocalBranch(name); - UpdateLocalBranches(); - }) { Affinity = TaskAffinity.UI }.Start(); - } - - private void RepositoryManager_OnLocalBranchAdded(string name) - { - new ActionTask(CancellationToken.None, () => { - cacheContainer.BranchCache.AddLocalBranch(name); - UpdateLocalBranches(); - }) { Affinity = TaskAffinity.UI }.Start(); - } - - private void RepositoryManager_OnRemoteBranchAdded(string remote, string name) - { - new ActionTask(CancellationToken.None, () => { - cacheContainer.BranchCache.AddRemoteBranch(remote, name); - UpdateRemoteAndRemoteBranches(); - }) { Affinity = TaskAffinity.UI }.Start(); - } - - private void RepositoryManager_OnRemoteBranchRemoved(string remote, string name) - { - new ActionTask(CancellationToken.None, () => { - cacheContainer.BranchCache.RemoveRemoteBranch(remote, name); - UpdateRemoteAndRemoteBranches(); - }) { Affinity = TaskAffinity.UI }.Start(); - } - private GitBranch GetLocalGitBranch(ConfigBranch x) { var name = x.Name; diff --git a/src/GitHub.Api/Git/RepositoryManager.cs b/src/GitHub.Api/Git/RepositoryManager.cs index 3e5fef54b..9cf839eff 100644 --- a/src/GitHub.Api/Git/RepositoryManager.cs +++ b/src/GitHub.Api/Git/RepositoryManager.cs @@ -9,13 +9,9 @@ public interface IRepositoryManager : IDisposable { event Action OnCurrentBranchAndRemoteUpdated; event Action OnIsBusyChanged; - event Action OnLocalBranchAdded; event Action> OnLocalBranchListUpdated; - event Action OnLocalBranchRemoved; event Action OnLocalBranchUpdated; - event Action OnRemoteBranchAdded; event Action, Dictionary>> OnRemoteBranchListUpdated; - event Action OnRemoteBranchRemoved; event Action OnRepositoryUpdated; void Initialize(); @@ -100,13 +96,9 @@ class RepositoryManager : IRepositoryManager public event Action OnCurrentBranchAndRemoteUpdated; public event Action OnIsBusyChanged; - public event Action OnLocalBranchAdded; public event Action> OnLocalBranchListUpdated; - public event Action OnLocalBranchRemoved; public event Action OnLocalBranchUpdated; - public event Action OnRemoteBranchAdded; public event Action, Dictionary>> OnRemoteBranchListUpdated; - public event Action OnRemoteBranchRemoved; public event Action OnRepositoryUpdated; public RepositoryManager(IPlatform platform, IGitConfig gitConfig, @@ -297,11 +289,7 @@ private void SetupWatcher() watcher.IndexChanged += Watcher_OnIndexChanged; watcher.ConfigChanged += Watcher_OnConfigChanged; watcher.LocalBranchChanged += Watcher_OnLocalBranchChanged; - watcher.LocalBranchCreated += Watcher_OnLocalBranchCreated; - watcher.LocalBranchDeleted += Watcher_OnLocalBranchDeleted; watcher.RepositoryChanged += Watcher_OnRepositoryChanged; - watcher.RemoteBranchCreated += Watcher_OnRemoteBranchCreated; - watcher.RemoteBranchDeleted += Watcher_OnRemoteBranchDeleted; } private void UpdateHead() @@ -336,16 +324,6 @@ private ITask HookupHandlers(ITask task, bool disableWatcher = false) return task; } - private void Watcher_OnRemoteBranchDeleted(string remote, string name) - { - OnRemoteBranchRemoved?.Invoke(remote, name); - } - - private void Watcher_OnRemoteBranchCreated(string remote, string name) - { - OnRemoteBranchAdded?.Invoke(remote, name); - } - private void Watcher_OnRepositoryChanged() { Logger.Trace("OnRepositoryChanged"); @@ -408,16 +386,6 @@ private void UpdateCurrentBranchAndRemote(string head) private void Watcher_OnIndexChanged() {} - private void Watcher_OnLocalBranchCreated(string name) - { - OnLocalBranchAdded?.Invoke(name); - } - - private void Watcher_OnLocalBranchDeleted(string name) - { - OnLocalBranchRemoved?.Invoke(name); - } - private void Watcher_OnLocalBranchChanged(string name) { OnLocalBranchUpdated?.Invoke(name); diff --git a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs index 8d18690f8..c3a33b6c5 100644 --- a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs +++ b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs @@ -97,10 +97,6 @@ public async Task ShouldDetectFileChanges() repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); - repositoryManagerListener.DidNotReceive().OnLocalBranchAdded(Args.String); - repositoryManagerListener.DidNotReceive().OnLocalBranchRemoved(Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); result.AssertEqual(expected); } @@ -155,10 +151,6 @@ public async Task ShouldAddAndCommitFiles() repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); - repositoryManagerListener.DidNotReceive().OnLocalBranchAdded(Args.String); - repositoryManagerListener.DidNotReceive().OnLocalBranchRemoved(Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); result.AssertEqual(expectedAfterChanges); @@ -180,10 +172,6 @@ await RepositoryManager repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); repositoryManagerListener.Received().OnLocalBranchUpdated(expectedLocalBranch); - repositoryManagerListener.DidNotReceive().OnLocalBranchAdded(Args.String); - repositoryManagerListener.DidNotReceive().OnLocalBranchRemoved(Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); } [Test, Ignore("Fails often")] @@ -231,10 +219,6 @@ public async Task ShouldAddAndCommitAllFiles() repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); - repositoryManagerListener.DidNotReceive().OnLocalBranchAdded(Args.String); - repositoryManagerListener.DidNotReceive().OnLocalBranchRemoved(Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); result.AssertEqual(expectedAfterChanges); @@ -256,10 +240,6 @@ await RepositoryManager repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); repositoryManagerListener.Received().OnLocalBranchUpdated(expectedLocalBranch); - repositoryManagerListener.DidNotReceive().OnLocalBranchAdded(Args.String); - repositoryManagerListener.DidNotReceive().OnLocalBranchRemoved(Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); } [Test] @@ -297,10 +277,6 @@ public async Task ShouldDetectBranchChange() repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); - repositoryManagerListener.DidNotReceive().OnLocalBranchAdded(Args.String); - repositoryManagerListener.DidNotReceive().OnLocalBranchRemoved(Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); result.AssertEqual(expected); @@ -349,10 +325,6 @@ public async Task ShouldDetectBranchDelete() repositoryManagerListener.Received().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.Received().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); - repositoryManagerListener.DidNotReceive().OnLocalBranchAdded(Args.String); - repositoryManagerListener.Received().OnLocalBranchRemoved(deletedBranch); - repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); Repository.Name.Should().Be("IOTestsRepo"); Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); @@ -398,10 +370,6 @@ public async Task ShouldDetectBranchCreate() repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); - repositoryManagerListener.Received().OnLocalBranchAdded(createdBranch1); - repositoryManagerListener.DidNotReceive().OnLocalBranchRemoved(Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); Repository.Name.Should().Be("IOTestsRepo"); Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); @@ -443,10 +411,6 @@ public async Task ShouldDetectBranchCreate() repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); - repositoryManagerListener.Received().OnLocalBranchAdded(createdBranch2); - repositoryManagerListener.DidNotReceive().OnLocalBranchRemoved(Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); Repository.Name.Should().Be("IOTestsRepo"); Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); @@ -526,10 +490,6 @@ public async Task ShouldDetectChangesToRemotes() repositoryManagerListener.Received().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.Received().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); - repositoryManagerListener.DidNotReceive().OnLocalBranchAdded(Args.String); - repositoryManagerListener.DidNotReceive().OnLocalBranchRemoved(Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); - repositoryManagerListener.Received().OnRemoteBranchRemoved(Args.String, Args.String); Repository.Name.Should().Be("IOTestsRepo_master_clean_sync"); Repository.CloneUrl.Should().BeNull(); @@ -560,10 +520,6 @@ public async Task ShouldDetectChangesToRemotes() repositoryManagerListener.Received().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.Received().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); - repositoryManagerListener.DidNotReceive().OnLocalBranchAdded(Args.String); - repositoryManagerListener.DidNotReceive().OnLocalBranchRemoved(Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); Repository.Name.Should().Be("IOTestsRepo"); Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilShana/IOTestsRepo.git"); @@ -640,10 +596,6 @@ await RepositoryManager.CreateBranch("branch2", "another/master") repositoryManagerListener.Received().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.Received().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); - repositoryManagerListener.Received().OnLocalBranchAdded(Args.String); - repositoryManagerListener.DidNotReceive().OnLocalBranchRemoved(Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); Repository.Name.Should().Be("IOTestsRepo"); Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); @@ -692,10 +644,6 @@ await RepositoryManager.SwitchBranch("branch2") repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); - repositoryManagerListener.DidNotReceive().OnLocalBranchAdded(Args.String); - repositoryManagerListener.DidNotReceive().OnLocalBranchRemoved(Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); Repository.Name.Should().Be("Url"); Repository.CloneUrl.ToString().Should().Be("https://another.remote/Owner/Url.git"); @@ -758,10 +706,6 @@ public async Task ShouldDetectGitPull() repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); repositoryManagerListener.Received().OnLocalBranchUpdated(Args.String); - repositoryManagerListener.DidNotReceive().OnLocalBranchAdded(Args.String); - repositoryManagerListener.DidNotReceive().OnLocalBranchRemoved(Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); result.AssertEqual(expected); @@ -838,10 +782,6 @@ public async Task ShouldDetectGitFetch() repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); - repositoryManagerListener.DidNotReceive().OnLocalBranchAdded(Args.String); - repositoryManagerListener.DidNotReceive().OnLocalBranchRemoved(Args.String); - repositoryManagerListener.Received().OnRemoteBranchAdded(Args.String, Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); Repository.Name.Should().Be("IOTestsRepo"); Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); diff --git a/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs b/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs index 6427fac6c..7e2f52f1c 100644 --- a/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs +++ b/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs @@ -46,12 +46,8 @@ public async Task ShouldDetectFileChanges() repositoryWatcherListener.DidNotReceive().ConfigChanged(); repositoryWatcherListener.DidNotReceive().HeadChanged(); repositoryWatcherListener.Received().IndexChanged(); - repositoryWatcherListener.DidNotReceive().LocalBranchCreated(Args.String); - repositoryWatcherListener.DidNotReceive().LocalBranchDeleted(Args.String); repositoryWatcherListener.DidNotReceive().LocalBranchChanged(Args.String); repositoryWatcherListener.DidNotReceive().RemoteBranchChanged(Args.String, Args.String); - repositoryWatcherListener.DidNotReceive().RemoteBranchCreated(Args.String, Args.String); - repositoryWatcherListener.DidNotReceive().RemoteBranchDeleted(Args.String, Args.String); repositoryWatcherListener.Received().RepositoryChanged(); } finally @@ -92,12 +88,8 @@ public async Task ShouldDetectBranchChange() repositoryWatcherListener.DidNotReceive().ConfigChanged(); repositoryWatcherListener.Received().HeadChanged(); repositoryWatcherListener.Received().IndexChanged(); - repositoryWatcherListener.DidNotReceive().LocalBranchCreated(Args.String); - repositoryWatcherListener.DidNotReceive().LocalBranchDeleted(Args.String); repositoryWatcherListener.DidNotReceive().LocalBranchChanged(Args.String); repositoryWatcherListener.DidNotReceive().RemoteBranchChanged(Args.String, Args.String); - repositoryWatcherListener.DidNotReceive().RemoteBranchCreated(Args.String, Args.String); - repositoryWatcherListener.DidNotReceive().RemoteBranchDeleted(Args.String, Args.String); repositoryWatcherListener.Received().RepositoryChanged(); } finally @@ -130,19 +122,14 @@ public async Task ShouldDetectBranchDelete() await TaskManager.Wait(); watcherAutoResetEvent.ConfigChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - watcherAutoResetEvent.LocalBranchDeleted.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); Logger.Trace("Continue test"); repositoryWatcherListener.Received(1).ConfigChanged(); repositoryWatcherListener.DidNotReceive().HeadChanged(); repositoryWatcherListener.DidNotReceive().IndexChanged(); - repositoryWatcherListener.DidNotReceive().LocalBranchCreated(Args.String); - repositoryWatcherListener.Received(1).LocalBranchDeleted("feature/document"); repositoryWatcherListener.DidNotReceive().LocalBranchChanged(Args.String); repositoryWatcherListener.DidNotReceive().RemoteBranchChanged(Args.String, Args.String); - repositoryWatcherListener.DidNotReceive().RemoteBranchCreated(Args.String, Args.String); - repositoryWatcherListener.DidNotReceive().RemoteBranchDeleted(Args.String, Args.String); repositoryWatcherListener.DidNotReceive().RepositoryChanged(); } finally @@ -174,19 +161,13 @@ public async Task ShouldDetectBranchCreate() await GitClient.CreateBranch("feature/document2", "feature/document").StartAsAsync(); await TaskManager.Wait(); - watcherAutoResetEvent.LocalBranchCreated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - Logger.Trace("Continue test"); repositoryWatcherListener.DidNotReceive().ConfigChanged(); repositoryWatcherListener.DidNotReceive().HeadChanged(); repositoryWatcherListener.DidNotReceive().IndexChanged(); - repositoryWatcherListener.Received(1).LocalBranchCreated("feature/document2"); - repositoryWatcherListener.DidNotReceive().LocalBranchDeleted(Args.String); repositoryWatcherListener.DidNotReceive().LocalBranchChanged("feature/document2"); repositoryWatcherListener.DidNotReceive().RemoteBranchChanged(Args.String, Args.String); - repositoryWatcherListener.DidNotReceive().RemoteBranchCreated(Args.String, Args.String); - repositoryWatcherListener.DidNotReceive().RemoteBranchDeleted(Args.String, Args.String); repositoryWatcherListener.DidNotReceive().RepositoryChanged(); repositoryWatcherListener.ClearReceivedCalls(); @@ -196,19 +177,13 @@ public async Task ShouldDetectBranchCreate() await GitClient.CreateBranch("feature2/document2", "feature/document").StartAsAsync(); await TaskManager.Wait(); - watcherAutoResetEvent.LocalBranchCreated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - Logger.Trace("Continue test"); repositoryWatcherListener.DidNotReceive().ConfigChanged(); repositoryWatcherListener.DidNotReceive().HeadChanged(); repositoryWatcherListener.DidNotReceive().IndexChanged(); - repositoryWatcherListener.Received(1).LocalBranchCreated("feature2/document2"); - repositoryWatcherListener.DidNotReceive().LocalBranchDeleted(Args.String); repositoryWatcherListener.DidNotReceive().LocalBranchChanged(Args.String); repositoryWatcherListener.DidNotReceive().RemoteBranchChanged(Args.String, Args.String); - repositoryWatcherListener.DidNotReceive().RemoteBranchCreated(Args.String, Args.String); - repositoryWatcherListener.DidNotReceive().RemoteBranchDeleted(Args.String, Args.String); repositoryWatcherListener.DidNotReceive().RepositoryChanged(); repositoryWatcherListener.ClearReceivedCalls(); @@ -243,21 +218,13 @@ public async Task ShouldDetectChangesToRemotes() await TaskManager.Wait(); watcherAutoResetEvent.ConfigChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - watcherAutoResetEvent.RemoteBranchDeleted.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - watcherAutoResetEvent.RemoteBranchDeleted.WaitOne(TimeSpan.FromSeconds(2)); - watcherAutoResetEvent.RemoteBranchDeleted.WaitOne(TimeSpan.FromSeconds(2)); Logger.Trace("Continue test"); repositoryWatcherListener.Received().ConfigChanged(); repositoryWatcherListener.DidNotReceive().HeadChanged(); repositoryWatcherListener.DidNotReceive().IndexChanged(); - repositoryWatcherListener.DidNotReceive().LocalBranchCreated(Args.String); - repositoryWatcherListener.DidNotReceive().LocalBranchDeleted(Args.String); repositoryWatcherListener.DidNotReceive().LocalBranchChanged(Args.String); - repositoryWatcherListener.Received(1).RemoteBranchDeleted("origin", "feature/document-2"); - repositoryWatcherListener.Received(1).RemoteBranchDeleted("origin", "feature/other-feature"); - repositoryWatcherListener.Received(1).RemoteBranchDeleted("origin", "master"); repositoryWatcherListener.DidNotReceive().RepositoryChanged(); repositoryWatcherListener.ClearReceivedCalls(); @@ -277,12 +244,8 @@ public async Task ShouldDetectChangesToRemotes() repositoryWatcherListener.Received().ConfigChanged(); repositoryWatcherListener.DidNotReceive().HeadChanged(); repositoryWatcherListener.DidNotReceive().IndexChanged(); - repositoryWatcherListener.DidNotReceive().LocalBranchCreated(Args.String); - repositoryWatcherListener.DidNotReceive().LocalBranchDeleted(Args.String); repositoryWatcherListener.DidNotReceive().LocalBranchChanged(Args.String); repositoryWatcherListener.DidNotReceive().RemoteBranchChanged(Args.String, Args.String); - repositoryWatcherListener.DidNotReceive().RemoteBranchCreated(Args.String, Args.String); - repositoryWatcherListener.DidNotReceive().RemoteBranchDeleted(Args.String, Args.String); repositoryWatcherListener.DidNotReceive().RepositoryChanged(); } finally @@ -323,12 +286,8 @@ public async Task ShouldDetectGitPull() repositoryWatcherListener.DidNotReceive().ConfigChanged(); repositoryWatcherListener.DidNotReceive().HeadChanged(); repositoryWatcherListener.Received().IndexChanged(); - repositoryWatcherListener.DidNotReceive().LocalBranchCreated(Args.String); - repositoryWatcherListener.DidNotReceive().LocalBranchDeleted(Args.String); repositoryWatcherListener.Received().LocalBranchChanged("master"); repositoryWatcherListener.DidNotReceive().RemoteBranchChanged(Args.String, Args.String); - repositoryWatcherListener.DidNotReceive().RemoteBranchCreated(Args.String, Args.String); - repositoryWatcherListener.DidNotReceive().RemoteBranchDeleted(Args.String, Args.String); repositoryWatcherListener.Received().RepositoryChanged(); } finally @@ -360,21 +319,13 @@ public async Task ShouldDetectGitFetch() await GitClient.Fetch("origin").StartAsAsync(); await TaskManager.Wait(); - watcherAutoResetEvent.RemoteBranchCreated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - watcherAutoResetEvent.RemoteBranchCreated.WaitOne(TimeSpan.FromSeconds(2)); - Logger.Trace("Continue test"); repositoryWatcherListener.DidNotReceive().ConfigChanged(); repositoryWatcherListener.DidNotReceive().HeadChanged(); repositoryWatcherListener.DidNotReceive().IndexChanged(); - repositoryWatcherListener.DidNotReceive().LocalBranchCreated(Args.String); - repositoryWatcherListener.DidNotReceive().LocalBranchDeleted(Args.String); repositoryWatcherListener.DidNotReceive().LocalBranchChanged(Args.String); repositoryWatcherListener.DidNotReceive().RemoteBranchChanged(Args.String, Args.String); - repositoryWatcherListener.Received(1).RemoteBranchCreated("origin", "feature/new-feature"); - repositoryWatcherListener.Received(1).RemoteBranchCreated("origin", "feature/other-feature"); - repositoryWatcherListener.DidNotReceive().RemoteBranchDeleted(Args.String, Args.String); repositoryWatcherListener.DidNotReceive().RepositoryChanged(); } finally @@ -396,12 +347,8 @@ public interface IRepositoryWatcherListener void ConfigChanged(); void HeadChanged(); void IndexChanged(); - void LocalBranchCreated(string branch); - void LocalBranchDeleted(string branch); void LocalBranchChanged(string branch); void RemoteBranchChanged(string remote, string branch); - void RemoteBranchCreated(string remote, string branch); - void RemoteBranchDeleted(string remote, string branch); void RepositoryChanged(); } @@ -439,34 +386,6 @@ public static void AttachListener(this IRepositoryWatcherListener listener, IRep autoResetEvent?.LocalBranchChanged.Set(); }; - repositoryWatcher.LocalBranchCreated += s => - { - logger?.Trace("LocalBranchCreated: {0}", s); - listener.LocalBranchCreated(s); - autoResetEvent?.LocalBranchCreated.Set(); - }; - - repositoryWatcher.LocalBranchDeleted += s => - { - logger?.Trace("LocalBranchDeleted: {0}", s); - listener.LocalBranchDeleted(s); - autoResetEvent?.LocalBranchDeleted.Set(); - }; - - repositoryWatcher.RemoteBranchCreated += (s, s1) => - { - logger?.Trace("RemoteBranchCreated: {0} {1}", s, s1); - listener.RemoteBranchCreated(s, s1); - autoResetEvent?.RemoteBranchCreated.Set(); - }; - - repositoryWatcher.RemoteBranchDeleted += (s, s1) => - { - logger?.Trace("RemoteBranchDeleted: {0} {1}", s, s1); - listener.RemoteBranchDeleted(s, s1); - autoResetEvent?.RemoteBranchDeleted.Set(); - }; - repositoryWatcher.RepositoryChanged += () => { logger?.Trace("RepositoryChanged"); @@ -480,12 +399,8 @@ public static void AssertDidNotReceiveAnyCalls(this IRepositoryWatcherListener r repositoryWatcherListener.DidNotReceive().ConfigChanged(); repositoryWatcherListener.DidNotReceive().HeadChanged(); repositoryWatcherListener.DidNotReceive().IndexChanged(); - repositoryWatcherListener.DidNotReceive().LocalBranchCreated(Args.String); - repositoryWatcherListener.DidNotReceive().LocalBranchDeleted(Args.String); repositoryWatcherListener.DidNotReceive().LocalBranchChanged(Args.String); repositoryWatcherListener.DidNotReceive().RemoteBranchChanged(Args.String, Args.String); - repositoryWatcherListener.DidNotReceive().RemoteBranchCreated(Args.String, Args.String); - repositoryWatcherListener.DidNotReceive().RemoteBranchDeleted(Args.String, Args.String); repositoryWatcherListener.DidNotReceive().RepositoryChanged(); } } @@ -496,11 +411,7 @@ class RepositoryWatcherAutoResetEvent public AutoResetEvent ConfigChanged { get; } = new AutoResetEvent(false); public AutoResetEvent IndexChanged { get; } = new AutoResetEvent(false); public AutoResetEvent LocalBranchChanged { get; } = new AutoResetEvent(false); - public AutoResetEvent LocalBranchCreated { get; } = new AutoResetEvent(false); - public AutoResetEvent LocalBranchDeleted { get; } = new AutoResetEvent(false); public AutoResetEvent RemoteBranchChanged { get; } = new AutoResetEvent(false); - public AutoResetEvent RemoteBranchCreated { get; } = new AutoResetEvent(false); - public AutoResetEvent RemoteBranchDeleted { get; } = new AutoResetEvent(false); public AutoResetEvent RepositoryChanged { get; } = new AutoResetEvent(false); } } diff --git a/src/tests/TestUtils/Events/IRepositoryManagerListener.cs b/src/tests/TestUtils/Events/IRepositoryManagerListener.cs index ec7a10537..63cbf2121 100644 --- a/src/tests/TestUtils/Events/IRepositoryManagerListener.cs +++ b/src/tests/TestUtils/Events/IRepositoryManagerListener.cs @@ -15,10 +15,6 @@ interface IRepositoryManagerListener void OnLocalBranchListUpdated(Dictionary branchList); void OnRemoteBranchListUpdated(Dictionary remotesList, Dictionary> remoteBranchList); void OnLocalBranchUpdated(string name); - void OnLocalBranchAdded(string name); - void OnLocalBranchRemoved(string name); - void OnRemoteBranchAdded(string origin, string name); - void OnRemoteBranchRemoved(string origin, string name); void OnCurrentBranchAndRemoteUpdated(ConfigBranch? configBranch, ConfigRemote? configRemote); } @@ -111,30 +107,6 @@ public static void AttachListener(this IRepositoryManagerListener listener, listener.OnLocalBranchUpdated(name); managerEvents?.OnLocalBranchUpdated.Set(); }; - - repositoryManager.OnLocalBranchAdded += name => { - logger?.Trace("OnLocalBranchAdded Name:{0}", name); - listener.OnLocalBranchAdded(name); - managerEvents?.OnLocalBranchAdded.Set(); - }; - - repositoryManager.OnLocalBranchRemoved += name => { - logger?.Trace("OnLocalBranchRemoved Name:{0}", name); - listener.OnLocalBranchRemoved(name); - managerEvents?.OnLocalBranchRemoved.Set(); - }; - - repositoryManager.OnRemoteBranchAdded += (origin, name) => { - logger?.Trace("OnRemoteBranchAdded Origin:{0} Name:{1}", origin, name); - listener.OnRemoteBranchAdded(origin, name); - managerEvents?.OnRemoteBranchAdded.Set(); - }; - - repositoryManager.OnRemoteBranchRemoved += (origin, name) => { - logger?.Trace("OnRemoteBranchRemoved Origin:{0} Name:{1}", origin, name); - listener.OnRemoteBranchRemoved(origin, name); - managerEvents?.OnRemoteBranchRemoved.Set(); - }; } public static void AssertDidNotReceiveAnyCalls(this IRepositoryManagerListener repositoryManagerListener) @@ -146,10 +118,6 @@ public static void AssertDidNotReceiveAnyCalls(this IRepositoryManagerListener r repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); - repositoryManagerListener.DidNotReceive().OnLocalBranchAdded(Args.String); - repositoryManagerListener.DidNotReceive().OnLocalBranchRemoved(Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String); - repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String); } } }; \ No newline at end of file From 90c180a3848f81bb31ddc55df5c01146a4ea58b3 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 14 Nov 2017 15:07:40 -0500 Subject: [PATCH 08/35] Removing more code --- src/GitHub.Api/Events/RepositoryWatcher.cs | 2 -- src/GitHub.Api/Git/Repository.cs | 10 ------ src/GitHub.Api/Git/RepositoryManager.cs | 8 ----- .../Events/RepositoryManagerTests.cs | 15 --------- .../Events/RepositoryWatcherTests.cs | 31 ------------------- .../Events/IRepositoryManagerListener.cs | 18 ----------- 6 files changed, 84 deletions(-) diff --git a/src/GitHub.Api/Events/RepositoryWatcher.cs b/src/GitHub.Api/Events/RepositoryWatcher.cs index 891270767..3002379f4 100644 --- a/src/GitHub.Api/Events/RepositoryWatcher.cs +++ b/src/GitHub.Api/Events/RepositoryWatcher.cs @@ -14,7 +14,6 @@ interface IRepositoryWatcher : IDisposable event Action HeadChanged; event Action IndexChanged; event Action ConfigChanged; - event Action LocalBranchChanged; event Action RepositoryChanged; void Initialize(); int CheckAndProcessEvents(); @@ -35,7 +34,6 @@ class RepositoryWatcher : IRepositoryWatcher public event Action HeadChanged; public event Action IndexChanged; public event Action ConfigChanged; - public event Action LocalBranchChanged; public event Action RepositoryChanged; public RepositoryWatcher(IPlatform platform, RepositoryPathConfiguration paths, CancellationToken cancellationToken) diff --git a/src/GitHub.Api/Git/Repository.cs b/src/GitHub.Api/Git/Repository.cs index 864b44ca7..6213be4df 100644 --- a/src/GitHub.Api/Git/Repository.cs +++ b/src/GitHub.Api/Git/Repository.cs @@ -51,7 +51,6 @@ public void Initialize(IRepositoryManager initRepositoryManager) repositoryManager.OnRepositoryUpdated += RepositoryManager_OnRepositoryUpdated; repositoryManager.OnLocalBranchListUpdated += RepositoryManager_OnLocalBranchListUpdated; repositoryManager.OnRemoteBranchListUpdated += RepositoryManager_OnRemoteBranchListUpdated; - repositoryManager.OnLocalBranchUpdated += RepositoryManager_OnLocalBranchUpdated; UpdateGitStatus(); UpdateGitLog(); @@ -405,15 +404,6 @@ private void RepositoryManager_OnCurrentBranchAndRemoteUpdated(ConfigBranch? bra }) { Affinity = TaskAffinity.UI }.Start(); } - private void RepositoryManager_OnLocalBranchUpdated(string name) - { - if (name == CurrentConfigBranch?.Name) - { - UpdateGitStatus(); - UpdateGitLog(); - } - } - private void RepositoryManager_OnRemoteBranchListUpdated(Dictionary remotes, Dictionary> branches) { diff --git a/src/GitHub.Api/Git/RepositoryManager.cs b/src/GitHub.Api/Git/RepositoryManager.cs index 9cf839eff..b12f959be 100644 --- a/src/GitHub.Api/Git/RepositoryManager.cs +++ b/src/GitHub.Api/Git/RepositoryManager.cs @@ -10,7 +10,6 @@ public interface IRepositoryManager : IDisposable event Action OnCurrentBranchAndRemoteUpdated; event Action OnIsBusyChanged; event Action> OnLocalBranchListUpdated; - event Action OnLocalBranchUpdated; event Action, Dictionary>> OnRemoteBranchListUpdated; event Action OnRepositoryUpdated; @@ -97,7 +96,6 @@ class RepositoryManager : IRepositoryManager public event Action OnCurrentBranchAndRemoteUpdated; public event Action OnIsBusyChanged; public event Action> OnLocalBranchListUpdated; - public event Action OnLocalBranchUpdated; public event Action, Dictionary>> OnRemoteBranchListUpdated; public event Action OnRepositoryUpdated; @@ -288,7 +286,6 @@ private void SetupWatcher() watcher.HeadChanged += Watcher_OnHeadChanged; watcher.IndexChanged += Watcher_OnIndexChanged; watcher.ConfigChanged += Watcher_OnConfigChanged; - watcher.LocalBranchChanged += Watcher_OnLocalBranchChanged; watcher.RepositoryChanged += Watcher_OnRepositoryChanged; } @@ -386,11 +383,6 @@ private void UpdateCurrentBranchAndRemote(string head) private void Watcher_OnIndexChanged() {} - private void Watcher_OnLocalBranchChanged(string name) - { - OnLocalBranchUpdated?.Invoke(name); - } - private void UpdateConfigData(bool resetConfig = false) { Logger.Trace("UpdateConfigData reset:{0}", resetConfig); diff --git a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs index c3a33b6c5..65d025fab 100644 --- a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs +++ b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs @@ -96,7 +96,6 @@ public async Task ShouldDetectFileChanges() repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); - repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); result.AssertEqual(expected); } @@ -150,7 +149,6 @@ public async Task ShouldAddAndCommitFiles() repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); - repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); result.AssertEqual(expectedAfterChanges); @@ -171,7 +169,6 @@ await RepositoryManager repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); - repositoryManagerListener.Received().OnLocalBranchUpdated(expectedLocalBranch); } [Test, Ignore("Fails often")] @@ -218,7 +215,6 @@ public async Task ShouldAddAndCommitAllFiles() repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); - repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); result.AssertEqual(expectedAfterChanges); @@ -239,7 +235,6 @@ await RepositoryManager repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); - repositoryManagerListener.Received().OnLocalBranchUpdated(expectedLocalBranch); } [Test] @@ -276,7 +271,6 @@ public async Task ShouldDetectBranchChange() repositoryManagerListener.Received().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); - repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); result.AssertEqual(expected); @@ -324,7 +318,6 @@ public async Task ShouldDetectBranchDelete() repositoryManagerListener.Received().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.Received().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.Received().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); - repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); Repository.Name.Should().Be("IOTestsRepo"); Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); @@ -369,7 +362,6 @@ public async Task ShouldDetectBranchCreate() repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); - repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); Repository.Name.Should().Be("IOTestsRepo"); Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); @@ -410,7 +402,6 @@ public async Task ShouldDetectBranchCreate() repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); - repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); Repository.Name.Should().Be("IOTestsRepo"); Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); @@ -489,7 +480,6 @@ public async Task ShouldDetectChangesToRemotes() repositoryManagerListener.Received().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.Received().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.Received().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); - repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); Repository.Name.Should().Be("IOTestsRepo_master_clean_sync"); Repository.CloneUrl.Should().BeNull(); @@ -519,7 +509,6 @@ public async Task ShouldDetectChangesToRemotes() repositoryManagerListener.Received().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.Received().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.Received().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); - repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); Repository.Name.Should().Be("IOTestsRepo"); Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilShana/IOTestsRepo.git"); @@ -595,7 +584,6 @@ await RepositoryManager.CreateBranch("branch2", "another/master") repositoryManagerListener.Received().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.Received().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.Received().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); - repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); Repository.Name.Should().Be("IOTestsRepo"); Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); @@ -643,7 +631,6 @@ await RepositoryManager.SwitchBranch("branch2") repositoryManagerListener.Received().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); - repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); Repository.Name.Should().Be("Url"); Repository.CloneUrl.ToString().Should().Be("https://another.remote/Owner/Url.git"); @@ -705,7 +692,6 @@ public async Task ShouldDetectGitPull() repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); - repositoryManagerListener.Received().OnLocalBranchUpdated(Args.String); result.AssertEqual(expected); @@ -781,7 +767,6 @@ public async Task ShouldDetectGitFetch() repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); - repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); Repository.Name.Should().Be("IOTestsRepo"); Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git"); diff --git a/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs b/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs index 7e2f52f1c..b717816c5 100644 --- a/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs +++ b/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs @@ -46,8 +46,6 @@ public async Task ShouldDetectFileChanges() repositoryWatcherListener.DidNotReceive().ConfigChanged(); repositoryWatcherListener.DidNotReceive().HeadChanged(); repositoryWatcherListener.Received().IndexChanged(); - repositoryWatcherListener.DidNotReceive().LocalBranchChanged(Args.String); - repositoryWatcherListener.DidNotReceive().RemoteBranchChanged(Args.String, Args.String); repositoryWatcherListener.Received().RepositoryChanged(); } finally @@ -88,8 +86,6 @@ public async Task ShouldDetectBranchChange() repositoryWatcherListener.DidNotReceive().ConfigChanged(); repositoryWatcherListener.Received().HeadChanged(); repositoryWatcherListener.Received().IndexChanged(); - repositoryWatcherListener.DidNotReceive().LocalBranchChanged(Args.String); - repositoryWatcherListener.DidNotReceive().RemoteBranchChanged(Args.String, Args.String); repositoryWatcherListener.Received().RepositoryChanged(); } finally @@ -128,8 +124,6 @@ public async Task ShouldDetectBranchDelete() repositoryWatcherListener.Received(1).ConfigChanged(); repositoryWatcherListener.DidNotReceive().HeadChanged(); repositoryWatcherListener.DidNotReceive().IndexChanged(); - repositoryWatcherListener.DidNotReceive().LocalBranchChanged(Args.String); - repositoryWatcherListener.DidNotReceive().RemoteBranchChanged(Args.String, Args.String); repositoryWatcherListener.DidNotReceive().RepositoryChanged(); } finally @@ -166,8 +160,6 @@ public async Task ShouldDetectBranchCreate() repositoryWatcherListener.DidNotReceive().ConfigChanged(); repositoryWatcherListener.DidNotReceive().HeadChanged(); repositoryWatcherListener.DidNotReceive().IndexChanged(); - repositoryWatcherListener.DidNotReceive().LocalBranchChanged("feature/document2"); - repositoryWatcherListener.DidNotReceive().RemoteBranchChanged(Args.String, Args.String); repositoryWatcherListener.DidNotReceive().RepositoryChanged(); repositoryWatcherListener.ClearReceivedCalls(); @@ -182,8 +174,6 @@ public async Task ShouldDetectBranchCreate() repositoryWatcherListener.DidNotReceive().ConfigChanged(); repositoryWatcherListener.DidNotReceive().HeadChanged(); repositoryWatcherListener.DidNotReceive().IndexChanged(); - repositoryWatcherListener.DidNotReceive().LocalBranchChanged(Args.String); - repositoryWatcherListener.DidNotReceive().RemoteBranchChanged(Args.String, Args.String); repositoryWatcherListener.DidNotReceive().RepositoryChanged(); repositoryWatcherListener.ClearReceivedCalls(); @@ -224,7 +214,6 @@ public async Task ShouldDetectChangesToRemotes() repositoryWatcherListener.Received().ConfigChanged(); repositoryWatcherListener.DidNotReceive().HeadChanged(); repositoryWatcherListener.DidNotReceive().IndexChanged(); - repositoryWatcherListener.DidNotReceive().LocalBranchChanged(Args.String); repositoryWatcherListener.DidNotReceive().RepositoryChanged(); repositoryWatcherListener.ClearReceivedCalls(); @@ -244,8 +233,6 @@ public async Task ShouldDetectChangesToRemotes() repositoryWatcherListener.Received().ConfigChanged(); repositoryWatcherListener.DidNotReceive().HeadChanged(); repositoryWatcherListener.DidNotReceive().IndexChanged(); - repositoryWatcherListener.DidNotReceive().LocalBranchChanged(Args.String); - repositoryWatcherListener.DidNotReceive().RemoteBranchChanged(Args.String, Args.String); repositoryWatcherListener.DidNotReceive().RepositoryChanged(); } finally @@ -278,7 +265,6 @@ public async Task ShouldDetectGitPull() await TaskManager.Wait(); watcherAutoResetEvent.IndexChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - watcherAutoResetEvent.LocalBranchChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); watcherAutoResetEvent.RepositoryChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); Logger.Trace("Continue test"); @@ -286,8 +272,6 @@ public async Task ShouldDetectGitPull() repositoryWatcherListener.DidNotReceive().ConfigChanged(); repositoryWatcherListener.DidNotReceive().HeadChanged(); repositoryWatcherListener.Received().IndexChanged(); - repositoryWatcherListener.Received().LocalBranchChanged("master"); - repositoryWatcherListener.DidNotReceive().RemoteBranchChanged(Args.String, Args.String); repositoryWatcherListener.Received().RepositoryChanged(); } finally @@ -324,8 +308,6 @@ public async Task ShouldDetectGitFetch() repositoryWatcherListener.DidNotReceive().ConfigChanged(); repositoryWatcherListener.DidNotReceive().HeadChanged(); repositoryWatcherListener.DidNotReceive().IndexChanged(); - repositoryWatcherListener.DidNotReceive().LocalBranchChanged(Args.String); - repositoryWatcherListener.DidNotReceive().RemoteBranchChanged(Args.String, Args.String); repositoryWatcherListener.DidNotReceive().RepositoryChanged(); } finally @@ -347,8 +329,6 @@ public interface IRepositoryWatcherListener void ConfigChanged(); void HeadChanged(); void IndexChanged(); - void LocalBranchChanged(string branch); - void RemoteBranchChanged(string remote, string branch); void RepositoryChanged(); } @@ -379,13 +359,6 @@ public static void AttachListener(this IRepositoryWatcherListener listener, IRep autoResetEvent?.IndexChanged.Set(); }; - repositoryWatcher.LocalBranchChanged += s => - { - logger?.Trace("LocalBranchChanged: {0}", s); - listener.LocalBranchChanged(s); - autoResetEvent?.LocalBranchChanged.Set(); - }; - repositoryWatcher.RepositoryChanged += () => { logger?.Trace("RepositoryChanged"); @@ -399,8 +372,6 @@ public static void AssertDidNotReceiveAnyCalls(this IRepositoryWatcherListener r repositoryWatcherListener.DidNotReceive().ConfigChanged(); repositoryWatcherListener.DidNotReceive().HeadChanged(); repositoryWatcherListener.DidNotReceive().IndexChanged(); - repositoryWatcherListener.DidNotReceive().LocalBranchChanged(Args.String); - repositoryWatcherListener.DidNotReceive().RemoteBranchChanged(Args.String, Args.String); repositoryWatcherListener.DidNotReceive().RepositoryChanged(); } } @@ -410,8 +381,6 @@ class RepositoryWatcherAutoResetEvent public AutoResetEvent HeadChanged { get; } = new AutoResetEvent(false); public AutoResetEvent ConfigChanged { get; } = new AutoResetEvent(false); public AutoResetEvent IndexChanged { get; } = new AutoResetEvent(false); - public AutoResetEvent LocalBranchChanged { get; } = new AutoResetEvent(false); - public AutoResetEvent RemoteBranchChanged { get; } = new AutoResetEvent(false); public AutoResetEvent RepositoryChanged { get; } = new AutoResetEvent(false); } } diff --git a/src/tests/TestUtils/Events/IRepositoryManagerListener.cs b/src/tests/TestUtils/Events/IRepositoryManagerListener.cs index 63cbf2121..3622592ef 100644 --- a/src/tests/TestUtils/Events/IRepositoryManagerListener.cs +++ b/src/tests/TestUtils/Events/IRepositoryManagerListener.cs @@ -14,7 +14,6 @@ interface IRepositoryManagerListener void OnLocksUpdated(IEnumerable locks); void OnLocalBranchListUpdated(Dictionary branchList); void OnRemoteBranchListUpdated(Dictionary remotesList, Dictionary> remoteBranchList); - void OnLocalBranchUpdated(string name); void OnCurrentBranchAndRemoteUpdated(ConfigBranch? configBranch, ConfigRemote? configRemote); } @@ -28,11 +27,6 @@ class RepositoryManagerEvents public EventWaitHandle OnHeadUpdated { get; } = new AutoResetEvent(false); public EventWaitHandle OnLocalBranchListUpdated { get; } = new AutoResetEvent(false); public EventWaitHandle OnRemoteBranchListUpdated { get; } = new AutoResetEvent(false); - public EventWaitHandle OnLocalBranchUpdated { get; } = new AutoResetEvent(false); - public EventWaitHandle OnLocalBranchAdded { get; } = new AutoResetEvent(false); - public EventWaitHandle OnLocalBranchRemoved { get; } = new AutoResetEvent(false); - public EventWaitHandle OnRemoteBranchAdded { get; } = new AutoResetEvent(false); - public EventWaitHandle OnRemoteBranchRemoved { get; } = new AutoResetEvent(false); public void Reset() { @@ -44,11 +38,6 @@ public void Reset() OnHeadUpdated.Reset(); OnLocalBranchListUpdated.Reset(); OnRemoteBranchListUpdated.Reset(); - OnLocalBranchUpdated.Reset(); - OnLocalBranchAdded.Reset(); - OnLocalBranchRemoved.Reset(); - OnRemoteBranchAdded.Reset(); - OnRemoteBranchRemoved.Reset(); } public void WaitForNotBusy(int seconds = 1) @@ -101,12 +90,6 @@ public static void AttachListener(this IRepositoryManagerListener listener, listener.OnRemoteBranchListUpdated(remotesList, branchList); managerEvents?.OnRemoteBranchListUpdated.Set(); }; - - repositoryManager.OnLocalBranchUpdated += name => { - logger?.Trace("OnLocalBranchUpdated Name:{0}", name); - listener.OnLocalBranchUpdated(name); - managerEvents?.OnLocalBranchUpdated.Set(); - }; } public static void AssertDidNotReceiveAnyCalls(this IRepositoryManagerListener repositoryManagerListener) @@ -117,7 +100,6 @@ public static void AssertDidNotReceiveAnyCalls(this IRepositoryManagerListener r repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); - repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String); } } }; \ No newline at end of file From 6f144013adcb714b7342def39cebd86bbdbede67 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 14 Nov 2017 15:10:11 -0500 Subject: [PATCH 09/35] Removing unused constant --- src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs b/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs index b717816c5..c0792b4aa 100644 --- a/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs +++ b/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs @@ -12,8 +12,6 @@ namespace IntegrationTests [TestFixture, Category("TimeSensitive")] class RepositoryWatcherTests : BaseGitEnvironmentTest { - private const int ThreadSleepTimeout = 2000; - [Test, Category("TimeSensitive")] public async Task ShouldDetectFileChanges() { From da7b314e056e726dcf70c3708d0a765a38f98bf2 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 14 Nov 2017 16:05:51 -0500 Subject: [PATCH 10/35] Adding events to RepositoryWatcher and fixing RepositoryWatcherTests --- src/GitHub.Api/Events/RepositoryWatcher.cs | 39 +++-- .../Events/RepositoryWatcherTests.cs | 162 +++++++++++++----- 2 files changed, 145 insertions(+), 56 deletions(-) diff --git a/src/GitHub.Api/Events/RepositoryWatcher.cs b/src/GitHub.Api/Events/RepositoryWatcher.cs index 7718774ef..a45d7b3f2 100644 --- a/src/GitHub.Api/Events/RepositoryWatcher.cs +++ b/src/GitHub.Api/Events/RepositoryWatcher.cs @@ -14,7 +14,10 @@ interface IRepositoryWatcher : IDisposable event Action HeadChanged; event Action IndexChanged; event Action ConfigChanged; + event Action RepositoryCommitted; event Action RepositoryChanged; + event Action LocalBranchesChanged; + event Action RemoteBranchesChanged; void Initialize(); int CheckAndProcessEvents(); } @@ -34,7 +37,10 @@ class RepositoryWatcher : IRepositoryWatcher public event Action HeadChanged; public event Action IndexChanged; public event Action ConfigChanged; + public event Action RepositoryCommitted; public event Action RepositoryChanged; + public event Action LocalBranchesChanged; + public event Action RemoteBranchesChanged; public RepositoryWatcher(IPlatform platform, RepositoryPathConfiguration paths, CancellationToken cancellationToken) { @@ -183,13 +189,13 @@ private int ProcessEvents(Event[] fileEvents) { events.Add(EventType.IndexChanged, null); } - else if (fileA.IsChildOf(paths.RemotesPath)) + else if (!events.ContainsKey(EventType.RemoteBranchesChanged) && fileA.IsChildOf(paths.RemotesPath)) { - throw new NotImplementedException(); + events.Add(EventType.RemoteBranchesChanged, null); } - else if (fileA.IsChildOf(paths.BranchesPath)) + else if (!events.ContainsKey(EventType.LocalBranchesChanged) && fileA.IsChildOf(paths.BranchesPath)) { - throw new NotImplementedException(); + events.Add(EventType.LocalBranchesChanged, null); } } else @@ -205,13 +211,6 @@ private int ProcessEvents(Event[] fileEvents) return FireEvents(events); } - private void AddOrUpdateEventData(Dictionary> events, EventType type, EventData data) - { - if (!events.ContainsKey(type)) - events.Add(type, new List()); - events[type].Add(data); - } - private int FireEvents(Dictionary> events) { int eventsProcessed = 0; @@ -229,6 +228,20 @@ private int FireEvents(Dictionary> events) eventsProcessed++; } + if (events.ContainsKey(EventType.LocalBranchesChanged)) + { + Logger.Trace("LocalBranchesChanged"); + LocalBranchesChanged?.Invoke(); + eventsProcessed++; + } + + if (events.ContainsKey(EventType.RemoteBranchesChanged)) + { + Logger.Trace("RemoteBranchesChanged"); + RemoteBranchesChanged?.Invoke(); + eventsProcessed++; + } + if (events.ContainsKey(EventType.IndexChanged)) { Logger.Trace("IndexChanged"); @@ -276,8 +289,10 @@ private enum EventType None, ConfigChanged, HeadChanged, - RepositoryChanged, IndexChanged, + LocalBranchesChanged, + RemoteBranchesChanged, + RepositoryChanged, } private class EventData diff --git a/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs b/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs index c0792b4aa..3de5e1fa7 100644 --- a/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs +++ b/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs @@ -15,7 +15,7 @@ class RepositoryWatcherTests : BaseGitEnvironmentTest [Test, Category("TimeSensitive")] public async Task ShouldDetectFileChanges() { - await Initialize(TestRepoMasterCleanSynchronized); + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); using (var repositoryWatcher = CreateRepositoryWatcher(TestRepoMasterCleanSynchronized)) { @@ -26,7 +26,6 @@ public async Task ShouldDetectFileChanges() repositoryWatcher.Initialize(); repositoryWatcher.Start(); - try { var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt"); @@ -36,15 +35,17 @@ public async Task ShouldDetectFileChanges() foobarTxt.WriteAllText("foobar"); await TaskManager.Wait(); - watcherAutoResetEvent.IndexChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); watcherAutoResetEvent.RepositoryChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); Logger.Trace("Continue test"); - repositoryWatcherListener.DidNotReceive().ConfigChanged(); repositoryWatcherListener.DidNotReceive().HeadChanged(); - repositoryWatcherListener.Received().IndexChanged(); + repositoryWatcherListener.DidNotReceive().ConfigChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); + repositoryWatcherListener.DidNotReceive().IndexChanged(); repositoryWatcherListener.Received().RepositoryChanged(); + repositoryWatcherListener.DidNotReceive().LocalBranchesChanged(); + repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); } finally { @@ -56,7 +57,7 @@ public async Task ShouldDetectFileChanges() [Test] public async Task ShouldDetectBranchChange() { - await Initialize(TestRepoMasterCleanSynchronized); + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); using (var repositoryWatcher = CreateRepositoryWatcher(TestRepoMasterCleanSynchronized)) { @@ -67,6 +68,7 @@ public async Task ShouldDetectBranchChange() repositoryWatcher.Initialize(); repositoryWatcher.Start(); + repositoryWatcher.Stop(); try { @@ -75,16 +77,23 @@ public async Task ShouldDetectBranchChange() await GitClient.SwitchBranch("feature/document").StartAsAsync(); await TaskManager.Wait(); + Logger.Trace("Completed Command"); + + repositoryWatcher.Start(); + watcherAutoResetEvent.HeadChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); watcherAutoResetEvent.IndexChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); watcherAutoResetEvent.RepositoryChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); Logger.Trace("Continue test"); + repositoryWatcherListener.Received(1).HeadChanged(); repositoryWatcherListener.DidNotReceive().ConfigChanged(); - repositoryWatcherListener.Received().HeadChanged(); - repositoryWatcherListener.Received().IndexChanged(); - repositoryWatcherListener.Received().RepositoryChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); + repositoryWatcherListener.Received(1).IndexChanged(); + repositoryWatcherListener.Received(1).RepositoryChanged(); + repositoryWatcherListener.DidNotReceive().LocalBranchesChanged(); + repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); } finally { @@ -96,7 +105,7 @@ public async Task ShouldDetectBranchChange() [Test] public async Task ShouldDetectBranchDelete() { - await Initialize(TestRepoMasterCleanSynchronized); + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); using (var repositoryWatcher = CreateRepositoryWatcher(TestRepoMasterCleanSynchronized)) { @@ -107,6 +116,7 @@ public async Task ShouldDetectBranchDelete() repositoryWatcher.Initialize(); repositoryWatcher.Start(); + repositoryWatcher.Stop(); try { @@ -115,14 +125,21 @@ public async Task ShouldDetectBranchDelete() await GitClient.DeleteBranch("feature/document", true).StartAsAsync(); await TaskManager.Wait(); + Logger.Trace("Completed Command"); + + repositoryWatcher.Start(); + watcherAutoResetEvent.ConfigChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); Logger.Trace("Continue test"); - repositoryWatcherListener.Received(1).ConfigChanged(); repositoryWatcherListener.DidNotReceive().HeadChanged(); + repositoryWatcherListener.Received(1).ConfigChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); repositoryWatcherListener.DidNotReceive().IndexChanged(); repositoryWatcherListener.DidNotReceive().RepositoryChanged(); + repositoryWatcherListener.Received(1).LocalBranchesChanged(); + repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); } finally { @@ -134,7 +151,7 @@ public async Task ShouldDetectBranchDelete() [Test] public async Task ShouldDetectBranchCreate() { - await Initialize(TestRepoMasterCleanSynchronized); + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); using (var repositoryWatcher = CreateRepositoryWatcher(TestRepoMasterCleanSynchronized)) { @@ -145,6 +162,7 @@ public async Task ShouldDetectBranchCreate() repositoryWatcher.Initialize(); repositoryWatcher.Start(); + repositoryWatcher.Stop(); try { @@ -155,13 +173,21 @@ public async Task ShouldDetectBranchCreate() Logger.Trace("Continue test"); - repositoryWatcherListener.DidNotReceive().ConfigChanged(); + repositoryWatcher.Start(); + + watcherAutoResetEvent.LocalBranchesChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryWatcherListener.DidNotReceive().HeadChanged(); + repositoryWatcherListener.DidNotReceive().ConfigChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); repositoryWatcherListener.DidNotReceive().IndexChanged(); repositoryWatcherListener.DidNotReceive().RepositoryChanged(); - + repositoryWatcherListener.Received(1).LocalBranchesChanged(); + repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); repositoryWatcherListener.ClearReceivedCalls(); + repositoryWatcher.Stop(); + Logger.Trace("Issuing Command"); await GitClient.CreateBranch("feature2/document2", "feature/document").StartAsAsync(); @@ -169,11 +195,17 @@ public async Task ShouldDetectBranchCreate() Logger.Trace("Continue test"); - repositoryWatcherListener.DidNotReceive().ConfigChanged(); + repositoryWatcher.Start(); + + watcherAutoResetEvent.LocalBranchesChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryWatcherListener.DidNotReceive().HeadChanged(); + repositoryWatcherListener.DidNotReceive().ConfigChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); repositoryWatcherListener.DidNotReceive().IndexChanged(); repositoryWatcherListener.DidNotReceive().RepositoryChanged(); - + repositoryWatcherListener.Received(1).LocalBranchesChanged(); + repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); repositoryWatcherListener.ClearReceivedCalls(); } finally @@ -186,7 +218,7 @@ public async Task ShouldDetectBranchCreate() [Test] public async Task ShouldDetectChangesToRemotes() { - await Initialize(TestRepoMasterCleanSynchronized); + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); using (var repositoryWatcher = CreateRepositoryWatcher(TestRepoMasterCleanSynchronized)) { @@ -197,6 +229,7 @@ public async Task ShouldDetectChangesToRemotes() repositoryWatcher.Initialize(); repositoryWatcher.Start(); + repositoryWatcher.Stop(); try { @@ -205,33 +238,41 @@ public async Task ShouldDetectChangesToRemotes() await GitClient.RemoteRemove("origin").StartAsAsync(); await TaskManager.Wait(); - watcherAutoResetEvent.ConfigChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - Logger.Trace("Continue test"); - repositoryWatcherListener.Received().ConfigChanged(); + repositoryWatcher.Start(); + watcherAutoResetEvent.ConfigChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + watcherAutoResetEvent.RemoteBranchesChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryWatcherListener.DidNotReceive().HeadChanged(); + repositoryWatcherListener.Received(1).ConfigChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); repositoryWatcherListener.DidNotReceive().IndexChanged(); repositoryWatcherListener.DidNotReceive().RepositoryChanged(); - + repositoryWatcherListener.DidNotReceive().LocalBranchesChanged(); + repositoryWatcherListener.Received(1).RemoteBranchesChanged(); repositoryWatcherListener.ClearReceivedCalls(); - watcherAutoResetEvent.ConfigChanged.Reset(); + + repositoryWatcher.Stop(); Logger.Trace("Issuing 2nd Command"); await GitClient.RemoteAdd("origin", "https://github.com/EvilStanleyGoldman/IOTestsRepo.git").StartAsAsync(); - // give the fs watcher a bit of time to catch up - await TaskEx.Delay(500); await TaskManager.Wait(); - watcherAutoResetEvent.ConfigChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - Logger.Trace("Continue 2nd test"); - repositoryWatcherListener.Received().ConfigChanged(); + repositoryWatcher.Start(); + watcherAutoResetEvent.ConfigChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + watcherAutoResetEvent.RemoteBranchesChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryWatcherListener.DidNotReceive().HeadChanged(); + repositoryWatcherListener.Received(1).ConfigChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); repositoryWatcherListener.DidNotReceive().IndexChanged(); repositoryWatcherListener.DidNotReceive().RepositoryChanged(); + repositoryWatcherListener.DidNotReceive().LocalBranchesChanged(); + repositoryWatcherListener.Received(1).RemoteBranchesChanged(); } finally { @@ -243,7 +284,7 @@ public async Task ShouldDetectChangesToRemotes() [Test] public async Task ShouldDetectGitPull() { - await Initialize(TestRepoMasterCleanSynchronized); + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); using (var repositoryWatcher = CreateRepositoryWatcher(TestRepoMasterCleanSynchronized)) { @@ -254,6 +295,7 @@ public async Task ShouldDetectGitPull() repositoryWatcher.Initialize(); repositoryWatcher.Start(); + repositoryWatcher.Stop(); try { @@ -262,15 +304,20 @@ public async Task ShouldDetectGitPull() await GitClient.Pull("origin", "master").StartAsAsync(); await TaskManager.Wait(); + Logger.Trace("Continue test"); + + repositoryWatcher.Start(); + watcherAutoResetEvent.IndexChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); watcherAutoResetEvent.RepositoryChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - Logger.Trace("Continue test"); - - repositoryWatcherListener.DidNotReceive().ConfigChanged(); repositoryWatcherListener.DidNotReceive().HeadChanged(); - repositoryWatcherListener.Received().IndexChanged(); - repositoryWatcherListener.Received().RepositoryChanged(); + repositoryWatcherListener.DidNotReceive().ConfigChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); + repositoryWatcherListener.Received(1).IndexChanged(); + repositoryWatcherListener.Received(1).RepositoryChanged(); + repositoryWatcherListener.Received(1).LocalBranchesChanged(); + repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); } finally { @@ -282,7 +329,7 @@ public async Task ShouldDetectGitPull() [Test] public async Task ShouldDetectGitFetch() { - await Initialize(TestRepoMasterCleanUnsynchronized); + await Initialize(TestRepoMasterCleanUnsynchronized, initializeRepository: false); using (var repositoryWatcher = CreateRepositoryWatcher(TestRepoMasterCleanUnsynchronized)) { @@ -303,10 +350,7 @@ public async Task ShouldDetectGitFetch() Logger.Trace("Continue test"); - repositoryWatcherListener.DidNotReceive().ConfigChanged(); - repositoryWatcherListener.DidNotReceive().HeadChanged(); - repositoryWatcherListener.DidNotReceive().IndexChanged(); - repositoryWatcherListener.DidNotReceive().RepositoryChanged(); + repositoryWatcherListener.AssertDidNotReceiveAnyCalls(); } finally { @@ -324,10 +368,13 @@ private RepositoryWatcher CreateRepositoryWatcher(NPath path) public interface IRepositoryWatcherListener { - void ConfigChanged(); void HeadChanged(); void IndexChanged(); + void ConfigChanged(); + void RepositoryCommitted(); void RepositoryChanged(); + void LocalBranchesChanged(); + void RemoteBranchesChanged(); } static class RepositoryWatcherListenerExtensions @@ -343,6 +390,13 @@ public static void AttachListener(this IRepositoryWatcherListener listener, IRep autoResetEvent?.HeadChanged.Set(); }; + repositoryWatcher.IndexChanged += () => + { + logger?.Trace("IndexChanged"); + listener.IndexChanged(); + autoResetEvent?.IndexChanged.Set(); + }; + repositoryWatcher.ConfigChanged += () => { logger?.Trace("ConfigChanged"); @@ -350,11 +404,11 @@ public static void AttachListener(this IRepositoryWatcherListener listener, IRep autoResetEvent?.ConfigChanged.Set(); }; - repositoryWatcher.IndexChanged += () => + repositoryWatcher.RepositoryCommitted += () => { - logger?.Trace("IndexChanged"); - listener.IndexChanged(); - autoResetEvent?.IndexChanged.Set(); + logger?.Trace("ConfigChanged"); + listener.RepositoryCommitted(); + autoResetEvent?.RepositoryCommitted.Set(); }; repositoryWatcher.RepositoryChanged += () => @@ -363,14 +417,31 @@ public static void AttachListener(this IRepositoryWatcherListener listener, IRep listener.RepositoryChanged(); autoResetEvent?.RepositoryChanged.Set(); }; + + repositoryWatcher.LocalBranchesChanged += () => + { + logger?.Trace("LocalBranchesChanged"); + listener.LocalBranchesChanged(); + autoResetEvent?.LocalBranchesChanged.Set(); + }; + + repositoryWatcher.RemoteBranchesChanged += () => + { + logger?.Trace("RemoteBranchesChanged"); + listener.RemoteBranchesChanged(); + autoResetEvent?.RemoteBranchesChanged.Set(); + }; } public static void AssertDidNotReceiveAnyCalls(this IRepositoryWatcherListener repositoryWatcherListener) { - repositoryWatcherListener.DidNotReceive().ConfigChanged(); repositoryWatcherListener.DidNotReceive().HeadChanged(); + repositoryWatcherListener.DidNotReceive().ConfigChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); repositoryWatcherListener.DidNotReceive().IndexChanged(); repositoryWatcherListener.DidNotReceive().RepositoryChanged(); + repositoryWatcherListener.DidNotReceive().LocalBranchesChanged(); + repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); } } @@ -378,7 +449,10 @@ class RepositoryWatcherAutoResetEvent { public AutoResetEvent HeadChanged { get; } = new AutoResetEvent(false); public AutoResetEvent ConfigChanged { get; } = new AutoResetEvent(false); + public AutoResetEvent RepositoryCommitted { get; } = new AutoResetEvent(false); public AutoResetEvent IndexChanged { get; } = new AutoResetEvent(false); public AutoResetEvent RepositoryChanged { get; } = new AutoResetEvent(false); + public AutoResetEvent LocalBranchesChanged { get; } = new AutoResetEvent(false); + public AutoResetEvent RemoteBranchesChanged { get; } = new AutoResetEvent(false); } } From ac085ea3b46ef928d3de2e2dc5b31a4ec2bdf4e0 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 14 Nov 2017 16:37:16 -0500 Subject: [PATCH 11/35] Being sure to fire the RepositoryCommitted event --- src/GitHub.Api/Events/RepositoryWatcher.cs | 12 +++ src/GitHub.Api/Git/RepositoryManager.cs | 2 + .../Events/RepositoryWatcherTests.cs | 75 +++++++++++++++++-- 3 files changed, 84 insertions(+), 5 deletions(-) diff --git a/src/GitHub.Api/Events/RepositoryWatcher.cs b/src/GitHub.Api/Events/RepositoryWatcher.cs index a45d7b3f2..8dab5f5ec 100644 --- a/src/GitHub.Api/Events/RepositoryWatcher.cs +++ b/src/GitHub.Api/Events/RepositoryWatcher.cs @@ -197,6 +197,10 @@ private int ProcessEvents(Event[] fileEvents) { events.Add(EventType.LocalBranchesChanged, null); } + else if (!events.ContainsKey(EventType.RepositoryCommitted) && fileA.IsChildOf(paths.DotGitCommitEditMsg)) + { + events.Add(EventType.RepositoryCommitted, null); + } } else { @@ -256,6 +260,13 @@ private int FireEvents(Dictionary> events) eventsProcessed++; } + if (events.ContainsKey(EventType.RepositoryCommitted)) + { + Logger.Trace("RepositoryCommitted"); + RepositoryCommitted?.Invoke(); + eventsProcessed++; + } + return eventsProcessed; } @@ -293,6 +304,7 @@ private enum EventType LocalBranchesChanged, RemoteBranchesChanged, RepositoryChanged, + RepositoryCommitted } private class EventData diff --git a/src/GitHub.Api/Git/RepositoryManager.cs b/src/GitHub.Api/Git/RepositoryManager.cs index b12f959be..0fa40ac93 100644 --- a/src/GitHub.Api/Git/RepositoryManager.cs +++ b/src/GitHub.Api/Git/RepositoryManager.cs @@ -72,6 +72,7 @@ public RepositoryPathConfiguration(NPath repositoryPath) DotGitIndex = DotGitPath.Combine("index"); DotGitHead = DotGitPath.Combine("HEAD"); DotGitConfig = DotGitPath.Combine("config"); + DotGitCommitEditMsg = DotGitPath.Combine("COMMIT_EDITMSG"); } public NPath RepositoryPath { get; } @@ -81,6 +82,7 @@ public RepositoryPathConfiguration(NPath repositoryPath) public NPath DotGitIndex { get; } public NPath DotGitHead { get; } public NPath DotGitConfig { get; } + public NPath DotGitCommitEditMsg { get; } } class RepositoryManager : IRepositoryManager diff --git a/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs b/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs index 3de5e1fa7..c7e524939 100644 --- a/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs +++ b/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs @@ -13,7 +13,7 @@ namespace IntegrationTests class RepositoryWatcherTests : BaseGitEnvironmentTest { [Test, Category("TimeSensitive")] - public async Task ShouldDetectFileChanges() + public async Task ShouldDetectFileChangesAndCommit() { await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); @@ -26,6 +26,8 @@ public async Task ShouldDetectFileChanges() repositoryWatcher.Initialize(); repositoryWatcher.Start(); + repositoryWatcher.Stop(); + try { var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt"); @@ -35,10 +37,13 @@ public async Task ShouldDetectFileChanges() foobarTxt.WriteAllText("foobar"); await TaskManager.Wait(); - watcherAutoResetEvent.RepositoryChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - Logger.Trace("Continue test"); + repositoryWatcher.Start(); + + watcherAutoResetEvent.RepositoryChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + watcherAutoResetEvent.Reset(); + repositoryWatcherListener.DidNotReceive().HeadChanged(); repositoryWatcherListener.DidNotReceive().ConfigChanged(); repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); @@ -46,6 +51,48 @@ public async Task ShouldDetectFileChanges() repositoryWatcherListener.Received().RepositoryChanged(); repositoryWatcherListener.DidNotReceive().LocalBranchesChanged(); repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); + repositoryWatcherListener.ClearReceivedCalls(); + + repositoryWatcher.Stop(); + Logger.Trace("Issuing Command"); + + await GitClient.AddAll().StartAsAsync(); + + Logger.Trace("Completed Command"); + repositoryWatcher.Start(); + + watcherAutoResetEvent.IndexChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + watcherAutoResetEvent.Reset(); + + repositoryWatcherListener.DidNotReceive().HeadChanged(); + repositoryWatcherListener.DidNotReceive().ConfigChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); + repositoryWatcherListener.Received(1).IndexChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryChanged(); + repositoryWatcherListener.DidNotReceive().LocalBranchesChanged(); + repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); + repositoryWatcherListener.ClearReceivedCalls(); + + repositoryWatcher.Stop(); + Logger.Trace("Issuing Command"); + + await GitClient.Commit("Test Commit", string.Empty).StartAsAsync(); + + Logger.Trace("Completed Command"); + repositoryWatcher.Start(); + + watcherAutoResetEvent.RepositoryCommitted.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + watcherAutoResetEvent.IndexChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + watcherAutoResetEvent.Reset(); + + repositoryWatcherListener.DidNotReceive().HeadChanged(); + repositoryWatcherListener.DidNotReceive().ConfigChanged(); + repositoryWatcherListener.Received(1).RepositoryCommitted(); + repositoryWatcherListener.Received(1).IndexChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryChanged(); + repositoryWatcherListener.Received(1).LocalBranchesChanged(); + repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); + repositoryWatcherListener.ClearReceivedCalls(); } finally { @@ -176,6 +223,7 @@ public async Task ShouldDetectBranchCreate() repositoryWatcher.Start(); watcherAutoResetEvent.LocalBranchesChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + watcherAutoResetEvent.Reset(); repositoryWatcherListener.DidNotReceive().HeadChanged(); repositoryWatcherListener.DidNotReceive().ConfigChanged(); @@ -206,7 +254,6 @@ public async Task ShouldDetectBranchCreate() repositoryWatcherListener.DidNotReceive().RepositoryChanged(); repositoryWatcherListener.Received(1).LocalBranchesChanged(); repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); - repositoryWatcherListener.ClearReceivedCalls(); } finally { @@ -243,6 +290,7 @@ public async Task ShouldDetectChangesToRemotes() repositoryWatcher.Start(); watcherAutoResetEvent.ConfigChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); watcherAutoResetEvent.RemoteBranchesChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + watcherAutoResetEvent.Reset(); repositoryWatcherListener.DidNotReceive().HeadChanged(); repositoryWatcherListener.Received(1).ConfigChanged(); @@ -350,7 +398,13 @@ public async Task ShouldDetectGitFetch() Logger.Trace("Continue test"); - repositoryWatcherListener.AssertDidNotReceiveAnyCalls(); + repositoryWatcherListener.DidNotReceive().HeadChanged(); + repositoryWatcherListener.DidNotReceive().ConfigChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); + repositoryWatcherListener.DidNotReceive().IndexChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryChanged(); + repositoryWatcherListener.DidNotReceive().LocalBranchesChanged(); + repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); } finally { @@ -454,5 +508,16 @@ class RepositoryWatcherAutoResetEvent public AutoResetEvent RepositoryChanged { get; } = new AutoResetEvent(false); public AutoResetEvent LocalBranchesChanged { get; } = new AutoResetEvent(false); public AutoResetEvent RemoteBranchesChanged { get; } = new AutoResetEvent(false); + + public void Reset() + { + HeadChanged.Reset(); + ConfigChanged.Reset(); + RepositoryCommitted.Reset(); + IndexChanged.Reset(); + RepositoryChanged.Reset(); + LocalBranchesChanged.Reset(); + RemoteBranchesChanged.Reset(); + } } } From 6beaaebc5cc112cddf947b6b61a9e155aa77ddf0 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 14 Nov 2017 16:41:53 -0500 Subject: [PATCH 12/35] Removing RepositoryUpdated event --- src/GitHub.Api/Git/Repository.cs | 8 -------- src/GitHub.Api/Git/RepositoryManager.cs | 3 --- 2 files changed, 11 deletions(-) diff --git a/src/GitHub.Api/Git/Repository.cs b/src/GitHub.Api/Git/Repository.cs index 6213be4df..4201a48d4 100644 --- a/src/GitHub.Api/Git/Repository.cs +++ b/src/GitHub.Api/Git/Repository.cs @@ -48,7 +48,6 @@ public void Initialize(IRepositoryManager initRepositoryManager) repositoryManager = initRepositoryManager; repositoryManager.OnCurrentBranchAndRemoteUpdated += RepositoryManager_OnCurrentBranchAndRemoteUpdated; - repositoryManager.OnRepositoryUpdated += RepositoryManager_OnRepositoryUpdated; repositoryManager.OnLocalBranchListUpdated += RepositoryManager_OnLocalBranchListUpdated; repositoryManager.OnRemoteBranchListUpdated += RepositoryManager_OnRemoteBranchListUpdated; @@ -352,13 +351,6 @@ private void HandleBranchCacheUpdatedEvent(CacheUpdateEvent cacheUpdateEvent) LocalAndRemoteBranchListChanged?.Invoke(cacheUpdateEvent); } - private void RepositoryManager_OnRepositoryUpdated() - { - Logger.Trace("OnRepositoryUpdated"); - UpdateGitStatus(); - UpdateGitLog(); - } - private void UpdateGitStatus() { repositoryManager?.Status() diff --git a/src/GitHub.Api/Git/RepositoryManager.cs b/src/GitHub.Api/Git/RepositoryManager.cs index 0fa40ac93..d6f798ce0 100644 --- a/src/GitHub.Api/Git/RepositoryManager.cs +++ b/src/GitHub.Api/Git/RepositoryManager.cs @@ -11,7 +11,6 @@ public interface IRepositoryManager : IDisposable event Action OnIsBusyChanged; event Action> OnLocalBranchListUpdated; event Action, Dictionary>> OnRemoteBranchListUpdated; - event Action OnRepositoryUpdated; void Initialize(); void Start(); @@ -99,7 +98,6 @@ class RepositoryManager : IRepositoryManager public event Action OnIsBusyChanged; public event Action> OnLocalBranchListUpdated; public event Action, Dictionary>> OnRemoteBranchListUpdated; - public event Action OnRepositoryUpdated; public RepositoryManager(IPlatform platform, IGitConfig gitConfig, IRepositoryWatcher repositoryWatcher, IGitClient gitClient, @@ -326,7 +324,6 @@ private ITask HookupHandlers(ITask task, bool disableWatcher = false) private void Watcher_OnRepositoryChanged() { Logger.Trace("OnRepositoryChanged"); - OnRepositoryUpdated?.Invoke(); } private void Watcher_OnConfigChanged() From 62c3d140632b8e97e1eb05baeedc1e0bfdec52a7 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 14 Nov 2017 16:42:14 -0500 Subject: [PATCH 13/35] More code cleanup --- src/tests/TestUtils/Events/IRepositoryManagerListener.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/tests/TestUtils/Events/IRepositoryManagerListener.cs b/src/tests/TestUtils/Events/IRepositoryManagerListener.cs index e90066bcc..d35e22b50 100644 --- a/src/tests/TestUtils/Events/IRepositoryManagerListener.cs +++ b/src/tests/TestUtils/Events/IRepositoryManagerListener.cs @@ -19,7 +19,6 @@ class RepositoryManagerEvents { public EventWaitHandle OnIsBusy { get; } = new AutoResetEvent(false); public EventWaitHandle OnIsNotBusy { get; } = new AutoResetEvent(false); - public EventWaitHandle OnLocksUpdated { get; } = new AutoResetEvent(false); public EventWaitHandle OnCurrentBranchAndRemoteUpdated { get; } = new AutoResetEvent(false); public EventWaitHandle OnHeadUpdated { get; } = new AutoResetEvent(false); public EventWaitHandle OnLocalBranchListUpdated { get; } = new AutoResetEvent(false); @@ -29,7 +28,6 @@ public void Reset() { OnIsBusy.Reset(); OnIsNotBusy.Reset(); - OnLocksUpdated.Reset(); OnCurrentBranchAndRemoteUpdated.Reset(); OnHeadUpdated.Reset(); OnLocalBranchListUpdated.Reset(); From a54f8d9cf38de1bb199f7f2ce030fe42d0477cad Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 14 Nov 2017 17:09:21 -0500 Subject: [PATCH 14/35] Starting to take away responsibility from Repository Listening to new events and calling functionality from RepositoryManager --- src/GitHub.Api/Git/Repository.cs | 38 +----- src/GitHub.Api/Git/RepositoryManager.cs | 156 ++++++++++++++++-------- 2 files changed, 107 insertions(+), 87 deletions(-) diff --git a/src/GitHub.Api/Git/Repository.cs b/src/GitHub.Api/Git/Repository.cs index 4201a48d4..b425efc9d 100644 --- a/src/GitHub.Api/Git/Repository.cs +++ b/src/GitHub.Api/Git/Repository.cs @@ -50,11 +50,6 @@ public void Initialize(IRepositoryManager initRepositoryManager) repositoryManager.OnCurrentBranchAndRemoteUpdated += RepositoryManager_OnCurrentBranchAndRemoteUpdated; repositoryManager.OnLocalBranchListUpdated += RepositoryManager_OnLocalBranchListUpdated; repositoryManager.OnRemoteBranchListUpdated += RepositoryManager_OnRemoteBranchListUpdated; - - UpdateGitStatus(); - UpdateGitLog(); - - new ActionTask(CancellationToken.None, UpdateLocks) { Affinity = TaskAffinity.UI }.Start(); } public ITask SetupRemote(string remote, string remoteUrl) @@ -88,8 +83,7 @@ public ITask Pull() public ITask Push() { - return repositoryManager.Push(CurrentRemote.Value.Name, CurrentBranch?.Name) - .Then(UpdateGitStatus); + return repositoryManager.Push(CurrentRemote.Value.Name, CurrentBranch?.Name); } public ITask Fetch() @@ -104,14 +98,12 @@ public ITask Revert(string changeset) public ITask RequestLock(string file) { - return repositoryManager.LockFile(file) - .Then(UpdateLocks); + return repositoryManager.LockFile(file); } public ITask ReleaseLock(string file, bool force) { - return repositoryManager.UnlockFile(file, force) - .Then(UpdateLocks); + return repositoryManager.UnlockFile(file, force); } public void CheckLogChangedEvent(CacheUpdateEvent cacheUpdateEvent) @@ -351,30 +343,6 @@ private void HandleBranchCacheUpdatedEvent(CacheUpdateEvent cacheUpdateEvent) LocalAndRemoteBranchListChanged?.Invoke(cacheUpdateEvent); } - private void UpdateGitStatus() - { - repositoryManager?.Status() - .ThenInUI((b, status) => { CurrentStatus = status; }) - .Start(); - } - - private void UpdateGitLog() - { - repositoryManager?.Log() - .ThenInUI((b, log) => { CurrentLog = log; }) - .Start(); - } - - private void UpdateLocks() - { - if (CurrentRemote.HasValue) - { - repositoryManager?.ListLocks(false) - .ThenInUI((b, locks) => { CurrentLocks = locks; }) - .Start(); - } - } - private void RepositoryManager_OnCurrentBranchAndRemoteUpdated(ConfigBranch? branch, ConfigRemote? remote) { new ActionTask(CancellationToken.None, () => { diff --git a/src/GitHub.Api/Git/RepositoryManager.cs b/src/GitHub.Api/Git/RepositoryManager.cs index d6f798ce0..54069e405 100644 --- a/src/GitHub.Api/Git/RepositoryManager.cs +++ b/src/GitHub.Api/Git/RepositoryManager.cs @@ -9,6 +9,8 @@ public interface IRepositoryManager : IDisposable { event Action OnCurrentBranchAndRemoteUpdated; event Action OnIsBusyChanged; + event Action GitStatusUpdated; + event Action> GitLogUpdated; event Action> OnLocalBranchListUpdated; event Action, Dictionary>> OnRemoteBranchListUpdated; @@ -96,6 +98,8 @@ class RepositoryManager : IRepositoryManager public event Action OnCurrentBranchAndRemoteUpdated; public event Action OnIsBusyChanged; + public event Action GitStatusUpdated; + public event Action> GitLogUpdated; public event Action> OnLocalBranchListUpdated; public event Action, Dictionary>> OnRemoteBranchListUpdated; @@ -283,10 +287,13 @@ public ITask UnlockFile(string file, bool force) private void SetupWatcher() { - watcher.HeadChanged += Watcher_OnHeadChanged; - watcher.IndexChanged += Watcher_OnIndexChanged; - watcher.ConfigChanged += Watcher_OnConfigChanged; - watcher.RepositoryChanged += Watcher_OnRepositoryChanged; + watcher.HeadChanged += WatcherOnHeadChanged; + watcher.IndexChanged += WatcherOnIndexChanged; + watcher.ConfigChanged += WatcherOnConfigChanged; + watcher.RepositoryCommitted += WatcherOnRepositoryCommitted; + watcher.RepositoryChanged += WatcherOnRepositoryChanged; + watcher.LocalBranchesChanged += WatcherOnLocalBranchesChanged; + watcher.RemoteBranchesChanged += WatcherOnRemoteBranchesChanged; } private void UpdateHead() @@ -296,6 +303,48 @@ private void UpdateHead() UpdateCurrentBranchAndRemote(head); } + private void UpdateCurrentBranchAndRemote(string head) + { + ConfigBranch? branch = null; + + if (head.StartsWith("ref:")) + { + var branchName = head.Substring(head.IndexOf("refs/heads/") + "refs/heads/".Length); + branch = config.GetBranch(branchName); + + if (!branch.HasValue) + { + branch = new ConfigBranch { Name = branchName }; + } + } + + var defaultRemote = "origin"; + ConfigRemote? remote = null; + + if (branch.HasValue && branch.Value.IsTracking) + { + remote = branch.Value.Remote; + } + + if (!remote.HasValue) + { + remote = config.GetRemote(defaultRemote); + } + + if (!remote.HasValue) + { + var configRemotes = config.GetRemotes().ToArray(); + if (configRemotes.Any()) + { + remote = configRemotes.FirstOrDefault(); + } + } + + Logger.Trace("CurrentBranch: {0}", branch.HasValue ? branch.Value.ToString() : "[NULL]"); + Logger.Trace("CurrentRemote: {0}", remote.HasValue ? remote.Value.ToString() : "[NULL]"); + OnCurrentBranchAndRemoteUpdated?.Invoke(branch, remote); + } + private ITask HookupHandlers(ITask task, bool disableWatcher = false) { task.OnStart += t => { @@ -321,67 +370,70 @@ private ITask HookupHandlers(ITask task, bool disableWatcher = false) return task; } - private void Watcher_OnRepositoryChanged() + private void WatcherOnRemoteBranchesChanged() { - Logger.Trace("OnRepositoryChanged"); + Logger.Trace("WatcherOnRemoteBranchesChanged"); + UpdateRemoteBranches(); } - private void Watcher_OnConfigChanged() + private void WatcherOnLocalBranchesChanged() { + Logger.Trace("WatcherOnLocalBranchesChanged"); + UpdateLocalBranches(); + } + + private void WatcherOnRepositoryCommitted() + { + Logger.Trace("WatcherOnRepositoryCommitted"); + UpdateLog(); + } + + private void WatcherOnRepositoryChanged() + { + Logger.Trace("WatcherOnRepositoryChanged"); + UpdateStatus(); + } + + private void WatcherOnConfigChanged() + { + Logger.Trace("WatcherOnConfigChanged"); UpdateConfigData(true); } - private void Watcher_OnHeadChanged() + private void WatcherOnHeadChanged() { - Logger.Trace("Watcher_OnHeadChanged"); + Logger.Trace("WatcherOnHeadChanged"); UpdateHead(); } - private void UpdateCurrentBranchAndRemote(string head) + private void WatcherOnIndexChanged() { - ConfigBranch? branch = null; + Logger.Trace("WatcherOnIndexChanged"); + UpdateStatus(); + } - if (head.StartsWith("ref:")) + private void UpdateLog() + { + Log().Then((success, logEntries) => { - var branchName = head.Substring(head.IndexOf("refs/heads/") + "refs/heads/".Length); - branch = config.GetBranch(branchName); - - if (!branch.HasValue) + if (success) { - branch = new ConfigBranch { Name = branchName }; + GitLogUpdated?.Invoke(logEntries); } - } - - var defaultRemote = "origin"; - ConfigRemote? remote = null; - - if (branch.HasValue && branch.Value.IsTracking) - { - remote = branch.Value.Remote; - } - - if (!remote.HasValue) - { - remote = config.GetRemote(defaultRemote); - } + }).Start(); + } - if (!remote.HasValue) + private void UpdateStatus() + { + Status().Then((success, status) => { - var configRemotes = config.GetRemotes().ToArray(); - if (configRemotes.Any()) + if (success) { - remote = configRemotes.FirstOrDefault(); + GitStatusUpdated?.Invoke(status); } - } - - Logger.Trace("OnCurrentBranchUpdated: {0}", branch.HasValue ? branch.Value.ToString() : "[NULL]"); - Logger.Trace("OnCurrentRemoteUpdated: {0}", remote.HasValue ? remote.Value.ToString() : "[NULL]"); - OnCurrentBranchAndRemoteUpdated?.Invoke(branch, remote); + }).Start(); } - private void Watcher_OnIndexChanged() - {} - private void UpdateConfigData(bool resetConfig = false) { Logger.Trace("UpdateConfigData reset:{0}", resetConfig); @@ -391,23 +443,23 @@ private void UpdateConfigData(bool resetConfig = false) config.Reset(); } - LoadBranchesFromConfig(); - LoadRemotesFromConfig(); + UpdateLocalBranches(); + UpdateRemoteBranches(); UpdateHead(); } - private void LoadBranchesFromConfig() + private void UpdateLocalBranches() { - Logger.Trace("LoadBranchesFromConfig"); + Logger.Trace("UpdateLocalBranches"); var branches = new Dictionary(); - LoadBranchesFromConfig(branches, repositoryPaths.BranchesPath, config.GetBranches().Where(x => x.IsTracking), ""); + UpdateLocalBranches(branches, repositoryPaths.BranchesPath, config.GetBranches().Where(x => x.IsTracking), ""); Logger.Trace("OnLocalBranchListUpdated {0} branches", branches.Count); OnLocalBranchListUpdated?.Invoke(branches); } - private void LoadBranchesFromConfig(Dictionary branches, NPath path, IEnumerable configBranches, string prefix) + private void UpdateLocalBranches(Dictionary branches, NPath path, IEnumerable configBranches, string prefix) { foreach (var file in path.Files()) { @@ -423,13 +475,13 @@ private void LoadBranchesFromConfig(Dictionary branches, N foreach (var dir in path.Directories()) { - LoadBranchesFromConfig(branches, dir, configBranches, prefix + dir.FileName + "/"); + UpdateLocalBranches(branches, dir, configBranches, prefix + dir.FileName + "/"); } } - private void LoadRemotesFromConfig() + private void UpdateRemoteBranches() { - Logger.Trace("LoadRemotesFromConfig"); + Logger.Trace("UpdateRemoteBranches"); var remotes = config.GetRemotes().ToArray().ToDictionary(x => x.Name, x => x); var remoteBranches = new Dictionary>(); From bddb47dee01ee05d3f51be365e077cd53287c14c Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 14 Nov 2017 17:55:26 -0500 Subject: [PATCH 15/35] Responding to RepositoryManager events --- src/GitHub.Api/Git/Repository.cs | 34 ++- src/GitHub.Api/Git/RepositoryManager.cs | 24 +- .../Events/RepositoryManagerTests.cs | 211 +++++++++++------- .../Events/IRepositoryManagerListener.cs | 93 ++++---- src/tests/TestUtils/Helpers/Args.cs | 6 + 5 files changed, 229 insertions(+), 139 deletions(-) diff --git a/src/GitHub.Api/Git/Repository.cs b/src/GitHub.Api/Git/Repository.cs index b425efc9d..23e149dac 100644 --- a/src/GitHub.Api/Git/Repository.cs +++ b/src/GitHub.Api/Git/Repository.cs @@ -47,9 +47,11 @@ public void Initialize(IRepositoryManager initRepositoryManager) Guard.ArgumentNotNull(initRepositoryManager, nameof(initRepositoryManager)); repositoryManager = initRepositoryManager; - repositoryManager.OnCurrentBranchAndRemoteUpdated += RepositoryManager_OnCurrentBranchAndRemoteUpdated; - repositoryManager.OnLocalBranchListUpdated += RepositoryManager_OnLocalBranchListUpdated; - repositoryManager.OnRemoteBranchListUpdated += RepositoryManager_OnRemoteBranchListUpdated; + repositoryManager.CurrentBranchUpdated += RepositoryManagerOnCurrentBranchUpdated; + repositoryManager.GitStatusUpdated += RepositoryManagerOnGitStatusUpdated; + repositoryManager.GitLogUpdated += RepositoryManagerOnGitLogUpdated; + repositoryManager.LocalBranchesUpdated += RepositoryManagerOnLocalBranchesUpdated; + repositoryManager.RemoteBranchesUpdated += RepositoryManagerOnRemoteBranchesUpdated; } public ITask SetupRemote(string remote, string remoteUrl) @@ -343,7 +345,7 @@ private void HandleBranchCacheUpdatedEvent(CacheUpdateEvent cacheUpdateEvent) LocalAndRemoteBranchListChanged?.Invoke(cacheUpdateEvent); } - private void RepositoryManager_OnCurrentBranchAndRemoteUpdated(ConfigBranch? branch, ConfigRemote? remote) + private void RepositoryManagerOnCurrentBranchUpdated(ConfigBranch? branch, ConfigRemote? remote) { new ActionTask(CancellationToken.None, () => { if (!Nullable.Equals(CurrentConfigBranch, branch)) @@ -364,23 +366,31 @@ private void RepositoryManager_OnCurrentBranchAndRemoteUpdated(ConfigBranch? bra }) { Affinity = TaskAffinity.UI }.Start(); } - private void RepositoryManager_OnRemoteBranchListUpdated(Dictionary remotes, - Dictionary> branches) + private void RepositoryManagerOnGitStatusUpdated(GitStatus gitStatus) { new ActionTask(CancellationToken.None, () => { - cacheContainer.BranchCache.SetRemotes(remotes, branches); - UpdateRemoteAndRemoteBranches(); + CurrentStatus = gitStatus; }) { Affinity = TaskAffinity.UI }.Start(); } - private void UpdateRemoteAndRemoteBranches() + private void RepositoryManagerOnGitLogUpdated(List gitLogEntries) { - Remotes = ConfigRemotes.Values.Select(GetGitRemote).ToArray(); + new ActionTask(CancellationToken.None, () => { + CurrentLog = gitLogEntries; + }) { Affinity = TaskAffinity.UI }.Start(); + } - RemoteBranches = RemoteConfigBranches.Values.SelectMany(x => x.Values).Select(GetRemoteGitBranch).ToArray(); + private void RepositoryManagerOnRemoteBranchesUpdated(Dictionary remotes, + Dictionary> branches) + { + new ActionTask(CancellationToken.None, () => { + cacheContainer.BranchCache.SetRemotes(remotes, branches); + Remotes = ConfigRemotes.Values.Select(GetGitRemote).ToArray(); + RemoteBranches = RemoteConfigBranches.Values.SelectMany(x => x.Values).Select(GetRemoteGitBranch).ToArray(); + }) { Affinity = TaskAffinity.UI }.Start(); } - private void RepositoryManager_OnLocalBranchListUpdated(Dictionary branches) + private void RepositoryManagerOnLocalBranchesUpdated(Dictionary branches) { new ActionTask(CancellationToken.None, () => { cacheContainer.BranchCache.SetLocals(branches); diff --git a/src/GitHub.Api/Git/RepositoryManager.cs b/src/GitHub.Api/Git/RepositoryManager.cs index 54069e405..940410c6e 100644 --- a/src/GitHub.Api/Git/RepositoryManager.cs +++ b/src/GitHub.Api/Git/RepositoryManager.cs @@ -7,12 +7,12 @@ namespace GitHub.Unity { public interface IRepositoryManager : IDisposable { - event Action OnCurrentBranchAndRemoteUpdated; - event Action OnIsBusyChanged; + event Action IsBusyChanged; + event Action CurrentBranchUpdated; event Action GitStatusUpdated; event Action> GitLogUpdated; - event Action> OnLocalBranchListUpdated; - event Action, Dictionary>> OnRemoteBranchListUpdated; + event Action> LocalBranchesUpdated; + event Action, Dictionary>> RemoteBranchesUpdated; void Initialize(); void Start(); @@ -96,12 +96,12 @@ class RepositoryManager : IRepositoryManager private bool isBusy; - public event Action OnCurrentBranchAndRemoteUpdated; - public event Action OnIsBusyChanged; + public event Action CurrentBranchUpdated; + public event Action IsBusyChanged; public event Action GitStatusUpdated; public event Action> GitLogUpdated; - public event Action> OnLocalBranchListUpdated; - public event Action, Dictionary>> OnRemoteBranchListUpdated; + public event Action> LocalBranchesUpdated; + public event Action, Dictionary>> RemoteBranchesUpdated; public RepositoryManager(IPlatform platform, IGitConfig gitConfig, IRepositoryWatcher repositoryWatcher, IGitClient gitClient, @@ -342,7 +342,7 @@ private void UpdateCurrentBranchAndRemote(string head) Logger.Trace("CurrentBranch: {0}", branch.HasValue ? branch.Value.ToString() : "[NULL]"); Logger.Trace("CurrentRemote: {0}", remote.HasValue ? remote.Value.ToString() : "[NULL]"); - OnCurrentBranchAndRemoteUpdated?.Invoke(branch, remote); + CurrentBranchUpdated?.Invoke(branch, remote); } private ITask HookupHandlers(ITask task, bool disableWatcher = false) @@ -456,7 +456,7 @@ private void UpdateLocalBranches() UpdateLocalBranches(branches, repositoryPaths.BranchesPath, config.GetBranches().Where(x => x.IsTracking), ""); Logger.Trace("OnLocalBranchListUpdated {0} branches", branches.Count); - OnLocalBranchListUpdated?.Invoke(branches); + LocalBranchesUpdated?.Invoke(branches); } private void UpdateLocalBranches(Dictionary branches, NPath path, IEnumerable configBranches, string prefix) @@ -505,7 +505,7 @@ private void UpdateRemoteBranches() } Logger.Trace("OnRemoteBranchListUpdated {0} remotes", remotes.Count); - OnRemoteBranchListUpdated?.Invoke(remotes, remoteBranches); + RemoteBranchesUpdated?.Invoke(remotes, remoteBranches); } private bool disposed; @@ -541,7 +541,7 @@ private set { Logger.Trace("IsBusyChanged Value:{0}", value); isBusy = value; - OnIsBusyChanged?.Invoke(isBusy); + IsBusyChanged?.Invoke(isBusy); } } } diff --git a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs index d35a1d9a0..b03c88557 100644 --- a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs +++ b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs @@ -33,7 +33,12 @@ public async Task ShouldDoNothingOnInitialize() RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); - repositoryManagerListener.AssertDidNotReceiveAnyCalls(); + repositoryManagerListener.DidNotReceive().OnIsBusyChanged(Args.Bool); + repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); } [Test] @@ -48,13 +53,16 @@ public async Task ShouldDetectFileChanges() foobarTxt.WriteAllText("foobar"); await TaskManager.Wait(); + RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); - repositoryManagerListener.DidNotReceive().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); - repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); - repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); + repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); } [Test] @@ -65,8 +73,6 @@ public async Task ShouldAddAndCommitFiles() var repositoryManagerListener = Substitute.For(); repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); - var expectedLocalBranch = "master"; - var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt"); foobarTxt.WriteAllText("foobar"); @@ -75,32 +81,38 @@ public async Task ShouldAddAndCommitFiles() await TaskManager.Wait(); - //Intentionally wait two cycles, in case the first cycle did not pick up all events RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); - RepositoryManager.WaitForEvents(); - repositoryManagerEvents.WaitForNotBusy(); - repositoryManagerListener.DidNotReceive().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); - repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); - repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); + repositoryManagerEvents.GitStatusUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); + repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.Received().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); repositoryManagerListener.ClearReceivedCalls(); + repositoryManagerEvents.Reset(); await RepositoryManager .CommitFiles(new List { "Assets\\TestDocument.txt", "foobar.txt" }, "IntegrationTest Commit", string.Empty) .StartAsAsync(); - await TaskManager.Wait(); + RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerEvents.GitStatusUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); - repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); - repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); + repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.Received().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); } [Test] @@ -111,8 +123,6 @@ public async Task ShouldAddAndCommitAllFiles() var repositoryManagerListener = Substitute.For(); repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); - var expectedLocalBranch = "master"; - var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt"); foobarTxt.WriteAllText("foobar"); @@ -120,13 +130,16 @@ public async Task ShouldAddAndCommitAllFiles() testDocumentTxt.WriteAllText("foobar"); await TaskManager.Wait(); + RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); - repositoryManagerListener.DidNotReceive().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); - repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); - repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); + repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); repositoryManagerListener.ClearReceivedCalls(); repositoryManagerEvents.Reset(); @@ -134,15 +147,20 @@ public async Task ShouldAddAndCommitAllFiles() await RepositoryManager .CommitAllFiles("IntegrationTest Commit", string.Empty) .StartAsAsync(); - await TaskManager.Wait(); + RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); + repositoryManagerEvents.GitStatusUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); - repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); - repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); + repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.Received().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); } [Test] @@ -153,20 +171,20 @@ public async Task ShouldDetectBranchChange() var repositoryManagerListener = Substitute.For(); repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); - var expectedLocalBranch = "feature/document"; - - Logger.Trace("Starting test"); - - await RepositoryManager.SwitchBranch(expectedLocalBranch).StartAsAsync(); - + await RepositoryManager.SwitchBranch("feature/document").StartAsAsync(); await TaskManager.Wait(); + RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.Received().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); - repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); - repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); + repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); } [Test] @@ -177,16 +195,22 @@ public async Task ShouldDetectBranchDelete() var repositoryManagerListener = Substitute.For(); repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); - var deletedBranch = "feature/document"; - await RepositoryManager.DeleteBranch(deletedBranch, true).StartAsAsync(); + await RepositoryManager.DeleteBranch("feature/document", true).StartAsAsync(); await TaskManager.Wait(); + RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.Received().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); - repositoryManagerListener.Received().OnLocalBranchListUpdated(Arg.Any>()); - repositoryManagerListener.Received().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); + repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.Received().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); } [Test] @@ -200,27 +224,36 @@ public async Task ShouldDetectBranchCreate() var createdBranch1 = "feature/document2"; await RepositoryManager.CreateBranch(createdBranch1, "feature/document").StartAsAsync(); await TaskManager.Wait(); + RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); - repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); - repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); + repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); repositoryManagerListener.ClearReceivedCalls(); repositoryManagerEvents.Reset(); - var createdBranch2 = "feature2/document2"; - await RepositoryManager.CreateBranch(createdBranch2, "feature/document").StartAsAsync(); + await RepositoryManager.CreateBranch("feature2/document2", "feature/document").StartAsAsync(); await TaskManager.Wait(); + RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); - repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); - repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); + repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); } [Test] @@ -237,28 +270,36 @@ public async Task ShouldDetectChangesToRemotes() RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); - repositoryManagerEvents.OnRemoteBranchListUpdated.WaitOne(TimeSpan.FromSeconds(1)); - repositoryManagerEvents.OnLocalBranchListUpdated.WaitOne(TimeSpan.FromSeconds(1)); + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.Received().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); - repositoryManagerListener.Received().OnLocalBranchListUpdated(Arg.Any>()); - repositoryManagerListener.Received().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); + repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.Received().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); repositoryManagerListener.ClearReceivedCalls(); repositoryManagerEvents.Reset(); await RepositoryManager.RemoteAdd("origin", "https://github.com/EvilShana/IOTestsRepo.git").StartAsAsync(); await TaskManager.Wait(); + RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); - repositoryManagerEvents.OnRemoteBranchListUpdated.WaitOne(TimeSpan.FromSeconds(1)); - repositoryManagerEvents.OnLocalBranchListUpdated.WaitOne(TimeSpan.FromSeconds(1)); + + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.Received().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); - repositoryManagerListener.Received().OnLocalBranchListUpdated(Arg.Any>()); - repositoryManagerListener.Received().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); + repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.Received().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); } [Test] @@ -271,31 +312,40 @@ public async Task ShouldDetectChangesToRemotesWhenSwitchingBranches() await RepositoryManager.CreateBranch("branch2", "another/master") .StartAsAsync(); - await TaskManager.Wait(); + RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.Received().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); - repositoryManagerListener.Received().OnLocalBranchListUpdated(Arg.Any>()); - repositoryManagerListener.Received().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); + repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.Received().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); repositoryManagerListener.ClearReceivedCalls(); repositoryManagerEvents.Reset(); await RepositoryManager.SwitchBranch("branch2") .StartAsAsync(); - await TaskManager.Wait(); + RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); - repositoryManagerEvents.WaitForHeadUpdated(); + + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.Received().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); - repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); - repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); + repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); } [Test] @@ -308,13 +358,18 @@ public async Task ShouldDetectGitPull() await RepositoryManager.Pull("origin", "master").StartAsAsync(); await TaskManager.Wait(); + RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); - repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); - repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); + repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); repositoryManagerEvents.Reset(); repositoryManagerEvents.WaitForNotBusy(); @@ -330,13 +385,19 @@ public async Task ShouldDetectGitFetch() await RepositoryManager.Fetch("origin").StartAsAsync(); await TaskManager.Wait(); + RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); - repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); - repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); + repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.Received().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); } } } diff --git a/src/tests/TestUtils/Events/IRepositoryManagerListener.cs b/src/tests/TestUtils/Events/IRepositoryManagerListener.cs index d35e22b50..349718650 100644 --- a/src/tests/TestUtils/Events/IRepositoryManagerListener.cs +++ b/src/tests/TestUtils/Events/IRepositoryManagerListener.cs @@ -10,39 +10,38 @@ namespace TestUtils.Events interface IRepositoryManagerListener { void OnIsBusyChanged(bool busy); - void OnLocalBranchListUpdated(Dictionary branchList); - void OnRemoteBranchListUpdated(Dictionary remotesList, Dictionary> remoteBranchList); - void OnCurrentBranchAndRemoteUpdated(ConfigBranch? configBranch, ConfigRemote? configRemote); + void LocalBranchesUpdated(Dictionary branchList); + void RemoteBranchesUpdated(Dictionary remotesList, Dictionary> remoteBranchList); + void CurrentBranchUpdated(ConfigBranch? configBranch, ConfigRemote? configRemote); + void GitStatusUpdated(GitStatus gitStatus); + void GitLogUpdated(List gitLogEntries); } class RepositoryManagerEvents { - public EventWaitHandle OnIsBusy { get; } = new AutoResetEvent(false); - public EventWaitHandle OnIsNotBusy { get; } = new AutoResetEvent(false); - public EventWaitHandle OnCurrentBranchAndRemoteUpdated { get; } = new AutoResetEvent(false); - public EventWaitHandle OnHeadUpdated { get; } = new AutoResetEvent(false); - public EventWaitHandle OnLocalBranchListUpdated { get; } = new AutoResetEvent(false); - public EventWaitHandle OnRemoteBranchListUpdated { get; } = new AutoResetEvent(false); + public EventWaitHandle IsBusy { get; } = new AutoResetEvent(false); + public EventWaitHandle IsNotBusy { get; } = new AutoResetEvent(false); + public EventWaitHandle CurrentBranchUpdated { get; } = new AutoResetEvent(false); + public EventWaitHandle GitStatusUpdated { get; } = new AutoResetEvent(false); + public EventWaitHandle GitLogUpdated { get; } = new AutoResetEvent(false); + public EventWaitHandle LocalBranchesUpdated { get; } = new AutoResetEvent(false); + public EventWaitHandle RemoteBranchesUpdated { get; } = new AutoResetEvent(false); public void Reset() { - OnIsBusy.Reset(); - OnIsNotBusy.Reset(); - OnCurrentBranchAndRemoteUpdated.Reset(); - OnHeadUpdated.Reset(); - OnLocalBranchListUpdated.Reset(); - OnRemoteBranchListUpdated.Reset(); + IsBusy.Reset(); + IsNotBusy.Reset(); + CurrentBranchUpdated.Reset(); + GitStatusUpdated.Reset(); + GitLogUpdated.Reset(); + LocalBranchesUpdated.Reset(); + RemoteBranchesUpdated.Reset(); } public void WaitForNotBusy(int seconds = 1) { - OnIsBusy.WaitOne(TimeSpan.FromSeconds(seconds)); - OnIsNotBusy.WaitOne(TimeSpan.FromSeconds(seconds)); - } - - public void WaitForHeadUpdated(int seconds = 1) - { - OnHeadUpdated.WaitOne(TimeSpan.FromSeconds(seconds)); + IsBusy.WaitOne(TimeSpan.FromSeconds(seconds)); + IsNotBusy.WaitOne(TimeSpan.FromSeconds(seconds)); } } @@ -53,40 +52,54 @@ public static void AttachListener(this IRepositoryManagerListener listener, { var logger = trace ? Logging.GetLogger() : null; - repositoryManager.OnIsBusyChanged += isBusy => { + repositoryManager.IsBusyChanged += isBusy => { logger?.Trace("OnIsBusyChanged: {0}", isBusy); listener.OnIsBusyChanged(isBusy); if (isBusy) - managerEvents?.OnIsBusy.Set(); + managerEvents?.IsBusy.Set(); else - managerEvents?.OnIsNotBusy.Set(); + managerEvents?.IsNotBusy.Set(); + }; + + repositoryManager.CurrentBranchUpdated += (configBranch, configRemote) => { + logger?.Trace("CurrentBranchUpdated"); + listener.CurrentBranchUpdated(configBranch, configRemote); + managerEvents?.CurrentBranchUpdated.Set(); + }; + + repositoryManager.GitStatusUpdated += gitStatus => { + logger?.Trace("GitStatusUpdated"); + listener.GitStatusUpdated(gitStatus); + managerEvents?.GitStatusUpdated.Set(); }; - repositoryManager.OnCurrentBranchAndRemoteUpdated += (configBranch, configRemote) => { - logger?.Trace("OnCurrentBranchAndRemoteUpdated"); - listener.OnCurrentBranchAndRemoteUpdated(configBranch, configRemote); - managerEvents?.OnCurrentBranchAndRemoteUpdated.Set(); + repositoryManager.GitLogUpdated += gitLogEntries => { + logger?.Trace("GitLogUpdated"); + listener.GitLogUpdated(gitLogEntries); + managerEvents?.GitLogUpdated.Set(); }; - repositoryManager.OnLocalBranchListUpdated += branchList => { - logger?.Trace("OnLocalBranchListUpdated"); - listener.OnLocalBranchListUpdated(branchList); - managerEvents?.OnLocalBranchListUpdated.Set(); + repositoryManager.LocalBranchesUpdated += branchList => { + logger?.Trace("LocalBranchesUpdated"); + listener.LocalBranchesUpdated(branchList); + managerEvents?.LocalBranchesUpdated.Set(); }; - repositoryManager.OnRemoteBranchListUpdated += (remotesList, branchList) => { - logger?.Trace("OnRemoteBranchListUpdated"); - listener.OnRemoteBranchListUpdated(remotesList, branchList); - managerEvents?.OnRemoteBranchListUpdated.Set(); + repositoryManager.RemoteBranchesUpdated += (remotesList, branchList) => { + logger?.Trace("RemoteBranchesUpdated"); + listener.RemoteBranchesUpdated(remotesList, branchList); + managerEvents?.RemoteBranchesUpdated.Set(); }; } public static void AssertDidNotReceiveAnyCalls(this IRepositoryManagerListener repositoryManagerListener) { repositoryManagerListener.DidNotReceive().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any(), Arg.Any()); - repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any>()); - repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any>(), Arg.Any>>()); + repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Arg.Any(), Arg.Any()); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Arg.Any>()); + repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Arg.Any>(), Arg.Any>>()); } } }; \ No newline at end of file diff --git a/src/tests/TestUtils/Helpers/Args.cs b/src/tests/TestUtils/Helpers/Args.cs index 650d65e73..b3b3666c5 100644 --- a/src/tests/TestUtils/Helpers/Args.cs +++ b/src/tests/TestUtils/Helpers/Args.cs @@ -15,9 +15,15 @@ static class Args public static SearchOption SearchOption { get { return Arg.Any(); } } public static GitFileStatus GitFileStatus { get { return Arg.Any(); } } public static GitConfigSource GitConfigSource { get { return Arg.Any(); } } + public static List GitLogs { get { return Arg.Any>(); } } public static GitStatus GitStatus { get { return Arg.Any(); } } public static IEnumerable EnumerableGitLock { get { return Arg.Any>(); } } public static IUser User { get { return Arg.Any(); } } + public static ConfigBranch? NullableConfigBranch { get { return Arg.Any(); } } + public static ConfigRemote? NullableConfigRemote { get { return Arg.Any(); } } + public static Dictionary LocalBranchDictionary { get { return Arg.Any>(); } } + public static Dictionary RemoteDictionary { get { return Arg.Any>(); } } + public static Dictionary> RemoteBranchDictionary { get { return Arg.Any>>(); } } public static ITask GitStatusTask { From 3f828db8025fb2a4031366df04820f4ad94031c8 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 14 Nov 2017 18:11:51 -0500 Subject: [PATCH 16/35] Calling update methods on RepositoryManager from Repository --- src/GitHub.Api/Git/Repository.cs | 6 +- src/GitHub.Api/Git/RepositoryManager.cs | 96 +++++++++---------- .../Events/RepositoryManagerTests.cs | 16 ++++ .../Events/IRepositoryManagerListener.cs | 16 +++- src/tests/TestUtils/Helpers/Args.cs | 1 + 5 files changed, 80 insertions(+), 55 deletions(-) diff --git a/src/GitHub.Api/Git/Repository.cs b/src/GitHub.Api/Git/Repository.cs index 34fe938f7..c9c86b1d5 100644 --- a/src/GitHub.Api/Git/Repository.cs +++ b/src/GitHub.Api/Git/Repository.cs @@ -259,15 +259,15 @@ private void CacheContainer_OnCacheInvalidated(CacheType cacheType) break; case CacheType.GitLogCache: - UpdateGitLog(); + repositoryManager.UpdateGitLog(); break; case CacheType.GitStatusCache: - UpdateGitStatus(); + repositoryManager.UpdateGitStatus(); break; case CacheType.GitLocksCache: - UpdateLocks(); + repositoryManager.UpdateLocks(); break; case CacheType.GitUserCache: diff --git a/src/GitHub.Api/Git/RepositoryManager.cs b/src/GitHub.Api/Git/RepositoryManager.cs index 940410c6e..90574831a 100644 --- a/src/GitHub.Api/Git/RepositoryManager.cs +++ b/src/GitHub.Api/Git/RepositoryManager.cs @@ -10,6 +10,7 @@ public interface IRepositoryManager : IDisposable event Action IsBusyChanged; event Action CurrentBranchUpdated; event Action GitStatusUpdated; + event Action> GitLocksUpdated; event Action> GitLogUpdated; event Action> LocalBranchesUpdated; event Action, Dictionary>> RemoteBranchesUpdated; @@ -19,8 +20,6 @@ public interface IRepositoryManager : IDisposable void Stop(); ITask CommitAllFiles(string message, string body); ITask CommitFiles(List files, string message, string body); - ITask> Log(); - ITask Status(); ITask Fetch(string remote); ITask Pull(string remote, string branch); ITask Push(string remote, string branch); @@ -31,9 +30,11 @@ public interface IRepositoryManager : IDisposable ITask SwitchBranch(string branch); ITask DeleteBranch(string branch, bool deleteUnmerged = false); ITask CreateBranch(string branch, string baseBranch); - ITask> ListLocks(bool local); ITask LockFile(string file); ITask UnlockFile(string file, bool force); + void UpdateGitLog(); + void UpdateGitStatus(); + void UpdateLocks(); int WaitForEvents(); IGitConfig Config { get; } @@ -99,6 +100,7 @@ class RepositoryManager : IRepositoryManager public event Action CurrentBranchUpdated; public event Action IsBusyChanged; public event Action GitStatusUpdated; + public event Action> GitLocksUpdated; public event Action> GitLogUpdated; public event Action> LocalBranchesUpdated; public event Action, Dictionary>> RemoteBranchesUpdated; @@ -178,20 +180,6 @@ public ITask CommitFiles(List files, string message, string body) .Finally(() => IsBusy = false); } - public ITask> Log() - { - var task = GitClient.Log(); - HookupHandlers(task); - return task; - } - - public ITask Status() - { - var task = GitClient.Status(); - HookupHandlers(task); - return task; - } - public ITask Fetch(string remote) { var task = GitClient.Fetch(remote); @@ -266,13 +254,6 @@ public ITask CreateBranch(string branch, string baseBranch) return HookupHandlers(task); } - public ITask> ListLocks(bool local) - { - var task = GitClient.ListLocks(local); - HookupHandlers(task); - return task; - } - public ITask LockFile(string file) { var task = GitClient.Lock(file); @@ -285,6 +266,45 @@ public ITask UnlockFile(string file, bool force) return HookupHandlers(task); } + public void UpdateGitLog() + { + var task = GitClient.Log(); + HookupHandlers(task); + task.Then((success, logEntries) => + { + if (success) + { + GitLogUpdated?.Invoke(logEntries); + } + }).Start(); + } + + public void UpdateGitStatus() + { + var task = GitClient.Status(); + HookupHandlers(task); + task.Then((success, status) => + { + if (success) + { + GitStatusUpdated?.Invoke(status); + } + }).Start(); + } + + public void UpdateLocks() + { + var task = GitClient.ListLocks(false); + HookupHandlers(task); + task.Then((success, locks) => + { + if (success) + { + GitLocksUpdated?.Invoke(locks); + } + }).Start(); + } + private void SetupWatcher() { watcher.HeadChanged += WatcherOnHeadChanged; @@ -385,13 +405,13 @@ private void WatcherOnLocalBranchesChanged() private void WatcherOnRepositoryCommitted() { Logger.Trace("WatcherOnRepositoryCommitted"); - UpdateLog(); + UpdateGitLog(); } private void WatcherOnRepositoryChanged() { Logger.Trace("WatcherOnRepositoryChanged"); - UpdateStatus(); + UpdateGitStatus(); } private void WatcherOnConfigChanged() @@ -409,29 +429,7 @@ private void WatcherOnHeadChanged() private void WatcherOnIndexChanged() { Logger.Trace("WatcherOnIndexChanged"); - UpdateStatus(); - } - - private void UpdateLog() - { - Log().Then((success, logEntries) => - { - if (success) - { - GitLogUpdated?.Invoke(logEntries); - } - }).Start(); - } - - private void UpdateStatus() - { - Status().Then((success, status) => - { - if (success) - { - GitStatusUpdated?.Invoke(status); - } - }).Start(); + UpdateGitStatus(); } private void UpdateConfigData(bool resetConfig = false) diff --git a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs index b03c88557..be271e9ee 100644 --- a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs +++ b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs @@ -36,6 +36,7 @@ public async Task ShouldDoNothingOnInitialize() repositoryManagerListener.DidNotReceive().OnIsBusyChanged(Args.Bool); repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); @@ -60,6 +61,7 @@ public async Task ShouldDetectFileChanges() repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); @@ -89,6 +91,7 @@ public async Task ShouldAddAndCommitFiles() repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); repositoryManagerListener.Received().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); @@ -110,6 +113,7 @@ await RepositoryManager repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); repositoryManagerListener.Received().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); @@ -137,6 +141,7 @@ public async Task ShouldAddAndCommitAllFiles() repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); @@ -158,6 +163,7 @@ await RepositoryManager repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); repositoryManagerListener.Received().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); @@ -182,6 +188,7 @@ public async Task ShouldDetectBranchChange() repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); @@ -208,6 +215,7 @@ public async Task ShouldDetectBranchDelete() repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); repositoryManagerListener.Received().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); @@ -233,6 +241,7 @@ public async Task ShouldDetectBranchCreate() repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); @@ -251,6 +260,7 @@ public async Task ShouldDetectBranchCreate() repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); @@ -277,6 +287,7 @@ public async Task ShouldDetectChangesToRemotes() repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); repositoryManagerListener.Received().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); @@ -297,6 +308,7 @@ public async Task ShouldDetectChangesToRemotes() repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); repositoryManagerListener.Received().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); @@ -324,6 +336,7 @@ await RepositoryManager.CreateBranch("branch2", "another/master") repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); repositoryManagerListener.Received().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); @@ -343,6 +356,7 @@ await RepositoryManager.SwitchBranch("branch2") repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); @@ -367,6 +381,7 @@ public async Task ShouldDetectGitPull() repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); @@ -395,6 +410,7 @@ public async Task ShouldDetectGitFetch() repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); repositoryManagerListener.Received().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); diff --git a/src/tests/TestUtils/Events/IRepositoryManagerListener.cs b/src/tests/TestUtils/Events/IRepositoryManagerListener.cs index 349718650..d0def0f87 100644 --- a/src/tests/TestUtils/Events/IRepositoryManagerListener.cs +++ b/src/tests/TestUtils/Events/IRepositoryManagerListener.cs @@ -13,6 +13,7 @@ interface IRepositoryManagerListener void LocalBranchesUpdated(Dictionary branchList); void RemoteBranchesUpdated(Dictionary remotesList, Dictionary> remoteBranchList); void CurrentBranchUpdated(ConfigBranch? configBranch, ConfigRemote? configRemote); + void GitLocksUpdated(List gitLocks); void GitStatusUpdated(GitStatus gitStatus); void GitLogUpdated(List gitLogEntries); } @@ -23,6 +24,7 @@ class RepositoryManagerEvents public EventWaitHandle IsNotBusy { get; } = new AutoResetEvent(false); public EventWaitHandle CurrentBranchUpdated { get; } = new AutoResetEvent(false); public EventWaitHandle GitStatusUpdated { get; } = new AutoResetEvent(false); + public EventWaitHandle GitLocksUpdated { get; } = new AutoResetEvent(false); public EventWaitHandle GitLogUpdated { get; } = new AutoResetEvent(false); public EventWaitHandle LocalBranchesUpdated { get; } = new AutoResetEvent(false); public EventWaitHandle RemoteBranchesUpdated { get; } = new AutoResetEvent(false); @@ -33,6 +35,7 @@ public void Reset() IsNotBusy.Reset(); CurrentBranchUpdated.Reset(); GitStatusUpdated.Reset(); + GitLocksUpdated.Reset(); GitLogUpdated.Reset(); LocalBranchesUpdated.Reset(); RemoteBranchesUpdated.Reset(); @@ -67,6 +70,12 @@ public static void AttachListener(this IRepositoryManagerListener listener, managerEvents?.CurrentBranchUpdated.Set(); }; + repositoryManager.GitLocksUpdated += gitLocks => { + logger?.Trace("GitLocksUpdated"); + listener.GitLocksUpdated(gitLocks); + managerEvents?.GitLocksUpdated.Set(); + }; + repositoryManager.GitStatusUpdated += gitStatus => { logger?.Trace("GitStatusUpdated"); listener.GitStatusUpdated(gitStatus); @@ -95,11 +104,12 @@ public static void AttachListener(this IRepositoryManagerListener listener, public static void AssertDidNotReceiveAnyCalls(this IRepositoryManagerListener repositoryManagerListener) { repositoryManagerListener.DidNotReceive().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Arg.Any(), Arg.Any()); + repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); - repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Arg.Any>()); - repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Arg.Any>(), Arg.Any>>()); + repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); } } }; \ No newline at end of file diff --git a/src/tests/TestUtils/Helpers/Args.cs b/src/tests/TestUtils/Helpers/Args.cs index b3b3666c5..e8bd7d980 100644 --- a/src/tests/TestUtils/Helpers/Args.cs +++ b/src/tests/TestUtils/Helpers/Args.cs @@ -17,6 +17,7 @@ static class Args public static GitConfigSource GitConfigSource { get { return Arg.Any(); } } public static List GitLogs { get { return Arg.Any>(); } } public static GitStatus GitStatus { get { return Arg.Any(); } } + public static List GitLocks { get { return Arg.Any>(); } } public static IEnumerable EnumerableGitLock { get { return Arg.Any>(); } } public static IUser User { get { return Arg.Any(); } } public static ConfigBranch? NullableConfigBranch { get { return Arg.Any(); } } From ff1860a377d1b35806de05587fc54bc794b71ee7 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 14 Nov 2017 18:19:30 -0500 Subject: [PATCH 17/35] Removing unused code --- src/tests/IntegrationTests/Events/RepositoryManagerTests.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs index be271e9ee..5d00d0f4a 100644 --- a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs +++ b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs @@ -385,9 +385,6 @@ public async Task ShouldDetectGitPull() repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); - - repositoryManagerEvents.Reset(); - repositoryManagerEvents.WaitForNotBusy(); } [Test] From 222bd5a1c81a742a48d843079840a45bd3871b47 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 14 Nov 2017 18:22:34 -0500 Subject: [PATCH 18/35] Fixing ShouldDetectFileChanges --- src/tests/IntegrationTests/Events/RepositoryManagerTests.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs index 5d00d0f4a..7c693e868 100644 --- a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs +++ b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs @@ -58,9 +58,11 @@ public async Task ShouldDetectFileChanges() RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); + repositoryManagerEvents.GitStatusUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); - repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.Received().GitStatusUpdated(Args.GitStatus); repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); From cded7db1a435429d0d6b0b8b57453dc37300393c Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 14 Nov 2017 18:23:55 -0500 Subject: [PATCH 19/35] Fixing ShouldAddAndCommitFiles --- .../IntegrationTests/Events/RepositoryManagerTests.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs index 7c693e868..c1e2f6367 100644 --- a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs +++ b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs @@ -88,7 +88,7 @@ public async Task ShouldAddAndCommitFiles() RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); - repositoryManagerEvents.GitStatusUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerEvents.GitStatusUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); @@ -109,14 +109,15 @@ await RepositoryManager RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); - repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - repositoryManagerEvents.GitStatusUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.GitStatusUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.GitLogUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); repositoryManagerListener.Received().GitStatusUpdated(Args.GitStatus); repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); - repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.Received().GitLogUpdated(Args.GitLogs); repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); } From 37c3706de70c3837980bf393280b18ce79b8a443 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 14 Nov 2017 18:27:21 -0500 Subject: [PATCH 20/35] Fixing ShouldAddAndCommitAllFiles --- .../IntegrationTests/Events/RepositoryManagerTests.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs index c1e2f6367..b73ea0c4f 100644 --- a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs +++ b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs @@ -141,9 +141,11 @@ public async Task ShouldAddAndCommitAllFiles() RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); + repositoryManagerEvents.GitStatusUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); - repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.Received().GitStatusUpdated(Args.GitStatus); repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); @@ -160,8 +162,8 @@ await RepositoryManager RepositoryManager.WaitForEvents(); repositoryManagerEvents.WaitForNotBusy(); - repositoryManagerEvents.GitStatusUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerEvents.GitStatusUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); From 6f91f16870901053e1472b7f98b877c485922f92 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 14 Nov 2017 18:48:45 -0500 Subject: [PATCH 21/35] Making RepositoryManagerTests more stable by attaching a listener before the RepositoryManager is initialized --- .../BaseGitEnvironmentTest.cs | 8 +- .../Events/RepositoryManagerTests.cs | 117 ++++++++++++------ 2 files changed, 84 insertions(+), 41 deletions(-) diff --git a/src/tests/IntegrationTests/BaseGitEnvironmentTest.cs b/src/tests/IntegrationTests/BaseGitEnvironmentTest.cs index d9a74da97..ad07d757c 100644 --- a/src/tests/IntegrationTests/BaseGitEnvironmentTest.cs +++ b/src/tests/IntegrationTests/BaseGitEnvironmentTest.cs @@ -1,3 +1,4 @@ +using System; using System.Linq; using System.Threading; using GitHub.Unity; @@ -9,7 +10,7 @@ namespace IntegrationTests class BaseGitEnvironmentTest : BaseGitRepoTest { protected async Task Initialize(NPath repoPath, NPath environmentPath = null, - bool enableEnvironmentTrace = false, bool initializeRepository = true) + bool enableEnvironmentTrace = false, bool initializeRepository = true, Action onRepositoryManagerCreated = null) { TaskManager = new TaskManager(); SyncContext = new ThreadSynchronizationContext(TaskManager.Token); @@ -31,7 +32,10 @@ protected async Task Initialize(NPath repoPath, NPath environmentP GitClient = new GitClient(Environment, ProcessManager, TaskManager); - RepositoryManager = GitHub.Unity.RepositoryManager.CreateInstance(Platform, TaskManager, GitClient, repoPath); + var repositoryManager = GitHub.Unity.RepositoryManager.CreateInstance(Platform, TaskManager, GitClient, repoPath); + onRepositoryManagerCreated?.Invoke(repositoryManager); + + RepositoryManager = repositoryManager; RepositoryManager.Initialize(); if (initializeRepository) diff --git a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs index b73ea0c4f..ac59df4c8 100644 --- a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs +++ b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs @@ -23,32 +23,35 @@ public override void OnSetup() } [Test] - public async Task ShouldDoNothingOnInitialize() + public async Task ShouldPerformBasicInitialize() { - await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); - var repositoryManagerListener = Substitute.For(); - repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); - RepositoryManager.WaitForEvents(); - repositoryManagerEvents.WaitForNotBusy(); + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, + onRepositoryManagerCreated: manager => { + repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); + }); repositoryManagerListener.DidNotReceive().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); - repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); - repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.Received().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); } [Test] public async Task ShouldDetectFileChanges() { - await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); - var repositoryManagerListener = Substitute.For(); - repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); + + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, + onRepositoryManagerCreated: manager => { + repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); + }); + + repositoryManagerListener.ClearReceivedCalls(); var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt"); foobarTxt.WriteAllText("foobar"); @@ -72,10 +75,14 @@ public async Task ShouldDetectFileChanges() [Test] public async Task ShouldAddAndCommitFiles() { - await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); - var repositoryManagerListener = Substitute.For(); - repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); + + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, + onRepositoryManagerCreated: manager => { + repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); + }); + + repositoryManagerListener.ClearReceivedCalls(); var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt"); foobarTxt.WriteAllText("foobar"); @@ -125,10 +132,14 @@ await RepositoryManager [Test] public async Task ShouldAddAndCommitAllFiles() { - await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); - var repositoryManagerListener = Substitute.For(); - repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); + + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, + onRepositoryManagerCreated: manager => { + repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); + }); + + repositoryManagerListener.ClearReceivedCalls(); var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt"); foobarTxt.WriteAllText("foobar"); @@ -177,10 +188,14 @@ await RepositoryManager [Test] public async Task ShouldDetectBranchChange() { - await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); - var repositoryManagerListener = Substitute.For(); - repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); + + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, + onRepositoryManagerCreated: manager => { + repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); + }); + + repositoryManagerListener.ClearReceivedCalls(); await RepositoryManager.SwitchBranch("feature/document").StartAsAsync(); await TaskManager.Wait(); @@ -202,10 +217,14 @@ public async Task ShouldDetectBranchChange() [Test] public async Task ShouldDetectBranchDelete() { - await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); - var repositoryManagerListener = Substitute.For(); - repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); + + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, + onRepositoryManagerCreated: manager => { + repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); + }); + + repositoryManagerListener.ClearReceivedCalls(); await RepositoryManager.DeleteBranch("feature/document", true).StartAsAsync(); await TaskManager.Wait(); @@ -229,10 +248,14 @@ public async Task ShouldDetectBranchDelete() [Test] public async Task ShouldDetectBranchCreate() { - await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); - var repositoryManagerListener = Substitute.For(); - repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); + + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, + onRepositoryManagerCreated: manager => { + repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); + }); + + repositoryManagerListener.ClearReceivedCalls(); var createdBranch1 = "feature/document2"; await RepositoryManager.CreateBranch(createdBranch1, "feature/document").StartAsAsync(); @@ -274,10 +297,14 @@ public async Task ShouldDetectBranchCreate() [Test] public async Task ShouldDetectChangesToRemotes() { - await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); - var repositoryManagerListener = Substitute.For(); - repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); + + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, + onRepositoryManagerCreated: manager => { + repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); + }); + + repositoryManagerListener.ClearReceivedCalls(); await RepositoryManager.RemoteRemove("origin").StartAsAsync(); await TaskManager.Wait(); @@ -322,10 +349,14 @@ public async Task ShouldDetectChangesToRemotes() [Test] public async Task ShouldDetectChangesToRemotesWhenSwitchingBranches() { - await Initialize(TestRepoMasterTwoRemotes, initializeRepository: false); - var repositoryManagerListener = Substitute.For(); - repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); + + await Initialize(TestRepoMasterTwoRemotes, initializeRepository: false, + onRepositoryManagerCreated: manager => { + repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); + }); + + repositoryManagerListener.ClearReceivedCalls(); await RepositoryManager.CreateBranch("branch2", "another/master") .StartAsAsync(); @@ -370,10 +401,14 @@ await RepositoryManager.SwitchBranch("branch2") [Test] public async Task ShouldDetectGitPull() { - await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); - var repositoryManagerListener = Substitute.For(); - repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); + + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, + onRepositoryManagerCreated: manager => { + repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); + }); + + repositoryManagerListener.ClearReceivedCalls(); await RepositoryManager.Pull("origin", "master").StartAsAsync(); await TaskManager.Wait(); @@ -395,10 +430,14 @@ public async Task ShouldDetectGitPull() [Test] public async Task ShouldDetectGitFetch() { - await Initialize(TestRepoMasterCleanUnsynchronized, initializeRepository: false); - var repositoryManagerListener = Substitute.For(); - repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents); + + await Initialize(TestRepoMasterCleanUnsynchronized, initializeRepository: false, + onRepositoryManagerCreated: manager => { + repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); + }); + + repositoryManagerListener.ClearReceivedCalls(); await RepositoryManager.Fetch("origin").StartAsAsync(); await TaskManager.Wait(); From eb55f8fcb478c7cfd67c37516a67e2b72d592588 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 14 Nov 2017 18:54:16 -0500 Subject: [PATCH 22/35] We need to wait for the event apparently --- .../Events/RepositoryManagerTests.cs | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs index ac59df4c8..59f1b53e5 100644 --- a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs +++ b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs @@ -32,6 +32,10 @@ await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); }); + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerListener.DidNotReceive().OnIsBusyChanged(Args.Bool); repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); @@ -51,6 +55,10 @@ await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); }); + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerListener.ClearReceivedCalls(); var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt"); @@ -82,6 +90,10 @@ await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); }); + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerListener.ClearReceivedCalls(); var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt"); @@ -139,6 +151,10 @@ await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); }); + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerListener.ClearReceivedCalls(); var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt"); @@ -195,6 +211,10 @@ await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); }); + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerListener.ClearReceivedCalls(); await RepositoryManager.SwitchBranch("feature/document").StartAsAsync(); @@ -224,6 +244,10 @@ await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); }); + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerListener.ClearReceivedCalls(); await RepositoryManager.DeleteBranch("feature/document", true).StartAsAsync(); @@ -255,6 +279,10 @@ await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); }); + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerListener.ClearReceivedCalls(); var createdBranch1 = "feature/document2"; @@ -304,6 +332,10 @@ await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); }); + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerListener.ClearReceivedCalls(); await RepositoryManager.RemoteRemove("origin").StartAsAsync(); @@ -356,6 +388,10 @@ await Initialize(TestRepoMasterTwoRemotes, initializeRepository: false, repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); }); + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerListener.ClearReceivedCalls(); await RepositoryManager.CreateBranch("branch2", "another/master") @@ -408,6 +444,10 @@ await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); }); + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerListener.ClearReceivedCalls(); await RepositoryManager.Pull("origin", "master").StartAsAsync(); @@ -437,6 +477,10 @@ await Initialize(TestRepoMasterCleanUnsynchronized, initializeRepository: false, repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); }); + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerListener.ClearReceivedCalls(); await RepositoryManager.Fetch("origin").StartAsAsync(); From b8f74533ee9d1a5f906ce2cee1fe21106cd67238 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 21 Nov 2017 15:09:04 -0500 Subject: [PATCH 23/35] Fixes needed after merge --- src/GitHub.Api/Git/RepositoryManager.cs | 42 +++++++++---------------- 1 file changed, 15 insertions(+), 27 deletions(-) diff --git a/src/GitHub.Api/Git/RepositoryManager.cs b/src/GitHub.Api/Git/RepositoryManager.cs index db743f200..921ea3124 100644 --- a/src/GitHub.Api/Git/RepositoryManager.cs +++ b/src/GitHub.Api/Git/RepositoryManager.cs @@ -270,7 +270,7 @@ public ITask UnlockFile(string file, bool force) public void UpdateGitLog() { var task = GitClient.Log(); - HookupHandlers(task); + task = HookupHandlers(task, false, false); task.Then((success, logEntries) => { if (success) @@ -280,6 +280,19 @@ public void UpdateGitLog() }).Start(); } + public void UpdateGitStatus() + { + var task = GitClient.Status(); + task = HookupHandlers(task, true, false); + task.Then((success, status) => + { + if (success) + { + GitStatusUpdated?.Invoke(status); + } + }).Start(); + } + private ITask HookupHandlers(ITask task, bool isExclusive, bool filesystemChangesExpected) { return new ActionTask(CancellationToken.None, () => { @@ -321,7 +334,7 @@ private ITask HookupHandlers(ITask task, bool isExclusive, bool filesys public void UpdateLocks() { var task = GitClient.ListLocks(false); - HookupHandlers(task); + HookupHandlers(task, false, false); task.Then((success, locks) => { if (success) @@ -391,31 +404,6 @@ private void UpdateCurrentBranchAndRemote(string head) CurrentBranchUpdated?.Invoke(branch, remote); } - private ITask HookupHandlers(ITask task, bool disableWatcher = false) - { - task.OnStart += t => { - Logger.Trace("Start " + task.Name); - IsBusy = true; - - if (disableWatcher) - { - watcher.Stop(); - } - }; - - task.OnEnd += t => { - if (disableWatcher) - { - watcher.Start(); - } - - IsBusy = false; - - Logger.Trace("Finish " + task.Name); - }; - return task; - } - private void WatcherOnRemoteBranchesChanged() { Logger.Trace("WatcherOnRemoteBranchesChanged"); From 5822ece93cc66b2f767b5fa00b832522dc6107b3 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 22 Nov 2017 08:43:09 -0500 Subject: [PATCH 24/35] Adding milliseconds to file log output --- src/GitHub.Logging/FileLogAdapter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GitHub.Logging/FileLogAdapter.cs b/src/GitHub.Logging/FileLogAdapter.cs index b2c228c9b..10df47350 100644 --- a/src/GitHub.Logging/FileLogAdapter.cs +++ b/src/GitHub.Logging/FileLogAdapter.cs @@ -16,7 +16,7 @@ public FileLogAdapter(string path) private string GetMessage(string level, string context, string message) { - var time = DateTime.Now.ToString("yyMMdd-HH:mm:ss"); + var time = DateTime.Now.ToString("yyMMdd-HH:mm:ss.fff"); var threadId = Thread.CurrentThread.ManagedThreadId; return string.Format("{0} {1,5} [{2,2}] {3,-35} {4}{5}", time, level, threadId, context, message, Environment.NewLine); } From d97e7ff6c779c2e514c5c9aee1b3361128351518 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 22 Nov 2017 08:46:35 -0500 Subject: [PATCH 25/35] Adding more logging information to RepositoryManagerTests --- src/tests/IntegrationTests/BaseGitRepoTest.cs | 2 + .../Events/RepositoryManagerTests.cs | 931 ++++++++++-------- 2 files changed, 517 insertions(+), 416 deletions(-) diff --git a/src/tests/IntegrationTests/BaseGitRepoTest.cs b/src/tests/IntegrationTests/BaseGitRepoTest.cs index 57ed1b536..b8131fb42 100644 --- a/src/tests/IntegrationTests/BaseGitRepoTest.cs +++ b/src/tests/IntegrationTests/BaseGitRepoTest.cs @@ -16,7 +16,9 @@ public override void OnSetup() TestRepoMasterDirtyUnsynchronized = TestBasePath.Combine("IOTestsRepo", "IOTestsRepo_master_dirty_unsync"); TestRepoMasterTwoRemotes = TestBasePath.Combine("IOTestsRepo", "IOTestsRepo_master_two_remotes"); + Logger.Trace("Extracting Zip File to {0}", TestBasePath); ZipHelper.ExtractZipFile(TestZipFilePath, TestBasePath.ToString(), CancellationToken.None); + Logger.Trace("Extracted Zip File"); } protected NPath TestRepoMasterCleanSynchronized { get; private set; } diff --git a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs index 59f1b53e5..ec0aace9f 100644 --- a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs +++ b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs @@ -25,480 +25,579 @@ public override void OnSetup() [Test] public async Task ShouldPerformBasicInitialize() { - var repositoryManagerListener = Substitute.For(); - - await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, - onRepositoryManagerCreated: manager => { - repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); - }); - - repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - - repositoryManagerListener.DidNotReceive().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); - repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); - repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); - repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); - repositoryManagerListener.Received().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + Logger.Trace("Starting ShouldPerformBasicInitialize"); + + try + { + var repositoryManagerListener = Substitute.For(); + + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, + onRepositoryManagerCreated: manager => { + repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); + }); + + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + + repositoryManagerListener.DidNotReceive().OnIsBusyChanged(Args.Bool); + repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.Received().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + } + finally + { + Logger.Trace("Ending ShouldPerformBasicInitialize"); + } } [Test] public async Task ShouldDetectFileChanges() { - var repositoryManagerListener = Substitute.For(); + Logger.Trace("Starting ShouldDetectFileChanges"); - await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, - onRepositoryManagerCreated: manager => { - repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); - }); + try + { + var repositoryManagerListener = Substitute.For(); - repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, + onRepositoryManagerCreated: manager => { + repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); + }); - repositoryManagerListener.ClearReceivedCalls(); + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt"); - foobarTxt.WriteAllText("foobar"); + repositoryManagerListener.ClearReceivedCalls(); - await TaskManager.Wait(); + var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt"); + foobarTxt.WriteAllText("foobar"); - RepositoryManager.WaitForEvents(); - repositoryManagerEvents.WaitForNotBusy(); + await TaskManager.Wait(); - repositoryManagerEvents.GitStatusUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + RepositoryManager.WaitForEvents(); + repositoryManagerEvents.WaitForNotBusy(); - repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); - repositoryManagerListener.Received().GitStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); - repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); - repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); - repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + repositoryManagerEvents.GitStatusUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); + repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.Received().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + } + finally + { + Logger.Trace("Ending ShouldDetectFileChanges"); + } } [Test] public async Task ShouldAddAndCommitFiles() { - var repositoryManagerListener = Substitute.For(); - - await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, - onRepositoryManagerCreated: manager => { - repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); - }); - - repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - - repositoryManagerListener.ClearReceivedCalls(); - - var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt"); - foobarTxt.WriteAllText("foobar"); - - var testDocumentTxt = TestRepoMasterCleanSynchronized.Combine("Assets", "TestDocument.txt"); - testDocumentTxt.WriteAllText("foobar"); - - await TaskManager.Wait(); - - RepositoryManager.WaitForEvents(); - repositoryManagerEvents.WaitForNotBusy(); - - repositoryManagerEvents.GitStatusUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - - repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); - repositoryManagerListener.Received().GitStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); - repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); - repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); - repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); - repositoryManagerListener.ClearReceivedCalls(); - - repositoryManagerEvents.Reset(); - - await RepositoryManager - .CommitFiles(new List { "Assets\\TestDocument.txt", "foobar.txt" }, "IntegrationTest Commit", string.Empty) - .StartAsAsync(); - await TaskManager.Wait(); - - RepositoryManager.WaitForEvents(); - repositoryManagerEvents.WaitForNotBusy(); - - repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.GitStatusUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.GitLogUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - - repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); - repositoryManagerListener.Received().GitStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); - repositoryManagerListener.Received().GitLogUpdated(Args.GitLogs); - repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); - repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + Logger.Trace("Starting ShouldAddAndCommitFiles"); + + try + { + var repositoryManagerListener = Substitute.For(); + + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, + onRepositoryManagerCreated: manager => { + repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); + }); + + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + + repositoryManagerListener.ClearReceivedCalls(); + + var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt"); + foobarTxt.WriteAllText("foobar"); + + var testDocumentTxt = TestRepoMasterCleanSynchronized.Combine("Assets", "TestDocument.txt"); + testDocumentTxt.WriteAllText("foobar"); + + await TaskManager.Wait(); + + RepositoryManager.WaitForEvents(); + repositoryManagerEvents.WaitForNotBusy(); + + repositoryManagerEvents.GitStatusUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); + repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.Received().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + repositoryManagerListener.ClearReceivedCalls(); + + repositoryManagerEvents.Reset(); + + await RepositoryManager + .CommitFiles(new List { "Assets\\TestDocument.txt", "foobar.txt" }, "IntegrationTest Commit", string.Empty) + .StartAsAsync(); + await TaskManager.Wait(); + + RepositoryManager.WaitForEvents(); + repositoryManagerEvents.WaitForNotBusy(); + + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.GitStatusUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.GitLogUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); + repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.Received().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); + repositoryManagerListener.Received().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + } + finally + { + Logger.Trace("Ending ShouldAddAndCommitFiles"); + } } [Test] public async Task ShouldAddAndCommitAllFiles() { - var repositoryManagerListener = Substitute.For(); - - await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, - onRepositoryManagerCreated: manager => { - repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); - }); - - repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - - repositoryManagerListener.ClearReceivedCalls(); - - var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt"); - foobarTxt.WriteAllText("foobar"); - - var testDocumentTxt = TestRepoMasterCleanSynchronized.Combine("Assets", "TestDocument.txt"); - testDocumentTxt.WriteAllText("foobar"); - - await TaskManager.Wait(); - - RepositoryManager.WaitForEvents(); - repositoryManagerEvents.WaitForNotBusy(); - - repositoryManagerEvents.GitStatusUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - - repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); - repositoryManagerListener.Received().GitStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); - repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); - repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); - repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); - - repositoryManagerListener.ClearReceivedCalls(); - repositoryManagerEvents.Reset(); - - await RepositoryManager - .CommitAllFiles("IntegrationTest Commit", string.Empty) - .StartAsAsync(); - await TaskManager.Wait(); - - RepositoryManager.WaitForEvents(); - repositoryManagerEvents.WaitForNotBusy(); - - repositoryManagerEvents.GitStatusUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - - repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); - repositoryManagerListener.Received().GitStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); - repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); - repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); - repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + Logger.Trace("Starting ShouldAddAndCommitAllFiles"); + + try + { + var repositoryManagerListener = Substitute.For(); + + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, + onRepositoryManagerCreated: manager => { + repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); + }); + + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + + repositoryManagerListener.ClearReceivedCalls(); + + var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt"); + foobarTxt.WriteAllText("foobar"); + + var testDocumentTxt = TestRepoMasterCleanSynchronized.Combine("Assets", "TestDocument.txt"); + testDocumentTxt.WriteAllText("foobar"); + + await TaskManager.Wait(); + + RepositoryManager.WaitForEvents(); + repositoryManagerEvents.WaitForNotBusy(); + + repositoryManagerEvents.GitStatusUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); + repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.Received().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + + repositoryManagerListener.ClearReceivedCalls(); + repositoryManagerEvents.Reset(); + + await RepositoryManager + .CommitAllFiles("IntegrationTest Commit", string.Empty) + .StartAsAsync(); + await TaskManager.Wait(); + + RepositoryManager.WaitForEvents(); + repositoryManagerEvents.WaitForNotBusy(); + + repositoryManagerEvents.GitStatusUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); + repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.Received().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + } + finally + { + Logger.Trace("Ending ShouldAddAndCommitAllFiles"); + } } [Test] public async Task ShouldDetectBranchChange() { - var repositoryManagerListener = Substitute.For(); - - await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, - onRepositoryManagerCreated: manager => { - repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); - }); - - repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - - repositoryManagerListener.ClearReceivedCalls(); - - await RepositoryManager.SwitchBranch("feature/document").StartAsAsync(); - await TaskManager.Wait(); - - RepositoryManager.WaitForEvents(); - repositoryManagerEvents.WaitForNotBusy(); - - repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - - repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); - repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); - repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); - repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); - repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + Logger.Trace("Starting ShouldDetectBranchChange"); + + try + { + var repositoryManagerListener = Substitute.For(); + + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, + onRepositoryManagerCreated: manager => { + repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); + }); + + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + + repositoryManagerListener.ClearReceivedCalls(); + + await RepositoryManager.SwitchBranch("feature/document").StartAsAsync(); + await TaskManager.Wait(); + + RepositoryManager.WaitForEvents(); + repositoryManagerEvents.WaitForNotBusy(); + + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); + repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + } + finally + { + Logger.Trace("Ending ShouldDetectBranchChange"); + } } [Test] public async Task ShouldDetectBranchDelete() { - var repositoryManagerListener = Substitute.For(); - - await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, - onRepositoryManagerCreated: manager => { - repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); - }); - - repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - - repositoryManagerListener.ClearReceivedCalls(); - - await RepositoryManager.DeleteBranch("feature/document", true).StartAsAsync(); - await TaskManager.Wait(); - - RepositoryManager.WaitForEvents(); - repositoryManagerEvents.WaitForNotBusy(); - - repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - - repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); - repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); - repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); - repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); - repositoryManagerListener.Received().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + Logger.Trace("Starting ShouldDetectBranchDelete"); + + try + { + var repositoryManagerListener = Substitute.For(); + + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, + onRepositoryManagerCreated: manager => { + repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); + }); + + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + + repositoryManagerListener.ClearReceivedCalls(); + + await RepositoryManager.DeleteBranch("feature/document", true).StartAsAsync(); + await TaskManager.Wait(); + + RepositoryManager.WaitForEvents(); + repositoryManagerEvents.WaitForNotBusy(); + + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); + repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.Received().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + } + finally + { + Logger.Trace("Ending ShouldDetectBranchDelete"); + } } [Test] public async Task ShouldDetectBranchCreate() { - var repositoryManagerListener = Substitute.For(); - - await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, - onRepositoryManagerCreated: manager => { - repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); - }); - - repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - - repositoryManagerListener.ClearReceivedCalls(); - - var createdBranch1 = "feature/document2"; - await RepositoryManager.CreateBranch(createdBranch1, "feature/document").StartAsAsync(); - await TaskManager.Wait(); - - RepositoryManager.WaitForEvents(); - repositoryManagerEvents.WaitForNotBusy(); - - repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - - repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); - repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); - repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); - repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); - repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); - - repositoryManagerListener.ClearReceivedCalls(); - repositoryManagerEvents.Reset(); - - await RepositoryManager.CreateBranch("feature2/document2", "feature/document").StartAsAsync(); - await TaskManager.Wait(); - - RepositoryManager.WaitForEvents(); - repositoryManagerEvents.WaitForNotBusy(); - - repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - - repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); - repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); - repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); - repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); - repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + Logger.Trace("Starting ShouldDetectBranchCreate"); + + try + { + var repositoryManagerListener = Substitute.For(); + + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, + onRepositoryManagerCreated: manager => { + repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); + }); + + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + + repositoryManagerListener.ClearReceivedCalls(); + + var createdBranch1 = "feature/document2"; + await RepositoryManager.CreateBranch(createdBranch1, "feature/document").StartAsAsync(); + await TaskManager.Wait(); + + RepositoryManager.WaitForEvents(); + repositoryManagerEvents.WaitForNotBusy(); + + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); + repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + + repositoryManagerListener.ClearReceivedCalls(); + repositoryManagerEvents.Reset(); + + await RepositoryManager.CreateBranch("feature2/document2", "feature/document").StartAsAsync(); + await TaskManager.Wait(); + + RepositoryManager.WaitForEvents(); + repositoryManagerEvents.WaitForNotBusy(); + + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); + repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + } + finally + { + Logger.Trace("Ending ShouldDetectBranchCreate"); + } } [Test] public async Task ShouldDetectChangesToRemotes() { - var repositoryManagerListener = Substitute.For(); - - await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, - onRepositoryManagerCreated: manager => { - repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); - }); - - repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - - repositoryManagerListener.ClearReceivedCalls(); - - await RepositoryManager.RemoteRemove("origin").StartAsAsync(); - await TaskManager.Wait(); - - RepositoryManager.WaitForEvents(); - repositoryManagerEvents.WaitForNotBusy(); - - repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - - repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); - repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); - repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); - repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); - repositoryManagerListener.Received().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); - - repositoryManagerListener.ClearReceivedCalls(); - repositoryManagerEvents.Reset(); - - await RepositoryManager.RemoteAdd("origin", "https://github.com/EvilShana/IOTestsRepo.git").StartAsAsync(); - await TaskManager.Wait(); - - RepositoryManager.WaitForEvents(); - repositoryManagerEvents.WaitForNotBusy(); - - repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - - repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); - repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); - repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); - repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); - repositoryManagerListener.Received().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + Logger.Trace("Starting ShouldDetectChangesToRemotes"); + + try + { + var repositoryManagerListener = Substitute.For(); + + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, + onRepositoryManagerCreated: manager => { + repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); + }); + + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + + repositoryManagerListener.ClearReceivedCalls(); + + await RepositoryManager.RemoteRemove("origin").StartAsAsync(); + await TaskManager.Wait(); + + RepositoryManager.WaitForEvents(); + repositoryManagerEvents.WaitForNotBusy(); + + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); + repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.Received().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + + repositoryManagerListener.ClearReceivedCalls(); + repositoryManagerEvents.Reset(); + + await RepositoryManager.RemoteAdd("origin", "https://github.com/EvilShana/IOTestsRepo.git").StartAsAsync(); + await TaskManager.Wait(); + + RepositoryManager.WaitForEvents(); + repositoryManagerEvents.WaitForNotBusy(); + + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); + repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.Received().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + } + finally + { + Logger.Trace("Ending ShouldDetectChangesToRemotes"); + } } [Test] public async Task ShouldDetectChangesToRemotesWhenSwitchingBranches() { - var repositoryManagerListener = Substitute.For(); - - await Initialize(TestRepoMasterTwoRemotes, initializeRepository: false, - onRepositoryManagerCreated: manager => { - repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); - }); - - repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - - repositoryManagerListener.ClearReceivedCalls(); - - await RepositoryManager.CreateBranch("branch2", "another/master") - .StartAsAsync(); - await TaskManager.Wait(); - - RepositoryManager.WaitForEvents(); - repositoryManagerEvents.WaitForNotBusy(); - - repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - - repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); - repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); - repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); - repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); - repositoryManagerListener.Received().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); - - repositoryManagerListener.ClearReceivedCalls(); - repositoryManagerEvents.Reset(); - - await RepositoryManager.SwitchBranch("branch2") - .StartAsAsync(); - await TaskManager.Wait(); - - RepositoryManager.WaitForEvents(); - repositoryManagerEvents.WaitForNotBusy(); - - repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - - repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); - repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); - repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); - repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); - repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + Logger.Trace("Starting ShouldDetectChangesToRemotesWhenSwitchingBranches"); + + try + { + var repositoryManagerListener = Substitute.For(); + + await Initialize(TestRepoMasterTwoRemotes, initializeRepository: false, + onRepositoryManagerCreated: manager => { + repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); + }); + + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + + repositoryManagerListener.ClearReceivedCalls(); + + await RepositoryManager.CreateBranch("branch2", "another/master") + .StartAsAsync(); + await TaskManager.Wait(); + + RepositoryManager.WaitForEvents(); + repositoryManagerEvents.WaitForNotBusy(); + + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); + repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.Received().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + + repositoryManagerListener.ClearReceivedCalls(); + repositoryManagerEvents.Reset(); + + await RepositoryManager.SwitchBranch("branch2") + .StartAsAsync(); + await TaskManager.Wait(); + + RepositoryManager.WaitForEvents(); + repositoryManagerEvents.WaitForNotBusy(); + + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); + repositoryManagerListener.Received().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.DidNotReceive().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + } + finally + { + Logger.Trace("Ending ShouldDetectChangesToRemotesWhenSwitchingBranches"); + } } [Test] public async Task ShouldDetectGitPull() { - var repositoryManagerListener = Substitute.For(); - - await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, - onRepositoryManagerCreated: manager => { - repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); - }); - - repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - - repositoryManagerListener.ClearReceivedCalls(); - - await RepositoryManager.Pull("origin", "master").StartAsAsync(); - await TaskManager.Wait(); - - RepositoryManager.WaitForEvents(); - repositoryManagerEvents.WaitForNotBusy(); - - repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - - repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); - repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); - repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); - repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); - repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + Logger.Trace("Starting ShouldDetectGitPull"); + + try + { + var repositoryManagerListener = Substitute.For(); + + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false, + onRepositoryManagerCreated: manager => { + repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); + }); + + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + + repositoryManagerListener.ClearReceivedCalls(); + + await RepositoryManager.Pull("origin", "master").StartAsAsync(); + await TaskManager.Wait(); + + RepositoryManager.WaitForEvents(); + repositoryManagerEvents.WaitForNotBusy(); + + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); + repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.DidNotReceive().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + } + finally + { + Logger.Trace("Ending ShouldDetectGitPull"); + } } [Test] public async Task ShouldDetectGitFetch() { - var repositoryManagerListener = Substitute.For(); - - await Initialize(TestRepoMasterCleanUnsynchronized, initializeRepository: false, - onRepositoryManagerCreated: manager => { - repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); - }); - - repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); - - repositoryManagerListener.ClearReceivedCalls(); - - await RepositoryManager.Fetch("origin").StartAsAsync(); - await TaskManager.Wait(); - - RepositoryManager.WaitForEvents(); - repositoryManagerEvents.WaitForNotBusy(); - - repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - - repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); - repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); - repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); - repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); - repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); - repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); - repositoryManagerListener.Received().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + Logger.Trace("Starting ShouldDetectGitFetch"); + + try + { + var repositoryManagerListener = Substitute.For(); + + await Initialize(TestRepoMasterCleanUnsynchronized, initializeRepository: false, + onRepositoryManagerCreated: manager => { + repositoryManagerListener.AttachListener(manager, repositoryManagerEvents); + }); + + repositoryManagerEvents.CurrentBranchUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(20)).Should().BeTrue(); + + repositoryManagerListener.ClearReceivedCalls(); + + await RepositoryManager.Fetch("origin").StartAsAsync(); + await TaskManager.Wait(); + + RepositoryManager.WaitForEvents(); + repositoryManagerEvents.WaitForNotBusy(); + + repositoryManagerEvents.LocalBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryManagerEvents.RemoteBranchesUpdated.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + + repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool); + repositoryManagerListener.DidNotReceive().CurrentBranchUpdated(Args.NullableConfigBranch, Args.NullableConfigRemote); + repositoryManagerListener.DidNotReceive().GitStatusUpdated(Args.GitStatus); + repositoryManagerListener.DidNotReceive().GitLocksUpdated(Args.GitLocks); + repositoryManagerListener.DidNotReceive().GitLogUpdated(Args.GitLogs); + repositoryManagerListener.Received().LocalBranchesUpdated(Args.LocalBranchDictionary); + repositoryManagerListener.Received().RemoteBranchesUpdated(Args.RemoteDictionary, Args.RemoteBranchDictionary); + } + finally + { + Logger.Trace("Ending ShouldDetectGitFetch"); + } } } } From b68befcb1c50d9522c75464799d40d60f2a2e758 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 22 Nov 2017 08:58:18 -0500 Subject: [PATCH 26/35] Removing ignores of TimeSensitive tests --- appveyor.yml | 1 - .../BaseGitEnvironmentTest.cs | 23 +++++++++++++++++++ .../Events/RepositoryWatcherTests.cs | 4 ++-- src/tests/IntegrationTests/GitClientTests.cs | 2 +- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 9bb74ce89..a5d0c4580 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -56,7 +56,6 @@ test: categories: except: - DoNotRunOnAppVeyor - - TimeSensitive artifacts: - path: unity\PackageProject type: zip diff --git a/src/tests/IntegrationTests/BaseGitEnvironmentTest.cs b/src/tests/IntegrationTests/BaseGitEnvironmentTest.cs index ad07d757c..a2add9431 100644 --- a/src/tests/IntegrationTests/BaseGitEnvironmentTest.cs +++ b/src/tests/IntegrationTests/BaseGitEnvironmentTest.cs @@ -25,6 +25,15 @@ protected async Task Initialize(NPath repoPath, NPath environmentP Environment.GitExecutablePath = gitSetup.GitExecutablePath; Platform = new Platform(Environment); + + Logger.Trace("Bleeding Events"); + BleedEvents(TestRepoMasterCleanUnsynchronized); + BleedEvents(TestRepoMasterCleanUnsynchronizedRussianLanguage); + BleedEvents(TestRepoMasterCleanSynchronized); + BleedEvents(TestRepoMasterDirtyUnsynchronized); + BleedEvents(TestRepoMasterTwoRemotes); + Logger.Trace("Bled Events"); + GitEnvironment = Platform.GitEnvironment; ProcessManager = new ProcessManager(Environment, GitEnvironment, TaskManager.Token); @@ -65,6 +74,20 @@ protected async Task Initialize(NPath repoPath, NPath environmentP return Environment; } + private void BleedEvents(NPath path) + { + using (var repositoryWatcher = new RepositoryWatcher(Platform, new RepositoryPathConfiguration(path), CancellationToken.None)) + { + repositoryWatcher.Initialize(); + repositoryWatcher.Start(); + while (repositoryWatcher.CheckAndProcessEvents() != 0) + { + Thread.Sleep(TimeSpan.FromSeconds(2)); + } + repositoryWatcher.Stop(); + } + } + public override void OnTearDown() { RepositoryManager?.Stop(); diff --git a/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs b/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs index c7e524939..dd3486797 100644 --- a/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs +++ b/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs @@ -9,10 +9,10 @@ namespace IntegrationTests { - [TestFixture, Category("TimeSensitive")] + [TestFixture] class RepositoryWatcherTests : BaseGitEnvironmentTest { - [Test, Category("TimeSensitive")] + [Test] public async Task ShouldDetectFileChangesAndCommit() { await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); diff --git a/src/tests/IntegrationTests/GitClientTests.cs b/src/tests/IntegrationTests/GitClientTests.cs index 8acc3e70a..7acb2250d 100644 --- a/src/tests/IntegrationTests/GitClientTests.cs +++ b/src/tests/IntegrationTests/GitClientTests.cs @@ -6,7 +6,7 @@ namespace IntegrationTests { - [TestFixture/*, Category("TimeSensitive")*/] + [TestFixture] class GitClientTests : BaseGitEnvironmentTest { [Test] From 62e45fb0b1005af165615ca73e10d30adb656e52 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 22 Nov 2017 09:14:57 -0500 Subject: [PATCH 27/35] Adding more logging detail to RepositoryWatcherTests --- .../Events/RepositoryWatcherTests.cs | 597 ++++++++++-------- 1 file changed, 330 insertions(+), 267 deletions(-) diff --git a/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs b/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs index dd3486797..652827ad9 100644 --- a/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs +++ b/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs @@ -15,402 +15,465 @@ class RepositoryWatcherTests : BaseGitEnvironmentTest [Test] public async Task ShouldDetectFileChangesAndCommit() { - await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); + Logger.Trace("Starting ShouldDetectFileChangesAndCommit"); - using (var repositoryWatcher = CreateRepositoryWatcher(TestRepoMasterCleanSynchronized)) + try { - var watcherAutoResetEvent = new RepositoryWatcherAutoResetEvent(); + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); - var repositoryWatcherListener = Substitute.For(); - repositoryWatcherListener.AttachListener(repositoryWatcher, watcherAutoResetEvent); + using (var repositoryWatcher = CreateRepositoryWatcher(TestRepoMasterCleanSynchronized)) + { + var watcherAutoResetEvent = new RepositoryWatcherAutoResetEvent(); - repositoryWatcher.Initialize(); - repositoryWatcher.Start(); - repositoryWatcher.Stop(); + var repositoryWatcherListener = Substitute.For(); + repositoryWatcherListener.AttachListener(repositoryWatcher, watcherAutoResetEvent); - try - { - var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt"); + repositoryWatcher.Initialize(); + repositoryWatcher.Start(); + repositoryWatcher.Stop(); - Logger.Trace("Issuing Changes"); + try + { + var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt"); - foobarTxt.WriteAllText("foobar"); - await TaskManager.Wait(); + Logger.Trace("Issuing Changes"); - Logger.Trace("Continue test"); + foobarTxt.WriteAllText("foobar"); + await TaskManager.Wait(); - repositoryWatcher.Start(); + Logger.Trace("Continue test"); - watcherAutoResetEvent.RepositoryChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - watcherAutoResetEvent.Reset(); + repositoryWatcher.Start(); - repositoryWatcherListener.DidNotReceive().HeadChanged(); - repositoryWatcherListener.DidNotReceive().ConfigChanged(); - repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); - repositoryWatcherListener.DidNotReceive().IndexChanged(); - repositoryWatcherListener.Received().RepositoryChanged(); - repositoryWatcherListener.DidNotReceive().LocalBranchesChanged(); - repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); - repositoryWatcherListener.ClearReceivedCalls(); + watcherAutoResetEvent.RepositoryChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + watcherAutoResetEvent.Reset(); - repositoryWatcher.Stop(); - Logger.Trace("Issuing Command"); + repositoryWatcherListener.DidNotReceive().HeadChanged(); + repositoryWatcherListener.DidNotReceive().ConfigChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); + repositoryWatcherListener.DidNotReceive().IndexChanged(); + repositoryWatcherListener.Received().RepositoryChanged(); + repositoryWatcherListener.DidNotReceive().LocalBranchesChanged(); + repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); + repositoryWatcherListener.ClearReceivedCalls(); - await GitClient.AddAll().StartAsAsync(); + repositoryWatcher.Stop(); + Logger.Trace("Issuing Command"); - Logger.Trace("Completed Command"); - repositoryWatcher.Start(); + await GitClient.AddAll().StartAsAsync(); - watcherAutoResetEvent.IndexChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - watcherAutoResetEvent.Reset(); + Logger.Trace("Completed Command"); + repositoryWatcher.Start(); - repositoryWatcherListener.DidNotReceive().HeadChanged(); - repositoryWatcherListener.DidNotReceive().ConfigChanged(); - repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); - repositoryWatcherListener.Received(1).IndexChanged(); - repositoryWatcherListener.DidNotReceive().RepositoryChanged(); - repositoryWatcherListener.DidNotReceive().LocalBranchesChanged(); - repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); - repositoryWatcherListener.ClearReceivedCalls(); + watcherAutoResetEvent.IndexChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + watcherAutoResetEvent.Reset(); - repositoryWatcher.Stop(); - Logger.Trace("Issuing Command"); + repositoryWatcherListener.DidNotReceive().HeadChanged(); + repositoryWatcherListener.DidNotReceive().ConfigChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); + repositoryWatcherListener.Received(1).IndexChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryChanged(); + repositoryWatcherListener.DidNotReceive().LocalBranchesChanged(); + repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); + repositoryWatcherListener.ClearReceivedCalls(); - await GitClient.Commit("Test Commit", string.Empty).StartAsAsync(); + repositoryWatcher.Stop(); + Logger.Trace("Issuing Command"); - Logger.Trace("Completed Command"); - repositoryWatcher.Start(); + await GitClient.Commit("Test Commit", string.Empty).StartAsAsync(); - watcherAutoResetEvent.RepositoryCommitted.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - watcherAutoResetEvent.IndexChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - watcherAutoResetEvent.Reset(); - - repositoryWatcherListener.DidNotReceive().HeadChanged(); - repositoryWatcherListener.DidNotReceive().ConfigChanged(); - repositoryWatcherListener.Received(1).RepositoryCommitted(); - repositoryWatcherListener.Received(1).IndexChanged(); - repositoryWatcherListener.DidNotReceive().RepositoryChanged(); - repositoryWatcherListener.Received(1).LocalBranchesChanged(); - repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); - repositoryWatcherListener.ClearReceivedCalls(); - } - finally - { - repositoryWatcher.Stop(); + Logger.Trace("Completed Command"); + repositoryWatcher.Start(); + + watcherAutoResetEvent.RepositoryCommitted.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + watcherAutoResetEvent.IndexChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + watcherAutoResetEvent.Reset(); + + repositoryWatcherListener.DidNotReceive().HeadChanged(); + repositoryWatcherListener.DidNotReceive().ConfigChanged(); + repositoryWatcherListener.Received(1).RepositoryCommitted(); + repositoryWatcherListener.Received(1).IndexChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryChanged(); + repositoryWatcherListener.Received(1).LocalBranchesChanged(); + repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); + repositoryWatcherListener.ClearReceivedCalls(); + } + finally + { + repositoryWatcher.Stop(); + } } } + finally + { + Logger.Trace("Ending ShouldDetectFileChangesAndCommit"); + } } [Test] public async Task ShouldDetectBranchChange() { - await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); + Logger.Trace("Starting ShouldDetectBranchChange"); - using (var repositoryWatcher = CreateRepositoryWatcher(TestRepoMasterCleanSynchronized)) + try { - var watcherAutoResetEvent = new RepositoryWatcherAutoResetEvent(); + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); - var repositoryWatcherListener = Substitute.For(); - repositoryWatcherListener.AttachListener(repositoryWatcher, watcherAutoResetEvent); + using (var repositoryWatcher = CreateRepositoryWatcher(TestRepoMasterCleanSynchronized)) + { + var watcherAutoResetEvent = new RepositoryWatcherAutoResetEvent(); - repositoryWatcher.Initialize(); - repositoryWatcher.Start(); - repositoryWatcher.Stop(); + var repositoryWatcherListener = Substitute.For(); + repositoryWatcherListener.AttachListener(repositoryWatcher, watcherAutoResetEvent); - try - { - Logger.Trace("Issuing Command"); + repositoryWatcher.Initialize(); + repositoryWatcher.Start(); + repositoryWatcher.Stop(); - await GitClient.SwitchBranch("feature/document").StartAsAsync(); - await TaskManager.Wait(); + try + { + Logger.Trace("Issuing Command"); - Logger.Trace("Completed Command"); + await GitClient.SwitchBranch("feature/document").StartAsAsync(); + await TaskManager.Wait(); - repositoryWatcher.Start(); + Logger.Trace("Completed Command"); - watcherAutoResetEvent.HeadChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - watcherAutoResetEvent.IndexChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - watcherAutoResetEvent.RepositoryChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryWatcher.Start(); - Logger.Trace("Continue test"); + watcherAutoResetEvent.HeadChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + watcherAutoResetEvent.IndexChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + watcherAutoResetEvent.RepositoryChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - repositoryWatcherListener.Received(1).HeadChanged(); - repositoryWatcherListener.DidNotReceive().ConfigChanged(); - repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); - repositoryWatcherListener.Received(1).IndexChanged(); - repositoryWatcherListener.Received(1).RepositoryChanged(); - repositoryWatcherListener.DidNotReceive().LocalBranchesChanged(); - repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); - } - finally - { - repositoryWatcher.Stop(); + Logger.Trace("Continue test"); + + repositoryWatcherListener.Received(1).HeadChanged(); + repositoryWatcherListener.DidNotReceive().ConfigChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); + repositoryWatcherListener.Received(1).IndexChanged(); + repositoryWatcherListener.Received(1).RepositoryChanged(); + repositoryWatcherListener.DidNotReceive().LocalBranchesChanged(); + repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); + } + finally + { + repositoryWatcher.Stop(); + } } } + finally + { + Logger.Trace("Ending ShouldDetectBranchChange"); + } } [Test] public async Task ShouldDetectBranchDelete() { - await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); + Logger.Trace("Starting ShouldDetectBranchDelete"); - using (var repositoryWatcher = CreateRepositoryWatcher(TestRepoMasterCleanSynchronized)) + try { - var watcherAutoResetEvent = new RepositoryWatcherAutoResetEvent(); + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); - var repositoryWatcherListener = Substitute.For(); - repositoryWatcherListener.AttachListener(repositoryWatcher, watcherAutoResetEvent); + using (var repositoryWatcher = CreateRepositoryWatcher(TestRepoMasterCleanSynchronized)) + { + var watcherAutoResetEvent = new RepositoryWatcherAutoResetEvent(); - repositoryWatcher.Initialize(); - repositoryWatcher.Start(); - repositoryWatcher.Stop(); + var repositoryWatcherListener = Substitute.For(); + repositoryWatcherListener.AttachListener(repositoryWatcher, watcherAutoResetEvent); - try - { - Logger.Trace("Issuing Command"); + repositoryWatcher.Initialize(); + repositoryWatcher.Start(); + repositoryWatcher.Stop(); - await GitClient.DeleteBranch("feature/document", true).StartAsAsync(); - await TaskManager.Wait(); + try + { + Logger.Trace("Issuing Command"); - Logger.Trace("Completed Command"); + await GitClient.DeleteBranch("feature/document", true).StartAsAsync(); + await TaskManager.Wait(); - repositoryWatcher.Start(); + Logger.Trace("Completed Command"); - watcherAutoResetEvent.ConfigChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryWatcher.Start(); - Logger.Trace("Continue test"); + watcherAutoResetEvent.ConfigChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - repositoryWatcherListener.DidNotReceive().HeadChanged(); - repositoryWatcherListener.Received(1).ConfigChanged(); - repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); - repositoryWatcherListener.DidNotReceive().IndexChanged(); - repositoryWatcherListener.DidNotReceive().RepositoryChanged(); - repositoryWatcherListener.Received(1).LocalBranchesChanged(); - repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); - } - finally - { - repositoryWatcher.Stop(); + Logger.Trace("Continue test"); + + repositoryWatcherListener.DidNotReceive().HeadChanged(); + repositoryWatcherListener.Received(1).ConfigChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); + repositoryWatcherListener.DidNotReceive().IndexChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryChanged(); + repositoryWatcherListener.Received(1).LocalBranchesChanged(); + repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); + } + finally + { + repositoryWatcher.Stop(); + } } } + finally + { + Logger.Trace("Ending ShouldDetectBranchDelete"); + } } [Test] public async Task ShouldDetectBranchCreate() { - await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); + Logger.Trace("Starting ShouldDetectBranchCreate"); - using (var repositoryWatcher = CreateRepositoryWatcher(TestRepoMasterCleanSynchronized)) + try { - var watcherAutoResetEvent = new RepositoryWatcherAutoResetEvent(); + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); - var repositoryWatcherListener = Substitute.For(); - repositoryWatcherListener.AttachListener(repositoryWatcher, watcherAutoResetEvent); + using (var repositoryWatcher = CreateRepositoryWatcher(TestRepoMasterCleanSynchronized)) + { + var watcherAutoResetEvent = new RepositoryWatcherAutoResetEvent(); - repositoryWatcher.Initialize(); - repositoryWatcher.Start(); - repositoryWatcher.Stop(); + var repositoryWatcherListener = Substitute.For(); + repositoryWatcherListener.AttachListener(repositoryWatcher, watcherAutoResetEvent); - try - { - Logger.Trace("Issuing Command"); + repositoryWatcher.Initialize(); + repositoryWatcher.Start(); + repositoryWatcher.Stop(); - await GitClient.CreateBranch("feature/document2", "feature/document").StartAsAsync(); - await TaskManager.Wait(); + try + { + Logger.Trace("Issuing Command"); - Logger.Trace("Continue test"); + await GitClient.CreateBranch("feature/document2", "feature/document").StartAsAsync(); + await TaskManager.Wait(); - repositoryWatcher.Start(); + Logger.Trace("Continue test"); - watcherAutoResetEvent.LocalBranchesChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - watcherAutoResetEvent.Reset(); + repositoryWatcher.Start(); - repositoryWatcherListener.DidNotReceive().HeadChanged(); - repositoryWatcherListener.DidNotReceive().ConfigChanged(); - repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); - repositoryWatcherListener.DidNotReceive().IndexChanged(); - repositoryWatcherListener.DidNotReceive().RepositoryChanged(); - repositoryWatcherListener.Received(1).LocalBranchesChanged(); - repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); - repositoryWatcherListener.ClearReceivedCalls(); + watcherAutoResetEvent.LocalBranchesChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + watcherAutoResetEvent.Reset(); - repositoryWatcher.Stop(); + repositoryWatcherListener.DidNotReceive().HeadChanged(); + repositoryWatcherListener.DidNotReceive().ConfigChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); + repositoryWatcherListener.DidNotReceive().IndexChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryChanged(); + repositoryWatcherListener.Received(1).LocalBranchesChanged(); + repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); + repositoryWatcherListener.ClearReceivedCalls(); - Logger.Trace("Issuing Command"); + repositoryWatcher.Stop(); - await GitClient.CreateBranch("feature2/document2", "feature/document").StartAsAsync(); - await TaskManager.Wait(); + Logger.Trace("Issuing Command"); - Logger.Trace("Continue test"); + await GitClient.CreateBranch("feature2/document2", "feature/document").StartAsAsync(); + await TaskManager.Wait(); - repositoryWatcher.Start(); + Logger.Trace("Continue test"); - watcherAutoResetEvent.LocalBranchesChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryWatcher.Start(); - repositoryWatcherListener.DidNotReceive().HeadChanged(); - repositoryWatcherListener.DidNotReceive().ConfigChanged(); - repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); - repositoryWatcherListener.DidNotReceive().IndexChanged(); - repositoryWatcherListener.DidNotReceive().RepositoryChanged(); - repositoryWatcherListener.Received(1).LocalBranchesChanged(); - repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); - } - finally - { - repositoryWatcher.Stop(); + watcherAutoResetEvent.LocalBranchesChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + + repositoryWatcherListener.DidNotReceive().HeadChanged(); + repositoryWatcherListener.DidNotReceive().ConfigChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); + repositoryWatcherListener.DidNotReceive().IndexChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryChanged(); + repositoryWatcherListener.Received(1).LocalBranchesChanged(); + repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); + } + finally + { + repositoryWatcher.Stop(); + } } } + finally + { + Logger.Trace("Ending ShouldDetectBranchCreate"); + } } [Test] public async Task ShouldDetectChangesToRemotes() { - await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); + Logger.Trace("Starting ShouldDetectChangesToRemotes"); - using (var repositoryWatcher = CreateRepositoryWatcher(TestRepoMasterCleanSynchronized)) + try { - var watcherAutoResetEvent = new RepositoryWatcherAutoResetEvent(); - - var repositoryWatcherListener = Substitute.For(); - repositoryWatcherListener.AttachListener(repositoryWatcher, watcherAutoResetEvent); - - repositoryWatcher.Initialize(); - repositoryWatcher.Start(); - repositoryWatcher.Stop(); + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); - try + using (var repositoryWatcher = CreateRepositoryWatcher(TestRepoMasterCleanSynchronized)) { - Logger.Trace("Issuing Command"); + var watcherAutoResetEvent = new RepositoryWatcherAutoResetEvent(); - await GitClient.RemoteRemove("origin").StartAsAsync(); - await TaskManager.Wait(); - - Logger.Trace("Continue test"); + var repositoryWatcherListener = Substitute.For(); + repositoryWatcherListener.AttachListener(repositoryWatcher, watcherAutoResetEvent); + repositoryWatcher.Initialize(); repositoryWatcher.Start(); - watcherAutoResetEvent.ConfigChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - watcherAutoResetEvent.RemoteBranchesChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - watcherAutoResetEvent.Reset(); - - repositoryWatcherListener.DidNotReceive().HeadChanged(); - repositoryWatcherListener.Received(1).ConfigChanged(); - repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); - repositoryWatcherListener.DidNotReceive().IndexChanged(); - repositoryWatcherListener.DidNotReceive().RepositoryChanged(); - repositoryWatcherListener.DidNotReceive().LocalBranchesChanged(); - repositoryWatcherListener.Received(1).RemoteBranchesChanged(); - repositoryWatcherListener.ClearReceivedCalls(); - repositoryWatcher.Stop(); - Logger.Trace("Issuing 2nd Command"); - - await GitClient.RemoteAdd("origin", "https://github.com/EvilStanleyGoldman/IOTestsRepo.git").StartAsAsync(); - await TaskManager.Wait(); - - Logger.Trace("Continue 2nd test"); - - repositoryWatcher.Start(); - watcherAutoResetEvent.ConfigChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - watcherAutoResetEvent.RemoteBranchesChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - - repositoryWatcherListener.DidNotReceive().HeadChanged(); - repositoryWatcherListener.Received(1).ConfigChanged(); - repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); - repositoryWatcherListener.DidNotReceive().IndexChanged(); - repositoryWatcherListener.DidNotReceive().RepositoryChanged(); - repositoryWatcherListener.DidNotReceive().LocalBranchesChanged(); - repositoryWatcherListener.Received(1).RemoteBranchesChanged(); - } - finally - { - repositoryWatcher.Stop(); + try + { + Logger.Trace("Issuing Command"); + + await GitClient.RemoteRemove("origin").StartAsAsync(); + await TaskManager.Wait(); + + Logger.Trace("Continue test"); + + repositoryWatcher.Start(); + watcherAutoResetEvent.ConfigChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + watcherAutoResetEvent.RemoteBranchesChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + watcherAutoResetEvent.Reset(); + + repositoryWatcherListener.DidNotReceive().HeadChanged(); + repositoryWatcherListener.Received(1).ConfigChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); + repositoryWatcherListener.DidNotReceive().IndexChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryChanged(); + repositoryWatcherListener.DidNotReceive().LocalBranchesChanged(); + repositoryWatcherListener.Received(1).RemoteBranchesChanged(); + repositoryWatcherListener.ClearReceivedCalls(); + + repositoryWatcher.Stop(); + + Logger.Trace("Issuing 2nd Command"); + + await GitClient.RemoteAdd("origin", "https://github.com/EvilStanleyGoldman/IOTestsRepo.git").StartAsAsync(); + await TaskManager.Wait(); + + Logger.Trace("Continue 2nd test"); + + repositoryWatcher.Start(); + watcherAutoResetEvent.ConfigChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + watcherAutoResetEvent.RemoteBranchesChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + + repositoryWatcherListener.DidNotReceive().HeadChanged(); + repositoryWatcherListener.Received(1).ConfigChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); + repositoryWatcherListener.DidNotReceive().IndexChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryChanged(); + repositoryWatcherListener.DidNotReceive().LocalBranchesChanged(); + repositoryWatcherListener.Received(1).RemoteBranchesChanged(); + } + finally + { + repositoryWatcher.Stop(); + } } } + finally + { + Logger.Trace("Ending ShouldDetectChangesToRemotes"); + } } [Test] public async Task ShouldDetectGitPull() { - await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); + Logger.Trace("Starting ShouldDetectGitPull"); - using (var repositoryWatcher = CreateRepositoryWatcher(TestRepoMasterCleanSynchronized)) + try { - var watcherAutoResetEvent = new RepositoryWatcherAutoResetEvent(); + await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false); - var repositoryWatcherListener = Substitute.For(); - repositoryWatcherListener.AttachListener(repositoryWatcher, watcherAutoResetEvent); + using (var repositoryWatcher = CreateRepositoryWatcher(TestRepoMasterCleanSynchronized)) + { + var watcherAutoResetEvent = new RepositoryWatcherAutoResetEvent(); - repositoryWatcher.Initialize(); - repositoryWatcher.Start(); - repositoryWatcher.Stop(); + var repositoryWatcherListener = Substitute.For(); + repositoryWatcherListener.AttachListener(repositoryWatcher, watcherAutoResetEvent); - try - { - Logger.Trace("Issuing Command"); + repositoryWatcher.Initialize(); + repositoryWatcher.Start(); + repositoryWatcher.Stop(); - await GitClient.Pull("origin", "master").StartAsAsync(); - await TaskManager.Wait(); + try + { + Logger.Trace("Issuing Command"); - Logger.Trace("Continue test"); + await GitClient.Pull("origin", "master").StartAsAsync(); + await TaskManager.Wait(); - repositoryWatcher.Start(); + Logger.Trace("Continue test"); - watcherAutoResetEvent.IndexChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); - watcherAutoResetEvent.RepositoryChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + repositoryWatcher.Start(); - repositoryWatcherListener.DidNotReceive().HeadChanged(); - repositoryWatcherListener.DidNotReceive().ConfigChanged(); - repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); - repositoryWatcherListener.Received(1).IndexChanged(); - repositoryWatcherListener.Received(1).RepositoryChanged(); - repositoryWatcherListener.Received(1).LocalBranchesChanged(); - repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); - } - finally - { - repositoryWatcher.Stop(); + watcherAutoResetEvent.IndexChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + watcherAutoResetEvent.RepositoryChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue(); + + repositoryWatcherListener.DidNotReceive().HeadChanged(); + repositoryWatcherListener.DidNotReceive().ConfigChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); + repositoryWatcherListener.Received(1).IndexChanged(); + repositoryWatcherListener.Received(1).RepositoryChanged(); + repositoryWatcherListener.Received(1).LocalBranchesChanged(); + repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); + } + finally + { + repositoryWatcher.Stop(); + } } } + finally + { + Logger.Trace("Ending ShouldDetectGitPull"); + } } [Test] public async Task ShouldDetectGitFetch() { - await Initialize(TestRepoMasterCleanUnsynchronized, initializeRepository: false); + Logger.Trace("Starting ShouldDetectGitFetch"); - using (var repositoryWatcher = CreateRepositoryWatcher(TestRepoMasterCleanUnsynchronized)) + try { - var watcherAutoResetEvent = new RepositoryWatcherAutoResetEvent(); - - var repositoryWatcherListener = Substitute.For(); - repositoryWatcherListener.AttachListener(repositoryWatcher, watcherAutoResetEvent, true); + await Initialize(TestRepoMasterCleanUnsynchronized, initializeRepository: false); - repositoryWatcher.Initialize(); - repositoryWatcher.Start(); - - try + using (var repositoryWatcher = CreateRepositoryWatcher(TestRepoMasterCleanUnsynchronized)) { - Logger.Trace("Issuing Command"); + var watcherAutoResetEvent = new RepositoryWatcherAutoResetEvent(); - await GitClient.Fetch("origin").StartAsAsync(); - await TaskManager.Wait(); + var repositoryWatcherListener = Substitute.For(); + repositoryWatcherListener.AttachListener(repositoryWatcher, watcherAutoResetEvent, true); - Logger.Trace("Continue test"); + repositoryWatcher.Initialize(); + repositoryWatcher.Start(); - repositoryWatcherListener.DidNotReceive().HeadChanged(); - repositoryWatcherListener.DidNotReceive().ConfigChanged(); - repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); - repositoryWatcherListener.DidNotReceive().IndexChanged(); - repositoryWatcherListener.DidNotReceive().RepositoryChanged(); - repositoryWatcherListener.DidNotReceive().LocalBranchesChanged(); - repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); - } - finally - { - repositoryWatcher.Stop(); + try + { + Logger.Trace("Issuing Command"); + + await GitClient.Fetch("origin").StartAsAsync(); + await TaskManager.Wait(); + + Logger.Trace("Continue test"); + + repositoryWatcherListener.DidNotReceive().HeadChanged(); + repositoryWatcherListener.DidNotReceive().ConfigChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryCommitted(); + repositoryWatcherListener.DidNotReceive().IndexChanged(); + repositoryWatcherListener.DidNotReceive().RepositoryChanged(); + repositoryWatcherListener.DidNotReceive().LocalBranchesChanged(); + repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged(); + } + finally + { + repositoryWatcher.Stop(); + } } } + finally + { + Logger.Trace("Ending ShouldDetectGitFetch"); + } } private RepositoryWatcher CreateRepositoryWatcher(NPath path) From 3c161395cab19dbffbe5ba80a96c753df97da2c1 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 22 Nov 2017 10:56:19 -0500 Subject: [PATCH 28/35] Setting RepositoryManagerTests and RepositoryWatcherTests to not run on AppVeyor --- src/tests/IntegrationTests/Events/RepositoryManagerTests.cs | 2 +- src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs index ec0aace9f..8cf724f89 100644 --- a/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs +++ b/src/tests/IntegrationTests/Events/RepositoryManagerTests.cs @@ -11,7 +11,7 @@ namespace IntegrationTests { - [TestFixture] + [TestFixture, Category("DoNotRunOnAppVeyor")] class RepositoryManagerTests : BaseGitEnvironmentTest { private RepositoryManagerEvents repositoryManagerEvents; diff --git a/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs b/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs index 652827ad9..28a0e615b 100644 --- a/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs +++ b/src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs @@ -9,7 +9,7 @@ namespace IntegrationTests { - [TestFixture] + [TestFixture, Category("DoNotRunOnAppVeyor")] class RepositoryWatcherTests : BaseGitEnvironmentTest { [Test] From c1e05c157af5ec0a9cc360734c8613b207f6a93b Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 22 Nov 2017 11:11:51 -0500 Subject: [PATCH 29/35] Removing this bleed events functionality --- .../BaseGitEnvironmentTest.cs | 22 ------------------- 1 file changed, 22 deletions(-) diff --git a/src/tests/IntegrationTests/BaseGitEnvironmentTest.cs b/src/tests/IntegrationTests/BaseGitEnvironmentTest.cs index a2add9431..bed96b74b 100644 --- a/src/tests/IntegrationTests/BaseGitEnvironmentTest.cs +++ b/src/tests/IntegrationTests/BaseGitEnvironmentTest.cs @@ -26,14 +26,6 @@ protected async Task Initialize(NPath repoPath, NPath environmentP Platform = new Platform(Environment); - Logger.Trace("Bleeding Events"); - BleedEvents(TestRepoMasterCleanUnsynchronized); - BleedEvents(TestRepoMasterCleanUnsynchronizedRussianLanguage); - BleedEvents(TestRepoMasterCleanSynchronized); - BleedEvents(TestRepoMasterDirtyUnsynchronized); - BleedEvents(TestRepoMasterTwoRemotes); - Logger.Trace("Bled Events"); - GitEnvironment = Platform.GitEnvironment; ProcessManager = new ProcessManager(Environment, GitEnvironment, TaskManager.Token); @@ -74,20 +66,6 @@ protected async Task Initialize(NPath repoPath, NPath environmentP return Environment; } - private void BleedEvents(NPath path) - { - using (var repositoryWatcher = new RepositoryWatcher(Platform, new RepositoryPathConfiguration(path), CancellationToken.None)) - { - repositoryWatcher.Initialize(); - repositoryWatcher.Start(); - while (repositoryWatcher.CheckAndProcessEvents() != 0) - { - Thread.Sleep(TimeSpan.FromSeconds(2)); - } - repositoryWatcher.Stop(); - } - } - public override void OnTearDown() { RepositoryManager?.Stop(); From 9bcbf094679c9cab2c266baa3b9b5b4f862fd7da Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 22 Nov 2017 11:17:41 -0500 Subject: [PATCH 30/35] Disable ConsoleLogAdapter in test output --- src/tests/IntegrationTests/SetUpFixture.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests/IntegrationTests/SetUpFixture.cs b/src/tests/IntegrationTests/SetUpFixture.cs index 62793030c..21c14f375 100644 --- a/src/tests/IntegrationTests/SetUpFixture.cs +++ b/src/tests/IntegrationTests/SetUpFixture.cs @@ -14,7 +14,7 @@ public void Setup() Logging.LogAdapter = new MultipleLogAdapter( new FileLogAdapter($"..\\{DateTime.UtcNow.ToString("yyyyMMddHHmmss")}-integration-tests.log") - , new ConsoleLogAdapter() + //, new ConsoleLogAdapter() ); } } From caf6dcc81b6a2713801afd9cb20039db48aa21bd Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 22 Nov 2017 11:31:04 -0500 Subject: [PATCH 31/35] Disabling detailed RepositoryWatcher output --- src/GitHub.Api/Events/RepositoryWatcher.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GitHub.Api/Events/RepositoryWatcher.cs b/src/GitHub.Api/Events/RepositoryWatcher.cs index 8dab5f5ec..cf7b4379a 100644 --- a/src/GitHub.Api/Events/RepositoryWatcher.cs +++ b/src/GitHub.Api/Events/RepositoryWatcher.cs @@ -163,7 +163,7 @@ private int ProcessEvents(Event[] fileEvents) break; } - Logger.Trace(fileEvent.Describe()); + //Logger.Trace(fileEvent.Describe()); var eventDirectory = new NPath(fileEvent.Directory); var fileA = eventDirectory.Combine(fileEvent.FileA); From 9bcd18e6a4ee8bbccb04febe57f2e787dcab4ec3 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 22 Nov 2017 15:32:17 -0500 Subject: [PATCH 32/35] The User object should not immediately force an update of user data --- src/GitHub.Api/Git/Repository.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/GitHub.Api/Git/Repository.cs b/src/GitHub.Api/Git/Repository.cs index 1d0de744a..501e680fa 100644 --- a/src/GitHub.Api/Git/Repository.cs +++ b/src/GitHub.Api/Git/Repository.cs @@ -607,7 +607,6 @@ public void Initialize(IGitClient client) Logger.Trace("Initialize"); gitClient = client; - UpdateUserAndEmail(); } public void SetNameAndEmail(string name, string email) From 7592d2450de6bcd5e3c51476336ca4a03587df61 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 22 Nov 2017 15:34:03 -0500 Subject: [PATCH 33/35] Being sure InvalidateData if LastUpdatedAt or LastVerifiedAt is called --- .../Editor/GitHub.Unity/ApplicationCache.cs | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/ApplicationCache.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/ApplicationCache.cs index 701f231f2..b61783ad6 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/ApplicationCache.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/ApplicationCache.cs @@ -132,8 +132,23 @@ protected ManagedCacheBase(bool invalidOnFirstRun) public void ValidateData() { - if (ApplicationCache.Instance.FirstRunAt > InitializedAt) + var initialized = ValidateInitialized(); + if (!initialized) { + if (DateTimeOffset.Now - LastUpdatedAt > DataTimeout) + { + Logger.Trace("Timeout Invalidation"); + InvalidateData(); + } + } + } + + private bool ValidateInitialized() + { + var notInitialized = ApplicationCache.Instance.FirstRunAt > InitializedAt; + if (notInitialized) + { + Logger.Trace("Initialized"); InitializedAt = DateTimeOffset.Now; Save(true); @@ -143,11 +158,8 @@ public void ValidateData() InvalidateData(); } } - else if (DateTimeOffset.Now - LastUpdatedAt > DataTimeout) - { - Logger.Trace("Timeout Invalidation"); - InvalidateData(); - } + + return notInitialized; } public void InvalidateData() @@ -189,6 +201,8 @@ public DateTimeOffset LastUpdatedAt { if (!lastUpdatedAtValue.HasValue) { + ValidateInitialized(); + DateTimeOffset result; if (DateTimeOffset.TryParseExact(LastUpdatedAtString, Constants.Iso8601Format, CultureInfo.InvariantCulture, DateTimeStyles.None, out result)) { @@ -215,6 +229,8 @@ public DateTimeOffset LastVerifiedAt { if (!lastVerifiedAtValue.HasValue) { + ValidateInitialized(); + DateTimeOffset result; if (DateTimeOffset.TryParseExact(LastVerifiedAtString, Constants.Iso8601Format, CultureInfo.InvariantCulture, DateTimeStyles.None, out result)) { From 2b571f87b9dbae968eacde2dccefb5e21c03005f Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 22 Nov 2017 15:34:33 -0500 Subject: [PATCH 34/35] Checking if RepositoryManager is null if cache events come in before initialization --- src/GitHub.Api/Git/Repository.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/GitHub.Api/Git/Repository.cs b/src/GitHub.Api/Git/Repository.cs index 501e680fa..adb749c5b 100644 --- a/src/GitHub.Api/Git/Repository.cs +++ b/src/GitHub.Api/Git/Repository.cs @@ -259,15 +259,15 @@ private void CacheContainer_OnCacheInvalidated(CacheType cacheType) break; case CacheType.GitLogCache: - repositoryManager.UpdateGitLog(); + repositoryManager?.UpdateGitLog(); break; case CacheType.GitStatusCache: - repositoryManager.UpdateGitStatus(); + repositoryManager?.UpdateGitStatus(); break; case CacheType.GitLocksCache: - repositoryManager.UpdateLocks(); + repositoryManager?.UpdateLocks(); break; case CacheType.GitUserCache: From f36b5a3924adde204f7c6e1620478e2c1ac1d789 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Mon, 27 Nov 2017 07:50:01 -0500 Subject: [PATCH 35/35] Changing funciton order --- src/GitHub.Api/Git/RepositoryManager.cs | 26 ++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/GitHub.Api/Git/RepositoryManager.cs b/src/GitHub.Api/Git/RepositoryManager.cs index 921ea3124..9094d626c 100644 --- a/src/GitHub.Api/Git/RepositoryManager.cs +++ b/src/GitHub.Api/Git/RepositoryManager.cs @@ -293,6 +293,19 @@ public void UpdateGitStatus() }).Start(); } + public void UpdateLocks() + { + var task = GitClient.ListLocks(false); + HookupHandlers(task, false, false); + task.Then((success, locks) => + { + if (success) + { + GitLocksUpdated?.Invoke(locks); + } + }).Start(); + } + private ITask HookupHandlers(ITask task, bool isExclusive, bool filesystemChangesExpected) { return new ActionTask(CancellationToken.None, () => { @@ -331,19 +344,6 @@ private ITask HookupHandlers(ITask task, bool isExclusive, bool filesys }); } - public void UpdateLocks() - { - var task = GitClient.ListLocks(false); - HookupHandlers(task, false, false); - task.Then((success, locks) => - { - if (success) - { - GitLocksUpdated?.Invoke(locks); - } - }).Start(); - } - private void SetupWatcher() { watcher.HeadChanged += WatcherOnHeadChanged;