|
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