~ursinha/lp-qa-tools/bzr-tarmacland

« back to all changes in this revision

Viewing changes to lpland.py

  • Committer: Diogo Matsubara
  • Date: 2010-09-09 12:27:00 UTC
  • mto: This revision was merged to the branch mainline in revision 73.
  • Revision ID: diogo.matsubara@canonical.com-20100909122700-5upkmmw24qux6iel
Implements additional options to the lpland.py plugin: removes the restriction to use the --no-qa and --incremental option together and implements the --rollback option.

Show diffs side-by-side

added added

removed removed

Lines of Context:
180
180
        return branch.composePublicURL(scheme="bzr+ssh")
181
181
 
182
182
    def get_commit_message(self, commit_text, testfix=False, no_qa=False,
183
 
                           incremental=False):
 
183
                           incremental=False, rollback=None):
184
184
        """Get the Launchpad-style commit message for a merge proposal."""
185
185
        reviews = self.get_reviews()
186
186
        bugs = self.get_bugs()
190
190
            get_reviewer_clause(reviews),
191
191
            get_bugs_clause(bugs),
192
192
            get_qa_clause(bugs, no_qa,
193
 
                incremental),
 
193
                incremental, rollback=rollback),
194
194
            ])
195
195
 
196
196
        return '%s %s' % (tags, commit_text)
199
199
class Submitter(object):
200
200
 
201
201
    def __init__(self, branch, location, testfix=False, no_qa=False,
202
 
                 incremental=False):
 
202
                 incremental=False, rollback=None):
203
203
        self.branch = branch
204
204
        self.testfix = testfix
205
205
        self.no_qa = no_qa
206
206
        self.incremental = incremental
 
207
        self.rollback = rollback
207
208
        self.config = self.branch.get_config()
208
209
        self.mail_to = self.config.get_user_option('pqm_email')
209
210
        if not self.mail_to:
225
226
        submission.check_public_branch()
226
227
 
227
228
    @staticmethod
228
 
    def set_message(submission, mp, testfix, no_qa, incremental):
 
229
    def set_message(submission, mp, testfix, no_qa, incremental,
 
230
            rollback=None):
229
231
        pqm_command = ''.join(submission.to_lines())
230
232
        commit_message = mp.commit_message or ''
231
233
        start_message = mp.get_commit_message(commit_message, testfix, no_qa,
232
 
            incremental)
 
234
            incremental, rollback=rollback)
233
235
        message = msgeditor.edit_commit_message(
234
236
            'pqm command:\n%s' % pqm_command,
235
237
            start_message=start_message).rstrip('\n')
243
245
        submission = self.submission(mp)
244
246
        self.check_submission(submission)
245
247
        self.set_message(submission, mp, self.testfix, self.no_qa,
246
 
            self.incremental)
 
248
            self.incremental, rollback=self.rollback)
247
249
        email = submission.to_email(self.mail_from, self.mail_to)
248
250
        if outf is not None:
249
251
            outf.write(email.as_string())
281
283
    return testfix_clause
282
284
 
283
285
 
284
 
def get_qa_clause(bugs, no_qa=False, incremental=False):
 
286
def get_qa_clause(bugs, no_qa=False, incremental=False, rollback=None):
285
287
    """Check the no-qa and incremental options, getting the qa clause.
286
288
 
287
 
    The qa clause will always be or no-qa, or incremental or no tags, never
288
 
    both at the same time.
 
289
    The qa clause will always be or no-qa, or incremental, or no-qa and
 
290
    incremental, or a revno for the rollback clause, or no tags.
 
291
 
 
292
    See https://dev.launchpad.net/QAProcessContinuousRollouts for detailed
 
293
    explanation of each clause.
289
294
    """
290
295
    qa_clause = ""
291
296
 
292
 
    if not bugs and not no_qa and not incremental:
 
297
    if not bugs and not no_qa and not incremental and not rollback:
293
298
        raise MissingBugsError
294
299
 
295
300
    if incremental and not bugs:
296
301
        raise MissingBugsIncrementalError
297
302
 
298
 
    if incremental:
 
303
    if no_qa and incremental:
 
304
        qa_clause = '[no-qa][incr]'
 
305
    elif incremental:
299
306
        qa_clause = '[incr]'
300
307
    elif no_qa:
301
308
        qa_clause = '[no-qa]'
 
309
    elif rollback:
 
310
        qa_clause = '[rollback=%d]' % rollback
302
311
    else:
303
312
        qa_clause = ''
304
313