Difference between revisions of "Bugzilla4Intranet"

From Wiki4Intranet
Jump to: navigation, search
 
(14 intermediate revisions by 3 users not shown)
Line 15: Line 15:
 
Bugzilla4Intranet — форк версии 3.6.4. Это не самая новая версия Bugzilla. Что это означает на данный момент:
 
Bugzilla4Intranet — форк версии 3.6.4. Это не самая новая версия Bugzilla. Что это означает на данный момент:
 
* <s>Пока что не поддерживается</s> обновление с новых версий Bugzilla до Bugzilla4Intranet. '''UPDATE:''' Уже поддерживается (в ветке 'beta'), схема БД совместима. Какие-то мелкие баги всё ещё возможны, но в целом, как минимум на MySQL, всё должно работать.
 
* <s>Пока что не поддерживается</s> обновление с новых версий Bugzilla до Bugzilla4Intranet. '''UPDATE:''' Уже поддерживается (в ветке 'beta'), схема БД совместима. Какие-то мелкие баги всё ещё возможны, но в целом, как минимум на MySQL, всё должно работать.
* По пути доработки некоторые редкоиспользуемые фичи могли отвалиться — например, importxml.pl, миграция багов, какие-нибудь скрипты из contrib/, поддержка Oracle…
+
* По пути доработки некоторые редкоиспользуемые фичи могли отвалиться — например, importxml.pl, миграция багов, какие-нибудь скрипты из contrib/, поддержка Oracle, тесты…
 
* Часть возможностей, присутствующих в свежем оригинале, может отсутствовать в нашей версии, например:
 
* Часть возможностей, присутствующих в свежем оригинале, может отсутствовать в нашей версии, например:
 
** Отсутствует группировка полей на форме поиска в fieldset’ы.
 
** Отсутствует группировка полей на форме поиска в fieldset’ы.
 
** <s>Отсутствуют</s> Уже присутствуют сохраняемые отчёты.
 
** <s>Отсутствуют</s> Уже присутствуют сохраняемые отчёты.
 
** Отсутствуют (и, скорее всего, добавлены не будут — фича странная и даже, возможно, вредная) «пользовательские теги» на багах, то есть теги, которые видят только пользователи, их создавшие.
 
** Отсутствуют (и, скорее всего, добавлены не будут — фича странная и даже, возможно, вредная) «пользовательские теги» на багах, то есть теги, которые видят только пользователи, их создавшие.
** Отсутствует поддержка SQLite.
+
** <s>Отсутствует</s> Уже присутствует и улучшена поддержка SQLite — а именно, в отличие от оригинальной Bugzilla, можно использовать встроенный в SQLite полнотекстовый поиск FTS4, при передаче параметра &debug=1 работает вывод плана запроса, и можно использовать sqlite с contrib/bzdbcopy.pl. Пока в ветке sqlite.
 
** Отсутствует поддержка одновременной Prev/Next навигации по нескольким спискам багов (параметр &list_id=…), ибо последний список багов хранится в Cookie, а не в БД.
 
** Отсутствует поддержка одновременной Prev/Next навигации по нескольким спискам багов (параметр &list_id=…), ибо последний список багов хранится в Cookie, а не в БД.
 
** Возможно, какие-то прочие фичи, в основном — мелкие.
 
** Возможно, какие-то прочие фичи, в основном — мелкие.
Line 27: Line 27:
 
* Интерфейс:
 
* Интерфейс:
 
** Новая более удобная форма постановки бага. Идея — разделение всех полей на две колонки: в левой, крупной — описание бага и большие текстовые поля, в правой — все мелкие поля с детальной информацией.
 
** Новая более удобная форма постановки бага. Идея — разделение всех полей на две колонки: в левой, крупной — описание бага и большие текстовые поля, в правой — все мелкие поля с детальной информацией.
** Небольшой редизайн формы редактирования бага. Поля отображаются не справа от своих названий в следующей колонке, а под названиями, и выводятся в 4 колонки, плавно уменьшающиеся до 2 и потом 1 с уменьшением ширины экрана (например, на мобильниках).
+
** Небольшой редизайн формы редактирования бага. Поля отображаются не справа от своих названий в следующей колонке, а под названиями, и выводятся в 4 колонки, плавно уменьшающиеся до 2 и потом 1 с уменьшением ширины экрана (например, на мобильниках); комментарии отображаются во всю ширину экрана.
 
** Улучшенный интерфейс Boolean Charts.
 
** Улучшенный интерфейс Boolean Charts.
 
** Более аккуратные стили практически на всех страницах.
 
** Более аккуратные стили практически на всех страницах.
Line 117: Line 117:
 
== Установка ==
 
== Установка ==
  
Требует следующую толпу Perl-модулей (установить просто вызовом команды CPAN, она же <tt>perl -MCPAN -eshell</tt>):
+
Вначале нужно установить Perl модули — просто вызовом команды <tt>cpan</tt>, она же <tt>perl -MCPAN -eshell</tt> (на случай, если в вашей системе не окажется исполняемого файла cpan).
 +
 
 +
Минимально требуемые модули:
  
 
  cpan {{CPAN|Date::Parse}} {{CPAN|DBI}} {{CPAN|CGI}} {{CPAN|DateTime}} {{CPAN|Email::Address}} \
 
  cpan {{CPAN|Date::Parse}} {{CPAN|DBI}} {{CPAN|CGI}} {{CPAN|DateTime}} {{CPAN|Email::Address}} \
   {{CPAN|Template}} {{CPAN|JSON}} {{CPAN|Email::MIME}} {{CPAN|MIME::Parser}} {{CPAN|Text::Diff}} \
+
   {{CPAN|Template}} {{CPAN|JSON}} {{CPAN|Email::MIME}} {{CPAN|Test::Taint}} \
  {{CPAN|Test::Taint}} {{CPAN|Email::Reply}} {{CPAN|XML::Twig}} {{CPAN|Email::MIME::Attachment::Stripper}} \
+
  {{CPAN|XML::Twig}} {{CPAN|Text::TabularDisplay}} {{CPAN|Email::Sender}} \
   {{CPAN|Mail::RFC822::Address}} {{CPAN|XML::Validator::Schema}} {{CPAN|Image::Magick}} \
+
  {{CPAN|Lingua::Translit}} {{CPAN|Archive::Zip}} \
  {{CPAN|Devel::StackTrace}} {{CPAN|Text::TabularDisplay}} {{CPAN|Email::Sender::Simple}} \
+
   {{CPAN|DBD::mysql}} {{CPAN|Image::Magick}}
  {{CPAN|Lingua::Translit}}
+
 
 +
{{CPAN|Image::Magick}} обычно можно ставить как пакет вашего любимого Linux-дистрибутива, например <tt>perlmagick</tt> в Debian. Если вы используете PostgreSQL, то вместо {{CPAN|DBD::mysql}} вам нужен {{CPAN|DBD::pg}}.
  
{{CPAN|Image::Magick}} обычно можно ставить как пакет вашего любимого Linux-дистрибутива, например <tt>perlmagick</tt> в Debian.
+
В тестах {{CPAN|GD}} есть старый баг, который никак не пофиксят — 1 тест не проходит и установка не удаётся. Так что, пока его не пофиксят, GD ставим с -f (force).
  
 
Опционально, но желательно:
 
Опционально, но желательно:
  
  cpan {{CPAN|GD}} {{CPAN|Template::Plugin::GD}} {{CPAN|GD::Graph}} {{CPAN|GD::Graph3d}} \
+
  cpan -f {{CPAN|GD}}
   {{CPAN|SOAP::Lite}} {{CPAN|JSON::RPC}} {{CPAN|JSON::XS}} {{CPAN|Text::CSV}} \
+
cpan {{CPAN|Template::Plugin::GD}} {{CPAN|GD::Graph}} {{CPAN|GD::Graph3d}} \
 +
  {{CPAN|MIME::Parser}} {{CPAN|Mail::RFC822::Address}} {{CPAN|Email::Reply}} \
 +
  {{CPAN|Devel::StackTrace}} {{CPAN|Email::MIME::Attachment::Stripper}} \
 +
   {{CPAN|SOAP::Lite}} {{CPAN|JSON::RPC}} {{CPAN|JSON::XS}} {{CPAN|Text::CSV}} {{CPAN|HTML::Strip}} \
 
   {{CPAN|Text::CSV_XS}} {{CPAN|Spreadsheet::ParseExcel}} {{CPAN|Spreadsheet::XLSX}} \
 
   {{CPAN|Text::CSV_XS}} {{CPAN|Spreadsheet::ParseExcel}} {{CPAN|Spreadsheet::XLSX}} \
   {{CPAN|Lingua::Stem::Snowball}} {{CPAN|Math::Random::Secure}} {{CPAN|Net::IP::Match::XS}} {{CPAN|TheSchwartz}}\
+
   {{CPAN|Lingua::Stem::Snowball}} {{CPAN|Math::Random::Secure}} {{CPAN|TheSchwartz}} \
   {{CPAN|Daemon::Generic}} {{CPAN|HTTP::Server::Simple}} {{CPAN|Net::Server}} {{CPAN|IO::SendFile}} {{CPAN|HTML::Strip}}
+
   {{CPAN|Daemon::Generic}} {{CPAN|HTTP::Server::Simple}} {{CPAN|Net::Server}} {{CPAN|Sys::Sendfile}}
  
 
После установки данных модулей создайте MySQL-базу данных и пользователя, имеющего к ней полный доступ, запустите '''./checksetup.sh''' в директории установки Bugzilla и следуйте инструкциям.
 
После установки данных модулей создайте MySQL-базу данных и пользователя, имеющего к ней полный доступ, запустите '''./checksetup.sh''' в директории установки Bugzilla и следуйте инструкциям.

Latest revision as of 10:43, 4 November 2023

Bugzilla4Intranet — форк баг-трекера Bugzilla (версии 3.6.4), ставящий своей конечной целью превращение Bugzilla в настраиваемый трекер, а также оптимизацию производительности и ликвидацию некачественного кода, присутствующего в оригинале в большом количестве.

Идеальная цель проекта:

  • Полностью настраиваемая объектная модель, редактируемая из интерфейса. Функционирование всех объектов системы на её основе, возможность добавлять свои объекты, возможность поиска любых объектов, автоматическое версионирование всех изменений, отсутствие (полное или практически полное) жёстких завязок на конкретные поля или сущности.
  • Полная ликвидация CGI.pm.
  • Минимум сложной программной логики в шаблонах. Шаблоны — это представление, а не контроллер!
  • Выделенный отдельно уровень локализации, не требующий для перевода на другой язык переписывать шаблоны.

Состояние проекта

Bugzilla4Intranet — форк версии 3.6.4. Это не самая новая версия Bugzilla. Что это означает на данный момент:

  • Пока что не поддерживается обновление с новых версий Bugzilla до Bugzilla4Intranet. UPDATE: Уже поддерживается (в ветке 'beta'), схема БД совместима. Какие-то мелкие баги всё ещё возможны, но в целом, как минимум на MySQL, всё должно работать.
  • По пути доработки некоторые редкоиспользуемые фичи могли отвалиться — например, importxml.pl, миграция багов, какие-нибудь скрипты из contrib/, поддержка Oracle, тесты…
  • Часть возможностей, присутствующих в свежем оригинале, может отсутствовать в нашей версии, например:
    • Отсутствует группировка полей на форме поиска в fieldset’ы.
    • Отсутствуют Уже присутствуют сохраняемые отчёты.
    • Отсутствуют (и, скорее всего, добавлены не будут — фича странная и даже, возможно, вредная) «пользовательские теги» на багах, то есть теги, которые видят только пользователи, их создавшие.
    • Отсутствует Уже присутствует и улучшена поддержка SQLite — а именно, в отличие от оригинальной Bugzilla, можно использовать встроенный в SQLite полнотекстовый поиск FTS4, при передаче параметра &debug=1 работает вывод плана запроса, и можно использовать sqlite с contrib/bzdbcopy.pl. Пока в ветке sqlite.
    • Отсутствует поддержка одновременной Prev/Next навигации по нескольким спискам багов (параметр &list_id=…), ибо последний список багов хранится в Cookie, а не в БД.
    • Возможно, какие-то прочие фичи, в основном — мелкие.

Зато — добавлено множество новых возможностей! Из крупных доработок можно отметить:

  • Интерфейс:
    • Новая более удобная форма постановки бага. Идея — разделение всех полей на две колонки: в левой, крупной — описание бага и большие текстовые поля, в правой — все мелкие поля с детальной информацией.
    • Небольшой редизайн формы редактирования бага. Поля отображаются не справа от своих названий в следующей колонке, а под названиями, и выводятся в 4 колонки, плавно уменьшающиеся до 2 и потом 1 с уменьшением ширины экрана (например, на мобильниках); комментарии отображаются во всю ширину экрана.
    • Улучшенный интерфейс Boolean Charts.
    • Более аккуратные стили практически на всех страницах.
    • Интеграция более свежего скина Mozilla.
    • Поддержка Gravatar-юзерпиков.
    • Приятный глазу HTML-формат почтовых уведомлений по багам.
  • Excel-импорт.
  • Улучшения работы с вложениями:
    • Добавление нескольких вложений к багу разом;
    • Возможность при добавлении вложения вставить текст или изображение прямо из буфера обмена;
    • Возможность скачать все вложения к багу в одном ZIP-архиве;
    • Базовый онлайн-просмотр офисных документов с помощью LibreOffice;
    • Показ приложенных изображений прямо внутри комментариев.
  • Улучшения Custom-полей и более мощные зависимости между полями:
    • Новые типы;
    • Доступность «обратных к полю типа BUG_ID отношений» в поиске и Excel-импорте;
    • Возможность делать custom поля зависимыми друг от друга;
    • Возможность не только показывать одно custom поле для нескольких значений контролирующего поля, а также и показывать одно и то же значение select-поля для нескольких значений контролирующего поля;
    • Возможность разрешить/запретить пустое значение (NULL, то есть, «---» для select-полей, просто пустое для прочих) в зависимости от значений другого поля (например, попродуктно);
    • Возможность включить/выключить копирование поля при клонировании багов, в том числе — в зависимости от значений другого поля (например, попродуктно);
    • Настройки значений по умолчанию для любых полей — как глобальных, так и зависимых от значений другого поля;
    • Все вышеперечисленные поля зависимостей могут быть как одинаковыми, так и разными. То есть NULL можно включать/выключать в зависимости от одного поля, значение по умолчанию — в зависимости от другого поля, клонирование — от третьего, наборы значений — от четвёртого, видимость — от пятого.
    • Все вышеперечисленные зависимости можно задавать для пустого значения поля;
    • Полностью убраны старые параметры, включающие/выключащие поля и задающие их значения по умолчанию (Administration → Parameters → Bug Fields). Теперь эти настройки нужно делать через общий интерфейс настройки полей;
    • Более аккуратная форма редактирования свойств полей;
    • Новые удобные интерфейсы редактирования зависимостей и наборов значений для каждого контролирующего значения прямо с его страницы (то есть, например, включать/выключать поля прямо со страницы продукта);
    • Аналогично 4.x можно деактивировать старые версии, milestone’ы, компоненты;
    • Target Milestone можно перенастроить так, чтобы значения по умолчанию выбирались в зависимости не от продукта, а от любого другого select-поля (например, от компонента);
    • Продукты можно перемещать между классификациями со страницы продукта, а не через отдельный нетривиальный интерфейс «Reclassify».
  • «Валидаторы» изменений багов, то есть — настраиваемые предупреждения / ошибки.
  • Представление сохранённых поисков в виде MySQL’ных View, позволяющих запрашивать информацию внешними инструментами и с учётом прав доступа.
  • Страницы массовой фиксации трудозатрат (в том числе — задним числом и от чужого имени при наличии соответствующего разрешения).
  • RSS-ленты комментариев и активности по багам и поискам.
  • Различные новые поля в поиске, в том числе — поля связанных багов.
  • Возможность правки комментариев, Diff’ы в истории изменений и письмах.
  • Возможность отключения полей «Platform» и «Operating system», возможность настраивать регулярные выражения для автоопределения их значений на основе User-Agent.
  • Улучшения интерфейсов настройки прав доступа, несколько облегчающие работу с оными в Bugzilla (модель разграничения доступа в Bugzilla весьма неочевидная):
    • Редизайн формы настроек доступа к продукту.
    • Новый интерфейс редактирования групп, отображающий полный список пользователей, так или иначе входящих в группу и/или имеющих права включения других пользователей в эту группу. То есть, для редактирования можно «заходить» со стороны группы, а не со стороны каждого входящего в неё пользователя.
    • Детальная информация о том, какие разрешения дают группы, на странице списка групп в панели администрирования и на странице с информацией о собственных группах (Preferences → Permissions).
  • Улучшения ответа на баги через почту — возможность использовать заголовки полей, возможность поставить несколько вложений, адекватная диагностика при ошибках, фильтрация автоматических ответов (чтобы, например, не получалось бесконечного цикла отправки комментариев при установке пользователем ответа типа «я в отпуске до XX.XX»).
  • Новый «REST-JSON»/«REST-XML» API, принимающий входные параметры как обычные параметры POST или строки запроса, отвечающий JSON или XML, способный перехватывать любые ошибки и передавать их в ответе в виде имён (а не ужасных прибитых гвоздями численных кодов).
  • Бэкпортированы веб-сервисы из Bugzilla 4.4.

Кроме новых возможностей, уже проведена большая работа по рефакторингу наслоений оригинального кода:

  • Полностью переписан код, отвечающий за поиск. Даже сложные запросы поиска строятся так, что СУБД может максимизировать использование индексов и выполнять их оптимально.
  • Приведена в норму структура базы данных — теперь все целочисленные первичные ключи имеют одинаковый тип INT, а не разные SMALLINT/MEDIUMINT/INT, а все select-поля хранят ID значений вместо самих значений, и NULL вместо строкового «---», используемого как NULL в оригинале (а также вместо версии «unspecified»); кроме того, практически всем VARCHAR колонкам проставлен максимальный лимит длины (255), чтобы не заниматься крохоборством и не увеличивать максимальную длину сначала до 20, потом до 64, потом до 128… VARCHAR, как следует из названия, имеет переменную длину и «лишнего» места не занимает.
  • Полностью переписана логика сохранения багов в БД — теперь код работает корректнее и эффективнее, кроме того, для работы с моделью более не нужно обращаться к контроллеру (*.cgi).
  • Ликвидирован hard-code возможных значений для поля «See Also». В оригинале 3.6 данное поле может содержать только URL определённого вида, соответствующего жёстко заданным в коде (!!!) шаблонам для разных баг-трекеров. В оригинале 4.4 авторы решили это отрефакторить и… что бы вы думали? Оставили завязку в коде, но вынесли каждый шаблон в отдельный класс! Зачем так сделано — загадка, нормальное решение — простой настраиваемый набор регулярных выражений в параметрах.
  • Ликвидирован (по меньшей мере, почти) hard-code названий статусов (теперь их можно, например, назвать русскими именами).
  • Ликвидирован hard-code классов обработчиков заданий очереди, не позволяющий без модификации кода ядра добавлять собственные типы заданий в расширениях.
  • Из шаблонов вынесены некоторые крупные куски программной логики, а также объёмные JavaScript’ы.
  • Из шаблонов вынесена некоторая часть сообщений локализации (описания полей, «термины»); убраны сверхдлинные IF..ELSEIF’ы, которыми выбирались сообщения об ошибках.
  • Реализовано клиентское кэширование зависимостей между значениями полей, что даёт браузеру возможность быстрее открывать формы редактирования и поиска багов.
  • Реализовано серверное кэширование метаданных между запросами.
  • Добавлена поддержка полнотекстового поиска Sphinx, который работает гораздо быстрее и качественнее, чем MySQL FULLTEXT.
  • Добавлена простая реализация standalone HTTP-сервера на основе HTTP::Server::Simple, в духе Plack; добавлены init-скрипты для запуска данного сервера и демона очереди заданий. Рекомендуется использовать HTTP::Server::Simple + nginx в качестве фронтенда к нему вместо работы под mod_perl, так как mod_perl создаёт большое количество различных проблем, в том числе мистических багов, не проявляющих себя в «голом» Perl’е.
  • Добавлена возможность корректной перезагрузки всех модулей и расширений на каждом запросе, что сильно упрощает отладку и разработку — больше не нужно после внесения каждого изменения перезапускать сервер.
  • Полностью переписана система расширений, новая создана по образу и подобию MediaWiki и позволяет перезагружать на каждом запросе в том числе и код расширений. Планируется добавление возможности расширениям создавать собственные точки входа (*.cgi скрипты) внутри собственной директории, а не в корне установки (возможно, для этого точки входа будут превращены из *.cgi файлов в классы-контроллеры).
  • По умолчанию вложения вообще не хранятся внутри БД (BLOB’ы — mauvais ton), хотя возможность хранения оставлена для совместимости с оригиналом.
  • Задолго до попытки реализации аналогичной фичи в оригинале, ещё в 2010 году, добавлен Redirect после сохранения изменений в баг, не дающий вам случайно перепослать POST запрос при нажатии F5. Кроме того, в оригинальной Bugzilla это не работает в Internet Explorer, а у нас — работает везде.
  • HTML-формат почты также появился задолго до его реализации в оригинальной Bugzilla.
  • Полностью изгнан YAHOO UI — пожалуй, худший из всех JS-фреймворков. Мало того, что он худший — зачем нужно JS-фреймворк в Bugzilla, вообще не очень понятно.
  • Как и в оригинале, реализована подсказка имён пользователей; правда, в связи с изгнанием YAHOO UI реализована она на других технологиях.
  • Практически изгнан CGI.pm: функции cgi->param() и cgi->cookie() не используются НИГДЕ; вместо них параметры и куки читаются из хешрефов Bugzilla->input_params и Bugzilla->cookies.
  • Удалены различные устаревшие процедурные интерфейсы типа LookupNamedQuery(), is_open_state() и тому подобные.

Прочие идеи:

  • Свои типы объектов (в процессе реализации в ветке classes).
  • UI для работы с вьюхами (правда, чтобы багзилла создавала mysql-пользователей, ей нужен рутовый mysql пароль).
  • Add me to CC list, добавление флага на странице добавления аттача…
  • …Либо интегрировать форму добавления аттача прямо на форму бага!
  • (готово) Отключение/включение Silent в параметрах.
  • Показывать историю изменений багов прямо в ленте комментариев.
  • Интеграция с VCS — показывать коммиты прямо в ленте комментариев.
  • Парсить и сохранять ссылки на баги в комментариях к другим багам и показывать на их основе обратные ссылки.
  • Массовая правка багов прямо из таблицы списка багов + возможно, пересортировка.
  • (готово) Заредизайнить форму редактирования бага.
  • Переименовать Checker’ы в «Валидаторы».
  • (готово) Какой-нибудь вариант «Responsive Layout».
  • Рассмотреть возможность утаскивания какого-нибудь функционала из https://github.com/bayoteers/.
  • Вмержить «недавние поиски» из 4.x?
  • Показывать «недавние поиски»?
  • Дать возможность экстенжнам создавать свои контроллеры (условно говоря, *.cgi скрипты).
  • (готово) Убрать из ядра CUSTIS-специфичные фичи.
  • Что-то сделать с editemailin.cgi.
  • Кастомизация картинок создания бага и т. п.

Установка

Вначале нужно установить Perl модули — просто вызовом команды cpan, она же perl -MCPAN -eshell (на случай, если в вашей системе не окажется исполняемого файла cpan).

Минимально требуемые модули:

cpan Date::Parse DBI CGI DateTime Email::Address \
  Template JSON Email::MIME Test::Taint \
  XML::Twig Text::TabularDisplay Email::Sender \
  Lingua::Translit Archive::Zip \
  DBD::mysql Image::Magick

Image::Magick обычно можно ставить как пакет вашего любимого Linux-дистрибутива, например perlmagick в Debian. Если вы используете PostgreSQL, то вместо DBD::mysql вам нужен DBD::pg.

В тестах GD есть старый баг, который никак не пофиксят — 1 тест не проходит и установка не удаётся. Так что, пока его не пофиксят, GD ставим с -f (force).

Опционально, но желательно:

cpan -f GD
cpan Template::Plugin::GD GD::Graph GD::Graph3d \
  MIME::Parser Mail::RFC822::Address Email::Reply \
  Devel::StackTrace Email::MIME::Attachment::Stripper \
  SOAP::Lite JSON::RPC JSON::XS Text::CSV HTML::Strip \
  Text::CSV_XS Spreadsheet::ParseExcel Spreadsheet::XLSX \
  Lingua::Stem::Snowball Math::Random::Secure TheSchwartz \
  Daemon::Generic HTTP::Server::Simple Net::Server Sys::Sendfile

После установки данных модулей создайте MySQL-базу данных и пользователя, имеющего к ней полный доступ, запустите ./checksetup.sh в директории установки Bugzilla и следуйте инструкциям.

При обновлении — просто обновите код и также запустите ./checksetup.sh. Нужные изменения в БД будут внесены автоматически.

История улучшений

Список доработок актуален на дату: 2012-12-05 (5 декабря 2012).

Улучшения оригинальной Bugzilla 3.0 по сравнению с 2.x

Bugzilla 3 имеет много преимуществ — авторы наконец-то осилили и mod_perl, и транзакции, и работу в UTF-8, и некоторые возможности расширения, и внешний вид посимпатичнее, и проверки дублирования изменений, и запросы через DBI (а не SendSQL()), и нормальные шаблоны для писем (если, конечно, Template Toolkit считать нормальным вообще).

В то же время, авторы Bugzilla начинают понимать, что возможности расширения в Bugzilla необходимы, и постепенно добавляют таковые. В 3.0 появляются Custom Fields (дополнительные поля у багов) и чуть-чуть хуков, в 3.2 появляется настраиваемый жизненный цикл бага, поддержка расширений авторизации и ещё чуть-чуть хуков. Правда, хуков там всё равно мало, и как пишут сами авторы, они не очень красивые и, вероятно, в будущем будут переделаны. Будущее — это 4.0, которая, скорее всего, вырастет когда-нибудь из HEAD’а, который обычно представляет собой unstable версию с нечётным индексом (3.1, 3.3, 3.5 и т.п). В 4.0 обещали хуки для всего, чего душе угодно, но пользоваться ими вряд ли кто-то будет, учитывая то, какой кошмар царит в головах авторов, судя по «новой системе расширений», добавленной в 3.6.

Производительность и надёжность (по сравнению с 2.x прогресс огромен):

  • mod_perl вместо CGI — улучшает производительность. Правда, изначальные заверения о том, что «теперь багзилла будет летать», как оказалось, несколько не соответствуют действительности. Причина — тому, кто юзает Template::Toolkit, мод_перл — мёртвому припарка. Выигрыш в производительности от mod_perl с лихвой компенсируется усложнением TT-шных шаблонов.
  • InnoDB вместо MyISAM — ошибок «…table XXX is marked as crashed…» больше нет.
  • транзакции вместо блокировок таблиц, а также внешние ключи (дождались!)
  • полнотекстовый поиск по багам с морфологией вместо поиска по подстроке (которому, кстати, сопутствовали долгие блокировки при поисках)
  • теперь вся багзилла работает в UTF-8 => отпадают все мыслимые проблемы с кодировками
  • убрано множество кривых решений вроде файла data/nomail с логинами юзеров, которым не надо слать почту (теперь в настройках юзера админ может задать bugmail disabled), data/versioncache с перловым хешем мешающим обновлять словари (типа кэш какой-то) и т. п.

Новые фичи:

  • Интерфейс! :) более красивый и сексуальный во всех аспектах.
  • Можно добавлять аттачи и ставить флаги непосредственно при вводе нового бага.
  • Нормальная защита от двойного сабмита любых форм.
  • Дополнительные заголовки в письмах от Bugzilla.
  • Email-управление багами.
  • «Разделяемые» хранимые запросы поиска.
  • Несколько более гибкая система прав (например, editbugs и canconfirm можно ставить на отдельные продукты).

Доработки 2.x → /dev/null

Следующие доработки были внесены нами давно в 2.x, и отмерли по той причине, что в 3.0 реализованы авторами:

  • Настройка списка CC по умолчанию для каждого компонента.
  • Исправление глючных прав выбора компонентов — Bug:19597 более неактуален.
  • Настройка Milestone по умолчанию.
  • Нормальная защита от двойного сабмита любых форм — то есть от дублирования багов и изменений.
  • Видоизменена в Bugzilla 3.x работа с кодировками — появился UTF-8. Соответственно отмирают:
    • Страницы в cp1251 (HTML Content-Type).
    • chart.cgi: Перекодировка названий из Param(defaultcharset) в utf8.
    • report.cgi: Перекодировка названий строк и столбцов из Param(defaultcharset) в utf8.
    • showdependencygraph.cgi: перекодировка краткого названия из Param(defaultcharset) в utf8.
    • Bugzilla::DB::Mysql: обмен с базой в cp1251 (SET NAMES cp1251).

Легенда

Легенда к списку доработок, разбитому по статусу относительно Bugzilla 3.

  • Ожидает проноса или решения о его ненужности,
  • Пронесено,
  • Не требуется / похоронено.

По категории:

Под заголовком «доработки X.Y» понимаются доработки, внесённые уже после объединения CustIS Bugzilla с оригинальной версией.

Доработки 2.x → 3.2

Список доработок, существовавших в «CustIS Bugzilla» на момент объединения её с mainstream-версией 3.2.

Всем спасибо за прохождение опроса по часто используемым функциям Bugzilla.

Пронесены в Bugzilla 3.2:

  •  C   Атрибут «Договор» — Bug:14378, договор по умолчанию у каждого продукта. Значения атрибута Договор (Bugzilla).
  •  F   Возможность ограничения значений Custom Field не одним значением контролирующего поля, а несколькими — Bug:53617.
  •  C   Раскрытие почтовых групп в CC — Bug:12253.
  •  U   Content-disposition вложений — Bug:38801.
  •  N   Страница добавления членов в группы — Bug:23445.
  •  N   Добавление предыдущих Assignee и QA Contact в список CC к багу.
  •  N   Текстовые вложения — Bug:15001, в том числе при постановке бага — Bug:53638.
  •  N   Запись трудозатрат при создании Attachment-а — Bug:19052.
  •  N   Напоминания о вводе трудозатрат и запросах флагов — Bug:17481.
  •  U   Блокирование клонируемого бага клонированным, а не наоборот.
  •  N   Возможность клонирования бага не только из описания, а также из любого комментария.
  •  N   Разрешение создания багов в состояниях ASSIGNED и RESOLVED FIXED и соответствующие пользовательские настройки (Bug:17976)
  •  N   Combo-box выбора человека, у которого спрашиваем про '?'-флаг — Bug:10837, Bug:57482.
  •  NU  Автодополнение пользователей в большинстве мест, в том числе во флагах, с мультивыбором. Реализация отличается от реализации в Bugzilla 4.x Bug:91840
  •  N   «Silent» комментарии и вложения! — Bug:14372.
  •  C   Пользовательская настройка 'Redirect me to my Bugzilla' — Bug:17975, в том числе влияние её на почту о флагах — Bug:66740.
  •  N   Страница с настройками почты по умолчанию.
  •  C   Страница «TodayWorktime» — Bug:13772.
  •  NU  Предварительный просмотр комментариев — Bug:15119. В новом виде, прямо под полем ввода — отладка в баге Bug:53606.
  •  C   Рассылка отчётов о трудозатратах по почте — Bug:15148.
  •  U   Шрифт Arial в отчётах.
  •  U   Индикаторы продукта, компонента и т. п. в письмах, в том числе в письмах о флагах! (prod: PROD.COMP) — Bug:15607.
  • Хранимая процедура LoadMyWorkTime()
  •  U   Не сбрасывать оставшееся время при закрытии багов,
  •  U   show_bug.cgi:
    • Показ % завершённых зависимостей бага — Bug:28333.
    • Показ изначального QA contact.
  •  N   report.cgi: возможность измерения не только количества багов, но и трудозатрат.
  •  U   showdependencygraph.cgi:
    alt="ID: bugtitle" вместо alt="bug #bugid",
  •  U   Более богатая раскраска багов по состояниям,
  •  S   summarize_time.cgi: показывать только свои трудозатраты по багу — Bug:17977.
  •  N   userprefs.cgi: показ и изменения списков наблюдения (своих и за собой) — Bug:19347.
  • Bugzilla::DB::Mysql: убрано CAST() AS BINARY для INSTR() для MySQL>=4,
  • template/en/default/attachment/show-multiple.html.tmpl: убран iframe,
  •  N   Комментарии о клонированных багах в клонируемых багах.
  •  U   Отображение ссылок на баги в комментах и списках зависимых багов с разными стилями в зависимости от состояния, включая номера багов в списках и почтовые сообщения — Bug:53833!
    1. просто номер для багов в статусе UNCONFIRMED, NEW, ASSIGNED, REOPENED
    2. зачеркнутый номер для багов в статусе RESOLVED
    3. зачеркнутый номер с пунктирной рамочкой для багов VERIFIED
    4. зачеркнутый номер со сплошной рамочкой для CLOSED
  •  NU  Поля Hours Worked и Status Whiteboard в форме создания бага.
  •  U   Ссылки на комментарии, соответствующие установке флага, на флагах.
  •  S   Поддержка %user% при поиске по Boolean Charts:
    Отправлено в Mozilla Bug 41651.
  •  F   Версия по умолчанию для каждого компонента. Плюс исправление кривости CGI::cookie(), ведущей к несохранению версии из формы.
  • Интеграция с SharePoint,
  •  C   Интеграция с ViewVC,
  •  N   Интеграция с MediaWiki — Bug:13593.
    Плюс, новые Wiki добавлять теперь легко, ссылки можно писать в вики-стиле: wiki:[[Ссылка с пробелами и "любой мутью"]]
    Плюс из вики-ссылок удаляются маркеры цитирования и переводы строк — Bug:68347.

Доработки 3.2

  •  F   Фиксы производительности — в частности см. Не используйте Template Toolkit!
  •  F   Доработки mod_perl.pl для виндов, и для никсов тоже — убран Apache2::SizeLimit.
  •  C   Защита багов от рассылки изменений (в любой роли — CC, Assignee, Reporter, QA) определённым юзерам (по группам) — Bug:38616.
  •  U   Автоматическое проставление Assignee=ТЫ при выборе статуса ASSIGNED и проставление QA=ТЫ при выборе VERIFIED, но не при выборе CLOSED мимо VERIFIED — Bug:53754.
  •  N   Управление багами по почте, фильтры для удаления аутлукового говна из писем-ответов, поддержка вложений в почте, поддержка HTML входящих писем, поддержка почтовых алиасов пользователей, скрипт загрузки алиасов из LDAP, поддержка полей по умолчанию для спецадресов типа helpdesk-smth — Bug:47074, Bug:53608.
  •  N   Интерфейс отписки от уведомлений по багу (то есть из CC) одним кликом по ссылке из письма (no more spam!) — Bug:46701.
  •  S   RSS-лента комментариев к багам — Bug:16210, а также и активности по багам, оптимизация — Bug:53687.
  •  U   Разделитель как «.» так и ", " при вводе времени.
  •  S   «Стрелочки» рядом с заголовками в таблице списка багов, показывающие порядок сортировки.
    Взято из Mozilla Bug 164009.
  •  U   Если severity CRITICAL или BLOCKER, то письмо приходит с красной строчкой сверху, в теме письма [CRITICAL] или [BLOCKER] после номера бага, а важность письма — Высокая и приоритет — 1.
  •  S   По клику Show bug ID list показ списка ID багов через пробел на странице поиска.
  •  U   Подсветка красным цветом поля ввода времени в случае ввода некорректного значения, и ловля NaN — изменения закоммитит, но без времени.
  •  N   Массовый Excel-импорт багов — Bug:42133. Справка: Bugzilla#Импорт багов из Excel-листов.
  •  S   Поддержка русской морфологии в полнотекстовом поиске MySQL — Bug:46221.
  •  C   Ссылки на сотрудников в Plantime вместо mailto: (префикс настраивается) — Bug:46053.

Доработки 3.4

Bugzilla 3.4 установлена в качестве боевой 30 августа 2009. Всем спасибо за боевое «гамма-тестирование» (потому, что даже не совсем бета). :)

  •  N   Возможность создания багов в состоянии RESOLVED и выбора Resolution при этом — Bug:53758.
  •  N   Показ списков CC а-ля Mozilla Bugzilla — сначала в div’е со скроллером, и из него можно скопировать в буфер, а по нажатию edit — multiple selection box — Bug:54165.
  •  U   Сохранение порядка сортировки при редактировании запроса — Bug:54380.
  •  U   Стили ссылок и подсказок в графах и деревьях — Bug:54382.
  •  N   Редактируемость Default CC — Bug:55095.
  •  U   Радиобатон для выбора файл/текст вложение — Bug:53850.
  •  N   Текстовые вложения при постановке бага — Bug:53638.
  •  F   Фикс для кривого Encode::MIME::Header — см. Bug:53764. Актуально при использовании Exchange.
  •  U   Выбор положения «подвала» с сохранёнными запросами — сверху, снизу или и там, и там — Bug:53697.
  •  N   Copy-paste для tab-separated таблиц с отрисовкой в ASCII. Bug:55876
  •  U   Изменён метод формирования списка CC при клонировании бага. Bug:55966.
  •  U   Submit anyway, как заявлено, только my changes, а не значения всех полей со старой формы. Bug:56327.
  •  U   «Умные» поля Version, Component и Target Milestone в групповом редактировании багов. То есть на выбор предоставляется пересечение (твою мать, тоже мне «умные» — это были тупые, «умные» — это объединение) множеств доступных значений для всех выбранных продуктов. Bug:56536.
  •  F   Принудительная перезагрузка формы редактирования бага в Firefox при нажатии Reload. Баг стоит на фаерфокс на багзилле мозиллы, но это один из багов, о котором «nobody cares», тянется он уже 8 лет, кажется. Bug:57315.
  •  U   Ввод рабочего времени в формате ЧЧ:ММ. Bug:58021.
  •  S   Полностью переделанное построение графов зависимостей — баги разбиваются на кластеры и отрисовываются в svg+png. Bug:53609.
  •  U   Фокус на поле «quick search» на Bugzilla Main Page. Bug:58301.
  •  F   Красивые страницы ошибок, с красной рамочкой и даже с котёнком и пожарной машиной в случае, если ошибка в коде. В том числе правильная ловля ошибок компиляции, в том числе правильная обработка ошибок в вебсервисах. Bug:58633.
  •  N   Настройка на уровне продукта, включающая предупреждения в случае, если в баг этого продукта СПИСЫВАЕТСЯ время. То есть «предпочитать не списывать время сюда». Bug:59357. Bug:59357.
  •  F   Детализация сообщений об ошибках неправильно выбранных полей. Bug:61456.
  •  S   Колонки «Blocked» и «Depends on» в поиске. Bug:61979.
  •  C   Поддержка ShowTeamWork в RSS-лентах. (бага нет)
  •  U   Стили описания запроса поиска. Bug:62248.
  •  F   Ликвидация дублирования багов при неудачном создании attachment’а (завернули в транзакцию). Bug:63152.
  •  S   Колонки «Flags» и «Requests» в поиске. Bug:62964.
  •  F   Разрешение правки значений Custom полей не только admin’ам, а группе editfields. Bug:63441.
  •  NU  Сильно переделан быстрый поиск, в сторону большей интуитивности синтаксиса (он был безумный, и код тоже). Bug:63855 и не только.
  •  N   Отправка почты в формате HTML+plaintext (multipart/alternative), а не только plaintext, в том числе и о флагах. Кроме того, переделаны проверки безопасности, так что теперь письма приходят, но ровно с тем количеством информации, которое необходимо. Bug:53624, Bug:53647, Bug:64616.

Доработки 3.6

Bugzilla 3.6 установлена в качестве боевой 10 июня 2010.

  •  U   Submit формы бага по Ctrl-Enter. Bug:64559, Bug:65729.
  •  F   Selenium-тесты для Bugzilla и просто автотесты для вебсервисов. Bug:64428.
  •  U   Javascript-сортировка списка багов на стороне клиента (украдено из https://bugzilla.mozilla.org/).
  •  NU  Предлагать вариант пользователя при опечатке (на основании расстояния Левенштейна) при доступности хранимой процедуры LEVENSHTEIN. Bug:64855.
  •  F   При внесении изменений или постановке багов, теперь происходит перенаправление на страницу бага, а не показ страницы бага самим process_bug.cgi. Эффективно это означает, что после изменений теперь всегда можно обновлять страницу (F5), и повторно изменения отправляться не будут — Bug:64562.
  •  F   Полностью выкинута «новая система расширений», внесённая в 3.6, и добавлена своя. Ибо она была совершенно ужасна, хотя и выросла из относительно разумной идеи. Это не говоря о несовместимости со старым, проверенным, хотя и не очень красивым методом. Своя — совместима и сделана на основе «best practices», взятых из MediaWiki. Честно — когда я это увидел, оно меня убило — я не знал даже, что так в Perl’е вообще можно делать. И лучше бы не узнавал. Описано в Bug:40933 в районе объединения с 3.6.
  •  U   Угадывание кодировки текстовых вложений и показ юникодных с правильной — Bug:65730.
  •  S   Отчёты — возможность измерения не только количества багов, но и трудозатрат, в том числе затраченного времени — Bug:65839.
  •  U   Фокус на поле выбора юзеров / кнопке Confirm на странице подтверждения выбора пользователей. Bug:65880.
  •  C   Раскрытие «групповых пользователей» при установке на них флага (ставится много флагов на подписанных). Bug:66094.
  •  U   Добавление ссылки на аттачмент при клонировании бага из коммента с аттачментом. Bug:66177.
  •  U   Добавление пустых значений в отчёты (таблицы/графики), регистронезависимость группировки в отчётах, рефакторинг группировки. Bug:66350.
  •  C   Системная настройка снятия флагов при закрытии бага. Bug:68430.
  •  U   Сортировка пользовательских настроек по алфавиту.
  •  N   Массовое обновление багов из Excel. Bug:68621.
  •  C   Форма для фиксации трудозатрат задним числом и от чужого имена, и распределения часов. Права на эту форму — группа worktimeadmin. Bug:68921, Bug 68921.
  •  N   Настройка компонентов «Open for bug entry», по аналогии с закрытием продуктов. Bug:68921.
  •  C   Связь продуктов — внешний ← внутренний. Bug:68921.
  •  F   Блокировка строки бага (SELECT FOR UPDATE) при обновлении. Bug:69012.
  •  NU  Пользовательская настройка кодировки и разделителя для экспорта и импорта CSV. Bug:69766.
  •  F   Возможность превращения Bugzilla-поисков во вьюшки БД с доступом извне. Bug:61728.
  •  F   Настройка копирования/некопирования значения кастом поля при клонировании бага. Bug:69325.
  •  F   Численный тип кастом полей. Bug:55655.
  •  F   Добавление селект-полей в фильтры поиска + рефакторинг зависимостей полей/значений. Bug:69481.
  •  N   Проверки («предикаты») корректности изменений багов. Bug:68921, Bug:61225, Bug:65361, Bugzilla: проверки изменений багов.
  •  NU  Пользовательская настройка влияния Silent на почту о флагах. Bug:72510.
  •  U   Письма о флагах теперь приходят со ссылкой сразу на правильный коммент бага. Bug:71288.
  •  F   Корректная валидация значений полей при обновлении багов:
    • Не требовать прав на баг, связанный полем Bug ID, при обновлении доступного бага. Bug:72149.
    • Общий механизм проверки значений зависимых полей в зависимости от значений контролирующих полей, интегрированный с бывшей формой «Verify New Product Details». Bug:61456.
    • Очищать значения полей, не показываемых после изменений других полей. Bug:63249.
  •  S   Колонка «Первый коммент» в поиске. Bug:71955.
  •  F   Несколько функций API для работы со значениями полей. Плюс новый вид RPC — принимает запросы по REST, отвечает простым видом XML, причём все ошибки отлавливаются и включаются в ответ. Bug:70168, API_багзиллы_для_внешних_систем.
  •  F   Лимит 255 символов на значения строковых Custom полей. Сделано ранее, всплывало в Bug:72711.
  •  S   Печать SCRUM-карточек из списка багов. Bug:45485.
  •  C   Автоматическое проставление значений поля «внешний баг» при клонировании багов во внешние/внутренние продукты и кнопочки клонирования. Bug:63249, Bug:69514.
  •  S   Использование PostgreSQL’евского полнотекстового поиска, сортировка по релевантности при быстром поиске. Исправления всех доработок для совместимости с PostgreSQL. Bug:72826, Bug:72816.
  •  F   Опция для добавления полей типа Bug ID в зависимости бага. Bug:73054.
  •  U   Строка быстрого поиска увеличена до 300px. Bug:73354.
  •  F   В отладочных целях: поддержка корректной перезагрузки всех Perl-модулей при работе под mod_perl. Для активации нужно добавить в конфигурацию Apache перед PerlConfigRequire .../mod_perl.pl:
    <perl>$Bugzilla::RELOAD_MODULES = 1; $^P |= 0x10;</perl>
  •  F   Оптимизация прав доступа к разделу администрирования: группа admin_index.
  •  F   Кэширование JSON-кодированных данных зависимостей значений полей друг от друга для формы поиска и формы бага на стороне клиента с корректным сбросом кэша. Bug:70605.
  •  F   Кэширование метаданных — объектов полей Bugzilla::Field со всеми сопутствующими и набора полей для поиска в памяти между запросами. Bug:70605.
  •  S    F   Практически одна из ГЛАВНЫХ фич Bugzilla4Intranet — полностью переделанный движок поиска, оптимизированный настолько, что Full-Scan’ов таблиц не происходит практически никогда, в том числе и при использовании сложных поисковых выражений. Честно — как без этого живёт и до сих пор не сдохла багзиллы Мозиллы (http://bugzilla.mozilla.org/) — нам неизвестно. Bug:70605
  •  F   Полностью выкошена библиотека YAHOO UI. Bug:70605
  •  N   Расширение для вставки ограниченных правами списков багов в MediaWiki. Bug:71261
  •  C   Ссылка клонирования во внешний/внутренний продукт. Bug:69514
  •  C   Настройка на уровне продукта, рекомендующая не списывать в него время. Bug:59357
  •  NU  Массовая загрузка вложений прямо с формы редактирования бага. Bug:68919
  •  N   Настройка unauth_bug_details, разрешающая показывать, в каком продукте находится недоступный баг. Bug:67778
  •  N   Шаблон «SimpleTable» для вставки списков багов в другие страницы посредством iframe, с поддержкой масштабирования этого iframe с помощью HTML5 postMessage кроссдоменной коммуникации, плюс Wiki-шаблон для удобства эксплуатации данной доработки. Bug:70302
  •  C   Зависимость внутренних багов второго уровня от внешних багов. Bug:75690
  •  U   Tab-index-ы на форме постановки бага. Bug:86003
  •  S   Колонка «Duplicate of» в поиске. Bug:86642
  •  NU  Загрузка скриншотов через SUPA. Bug:87188
  •  C   Worktime-Only комментарии, схлопываемые по умолчанию. Bug:87696
  •  S   Колонка «Дата последнего комментария» в поиске. Bug:91323
  •  S   Колонка «Последний комментарий» в поиске. Bug:98364
  •  N   Возможность автоматической подписки на баги, удовлетворяющие заданным условиям поиска. Bug:101207
  •  NU  Продукт, Reporter, QA и Assignee в результатах поиска показываются ссылками на списки соответствующих открытых багов. Bug:102435
  •  NU  Полностью новая форма настроек доступа к продукту, вместо стандартного УЖОСА. Bug:102958
  •  S   Колонка «Продукт внешнего бага» в поиске. Bug:111527
  •  N   Back-port веб-сервисов из Bugzilla 4.0.1. Bug:84586.

Внешние баги