Как я могу узнать время одобрения запроса на внесение изменений?

Вопрос или проблема

Я использую ScriptRunner для соединения с BitBucket, и мой BitBucket – это Data center.
Я написал слушателя для автоматического действия, когда pull-запрос объединяется, вот так

PullRequestMergedEvent pullRequestMergedEvent = event
def pullRequest = pullRequestMergedEvent.getPullRequest()
for (int i = 0 ; i < pullRequest.getReviewers().size() ; i++) {
def getReviewers = pullRequest.getReviewers()
    log.warn("getReviewers=${getReviewers}")
    def getUser = pullRequest.getReviewers().getAt(i).getUser() 
    log.warn("getUser=${getUser}")
    def commitDate = pullRequest.getReviewers().getAt(i).getLastReviewedCommit()
    log.warn("commitDate=${commitDate}")
}

И в логах мне показывается:

pullRequest.getReviewers().size() : 1
getReviewers=[InternalPullRequestParticipant{lastReviewedCommit=a52b5014247ae31d7b10ebc962315d630bb20dfe, role=REVIEWER, status=APPROVED, user=InternalNormalUser{id=3, username=admin}}]
getUser=InternalNormalUser{id=3, username=admin}
lastReviewedCommit=a52b5014247ae31d7b10ebc962315d630bb20dfe

Как я могу получить дату создания этого коммита (lastReviewedCommit) в формате "yyyy-MM-dd'T'HH:mm:ss'Z'"?

Мы можем использовать метод форматирования с необходимым форматом

Добавьте следующие 2 строки

def formattedDate = commitDate.format("yyyy-MM-dd'T'HH:mm:ss'Z'")
log.warn("formattedDate=${formattedDate}")

Правка Если вышеуказанное решение не работает, как предложил один из участников в комментарии ниже, тогда мы можем вызвать команду, чтобы получить детали коммита в формате ISO
git show -s --format=%ci ${commitHash}

для этого мы можем создать вспомогательную функцию

def getCommitDate(String commitHash) {
    def command = "git show -s --format=%ci ${commitHash}"
    def process = command.execute()
    process.waitFor()

    if (process.exitValue() == 0) {
        def commitDate = process.in.text.trim()
        return commitDate
    } else {
        log.warn("Ошибка при выполнении git команды: ${process.err.text}")
        return null
    }
}

и вызвать этот метод, чтобы получить commitDate
def commitDate = getCommitDate(lastReviewedCommit)

Ответ или решение

Для получения времени одобрения пул-реквеста в Bitbucket Data Center с использованием ScriptRunner, можно использовать два основных подхода: извлечение информации о дате коммита непосредственно из API Bitbucket и выполнение команды Git для получения информации о дате коммита. Ниже приведено пошаговое описание каждого подхода.

1. Извлечение даты через API Bitbucket

Для начала следует правильно обработать объект commitDate, получаемый от рецензента. Следующий код позволит вам извлечь и отформатировать дату одобрения в нужном формате "yyyy-MM-dd’T’HH:mm:ss’Z’":

PullRequestMergedEvent pullRequestMergedEvent = event;
def pullRequest = pullRequestMergedEvent.getPullRequest();
for (int i = 0; i < pullRequest.getReviewers().size(); i++) {
    def getReviewers = pullRequest.getReviewers();
    log.warn("getReviewers=${getReviewers}");
    def getUser = pullRequest.getReviewers().getAt(i).getUser();
    log.warn("getUser=${getUser}");
    def commitDate = pullRequest.getReviewers().getAt(i).getLastReviewedCommit();

    // Форматирование даты
    def formattedDate = commitDate.format("yyyy-MM-dd'T'HH:mm:ss'Z'");
    log.warn("formattedDate=${formattedDate}");
}

Если метод форматирования не сработает, вы можете попробовать другой подход.

2. Выполнение команды Git для получения информации о дате коммита

Если API не предоставляет необходимую информацию о дате, можно использовать команду Git для извлечения данных. Для этого создайте вспомогательную функцию, которая будет выполнять команду git show:

def getCommitDate(String commitHash) {
    def command = "git show -s --format=%ci ${commitHash}";
    def process = command.execute();
    process.waitFor();

    if (process.exitValue() == 0) {
        def commitDate = process.in.text.trim();
        return commitDate;
    } else {
        log.warn("Ошибка при выполнении git-команды: ${process.err.text}");
        return null;
    }
}

После этого можно вызвать данную функцию, передав хеш коммита, чтобы получить дату:

def commitDate = getCommitDate(lastReviewedCommit);
log.warn("commitDate=${commitDate}");

Заключение

С помощью вышеописанных методов вы сможете получить время одобрения пул-реквеста в формате "yyyy-MM-dd’T’HH:mm:ss’Z’". Выбирайте подходящий метод в зависимости от того, какая информация доступна из API Bitbucket и вашего окружения. Также важно учитывать, что для выполнения команды Git ваш скрипт должен быть выполнен в среде, где Git установлен и доступен.

Если у вас возникают какие-либо сложности с реализацией, всегда полезно консультиоваться в сообществе разработчиков или задать вопрос в специализированных форумах.

Оцените материал
Добавить комментарий

Капча загружается...