|
Bog BOS: Trac - система управления заданиями
|
Последнее изменение файла: 2018.01.20
Скопировано с www.bog.pp.ru: 2024.11.21
Bog BOS: Trac - система управления заданиями
Trac - система с открытым кодом с использованием web-интерфейса, состоящая из
модулей управления заданиями (task management), просмотра репозиториев и организации взаимодействия.
Расширения позволяют превратить её в простенькую систему управления проектами (project management).
Следует учитывать, что система Trac разрабатывалась как развитие системы отслеживания ошибок bugzilla
и представляет собой рабочий инструмент (управление процессом), используемый всеми участниками проекта
для учёта ошибок, проблем и заданий, в отличие от системы управления проектами,
которая представляет высокоуровневый взгляд на планы и текущее состояние проекта и
используется администратором проекта при общении с заказчиком (управление результатом).
Заказчику не нужна информация о "внутренней кухне" разработчиков из системы управления заданиями,
а для разработчиков информация из системы управления проектами недостаточна,
они не могут оценить трудозатраты и зависимости можду "большими" задачами из системы управления проектами.
При этом системы управления задачами и проектами могут быть тесно связаны.
Переводом с языка заказчика на язык разработчиков и занимается администратор проекта (ПМ, project manager),
который разбивает "большую" задачу из системы управления проектами на сотню заданий
для системы управления заданиями, назначает ответственных, контролирует состояние работ,
делает оценку завершённости и вносит её в систему управления проектами.
Разрабатывается компанией Edgewall Software на python, до версии 0.9 под лицензией GPL,
после - под лицензией BSD с модификациями.
Текущая версия - 0.12.2. Версия 0.13 предполагалась к декабрю 2010 (требуется python 2.5 или 2.6,
которых в RHEL5 нет), при этом поддержка многих проектов отложена до версии 0.14.
Организация взаимодействия сотрудников обеспечивается встроенным движком wiki.
Управление задачами осуществляется с помощью средств слежения за событиями (issue tracking),
в которой заявки (ticket, карточки, требования) соотносятся с сообщениями об ошибках,
запросами на изменение и задачами поддержки (список типов можно расширять).
Каждой заявке назначается ответственный, который должен решить её сам или спихнуть на другого.
Заявка содержит набор полей (описание, компонент, версия, веха, состояние, приоритет, серьёзность),
которые можно редактировать, история изменений сохраняется.
Версия - текущая версия проекта, к которой относится заявка.
Веха (milestone, этап разработки) - будущая версия проекта, к которой заявку требуется удовлетворить.
Диаграмму переходов состояний заявки (workflow) можно задать с версии 0.11.
Модуль работы со стратегическим планом (roadmap, план работ) позволяет задать
список вех с указанием назначенных дат выпуска,
привязывать заявки к вехам и отслеживать готовность вех по проценту выполнения соответствующих заявок.
Trac интегрируется с системой контроля версий subversion
(только локальный репозиторий),
а с помощью дополнений - с bazaar, git, mercurial (hg), monotone, darcs, perforce;
Включает версионный броузер (история, разности, статистика).
Начиная с версии 0.12 окружение trac может быть привязано к нескольким репозиториям разного типа.
Модуль отчётов (хронология, timeline) позволяет посмотреть историю активности работы над проектом
(редактирование wiki, создание и закрытие заявок, изменения репозитория subversion, выпуски версий).
Поиск по ключевым словам и строкам в wiki (без вложенных файлов), заявках (без вложенных файлов) и метаданных ревизий.
Извещения по SMTP или RSS. Локализация с версии 0.12.
Trac реализована в виде веб-сервера Apache 2
с модулями dav и dav_svn, со скриптами на Python 2.4. Поставляется свой веб-сервер tracd.
Для хранения вложений (например, изображений) wiki и заявок используется WebDAV.
Требуется MySQL, SQLite или PostgreSQL
и соответствующий интерфейс с python: MySqlDb (пакет MySQL-python), python-sqlite[2]).
Для интерфейса с subversion используется интерфейс для python (входит в пакет subversion).
Для работы с шаблонами используется ClearSilver (до версии 0.11) или Genshi (от версии 0.11, самодельная).
В RHEL 5 имеется пакет trac 0.10.5 и trac-* с дополнениями
(для систем управления версиями: bazaar-plugin, git-plugin, mercurial-plugin, monotone-plugin;
управление: iniadmin-plugin, webadmin-plugin (встроен в версии 0.11);
пакеты с расширениями: peerreview-plugin, privateticketsplugin, spamfilter-plugin, ticketdelete-plugin, xmlrpc-plugin.
Более свежая версия RHEL5 имеется на rpmforge (0.12.2).
Сервер trac обслуживает только 1 проект, обещали доработать в версии 0.13 (перенесли в 0.14):
смена масштаба/фильтра (все заявки/заявки текущего проекта/заявки группы проектов/поддерево проектов)
при поиске, работе с заявками, просмотре истории; общая wiki.
Сейчас можно поставить несколько серверов Trac и делать ссылки между проектами с помощью InterTrac
(нет общего поиска, общих отчётов и т.п.) или поместить несколько проектов в одном Trac сервере
(невозможно сфокусировать внимание на одном проекте).
Можно привязать проект к нескольким репозиториям или
привязать несколько проектов к одному репозиторию (подветвям репозитория).
Подсветка синтаксиса реализована с помощью Pygments (пакет python-pygments.noarch,
что позволяет задать стиль - набор цветов - в персональных настройках; verilog будет в 1.4),
GNU Enscript (пакет enscript, включить расширение tracopt.mimeview.enscript.*)
или SilverCity (?, включить расширение tracopt.mimeview.php.*).
В базовой системе нет иерархии и зависимостей между заявками, нет работы с дублированными заявками
(есть вариант закрытия заявки - по дублированию, но нет поиска). Однако, сторонними разработчиками
написано более 500 расширений, включая дополнительные поля, иерархию, подсчёт затрат времени, контроль бюджета,
простенькое управление проектом и пр..
Аутентификация производится с помощью cookies, поэтому для доступа из командной строки
необходимо сохранять и загружать cookies:
wget --save-cookies имя-файла http://имя:пароль@имя-хоста/trac/имя-окружения/login
wget --load-cookies имя-файла http://имя-хоста/trac/имя-окружения/...
Относящиеся к проекту trac данные и файлы настройки хранятся
в отдельном каталоге (environment, окружение).
Требуются права на запись для веб-сервера (Apache или tracd).
Также требуется доступ на чтение к репозиториям subversion (и на запись, если репозиторий в формате BDB).
Создаётся командой initenv утилиты trac-admin.
Структура файлов:
- attachments/ - вложенные файлы заявок (ticket/ - отдельный каталог для каждой заявки,
wiki/ - отдельный каталог для каждой страницы)
- conf/trac.ini - настройки
- db/trac.db - файл БД для SQLite
- htdocs/ - ресурсы, на которые можно ссылаться из шаблонов
- log/ - журналы
- plugins/ - специфичные для данного окружения дополнения
- templates/ - специфичные для данного окружения шаблоны и описания стилей
- VERSION - версия формата окружения (1)
- wiki-macros/
В качестве СУБД могут использоваться:
- SQLite 3 (Pysqlite2, пакет python-sqlite2):
файл каталог-окружения/db/trac.db; описание соединения - sqlite:db/trac.db;
проверка БД - "sqlite3 файл-БД PRAGMA integrity_check;";
очистка мусора - "sqlite3 файл-БД VACUUM;";
экспорт - "sqlite3 файл-БД .dump;"
- PostgreSQL
- MySQL 5.0 или старше:
- описание соединения - mysql://имя-пользователя:пароль@mysql-хост:порт/имя-БД
- разработчики не советуют (у них явно наболело ;)
- требуется MySQL-python 1.2.2 (1.2.1_p2) или старше в режиме thread-safe
(в RHEL 5.4 - 1.2.1, thread-safe, но может быть загружена не thread-safe версия mysql для PHP до питоновой; проверить можно кнопкой "About Trac")
- БД д.б. в кодировке utf8 и с сортировкой utf8_bin с таблицами типа InnoDB (используются транзакции)
CREATE DATABASE имя-БД DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
GRANT ALL ON имя-БД .* TO имя-пользователя@trac-хост IDENTIFIED BY 'пароль';
- процедура перехода с SQLite на MySQL
- trac-admin initenv новое-окружение-для-MySQL
- mysqldump --default-character-set=utf8 --no-data ... trac > /tmp/trac.headers.sql
- отредактировать /tmp/trac.headers.sql (тип БД - InnoDB)
- удалить таблицы и воссоздать их с новым типом БД:
mysql --default-character-set=utf8 ... имя-БД < /tmp/trac.headers.sql
- echo ".dump" | sqlite3 trac.db > /tmp/trac.sqlite.sql
- удалить описания таблиц из /tmp/trac.sqlite.sql и добавить "SET sql_mode=ANSI_QUOTES;"
- mysql --default-character-set=utf8 имя-БД ... < /tmp/trac.sqlite.sql
- у меня trac-admin падает с сообщением:
"TypeError: int() argument must be a string or a number" (MySQL-python 1.2.1)
Подсистема wiki позволяет просматривать, создавать и редактировать страницы текстов:
иерархия страниц, свой язык форматирования, предпросмотр,
хранение истории и откат изменений, индекс по имени и дате изменения, поиск.
В качестве языка форматирования используется подмножество Wiki Creole.
Тот же язык форматирования используется при работе с заявками, комментариями с ревизиям, этапам работ и отчётам,
что позволяет единообразным способом форматировать текст и обеспечивать межмодульные ссылки.
Для создания страницы необходимо создать ссылку на неё
(если имя страницы в формате CamelCase, то достаточно поискать его),
перейти по этой ссылке и отредактировать содержимое.
Страницы могут быть созданы из шаблонов, имена которых показываются в открывающемся списке
(шаблон - любая страница, имя которой начинается с "PageTemplates/").
Ссылки на ещё не существующие страницы выделяются серым цветом и знаком вопроса
(отключается ignore_missing_pages в секции wiki trac.ini).
При переименовании страницы предлагается создать ссылку на старом месте.
Удаление страницы и удаление последней версии откатить нельзя (сведения о странице исчезают даже из хронологии).
Рекомендуется выбирать имена страниц в формате CamelCase
(склеивается несколько слов с прописными первыми буквами, допускаются латинские и русские буквы, символ '/'),
ссылки на такие страницы создаются автоматически при вставке имени в текст
(split_page_names в секции wiki trac.ini позволяет автоматически вставлять пробелы;
не работает).
Имена страниц могут содержать пробелы (необходимо заключать в кавычки).
Язык форматирования (квадратные скобки в этой главе являются частью синтаксиса):
- жирный шрифт - обрамление текста слева и справа тремя апострофами или двумя звёздочками
- курсив - обрамление текста слева и справа двумя апострофами или двумя косыми
- подчёркивание - обрамление текста слева и справа символами подчёркивания
- зачёркивание - обрамление текста слева и справа двумя тильдами
- заголовок - обрамление текста слева и справа символами равенства; уровень заголовка определяется
числом символов равенства; для каждого заголовка автоматически генерится якорь, на который можно сослаться
- верхний индекс - обрамление текста слева и справа символами '^'
- нижний индекс - обрамление текста слева и справа двумя запятыми
- конец строки - "[[BR]]" или "\\"
- конец параграфа - пустая строка
- горизонтальная линия - "----"
- строка списка - "* " или "- " в начале строки
- строка нумерованного списка - число (нумерация с этого числа) или 'i' (римская нумерация) или
другая латинская буква (нумерация с этой буквы), точка и пробел в начале строки;
текст не может быть пустым
- строка вложенного списка - то же самое, но с отступом от начала строки
- строка списка определений - пробел, термин, ":: ", определение
- неформатируемый текст шрифтом равной ширины - обрамление текста слева и справа обратными апострофами
или помещение внутрь тройных фигурных скобок (скобки на отдельных строках);
не спутать с вызовом процессора!
- неформатируемый элемент - предваряется символом '!'
- выделение цитат на отдельной строке - текст с отступом
- цитаты диалога - нужное количество символов '>' в начале строки
- строка таблицы - ячейки разделяются "||", в начале и конце строки также ставятся "||";
пустая ячейка будет слита со следующей (если слияние не требуется, то вставьте хотя бы пробел);
выравнивание текста задаётся примыканием к стенке ячейки
- установка якоря - "[=#имя-якоря текст якоря]"
- ссылки
- макросы
- вызов процессора
Типы ссылок (можно явно указать версию страницы, добавив "@номер-версии";
можно сделать ссылку внутрь страницы, добавив "#имя-якоря"; если имя объекта в ссылке содержит пробелы, то его необходимо
заключить в кавычки или апострофы, кроме ссылок в форматах с двойными квадратными скобками):
- автоматически создаются для имён в формате CamelCase
- внешние ссылки
- URI
- [URI текст ссылки]
- [[URI|текст ссылки]]
- ссылки на страницы wiki и вложения (raw-attachment - загрузить)
- [..]
- ["ИмяСтраницы"]
- [ИмяСтраницы текст ссылки]
- [[Имя страницы]]
- [[Имя страницы|текст ссылки]]
- wiki:ИмяСтраницы
- wiki:ИмяСтраницы?format=txt
- wiki:ИмяСтраницы?version=номер-версии
- [wiki:ИмяСтраницы]
- [wiki:ИмяСтраницы текст ссылки]
- [[wiki:ИмяСтраницы|текст ссылки]]
- attachment:имя-прикреплённого-файла
- raw-attachment:имя-прикреплённого-файла
- attachment:имя-прикреплённого-файла:wiki:ИмяСтраницы
- raw-attachment:имя-прикреплённого-файла:wiki:ИмяСтраницы
- <wiki:имя страницы>
- [#имя-якоря текст ссылки]
- [[#имя-якоря|текст ссылки]]
- ссылки на заявки и вложения (raw-attachment - загрузить)
- #номер-заявки
- ticket:номер-заявки
- ticket:номер-заявки1,номер-заявки2
- ticket:от_номера_заявки-до_номера_заявки
- ticket:номер-заявки?version=номер-версии
- [ticket:номер-заявки]
- [ticket:номер-заявки текст ссылки]
- [[ticket:номер-заявки]]
- [[ticket:номер-заявки|текст ссылки]]
- ticket:номер-заявки#comment:номер-комментария
- ticket:номер-заявки#comment:description
- comment:номер-комментария-этой-заявкм
- comment:номер-комментария:ticket:номер-заявки
- comment:description:ticket:номер-заявки
- ticket:номер-заявки:имя-прикреплённого-файла
- attachment:имя-прикреплённого-файла:ticket:номер-заявки
- raw-attachment:имя-прикреплённого-файла:ticket:номер-заявки
- attachment:ticket:номер-заявки:имя-прикреплённого-файла
- raw-attachment:ticket:номер-заявки:имя-прикреплённого-файла
- ссылки на файлы и каталоги репозитория (export - загрузить)
- source:имя-репозитория/путь
- source:имя-репозитория/путь@номер-ревизии
- source:имя-репозитория/путь@head
- source:имя-репозитория/путь@номер-ревизии#Lномер-строки
- source:имя-репозитория/путь@номер-ревизии:список-номеров-строк-и-интервалов#Lномер-строки
- export:имя-репозитория/путь
- export:имя-репозитория/путь@номер-ревизии
- ссылки на ревизии (наборы изменений)
- rномер-ревизии
- [номер-ревизии]
- [номер-ревизии/имя-репозитория/путь]
- changeset:номер-ревизии
- changeset:номер-ревизии/имя-репозитория/путь
- rномер-ревизии:номер-ревизии
- ссылки на журналы ревизий и сравнения
- log:@номер-ревизии:номер-ревизии
- log:имя-репозитория/путь
- log:имя-репозитория/путь@номер-ревизии
- log:имя-репозитория/путь@номер-ревизии1,номер-ревизии2
- [номер-ревизии1,номер-ревизии2/имя-репозитория/путь]
- log:имя-репозитория/путь@от-номера-ревизии:до-номера-ревизии
- [от-номера-ревизии:до-номера-ревизии/имя-репозитория/путь]
- diff:@номер-ревизии:номер-ревизии
- diff:имя-репозитория/путь//имя-репозитория2/путь2
- diff:имя-репозитория/путь@номер-ревизии//имя-репозитория2/путь2@номер-ревизии2
- ссылки на запросы и отчёты
- [query:поле=значение1|значение2&поле2=значение3 текст ссылки]
- в дополнение к полям заявки можно использовать group и order
- {номер-отчёта}
- report:номер-отчёта
- htdocs:имя-файла-каталога-htdocs-проекта
- milestone:имя-этапа-работ
- [/login текст ссылки]
- [[//login|текст ссылки]]
- [/newticket?component=имя-компонента текст ссылки]
- search:?q=строка+поиска
- search:?q=строка+поиска&wiki=on
- timeline:ГГГГ-ММ-ДД
- timeline:ГГГГ-ММ-ДДTЧЧММ+04
Текст ссылки можно указать в строке поиска для быстрого перехода к нужному объекту.
Можно создавать свои схемы (префиксы, InterWiki) для ссылок.
Описания схем создаются на странице InterMapTxt в блоке внутри тройных фигурных скобок после горизонтальной строки.
Каждая строка содержит имя схемы, описание и комментарий (начинается с символа '#').
Описание схемы задаёт правило преобразования тела ссылки в URI.
В простейшем случае тело ссылки приписывается к URI справа.
Если в описании используются вызовы позиционных параметров ($1, $2 и т.д.),
то тело ссылки делится по разделителю ':' на позиционные параметры и производится подстановка.
Параметры также подставляются в комментарии и образуют текст ссылки.
Описания и синонимы окружений trac добавляются в trac.ini в секцию intertrac.
После регистрации (список зарегистрированных окружений доступен на странице InterTrac)
можно вставлять ссылки на объекты в этих окружениях, добавляя к началу ссылки префикс требуемого окружения trac и двоеточие.
Ссылки на заявки можно сокращать до "#ИмяокруженияНомерзаявки",
ссылки на ревизии - до "[ИмяокруженияНомерревизии]",
ссылки на журнал - до "[Имяокружения от:до]".
Макросы позволяет расширять Trac своими функциями на python.
Вызов макро оформляется в виде имени макро внутри двойных квадратных скобок, за которым могут быть
указаны параметры внутри круглых скобок.
Результат расширения макро в момент вызова подставляется в выходной текст.
Макросы из комплекта поставки:
- [[MacroList(*)]] - вставить список имеющихся макро
- [[MacroList(имя-макро)]] - вставить описание макро
- [[InterTrac]] - вставить список известных префиксов зарегистрированных окружений Trac
- [[RecentChanges(префикс,максимальное-число)]] - вставить список последних изменений в wiki
- [[TitleIndex(префикс,hideprefix)]] - вставить список всех страниц, дополнительные ключи:
- format=compact|group|hierarchy
- depth=максимальный-уровень-иерархии (0 - самый верхний)
- [[PageOutline(интервал-уровней,заголовок,стиль)]] - вставить оглавление текущей страницы; стиль: pullout, inline
- [[Image(ссылка)]] - вставить картинку;
простая ссылка ("picture.jpg") ссылается на прикреплённый файл с данным именем;
можно использовать ссылки Trac любого типа;
дополнительные параметры интерпретируются как свойства изображения: 120px, 25%,
right, left, center, top, bottom, middle, link=ссылка-Trac, атрибут-HTMLилиCSS=значение
- [[InterWiki]] - вставить список дополнительных схем внешних ссылок
- [[KnownMimeTypes]] - вставить список известных wiki-процессору типов MIME
- [[TicketQuery(ключ=значение,...)]] - вставить результат запроса;
если ключ совпадает с именем поля заявки, то можно использовать синтаксис запроса; дополнительные ключи:
- format={list|compact|count|table}
- max - 0 есть бесконечность
- order=имя-поля-заявки - поле сортировки
- desc={false|true} - порядок сортировки
- group=имя-поля-заявки - поле группировки
- groupdesc={false|true} - порядок группировки
- rows=список-полей-для вывода
- [[RepositoryIndex(формат,шаблон)]] - вставить список известных репозиториев;
форматы: compact, list, table; не работает
Макросы можно разработать самому (файл с функцией на python положить в каталог окружение/plugins;
после копирования файла необходимо перезапустить HTTP сервер;
фактически это специализированное расширение, так что необходимо отслеживать совместимость с версией Trac)
или взять с Trac Hacks, примеры в разделе расширений.
Макросы, предназначенные для обработки альтернативных языков форматирования,
называются wiki-процессорами.
Результат работы процессора в момент вызова подставляется вместо вызова процессора по имени,
перед именем строка "{{{#!", далее параметры в формате ключ=значение, далее обрабатываемый текст, затем "}}}".
Обрабатываемый текст также может содержать вызов процессора.
Встроенные процессоры:
Система trac позволяет создавать и отслеживать заявки 3 типов
(расширяется и упорядочивается trac-admin или в админке):
ошибки (defects, bug reports), заявки на улучшение (enhancements, feature requests) и задания (tasks).
При создании заявка имеет состояние "new".
Заявки можно редактировать (менять поля, описание, добавлять комментарии или файлы) и переводить в другое состояние
в соответствии с имеющимися правами доступа. При этом "все ходы записываются".
Комментарии и саму заявку можно удалить безвозвратно при наличии прав доступа.
В описании и комментариях можно использовать wiki форматирование.
Поля заявки:
- заявитель (Reporter), имя и почтовый адрес определяются из аутентификации пользователя
- ответственный (Owner, Assign to); возможно добавление из списка пользователей
(должен аутентифицироваться хотя бы 1 раз) или свободно
- тип заявки (Type)
- краткое описание заявки (Summary)
- полное описание заявки (Description), доступно форматирование wiki
- приоритет для исполнителя: от highest до lowest;
список редактируется и упорядочивается trac-admin или админке
- этап (Milestone, будущая версия, веха);
список редактируется trac-admin или админке, можно задать ожидаемую и реальную дату завершения
- компонент проекта (Component); список редактируется trac-admin или админке, компоненту задаётся ответственный (owner),
который автоматически назначается всем заявкам данного компонента
- версия проекта (Version); список редактируется trac-admin или админке, можно задать дату выпуска
- серьёзность последствий для проекта (Severity; от blocker до trivial);
список редактируется и упорядочивается trac-admin или админке
- ключевые слова для поиска (Keywords)
- кого ещё извещать о прохождении заявки (Cc)
- состояние заявки (Status), граф переходов жёстко задан до версии 0.11
- почему заявка была закрыта (Resolution: fixed, invalid, wontfix, duplicate, worksforme)
- комментарии по ходу изменения состояния и изменения полей
- вложенные файлы
Поле будет скрыто, если список возможных значений пуст.
Значения полей по умолчанию задаются в trac.ini или из строки запроса
("/trac/newticket?type=task&component=gui").
Можно добавлять свои поля в trac.ini (секция ticket-custom).
При создании отчётов необходимо учитывать,
что дополнительные поля помещаются в таблицу ticket_custom вместо таблицы ticket.
После настройки SMTP в trac.ini
заявитель, ответственный и прочие пользователи (указываются в поле Cc:)
будут получать извещения о создании и изменении относящихся к ним заявок.
Шаблон тела письма задаётся в trac/ticket/templates/ticket_notify_email.txt,
свою версию надо положить в каталог-проекта/templates/ticket_notify_email.txt.
Разрешение посылать письма от httpd для SELinux: "setsebool -P httpd_can_sendmail 1".
Диаграмму переходов состояний заявки можно определить самостоятельно
с версии 0.11 (модуль ConfigurableTicketWorkflow, секция ticket-workflow trac.ini):
для каждого типа перехода (действия) необходимо задать список допустимых исходных состояний,
список допустимых приходных состояний, действие (set_owner_to_self, leave_status, set_owner,
del_owner, del_resolution, set_resolution) и права (TICKET_CREATE, TICKET_MODIFY).
При переходе от версии 0.10 создаётся диаграмма переходов с состояниями new, assigned, closed и reopened.
В поставке 0.11 задаются состояния: new (только что создана), assigned (назначен ответственный),
accepted (он с этим согласился), reopened, closed.
В примерах приводятся:
добавление этапа тестирования, добавление этапа обзора кода, запрет закрывать неназначенную заявку,
добавление состояния запроса дополнительной информации.
После добавления новых состояний может потребоваться настроить группировку для плана работ
(секция milestone-groups trac.ini).
Изменения отображаются в истории (timeline).
Используя один из предустановленных отчётов или составив свой отчёт или запрос
можно получить список заявок, удовлетворяющих требуемым критериям.
Отчёты составляются с помощью SQL SELECT (report).
Запросы составляются фильтруя список заявок по требуемым значениям выбранных полей (имеются 'OR' и 'AND')
и группируя результат (называется запросом, query).
Предполагается полностью отказаться от отчётов в пользу запросов,
однако отчёты позволяют извлекать данные не только о заявках.
Отчёты без группировок или записи в группе могут быть отсортированы по любой колонке.
Ссылки на запросы имеют формат в wiki вида "query:?status=assigned|reopened&order=priority".
Кроме оператора совпадения можно использовать "~=" (содержит), "^=" (начинается с) и "$=" (заканчивается на).
Перед оператором может стоять знак отрицания "!".
Даты в интервалах дат разделяются ".." ("created=2007-01-01..2008-01-01").
Ссылки на отчёты имеют формат URL вида "reports/номер[?имя-параметра=значение]".
Можно включать результат запроса в wiki,
используя макро вида "[[TicketQuery(status=assigned∓order=priority)]]",
вторым параметром которого может быть "compact" (без описания) или "count" (только количество).
Можно включать результат запроса в wiki в виде таблицы,
используя макро вида "[[TicketQuery(max=3,status=closed,order=id,desc=1,format=table,col=resolution|summary|owner|reporter)]]".
Понравившийся отчёт или запрос можно сохранить для последующего использования
(номер, автор, название, описание, команда запроса).
Отчёт или запрос можно получить также в формате RSS (Really Simple Syndication)
или текстовом (CSV или разделёние табуляциями).
Возможная последовательность обработки заявки (добавление функции или исправление ошибки):
- открыть заявку (если возникает вопрос, а нужна ли эта новая функция, то она не нужна),
описание новой функции в виде ссылки на предварительное обсуждение на wiki;
обработать информацию об ошибке (нет ли похожей, ошибка ли это, воспроизводима ли, тяжесть последствий,
будем ли мы её исправлять)
- назначить веху
- назначить ответственного
- создать ветку (для улучшений - от HEAD, для ошибок - от нужной версии), имя ветки можно образовать из номера заявки
- внести изменения, оттестировать
- слить изменения в основной ствол, указав в журнале номер заявки, ветку можно удалить
- закрыть заявку, указав новер ревизии после слияния
Заявки могут быть импортированы из
- Bugzilla (имя продукта из bugzilla записывается как ключевое слово)
- Sourceforge
- Mantis
- Jira
(требуется XmlRpcPlugin) из резервной копии в XML
или из RSS
Модуль работы со стратегическим планом (roadmap, план работ) позволяет задать
список этапов разработки (milestone, веха) с указанием запланированных и получившихся дат выпуска,
отслеживать готовность этапов по проценту выполнения соответствующих заявок,
просматривать относящиеся к этапу заявки с сортировкой по требуемым критериям.
Список этапов можно выгрузить в формате VCALENDAR (iCalendar)
для Korganizer, Sunbird, Lightning, Evolution, Microsoft Outlook
(только свои заявки для этапов со сроком окончания, требуется аутентификация в момент подписки).
Данный модуль позволяет просмотреть недавние изменения в проекте (репозиторий, заявки, wiki, этапы).
Можно фильтровать по типу объектов и изменения, репозиторию,
датам и именам пользователей (список через пробел, знак '-' для отрицания).
Обеспечиваются ссылки для получения более детальной информации.
Возможно получение информации в формате RSS (Really Simple Syndication).
В настройках trac.ini можно управлять объёмом информации об изменениях,
слиянием похожих сообщений, показывать ли приложенные файлы и т.д..
Система trac может интегрироваться с системами управления версиями
subversion, bazaar, git, mercurial и monotone, для чего
при установке указывается адрес репозитория, с которым trac синхронизируется для ускорения работы.
Это позволяет просматривать репозиторий с указанием требуемой ревизии,
сравнивать ревизии и ветви проекта, подкаталогов и файлов: список изменённых файлов,
построчное сравнение файлов, сравнение файлов "бок о бок" (выделяются различия внутри строки).
Также можно посмотреть изменения в метаданных, журнал относящихся к файлу ревизий,
список измененных в указанной ревизии файлов
(цвета: зелёный - добавление, оранжевый - изменёние, синий - копирование, серый - перемещение)
и сами файлы (поддерживается настраиваемая подсветка для большинства языков программирования и не только
тремя различными библиотеками: enscript, pygments и SilverCity) последней или указанной ревизии.
Задаётся начальная и конечная ревизии, с учётом и без учёта копирования, с учётом удалений файлов с тем же именем.
Имеется сортировка по колонкам при просмотре фалов: имя файла, размер, ревизия,
давность последних изменений (цветовая шкала: красные - свежие, синие - старые; настраивается), автор.
Есть быстрые переходы к веткам и релизам.
Показываются или поддерживаются метаданные: svn:needs-lock, svn:mergeinfo, svn:externals,
svn:mime-type (например: "text/html;charset=utf-8").
Можно использовать клавиатурное управление (включить в настройках):
- j - к следующей строке списка
- k - к предыдущей строке списка
- o, v или Enter - открыть или закрыть
- r - перезагрузить список
- A - просмотр файла в режиме аннотаций
- L - посмотреть журнал
Начиная с версии 0.12 окружение trac может быть привязано
к нескольким репозиториям разного типа (для subversion можно указать подкаталог),
при просмотре выдаётся индекс репозиториев.
После добавления репозитория его необходимо синхронизовать с trac командой resync утилиты trac-admin.
До версии 0.12 при каждом обращении к trac производилась синхронизация с репозиторием.
Начиная с версии 0.12 необходимо позаботиться о явной синхронизации
при каждом изменении в репозитория
с использованием скриптов post-commit и post-revprop-change
в настройке subversion (процесс, вносящий изменения в subversion, должен иметь права на запись в окружение trac;
не забыть про права на исполнение;
необходимо отключить repository_sync_per_request в trac.ini):
post-commit:
#!/bin/sh
/usr/bin/trac-admin каталог-окружения changeset added "$1" "$2"
post-revprop-change:
#!/bin/sh
/usr/bin/trac-admin каталог-окружения changeset modified "$1" "$2"
Репозиторий может иметь следующие атрибуты:
- name - имя
- alias - ссылка на имя реального репозитория (ссылка на ссылку недопустима)
- description - описание выводится на экран при просмотре репозиториев
- type - тип репозитория по умолчанию берётся из repository_type секции trac файла trac.ini.
- dir - местонахождение репозитория в файловой системе, несовместим с alias
- url - корневой URL репозитория (позволяет генерировать ссылки для использования в клиентах систем управления версиями)
- hidden - не показывать репозиторий в списке верхнего уровня
Настройка репозиториев описывается в секции repositories файла trac.ini
(в этом случае имена репозиториев приводятся к строчным буквам и нельзя использовать точку).
Настройка репозитория по умолчанию описывается в секции trac переменными repository_*.
Можно также настраивать репозитории средствами trac-admin и веб-интерфейса.
Можно обеспечить автоматические отметки в заявках (включая закрытие) при создании ревизии в репозитории:
- задействовать скрипты post-commit и post-revprop-change subversion для явной синхронизации
- в секцию components файла trac.ini добавить строку
tracopt.ticket.commit_updater.* = enabled
- в комментарии к ревизии вставляется строка, которая вызывает автоматическое действие ('#' можно заменить на
"ticket:" или "issue:" или "bug:"):
- "refs #номер[, #номер]" - вызывает вставку ссылки на ревизию в комментариях к заявке
(refs можно заменить на references, addresses, re, see
- "close #номер[, #номер]" - вызывает вставку ссылки на ревизию в комментариях к заявке
и закрывает заявку в состояние fixed (close можно заменить на closed, closes, fix, fixed, fixes)
Возможно получение журнала изменений в текстовом виде или
в формате RSS (Really Simple Syndication) и настроить
получение извещений RSS при изменении определённого файла или каталога.
Пользователи делятся на аутентифицированных
(нажавших кнопку Login, входят в группу "authenticated")
и прочих (им присваивается имя "anonymous" в группе "anonymous").
Можно создавать свои группы привилегий и включать в них пользователей и группы.
Группа authenticated входит в группу anonymous.
Добавление пользователя в группу добавляет привилегии группы к привилегиям пользователя.
Созданные группы автоматически входят в группы anonymous и authenticated.
Недоступные пользователю подсистемы не показываются.
Редактирование прав доступа доступно с помощью trac-admin
и веб-интерфейса (для обладателя привилегии TRAC_ADMIN).
Аутентификация пользователей производится внешними средствами (например, apache).
Информация о пользователях хранится в БД trac в виде записей об активных сессиях (т.е. необходимо
хотя бы раз аутентифицироваться - нажать кнопку Login/Войти - или добавить сессию с помощью trac-admin):
имя пользователя trac, идентификатор сессии, полное имя, адрес email, персональные настройки.
Функциональные привилегии:
- TRAC_ADMIN - может управлять правами доступа, имеет все остальные привилегии
- репозиторий
- BROWSER_VIEW - просмотр репозитория
- LOG_VIEW - просмотр комментариев ревизий
- FILE_VIEW - просмотр файлов репозитория
- CHANGESET_VIEW - извлечение файлов из репозитория
- заявки (карточки, tickets)
- TICKET_VIEW - смотреть заявки и выполнять запросы
- TICKET_CREATE
- TICKET_APPEND - добавлять комментарии и вложения
- TICKET_CHGPROP - изменять свойства заявки (кроме описания и CC)
- TICKET_EDIT_CC
- TICKET_EDIT_DESCRIPTION
- TICKET_EDIT_COMMENT
- TICKET_MODIFY - TICKET_APPEND + TICKET_CHGPROP + право закрыть, потенциальный владелец
- TICKET_ADMIN - все вышеперечисленные права + удаление вложений +
изменение репортёра + редактирование списков версий и пр.
- план работ
- MILESTONE_VIEW - смотреть и назначать заявки на этап
- MILESTONE_CREATE - создавать этапы работ
- MILESTONE_MODIFY
- MILESTONE_DELETE
- MILESTONE_ADMIN - права на любые действия с этапами работ
- ROADMAP_VIEW - MILESTONE_VIEW?
- ROADMAP_ADMIN - заменён на MILESTONE_ADMIN
- отчёты
- REPORT_VIEW
- REPORT_SQL_VIEW - смотреть текст SQL-запроса
- REPORT_CREATE
- REPORT_MODIFY
- REPORT_DELETE
- REPORT_ADMIN - права на любые действия с отчётами
- wiki
- WIKI_VIEW
- WIKI_CREATE
- WIKI_MODIFY
- WIKI_RENAME
- WIKI_DELETE
- WIKI_ADMIN - права на любые действия с wiki + управление свойством "только чтение"
- управление авторизацией
- PERMISSION_GRANT
- PERMISSION_REVOKE
- PERMISSION_ADMIN - права на любые действия с авторизацией
- TIMELINE_VIEW
- SEARCH_VIEW
- CONFIG_VIEW - дополнительная информация (версии и пр.) при нажатии кнопки "About Trac"
- EMAIL_VIEW - показывать адреса, даже если показ отключён опцией show_email_addresses configuration
Для тонкой настройки прав доступа к различным частям БД (fine-grained permissions) необходимо
- убедиться в наличии python-configobj
- включить в настройках дополнений ("tracopt.perm.authz_policy.* = enabled" в секции components?)
- добавить AuthzPolicy первым в permission_policies секции trac файла trac.ini
(политики пробуются по очереди, пока не вернут "да" или "нет";
оставленная DefaultPermissionPolicy обеспечит обычную обработку прав доступа)
- добавить секцию authz_policy с указанием файла описания прав доступа к trac в строке authz_file
- [добавить строку authz_file секции trac с именем файла
описания прав доступа к репозиторию subversion
(имена пользователей trac и svn должны совпадать)]
- если файл с описанием прав доступа к репозиторию subversion описывает несколько репозиториев,
то необходимо определить нужный строкой authz_module_name секции trac
Файл с описанием прав доступа к trac имеет строчную структуру и делится на секции,
секция начинается с имени секции в квадратных скобках, комментарии начинаются с символа '#',
строка содержит имя параметра и значение через символ '='.
Имена секций задают шаблон описания ресурса trac, для которой определяются права доступа.
Описание ресурса состоит из типа (wiki, ?), ":", шаблона имени,
"@", шаблона ревизии, "/", тип уточнения (attachment), "/", шаблон имени (опущенное заменяется шаблоном "*").
Секции проверяются по порядку.
В секции в качестве имени параметра указывается имя пользователя или имя группы
(предваряется символом '@') или шаблон '*',
в качестве значения - список привилегий через запятую или пусто (доступ запрещён).
Символ '!' перед именем пользователя отнимает указанные привилегии.
Права доступа для группы не перекрываются индивидульными правами доступа, а объединяются.
Для добавления своих привилегий используется расширение "tracopt.perm.config_perm_provider.*",
которое читает из секции extra-permissions строки с именами метапривилегий и списком имён добавляемых привилегий.
Формат: trac-admin каталог-окружения команда подкоманда опции.
При отсутствии команды переходит в интерактивный режим. Настройки сохраняются в БД.
Описания репозиториев из trac.ini редактировать нельзя.
Команды:
- help
- about
- initenv [имя-проекта описание-соединения-БД [тип-репозитория путь-к-репозиторию] ]
# создать окружение (каталог-окружения не должен существовать;
ключ --inherit=имя-файла позволяет задать "главный" файл настроек, на который будет ссылаться trac.ini;
репозитории, на которые ссылаетесь, должны уже существовать; нежелательно иметь пробел в имени проекта)
- deploy каталог # сгенерировать скрипты trac.cgi, trac.fcgi, trac.wsgi для cgi-bin и htdocs
- hotcopy резервный-каталог # БД резервируется только для формата SQLite
- upgrade [--no-backup] # обновить БД до текущей версии trac
- wiki upgrade # обновить документацию Trac в wiki, кроме страницы WikiStart
- repository {list | add имя каталог [тип] | alias синоним имя | remove имя }
- repository set атрибут значение # изменить значение атрибута репозитория
- repository resync [ревизия] [имя-репозитория | '*' | "(default)"] # синхронизация с репозиторием
- repository sync # продолжить синхронизацию
- changeset added {имя-репозитория | "(default)"} ревизия ... # отразить добавление ревизии в репозиторий
(специально для скрипта post-commit subversion)
- changeset modified {имя-репозитория | "(default)"} ревизия ... # отразить изменение метаданных в репозитории
(специально для скрипта post-revprop-change subversion)
- wiki {list | remove имя | export имя [имя-файла] | import имя [имя-файла] |
dump каталог [шаблон-имени] | load файл-или-каталог | rename старое-имя новое-имя | replace файл-или-каталог}
# replace не оставляет следов изменений
- component {list | add имя ответственный | rename старое-имя новое-имя | remove имя | chown имя ответственный}
- ticket_type {list | add имя-типа | change старое-имя новое-имя | remove имя-типа | order имя-типа {up | down}}
- priority {list | add имя | change старое-имя новое-имя | remove имя | order имя {up | down}}
- severity {list | add имя | change старое-имя новое-имя | remove имя | order имя {up | down}}
- version {list | add имя [YYYY-MM-DD | now] | rename старое-имя новое-имя | remove имя | time имя {YYYY-MM-DD | now}}
- milestone {list | add имя [YYYY-MM-DD | now] | rename старое-имя новое-имя | remove имя |
due имя {YYYY-MM-DD | now} | completed имя {YYYY-MM-DD | now}}
- resolution {list | add имя | change старое-имя новое-имя | remove имя | order имя {up | down}}
- ticket remove номер
- permission {list [имя-пользователя] | add имя-пользователя привилегия ... | remove имя-пользователя привилегия ...}
- attachment {list тип:идентификатор | export тип:идентификатор имя [имя-файла] |
add тип:идентификатор имя-файла [автор [описание]] | remove тип:идентификатор}
- config {get имя-секции имя-переменной | remove имя-секции имя-переменной | set имя-секции имя-переменной значение}
- session {list имя-пользователя-или-anonymous | add имя-пользователя [ФИО [почтовый-адрес]] | delete имя-пользователя |
purge YYYYMMDD | set {name | email} имя-пользователя значение}
Конфигурационный файл conf/trac.ini
в каталоге проекта имеет строчную структуру и делится на секции,
секция начинается с имени секции в квадратных скобках, комментарии начинаются с символа '#',
строка содержит имя параметра (приводится к строчным буквам) и значение через символ '='.
Изменения действуют немедленно, кроме секций logging и components (требуется перезапустить Apache).
В версиях до 0.11 общие настройки проектов хранились в /etc/trac/trac.ini.
В версии 0.11 и старше имя файла с общими настройками задаётся в секции inherit.
Требуются права доступа на запись для веб-сервера.
Секции:
- attachment - управление вложениями wiki и заявок
- max_size = байт
- render_unsafe_content = {false | true} # показывать небезопасные файлы (HTML) или только загружать
- authz_policy - тонкая настройка прав доступа
- browser - управление внешним видом при просмотре репозитория
- color_scale = {true | false} # цветная колонка давности: голубой - старые, красный - новые
- newest_color = (красный,синий,зелёный) # цвет недавних изменений
- oldest_color = (красный,синий,зелёный) # цвет старых изменений
- intermediate_color = (красный,синий,зелёный) # цвет промежуточной давности
- intermediate_point = от-0-до-1 # промежуточная давность
- downloadable_paths = список-шаблонов # какие части репозитория можно будет загрузить
- hide_properties = список-неотображаемых-метаданных
- oneliner_properties = список-метаданных # какие метаданные выводить при однострочном формате (trac:summary)
- render_unsafe_content = {false | true} # показывать небезопасные файлы (HTML) или только загружать
- wiki_properties = список-метаданных # какие метаданные выводить (trac:description)
- changeset - управление внешним видом при просмотре ревизии репозитория
- max_diff_bytes = байт # ограничение на сумму размеров старой и новой версии при ппросмотре разности
-
- max_diff_files = число # ограничение на количество изменённых файлов
- wiki_format_messages = {true | false} # обрабатывать команды wiki форматирования в комментариях ревизий
- component - управление модулями и расширениями
- tracopt.ticket.commit_updater.* = enabled # автоматически закрывать заявку,
используя управляющий комментарий ревизии
- tracopt.mimeview.enscript.enscriptrenderer = enabled # подсветка синтаксиса с помощью enscript
- tracopt.ticket.deleter.ticketdeleter = enabled # разрешать удаление заявок и комментариев к заявкам
при наличии прав
- header_logo - общее оформление страниц
- alt = текст # альтернативный текст к логотипу
- height = пикселей # высота логотипа (-1 - по потребности)
- link = URL-ссылки-с-логотипа
- src = URL-логотипа # если начинается с "site/", то относительно окружение-проекта-trac/htdocs;
если начинается с "common/", то относительно ?
- width = пикселей # ширина логотипа (-1 - по потребности)
- inherit - наследовать настройки, общие для нескольких проектов (частные настройки имеют преимущество)
- file = имя-файла[,...] # общий trac.ini (возможно дерево наследования)
- templates_dir = каталог # общие шаблоны
- plugins_dir = каталог # общие расширения
- intertrac - описание другий окружений trac
- синоним = имя-окружения
- имя-окружения.title = описание окружения trac # показывается на экране
- имя-окружения.url = ссылка
- имя-окружения.compat = {true | false} # совместимость с версиями до 0.10
- logging - что и куда записывать
- log_type = {none | file | stderr | syslog | eventlog} # имя демона для syslog?
- log_file = имя-файла
- log_level = {CRITICAL | ERROR | WARN | INFO | DEBUG}
- log_format = описание-формата # по-умолчанию, "Trac[$(module)s] $(levelname)s: $(message)s";
для установок с несколькими проектами рекомендуется "Trac[$(project)s:$(module)s] $(levelname)s: $(message)s"
- mainnav - описание главного меню
- имя-модуля.label = текст пункта меню
- имя-модуля.href = ссылка # относительный путь - относительно текущей позиции,
абсолютный путь - относительно базового URL
- metanav - описание вспомогательного меню
- имя-модуля.label = текст пункта меню
- имя-модуля.href = ссылка # относительно базового URL
- logout.redirect = URL перехода при выходе из системы
- milestone - обработка этапов
- stats_provider = DefaultTicketGroupStatsProvider # имя подпрограммы сбора статистики
- milestone-groups - описание группировки заявок (карточек) внутри этапа разработки
(выделенная группа closed и все остальные)
- имя-группы = список-значений-колонки-группировки[,...] # обычно список подходящих состояний;
для одной из групп можно использовать шаблон '*' для всех остальных
- имя-группы.order = номер-группы-в-графике # нумерация с 0?
- имя-группы.query_args = {group=колонка-группировки | order=колонка-сортировки | col=колонка },...
- имя-группы.overall_completion = true | false # truepercentage? метод оценки завершения
- имя-группы.css_class = {open | closed | new}
- имя-группы.label = текст на экране для имени группы
- mimeviewer - подсветка для wiki и репозитория
- enscript_modes = text/x-dylan:dylan:4 # режимы enscript
- enscript_path = enscript # подсветка через enscript
- max_preview_size = байт # файлы большего размера не показываются, можно только загружать
- mime_map = список # элементы списка вида "тип-MIME:суффикс"
- pygments_default_style = trac # цветовая палитра по умолчанию
- pygments_modes = список # элементы списка вида "тип-MIME:режим:качество"
- # php_path = php # для подсветки SilverCity
- # silvercity_modes =
- tab_width = 8
- treat_as_binary = MIME-код[,...] # не подсвечивать
- notification - настройка извещений о действиях с заявками
- admit_domains = # список разрешённых почтовых доменов получателя
- always_notify_owner = {false | true} # извещать владельца
- always_notify_reporter = {false | true} # извещать репортёра
- always_notify_updater = {true | false} # извещать всех писателей?
- email_sender = {SmtpEmailSender | SendmailEmailSender} # имя подпрограммы рассылки извещений
(использовать протокол SMTP или запускать sendmail)
- ignore_domains = # список запрещённых почтовых доменов получателя
- mime_encoding = {none | base64 | qp} # кодировка сообщений (Subject: в той же кодировке?)
- sendmail_path = sendmail # как называется sendmail (должна быть поддержка ключей "-f" и "-i")
- smtp_always_bcc = # список тайно извещаемых о действиях с заявками
- smtp_always_cc = # список открыто извещаемых о действиях с заявками
- smtp_default_domain = почтовый-домен # добавляется к простым почтовым именам
- smtp_enabled = {false | true} # извещать по e-mail
- smtp_from = обратный-почтовый-адрес
- smtp_from_name = имя-отправителя
- smtp_password = пароль-для-SMTP
- smtp_port = 25 # порт
- smtp_replyto = # кто будет получать ответы
- smtp_server = адрес-или-имя-сервера
- smtp_subject_prefix = __default__ # префикс заголовка сообщения, по умолчанию: "[имя-проекта]"
- smtp_user = имя-пользователя-для-SMTP
- ticket_subject_template = $prefix #$ticket.id: $summary # шаблон заголовка сообщения;
доступны переменные env (имя окружения trac), prefix (из smtp_subject_prefix), summary,
ticket (возможно использование полей заявки)
- use_public_cc = {false | true} # получатели CC видят друг друга
- use_short_addr = {false | true} # посылать извещения на почтовые адреса без указания домена
(должен быть добавлен SMTP сервером)
- use_tls = {false | true}
- privatetickets - для расширения privatetickets
- project - описание проекта
- admin = почтовый-адрес-администратора
- admin_trac_url = куда-сообщать-об-ошибках # "." - этот сайт (где кнопка?)
- descr = краткое-описание
- footer = текст-подвала # выравнивание вправо
- icon = common/trac.ico # формат .ico;
если начинается с "site/", то относительно окружение-проекта-trac/htdocs;
если начинается с "common/", то относительно ?;
IE обязательно требует "/favicon.ico"
- name = название-проекта # пробелы и специальные символы не рекомендуются
- url = URL-основного-сайта # включается в письма
- query - параметры отображения запросов поиска заявок (специальный язык запросов)
- default_anonymous_query = status!=closed&cc~=$USER # запрос по умолчанию для неавторизованных пользователей
- default_query = status!=closed&owner=$USER # запрос по умолчанию для авторизованных пользователей;
можно использовать язык запросов или подстроку URL запроса, начиная с query (не вызывается)
- items_per_page = 100 # количество заявок на страницу
- ticketlink_query = ?status=!closed
- report - параметры отображения отчётов по заявкам (SQL запросы)
- items_per_page = 100
- items_per_page_rss = 0 (свобода - это рабство, а 0 - это бесконечность)
- repositories - описание репозиториев (имя репозитория по умолчанию - пустая строка)
- имя-репозитория-для-trac.dir = каталог-репозитория (для subversion можно указать подкаталог)
- имя-репозитория-для-trac.type = svn | hg
- синоним.alias = имя-репозитория-для-trac
- имя-репозитория-для-trac.description = описание выводится на экран при просмотре репозиториев
- имя-репозитория-для-trac.url = корневой URL репозитория
- имя-репозитория-для-trac.hidden - не показывать репозиторий в списке верхнего уровня
- revisionlog - параметры отображения журнала изменений при просмотре репозитория
- roadmap - параметры отображения плана работ (этапы, вехи)
- stats_provider = DefaultTicketGroupStatsProvider # имя подпрограммы группировки статистики
- search - параметры поиска
- default_disabled_filters = { milestone | ticket | changeset | wiki} ... # какие разделы пропустить
- min_query_length = 3 # минимальная длина строки поиска
- sqlite - настройки расширения для работы с sqlite
- svn - настройки расширения для работы с subversion (показываются в быстрых переходах)
- branches = список-путей # какие пути считать ветками (и стволом), можно использовать шаблоны файлов
(не адаптировано к случаю нескольких репозиториев;
а если несколько репозиториев с разными политиками?)
- tags = список-путей
- svn:externals - преобразование svn:externals в ссылки на просмотрщики соответствующих репозиториев
- порядковый-номер = http://сервер/svn/репозиторий http://сервер/trac/проект/browser/репозиторий/$path?rev=$rev
- tickets - настройки для работы с заявками (карточками)
- default_cc
- default_component
- default_description
- default_keywords
- default_milestone
- default_owner
- default_priority
- default_resolution
- default_severity
- default_summary
- default_type
- default_version
- max_comment_size = байт
- max_description_size = байт
- preserve_newlines = {default | false |true} # рассматривать символ перевода строки как команду форматирования
(default - разный для разных версий и истории обновлений!)
- restrict_owner = {false | true} # выдавать список пользователей для выбора ответственного;
в списке только те, кто заходил хотя бы один раз; тормозит?
- workflow = ConfigurableTicketWorkflow # имя подпрограммы, определяющей граф переходов
- ticket-custom - дополнительные поля заявок
- имя-поля = тип # типы полей:
- text (строка); параметры: label, value (по умолчанию), order (место среди полей заявки), format (plain или wiki)
- checkbox (логическое значение); параметры: label, value (0 или 1), order (место среди полей заявки)
- select (выпадающий список); параметры: label, options (список допустимых значений, разделённых '|';
пустой элемент позволяет вводить произвольные значения),
value (по умолчанию), order (место среди полей заявки)
- radio (список); параметры: label, options (список допустимых значений, разделённых '|'),
value (по умолчанию), order (место среди полей заявки)
- textarea (много строк); label, value (по умолчанию), cols, rows,
order (место среди полей заявки), format (plain или wiki)
- имя-поля.параметр = значение
- ticket-workflow - описание возможных переходов состояния заявки при использовании модуля ConfigurableTicketWorkflow
(можно использовать шаблон '*' для списка состоний; заявка создаётся в состоянии "new";
состояние "closed" обязательно (все остальные состояния интерпретируются в отчётах как "open");
в contrib/workflow имеется несколько примеров описания диаграммы состояния:
opensource-workflow.ini (запрос дополнительной информации), enterprise-workflow.ini (этап тестирования);
получение изображения графа переходов: ".../showworkflow .../trac.ini" в trac.pdf (используется graphviz);
после изменения требуется перезапуск apache).
- действие = список-исходных-состояний-через-запятую -> состояние-результат
- действие.name = экранное-имя
- действие.operations = {set_owner_to_self | leave_status | set_owner | del_owner |
del_resolution | set_resolution} # что сделать
- действие.permissions = право-доступа # TICKET_CREATE, TICKET_MODIFY
- действие.default = целое # позволяет сортировать действия в интерфейсе пользователя;
действие с наибольшим номером показывается первым; по умолчанию - 0
- действие.set_owner = список-пользователей # ?
- действие.set_resolution = список-допустимых-решений
- timeline - параметры отображения хронологии
- abbreviated_messages = {true | false} # укорачивать сообщения
- changeset_collapse_events = {false | true} # объединять сообщения о ревизиях от одного автора и с одним комментарием
- changeset_long_messages = {false | true} # вытягивать комментарий ревизии в одну строку
- changeset_show_files = {0 | -1 | число | location} # сколько изменённых файлов показывать в сообщениях о ревизиях
- default_daysback = дней
- max_daysback = дней # -1 - бесконечность
- newticket_formatter = {html | oneliner} # как показывать новые заявки; oneliner - учитывать abbreviated_messages
- ticket_show_details = {false | true} # показывать все изменения в заявках, а не только создание и закрытие
- trac - общие настройки
- auth_cookie_lifetime = секунд # 0 - сбрасывать по концу сессии
- auth_cookie_path = путь # можно указать общий путь для нескольких окружений trac
- authz_file = имя-файла # имя файла с авторизацией subversion
для доступа к репозиторию (для доступа к объектам самого trac см. секцию authz_policy)
- authz_module_name = префикс-репозитория-по-умолчанию
- auto_preview_timeout = 2.0 # частота обновления "WYSIWYG" при редактировании
- auto_reload = {false | true} # перезагружать шаблоны после изменений
- backup_dir = bd # каталог для резервной копии БД
- base_url = входной-URL # используется в качестве базы при относительных адресах
- check_auth_ip = {false | true} # проверять IP адрес пользователя при аутентификации
- database = sqlite:db/trac.db # строка подключения к СУБД
- debug_sql = {false | true} # в журнал на уровне DEBUG
- default_charset = # поставить utf-8
- default_handler = {WikiModule | TimelineModule | RoadmapModule | BrowserModule |
QueryModule | ReportModule | TicketModule} # входная страница
- default_timezone = Europe/Moscow
- genshi_cache_size = 128 # размер кеша шаблонов
- htdocs_location = # каталог со статическими ресурсами
- ignore_auth_case = {false | true} # преобразовывать имена пользователей к строчным символам при вводе
- mainnav = wiki,timeline,roadmap,browser,tickets,newticket,search # разделы главного меню
- metanav = login,logout,prefs,help,about # разделы вспомогательного меню
- mysqldump_path = путь-к-mysqldump
- never_obfuscate_mailto = {false | true} # всегда показывать адреса электронной почты
- permission_policies = список-политик-авторизации # DefaultPermissionPolicy - ограничения доступа по функциям,
LegacyAttachmentPolicy - ?, AuthzPolicy - тонкая настройка прав доступа
- permission_store = DefaultPermissionStore # имя подпрограммы, занимающейся хранением политик
- pg_dump_path = путь-к-pg_dump
- repository_dir = каталог-репозитория # основной репозиторий (для subversion можно указать подкаталог),
см. секцию repositories или панель администратора
- repository_type = svn | hg # основной репозиторий
- repository_sync_per_request = [список,имён,репозиториев] # синхронизовать trac с репозиториями при каждом обращении;
оставить пустым, если используются скрипты subversion
- request_filters = ?
- resizable_textareas = {true | false} # использовать JavaScript для динамического задания размера текстовой области
- secure_cookies = {false | true} # использовать куки при аутентификации только для SSL/TLS соединении
- show_email_addresses = {false | true} # показывать e-mail адреса вместо имён (не работает)
- show_ip_addresses = {false | true} # показывать IP адреса редакторов wiki
- timeout = секунд # максимальное ожидание доступа к БД (0 - бесконечность)
- use_base_url_for_redirect = {true | false} # использовать base_url для перенаправлений
- wiki - настройка wiki
- ignore_missing_pages = { false | true} # подсвечивать ссылки на несуществующие страницы
(не работает)
- max_size = байт
- render_unsafe_content = { false | true} # разрешить использование небезопасных тэгов HTML (script, embed)
- safe_schemes = список-безопасных-схем-URI
- split_page_names = { false | true} # разрешать вставлять пробелы в имена страниц wiki
Имеет развитую систему расширений (plugin), часть из которых (tracopt.*) поставляется в комплекте.
Часть модулей основного комплекта также можно отключать в настройках.
Расширения собираются и систематизируются на сайте trac-hacks (сотни их!).
Поставляются либо в виде отдельного .py файла или .egg пакета (требуется setuptools и права на запись в кеш egg;
сборка egg: "[python ./setup.py compile_catalog -f;] python ./setup.py bdist_egg"),
которые необходимо скопировать в каталог окружение/plugins и перезапустить HTTP сервер,
возможно потребуется включить их из панели администратора и обновить БД: trac-admin каталог-окружения upgrade.
Расширение должно быть адаптировано к версии Trac.
Нельзя использовать разные версии расширений в разных проектах на одном сервере.
Расширения можно устанавливать на уровне системы (с помощью easy_install [--always-unzip]).
Удаление из системы: "easy_install -m имя-расширения";
удалить каталог /usr/lib/python2.4/site-packages/имя-расширения-версия.egg;
перезапустить HTTP сервер. Например (0.12):
макро Poll - вставить результаты голосования и выбор для голосования;
добавляются права доступа POLL_VOTE и POLL_VIEW;
место хранения определяется в секции poll trac.ini переменной base_dir;
для каждого вопроса создаётся файл с именем, сделанном из текста вопроса;
установка сборкой и копированием egg;
нельзя использовать не ASCII символы в вопросе (в ответах можно)
расширения при работе с заявками
- BatchModifyPlugin - изменение нескольких заявок сразу;
требуются права TICKET_BATCH_MODIFY;
позволяет пометить некоторые заявки из результатов запроса для группового изменения;
можно отключить извещения и установка времени изменения заявки;
секция batchmod в trac.ini:
- fields_as_list = keywords
- list_separator_regex = [,\s]+ # разделитель списка
- list_connector_string = , # разделитель списка после обработки
- CcSelectorPlugin - выбор получателей CC из списка
(выскакивающее окно)
- CloneTicketPlugin - клонирование заявки
- GridModifyPlugin - редактирование заявок
в таблице отчёта или запроса; требуются права TICKET_GRID_MODIFY;
работает и для пользовательских полей;
секция gridmodify в trac.ini содержит переменную fields перечисляющее
допустимые к модификации поля заявки через запятую (пробелы недопустимы)
- GridFlowPlugin - редактирование заявок
в таблице отчёта или запроса; требуются права TICKET_GRID_WORKFLOW;
проблема с кодировкой; для запросов не работает
- TicketBackLinksMacro макро TicketBackLinks
имеет параметром номер заявки и выводит список страниц, ссылающихся на указанную заявку;
перед установкой выровнять return в macro.py;
не работает
- TracBacksPlugin - при написании в комментариях к заявке
ссылки на другую заявку, в той заявке появляется обратная ссылка; не действует на заявки, существовавшие
до установки расширения; после удаления карточки со ссылкой обратная ссылка остаётся
- TracTicketTemplatePlugin - позволяет
администратору описывать шаблон (wiki форматирование) поля Description заявки в зависимости от типа заявки;
можно задать шаблон default для неописанных типов; пользователи могут задавать свои шаблоны;
шаблон может быть параметризовал (вместо '%(имя-параметра)s' подставляется значение параметра имя-параметра из URL;
требуется simplejson (пакет python-simplejson);
требуется обновление БД (trac-admin окружение upgrade);
при установке добавить секцию русского перевода и "python setup.py compile_catalog -f";
параметры в секции tickettemplate trac.ini:
- enable_custom = true # пользователи смогут создавать свои шаблоны
- field_list = summary, description, reporter, owner, priority, cc, milestone, component,
version, type, keywords # какие поля будут храниться в личных шаблонах
- WhiteboardPlugin - представление списка заявок
в виде листков на доске; переключаемо; смена статуса перетаскиванием; не работает
- ChildTicketsPlugin - возможность создавать подзадачи,
с ограничением на типы родительских задач и подзадач, с описанием формата таблицы подзадач;
не работает безо всяких сообщений;
необходимо
- SubticketsPlugin - возможность создавать подзадачи;
используется дополнительное поле parents;
возможен конфликт с будущей встроенной подсистемой зависимых задач;
при создании и редактировании карточки появляется дополнительное поле parents (содержит номер родительской задачи);
необходимо
- MasterTicketsPlugin - позволяет задавать зависимости
между задачами и строить граф зависимости;
удаление записи комментария о добавлении блокировки приводит БД в неустойчивое состояние;
ошибки построения графа при наличии русских букв (проблема в graphiz);
ошибки при работе query;
- установить graphviz (не требуется GraphvizPlugin)
- установить gs (у меня без gs не заработало построение графа, ссылок нет в любом случае)
- установить MasterTicketsPlugin
- trac-admin окружение upgrade
- включить расширение в секции component в trac.ini: mastertickets.* = enabled
- используются дополнительные поля blocking и blocked_by - им можно задать текст описания
- конфигурируется в секции mastertickets в trac.ini
- dot_path = путь-к-утилите-dot
- gs_path = путь-к-утилите-ghostscript
- use_gs = { false | true}
- CannedResponsesPlugin - позволяет запрограммировать
предопределённые действия над заявками: смена состояния и решения, добавление комментария
- DuplicateTicketSearchPlugin - при
заполнении краткого описания новой заявки всплывают описания похожих заявок;
требует XmlRpcPlugin
- OverrideEditPlugin - разрешение конфликтов при
одновременном изменении заявки
- PrivateTicketsPlugin - ограничение
доступа только теми заявками, к которым пользователь имеет отношение;
права доступа: TICKET_VIEW_REPORTER, TICKET_VIEW_CC, TICKET_VIEW_OWNER, TICKET_VIEW_SELF (все предыдущие вместе),
TICKET_VIEW_REPORTER_GROUP (для членов той же группы, что и заявитель), TICKET_VIEW_CC_GROUP,
TICKET_VIEW_OWNER_GROUP, TICKET_VIEW_GROUP (предыдущие 3 вместе);
необходимо добавить PrivateTicketsPolicy перед DefaultPermissionPolicy в permission_policies;
параметры в секции privatetickets trac.ini: group_blacklist ("anonymous, authenticated")
- ReadOnlyTicketPlugin - даёт возможность
запретить изменять заявку пользователям без права TICKET_ADMIN;
для включения необходимо добавить ReadOnlyTicketFilter перед DefaultPermissionPolicy в permission_policies;
управляется переменной ticket_list в секции readonlyticket в trac.ini, которая содержит
список номеров неизменяемых заявок через запятую
- TicketSubmitPolicyPlugin - позволяет
установить для заявки правила заполнения в соответствии с типом заявки (или другим полем):
список обязательных и недопустимых полей
- TracKeywordsPlugin - позволяет задать
список ключевых слов для выбора при заполнении заявки
- TracReportInplaceEditPlugin -
редактирование заявок в таблице отчёта (см. GridModifyPlugin); права RIPE_EDIT
- TracTicketChangelogPlugin -
автоматическое построение таблицы ревизий, относящихся к данной заявке; комментарий к ревизии
должен начинаться с #номер-заявки; секция ticketlog trac.ini позволяет
задать шаблон переменной log_pattern (\s*#%s+\s+.*); требуется simplejson; права TICKETLOG_VIEW
- TicketExtPlugin - позволяет
администратору описывать шаблон (wiki форматирование) поля Description заявки
в зависимости от типа заявки (см. TracTicketTemplatePlugin);
дополнительные поля в зависимости от типа заявки (см. CondFieldsPlugin);
требуется CustomFieldAdminPlugin
- TicketTeamDispatcherPlugin - назначение
заявки не одному человеку, а группе (дополнительное поле)
расширения при работе с хронологией
- BranchTimelinePlugin - позволяет администратору задать
ветки репозитория, между которыми будут выбирать пользователи при просмотре хронологии
расширения при работе с репозиториями
- RepoSearchPlugin - поиск в репозитории;
требуются права REPO_SEARCH;
поиск только в репозитории по умолчанию;
для блокировки используется один файл, проблемы с несколькими проектами;
имеется утилита update-index, которой можно предварительно заполнить индекс поисковой системы;
параметры в секции repo-search trac.ini:
- include = список-шаблонов-путей-файлов-через-двоеточие # без переднего '/',
а если несколько репозиториев?
- exclude = список-шаблонов-путей-файлов-через-двоеточие
- index = каталог-для-хранения-индекса # создать предварительно, долго заполняется при первом поиске
(долго - это очень деликатное выражение - заполняется неделями;
при добавлении ревизии обновление индекса требует несколько часов)
- CodeReviewPlugin - добавление комментариев к ревизиям
(проверяющий, дата, текст, оценка)
- PeerReviewPlugin - добавление комментариев к файлам
(проверяющий, утверждающий, дата, текст, статус, оценка);
ведение списка проверок: создание, назначение автора и проверящих; список своих проверяемых текстов;
список текстов, которые назначены нам на проверку
- RevtreePlugin - построение дерева ревизий;
только репозиторий по умолчанию; предполагается 1 проект в репозитории; только subversion;
необходимо прописать все ветви (требуется жёстка дисциплина при создании);
стволы перечисляются через запятую, а не пробел
расширение поиска
- SearchAllPlugin - поиск по всем trac окружениям на сервере;
права доступа - SEARCHALL_VIEW; параметры в секции searchall trac.ini:
- include_projects=список-окружений-через-запятую
- exlude_projects=список-окружений-через-запятую
статистика
- TracMetrixPlugin - суммарная статистика
о проекте; требуется python-matplotlib (python-nose, python-dateutil, atlas, numpy);
после установки необходимо обновить БД (trac-admin окружение upgrade), права доступа к окружение/cache
и перезапустить HTTP сервер;
в /usr/lib64/python2.4/site-packages/matplotlib/mpl-data/matplotlibrc записать строку "interactive : False";
генерирует страницу, которая тянет скрипты и .swf с Yahoo!
- TracStatsPlugin - общее количество страниц, ревизий, заявок;
права доступа - STATS_VIEW; нет адаптации к нескольким репозиториям в окружении;
ошибка в web_ui.py строка 144 (KeyError:);
ошибка Genshi UnicodeDecodeError
- TracTicketStatsPlugin - также
тянет скрипты и swf с Yahoo!
управление доступом
управление извещениями
- NeverNotifyUpdaterPlugin - письма об изменении
заявок перестанут приходить автору заявок
- AnnouncerPlugin - полная замена системы извещений
(предполагается официальная замена в будущем); изменения в БД;
отслеживает изменения в заявках, страницах и вложениях;
позволяет пользователям выбирать типы событий, от которых они будут получать извещения;
пользователь также может присоединиться к одной из групп с предопределёнными правилами
- WatchlistPlugin 0.5 - ведение для каждого
пользователя списка страниц и заявок, об изменении которых он хотел бы знать (это не рассылка!);
требует обновления БД (перед удалением расширения восстановить её;
собрать и положить в plugins, разрешить tracwatchlist.* в components и перезапустить httpd;
может работать совместо с расширением AnnouncerPlugin); появляется кнопка в меню
- WikiNotificationPlugin 0.2.2 - позволяет
пользователю получать извещения при изменении интересующих его страниц (кроме своих изменений);
не работатет(AttributeError: 'list' object has no attribute 'replace');
проект закрыт в пользу AnnouncerPlugi; клон;
в меню появляется выбор "[Un-]Watch Page";
собрать и положить в plugins, разрешить wikinotification.* в components и перезапустить httpd;
настройки в секции wiki-notification:
- redirect_time = 5
- smtp_always_bcc =
- smtp_always_cc =
- smtp_from = trac.wiki@localhost
- from_name = имя-проекта
- use_public_cc = false
- attach_diff = false # изменения не в теле письма, а вложением
- subject_template = $prefix $page.name $action
- banned_addresses =
DiscussionPlugin - форум
ResourceReservationPlugin - специализированная
страница wiki и пункт меню для доступа к ней, позволяет вести календарь резервирования ресурсов;
модифицирует схему БД
TagsPlugin - назначение меток (tags) страницам wiki и заявкам;
поиск по /tags (/tags/?q=выражение) и tag:метка (tagged:выражение) и макро ListTagged и TagCloud;
выражения поддерживают операторы И, ИЛИ, НЕ, область (realm:wiki), вложенность;
требует обновления БД; права доступа TAGS_*; параметры в секции tags trac.ini:
ignore_closed_tickets и ticket_fields (keywords)
MailToTracPlugin - обработка приходящих писем
PdfRendererPlugin - извлекать и показывать текст из вложенных файлов в формате PDF
WikiExportPlugin - экспорт wiki
c помощью OpenOfiice.org в PDF, ODT и DOC;
требуются пакеты openoffice.org-javafilter, openoffice.org-headless, openoffice.org-pyuno,
openoffice.org-langpack-ru, python-imaging, python-BeautifulSoup, java-1.6.0-openjdk;
в exportplugin/openoffice.py необходимо добавить путь поиска модуля uno:
'sys.path.append("/usr/lib64/openoffice.org/program")';
для понимания происходящего прочитать
руководство по написанию макросов в OOo на питоне;
закомментировать все "self.cursor.ParaStyleName = ..." (старая версия OOo?);
запуск OpenOffice в фоновом режиме (если запускать ООo с графической мордой, то он падает):
ooffice "-accept=socket,host=localhost,port=8100;urp;" -headless
имена файлов выдаются равными именам страниц wiki, причём без суффиксов;
временные файлы хранятся (и не удаляются!) в /tmp/wikiexport-cache;
фактически простой текст без оформления;
необходимо избавиться от испанского в настройках
[openOffice-exporter]
user = ...
psswrd = ...
host = localhost
port = 8100
para-styles = Text Body, Default, Heading 1, Heading 2, Heading 3, Heading 4, Heading 5,
Heading 6, Heading 7, Heading 8, Heading 9, Heading 10
list-styles = List 1, Numbering 1, Numbering 2, Numbering 3
char-styles = Default, Source Text, Internet Link
isPersonalizeAttribute = False
TracWikiToPdfPlugin - вывод страниц wiki в формате PDF;
требуется htmldoc, который не понимает Unicode; позволяет комбинировать несколько страниц с использованием шаблона
(требуются права WIKI_ADMIN для доступа к админке);
htmldoc не понимает utf-8 ни на входе, ни на выходе,
сборка r1629 и r1666 не удалась - ждём htmldoc-1.9;
параметры в секции wikitopdf или wikitopdf-admin или wikitopdf-page trac.ini:
- base_dir = путь-к-DocumentRoot
- tmp_dir = /tmp/wikitopdf
- trac_uri = корень-trac
- titlefile = имя-файла # только Latin-1
- link = URI-проекта-trac
- folder_name = имя-проекта-trac
- size = A4
- right = 1.5cm
- left = 1.5cm
- top = 1.5cm
- bottom = 1.5cm
- no-links = None # ?
- toctitle = Summary # ?
- numbered = None # ?
- linkstyle = plain # ?
- header = l # ?
- footer = .r1 # ?
- logoimage = имя-файла-PNG
- charset = koi8-r
TracWikiPrintPlugin - преобразование wiki страниц
в PDF или HTML; требуется установка PIL 1.1.6 (Python Imaging Library, пакет python-imaging 1.1.5),
pyPDF (установка 1.12 через easy_install),
HTML5lib (установка 0.90 через easy_install),
ReportLab
(
установка 2.5 через easy_install, "Failed to download standard T1 font curves" и множество других ошибок;
загрузить шрифты
1.21 из FC6 староват;
),
xhtml2pdf/PISA (3.0.33 через easy_install,
версия 3.0.29 имеет ошибку в TOC);
даже не показывается в списке расширений безо всяких сообщений об ошибке
CombineWikiPlugin - вывод страниц wiki в формате PDF;
требуется htmldoc, который не понимает Unicode
В поставку входит автономный веб-сервер tracd (нет поддержки SSL),
при запуске необходимо указать список каталогов окружения.
Статические страницы помещаются в каталог-окружения/htdocs и доступны по URI-проекта/chrome/site/....
Ключи:
- {--port= | -p} номер-порта
- {--hostname= | -b} имя-хоста
- --basic-auth=basename-каталога-окружения,файл-htpasswd,realm
# задание аутентификации Basic с помощью htpasswd файла в формате Apache
- {--auth= | -a} basename-каталога-окружения,файл-htpasswd,realm
# задание аутентификации Digest с помощью htpasswd файла в формате Apache
- --protocol={http | scgi | ajp}
- --http10 (по умолчанию)
- --http11
- --unquote | -q # раскавычивать PATH_INFO (для AJP)
- {--env-parent-dir= | -e} каталог-окружений
- {--single-env | -s} # не показывать список каталогов окружения на входной странице
- --base-path корневое-URI # вместо "/"
- --daemonize
- --pidfile имя-файла
- --umask маска-десятичная
- --auto-reload | -r # перезапускаться при изменении trac
Trac поддерживает следующие интерфейсы с Apache
(команда deploy утилиты trac-admin генерирует набор скриптов для cgi-bin и дополнений в htdocs):
- CGI (самый медленный)
- FastCGI
(модуль mod_fastcgi или mod_fcgid (предпочтительнее);
скрипт trac.fcgi; быстр как mod_python, позволяет использовать SuEXEC)
- mod_wsgi (скрипт trac.wsgi; быстрее mod_python)
- mod_python (официально проект mod_python закрыт Apache Software Foundation 10 июня 2010);
позволяет не открывать соединение с СУБД на каждый запрос, что значительно уменьшает нагрузку на сервер;
все приложения работают под одним uid/gid;
при изменении в коде необходимо перезапускать Apache;
в RHEL поставляется в виде пакета mod_python;
определить на виртуальном хосте виртуальную папку /trac:
LoadModule python_module modules/mod_python.so
# для SSL сервера
# SetEnv HTTPS 1
<Location "/trac"> # не пытайтесь указать корень
SetHandler mod_python
PythonInterpreter main_interpreter # или trac?
PythonHandler trac.web.modpython_frontend
# /data/trac содержит набор окружений trac
PythonOption TracEnvParentDir /data/trac
# оглавление набора окружений
# PythonOption TracEnvIndexTemplate имя-файла-HTML
# /data/trac/project содержит одно окружение trac
# PythonOption TracEnv /data/trac/project
# должно совпадать с именем виртуальной папки
PythonOption TracUriRoot /trac
# ?
# PythonOption TracTemplateVars ключ,значение ...
# формат даты
PythonOption TracLocale ru_RU.UTF8
# SetEnv LC_TIME "ru_RU"
# сюда будут разворачиваться расширения Trac
PythonOption PYTHON_EGG_CACHE /data/trac/egg-cache
# PythonDebug on
</Location>
- AJP (для IIS)
Задать правила аутентификации для папки, в данном случае Basic:
<LocationMatch "/trac/[^/]+/login">
AuthType Basic
AuthName "Trac Environment"
# можно совместить с аналогичным файлом apache для subversion,
# но надо учитывать, что клиент svn хранит пароли в открытом виде
AuthUserFile "файл с именами и паролями в формате htpasswd"
Require valid-user
</LocationMatch>
Настройка SELinux:
chcon -R -t -h httpd_sys_content_t /data/trac
Установить и настроить subversion 1.6.12 (из пакетов от dag, FSFS).
Установить и настроить Apache 2.2.3 (из пакетов, mod_python.x86_64).
Заполнить репозиторий subversion.
Установить пакеты trac (/etc/httpd/conf.d/trac.conf,
/usr/bin/trac-admin и trac-admin(1), веб сервер /usr/sbin/tracd и tracd(8), /usr/share/doc/trac-0.10.5/, /usr/share/trac/,
/var/www/cgi-bin/trac.cgi, /var/www/cgi-bin/trac.fcgi) от dag
(пересобрать на хосте с установленными пакетами python-setuptools, python-genshi (новая работа с шаблонами, 0.6 от dag),
python-sqlite, pytz, babel и python-babel).
Тянет python-setuptools, python-genshi (новая работа с шаблонами, 0.6 от dag),
python-clearsilver (старая работа с шаблонами).
Интерфейс python с subversion входит в пакет subversion.
Для использования русского языка в меню требуются пакеты babel и python-babel.
Для осмысленных имён часовых поясов требуется pytz.
Для интерфейса с MySQL требуется MySQL-python (в RHEL5 версия 1.2.1, а требуется 1.2.2, не заработал).
Для интерфейса с SQLite требуется python-sqlite (ошибочно тянется python-sqlite2).
Для тонкой настройки прав доступа требуется python-configobj.
Для подсветки синтаксиса требуются пакеты enscript (включить в секции mimeviewer и
в настройке дополнений tracopt.mimeview.enscript.*)
и python-pygments (для verilog: добавить из
будущей версии
hdl.py в lexers/, отредактировать lexers/_mapping.py;
генерация байт-кода: "python -O /usr/lib64/python2.4/py_compile.py файл"), где взять SilverCity?
Для каждой подсистемы создать каталог, например:
/data/svn для subversion, /data/trac для Trac (здесь хранятся вложения заявок и wiki).
В каждом из них создать подкаталоги для каждого проекта.
Настроить trac для каждого проекта и установить полные права доступа для администратора:
trac-admin /data/trac/имя-проекта initenv
имя-проекта
sqlite:db/trac.db # соединение с СУБД
Настроить доступ к репозиториям в trac.ini
[trac]
repository_type = svn
repository_dir = каталог-svn1
[repositories]
имя1.dir = каталог-svn1
имя1.description = описание1
имя1.type = svn
имя1.url = http://имя-хоста1/svn/имя1
имя2.dir = каталог-svn2
имя2.description = описание2
имя2.type = svn
имя2.url = http://имя-хоста2/svn/имя2
.alias = имя1
.hidden = true
Настроить скрипты расширения subversion post-commit и post-revprop-change
для всех репозиториев.
Определить на виртуальном хосте виртуальную папку /trac с указанием реального каталога,
содержащего окружения trac (/etc/httpd/conf.d/trac.conf):
<Location "/trac">
SetHandler mod_python
PythonInterpreter main_interpreter
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir /data/trac
PythonOption TracUriRoot /trac
PythonOption TracLocale ru_RU.UTF8
PythonOption PYTHON_EGG_CACHE /tmp/egg-cache
</Location>
<LocationMatch "/trac/[^/]+/login">
AuthType Basic
AuthName "Trac Environment"
AuthUserFile "/etc/httpd/conf/svn.htpasswd"
Require valid-user
</LocationMatch>
Настройка SELinux:
chcon -R -t -h httpd_sys_content_t /data/trac
Добавить пользователей
htpasswd -c -m /etc/httpd/conf/svn.htpasswd имя-администратора
Установить полные права доступа для администратора:
trac-admin /data/trac/имя-проекта permission add имя-администратора TRAC_ADMIN
Добавить необходимые расширения в /data/trac/имя-проекта/plugins и обновить БД
trac-admin /data/trac/имя-проекта upgrade
trac-admin /data/trac/имя-проекта wiki upgrade
Настроить /data/trac/имя-проекта/conf/trac.ini
Установить права доступа к файлом с учётом настроек Apache (и svn).
Перезапустить Apache.
Установить и настроить subversion 1.6.12 (из пакетов от dag, FSFS).
Установить и настроить Apache 2.2.3 (из пакетов, mod_python.x86_64):
загрузить модули dav_module и dav_fs_module
Заполнить репозиторий subversion.
Установить пакеты trac (/etc/httpd/conf.d/trac.conf,
/usr/bin/trac-admin и trac-admin(1), веб сервер /usr/sbin/tracd и tracd(8), /usr/share/doc/trac-0.10.5/, /usr/share/trac/,
/var/www/cgi-bin/trac.cgi, /var/www/cgi-bin/trac.fcgi),
trac-iniadmin-plugin (редактирование конфигурационных файлов через API, не используется?),
trac-peerreview-plugin,
trac-privateticketsplugin,
trac-ticketdelete-plugin,
trac-webadmin (встроен в версии 0.11), MySQL-python.
Тянет python-clearsilver (работа с шаблонами), python-setuptools (для trac-ticketdelete-plugin),
python-sqlite[2], интерфейс python и subversion входит в пакет subversion.
Для каждой подсистемы создать каталог, например:
/data/svn для subversion, /data/trac для Trac (здесь хранятся вложения), /data/files для WebDAV.
В каждом из них создать подкаталоги для каждого проекта.
В /data/files/имя-проекта создать подкаталоги public, private и images.
Настроить trac для каждого проекта
(производится индексация репозитория - долго, но ни нагрузки на ЦП, ни ожидания в/в - блокировки SQLite?):
trac-admin /data/trac/имя-проекта initenv
имя-проекта
sqlite:db/trac.db # соединение с СУБД
svn # тип репозитория
/data/svn/имя-проекта # путь к репозиторию (локальный доступ)
/usr/share/trac/templates # каталог шаблонов
trac-admin /data/trac/имя-проекта
permission remove anonymous WIKI_CREATE WIKI_MODIFY BROWSER_VIEW
permission add authenticated WIKI_ADMIN BROWSER_VIEW MILESTONE_ADMIN
quit
Установить права доступа к файлом с учётом настроек Apache (и svn).
Определить на виртуальном хосте виртуальную папку trac (CGI) с указанием реального каталога:
ScriptAlias /trac /var/www/cgi-bin/trac.cgi
<Location "/trac">
SetEnv TRAC_ENV_PARENT_DIR "/data/trac"
</Location>
<LocationMatch "/trac/[^/]+/login">
AuthType Basic
AuthName "Trac Environment"
AuthUserFile "файл с именами и паролями от svn"
Require valid-user
</LocationMatch>
Определить на виртуальном хосте виртуальную папку files (WebDAV):
Alias /files /data/files
<Location /files>
DAV On
AuthType Basic
AuthName "Trac Files"
AuthUserFile "файл с именами и паролями от svn"
Require valid-user
</Location>
<LocationMatch ^/files/[^/]+/(images|public)/>
<LimitExcept GET OPTIONS>
Require valid-user
>/LimitExcept>
</LocationMatch>
Перезапустить Apache.
trac-peerreview-plugin (/usr/share/doc/trac-peerreview-plugin-0.10/README.txt):
добавить на панель навигации кнопку в trac.ini:
mainnav = wiki,timeline,roadmap,browser,peerReviewMain,tickets,newticket,search
- от версии 0.11.7 до версии 0.12
- i18n (Babel) и l10n (русский есть)
- несколько репозиториев разного типа могут быть привязаны к одному серверу trac
- автоматический предпросмотр при редактировании wiki
- расширения форматирования wiki (таблицы)
- улучшения поиска (поиск в полях времени, OR)
- фильтрация timeline
- возможность персональной настройки языка, темы подсветки синтаксиса
- от версии 0.10.5 до 0.11.7
- возможность описать список состояний и переходов (workflow) для задач (TracWorkflow)
- тонкая настройка авторизации
- улучшение подсветки синтаксиса с помощью Pygments вместо SilverCity
- возможность персональной настройки часового пояса, горячих клавиш
- улучшение просмотра репозитория subversion: динамическое изменение подокон,
ссылки на ветви и версии, поддержка svn:externals
- webadmin встроен в trac
- переход от библиотеки работы с шаблонами Clearsilver на Genshi
(расширения, основанные на Clearsilver, ещё работают в 0.12), ожидается переход на Jinja2 в 0.13
- предупреждение о конфликте при одновременном изменении wiki и заявок
- возможность сравнить версии описания заявки
- к вехе (milestone) можно привязать вложения
- настройка меню навигации
- разбиение результатов запросов на страницы
- можно сохранять настраиваемые запросы как отчёты
- иерархия страниц wiki
- форматирование wiki: относительные ссылки, div, span
- поиск в текстовых полях
- совместимость с Python 2.6
- поддержка svn:mergeinfo
- [mimeview] treat_as_binary
|
Bog BOS: Trac - система управления заданиями
|
Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru