================================
Использование Bazaar с Launchpad
================================

.. contents::
	Содержание
.. sectnum::

Мотивация
=========

Сообщества отличаются от команд
-------------------------------

Количество человек в команде, необходимой для создания первой версии
какого-либо программного обеспечения, может различаться в разы - от одного
человека до нескольких тысяч. В зависимости от требований, сложность задач, как
технических, так и управленческих, может быть просто огромна. Как описано в
Руководстве пользователя Bazaar, выбор "правильных" процессов и использование
таких инструментов как Bazaar, может существенно помочь в поддержке
соответствующих рабочих циклов.

Но успех программного обеспечения требует больше чем просто хорошую команду -
здесь требуется здоровое и активное *сообщество*. Обычно эта группа намного
больше команды, поскольку включает всех заинтересованных в данном программном
обеспечении: команду разработки, пользователей, партнеров по подготовке
кадров, партнеров по поддержке, сторонних разработчиков и так далее.

Хорошие сообщества хорошо известны в мире открытого исходного кода. Но их
полезность намного выше этого: большинство успешных поставщиков коммерческого
программного обеспечения достаточно опытны в создании и управлении
сообществами, которые растут вокруг их флагманских продуктов.

Как и хорошие команды, хорошие сообщества не появляются просто так. Правильная
политика и руководящие принципы имеют основополагающее значение при развитии
правильного поведения и здорового отношения между участниками. Для более
подробного понимания этой темы можно обратится к основополагающей книге Карла
Фогеля (Karl Fogel): `Создание программного обеспечения с открытым кодом
(Producing Open Source Software) <http://www.producingoss.com/>`_.


Потребность в совместных средах разработки
------------------------------------------

Развитый набор инструментов также важен для отслеживания и управления
информацией и рабочими процессами в сообществе. Такие инструменты называются
совместными средами разработки (Collaborative Development Environments
(CDEs)). Обычно эти инструменты работают на базе Web'а и управляют такими
вещами как анонсы, задачи и ошибки, вопросы и ответы, ресурсы для скачивания,
документы и исходный код. Вот несколько примеров совместных сред разработки:
`Launchpad <https://launchpad.net>`_,
`SourceForge <http://sourceforge.net>`_,
`java.net <http://java.net>`_ и
`SAP Community Network <https://www.sdn.sap.com/irj/sdn>`_.


Помощь сообществам в работе с зависимыми от них сообществами
------------------------------------------------------------

Многие успешные продукты имеют большое число зависящих от них проектов.
Другими словами, с успехом проекта появляется новая задача: общение с другими
сообществами и понимание того как ваши изменения скажутся на них. Это наиболее
очевидно для таких проектов как:

* языков программирования, например, Python, PHP, Ruby, Java, Perl и др.
* компиляторов, например, gcc, JDK и др.
* библиотек, например, zlib, openssl и др.
* каркасов, например, Zope, Ruby on Rails, Spring и др.

В равной степени это относится и к популярным приложениям для которых могут
создаваться дополнения, например, Firefox, Thunderbird, OpenOffice.org,
Drupal, Wordpress, Joomla и др.

Здесь необходимы инструменты, которые помогают сообществам работать вместе над
отслеживанием и управлением задачами и исправлениями между сообществами. Такие
инструменты помогают людям по обе стороны:

* пользователи могут сообщить о проблемах своими словами, например, построение
  изображения типа X не работает в приложении Y под операционной системой Z.

* разработчики могут лучше оценить реакцию на сделанное изменение или
  исправление, например, сделает ли исправление этой ошибки в графической
  библиотеки счастливее пользователей этих 5-и приложений под этими 10-ю
  операционными системами.

Посредники играют важную роль *соединяя точки* и создавая коммуникацию между
верхней и нижней точками линии. Во многих случаях, они могут так же исправить
проблему для конечного пользователя, выпустив заплатку и передав рекомендуемое
исправление основной команде разработчиков. Отслеживание всего этого в течении
продолжительного времени - задача не из легких.

Launchpad: Больше разработки, меньше трений
-------------------------------------------

Кроме спонсорства разработки `Ubuntu <http://www.ubuntu.com>`_ и `Bazaar
<http://bazaar.canonical.com>`_, Canonical так же предоставляет Launchpad,
https://launchpad.net, как бесплатный сервис для сообществ с открытым исходным
кодом. Launchpad является одной из самых интересных сред совместной разработки
по следующим причинам:

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

* кроме управления накопленными знаниями, также предоставляется планирование и
  поддержка будущего разработки через такие возможности как отслеживание
  направления развития, контрольные точки и планы развития

* предоставляются инструменты для перевода и сборки пакетов, что снижает
  барьер для переводчиков и тестеров пожелавших присоединиться к вашему
  сообществу с помощью

* служит связующим звеном между различными сообществами для совместной работы
  над связанными задачами и направлениями развития.

Иными словами, Launchpad был разработан чтобы помочь росту вашего сообщества и
снизить трения при работе как *внутри* сообщества, так и *между* сообществами.
В конечном счете, это означает, что тратится меньше времени на рутинные задачи
и больше на интересные разработки.


Bazaar: клиент системы контроля версий для Launchpad
----------------------------------------------------

Это руководство рассматривает как Bazaar и Launchpad могут быть использованы
вместе и дополнять друг друга. Важно помнить о том, что:

1. Bazaar можно использовать без Launchpad
2. Launchpad можно использовать без Bazaar.

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


Поиск и просмотр веток с помощью Launchpad
==========================================

Поиск доступных веток
---------------------

Хотя использование распределённой системы контроля версий даёт много
преимуществ, в то же время исчезает всезнающий центральный сервер, который
знает обо всех доступных ветках. Действительно, в распределённой среде
интересующие ветки могут буквально существовать в сотнях мест во всему
Интернету (или внутри Интранета).

Launchpad заполняет этот пробел, предоставляя реестр веток.


Регистрация веток
-----------------

Ветки могут быть загружены на Launchpad или просто зарегистрированы как
доступные из внешних источников. Веткам так же можно назначать статусы, такие
как *Новая*, *В разработке*, *Готовая* или *Отмененная*.

Заметка: Внешние ветки могут даже располагаться в старых системах контроля
версий, таких как CVS и Subversion. Код из этих систем будет периодически
сканироваться и преобразовываться в ветки Bazaar. Конечно же, для максимальной
точности, предпочтительнее чтобы внешние ветки были в формате Bazaar.


Просмотр веток
--------------

Для веток можно просматривать их список, фильтровать и сортировать по
множеству атрибутов, включая Имя, Регистратора, Автора, Состояние, Возраст и
время последней фиксации. Также работает просмотр веток, что легко позволяет
увидеть следующее:

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


Доступ к коду в Launchpad с помощью Bazaar
==========================================

Получение кода для проекта с открытым исходным кодом
----------------------------------------------------

Launchpad отслеживает тысячи проектов с открытым исходным кодом и вне
зависимости от того хранится этот код в Bazaar, CVS или Subversion
пользователи Bazaar легко могут получить этот код так::

	bzr branch lp:имя-проекта

где `имя-проекта` - это идентификатор проекта на Launchpad. Вот некоторые
примеры::

	bzr branch lp:inkscape
	bzr branch lp:amarok
	bzr branch lp:python
	bzr branch lp:rails
	bzr branch lp:java-gnome

После этого вы можете просматривать код локально с помощью вашего любимого
редактора или среды разработки и при желании изменять его.

Если для проекта зарегистрировано несколько выпусков (например, выпуск
разработки в выпуск поддержки), тогда свежий код для заданного выпуска можно
получить используя команду::

	bzr branch lp:имя-проекта/выпуск

Публикация ваших изменений
--------------------------

Исправив эту надоедливую ошибку или добавив новую крутую возможность, о
которой вы давно мечтали, пришло время удивить ваших друзей и сделать мир
лучше, сделав ваш код доступным для других. Как уже объяснялось раньше,
Launchpad это бесплатная служба для размещения веток Bazaar и поэтому вы
можете опубликовать свою ветку на нём, так чтобы другие смогли получить доступ
к вашему коду. Например, предположим что вы уже участник соответствующей
команды, авторизуйтесь на Launchpad таким образом::

	bzr launchpad-login пользователь

где `пользователь` - это ваш идентификатор пользователя Launchpad. После этого
вы можете залить ваши изменения на ветку команды вот так::

	bzr push lp:~имя-команды/имя-проекта/имя-ветки

Теперь другие могут скачать ваш код таким образом::

	bzr branch lp:~имя-команды/имя-проекта/имя-ветки


Личные ветки
------------

Даже если вы не член какой-либо команды Launchpad можно использовать для
публикации ваших изменений. В этом случае просто создайте личную ветку::

	bzr push lp:~пользователь/имя-проекта/имя-ветки

Другие затем могут скачать ваш код таким образом::

	bzr branch lp:~пользователь/имя-проекта/имя-ветки

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


Связывание веток в Launchpad
============================

Привязка ветки к сообщению об ошибке
------------------------------------

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

Чтобы сделать это выполните следующие шаги:

1. Перейдите к странице с нужной ошибкой.

2. Выберите `Add branch` (Добавить ветку) в разделе `Actions` (Действия).

3. Выберите ветку.

4. При желании вы можете изменить состояние (State) связи. По умолчанию
   состояние будет *Fix In Progress* (Работа над исправлением), но вы можете
   установить другое состояние, например *Fix Available* (Исправление
   доступно), если ветка уже содержит исправление.

При желании вы также можете добавить произвольный комментарий о связи между
ошибкой и веткой.


Изменение состояния ветки в Launchpad во время фиксации в Bazaar
----------------------------------------------------------------

Bazaar и Launchpad способны работать вместе, чтобы уменьшить ваши заботы по
управлению состоянием ветки. Когда вы выполняете фиксацию с помощью Bazaar,
используйте параметр --fixes::

	bzr commit --fixes lp:1234 -m "..."

где 1234 |--| это идентификатор ошибки. Эти данные изменят State (состояние
отношения ветки к ошибке) на *Fix Available* (Исправление доступно). Если одна
единственная фиксация исправляет несколько ошибок, то параметр --fixes может
быть указан несколько раз.

Самое интересное здесь заключается в том, что вам не обязательно иметь доступ
к Launchpad в момент фиксации. При использовании ``--fixes`` идентификатор
ошибки сохраняется в виде специальных метаданных, которые Launchpad увидит при
очередной публикации ваших изменений или когда ваша публичная ветка будет
просканирована в очередной раз.

Заметка: Launchpad не будет закрывать сообщение об ошибке только потому, что
существует ветка с исправлением. Для этого есть несколько причин. Во-первых,
обычно исправления из вашей ветки должны быть объединены с главной веткой
разработки, иначе большинство команд не будет считать ошибку исправленной.
Во-вторых, многие команды придерживаются отдельного процесса для подтверждения
исправлений ошибок, в добавление к утверждению разработчика об этом.

Как поясняется далее, функция отслеживания объединений веток на Launchpad в
настоящее время находится в стадии разработки. Как только эта функция будет
готова более подходящим поведением станет автоматическое изменение состояния
ошибки на *Fix Committed* (исправление зафиксировано).


Связь ветки с планом
--------------------

После регистрации ветки вы можете связать её с планом, чтобы люди,
заинтересованные в этом плане могли отслеживать и тестировать новые
возможности по мере разработки.

Чтобы это сделать, выполните следующие шаги:

1. Перейдите к нужному плану (Blueprint).

2. Выберите `Link branch` (Связать ветку) в разделе `Actions` (Действия).

3. Выберите ветку.

При желании вы также можете добавить произвольный комментарий об отношении
ветки к плану.


Управление релизами с помощью Launchpad
=======================================

Интеграция изменений
--------------------

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

* просмотр изменений другими участниками проекта

* принятие решения, в какой релиз будут включены изменения, например, в
  следующий релиз с исправлениями, или в следующее крупное обновление, или в
  оба

* прогон функциональных тестов для выявления ошибок

* измерение производительности

* включение в предварительные версии для тестирования конечными пользователями

* обновление документации, например, заметок о выпуске

* перевод пользовательского интерфейса и документации на разные языки.

Этот раздел дает обзор возможностей Launchpad, которые помогают получить
высокое качество кода в конечном продукте. Хорошая интеграция с Bazaar
является основой для того, чтобы это прошло гладко.

Примечание: в тех случаях, когда указано, некоторые из следующих возможностей
всё ещё находятся в стадии разработки. Если одна или несколько таких
возможностей вам интересны, рассмотрите возможность вступления в команду
бета-тестирования Launchpad по следующей ссылке:
https://help.launchpad.net/JoiningLaunchpadBetaTesters. В этом случае, вы
сможете получить предварительный доступ к возможностям и сможете дать отзыв
разработчиками до широкого внедрения.


Предложение по объединению веток
--------------------------------

После перехода к ветке в Launchpad, одно из доступных действий - *Propose for
merging* (Предложить объединение). Это действие позволяет вам указать, с какой
веткой этот код мог бы быть объединен.

Отслеживание знаний о том, какие ветки предлагается объединить в главную,
помогает менеджерам выпусков держать на виду то, что ещё должно быть
завершено, либо может быть завершено, до даты выпуска. Используя эту
информацию, они могут убедиться, что ветки объединены после завершения их
необходимых обзоров. В простом случае, менеджер выпуска может объединить ветки
вручную. В более сложных ситуациях, объединение может быть сделано роботом
(таким, как `PQM`_) автоматически, когда ветки перейдут в правильное состояние
(например, *Review completed* (Обзор завершен)).

.. _PQM: https://launchpad.net/pqm


Отслеживание обзора кода
------------------------

Некоторые функции в Launchpad все еще в стадии разработки, например
отслеживание состояний, обсуждений и результатов обзора кода. Ожидается, что
эти функции будут интегрированы с предложениями по объединению веток и
просмотром веток.


Архивы личных пакетов (PPAs)
----------------------------

PPAs помогают разработчикам и командам разработки выдать определенный выпуск
на руки пользователям для раннего тестирования и получения отзывов. Другими
словами, PPA позволяет разработчику создать сообщество тестеров,
заинтересованных в их изменениях. Тестирующее сообщество может установить
пакеты, запускать их в течение тестового периода, а затем аккуратно удалить их
из системы.

Дальнейшую информацию можно найти по адресу
https://help.launchpad.net/PPAQuickStart


Переводы
--------

Модуль переводов в Launchpad сделан для того чтобы любой желающий мог легко
присоединиться к переводу приложений на известные ему языки. Переводчики
защищены от подробностей низкого уровня.

Launchpad отслеживает переводы для каждой основной версии проекта по
отдельности, что позволяет переводчикам продолжать совершенствовать перевод
ваших стабильных релизов, пока другие могут начать работу над новыми версиями,
которые все ещё находятся в разработке. Скорость перевода увеличивается из-за
совместного использования ресурсов между проектами. Автоматические подсказки,
из библиотеки в 750 тысяч переведенных строк, а также сообщество из
19 тысяч зарегистрированных переводчиков может радикально сократить время,
необходимое для локализации вашего проекта на многие языки.


Итоги
=====

Сообщества к которым мы присоединяемся, будь то в реальной жизни, или онлайн,
говорят многое о нас. Обратная сторона этого заключается в инструментах
которые вы выбираете для сообщества - в частности, CDE и инструмент контроля
версий. Это может иметь большое значение для тех кто пожелает присоединиться,
и насколько легко они смогут помочь.

Сами по себе, Launchpad и Bazaar являются очень полезными инструментами.
Вместе они могут:

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

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

Если у вас есть отзывы или пожелания о том, как лучше интегрировать Bazaar и
Launchpad, пожалуйста связывайтесь с нами через список рассылки
bazaar@lists.canonical.com.

Хотя Launchpad разработан как бесплатный сервис для поддержки проектов с
открытыми исходными текстами, Canonical может сделать его доступным и для
разработчиков коммерческого программного обеспечения, в зависимости от их
требований. Мы с удовольствием выслушаем ваше мнение, если вы считаете, что
Launchpad был бы полезен для управления вашим сообществом, будь оно открытое
или нет.


.. |--| unicode:: U+2014
