~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to doc/developers/HACKING.txt

  • Committer: Ian Clatworthy
  • Date: 2007-09-05 11:25:49 UTC
  • mto: (2800.1.1 ianc-integration)
  • mto: This revision was merged to the branch mainline in revision 2802.
  • Revision ID: ian.clatworthy@internode.on.net-20070905112549-86ehh7odw9ncloar
Merge Core Developer Hanbook into HACKING

Show diffs side-by-side

added added

removed removed

Lines of Context:
6
6
 
7
7
(The current version of this document is available in the file 
8
8
``doc/developers/HACKING.txt`` in the source tree, or at
9
 
http://doc.bazaar-vcs.org/bzr.dev/developers/HACKING.html)
 
9
http://doc.bazaar-vcs.org/bzr.dev/en/developer-guide/HACKING.html)
10
10
 
11
11
 
12
12
Getting Started
1287
1287
http://bazaar-vcs.org/BzrWin32Installer
1288
1288
 
1289
1289
 
 
1290
Core Developer Tasks
 
1291
####################
 
1292
 
 
1293
Overview
 
1294
========
 
1295
 
 
1296
What is a Core Developer?
 
1297
-------------------------
 
1298
 
 
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:
 
1303
 
 
1304
* reviewing changes
 
1305
* reviewing blueprints
 
1306
* planning releases
 
1307
* managing releases.
 
1308
 
 
1309
.. note::
 
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.
 
1316
 
 
1317
 
 
1318
The Development Lifecycle
 
1319
-------------------------
 
1320
 
 
1321
As a rule, Bazaar development follows a 4 week cycle:
 
1322
 
 
1323
* 2 weeks - general changes
 
1324
* 1 week - feature freeze
 
1325
* 1 week+ - Release Candidate stabilization
 
1326
 
 
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
 
1333
Candidates.
 
1334
 
 
1335
.. note::
 
1336
  There is a one week overlap between the start of one release and
 
1337
  the end of the previous one.
 
1338
 
 
1339
 
 
1340
Communicating and Coordinating
 
1341
------------------------------
 
1342
 
 
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:
 
1346
 
 
1347
#. Assign bugs to yourself in Launchpad
 
1348
#. Mention it on the mailing list
 
1349
#. Mention it on IRC
 
1350
 
 
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)::
 
1357
 
 
1358
  [DEFAULT]
 
1359
  email = Joe Smith <joe.smith@internode.on.net>
 
1360
  smtp_server = mail.internode.on.net:25
 
1361
 
 
1362
Then add these lines for the relevant branches in ``locations.conf``::
 
1363
 
 
1364
  post_commit_to = bazaar-commits@lists.canonical.com
 
1365
  post_commit_mailer = smtplib
 
1366
 
 
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.
 
1370
 
 
1371
 
 
1372
Reviewing Changes
 
1373
=================
 
1374
 
 
1375
Setting Up Your Workspace for Reviews
 
1376
-------------------------------------
 
1377
 
 
1378
TODO: Incorporate John Arbash Meinel's detailed email to Ian C on the
 
1379
numerous ways of setting up integration branches.
 
1380
 
 
1381
 
 
1382
The Review Checklist
 
1383
--------------------
 
1384
 
 
1385
There are broadly three gates for code to get in:
 
1386
 
 
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.
 
1391
 
 
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.
 
1395
 
 
1396
* Improves bugs, features, speed, or code simplicity.
 
1397
 
 
1398
As we approach and pass 1.0, a fourth gate - performance impact - will
 
1399
also be a consideration.
 
1400
 
 
1401
 
 
1402
Communicating Review Results
 
1403
----------------------------
 
1404
 
 
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
 
1408
feedback on.
 
1409
 
 
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.
 
1415
 
 
1416
 
 
1417
Recording Votes on Changes
 
1418
--------------------------
 
1419
 
 
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
 
1425
directly.
 
1426
 
 
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.
 
1432
 
 
1433
 
 
1434
Submitting Changes
 
1435
==================
 
1436
 
 
1437
An Overview of PQM
 
1438
------------------
 
1439
 
 
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:
 
1444
 
 
1445
.. pull-quote::
 
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.
 
1452
 
 
1453
In a nutshell, here's the overall submission process:
 
1454
 
 
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
 
1458
 
 
1459
.. note::
 
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.
 
1463
 
 
1464
As a result, the following things are needed to use PQM for submissions:
 
1465
 
 
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).
 
1470
 
 
1471
 
 
1472
Selecting a Public Branch Location
 
1473
----------------------------------
 
1474
 
 
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:
 
1477
 
 
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.
 
1485
 
 
1486
.. note::
 
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.
 
1490
 
 
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).
 
1495
 
 
1496
 
 
1497
Configuring the PQM Plug-In
 
1498
---------------------------
 
1499
 
 
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
 
1504
this::
 
1505
 
 
1506
  star-merge source-branch target-branch
 
1507
 
 
1508
For example::
 
1509
 
 
1510
  star-merge http://bzr.arbash-meinel.com/branches/bzr/jam-integration http://bazaar-vcs.org/bzr/bzr.dev
 
1511
 
 
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.
 
1515
 
 
1516
The advantages of using the PQM plugin are:
 
1517
 
 
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
 
1520
   from or into.
 
1521
 
 
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.
 
1524
 
 
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.
 
1527
 
 
1528
#. Thunderbird refuses to not wrap lines, and request lines are usually
 
1529
   pretty long (you have 2 long URLs in there).
 
1530
 
 
1531
Here are sample configuration settings for the PQM plugin. Here are the
 
1532
lines in bazaar.conf::
 
1533
 
 
1534
  [DEFAULT]
 
1535
  email = Joe Smith <joe.smith@internode.on.net>
 
1536
  smtp_server=mail.internode.on.net:25
 
1537
 
 
1538
And here are the lines in ``locations.conf`` (or ``branch.conf`` for
 
1539
dirstate-tags branches)::
 
1540
 
 
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
 
1548
 
 
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
 
1552
the relevant file.
 
1553
 
 
1554
 
 
1555
Submitting a Change
 
1556
-------------------
 
1557
 
 
1558
Here is one possible recipe once the above environment is set up:
 
1559
 
 
1560
#. pull bzr.dev => my-integration
 
1561
#. merge patch => my-integration
 
1562
#. fix up any final merge conflicts (NEWS being the big killer here).
 
1563
#. commit
 
1564
#. push
 
1565
#. pqm-submit
 
1566
 
 
1567
.. note::
 
1568
  The ``push`` step is not required if ``my-integration`` is a checkout of
 
1569
  a public branch.
 
1570
 
 
1571
  Because of defaults, you can type a single message into commit and
 
1572
  pqm-commit will reuse that.
 
1573
 
 
1574
 
 
1575
Tracking Change Acceptance
 
1576
--------------------------
 
1577
 
 
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
 
1580
PQM's queue.
 
1581
 
 
1582
When PQM completes processing a change, an email is sent to you with the
 
1583
results.
 
1584
 
 
1585
 
 
1586
Reviewing Blueprints
 
1587
====================
 
1588
 
 
1589
Blueprint Tracking Using Launchpad
 
1590
----------------------------------
 
1591
 
 
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.
 
1598
 
 
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.
 
1603
 
 
1604
 
 
1605
Recording Blueprint Review Feedback
 
1606
-----------------------------------
 
1607
 
 
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.
 
1612
 
 
1613
 
 
1614
Planning Releases
 
1615
=================
 
1616
 
 
1617
Roadmaps
 
1618
--------
 
1619
 
 
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.
 
1626
 
 
1627
 
 
1628
Using Releases and Milestones in Launchpad
 
1629
------------------------------------------
 
1630
 
 
1631
TODO ... (Exact policies still under discussion)
 
1632
 
 
1633
 
 
1634
Bug Triage
 
1635
----------
 
1636
 
 
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.
 
1642
 
 
1643
With respect to bug triage, core developers are encouraged to play an
 
1644
active role with particular attention to the following tasks:
 
1645
 
 
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.
 
1650
 
 
1651
.. note::
 
1652
  As well as prioritizing bugs and nominating them against a
 
1653
  target milestone, Launchpad lets core developers offer to mentor others in
 
1654
  fixing them. Nice.
 
1655
 
 
1656
 
 
1657
Managing a Release
 
1658
==================
 
1659
 
 
1660
Starting a Release
 
1661
------------------
 
1662
 
 
1663
TODO: Things to cover:
 
1664
 
 
1665
* RFI on release objectives
 
1666
* RFI on higher risk things that are best done early, e.g. changes to file
 
1667
  format defaults
 
1668
* Communication of proposed dates
 
1669
 
 
1670
 
 
1671
Weekly Status Updates
 
1672
---------------------
 
1673
 
 
1674
TODO: Things to cover:
 
1675
 
 
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.
 
1681
 
 
1682
 
 
1683
Feature Freeze
 
1684
--------------
 
1685
 
 
1686
TODO: Get material from http://bazaar-vcs.org/FeatureFreeze.
 
1687
 
 
1688
 
 
1689
Release Candidates
 
1690
------------------
 
1691
 
 
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.
 
1694
 
 
1695
 
 
1696
The Final Release
 
1697
-----------------
 
1698
 
 
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.
 
1701
 
1290
1702
..
1291
1703
   vim: ft=rst tw=74 ai