~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/builtins.py

MergeĀ upstream.

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
"""builtin bzr commands"""
18
18
 
41
41
    merge_directive,
42
42
    osutils,
43
43
    reconfigure,
 
44
    rename_map,
44
45
    revision as _mod_revision,
45
46
    symbol_versioning,
46
47
    transport,
83
84
        tree = WorkingTree.open_containing(file_list[0])[0]
84
85
        if tree.supports_views():
85
86
            view_files = tree.views.lookup_view()
86
 
            for filename in file_list:
87
 
                if not osutils.is_inside_any(view_files, filename):
88
 
                    raise errors.FileOutsideView(filename, view_files)
 
87
            if view_files:
 
88
                for filename in file_list:
 
89
                    if not osutils.is_inside_any(view_files, filename):
 
90
                        raise errors.FileOutsideView(filename, view_files)
89
91
    else:
90
92
        tree = WorkingTree.open_containing(u'.')[0]
91
93
        if tree.supports_views():
2527
2529
               help="Type of file to export to.",
2528
2530
               type=unicode),
2529
2531
        'revision',
 
2532
        Option('filters', help='Apply content filters to export the '
 
2533
                'convenient form.'),
2530
2534
        Option('root',
2531
2535
               type=str,
2532
2536
               help="Name of the root directory inside the exported file."),
2533
2537
        ]
2534
2538
    def run(self, dest, branch_or_subdir=None, revision=None, format=None,
2535
 
        root=None):
 
2539
        root=None, filters=False):
2536
2540
        from bzrlib.export import export
2537
2541
 
2538
2542
        if branch_or_subdir is None:
2545
2549
 
2546
2550
        rev_tree = _get_one_revision_tree('export', revision, branch=b, tree=tree)
2547
2551
        try:
2548
 
            export(rev_tree, dest, format, root, subdir)
 
2552
            export(rev_tree, dest, format, root, subdir, filtered=filters)
2549
2553
        except errors.NoSuchExportFormat, e:
2550
2554
            raise errors.BzrCommandError('Unsupported export format: %s' % e.format)
2551
2555
 
2562
2566
    _see_also = ['ls']
2563
2567
    takes_options = [
2564
2568
        Option('name-from-revision', help='The path name in the old tree.'),
 
2569
        Option('filters', help='Apply content filters to display the '
 
2570
                'convenience form.'),
2565
2571
        'revision',
2566
2572
        ]
2567
2573
    takes_args = ['filename']
2568
2574
    encoding_type = 'exact'
2569
2575
 
2570
2576
    @display_command
2571
 
    def run(self, filename, revision=None, name_from_revision=False):
 
2577
    def run(self, filename, revision=None, name_from_revision=False,
 
2578
            filters=False):
2572
2579
        if revision is not None and len(revision) != 1:
2573
2580
            raise errors.BzrCommandError("bzr cat --revision takes exactly"
2574
2581
                                         " one revision specifier")
2577
2584
        branch.lock_read()
2578
2585
        try:
2579
2586
            return self._run(tree, branch, relpath, filename, revision,
2580
 
                             name_from_revision)
 
2587
                             name_from_revision, filters)
2581
2588
        finally:
2582
2589
            branch.unlock()
2583
2590
 
2584
 
    def _run(self, tree, b, relpath, filename, revision, name_from_revision):
 
2591
    def _run(self, tree, b, relpath, filename, revision, name_from_revision,
 
2592
        filtered):
2585
2593
        if tree is None:
2586
2594
            tree = b.basis_tree()
2587
2595
        rev_tree = _get_one_revision_tree('cat', revision, branch=b)
2616
2624
                raise errors.BzrCommandError(
2617
2625
                    "%r is not present in revision %s" % (
2618
2626
                        filename, rev_tree.get_revision_id()))
2619
 
        self.outf.write(content)
 
2627
        if filtered:
 
2628
            from bzrlib.filters import (
 
2629
                ContentFilterContext,
 
2630
                filtered_output_bytes,
 
2631
                )
 
2632
            filters = rev_tree._content_filter_stack(relpath)
 
2633
            chunks = content.splitlines(True)
 
2634
            content = filtered_output_bytes(chunks, filters,
 
2635
                ContentFilterContext(relpath, rev_tree))
 
2636
            self.outf.writelines(content)
 
2637
        else:
 
2638
            self.outf.write(content)
2620
2639
 
2621
2640
 
2622
2641
class cmd_local_time_offset(Command):
3143
3162
                            short_name='x',
3144
3163
                            help='Exclude tests that match this regular'
3145
3164
                                 ' expression.'),
 
3165
                     Option('subunit',
 
3166
                        help='Output test progress via subunit.'),
3146
3167
                     Option('strict', help='Fail on missing dependencies or '
3147
3168
                            'known failures.'),
3148
3169
                     Option('load-list', type=str, argname='TESTLISTFILE',
3165
3186
            lsprof_timed=None, cache_dir=None,
3166
3187
            first=False, list_only=False,
3167
3188
            randomize=None, exclude=None, strict=False,
3168
 
            load_list=None, debugflag=None, starting_with=None):
 
3189
            load_list=None, debugflag=None, starting_with=None, subunit=False):
3169
3190
        from bzrlib.tests import selftest
3170
3191
        import bzrlib.benchmarks as benchmarks
3171
3192
        from bzrlib.benchmarks import tree_creator
3187
3208
            pattern = '|'.join(testspecs_list)
3188
3209
        else:
3189
3210
            pattern = ".*"
 
3211
        if subunit:
 
3212
            try:
 
3213
                from bzrlib.tests import SubUnitBzrRunner
 
3214
            except ImportError:
 
3215
                raise errors.BzrCommandError("subunit not available. subunit "
 
3216
                    "needs to be installed to use --subunit.")
 
3217
            self.additional_selftest_args['runner_class'] = SubUnitBzrRunner
3190
3218
        if benchmark:
3191
3219
            test_suite_factory = benchmarks.test_suite
3192
3220
            # Unless user explicitly asks for quiet, be verbose in benchmarks
3387
3415
            basis_tree = tree.revision_tree(tree.last_revision())
3388
3416
        except errors.NoSuchRevision:
3389
3417
            basis_tree = tree.basis_tree()
3390
 
        changes = tree.changes_from(basis_tree)
3391
 
        if changes.has_changed():
3392
 
            raise errors.UncommittedChanges(tree)
 
3418
        if not force:
 
3419
            changes = tree.changes_from(basis_tree)
 
3420
            if changes.has_changed():
 
3421
                raise errors.UncommittedChanges(tree)
3393
3422
 
3394
3423
        view_info = _get_view_info_for_change_reporter(tree)
3395
3424
        change_reporter = delta._ChangeReporter(
3808
3837
 
3809
3838
    OTHER_BRANCH may be local or remote.
3810
3839
 
3811
 
    To filter on a range of revirions, you can use the command -r begin..end
 
3840
    To filter on a range of revisions, you can use the command -r begin..end
3812
3841
    -r revision requests a specific revision, -r ..end or -r begin.. are
3813
3842
    also valid.
3814
3843
 
5205
5234
            urlutils.unescape_for_display(to_branch.base, 'utf-8'))
5206
5235
 
5207
5236
 
 
5237
class cmd_guess_renames(Command):
 
5238
    """Guess which files have been have been renamed, based on their content.
 
5239
 
 
5240
    Only versioned files which have been deleted are candidates for rename
 
5241
    detection, and renames to ignored files will not be detected.
 
5242
    """
 
5243
 
 
5244
    def run(self):
 
5245
        work_tree, file_list = tree_files(None, default_branch='.')
 
5246
        work_tree.lock_write()
 
5247
        try:
 
5248
            rename_map.RenameMap.guess_renames(work_tree)
 
5249
        finally:
 
5250
            work_tree.unlock()
 
5251
 
 
5252
 
5208
5253
class cmd_view(Command):
5209
5254
    """Manage filtered views.
5210
5255