Exemplo n.º 1
0
        private async Task <PrModel> CreatePullRequest(int number, string title, string body, string[] userMentions)
        {
            var pr = new PrModel()
            {
                Number       = number,
                Title        = title,
                Body         = body,
                IsPR         = 1,
                UserMentions = string.Join(' ', userMentions),
                NumMentions  = userMentions.Length,
            };
            IReadOnlyList <PullRequestFile> prFiles = await _client.PullRequest.Files(_repoOwner, _repoName, number);

            if (prFiles.Count != 0)
            {
                string[] filePaths = prFiles.Select(x => x.FileName).ToArray();
                _diffHelper.ResetTo(filePaths);
                pr.Files          = _datasetHelper.FlattenIntoColumn(filePaths);
                pr.Filenames      = _datasetHelper.FlattenIntoColumn(_diffHelper.Filenames);
                pr.FileExtensions = _datasetHelper.FlattenIntoColumn(_diffHelper.Extensions);
                pr.Folders        = _datasetHelper.FlattenIntoColumn(_diffHelper.Folders);
                pr.FolderNames    = _datasetHelper.FlattenIntoColumn(_diffHelper.FolderNames);
            }
            pr.FileCount = prFiles.Count;
            return(pr);
        }
Exemplo n.º 2
0
 public static LabelSuggestion Predict(PrModel issue, ILogger logger, IModelHolder modelHolder)
 {
     if (modelHolder.UseIssuesForPrsToo)
     {
         return(Predict(issue, modelHolder.IssuePredEngine, logger));
     }
     return(Predict(issue, modelHolder.PrPredEngine, logger));
 }
Exemplo n.º 3
0
        public async Task PredictAndApplyLabelAsync(int number, string title, string body, GithubObjectType issueOrPr, ILogger logger)
        {
            if (_client == null)
            {
                await GitSetupAsync();
            }
            if (_regex == null)
            {
                _regex = new Regex(@"@[a-zA-Z0-9_//-]+");
            }
            var userMentions = _regex.Matches(body).Select(x => x.Value).ToArray();

            string label;

            if (issueOrPr == GithubObjectType.Issue)
            {
                IssueModel issue = CreateIssue(number, title, body, userMentions);
                label = Predictor.Predict(issue, logger, _threshold);
            }
            else
            {
                PrModel pr = await CreatePullRequest(number, title, body, userMentions);

                label = Predictor.Predict(pr, logger, _threshold);
            }

            Issue issueGithubVersion = await _client.Issue.Get(_repoOwner, _repoName, number);

            if (label != null && issueGithubVersion.Labels.Count == 0)
            {
                var issueUpdate = new IssueUpdate();
                issueUpdate.AddLabel(label);
                issueUpdate.Milestone = issueGithubVersion.Milestone?.Number; // The number of milestone associated with the issue.

                await _client.Issue.Update(_repoOwner, _repoName, number, issueUpdate);
            }
            else
            {
                logger.LogInformation($"! The Model is not able to assign the label to the {issueOrPr} {number} confidently.");
            }
        }