Как я могу обновить записи bugzilla от GitHub? - PullRequest
2 голосов
/ 15 июля 2011

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

Обычно мы добавляем номер ошибки в виде xxxx к сообщению о фиксации.

Мой текущий план состоял в том, чтобы использовать скрипт email_in.pl, который поставляется вместе с Bugzilla, и перехватить сообщение после фиксации на github. Хук электронной почты отправляет полезную нагрузку с подробной информацией о каждом коммите. Я мог бы разобрать, что перенаправить его на скрипт email_in.pl. Это лучший подход? Никто еще не сделал этого?

Любая помощь / советы / ссылки будут оценены.

1 Ответ

1 голос
/ 17 июля 2011

Поскольку у меня уже настроен email_in.pl, я решил написать небольшой скрипт, который будет анализировать полезную нагрузку URL-адреса после получения и отправлять ее в виде сообщения электронной почты в bugzilla.Таким образом, хук после получения будет попадать на URL, который выполняет следующие действия:

<?php
$payload = json_decode($_REQUEST['payload']);

if ($payload) {
    // assumes you want to process all commits (we only commit to the master branch)
    // but you may want to add some other conditionals above.
    $commits = $payload->commits;

    // there may be many commits per payload
    foreach ($commits as $commit) {
       $message = $commit->message;
       preg_match('/^(\*(\d+)\*)(.*)/i', $message, $matches);
       // The commit message must match the above regex
       // i.e. *1234* commit message
       if ( !(is_array($matches) && count($matches) == 4) )
          continue;

        $bugNumber = $matches[2];
        $comment = trim($matches[3]);
        $url = $commit->url;

        // get the author info
        $author = $commit->author;
        $authorName = $author->name;
        // assumes github email address exists in bugzilla.
        $authorEmail = $author->email;

        // construct the email
        $subject = "[Bug $bugNumber]";
        $body = "$comment\n$url";
        $header = "From: $authorName <$authorEmail>";
        // $bugzillaEmail = 'your@bugzilla.email
        mail($bugzillaEmail, $subject, $body, $header);
}
?>
...