Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Create Subtasks from TODO
- * Just add a TODO line in the issue description like this TODO @someone Android Bug: Summary of the new issue
- * Syntax: TODO <Assignee> <Type> <Subsystem> <Priority>: <summary>
- *
- */
- var entities = require('@jetbrains/youtrack-scripting-api/entities');
- exports.rule = entities.Issue.onChange({
- title: 'Create Subtasks from TODO',
- guard: function(ctx) {
- return ctx.issue.isChanged('description'); // optimize blob (description) read
- },
- action: function(ctx) {
- var issue = ctx.issue;
- var description = issue.description;
- if (!description) {
- return;
- }
- console.log(description)
- var si = 0;
- var td = 0;
- var li = si-1;
- if( description.indexOf("TODO") == 0){
- description = "List:\n" + description;
- issue.description = description;
- }
- while (td !== -1) {
- td = description.indexOf("TODO", si);
- li = issue.description.indexOf("TODO", li+1);
- if(li<=0) li = issue.description.length;
- si = td+1;
- var co = description.indexOf(":", td);
- var nl = description.indexOf("\n", td);
- if (nl>0 && nl<co) continue;
- var pml = co - td-4;
- if (pml < 0){
- break;
- }
- var pms = description.substr(td+4, pml);
- var nl = description.indexOf("\n", co);
- if(nl==-1) nl = description.length;
- var ml = nl-co-1;
- if(ml<=0) break;
- var ms = description.substr(co+1, ml);
- flds = ["Subsystem", "Type", "Priority", "Assignee"];
- vs = {}
- for(fll = 0; fll < flds.length; fll++){
- fld = flds[fll];
- var ss = findFieldValuesInString(issue.project.fields.find(e => e.name == fld), pms);
- var vv = issue.fields[fld];
- if(ss !== null && ss.length > 0){
- if(ss.length==1)
- vv =ss[0];
- }
- vs[fld] = vv;
- }
- var newIssue = new entities.Issue(ctx.currentUser, issue.project,
- ms);
- for(fll = 0; fll < flds.length; fll++){
- fld = flds[fll];
- newIssue.fields[fld] = vs[fld];
- }
- issue.description = issue.description.substr(0, li) + description.substr(td).replace("TODO", newIssue.id);
- newIssue.links['subtask of'].add(issue);
- console.log(newIssue);
- }
- },
- requirements: {
- // TODO: add requirements
- }
- });
- function findFieldValuesInString(fld, msg) {
- var values = [];
- values = fld.values;
- fv = [];
- e = values.entries();
- for (i = 0; i < values.size; i++) {
- var vale = e.next().value;
- var vname = vale.name;
- if(vname === undefined) vname = vale.login;
- if(vname === undefined) continue;
- if (msg.toLowerCase().includes(vname.toLowerCase())){
- fv.push(vale);
- }
- }
- return fv;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement