Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit c81e885

Browse files
Fixing the update after removing a remote when it is active
1 parent a4ceed1 commit c81e885

File tree

2 files changed

+88
-61
lines changed

2 files changed

+88
-61
lines changed

src/GitHub.Api/Git/RepositoryManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,6 @@ public void Start()
159159
Logger.Trace("Start");
160160

161161
UpdateConfigData();
162-
UpdateHead();
163162
LoadGitUser();
164163
watcher.Start();
165164
}
@@ -486,6 +485,7 @@ private void UpdateConfigData(bool resetConfig = false)
486485

487486
LoadBranchesFromConfig();
488487
LoadRemotesFromConfig();
488+
UpdateHead();
489489
}
490490

491491
private void LoadBranchesFromConfig()

src/tests/IntegrationTests/Events/RepositoryManagerTests.cs

Lines changed: 87 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -506,19 +506,53 @@ public async Task ShouldDetectChangesToRemotes()
506506

507507
var repositoryManagerListener = Substitute.For<IRepositoryManagerListener>();
508508
repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents);
509-
509+
510+
RepositoryManager.WaitForEvents();
511+
repositoryManagerEvents.WaitForNotBusy(2);
512+
513+
repositoryManagerListener.AssertDidNotReceiveAnyCalls();
514+
515+
Repository.Name.Should().Be("IOTestsRepo");
516+
Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git");
517+
Repository.Owner.Should().Be("EvilStanleyGoldman");
518+
Repository.LocalPath.Should().Be(TestRepoMasterCleanSynchronized);
519+
Repository.IsGitHub.Should().BeTrue();
520+
Repository.CurrentBranchName.Should().Be("master");
521+
Repository.CurrentBranch.HasValue.Should().BeTrue();
522+
Repository.CurrentBranch.Value.Name.Should().Be("master");
523+
Repository.CurrentRemote.HasValue.Should().BeTrue();
524+
Repository.CurrentRemote.Value.Name.Should().Be("origin");
525+
Repository.CurrentRemote.Value.Url.Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git");
526+
Repository.LocalBranches.Should().BeEquivalentTo(new[] {
527+
new GitBranch("master", "origin/master", true),
528+
new GitBranch("feature/document", "origin/feature/document", false),
529+
new GitBranch("feature/other-feature", "origin/feature/other-feature", false),
530+
});
531+
Repository.Remotes.Should().BeEquivalentTo(new GitRemote
532+
{
533+
Name = "origin",
534+
Url = "https://github.com/EvilStanleyGoldman/IOTestsRepo.git"
535+
});
536+
Repository.RemoteBranches.Should().BeEquivalentTo(new[] {
537+
new GitBranch("origin/master", "[None]", false),
538+
new GitBranch("origin/feature/document-2", "[None]", false),
539+
new GitBranch("origin/feature/other-feature", "[None]", false),
540+
});
541+
510542
await RepositoryManager.RemoteRemove("origin").StartAsAsync();
511543
await TaskManager.Wait();
544+
512545
RepositoryManager.WaitForEvents();
513546
repositoryManagerEvents.WaitForNotBusy();
547+
514548
repositoryManagerEvents.OnRemoteBranchListUpdated.WaitOne(TimeSpan.FromSeconds(1));
515549
repositoryManagerEvents.OnLocalBranchListUpdated.WaitOne(TimeSpan.FromSeconds(1));
516550

517551
repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool);
518552
repositoryManagerListener.DidNotReceive().OnStatusUpdated(Args.GitStatus);
519553
repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock);
520-
repositoryManagerListener.DidNotReceive().OnCurrentBranchUpdated(Arg.Any<ConfigBranch?>());
521-
repositoryManagerListener.DidNotReceive().OnCurrentRemoteUpdated(Arg.Any<ConfigRemote?>());
554+
repositoryManagerListener.Received().OnCurrentBranchUpdated(Arg.Any<ConfigBranch?>());
555+
repositoryManagerListener.Received().OnCurrentRemoteUpdated(Arg.Any<ConfigRemote?>());
522556
repositoryManagerListener.Received().OnLocalBranchListUpdated(Arg.Any<Dictionary<string, ConfigBranch>>());
523557
repositoryManagerListener.Received().OnRemoteBranchListUpdated(Arg.Any<Dictionary<string, ConfigRemote>>(), Arg.Any<Dictionary<string, Dictionary<string, ConfigBranch>>>());
524558
repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String);
@@ -527,85 +561,78 @@ public async Task ShouldDetectChangesToRemotes()
527561
repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String);
528562
repositoryManagerListener.Received().OnRemoteBranchRemoved(Args.String, Args.String);
529563

564+
Repository.Name.Should().Be("IOTestsRepo_master_clean_sync");
565+
Repository.CloneUrl.Should().BeNull();
566+
Repository.Owner.Should().BeNull();
567+
Repository.LocalPath.Should().Be(TestRepoMasterCleanSynchronized);
568+
Repository.IsGitHub.Should().BeFalse();
569+
Repository.CurrentBranchName.Should().Be("master");
570+
Repository.CurrentBranch.HasValue.Should().BeTrue();
571+
Repository.CurrentBranch.Value.Name.Should().Be("master");
572+
Repository.CurrentRemote.HasValue.Should().BeFalse();
573+
Repository.Remotes.Should().BeEquivalentTo();
574+
Repository.RemoteBranches.Should().BeEmpty();
575+
576+
repositoryManagerListener.ClearReceivedCalls();
577+
repositoryManagerEvents.Reset();
578+
579+
await RepositoryManager.RemoteAdd("origin", "https://github.com/EvilShana/IOTestsRepo.git").StartAsAsync();
580+
await TaskManager.Wait();
581+
RepositoryManager.WaitForEvents();
582+
repositoryManagerEvents.WaitForNotBusy();
583+
repositoryManagerEvents.OnRemoteBranchListUpdated.WaitOne(TimeSpan.FromSeconds(1));
584+
repositoryManagerEvents.OnLocalBranchListUpdated.WaitOne(TimeSpan.FromSeconds(1));
585+
586+
repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool);
587+
repositoryManagerListener.DidNotReceive().OnStatusUpdated(Args.GitStatus);
588+
repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock);
589+
repositoryManagerListener.Received().OnCurrentBranchUpdated(Arg.Any<ConfigBranch?>());
590+
repositoryManagerListener.Received().OnCurrentRemoteUpdated(Arg.Any<ConfigRemote?>());
591+
repositoryManagerListener.Received().OnLocalBranchListUpdated(Arg.Any<Dictionary<string, ConfigBranch>>());
592+
repositoryManagerListener.Received().OnRemoteBranchListUpdated(Arg.Any<Dictionary<string, ConfigRemote>>(), Arg.Any<Dictionary<string, Dictionary<string, ConfigBranch>>>());
593+
repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String);
594+
repositoryManagerListener.DidNotReceive().OnLocalBranchAdded(Args.String);
595+
repositoryManagerListener.DidNotReceive().OnLocalBranchRemoved(Args.String);
596+
repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String);
597+
repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String);
598+
530599
Repository.Name.Should().Be("IOTestsRepo");
531-
Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git");
532-
Repository.Owner.Should().Be("EvilStanleyGoldman");
600+
Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilShana/IOTestsRepo.git");
601+
Repository.Owner.Should().Be("EvilShana");
533602
Repository.LocalPath.Should().Be(TestRepoMasterCleanSynchronized);
534603
Repository.IsGitHub.Should().BeTrue();
535604
Repository.CurrentBranchName.Should().Be("master");
536605
Repository.CurrentBranch.HasValue.Should().BeTrue();
537606
Repository.CurrentBranch.Value.Name.Should().Be("master");
538607
Repository.CurrentRemote.HasValue.Should().BeTrue();
539608
Repository.CurrentRemote.Value.Name.Should().Be("origin");
540-
Repository.CurrentRemote.Value.Url.Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git");
609+
Repository.CurrentRemote.Value.Url.Should().Be("https://github.com/EvilShana/IOTestsRepo.git");
541610
Repository.LocalBranches.Should().BeEquivalentTo(new[] {
542611
new GitBranch("master", "[None]", true),
543612
new GitBranch("feature/document", "[None]", false),
544613
new GitBranch("feature/other-feature", "[None]", false),
545614
});
546-
Repository.Remotes.Should().BeEquivalentTo();
615+
Repository.Remotes.Should().BeEquivalentTo(new GitRemote
616+
{
617+
Name = "origin",
618+
Url = "https://github.com/EvilShana/IOTestsRepo.git"
619+
});
547620
Repository.RemoteBranches.Should().BeEmpty();
548-
549-
repositoryManagerListener.ClearReceivedCalls();
550-
repositoryManagerEvents.Reset();
551-
552-
// await RepositoryManager.RemoteAdd("origin", "https://github.com/EvilShana/IOTestsRepo.git").StartAsAsync();
553-
// await TaskManager.Wait();
554-
// RepositoryManager.WaitForEvents();
555-
// repositoryManagerEvents.WaitForNotBusy();
556-
// repositoryManagerEvents.OnRemoteBranchListUpdated.WaitOne(TimeSpan.FromSeconds(1));
557-
// repositoryManagerEvents.OnLocalBranchListUpdated.WaitOne(TimeSpan.FromSeconds(1));
558-
//
559-
// repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool);
560-
// repositoryManagerListener.DidNotReceive().OnStatusUpdated(Args.GitStatus);
561-
// repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock);
562-
// repositoryManagerListener.DidNotReceive().OnCurrentBranchUpdated(Arg.Any<ConfigBranch?>());
563-
// repositoryManagerListener.DidNotReceive().OnCurrentRemoteUpdated(Arg.Any<ConfigRemote?>());
564-
// repositoryManagerListener.Received().OnLocalBranchListUpdated(Arg.Any<Dictionary<string, ConfigBranch>>());
565-
// repositoryManagerListener.Received().OnRemoteBranchListUpdated(Arg.Any<Dictionary<string, ConfigRemote>>(), Arg.Any<Dictionary<string, Dictionary<string, ConfigBranch>>>());
566-
// repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String);
567-
// repositoryManagerListener.DidNotReceive().OnLocalBranchAdded(Args.String);
568-
// repositoryManagerListener.DidNotReceive().OnLocalBranchRemoved(Args.String);
569-
// repositoryManagerListener.DidNotReceive().OnRemoteBranchAdded(Args.String, Args.String);
570-
// repositoryManagerListener.DidNotReceive().OnRemoteBranchRemoved(Args.String, Args.String);
571-
//
572-
// Repository.Name.Should().Be("IOTestsRepo");
573-
// Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git");
574-
// Repository.Owner.Should().Be("EvilStanleyGoldman");
575-
// Repository.LocalPath.Should().Be(TestRepoMasterCleanSynchronized);
576-
// Repository.IsGitHub.Should().BeTrue();
577-
// Repository.CurrentBranchName.Should().Be("master");
578-
// Repository.CurrentBranch.HasValue.Should().BeTrue();
579-
// Repository.CurrentBranch.Value.Name.Should().Be("master");
580-
// Repository.CurrentBranch.Value.Remote.HasValue.Should().BeTrue();
581-
// Repository.CurrentBranch.Value.Remote.Value.Name.Should().Be("origin");
582-
// Repository.CurrentBranch.Value.Remote.Value.Url.Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git");
583-
// Repository.CurrentRemote.HasValue.Should().BeTrue();
584-
// Repository.CurrentRemote.Value.Name.Should().Be("origin");
585-
// Repository.CurrentRemote.Value.Url.Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git");
586-
// Repository.LocalBranches.Should().BeEquivalentTo(new[] {
587-
// new GitBranch("master", "[None]", true),
588-
// new GitBranch("feature/document", "[None]", false),
589-
// new GitBranch("feature/other-feature", "[None]", false),
590-
// });
591-
// Repository.Remotes.Should().BeEquivalentTo(new GitRemote
592-
// {
593-
// Name = "origin",
594-
// Url = "https://github.com/EvilShana/IOTestsRepo.git"
595-
// });
596-
// Repository.RemoteBranches.Should().BeEmpty();
597621
}
598622

599623
[Test]
600624
public async Task ShouldDetectChangesToRemotesWhenSwitchingBranches()
601625
{
602-
var expectedCloneUrl = "https://github.com/EvilStanleyGoldman/IOTestsRepo.git";
603-
604626
await Initialize(TestRepoMasterTwoRemotes);
605627

606628
var repositoryManagerListener = Substitute.For<IRepositoryManagerListener>();
607629
repositoryManagerListener.AttachListener(RepositoryManager, repositoryManagerEvents);
608630

631+
RepositoryManager.WaitForEvents();
632+
repositoryManagerEvents.WaitForNotBusy(2);
633+
634+
repositoryManagerListener.AssertDidNotReceiveAnyCalls();
635+
609636
Repository.Name.Should().Be("IOTestsRepo");
610637
Repository.CloneUrl.ToString().Should().Be("https://github.com/EvilStanleyGoldman/IOTestsRepo.git");
611638
Repository.Owner.Should().Be("EvilStanleyGoldman");
@@ -650,8 +677,8 @@ await RepositoryManager.CreateBranch("branch2", "another/master")
650677
repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool);
651678
repositoryManagerListener.DidNotReceive().OnStatusUpdated(Args.GitStatus);
652679
repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock);
653-
repositoryManagerListener.DidNotReceive().OnCurrentBranchUpdated(Arg.Any<ConfigBranch?>());
654-
repositoryManagerListener.DidNotReceive().OnCurrentRemoteUpdated(Arg.Any<ConfigRemote?>());
680+
repositoryManagerListener.Received().OnCurrentBranchUpdated(Arg.Any<ConfigBranch?>());
681+
repositoryManagerListener.Received().OnCurrentRemoteUpdated(Arg.Any<ConfigRemote?>());
655682
repositoryManagerListener.Received().OnLocalBranchListUpdated(Arg.Any<Dictionary<string, ConfigBranch>>());
656683
repositoryManagerListener.Received().OnRemoteBranchListUpdated(Arg.Any<Dictionary<string, ConfigRemote>>(), Arg.Any<Dictionary<string, Dictionary<string, ConfigBranch>>>());
657684
repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String);

0 commit comments

Comments
 (0)