~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/builtins.py

Merge from bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
166
166
                     Option('short', help='Use short status indicators.',
167
167
                            short_name='S'),
168
168
                     Option('versioned', help='Only show versioned files.',
169
 
                            short_name='V')
 
169
                            short_name='V'),
 
170
                     Option('no-pending', help='Don\'t show pending merges.',
 
171
                           ),
170
172
                     ]
171
173
    aliases = ['st', 'stat']
172
174
 
175
177
    
176
178
    @display_command
177
179
    def run(self, show_ids=False, file_list=None, revision=None, short=False,
178
 
            versioned=False):
 
180
            versioned=False, no_pending=False):
179
181
        from bzrlib.status import show_tree_status
180
182
 
181
183
        if revision and len(revision) > 2:
186
188
            
187
189
        show_tree_status(tree, show_ids=show_ids,
188
190
                         specific_files=file_list, revision=revision,
189
 
                         to_file=self.outf, short=short, versioned=versioned)
 
191
                         to_file=self.outf, short=short, versioned=versioned,
 
192
                         show_pending=not no_pending)
190
193
 
191
194
 
192
195
class cmd_cat_revision(Command):
221
224
                if rev is None:
222
225
                    raise errors.BzrCommandError('You cannot specify a NULL'
223
226
                                                 ' revision.')
224
 
                revno, rev_id = rev.in_history(b)
 
227
                rev_id = rev.as_revision_id(b)
225
228
                self.outf.write(b.repository.get_revision_xml(rev_id).decode('utf-8'))
226
229
    
227
230
 
295
298
            revs.append(RevisionSpec.from_string('-1'))
296
299
 
297
300
        for rev in revs:
298
 
            revinfo = rev.in_history(b)
299
 
            if revinfo.revno is None:
 
301
            revision_id = rev.as_revision_id(b)
 
302
            try:
 
303
                revno = '%4d' % (b.revision_id_to_revno(revision_id))
 
304
            except errors.NoSuchRevision:
300
305
                dotted_map = b.get_revision_id_to_revno_map()
301
 
                revno = '.'.join(str(i) for i in dotted_map[revinfo.rev_id])
302
 
                print '%s %s' % (revno, revinfo.rev_id)
303
 
            else:
304
 
                print '%4d %s' % (revinfo.revno, revinfo.rev_id)
 
306
                revno = '.'.join(str(i) for i in dotted_map[revision_id])
 
307
            print '%s %s' % (revno, revision_id)
305
308
 
306
309
    
307
310
class cmd_add(Command):
466
469
                    raise errors.BzrCommandError(
467
470
                        'bzr inventory --revision takes exactly one revision'
468
471
                        ' identifier')
469
 
                revision_id = revision[0].in_history(work_tree.branch).rev_id
 
472
                revision_id = revision[0].as_revision_id(work_tree.branch)
470
473
                tree = work_tree.branch.repository.revision_tree(revision_id)
471
474
 
472
475
                extra_trees = [work_tree]
589
592
    that, you can omit the location to use the default.  To change the
590
593
    default, use --remember. The value will only be saved if the remote
591
594
    location can be accessed.
 
595
 
 
596
    Note: The location can be specified either in the form of a branch,
 
597
    or in the form of a path to a file containing a merge directive generated
 
598
    with bzr send.
592
599
    """
593
600
 
594
601
    _see_also = ['push', 'update', 'status-flags']
657
664
 
658
665
        if revision is not None:
659
666
            if len(revision) == 1:
660
 
                revision_id = revision[0].in_history(branch_from).rev_id
 
667
                revision_id = revision[0].as_revision_id(branch_from)
661
668
            else:
662
669
                raise errors.BzrCommandError(
663
670
                    'bzr pull --revision takes one value.')
918
925
        br_from.lock_read()
919
926
        try:
920
927
            if len(revision) == 1 and revision[0] is not None:
921
 
                revision_id = revision[0].in_history(br_from)[1]
 
928
                revision_id = revision[0].as_revision_id(br_from)
922
929
            else:
923
930
                # FIXME - wt.last_revision, fallback to branch, fall back to
924
931
                # None or perhaps NULL_REVISION to mean copy nothing
1012
1019
        if files_from is not None:
1013
1020
            accelerator_tree = WorkingTree.open(files_from)
1014
1021
        if len(revision) == 1 and revision[0] is not None:
1015
 
            revision_id = _mod_revision.ensure_null(
1016
 
                revision[0].in_history(source)[1])
 
1022
            revision_id = revision[0].as_revision_id(source)
1017
1023
        else:
1018
1024
            revision_id = None
1019
1025
        if to_location is None:
1873
1879
            relpath += '/'
1874
1880
        if revision is not None:
1875
1881
            tree = branch.repository.revision_tree(
1876
 
                revision[0].in_history(branch).rev_id)
 
1882
                revision[0].as_revision_id(branch))
1877
1883
        elif tree is None:
1878
1884
            tree = branch.basis_tree()
1879
1885
 
2138
2144
        else:
2139
2145
            if len(revision) != 1:
2140
2146
                raise errors.BzrCommandError('bzr export --revision takes exactly 1 argument')
2141
 
            rev_id = revision[0].in_history(b).rev_id
 
2147
            rev_id = revision[0].as_revision_id(b)
2142
2148
        t = b.repository.revision_tree(rev_id)
2143
2149
        try:
2144
2150
            export(t, dest, format, root)
2183
2189
        if revision is None:
2184
2190
            revision_id = b.last_revision()
2185
2191
        else:
2186
 
            revision_id = revision[0].in_history(b).rev_id
 
2192
            revision_id = revision[0].as_revision_id(b)
2187
2193
 
2188
2194
        cur_file_id = tree.path2id(relpath)
2189
2195
        rev_tree = b.repository.revision_tree(revision_id)
2763
2769
class cmd_merge(Command):
2764
2770
    """Perform a three-way merge.
2765
2771
    
2766
 
    The branch is the branch you will merge from.  By default, it will merge
2767
 
    the latest revision.  If you specify a revision, that revision will be
2768
 
    merged.  If you specify two revisions, the first will be used as a BASE,
2769
 
    and the second one as OTHER.  Revision numbers are always relative to the
2770
 
    specified branch.
 
2772
    The source of the merge can be specified either in the form of a branch,
 
2773
    or in the form of a path to a file containing a merge directive generated
 
2774
    with bzr send. If neither is specified, the default is the upstream branch
 
2775
    or the branch most recently merged using --remember.
 
2776
 
 
2777
    When merging a branch, by default the tip will be merged. To pick a different
 
2778
    revision, pass --revision. If you specify two values, the first will be used as
 
2779
    BASE and the second one as OTHER. Merging individual revisions, or a subset of
 
2780
    available revisions, like this is commonly referred to as "cherrypicking".
 
2781
 
 
2782
    Revision numbers are always relative to the branch being merged.
2771
2783
 
2772
2784
    By default, bzr will try to merge in all new work from the other
2773
2785
    branch, automatically determining an appropriate base.  If this
2804
2816
        To merge the changes introduced by 82, without previous changes::
2805
2817
 
2806
2818
            bzr merge -r 81..82 ../bzr.dev
 
2819
 
 
2820
        To apply a merge directive contained in in /tmp/merge:
 
2821
 
 
2822
            bzr merge /tmp/merge
2807
2823
    """
2808
2824
 
2809
2825
    encoding_type = 'exact'
2810
2826
    _see_also = ['update', 'remerge', 'status-flags']
2811
 
    takes_args = ['branch?']
 
2827
    takes_args = ['location?']
2812
2828
    takes_options = [
2813
2829
        'change',
2814
2830
        'revision',
2834
2850
        Option('preview', help='Instead of merging, show a diff of the merge.')
2835
2851
    ]
2836
2852
 
2837
 
    def run(self, branch=None, revision=None, force=False, merge_type=None,
2838
 
            show_base=False, reprocess=False, remember=False,
 
2853
    def run(self, location=None, revision=None, force=False,
 
2854
            merge_type=None, show_base=False, reprocess=False, remember=False,
2839
2855
            uncommitted=False, pull=False,
2840
2856
            directory=None,
2841
2857
            preview=False,
2842
2858
            ):
2843
 
        # This is actually a branch (or merge-directive) *location*.
2844
 
        location = branch
2845
 
        del branch
2846
 
 
2847
2859
        if merge_type is None:
2848
2860
            merge_type = _mod_merge.Merge3Merger
2849
2861
 
2982
2994
            other_revision_id = _mod_revision.ensure_null(
2983
2995
                other_branch.last_revision())
2984
2996
        else:
2985
 
            other_revision_id = \
2986
 
                _mod_revision.ensure_null(
2987
 
                    revision[-1].in_history(other_branch).rev_id)
 
2997
            other_revision_id = revision[-1].as_revision_id(other_branch)
2988
2998
        if (revision is not None and len(revision) == 2
2989
2999
            and revision[0] is not None):
2990
 
            base_revision_id = \
2991
 
                _mod_revision.ensure_null(
2992
 
                    revision[0].in_history(base_branch).rev_id)
 
3000
            base_revision_id = revision[0].as_revision_id(base_branch)
2993
3001
        else:
2994
3002
            base_revision_id = None
2995
3003
        # Remember where we merge from
3208
3216
        elif len(revision) != 1:
3209
3217
            raise errors.BzrCommandError('bzr revert --revision takes exactly 1 argument')
3210
3218
        else:
3211
 
            rev_id = revision[0].in_history(tree.branch).rev_id
 
3219
            rev_id = revision[0].as_revision_id(tree.branch)
3212
3220
        pb = ui.ui_factory.nested_progress_bar()
3213
3221
        try:
3214
3222
            tree.revert(file_list,
3459
3467
            if revision is None:
3460
3468
                rev_id = b.last_revision()
3461
3469
            else:
3462
 
                rev_id = revision[0].in_history(b).rev_id
 
3470
                rev_id = revision[0].as_revision_id(b)
3463
3471
            t = testament_class.from_revision(b.repository, rev_id)
3464
3472
            if long:
3465
3473
                sys.stdout.writelines(t.as_text_lines())
3506
3514
            elif len(revision) != 1:
3507
3515
                raise errors.BzrCommandError('bzr annotate --revision takes exactly 1 argument')
3508
3516
            else:
3509
 
                revision_id = revision[0].in_history(branch).rev_id
 
3517
                revision_id = revision[0].as_revision_id(branch)
3510
3518
            tree = branch.repository.revision_tree(revision_id)
3511
3519
            if wt is not None:
3512
3520
                file_id = wt.path2id(relpath)
4007
4015
            if len(revision) > 2:
4008
4016
                raise errors.BzrCommandError('bzr merge-directive takes '
4009
4017
                    'at most two one revision identifiers')
4010
 
            revision_id = revision[-1].in_history(branch).rev_id
 
4018
            revision_id = revision[-1].as_revision_id(branch)
4011
4019
            if len(revision) == 2:
4012
 
                base_revision_id = revision[0].in_history(branch).rev_id
4013
 
                base_revision_id = ensure_null(base_revision_id)
 
4020
                base_revision_id = revision[0].as_revision_id(branch)
4014
4021
        else:
4015
4022
            revision_id = branch.last_revision()
4016
4023
        revision_id = ensure_null(revision_id)
4078
4085
    older formats.  It is compatible with Bazaar 0.19 and later.  It is the
4079
4086
    default.  "0.9" uses revision bundle format 0.9 and merge directive
4080
4087
    format 1.  It is compatible with Bazaar 0.12 - 0.18.
 
4088
    
 
4089
    Merge directives are applied using the merge command or the pull command.
4081
4090
    """
4082
4091
 
4083
4092
    encoding_type = 'exact'
4084
4093
 
4085
 
    _see_also = ['merge']
 
4094
    _see_also = ['merge', 'pull']
4086
4095
 
4087
4096
    takes_args = ['submit_branch?', 'public_branch?']
4088
4097
 
4174
4183
                if len(revision) > 2:
4175
4184
                    raise errors.BzrCommandError('bzr send takes '
4176
4185
                        'at most two one revision identifiers')
4177
 
                revision_id = revision[-1].in_history(branch).rev_id
 
4186
                revision_id = revision[-1].as_revision_id(branch)
4178
4187
                if len(revision) == 2:
4179
 
                    base_revision_id = revision[0].in_history(branch).rev_id
 
4188
                    base_revision_id = revision[0].as_revision_id(branch)
4180
4189
            if revision_id is None:
4181
4190
                revision_id = branch.last_revision()
4182
4191
            if revision_id == NULL_REVISION:
4342
4351
                        raise errors.BzrCommandError(
4343
4352
                            "Tags can only be placed on a single revision, "
4344
4353
                            "not on a range")
4345
 
                    revision_id = revision[0].in_history(branch).rev_id
 
4354
                    revision_id = revision[0].as_revision_id(branch)
4346
4355
                else:
4347
4356
                    revision_id = branch.last_revision()
4348
4357
                if (not force) and branch.tags.has_tag(tag_name):
4427
4436
                     tree='Reconfigure to a tree.',
4428
4437
                     checkout='Reconfigure to a checkout.',
4429
4438
                     lightweight_checkout='Reconfigure to a lightweight'
4430
 
                     ' checkout.'),
 
4439
                     ' checkout.',
 
4440
                     standalone='Reconfigure to be standalone.',
 
4441
                     use_shared='Reconfigure to use a shared repository.'),
4431
4442
                     Option('bind-to', help='Branch to bind checkout to.',
4432
4443
                            type=str),
4433
4444
                     Option('force',
4449
4460
        elif target_type == 'lightweight-checkout':
4450
4461
            reconfiguration = reconfigure.Reconfigure.to_lightweight_checkout(
4451
4462
                directory, bind_to)
 
4463
        elif target_type == 'use-shared':
 
4464
            reconfiguration = reconfigure.Reconfigure.to_use_shared(directory)
 
4465
        elif target_type == 'standalone':
 
4466
            reconfiguration = reconfigure.Reconfigure.to_standalone(directory)
4452
4467
        reconfiguration.apply(force)
4453
4468
 
4454
4469
 
4464
4479
    are merged. The user can commit or revert these as they desire.
4465
4480
 
4466
4481
    Pending merges need to be committed or reverted before using switch.
 
4482
 
 
4483
    The path to the branch to switch to can be specified relative to the parent
 
4484
    directory of the current branch. For example, if you are currently in a
 
4485
    checkout of /path/to/branch, specifying 'newbranch' will find a branch at
 
4486
    /path/to/newbranch.
4467
4487
    """
4468
4488
 
4469
4489
    takes_args = ['to_location']
4473
4493
 
4474
4494
    def run(self, to_location, force=False):
4475
4495
        from bzrlib import switch
4476
 
        to_branch = Branch.open(to_location)
4477
4496
        tree_location = '.'
4478
4497
        control_dir = bzrdir.BzrDir.open_containing(tree_location)[0]
 
4498
        try:
 
4499
            to_branch = Branch.open(to_location)
 
4500
        except errors.NotBranchError:
 
4501
            to_branch = Branch.open(
 
4502
                control_dir.open_branch().base + '../' + to_location)
4479
4503
        switch.switch(control_dir, to_branch, force)
4480
4504
        note('Switched to branch: %s',
4481
4505
            urlutils.unescape_for_display(to_branch.base, 'utf-8'))