/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to launchpad.py

Add support for prerequisite branches.

Show diffs side-by-side

added added

removed removed

Lines of Context:
346
346
        else:
347
347
            self.target_branch = target_branch
348
348
            self.target_branch_lp = self.launchpad.branches.getByUrl(url=target_branch.user_url)
349
 
        self.prerequisite_branch = self._get_prerequisite_branch()
350
349
        self.commit_message = message
351
350
        self.approve = approve
352
351
        self.fixes = fixes
357
356
            return self.commit_message.strip().encode('utf-8')
358
357
        info = ["Source: %s\n" % self.source_branch_lp.bzr_identity]
359
358
        info.append("Target: %s\n" % self.target_branch_lp.bzr_identity)
360
 
        if self.prerequisite_branch is not None:
361
 
            info.append("Prereq: %s\n" % self.prerequisite_branch.bzr_identity)
362
359
        return ''.join(info)
363
360
 
364
361
    def get_initial_body(self):
397
394
            if mp.target_branch.self_link == self.target_branch_lp.self_link:
398
395
                raise MergeProposalExists(lp_api.canonical_url(mp))
399
396
 
400
 
    def _get_prerequisite_branch(self):
401
 
        hooks = self.hooks['get_prerequisite']
402
 
        prerequisite_branch = None
403
 
        for hook in hooks:
404
 
            prerequisite_branch = hook(
405
 
                {'launchpad': self.launchpad,
406
 
                 'source_branch': self.source_branch_lp,
407
 
                 'target_branch': self.target_branch_lp,
408
 
                 'prerequisite_branch': prerequisite_branch})
409
 
        return prerequisite_branch
410
 
 
411
397
    def approve_proposal(self, mp):
412
398
        with self.source_branch.lock_read():
413
399
            _call_webservice(
415
401
                vote=u'Approve',
416
402
                subject='', # Use the default subject.
417
403
                content=u"Rubberstamp! Proposer approves of own proposal.")
418
 
            _call_webservice(mp.setStatus, status=u'Approved', revid=source_branch.last_revision())
 
404
            _call_webservice(mp.setStatus, status=u'Approved',
 
405
                             revid=self.source_branch.last_revision())
419
406
 
420
 
    def create_proposal(self, description, reviewers=None, labels=None):
 
407
    def create_proposal(self, description, reviewers=None, labels=None,
 
408
                        prerequisite_branch=None):
421
409
        """Perform the submission."""
422
410
        if labels:
423
411
            raise LabelsUnsupported()
424
 
        if self.prerequisite_branch is None:
 
412
        if prerequisite_branch is not None:
 
413
            prereq = self.launchpad.branches.getByUrl(
 
414
                url=prerequisite_branch.user_url)
 
415
        else:
425
416
            prereq = None
426
 
        else:
427
 
            prereq = self.prerequisite_branch.lp
428
 
            self.prerequisite_branch.update_lp()
429
417
        if reviewers is None:
430
418
            reviewers = []
431
419
        try:
482
470
        else:
483
471
            self.target_branch = target_branch
484
472
            (self.target_repo_lp, self.target_branch_lp) = self.lp_host._get_lp_git_ref_from_branch(target_branch)
485
 
        self.prerequisite_branch = self._get_prerequisite_branch()
486
473
        self.commit_message = message
487
474
        self.approve = approve
488
475
        self.fixes = fixes
493
480
            return self.commit_message.strip().encode('utf-8')
494
481
        info = ["Source: %s\n" % self.source_branch.user_url]
495
482
        info.append("Target: %s\n" % self.target_branch.user_url)
496
 
        if self.prerequisite_branch is not None:
497
 
            info.append("Prereq: %s\n" % self.prerequisite_branch.user_url)
498
483
        return ''.join(info)
499
484
 
500
485
    def get_initial_body(self):
533
518
            if mp.target_branch.self_link == self.target_branch_lp.self_link:
534
519
                raise MergeProposalExists(lp_api.canonical_url(mp))
535
520
 
536
 
    def _get_prerequisite_branch(self):
537
 
        hooks = self.hooks['get_prerequisite']
538
 
        prerequisite_branch = None
539
 
        for hook in hooks:
540
 
            prerequisite_branch = hook(
541
 
                {'launchpad': self.launchpad,
542
 
                 'source_branch': self.source_branch_lp,
543
 
                 'target_branch': self.target_branch_lp,
544
 
                 'prerequisite_branch': prerequisite_branch})
545
 
        return prerequisite_branch
546
 
 
547
521
    def approve_proposal(self, mp):
548
522
        with self.source_branch.lock_read():
549
523
            _call_webservice(
551
525
                vote=u'Approve',
552
526
                subject='', # Use the default subject.
553
527
                content=u"Rubberstamp! Proposer approves of own proposal.")
554
 
            _call_webservice(mp.setStatus, status=u'Approved', revid=source_branch.last_revision())
 
528
            _call_webservice(
 
529
                mp.setStatus, status=u'Approved',
 
530
                revid=self.source_branch.last_revision())
555
531
 
556
 
    def create_proposal(self, description, reviewers=None, labels=None):
 
532
    def create_proposal(self, description, reviewers=None, labels=None,
 
533
                        prerequisite_branch=None):
557
534
        """Perform the submission."""
558
535
        if labels:
559
536
            raise LabelsUnsupported()
560
 
        if self.prerequisite_branch is None:
561
 
            prereq = None
 
537
        if prerequisite_branch is not None:
 
538
            (prereq_repo_lp, prereq_branch_lp) = self.lp_host._get_lp_git_ref_from_branch(prerequisite_branch)
562
539
        else:
563
 
            prereq = self.prerequisite_branch.lp
564
 
            self.prerequisite_branch.update_lp()
 
540
            prereq_branch_lp = None
565
541
        if reviewers is None:
566
542
            reviewers = []
567
543
        try:
568
544
            mp = _call_webservice(
569
545
                self.source_branch_lp.createMergeProposal,
570
546
                merge_target=self.target_branch_lp,
571
 
                merge_prerequisite=prereq,
 
547
                merge_prerequisite=prereq_branch_lp,
572
548
                initial_comment=description.strip().encode('utf-8'),
573
549
                commit_message=self.commit_message,
574
550
                needs_review=True,
590
566
                mp.linkBug,
591
567
                bug=self.launchpad.bugs[int(self.fixes)])
592
568
        return LaunchpadMergeProposal(mp)
 
569
 
 
570
 
 
571
def modified_files(old_tree, new_tree):
 
572
    """Return a list of paths in the new tree with modified contents."""
 
573
    for f, (op, path), c, v, p, n, (ok, k), e in new_tree.iter_changes(
 
574
            old_tree):
 
575
        if c and k == 'file':
 
576
            yield str(path)