~abentley/bzrtools/bzrtools.dev

« back to all changes in this revision

Viewing changes to command_classes.py

  • Committer: Benoît Pierre
  • Date: 2008-11-16 17:50:52 UTC
  • mto: This revision was merged to the branch mainline in revision 683.
  • Revision ID: benoit.pierre@gmail.com-20081116175052-8ldrpprvpfq3wscm
Check if STDOUT is a TTY in has_ansi_colors: return False if not.

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
#    along with this program; if not, write to the Free Software
17
17
#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18
18
 
19
 
import errno
20
 
 
21
19
import bzrlib
22
20
 
23
21
from bzrlib.lazy_import import lazy_import
40
38
from bzrlib.errors import BzrCommandError
41
39
import bzrlib.ignores
42
40
from bzrlib.trace import note
43
 
from bzrlib.option import Option, RegistryOption
44
 
from bzrlib.workingtree import WorkingTree
 
41
from bzrlib.option import Option
45
42
 
46
43
from command import BzrToolsCommand
47
44
 
48
45
 
 
46
class cmd_clean_tree(BzrToolsCommand):
 
47
    """Remove unwanted files from working tree.
 
48
 
 
49
    By default, only unknown files, not ignored files, are deleted.  Versioned
 
50
    files are never deleted.
 
51
 
 
52
    Another class is 'detritus', which includes files emitted by bzr during
 
53
    normal operations and selftests.  (The value of these files decreases with
 
54
    time.)
 
55
 
 
56
    If no options are specified, unknown files are deleted.  Otherwise, option
 
57
    flags are respected, and may be combined.
 
58
 
 
59
    To check what clean-tree will do, use --dry-run.
 
60
    """
 
61
    takes_options = [Option('ignored', help='Delete all ignored files.'),
 
62
                     Option('detritus', help='Delete conflict files, merge'
 
63
                            ' backups, and failed selftest dirs.'),
 
64
                     Option('unknown',
 
65
                            help='Delete files unknown to bzr (default).'),
 
66
                     Option('dry-run', help='Show files to delete instead of'
 
67
                            ' deleting them.'),
 
68
                     Option('force', help='Do not prompt before deleting.')]
 
69
    def run(self, unknown=False, ignored=False, detritus=False, dry_run=False,
 
70
            force=False):
 
71
        from clean_tree import clean_tree
 
72
        if not (unknown or ignored or detritus):
 
73
            unknown = True
 
74
        if dry_run:
 
75
            force = True
 
76
        clean_tree('.', unknown=unknown, ignored=ignored, detritus=detritus, 
 
77
                   dry_run=dry_run, no_prompt=force)
 
78
 
 
79
 
49
80
class cmd_graph_ancestry(BzrToolsCommand):
50
81
    """Produce ancestry graphs using dot.
51
82
    
120
151
    takes_options = [Option('no-fix', help="Skip additional synchonization.")]
121
152
    def run(self, branch=None, no_fix=False):
122
153
        from fetch_ghosts import fetch_ghosts
123
 
        fetch_ghosts(branch, do_reconcile=not no_fix)
 
154
        fetch_ghosts(branch, no_fix)
124
155
 
125
156
strip_help="""Strip the smallest prefix containing num leading slashes  from \
126
157
each file name found in the patch file."""
130
161
    """Apply a named patch to the current tree.
131
162
    """
132
163
    takes_args = ['filename?']
133
 
    takes_options = [Option('strip', type=int, short_name='p',
134
 
                            help=strip_help),
 
164
    takes_options = [Option('strip', type=int, help=strip_help),
135
165
                     Option('silent', help='Suppress chatter.')]
136
166
    def run(self, filename=None, strip=None, silent=False):
137
167
        from patch import patch
169
199
    don't depend on each other.
170
200
 
171
201
    While you have patches on the shelf you can view and manipulate them with
172
 
    the 'shelf1' command. Run 'bzr shelf1 -h' for more info.
 
202
    the 'shelf' command. Run 'bzr shelf -h' for more info.
173
203
    """
174
204
 
 
205
    aliases = ['shelve']
175
206
    takes_args = ['file*']
176
207
    takes_options = [Option('message',
177
208
            help='A message to associate with the shelved changes.',
195
226
        return 0
196
227
 
197
228
 
198
 
# The following classes are only used as subcommands for 'shelf1', they're
 
229
# The following classes are only used as subcommands for 'shelf', they're
199
230
# not to be registered directly with bzr.
200
231
 
201
232
class cmd_shelf_list(bzrlib.commands.Command):
237
268
        self.shelf.upgrade()
238
269
 
239
270
 
240
 
class cmd_shelf1(BzrToolsCommand):
 
271
class cmd_shelf(BzrToolsCommand):
241
272
    """Perform various operations on your shelved patches. See also shelve1."""
242
273
    takes_args = ['subcommand', 'args*']
243
274
 
311
342
 
312
343
    See 'shelve1' for more information.
313
344
    """
 
345
    aliases = ['unshelve']
314
346
    takes_options = [
315
347
            Option('all', help='Unshelve all changes without prompting.'),
316
348
            Option('force', help='Force unshelving even if errors occur.'),
502
534
    """A color version of bzr's diff"""
503
535
    takes_args = property(lambda x: get_cmd_object('diff').takes_args)
504
536
    takes_options = list(get_cmd_object('diff').takes_options) + [
505
 
        RegistryOption.from_kwargs('color',
506
 
            'Color mode to use.',
507
 
            title='Color Mode', value_switches=False, enum_switch=True,
508
 
            never='Never colorize output.',
509
 
            auto='Only colorize output if terminal supports it and STDOUT is a'
510
 
            ' TTY.',
511
 
            always='Always colorize output (default).'),
512
537
        Option('check-style',
513
538
            help='Warn if trailing whitespace or spurious changes have been'
514
539
                 ' added.')]
515
540
 
516
 
    def run(self, color='always', check_style=False, *args, **kwargs):
 
541
    def run(self, check_style=False, *args, **kwargs):
517
542
        from colordiff import colordiff
518
 
        colordiff(color, check_style, *args, **kwargs)
519
 
 
520
 
 
521
 
class cmd_conflict_diff(BzrToolsCommand):
522
 
 
523
 
    """Compare a conflicted file against BASE."""
524
 
 
525
 
    encoding_type = 'exact'
526
 
    takes_args = ['file']
527
 
    takes_options = [
528
 
        RegistryOption.from_kwargs('direction', 'Direction of comparison.',
529
 
            value_switches=True, enum_switch=False,
530
 
            other='Compare OTHER against common base.',
531
 
            this='Compare THIS against common base.')]
532
 
 
533
 
    def run(self, file, direction='other'):
534
 
        from bzrlib.plugins.bzrtools.colordiff import DiffWriter
535
 
        from conflict_diff import conflict_diff
536
 
        dw = DiffWriter(self.outf, check_style=False, color='auto')
537
 
        conflict_diff(dw, file, direction)
 
543
        colordiff(check_style, *args, **kwargs)
538
544
 
539
545
 
540
546
class cmd_rspush(BzrToolsCommand):
580
586
                source_tree.unlock()
581
587
        finally:
582
588
            target_tree.unlock()
583
 
 
584
 
 
585
 
class cmd_create_mirror(BzrToolsCommand):
586
 
    """Create a mirror of another branch.
587
 
 
588
 
    This is similar to `bzr branch`, but copies more settings, including the
589
 
    submit branch and nickname.
590
 
 
591
 
    It sets the public branch and parent of the target to the source location.
592
 
    """
593
 
 
594
 
    takes_args = ['source', 'target']
595
 
 
596
 
    def run(self, source, target):
597
 
        source_branch = Branch.open(source)
598
 
        from bzrlib.plugins.bzrtools.mirror import create_mirror
599
 
        create_mirror(source_branch, target, [])