Ejemplo n.º 1
0
        async Task <IPullRequestModel> PushAndCreatePR(IModelService modelService,
                                                       ILocalRepositoryModel sourceRepository, IRepositoryModel targetRepository,
                                                       IBranch sourceBranch, IBranch targetBranch,
                                                       string title, string body)
        {
            // PullRequestModel doesn't keep a reference to repo
            using (var repo = await Task.Run(() => gitService.GetRepository(sourceRepository.LocalPath)))
            {
                var remote = await gitClient.GetHttpRemote(repo, "origin");

                await gitClient.Push(repo, sourceBranch.Name, remote.Name);

                if (!repo.Branches[sourceBranch.Name].IsTracking)
                {
                    await gitClient.SetTrackingBranch(repo, sourceBranch.Name, remote.Name);
                }

                // delay things a bit to avoid a race between pushing a new branch and creating a PR on it
                if (!Splat.ModeDetector.Current.InUnitTestRunner().GetValueOrDefault())
                {
                    await Task.Delay(TimeSpan.FromSeconds(5));
                }

                var ret = await modelService.CreatePullRequest(sourceRepository, targetRepository, sourceBranch, targetBranch, title, body);

                await usageTracker.IncrementCounter(x => x.NumberOfUpstreamPullRequests);

                return(ret);
            }
        }