1287
1287
http://bazaar-vcs.org/BzrWin32Installer
1290
Core Developer Tasks
1291
####################
1296
What is a Core Developer?
1297
-------------------------
1299
While everyone in the Bazaar community is welcome and encouraged to
1300
propose and submit changes, a smaller team is reponsible for pulling those
1301
changes together into a cohesive whole. In addition to the general developer
1302
stuff covered above, "core" developers have responsibility for:
1305
* reviewing blueprints
1307
* managing releases.
1310
Removing barriers to community participation is a key reason for adopting
1311
distributed VCS technology. While DVCS removes many technical barriers,
1312
a small number of social barriers are often necessary instead.
1313
By documenting how the above things are done, we hope to
1314
encourage more people to participate in these activities, keeping the
1315
differences between core and non-core contributors to a minimum.
1318
The Development Lifecycle
1319
-------------------------
1321
As a rule, Bazaar development follows a 4 week cycle:
1323
* 2 weeks - general changes
1324
* 1 week - feature freeze
1325
* 1 week+ - Release Candidate stabilization
1327
During the FeatureFreeze week, the trunk (bzr.dev) is open in a limited
1328
way: only low risk changes, critical and high priority fixes are accepted
1329
during this time. At the end of FeatureFreeze, a branch is created for the
1330
first Release Candidate and the trunk is reopened for general development
1331
on the *next* release. A week or so later, the final release is packaged
1332
assuming no serious problems were encountered with the one or more Release
1336
There is a one week overlap between the start of one release and
1337
the end of the previous one.
1340
Communicating and Coordinating
1341
------------------------------
1343
While it has many advantages, one of the challenges of distributed
1344
development is keeping everyone else aware of what you're working on.
1345
There are numerous ways to do this:
1347
#. Assign bugs to yourself in Launchpad
1348
#. Mention it on the mailing list
1349
#. Mention it on IRC
1351
As well as the email notifcations that occur when merge requests are sent
1352
and reviewed, you can keep others informed of where you're spending your
1353
energy by emailing the **bazaar-commits** list implicitly. To do this,
1354
install and configure the Email plugin. One way to do this is add these
1355
configuration settings to your central configuration file (e.g.
1356
``~/.bazaar/bazaar.conf`` on Linux)::
1359
email = Joe Smith <joe.smith@internode.on.net>
1360
smtp_server = mail.internode.on.net:25
1362
Then add these lines for the relevant branches in ``locations.conf``::
1364
post_commit_to = bazaar-commits@lists.canonical.com
1365
post_commit_mailer = smtplib
1367
While attending a sprint, RobertCollins' Dbus plugin is useful for the
1368
same reason. See the documentation within the plugin for information on
1369
how to set it up and configure it.
1375
Setting Up Your Workspace for Reviews
1376
-------------------------------------
1378
TODO: Incorporate John Arbash Meinel's detailed email to Ian C on the
1379
numerous ways of setting up integration branches.
1382
The Review Checklist
1383
--------------------
1385
There are broadly three gates for code to get in:
1387
* Doesn't reduce test coverage: if it adds new methods or commands, there
1388
should be tests for them. There is a good test framework and plenty of
1389
examples to crib from, but if you are having trouble working out how to
1390
test something feel free to post a draft patch and ask for help.
1392
* Doesn't reduce design clarity, such as by entangling objects we're
1393
trying to separate. This is mostly something the more experienced
1394
reviewers need to help check.
1396
* Improves bugs, features, speed, or code simplicity.
1398
As we approach and pass 1.0, a fourth gate - performance impact - will
1399
also be a consideration.
1402
Communicating Review Results
1403
----------------------------
1405
The preferred way of communicating review results is via email, i.e. by
1406
replying to the original merge/patch submission. It isn't necessary to
1407
include every bit of the diff in your response - just the bits you have
1410
Good reviews do take time. They also regularly require a solid
1411
understanding of the overall code base. In practice, this means a small
1412
number of people often have a large review burden - with knowledge comes
1413
responsibility. No one like their merge requests sitting in a queue going
1414
nowhere, so reviewing sooner rather than later is strongly encouraged.
1417
Recording Votes on Changes
1418
--------------------------
1420
Everyone in the community is welcome to review
1421
and vote on whatever they like, though 2 positive votes from core
1422
developers are required before a change will be approved. Merge requests
1423
are tracked using Aaron Bentley's nifty Bundle Buggy (BB) tool:
1424
http://bundlebuggy.aaronbentley.com/. To get a login on BB, contact Aaron
1427
For very small changes, simply voting on BB can be enough, together with a
1428
brief comment made while voting. The more common case though is sending a
1429
detailed review to the mailing list including an embedded directive
1430
(like "bb: approve") in the email. Alternatively, small changes can be
1431
voted for directly on BB.
1440
Of the many workflows supported by Bazaar, the one adopted for Bazaar
1441
development itself is known as "Decentralized with automatic gatekeeper".
1442
To repeat the explanation of this given on
1443
http://bazaar-vcs.org/Workflows:
1446
In this workflow, each developer has their own branch or
1447
branches, plus read-only access to the mainline. A software gatekeeper
1448
(e.g. PQM) has commit rights to the main branch. When a developer wants
1449
their work merged, they request the gatekeeper to merge it. The gatekeeper
1450
does a merge, a compile, and runs the test suite. If the code passes, it
1451
is merged into the mainline.
1453
In a nutshell, here's the overall submission process:
1455
#. get your work ready (including review except for trivial changes)
1456
#. push to a public location
1457
#. ask PQM to merge from that location
1460
At present, PQM always takes the changes to merge from a branch
1461
at a URL that can be read by it. For Bazaar, that means a public,
1462
typically http, URL.
1464
As a result, the following things are needed to use PQM for submissions:
1466
#. A publicly available web server
1467
#. Your OpenPGP key registered with PQM (contact RobertCollins for this)
1468
#. The PQM plugin installed and configured (not strictly required but
1469
highly recommended).
1472
Selecting a Public Branch Location
1473
----------------------------------
1475
If you don't have your own web server running, branches can always be
1476
pushed to Launchpad. Here's the process for doing that:
1478
Depending on your location throughout the world and the size of your
1479
repository though, it is often quicker to use an alternative public
1480
location to Launchpad, particularly if you can set up your own repo and
1481
push into that. By using an existing repo, push only needs to send the
1482
changes, instead of the complete repository every time. Note that it is
1483
easy to register branches in other locations with Launchpad so no benefits
1484
are lost by going this way.
1487
For Canonical staff, http://people.ubuntu.com/~<user>/ is one
1488
suggestion for public http branches. Contact your manager for information
1489
on accessing this system if required.
1491
It should also be noted that best practice in this area is subject to
1492
change as things evolve. For example, once the Bazaar smart server on
1493
Launchpad supports server-side branching, the performance situation will
1494
be very different to what it is now (Jun 2007).
1497
Configuring the PQM Plug-In
1498
---------------------------
1500
While not strictly required, the PQM plugin automates a few things and
1501
reduces the chance of error. Before looking at the plugin, it helps to
1502
understand a little more how PQM operates. Basically, PQM requires an
1503
email indicating what you want it to do. The email typically looks like
1506
star-merge source-branch target-branch
1510
star-merge http://bzr.arbash-meinel.com/branches/bzr/jam-integration http://bazaar-vcs.org/bzr/bzr.dev
1512
Note that the command needs to be on one line. The subject of the email
1513
will be used for the commit message. The email also needs to be ``gpg``
1514
signed with a key that PQM accepts.
1516
The advantages of using the PQM plugin are:
1518
#. You can use the config policies to make it easy to set up public
1519
branches, so you don't have to ever type the full paths you want to merge
1522
#. It checks to make sure the public branch last revision matches the
1523
local last revision so you are submitting what you think you are.
1525
#. It uses the same public_branch and smtp sending settings as bzr-email,
1526
so if you have one set up, you have the other mostly set up.
1528
#. Thunderbird refuses to not wrap lines, and request lines are usually
1529
pretty long (you have 2 long URLs in there).
1531
Here are sample configuration settings for the PQM plugin. Here are the
1532
lines in bazaar.conf::
1535
email = Joe Smith <joe.smith@internode.on.net>
1536
smtp_server=mail.internode.on.net:25
1538
And here are the lines in ``locations.conf`` (or ``branch.conf`` for
1539
dirstate-tags branches)::
1541
[/home/joe/bzr/my-integration]
1542
push_location = sftp://joe-smith@bazaar.launchpad.net/%7Ejoe-smith/bzr/my-integration/
1543
push_location:policy = norecurse
1544
public_branch = http://bazaar.launchpad.net/~joe-smith/bzr/my-integration/
1545
public_branch:policy = appendpath
1546
pqm_email = Bazaar PQM <pqm@bazaar-vcs.org>
1547
pqm_branch = http://bazaar-vcs.org/bzr/bzr.dev
1549
Note that the push settings will be added by the first ``push`` on
1550
a branch. Indeed the preferred way to generate the lines above is to use
1551
``push`` with an argument, then copy-and-paste the other lines into
1558
Here is one possible recipe once the above environment is set up:
1560
#. pull bzr.dev => my-integration
1561
#. merge patch => my-integration
1562
#. fix up any final merge conflicts (NEWS being the big killer here).
1568
The ``push`` step is not required if ``my-integration`` is a checkout of
1571
Because of defaults, you can type a single message into commit and
1572
pqm-commit will reuse that.
1575
Tracking Change Acceptance
1576
--------------------------
1578
The web interface to PQM is https://pqm.bazaar-vcs.org/. After submitting
1579
a change, you can visit this URL to confirm it was received and placed in
1582
When PQM completes processing a change, an email is sent to you with the
1586
Reviewing Blueprints
1587
====================
1589
Blueprint Tracking Using Launchpad
1590
----------------------------------
1592
New features typically require a fair amount of discussion, design and
1593
debate. For Bazaar, that information is often captured in a so-called
1594
"blueprint" on our Wiki. Overall tracking of blueprints and their status
1595
is done using Launchpad's relevant tracker,
1596
https://blueprints.launchpad.net/bzr/. Once a blueprint for ready for
1597
review, please announce it on the mailing list.
1599
Alternatively, send an email begining with [RFC] with the proposal to the
1600
list. In some cases, you may wish to attach proposed code or a proposed
1601
developer document if that best communicates the idea. Debate can then
1602
proceed using the normal merge review processes.
1605
Recording Blueprint Review Feedback
1606
-----------------------------------
1608
Unlike its Bug Tracker, Launchpad's Blueprint Tracker doesn't currently
1609
(Jun 2007) support a chronological list of comment responses. Review
1610
feedback can either be recorded on the Wiki hosting the blueprints or by
1611
using Launchpad's whiteboard feature.
1620
As the two senior developers, Martin Pool and Robert Collins coordinate
1621
the overall Bazaar product development roadmap. Core developers provide
1622
input and review into this, particularly during sprints. It's totally
1623
expected that community members ought to be working on things that
1624
interest them the most. The roadmap is valuable though because it provides
1625
context for understanding where the product is going as a whole and why.
1628
Using Releases and Milestones in Launchpad
1629
------------------------------------------
1631
TODO ... (Exact policies still under discussion)
1637
Keeping on top of bugs reported is an important part of ongoing release
1638
planning. Everyone in the community is welcome and encouraged to raise
1639
bugs, confirm bugs raised by others, and nominate a priority. Practically
1640
though, a good percentage of bug triage is often done by the core
1641
developers, partially because of their depth of product knowledge.
1643
With respect to bug triage, core developers are encouraged to play an
1644
active role with particular attention to the following tasks:
1646
* keeping the number of unconfirmed bugs low
1647
* ensuring the priorities are generally right (everything as critical - or
1648
medium - is meaningless)
1649
* looking out for regressions and turning those around sooner rather than later.
1652
As well as prioritizing bugs and nominating them against a
1653
target milestone, Launchpad lets core developers offer to mentor others in
1663
TODO: Things to cover:
1665
* RFI on release objectives
1666
* RFI on higher risk things that are best done early, e.g. changes to file
1668
* Communication of proposed dates
1671
Weekly Status Updates
1672
---------------------
1674
TODO: Things to cover:
1676
* Early communication to downstream teams (e.g. Launchpad) about changes in dependencies.
1677
* Reminder re lifecycle and where we're up to right now
1678
* Summary of recent successes and pending work
1679
* Reminder re release objectives
1680
* Reminder re things needing attention, e.g. bug triage, reviews, testing of certain things, etc.
1686
TODO: Get material from http://bazaar-vcs.org/FeatureFreeze.
1692
TODO: Get material from http://bazaar-vcs.org/ReleaseChecklist and clean
1693
it up to make it clearer what the RC vs final vs both tasks are.
1699
TODO: Get material from http://bazaar-vcs.org/ReleaseChecklist and clean
1700
it up to make it clearer what the RC vs final vs both tasks are.
1291
1703
vim: ft=rst tw=74 ai