/breezy/trunk

To get this branch, use:
bzr branch https://code.breezy-vcs.org/breezy/trunk

« back to all changes in this revision

Viewing changes to breezy/builtins.py

Merge trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
619
619
                revid = b.last_revision()
620
620
        try:
621
621
            revno_t = b.revision_id_to_dotted_revno(revid)
622
 
        except errors.NoSuchRevision:
 
622
        except (errors.NoSuchRevision, errors.GhostRevisionsHaveNoRevno):
623
623
            revno_t = ('???',)
624
624
        revno = ".".join(str(n) for n in revno_t)
625
625
        self.cleanup_now()
1537
1537
            note(gettext('Created new stacked branch referring to %s.') %
1538
1538
                 branch.get_stacked_on_url())
1539
1539
        except (errors.NotStacked, _mod_branch.UnstackableBranchFormat,
1540
 
                errors.UnstackableRepositoryFormat):
1541
 
            note(ngettext('Branched %d revision.',
1542
 
                          'Branched %d revisions.',
1543
 
                          branch.revno()) % branch.revno())
 
1540
            errors.UnstackableRepositoryFormat) as e:
 
1541
            revno = branch.revno()
 
1542
            if revno is not None:
 
1543
                note(ngettext('Branched %d revision.',
 
1544
                              'Branched %d revisions.',
 
1545
                              branch.revno()) % revno)
 
1546
            else:
 
1547
                note(gettext('Created new branch.'))
1544
1548
        if bind:
1545
1549
            # Bind to the parent
1546
1550
            parent_branch = Branch.open(from_location)
3533
3537
    _see_also = ['add', 'bugs', 'hooks', 'uncommit']
3534
3538
    takes_args = ['selected*']
3535
3539
    takes_options = [
3536
 
        ListOption('exclude', type=text_type, short_name='x',
3537
 
                   help="Do not consider changes made to a given path."),
3538
 
        Option('message', type=text_type,
3539
 
               short_name='m',
3540
 
               help="Description of the new revision."),
3541
 
        'verbose',
3542
 
        Option('unchanged',
3543
 
               help='Commit even if nothing has changed.'),
3544
 
        Option('file', type=text_type,
3545
 
               short_name='F',
3546
 
               argname='msgfile',
3547
 
               help='Take commit message from this file.'),
3548
 
        Option('strict',
3549
 
               help="Refuse to commit if there are unknown "
3550
 
               "files in the working tree."),
3551
 
        Option('commit-time', type=text_type,
3552
 
               help="Manually set a commit time using commit date "
3553
 
               "format, e.g. '2009-10-10 08:00:00 +0100'."),
3554
 
        ListOption('fixes', type=text_type,
3555
 
                   help="Mark a bug as being fixed by this revision "
3556
 
                   "(see \"brz help bugs\")."),
3557
 
        ListOption('author', type=text_type,
3558
 
                   help="Set the author's name, if it's different "
3559
 
                   "from the committer."),
3560
 
        Option('local',
3561
 
               help="Perform a local commit in a bound "
3562
 
               "branch.  Local commits are not pushed to "
3563
 
               "the master branch until a normal commit "
3564
 
               "is performed."
3565
 
               ),
3566
 
        Option('show-diff', short_name='p',
3567
 
               help='When no message is supplied, show the diff along'
3568
 
               ' with the status summary in the message editor.'),
3569
 
        Option('lossy',
3570
 
               help='When committing to a foreign version control '
3571
 
               'system do not push data that can not be natively '
 
3540
            ListOption('exclude', type=text_type, short_name='x',
 
3541
                help="Do not consider changes made to a given path."),
 
3542
            Option('message', type=text_type,
 
3543
                   short_name='m',
 
3544
                   help="Description of the new revision."),
 
3545
            'verbose',
 
3546
             Option('unchanged',
 
3547
                    help='Commit even if nothing has changed.'),
 
3548
             Option('file', type=text_type,
 
3549
                    short_name='F',
 
3550
                    argname='msgfile',
 
3551
                    help='Take commit message from this file.'),
 
3552
             Option('strict',
 
3553
                    help="Refuse to commit if there are unknown "
 
3554
                    "files in the working tree."),
 
3555
             Option('commit-time', type=text_type,
 
3556
                    help="Manually set a commit time using commit date "
 
3557
                    "format, e.g. '2009-10-10 08:00:00 +0100'."),
 
3558
             ListOption('bugs', type=text_type,
 
3559
                    help="Link to a related bug. (see \"brz help bugs\")."),
 
3560
             ListOption('fixes', type=text_type,
 
3561
                    help="Mark a bug as being fixed by this revision "
 
3562
                         "(see \"brz help bugs\")."),
 
3563
             ListOption('author', type=text_type,
 
3564
                    help="Set the author's name, if it's different "
 
3565
                         "from the committer."),
 
3566
             Option('local',
 
3567
                    help="Perform a local commit in a bound "
 
3568
                         "branch.  Local commits are not pushed to "
 
3569
                         "the master branch until a normal commit "
 
3570
                         "is performed."
 
3571
                    ),
 
3572
             Option('show-diff', short_name='p',
 
3573
                    help='When no message is supplied, show the diff along'
 
3574
                    ' with the status summary in the message editor.'),
 
3575
             Option('lossy',
 
3576
                    help='When committing to a foreign version control '
 
3577
                    'system do not push data that can not be natively '
3572
3578
                    'represented.'),
3573
3579
        ]
3574
3580
    aliases = ['ci', 'checkin']
3575
3581
 
3576
 
    def _iter_bug_fix_urls(self, fixes, branch):
 
3582
    def _iter_bug_urls(self, bugs, branch, status):
3577
3583
        default_bugtracker = None
3578
3584
        # Configure the properties for bug fixing attributes.
3579
 
        for fixed_bug in fixes:
3580
 
            tokens = fixed_bug.split(':')
 
3585
        for bug in bugs:
 
3586
            tokens = bug.split(':')
3581
3587
            if len(tokens) == 1:
3582
3588
                if default_bugtracker is None:
3583
3589
                    branch_config = branch.get_config_stack()
3589
3595
                        "'tracker:id' or specify a default bug tracker "
3590
3596
                        "using the `bugtracker` option.\nSee "
3591
3597
                        "\"brz help bugs\" for more information on this "
3592
 
                        "feature. Commit refused.") % fixed_bug)
 
3598
                        "feature. Commit refused.") % bug)
3593
3599
                tag = default_bugtracker
3594
3600
                bug_id = tokens[0]
3595
3601
            elif len(tokens) != 2:
3596
3602
                raise errors.BzrCommandError(gettext(
3597
3603
                    "Invalid bug %s. Must be in the form of 'tracker:id'. "
3598
3604
                    "See \"brz help bugs\" for more information on this "
3599
 
                    "feature.\nCommit refused.") % fixed_bug)
 
3605
                    "feature.\nCommit refused.") % bug)
3600
3606
            else:
3601
3607
                tag, bug_id = tokens
3602
3608
            try:
3603
 
                yield bugtracker.get_bug_url(tag, branch, bug_id)
 
3609
                yield bugtracker.get_bug_url(tag, branch, bug_id), status
3604
3610
            except bugtracker.UnknownBugTrackerAbbreviation:
3605
3611
                raise errors.BzrCommandError(gettext(
3606
 
                    'Unrecognized bug %s. Commit refused.') % fixed_bug)
 
3612
                    'Unrecognized bug %s. Commit refused.') % bug)
3607
3613
            except bugtracker.MalformedBugIdentifier as e:
3608
3614
                raise errors.BzrCommandError(gettext(
3609
3615
                    u"%s\nCommit refused.") % (e,))
3610
3616
 
3611
3617
    def run(self, message=None, file=None, verbose=False, selected_list=None,
3612
 
            unchanged=False, strict=False, local=False, fixes=None,
 
3618
            unchanged=False, strict=False, local=False, fixes=None, bugs=None,
3613
3619
            author=None, show_diff=False, exclude=None, commit_time=None,
3614
3620
            lossy=False):
 
3621
        import itertools
3615
3622
        from .commit import (
3616
3623
            PointlessCommit,
3617
3624
            )
3645
3652
 
3646
3653
        if fixes is None:
3647
3654
            fixes = []
 
3655
        if bugs is None:
 
3656
            bugs = []
3648
3657
        bug_property = bugtracker.encode_fixes_bug_urls(
3649
 
            self._iter_bug_fix_urls(fixes, tree.branch))
 
3658
            itertools.chain(
 
3659
                self._iter_bug_urls(bugs, tree.branch, bugtracker.RELATED),
 
3660
                self._iter_bug_urls(fixes, tree.branch, bugtracker.FIXED)))
3650
3661
        if bug_property:
3651
3662
            properties[u'bugs'] = bug_property
3652
3663
 
4449
4460
        verified = 'inapplicable'
4450
4461
 
4451
4462
        tree = WorkingTree.open_containing(directory)[0]
4452
 
        if tree.branch.revno() == 0:
 
4463
        if tree.branch.last_revision() == _mod_revision.NULL_REVISION:
4453
4464
            raise errors.BzrCommandError(gettext('Merging into empty branches not currently supported, '
4454
4465
                                                 'https://bugs.launchpad.net/bzr/+bug/308562'))
4455
4466
 
5854
5865
    If the preferred client can't be found (or used), your editor will be used.
5855
5866
 
5856
5867
    To use a specific mail program, set the mail_client configuration option.
5857
 
    (For Thunderbird 1.5, this works around some bugs.)  Supported values for
5858
 
    specific clients are "claws", "evolution", "kmail", "mail.app" (MacOS X's
5859
 
    Mail.app), "mutt", and "thunderbird"; generic options are "default",
5860
 
    "editor", "emacsclient", "mapi", and "xdg-email".  Plugins may also add
5861
 
    supported clients.
 
5868
    Supported values for specific clients are "claws", "evolution", "kmail",
 
5869
    "mail.app" (MacOS X's Mail.app), "mutt", and "thunderbird"; generic options
 
5870
    are "default", "editor", "emacsclient", "mapi", and "xdg-email".  Plugins
 
5871
    may also add supported clients.
5862
5872
 
5863
5873
    If mail is being sent, a to address is required.  This can be supplied
5864
5874
    either on the commandline, by setting the submit_to configuration
5865
5875
    option in the branch itself or the child_submit_to configuration option
5866
5876
    in the submit branch.
5867
5877
 
5868
 
    Two formats are currently supported: "4" uses revision bundle format 4 and
5869
 
    merge directive format 2.  It is significantly faster and smaller than
5870
 
    older formats.  It is compatible with Bazaar 0.19 and later.  It is the
5871
 
    default.  "0.9" uses revision bundle format 0.9 and merge directive
5872
 
    format 1.  It is compatible with Bazaar 0.12 - 0.18.
5873
 
 
5874
5878
    The merge directives created by brz send may be applied using brz merge or
5875
5879
    brz pull by specifying a file containing a merge directive as the location.
5876
5880
 
5951
5955
    branch is used in the merge instructions.  This means that a local mirror
5952
5956
    can be used as your actual submit branch, once you have set public_branch
5953
5957
    for that mirror.
5954
 
 
5955
 
    Two formats are currently supported: "4" uses revision bundle format 4 and
5956
 
    merge directive format 2.  It is significantly faster and smaller than
5957
 
    older formats.  It is compatible with Bazaar 0.19 and later.  It is the
5958
 
    default.  "0.9" uses revision bundle format 0.9 and merge directive
5959
 
    format 1.  It is compatible with Bazaar 0.12 - 0.18.
5960
5958
    """
5961
5959
 
5962
5960
    takes_options = [
6334
6332
            if branch is None:
6335
6333
                raise errors.BzrCommandError(
6336
6334
                    gettext('cannot create branch without source branch'))
6337
 
            to_location = lookup_new_sibling_branch(control_dir, to_location,
6338
 
                                                    possible_transports=possible_transports)
6339
 
            to_branch = branch.controldir.sprout(to_location,
6340
 
                                                 possible_transports=possible_transports,
6341
 
                                                 source_branch=branch).open_branch()
 
6335
            to_location = lookup_new_sibling_branch(
 
6336
                control_dir, to_location,
 
6337
                 possible_transports=possible_transports)
 
6338
            if revision is not None:
 
6339
                revision = revision.as_revision_id(branch)
 
6340
            to_branch = branch.controldir.sprout(
 
6341
                to_location,
 
6342
                 possible_transports=possible_transports,
 
6343
                 revision_id=revision,
 
6344
                 source_branch=branch).open_branch()
6342
6345
        else:
6343
6346
            try:
6344
6347
                to_branch = Branch.open(to_location,
6345
6348
                                        possible_transports=possible_transports)
6346
6349
            except errors.NotBranchError:
6347
 
                to_branch = open_sibling_branch(control_dir, to_location,
6348
 
                                                possible_transports=possible_transports)
6349
 
        if revision is not None:
6350
 
            revision = revision.as_revision_id(to_branch)
 
6350
                to_branch = open_sibling_branch(
 
6351
                    control_dir, to_location,
 
6352
                    possible_transports=possible_transports)
 
6353
            if revision is not None:
 
6354
                revision = revision.as_revision_id(to_branch)
6351
6355
        try:
6352
6356
            switch.switch(control_dir, to_branch, force, revision_id=revision,
6353
6357
                          store_uncommitted=store)