This page covers the process for effectively dealing with code and design reviews.
During the development of a feature from concept to rollout there are a number of reviews that occur. The first review process is the LaunchpadEnhancementProposalProcess where the concept is examined and refined into a plan. This plan is eventually signed off by the appropriate manager. Some time later, a coder will start to implement it. When they are about to do this a DesignPhoneCall takes place, which is a verbal review of the design of the planned implementation. Finally, once the code is complete the PreMergeReviews process takes place.
Design reviews are conducted by a DesignPhoneCall between a coder and a reviewer. The review aims to ensure that the resulting code will have few or no structural problems, which makes review of the code easier and faster.
Handling review responses
The story starts with you making a Launchpad Merge Proposal into launchpad-devel or launchpad-db-devel. From there the branch is queued for review at https://code.launchpad.net/launchpad/+activereviews . You may ask an on-call reviewer in #launchpad-reviews to review the branch outside of the queue. If you are a reviewer and choose not to have it reviewed by another reviewer, you can simply approve your merge proposal and land it at this point.
Once your reviewer has had time to go over the modifications, they will reply to the proposal with a description of areas or items that can be fixed, modified or improved in your code. They may also suggest better spellings of things in your code, or get into a discussion about domain specifics or obscure corner cases which they don't have enough personal knowledge of.
You must respond to each individual suggestion and question made by your reviewer; one of the main dangers with reviews is wasting everyones time by causing lots of back and forth discussions --- please make an effort to ensure you respond accurately to reviews.
One or more review cycles will be necessary per-modification; the number of cycles will depend on the amount of code changed, the increasing familiarity of the reviewer with your code, and of course the quality of the code produced.
You may only merge once the reviewer has approved the review. If you want to make a case why a specific suggestion should not be followed then you must bring it up with the reviewer and not merge until agreement has been reached and documented in the merge proposal.
Small branches are faster to review than large ones - a branch that is twice as big as another takes more than twice as long to review. Please try to keep branches small and focused.
When developers apply to become Launchpad reviewers they are assigned a mentor. We began referring to the person being mentored as a mentat, a made-up word you may see in reference to mentoring.
If your merge proposal is reviewed by a mentat his/her mentor will need to review the review. The mentat should add his mentor to the merge proposal. You must wait for both to approve the merge proposal before merging it.
If your branch changes the UI in any significant manner (even text rewordings) you'll need to seek a UI review. The UI reviewers are listed on ReviewerSchedule under the specialties column. If your UI reviewer is being mentored you'll need to follow the procedure outlined above to ensure the UI review is properly reviewed.
Dealing with Conflicts
If, after a successful review process, you submit your code to PQM only to find conflict you need to resolve the conflicts:
- Merge rocketfuel onto your reviewed branch,
- resolve the conflict,
- push, and
- submit again to PQM.
If, in the process of resolving conflicts, you make non-trivial changes to the code, you should consider having those changes reviewed before attempting to merge them.
The merge message
You must include a commit message for PQM describing the change. If you use ec2 land or bzr lp-land, those commands will take care of adding necessary tags, using information in the merge proposal.
describe the change.
On the other hand, if you use something other than ec2 land or bzr lp-land, you'll need to manually include an item who the reviewer of the change was. This is the general form of a commit message:
[r|rs=foo,bar][ui=none|baz|rs][bug=nnnnnn] describe the change.
'r' means review, 'rs' means rubberstamp. One or ore reviewers must follow the r or rs. The 'ui' token states who reviewed the ui; none may be used when there is no ui, and rs may be used when there is ui, but it needs review after merging.
[testfix] is a special leading token required to land a branch when trunk branch is broken and future merges must supply a fix.
Make it so
When you are ready to submit your branch to pqm for merging, use the following command (from RocketFuelSetup):
bzr pqm-submit -m '[r=reviewer] description of changes'
You can simplify the process of running tests on EC2 and landing your branch by doing the following:
- Get your merge proposal reviewed and in the 'Approved' state,
- Set the 'Commit Message' on the merge proposal to be the description of the branch, as above but without the reviewers and bug information. (Only the part above marked 'describe the change'.)
% utilities/ec2 land -- voilà, that's it!
- Enjoy a snack, a nap, or take in a movie while ec2 runs the test suite and then submits your branch to PQM.
Only Canonical employees are currently allowed to submit to the Launchpad PQM. Because we deploy code that passed PQM directly to a staging service, a patch could accidentally disclose confidential data and Canonical is not willing to risk that happening due to a non-staff change. As such non Canonical Launchpad developers need to find a Canonical Launchpad developer to test and land their changes. Your reviewer is expected to do it but do not assume he will -- explicitly ask him to do so when the review is approved.
If your original reviewer is unavailable when it is time to land your branch, please go to #launchpad-dev and ask any reviewer there to land your approved branch for you.