~bzr-pqm/bzr/bzr.dev

3101.2.1 by Ian Clatworthy
Add Using Bazaar with LP tutorial
1
===========================
2
Using Bazaar with Launchpad
3
===========================
4
5
6
Motivation
7
==========
8
9
Communities are different to teams
10
----------------------------------
11
12
The team of people required to create the initial release
13
of a piece of software may vary in size from one person
14
to several thousand people. Depending on the requirements,
15
the challenges involved, both technical and managerial,
16
can be immense. As explained in the Bazaar User Guide, selecting
17
"just right" processes and using tools like Bazaar to support
18
matching workflows can greatly help.
19
20
Success with software though requires more than a great team - it
21
requires a healthy, active *community*. This group is typically
22
far larger than the team as it includes everyone interested in
23
the software: the team, users, training partners, support partners,
24
third-party developers and so on.
25
26
Great communities are well understood in the open source world.
27
Their applicability extends well beyond that though: most
28
successful commercial software vendors are well skilled at
29
building and managing the communities that grow up around
30
their flagship products.
31
32
Like great teams, great communities don't just happen.
33
Good policies and guidelines are essential for
34
fostering the right sort of behaviour and healthy
35
relationships between participants. For a deeper look at
36
this topic, see Karl Fogel's landmark book:
37
`Producing Open Source Software <http://www.producingoss.com/>`_.
38
39
40
The need for Collaborative Development Environments
41
---------------------------------------------------
42
43
An intelligent toolset is also important for tracking and managing
44
community information and workflows. These tools are called
45
Collaborative Development Environments (CDEs). These toolsets are
46
typically web-based and manage things such as announcements,
47
issues/bugs, questions and answers, downloads, documents and
48
source code. Some examples of CDEs include
49
`Launchpad <https://launchpad.net>`_,
50
`SourceForge <http://sourceforge.net>`_,
51
`java.net <http://java.net>`_ and
52
`SAP Community Network <https://www.sdn.sap.com/irj/sdn>`_.
53
54
55
Helping communities work with related communities
56
-------------------------------------------------
57
58
Many successful products have a huge number of downstream dependencies.
59
In other words, a new challenge arises with success: dealing with other
60
communities and understanding how your changes will impact them. This is
61
most obvious for projects like:
62
63
* software languages, e.g. Python, PHP, Ruby, Java, Perl, etc.
64
* compilers, e.g. gcc, JDK, etc.
65
* libraries, e.g. zlib, openssl, etc.
66
* frameworks, e.g. Zope, Ruby on Rails, Spring, etc.
67
68
However it applies equally for popular applications on which add-ons are
3167.1.1 by Matt Nordhoff
Fix typos of "Firefox" and "OpenOffice.org" in docs.
69
built, e.g. Firefox, Thunderbird, OpenOffice.org, Drupal, Wordpress, Joomla,
70
etc.
3101.2.1 by Ian Clatworthy
Add Using Bazaar with LP tutorial
71
72
Tools that assist communities work together to track and manage
73
issues and fixes across community boundaries are required. These
74
tools help people at both ends of the spectrum:
75
76
* users can report problems in their terms, e.g. rendering of image
77
  type X is broken in application Y on operating system Z
78
79
* developers can better appreciate the downstream impact of making a
80
  change or fix, e.g. fixing this bug in a graphics library will
81
  make the users of these 5 applications on these 10 operating
82
  systems happy.
83
84
People in the middle play the essential role of *joining the dots* and
85
communicating up and down the line. In many cases, they may also fix the
86
problem for end users, releasing a patch and pushing a suggested fix
87
to the upstream development team. Keeping track of all that over time
88
in a sustainable way is no easy task.
89
90
91
Launchpad: More development, less friction
92
------------------------------------------
93
94
As well as sponsoring `Ubuntu <http://www.ubuntu.com>`_ and
95
`Bazaar <http://bazaar-vcs.org>`_ development, Canonical
96
provides Launchpad, https://launchpad.net, as a free service
97
for the open source community. Launchpad is one of the most
98
exciting CDEs around for several notable reasons:
99
100
* it models relationships between many of things tracked, e.g.
101
  source code branches can be associated with bug fixes
102
103
* as well are managing historical knowledge,
104
  it supports future development planning and tracking by providing
105
  features such as roadmaps, milestones and blueprints
106
107
* it provides translation tools and packaging services so that
108
  barriers are reduced for translators and testers wishing to
109
  join your community and help out
110
111
* it provides a nexus for different communities to work
112
  together on related issues and roadmaps.
113
114
In other words, Launchpad has been designed to help your
4011.6.1 by Frank Aspell
Fixed typos.
115
community grow and to reduce the workflow friction both
3101.2.1 by Ian Clatworthy
Add Using Bazaar with LP tutorial
116
*within* your community and *between* communities. Ultimately,
117
that means less time on mechanical tasks and more time for
118
interesting development.
119
120
121
Bazaar: Launchpad's VCS client
122
------------------------------
123
3101.2.3 by Ian Clatworthy
chapter -> tutorial fix
124
This tutorial looks at how Bazaar and Launchpad can be used together
125
and how they complement each other. It is important to remember that:
3101.2.1 by Ian Clatworthy
Add Using Bazaar with LP tutorial
126
127
1. Bazaar can be used without Launchpad
128
2. Launchpad can be used without Bazaar.
129
130
By design though, their sum is greater than the individual
3101.2.3 by Ian Clatworthy
chapter -> tutorial fix
131
parts.
3101.2.1 by Ian Clatworthy
Add Using Bazaar with LP tutorial
132
133
134
Finding and browsing branches using Launchpad
135
=============================================
136
137
Finding available branches
138
--------------------------
139
140
While there are many advantages in adopting distributed version
141
control, one of the things that disappears is the all-knowing
142
central server with knowledge about all available branches. Indeed
143
in a distributed environment, interesting branches can literally
144
exist in 100s of locations across the Internet (or within an
145
Intranet for that matter).
146
147
Launchpad fills this gap by providing a registry of branches.
148
149
150
Registering branches
151
--------------------
152
153
Branches can be uploaded to Launchpad or simply registered
154
as being available in an external location. Branches can also
155
be given a Status such as *New*, *Development*, *Mature* or
156
*Abandoned*.
157
158
Note: External branches can even be hosted in legacy version control
159
tools, i.e. CVS and Subversion. Code in these systems will be
160
scanned and converted to Bazaar branches on a periodic basis.
161
For maximum fidelity of course, it is preferable for external
162
branches to be hosted in Bazaar.
163
164
165
Browsing branches
166
-----------------
167
168
Branches can be listed, filtered and sorted by numerous
169
attributes including Name, Registrant, Author, Status, Age and
170
time of last commit. Browsing of branches is also provided making
171
it easy to see things such as:
172
173
* where the branch can be downloaded from
174
* how to upload changes
175
* recent commits and the changes made by each
176
* the source code of individual files for a given version.
177
178
179
Accessing code in Launchpad using Bazaar
180
========================================
181
182
Getting the code for an open source project
183
-------------------------------------------
184
185
As Launchpad keeps track of thousands of open source projects
186
and their latest code whether it be managed by Bazaar, CVS or Subversion,
187
Bazaar users can grab that code as easily as this::
188
3101.2.4 by Ian Clatworthy
include feedback from kiko
189
  bzr branch lp:project-name
190
191
where `project-name` is the Launchpad project ID. Here are some examples::
192
193
  bzr branch lp:inkscape
194
  bzr branch lp:amarok
195
  bzr branch lp:python
196
  bzr branch lp:rails
197
  bzr branch lp:java-gnome
198
199
You can then browse the code locally using your favorite editor or IDE and
200
change the code if you wish.
3101.2.1 by Ian Clatworthy
Add Using Bazaar with LP tutorial
201
3101.2.5 by Ian Clatworthy
Feedback from jam and jml
202
If a project has multiple series registered (e.g. a development series and a
203
maintenance series), the latest code for a given series can be fetched using::
204
205
  bzr branch lp:project-name/series
206
3101.2.1 by Ian Clatworthy
Add Using Bazaar with LP tutorial
207
Publishing your changes
208
-----------------------
209
210
Having fixed that annoying bug or added that cool feature you've always
211
wanted, it's time to impress your friends and make the world a better
212
place by making your code available to others. As explained earlier,
213
Launchpad is a free Bazaar code hosting service so you can push your
214
branch to it and others can access your code from there. For example,
3101.2.5 by Ian Clatworthy
Feedback from jam and jml
215
assuming you are a member of the relevant team, login to launchpad like this::
3101.2.4 by Ian Clatworthy
include feedback from kiko
216
3101.2.5 by Ian Clatworthy
Feedback from jam and jml
217
  bzr launchpad-login userid
3101.2.4 by Ian Clatworthy
include feedback from kiko
218
219
where `userid` is your Launchpad user ID.
3101.2.5 by Ian Clatworthy
Feedback from jam and jml
220
You can then push your changes to a team branch like this::
221
222
  bzr push lp:~team-name/project-name/branch-name
223
3101.2.4 by Ian Clatworthy
include feedback from kiko
224
Others can then download your code like this::
225
3101.2.5 by Ian Clatworthy
Feedback from jam and jml
226
  bzr branch lp:~team-name/project-name/branch-name
3101.2.4 by Ian Clatworthy
include feedback from kiko
227
228
229
Personal branches
230
-----------------
231
232
Even if you are not a member of a team, Launchpad can be used to publish
233
your changes. In this case, simply create a personal branch like this::
3101.2.1 by Ian Clatworthy
Add Using Bazaar with LP tutorial
234
3101.2.5 by Ian Clatworthy
Feedback from jam and jml
235
  bzr push lp:~userid/project-name/branch-name
3101.2.1 by Ian Clatworthy
Add Using Bazaar with LP tutorial
236
3101.2.4 by Ian Clatworthy
include feedback from kiko
237
Others can then download your code like this::
238
3101.2.5 by Ian Clatworthy
Feedback from jam and jml
239
  bzr branch lp:~userid/project-name/branch-name
3101.2.4 by Ian Clatworthy
include feedback from kiko
240
241
Note: Even when publishing to a personal branch, it is polite to notify the
242
upstream developers about your branch so they can pull your changes from
243
it if they are generally applicable to all users and meet the project's
244
quality standards.
3101.2.1 by Ian Clatworthy
Add Using Bazaar with LP tutorial
245
246
247
Linking branches using Launchpad
248
================================
249
250
Associating a branch with a bug
251
-------------------------------
252
253
After registering a branch, you can associate it to a bug so that
254
people interested in that bug can track and download the fix as
255
it becomes available.
256
257
To do this, the steps are:
258
259
1. Navigate to the bug in question.
260
261
2. Select `Add branch` under `Actions`.
262
263
3. Select the branch.
264
265
4. Optionally set the State of the relationship. This is
266
   *Fix In Progress* by default but you may wish to set it
267
   to another state such as *Fix Available* if the branch already
268
   addresses the issue.
269
270
If you wish, you can also provide some arbitrary comments about
271
the relationship between the bug and the branch.
272
273
274
Changing the state in Launchpad while committing in Bazaar
275
----------------------------------------------------------
276
277
Bazaar and Launchpad can work together to reduce some of
278
the status housekeeping for you. When you commit using Bazaar,
279
use the --fixes option like this::
280
281
  bzr commit --fixes lp:1234 -m "..."
282
283
where 1234 is the bug ID. This will changes the State of the
284
bug-branch relationship to *Fix Available*. If the one commit
285
fixes multiple issues, the --fixes option can be specified multiple
286
times.
287
288
One of the cool things about this feature is that Launchpad does
289
not need to be accessible when making the commit. The ``--fixes``
290
option works by storing metadata which Launchpad will detect next
291
time the branch is pushed to it or scanned once online again.
292
293
Note: Launchpad will not implicitly close a bug just because a
294
branch is available that fixes it. There are several reasons for this.
295
Firstly, the branch usually needs to be merged into the trunk
296
(main development branch) before most teams consider it fixed.
297
Secondly, many teams have a separate process for confirming
298
bugs are fixed over and above a developer saying so.
299
3101.2.4 by Ian Clatworthy
include feedback from kiko
300
As explained later, merge control features are currently under
301
development in Launchpad and automatically changing the status of
302
bugs to *Fix Committed* will be more appropriate once those features
303
are in place.
304
305
3101.2.1 by Ian Clatworthy
Add Using Bazaar with LP tutorial
306
Associating a branch with a blueprint
307
-------------------------------------
308
309
After registering a branch, you can associate it to a blueprint so that
310
people interested in that blueprint can track and test the feature as
311
it develops.
312
313
To do this, the steps are:
314
315
1. Navigate to the blueprint in question.
316
317
2. Select `Link branch` under `Actions`.
318
319
3. Select the branch.
320
321
If you wish, you can also provide some arbitrary comments about
322
the relationship between the blueprint and the branch.
323
324
325
Managing releases using Launchpad
326
=================================
327
328
Integrating changes
329
-------------------
330
331
Once a branch has been developed and published, communities
332
typically go through a rigorous process before those changes
333
are integrated into the core product and rolled out to end users.
334
Some of the steps involved may include:
335
336
* peer review of the changes
337
338
* deciding which releases to include the changes in, e.g. the
339
  next maintenance release, the next major release, or both
340
341
* running functional regression tests
342
343
* benchmarking to ensure performance remains acceptable
344
345
* packaging into early access releases for end user testing
346
347
* documentation updates, e.g. Release Notes for the targeted
348
  releases
349
350
* translation of the user interface and documentation into
351
  multiple languages.
352
353
This section briefly looks at some of the features in Launchpad that
3101.2.4 by Ian Clatworthy
include feedback from kiko
354
help get good quality code into production. Strong integration with
355
Bazaar is core to making this happen smoothly.
3101.2.1 by Ian Clatworthy
Add Using Bazaar with LP tutorial
356
357
Note: Where indicated, some of the features below are still under
358
development. If one or more of these features interest you, please
359
consider joining the Launchpad beta test team at this link:
360
https://help.launchpad.net/JoiningLaunchpadBetaTesters. You can
361
then get early access to features and provide feedback to the
362
developers before wider roll-out.
363
364
365
Branch merge proposals
366
----------------------
367
368
After navigating to a branch in Launchpad, one of the available actions
369
is *Propose for merging*. This lets you nominate which branch this code
370
ought to be merged into.
371
3101.2.4 by Ian Clatworthy
include feedback from kiko
372
Tracking the knowledge about which branches are proposed to be merged
373
into a codeline helps Release Managers keep on top of what still needs
374
to be completed, or can be completed, before a ship date. Using this
375
information, they can ensure branches are merged after completing any
376
necessary reviews. In the simple case, the Release Manager may manually
377
merge branches. In more advanced cases, the merging could be automatically
378
done by a robot (like `PQM`_) when the branch reaches the right state
379
(e.g. *Review completed*).
380
381
.. _PQM: https://launchpad.net/pqm
382
3101.2.1 by Ian Clatworthy
Add Using Bazaar with LP tutorial
383
384
Code review tracking
385
--------------------
386
3638.6.25 by Dmitry Vasiliev
using_bazaar_with_launchpad.txt: Update and review translation
387
A number of features are under development in Launchpad to track the
3101.2.1 by Ian Clatworthy
Add Using Bazaar with LP tutorial
388
states, conversations and outcomes of code reviews. These features are
389
expected to be integrated with branch merge proposals and branch
390
browsing features.
391
3101.2.4 by Ian Clatworthy
include feedback from kiko
392
3101.2.1 by Ian Clatworthy
Add Using Bazaar with LP tutorial
393
Personal Package Archives (PPAs)
394
--------------------------------
395
396
PPAs help developers and development teams get custom builds into the
397
hands of users for early testing and feedback. In other words, a PPA
398
allows a developer to form a community of testers who are interested
399
in their changes. The testing community can install the packages,
400
run them for the test period and then remove them cleanly from their
401
system.
402
403
See https://help.launchpad.net/PPAQuickStart for further details.
404
405
406
Translations
407
------------
408
409
The Translations module in Launchpad is designed to make it easy for
410
anyone to get involved translating applications to languages they know.
411
Translators are shielded from the low level details.
412
413
Launchpad keeps track of the translations for each major version of a
414
project separately, allowing translators to continue to improve the
415
translations of your stable releases while others start work on newer
416
versions that are still in development. Translation speed in reduced
417
by sharing resources across projects. Automatic suggestions, from a
418
library of 750,000 translated strings, and a community of 19,000
419
registered translators can radically cut the time required to
420
localise your project into many languages.
421
422
423
Summary
424
=======
425
4853.1.1 by Patrick Regan
Removed trailing whitespace from files in doc directory
426
The communities we join, whether off-line or on-line,
3101.2.1 by Ian Clatworthy
Add Using Bazaar with LP tutorial
427
say a lot about the sort of people we are. The flip-side
428
to this is that the tools you choose for your community - particularly
429
the CDE and version control tool - can have a large impact on who
430
joins and how easily they can contribute.
431
432
In their own right, Launchpad and Bazaar are highly useful tools.
433
Together, they can:
434
435
* help your community track major assets such as source code and knowledge
436
* help it grow by reducing barriers to entry
437
* help it interact with related communities.
438
439
In particular, Launchpad is a free code hosting service for your Bazaar
440
branches, branches can be browsed online, branches can be linked to bugs
441
and blueprints, and the status of bug-branch relationships can be
4011.6.1 by Frank Aspell
Fixed typos.
442
automatically managed by mentioning the bug while committing in Bazaar.
3101.2.1 by Ian Clatworthy
Add Using Bazaar with LP tutorial
443
Further integration is under development with the aim of streamlining
3101.2.4 by Ian Clatworthy
include feedback from kiko
444
the process from *great idea* to *running code in the hands of end users*.
3101.2.1 by Ian Clatworthy
Add Using Bazaar with LP tutorial
445
446
If you have any feedback on how you'd like to see Bazaar and Launchpad
447
further integrated, please contact us on the Bazaar mailing list,
448
bazaar@lists.canonical.com.
3101.2.3 by Ian Clatworthy
chapter -> tutorial fix
449
450
While designed as a free service to support open source projects,
451
Canonical may make Launchpad available to commercial software developers
452
depending on their requirements. We would be happy to hear from you
3101.2.4 by Ian Clatworthy
include feedback from kiko
453
if you think Launchpad would be useful for managing your community,
454
open source or otherwise.