Advertisement
Guest User

Untitled

a guest
Jun 30th, 2016
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.34 KB | None | 0 0
  1. // This is the built-in review completion condition that
  2. // Reviewable uses by default.
  3.  
  4. // It checks that all files have been reviewed by at least one
  5. // user and that all discussions have been resolved. All the
  6. // information about the current review is supplied in a
  7. // predefined `review` variable that will look like the JSON
  8. // structure on the right. You can edit it here for testing
  9. // how the code will behave in different scenarios.
  10.  
  11. // You can load other examples from the dropdown menu above.
  12.  
  13. let reasons = []; // pieces of the status description
  14. let shortReasons = []; // pieces of the short status desc.
  15. const summary = review.summary; // shortcut to summary
  16.  
  17. const completed =
  18. !summary.numUnresolvedDiscussions &&
  19. !summary.numUnreviewedFiles;
  20.  
  21. if (summary.numUnreviewedFiles) {
  22. reasons.push(
  23. (summary.numFiles - summary.numUnreviewedFiles) +
  24. ' of ' + summary.numFiles + ' files reviewed');
  25. shortReasons.push(
  26. summary.numUnreviewedFiles + ' file' +
  27. (summary.numUnreviewedFiles > 1 ? 's' : '')
  28. );
  29. } else {
  30. reasons.push('all files reviewed');
  31. }
  32.  
  33. if (summary.numUnresolvedDiscussions) {
  34. reasons.push(
  35. summary.numUnresolvedDiscussions +
  36. ' unresolved discussion' +
  37. (summary.numUnresolvedDiscussions > 1 ? 's' : ''));
  38. shortReasons.push(
  39. summary.numUnresolvedDiscussions + ' discussion' +
  40. (summary.numUnresolvedDiscussions > 1 ? 's' : '')
  41. );
  42. } else {
  43. reasons.push('all discussions resolved');
  44. }
  45.  
  46. let discussionBlockers = _(review.discussions)
  47. .where({resolved: false})
  48. .pluck('participants')
  49. .flatten()
  50. .where({resolved: false})
  51. .map(user => _.pick(user, 'username'))
  52. .value();
  53.  
  54. let fileBlockers = _(review.files)
  55. .filter(file => ​_.isEmpty(_​.last(file.revisions).reviewers))
  56. .map(file => _(file.revisions).findLast(
  57. rev => !_.isEmpty(rev.reviewers)))
  58. .compact()
  59. .pluck('reviewers')
  60. .flatten()
  61. .value();
  62.  
  63. if (!completed && _.some(fileBlockers, user => !user)) {
  64. fileBlockers =
  65. fileBlockers.concat(review.pullRequest.assignees);
  66. }
  67.  
  68. let shortDescription;
  69. if (completed) {
  70. shortDescription =
  71. summary.numFiles + ' file' +
  72. (summary.numFiles > 1 ? 's' : '') + ' reviewed';
  73. } else {
  74. shortDescription = shortReasons.join(', ') + ' left';
  75. }
  76.  
  77. return {
  78. completed,
  79. description: reasons.join(', '),
  80. shortDescription,
  81. pendingReviewers:
  82. _.uniq(fileBlockers.concat(discussionBlockers), 'username')
  83. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement