Advertisement
Guest User

Untitled

a guest
Sep 18th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.68 KB | None | 0 0
  1. /**
  2. * Create Subtasks from TODO
  3. * Just add a TODO line in the issue description like this TODO @someone Android Bug: Summary of the new issue
  4. * Syntax: TODO <Assignee> <Type> <Subsystem> <Priority>: <summary>
  5. *
  6. */
  7.  
  8. var entities = require('@jetbrains/youtrack-scripting-api/entities');
  9.  
  10. exports.rule = entities.Issue.onChange({
  11. title: 'Create Subtasks from TODO',
  12. guard: function(ctx) {
  13. return ctx.issue.isChanged('description'); // optimize blob (description) read
  14. },
  15. action: function(ctx) {
  16. var issue = ctx.issue;
  17.  
  18. var description = issue.description;
  19. if (!description) {
  20. return;
  21. }
  22. console.log(description)
  23. var si = 0;
  24. var td = 0;
  25. var li = si-1;
  26. if( description.indexOf("TODO") == 0){
  27. description = "List:\n" + description;
  28. issue.description = description;
  29. }
  30. while (td !== -1) {
  31. td = description.indexOf("TODO", si);
  32. li = issue.description.indexOf("TODO", li+1);
  33. if(li<=0) li = issue.description.length;
  34. si = td+1;
  35. var co = description.indexOf(":", td);
  36. var nl = description.indexOf("\n", td);
  37. if (nl>0 && nl<co) continue;
  38. var pml = co - td-4;
  39. if (pml < 0){
  40. break;
  41. }
  42. var pms = description.substr(td+4, pml);
  43. var nl = description.indexOf("\n", co);
  44. if(nl==-1) nl = description.length;
  45. var ml = nl-co-1;
  46. if(ml<=0) break;
  47. var ms = description.substr(co+1, ml);
  48. flds = ["Subsystem", "Type", "Priority", "Assignee"];
  49. vs = {}
  50. for(fll = 0; fll < flds.length; fll++){
  51. fld = flds[fll];
  52. var ss = findFieldValuesInString(issue.project.fields.find(e => e.name == fld), pms);
  53. var vv = issue.fields[fld];
  54. if(ss !== null && ss.length > 0){
  55. if(ss.length==1)
  56. vv =ss[0];
  57. }
  58. vs[fld] = vv;
  59. }
  60. var newIssue = new entities.Issue(ctx.currentUser, issue.project,
  61. ms);
  62. for(fll = 0; fll < flds.length; fll++){
  63. fld = flds[fll];
  64. newIssue.fields[fld] = vs[fld];
  65. }
  66. issue.description = issue.description.substr(0, li) + description.substr(td).replace("TODO", newIssue.id);
  67. newIssue.links['subtask of'].add(issue);
  68. console.log(newIssue);
  69. }
  70. },
  71. requirements: {
  72. // TODO: add requirements
  73. }
  74. });
  75.  
  76. function findFieldValuesInString(fld, msg) {
  77. var values = [];
  78. values = fld.values;
  79. fv = [];
  80. e = values.entries();
  81. for (i = 0; i < values.size; i++) {
  82. var vale = e.next().value;
  83. var vname = vale.name;
  84. if(vname === undefined) vname = vale.login;
  85. if(vname === undefined) continue;
  86. if (msg.toLowerCase().includes(vname.toLowerCase())){
  87. fv.push(vale);
  88. }
  89. }
  90. return fv;
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement