Я пытаюсь написать функцию JQL, которая возвращает список версий для сравнения. У нас есть номер 4 di git в качестве технической версии, которая обновляется циклично. Мне нужно найти все проблемы, исправленные после заданного номера (который в настоящее время установлен) и нового номера, который будет новой установленной версией.
Я использую мой плагин Groovy (который бесплатно) в JIRA Server 8.7.1.
Сценарий называется releaseRange
Мой код не выдает результат, который я ищу (ноль результатов), и я не знаю, почему. Проверка работоспособности работает, я получаю предупреждения, если проверка не удалась.
import com.atlassian.jira.JiraDataType
import com.atlassian.jira.JiraDataTypes
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.project.version.VersionManager
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.search.SearchProvider
import com.atlassian.jira.issue.search.SearchQuery
import com.atlassian.jira.jql.operand.QueryLiteral
import com.atlassian.jira.jql.query.QueryCreationContext
import com.atlassian.jira.jql.validator.NumberOfArgumentsValidator
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.util.MessageSet
import com.atlassian.jira.util.MessageSetImpl
import com.atlassian.query.clause.TerminalClause
import com.atlassian.query.operand.FunctionOperand
import ru.mail.jira.plugins.groovy.api.jql.ScriptedJqlValuesFunction
class ReleaseRange implements ScriptedJqlValuesFunction {
@Override
public JiraDataType getDataType() {
return JiraDataTypes.VERSION;
}
@Override
public int getMinimumNumberOfExpectedArguments() {
return 2;
}
@Override
public MessageSet validate(ApplicationUser searcher, FunctionOperand operand, TerminalClause terminalClause) {
def i18n = ComponentAccessor.getI18nHelperFactory().getInstance(searcher)
def numberValidMessage = new NumberOfArgumentsValidator(2i, i18n).validate(operand);
if (numberValidMessage.hasAnyErrors()) {
return numberValidMessage
}
def messageSet = new MessageSetImpl();
def from, until;
try {
from = operand.getArgs().get(0).toInteger();
} catch (any) {
messageSet.addErrorMessage("no valid technical release number:${operand.getArgs().get(0)}");
messageSet.addErrorMessage("${any}");
}
try {
until = operand.getArgs().get(1).toInteger();
} catch (any) {
messageSet.addErrorMessage("no valid technical release number:${operand.getArgs().get(1)}");
messageSet.addErrorMessage("${any}");
}
if (from >= until) {
messageSet.addErrorMessage("from version needs to be less than until version");
}
return messageSet;
}
List<QueryLiteral> getValues(QueryCreationContext queryCreationContext, FunctionOperand functionOperand, TerminalClause terminalClause) {
def versionManager = ComponentAccessor.getVersionManager();
def List<QueryLiteral> literals = new LinkedList<>();
def from = functionOperand.getArgs().get(0).toInteger();
def until = functionOperand.getArgs().get(1).toInteger();
while (from < until) {
from++;
literals << new QueryLiteral(functionOperand, versionManager.getVersion(10800, from.toString()).getId().toLong());
}
return literals;
}
}
Запрос
fixVersion in releaseRange(2279, 2291)
принят, но не дает никакого результата.