Последнее изменение файла: 2018.01.20
Скопировано с www.bog.pp.ru: 2023.10.01
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:
Относящиеся к проекту trac данные и файлы настройки хранятся
в отдельном каталоге (environment, окружение).
Требуются права на запись для веб-сервера (Apache или tracd).
Также требуется доступ на чтение к репозиториям subversion (и на запись, если репозиторий в формате BDB).
Создаётся командой initenv утилиты trac-admin.
Структура файлов:
attachments/ - вложенные файлы заявок (ticket/ - отдельный каталог для каждой заявки,
wiki/ - отдельный каталог для каждой страницы)
БД д.б. в кодировке utf8 и с сортировкой utf8_bin с таблицами типа InnoDB (используются транзакции)
CREATE DATABASE имя-БД DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
GRANT ALL ON имя-БД .* TO имя-пользователя@trac-хост IDENTIFIED BY 'пароль';
Подсистема wiki позволяет просматривать, создавать и редактировать страницы текстов:
иерархия страниц, свой язык форматирования, предпросмотр,
хранение истории и откат изменений, индекс по имени и дате изменения, поиск.
В качестве языка форматирования используется подмножество Wiki Creole.
Тот же язык форматирования используется при работе с заявками, комментариями с ревизиям, этапам работ и отчётам,
что позволяет единообразным способом форматировать текст и обеспечивать межмодульные ссылки.
Для создания страницы необходимо создать ссылку на неё
(если имя страницы в формате CamelCase, то достаточно поискать его),
перейти по этой ссылке и отредактировать содержимое.
Страницы могут быть созданы из шаблонов, имена которых показываются в открывающемся списке
(шаблон - любая страница, имя которой начинается с "PageTemplates/").
Ссылки на ещё не существующие страницы выделяются серым цветом и знаком вопроса
(отключается ignore_missing_pages в секции wiki trac.ini).
При переименовании страницы предлагается создать ссылку на старом месте.
Удаление страницы и удаление последней версии откатить нельзя (сведения о странице исчезают даже из хронологии).
Рекомендуется выбирать имена страниц в формате CamelCase
(склеивается несколько слов с прописными первыми буквами, допускаются латинские и русские буквы, символ '/'),
ссылки на такие страницы создаются автоматически при вставке имени в текст
(split_page_names в секции wiki trac.ini позволяет автоматически вставлять пробелы;
не работает).
Имена страниц могут содержать пробелы (необходимо заключать в кавычки).
Язык форматирования (квадратные скобки в этой главе являются частью синтаксиса):
жирный шрифт - обрамление текста слева и справа тремя апострофами или двумя звёздочками
курсив - обрамление текста слева и справа двумя апострофами или двумя косыми
подчёркивание - обрамление текста слева и справа символами подчёркивания
зачёркивание - обрамление текста слева и справа двумя тильдами
заголовок - обрамление текста слева и справа символами равенства; уровень заголовка определяется
числом символов равенства; для каждого заголовка автоматически генерится якорь, на который можно сослаться
верхний индекс - обрамление текста слева и справа символами '^'
нижний индекс - обрамление текста слева и справа двумя запятыми
конец строки - "[[BR]]" или "\\"
конец параграфа - пустая строка
горизонтальная линия - "----"
строка списка - "* " или "- " в начале строки
строка нумерованного списка - число (нумерация с этого числа) или 'i' (римская нумерация) или
другая латинская буква (нумерация с этой буквы), точка и пробел в начале строки;
текст не может быть пустым
строка вложенного списка - то же самое, но с отступом от начала строки
строка списка определений - пробел, термин, ":: ", определение
неформатируемый текст шрифтом равной ширины - обрамление текста слева и справа обратными апострофами
или помещение внутрь тройных фигурных скобок (скобки на отдельных строках);
не спутать с вызовом процессора!
неформатируемый элемент - предваряется символом '!'
выделение цитат на отдельной строке - текст с отступом
цитаты диалога - нужное количество символов '>' в начале строки
строка таблицы - ячейки разделяются "||", в начале и конце строки также ставятся "||";
пустая ячейка будет слита со следующей (если слияние не требуется, то вставьте хотя бы пробел);
выравнивание текста задаётся примыканием к стенке ячейки
установка якоря - "[=#имя-якоря текст якоря]"
ссылки
макросы
вызов процессора
Типы ссылок (можно явно указать версию страницы, добавив "@номер-версии";
можно сделать ссылку внутрь страницы, добавив "#имя-якоря"; если имя объекта в ссылке содержит пробелы, то его необходимо
заключить в кавычки или апострофы, кроме ссылок в форматах с двойными квадратными скобками):
автоматически создаются для имён в формате CamelCase
[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 - самый верхний)
[[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-процессорами.
Результат работы процессора в момент вызова подставляется вместо вызова процессора по имени,
перед именем строка "{{{#!", далее параметры в формате ключ=значение, далее обрабатываемый текст, затем "}}}".
Обрабатываемый текст также может содержать вызов процессора.
Встроенные процессоры:
default - неформатированный текст
comment - не выводить ничего, позволяет делать комментарии
html - позволяет вставить самодостаточный (well-formed) HTML код
div - позволяет задать с помощью параметров class (встроенные классы important, wikipage, compact;
можно доложить в site/style.css) и style формат последующего 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, для ошибок - от нужной версии), имя ветки можно образовать из номера заявки
внести изменения, оттестировать
слить изменения в основной ствол, указав в журнале номер заявки, ветку можно удалить
закрыть заявку, указав новер ревизии после слияния
Модуль работы со стратегическим планом (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):
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 имя }
Конфигурационный файл 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) или только загружать
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?
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 = описание выводится на экран при просмотре репозиториев
min_query_length = 3 # минимальная длина строки поиска
sqlite - настройки расширения для работы с sqlite
extensions = имя-файла
svn - настройки расширения для работы с subversion (показываются в быстрых переходах)
branches = список-путей # какие пути считать ветками (и стволом), можно использовать шаблоны файлов
(не адаптировано к случаю нескольких репозиториев;
а если несколько репозиториев с разными политиками?)
tags = список-путей
svn:externals - преобразование svn:externals в ссылки на просмотрщики соответствующих репозиториев
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} # что сделать
действие.default = целое # позволяет сортировать действия в интерфейсе пользователя;
действие с наибольшим номером показывается первым; по умолчанию - 0
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):
навигация
MenusPlugin - иерархическое меню;
список обрабатываемых секций меню указывается в секции menu-custom в trac.ini
в опции managed_menus ("mainnav,metanav");
настройки в уже существующей секции mainnav и metanav в trac.ini;
можно создавать свои модули; атрибуты:
имя = enabled
имя.hide_if_no_children = 1
имя.href = URL
имя.label = текст
имя.order = порядковый-номер
имя.parent = верхний-элемент # top означает, что эта кнопка на самом верху
имя.path_info = строка # показывать кнопку только, если текущая страница совпадает со строкой
GroupBasedRedirectionPlugin -
входная страница в зависимости от группы; установить GroupBasedRedirection как default_handler;
создаётся виртуальная страница "/redirect", которая будет перенаправляться на base_url из настроек;
настройки в секции group-based-redirection trac.ini:
base_url = локальный-URL # %s заменяется на имя группы
blacklist = список-через-запятую # anonymous и authenticated всегда здесь
PermRedirectPlugin - перенаправление на страницу
аутентификации при недостатке прав
расширения при работе с wiki
NoteBoxPlugin - макрос NoteBox, рисующий прямоугольник с картинкой
и текстом; первый параметр - тип сообщения (warn, tip, note); второй параметр - текст сообщения
(после первого параметра обязательно пробел, запятые в тексте недопустимы)
- между метаменю и меню
будут показываться последние просмотренные страницы ("хлебные крошки");
настройки в секции breadcrumbs trac.ini:
ignore_pattern = регулярное-выражение
max_crumbs = 6
paths = /wiki*,/ticket*,/milestone* # список регулярных выражений для URL, которые надо добавлять в
"хлебные крошки"
TracWysiwygPlugin - WYSIWYG редактор wiki
(режим редактирования текста на языке форматирования остаётся)
WantedPagesPlugin - список несуществующих страниц,
на которые есть автоматические ссылки; имя макроса - WantedPages;
параметр show_referrers вызывает вывод ссылающихся страниц;
неадекватно реагирует на имена якорей
(в списке оказываются несколько десятков якобы несуществующих ссылок из документации Trac);
WARNING: Executing pre-0.11 Wiki macro
WikiIncludePlugin - вставить страницу в текущую;
расширение не регистрируется (версия с заплатками под 0.11)
макро TOC - построение оглавления для группы страниц
с разнообразными настройками в виде макро TOC;
в качестве позиционных параметров передаются имена страниц (шаблоны допускаются);
titleindex - вывести имена и заголовки страниц;
notitle - не выводить заголовки страниц;
sectionindex - вывести имена и заголовки страниц в подкаталоге;
heading=заголовок; noheading - не выводить заголовок;
depth=максимальная-глубина-заголовков;
inline - выводить оглавление внутри текста, вместо выделения его справа
BackLinksMacro - макро BackLinks имеет
параметром имя страницы (по умолчанию - текущая страница) и выводит список ссылок на неё
макро Components - вставить список компонентов
со ссылками на страницы описаний и заявки, в качестве параметра можно указать начальную часть имени
требуемых компонент (regex?); устанавливается копированием файла в окружение/plugins/
макро UserStats - вставить таблицу со списком сотрудников
и датой последнего посещения, со ссылками на заявки типа task;
устанавливается копированием файла в окружение/plugins/
GraphvizPlugin - рисование диаграмм
(примеры)
с использованием graphviz;
устанавливается wiki процессор #!graphviz[.{dot|neato|twopi|circo|fdp}][/{png|gif|jpg|svg|svgz}];
требуется graphviz и librsvg2;
русские буквы несовместимы с URL - Genshi UnicodeDecodeError;
секция graphviz в trac.ini:
cache_dir = имя-каталога
out_format = {png|gif|jpg|svg|svgz}
processor = {dot|neato|twopi|circo|fdp}
png_antialias = {false | true}
default_{graph|node|edge}_атрибут = значение
{{{
#!graphviz
digraph G {
Go [label="ходи" fontcolor=red]
Here [fontcolor=green label="Сюда"]
Here -> Go
}
}}}
TracTicketDepgraphPlugin - макро DepGraph
для построения графа зависимости между задачами; требует расширений MasterTicketsPlugin и GraphvizPlugin;
включить расширение в секции component в trac.ini: depgraph.* = enabled;
перед сборкой сделать "touch depgraph/htdocs/css/test.css";
опциональные параметры DepGraph: номер задачи и глубина
макро WikiTicketCalendar - вставить календарь
со ссылками на заявки и этапы;
секция wikiticketcalendar в trac.ini
с переменными ticket.due_field.name (=due_close) и ticket.due_field.format (=%y-%m-%d);
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0
(httpd.conf: PythonOption TracLocale ru_RU.UTF8); ссылок на заявки нет;
параметры (имена ключей приведены в скобках):
год (* - текущий)
месяц (* - текущий)
показывать ли кнопки для листания календаря (nav=)
формат strftime для генерируемых ссылок на wiki (* - "%Y-%m-%d") (wiki=)
показывать ли даты открытия заявок (cdate=)
шаблон, котрый будет использоваться при создании новых страниц wiki (base=)
query_expression (условия фильтрации при запросе заявок) (query=)
максимальное число заявок для генерации описания, 0 - бесконечность (short=)
минимальная ширина календаря (в единицах CSS) (width=)
макро Poll - вставить результаты голосования и выбор для голосования;
добавляются права доступа POLL_VOTE и POLL_VIEW;
место хранения определяется в секции poll trac.ini переменной base_dir;
для каждого вопроса создаётся файл с именем, сделанном из текста вопроса;
установка сборкой и копированием egg;
нельзя использовать не ASCII символы в вопросе (в ответах можно)
расширения при работе с заявками
BatchModifyPlugin - изменение нескольких заявок сразу;
требуются права TICKET_BATCH_MODIFY;
позволяет пометить некоторые заявки из результатов запроса для группового изменения;
можно отключить извещения и установка времени изменения заявки;
секция batchmod в trac.ini:
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 - возможность создавать подзадачи,
с ограничением на типы родительских задач и подзадач, с описанием формата таблицы подзадач;
не работает безо всяких сообщений;
необходимо
включить расширение в секции component в trac.ini (не управляется из админки)
parent.тип-задачи.inherit_milestone = {true | false} # наследовать ли этап от родительской задачи
SubticketsPlugin - возможность создавать подзадачи;
используется дополнительное поле parents;
возможен конфликт с будущей встроенной подсистемой зависимых задач;
при создании и редактировании карточки появляется дополнительное поле parents (содержит номер родительской задачи);
необходимо
закомментировать в web_ui.py поиск htdocs или перед сборкой сделать "touch depgraph/htdocs/css/test.css"
или взять css/subtickets.css из
GIT;
там же есть locale (и setup.cfg, и setup.py)
MasterTicketsPlugin - позволяет задавать зависимости
между задачами и строить граф зависимости;
удаление записи комментария о добавлении блокировки приводит БД в неустойчивое состояние;
ошибки построения графа при наличии русских букв (проблема в graphiz);
ошибки при работе query;
установить graphviz (не требуется GraphvizPlugin)
установить gs (у меня без gs не заработало построение графа, ссылок нет в любом случае)
установить MasterTicketsPlugin
trac-admin окружение upgrade
включить расширение в секции component в trac.ini: mastertickets.* = enabled
используются дополнительные поля blocking и blocked_by - им можно задать текст описания
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
BranchTimelinePlugin - позволяет администратору задать
ветки репозитория, между которыми будут выбирать пользователи при просмотре хронологии
расширения при работе с репозиториями
RepoSearchPlugin - поиск в репозитории;
требуются права REPO_SEARCH;
поиск только в репозитории по умолчанию;
для блокировки используется один файл, проблемы с несколькими проектами;
имеется утилита update-index, которой можно предварительно заполнить индекс поисковой системы;
параметры в секции repo-search trac.ini:
include = список-шаблонов-путей-файлов-через-двоеточие # без переднего '/',
а если несколько репозиториев?
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
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 # изменения не в теле письма, а вложением
ResourceReservationPlugin - специализированная
страница wiki и пункт меню для доступа к ней, позволяет вести календарь резервирования ресурсов;
модифицирует схему БД
TagsPlugin - назначение меток (tags) страницам wiki и заявкам;
поиск по /tags (/tags/?q=выражение) и tag:метка (tagged:выражение) и макро ListTagged и TagCloud;
выражения поддерживают операторы И, ИЛИ, НЕ, область (realm:wiki), вложенность;
требует обновления БД; права доступа TAGS_*; параметры в секции tags trac.ini:
ignore_closed_tickets и ticket_fields (keywords)
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
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>
Установить и настроить 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 # соединение с СУБД
Установить и настроить 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:
несколько репозиториев разного типа могут быть привязаны к одному серверу 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 и заявок
установка на RHEL5
(используется перенаправление запросов к apache на собственный сервер
tracd: отдельный процесс с правами отдельного пользователя, SSL и аутентификация средствами apache)