|
14 | 14 | using System.Reactive;
|
15 | 15 | using System.Collections.Generic;
|
16 | 16 | using LibGit2Sharp;
|
17 |
| -using PullRequest = Octokit.PullRequest; |
| 17 | +using PullRequest = Octokit.PullRequest; |
| 18 | +using System.Diagnostics; |
18 | 19 |
|
19 | 20 | namespace GitHub.Services
|
20 | 21 | {
|
@@ -167,29 +168,34 @@ public IObservable<Unit> SwitchToBranch(ILocalRepositoryModel repository, IPullR
|
167 | 168 | return Observable.Defer(async () =>
|
168 | 169 | {
|
169 | 170 | var repo = gitService.GetRepository(repository.LocalPath);
|
170 |
| - var branchName = GetLocalBranchesInternal(repository, repo, pullRequest).First(); |
| 171 | + var branchName = GetLocalBranchesInternal(repository, repo, pullRequest).FirstOrDefault(); |
171 | 172 |
|
172 |
| - await gitClient.Fetch(repo, "origin"); |
173 |
| - |
174 |
| - var branch = repo.Branches[branchName]; |
| 173 | + Debug.Assert(branchName != null, "PullRequestService.SwitchToBranch called but no local branch found."); |
175 | 174 |
|
176 |
| - if (branch == null) |
| 175 | + if (branchName != null) |
177 | 176 | {
|
178 |
| - var trackedBranchName = $"refs/remotes/origin/" + branchName; |
179 |
| - var trackedBranch = repo.Branches[trackedBranchName]; |
| 177 | + await gitClient.Fetch(repo, "origin"); |
180 | 178 |
|
181 |
| - if (trackedBranch != null) |
182 |
| - { |
183 |
| - branch = repo.CreateBranch(branchName, trackedBranch.Tip); |
184 |
| - await gitClient.SetTrackingBranch(repo, branchName, trackedBranchName); |
185 |
| - } |
186 |
| - else |
| 179 | + var branch = repo.Branches[branchName]; |
| 180 | + |
| 181 | + if (branch == null) |
187 | 182 | {
|
188 |
| - throw new InvalidOperationException($"Could not find branch '{trackedBranchName}'."); |
| 183 | + var trackedBranchName = $"refs/remotes/origin/" + branchName; |
| 184 | + var trackedBranch = repo.Branches[trackedBranchName]; |
| 185 | + |
| 186 | + if (trackedBranch != null) |
| 187 | + { |
| 188 | + branch = repo.CreateBranch(branchName, trackedBranch.Tip); |
| 189 | + await gitClient.SetTrackingBranch(repo, branchName, trackedBranchName); |
| 190 | + } |
| 191 | + else |
| 192 | + { |
| 193 | + throw new InvalidOperationException($"Could not find branch '{trackedBranchName}'."); |
| 194 | + } |
189 | 195 | }
|
190 |
| - } |
191 | 196 |
|
192 |
| - await gitClient.Checkout(repo, branchName); |
| 197 | + await gitClient.Checkout(repo, branchName); |
| 198 | + } |
193 | 199 |
|
194 | 200 | return Observable.Empty<Unit>();
|
195 | 201 | });
|
|
0 commit comments