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); }
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)); }
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."); } }