2008-12-04 6 views
2

Наш процесс разработки очень автоматизирован с использованием сценариев bash и php (включая скрипты крюка subversion). Эти сценарии делают ряд вещей для интеграции с нашей установкой Bugzilla 3.0.Как я могу обновить ошибки Bugzilla из сценариев bash и php?

Но текущий подход к интеграции - это куча SQL-запросов, которые напрямую обновляют базу данных bugzilla, что, очевидно, имеет ряд недостатков, в том числе заставляя меня нервничать относительно обновления до 3.2 в случае изменения схемы базы данных!

Например, чтобы добавить комментарий к ошибке, я делаю INSERT в таблице longdescs.

Так что мой (немного многословно) вопрос:

  • я должен использовать Bugzilla WebServices (и если да, то есть ли хорошая документация, кроме API Docs Bugzilla, которые не получают меня для быстрой скорости)
  • или, должен ли я использовать какой-либо другой API Bugzilla (прямые вызовы perl?) - и, опять же, есть ли приличные doco на этом?
  • или я должен просто продолжать делать то, что я делаю (прямые вызовы SQL), потому что БД не меняется, что-то и «делает работу»

ответ

3

В соответствии с API Bugzilla WebServices, некоторые необходимых функций (например, изменение статуса ошибки) пока недоступны, поэтому на данный момент наиболее подходящими являются прямые вызовы SQL.

Схема базы данных существенно не изменилась между версиями 3.0 и 3.2, поэтому это практический путь вперед.

2

FYI, в дистрибутиве Bugzilla 3.2, есть файл contrib/bz_webservice_demo.pl, целью которого является «показать, как разговаривать с Bugzilla через XMLRPC».

0

Будьте осторожны! Некоторые изменения в базе данных также подразумевают другие изменения. Добавление комментария к ошибке путем добавления строки к работам longdescs, но вы также должны обновлять delta_ts в табличных ошибках.

До тех пор пока не будут доступны веб-сервисы, вот что я хотел бы сделать: выполнить действие с помощью пользовательского интерфейса, который вы хотите сделать из оболочки. (Предположим, что MySQL). Посмотрите на двоичный журнал для базы данных, используя «mysqlbinlog», и вы увидите, какие утверждения Bugzilla обычно выполняет при выполнении чего-либо.

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

У Bugzilla есть несколько тонких зависимостей в базе данных, которые вы должны уважать, или вы, вероятно, получите неожиданные результаты.