~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/commands.py

Merge in format-5 work - release bzr 0.1rc1.

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
# Those objects can specify the expected type of the argument, which
25
25
# would help with validation and shell completion.
26
26
 
27
 
 
28
 
# TODO: Help messages for options.
29
 
 
30
 
# TODO: Define arguments by objects, rather than just using names.
31
 
# Those objects can specify the expected type of the argument, which
32
 
# would help with validation and shell completion.
33
 
 
34
 
 
 
27
# TODO: "--profile=cum", to change sort order.  Is there any value in leaving
 
28
# the profile output behind so it can be interactively examined?
35
29
 
36
30
import sys
37
31
import os
141
135
    return revs
142
136
 
143
137
 
144
 
def get_merge_type(typestring):
145
 
    """Attempt to find the merge class/factory associated with a string."""
146
 
    from merge import merge_types
147
 
    try:
148
 
        return merge_types[typestring][0]
149
 
    except KeyError:
150
 
        templ = '%s%%7s: %%s' % (' '*12)
151
 
        lines = [templ % (f[0], f[1][1]) for f in merge_types.iteritems()]
152
 
        type_list = '\n'.join(lines)
153
 
        msg = "No known merge type %s. Supported types are:\n%s" %\
154
 
            (typestring, type_list)
155
 
        raise BzrCommandError(msg)
156
 
 
157
 
 
158
138
def _builtin_commands():
159
139
    import bzrlib.builtins
160
140
    r = {}
352
332
# the type.
353
333
OPTIONS = {
354
334
    'all':                    None,
 
335
    'basis':                  str,
355
336
    'diff-options':           str,
356
337
    'help':                   None,
357
338
    'file':                   unicode,
373
354
    'long':                   None,
374
355
    'root':                   str,
375
356
    'no-backup':              None,
376
 
    'merge-type':             get_merge_type,
377
357
    'pattern':                str,
378
358
    }
379
359
 
539
519
def apply_profiled(the_callable, *args, **kwargs):
540
520
    import hotshot
541
521
    import tempfile
 
522
    import hotshot.stats
542
523
    pffileno, pfname = tempfile.mkstemp()
543
524
    try:
544
525
        prof = hotshot.Profile(pfname)
546
527
            ret = prof.runcall(the_callable, *args, **kwargs) or 0
547
528
        finally:
548
529
            prof.close()
549
 
 
550
 
        import hotshot.stats
551
530
        stats = hotshot.stats.load(pfname)
552
 
        #stats.strip_dirs()
553
 
        stats.sort_stats('time')
 
531
        stats.strip_dirs()
 
532
        stats.sort_stats('cum')   # 'time'
554
533
        ## XXX: Might like to write to stderr or the trace file instead but
555
534
        ## print_stats seems hardcoded to stdout
556
535
        stats.print_stats(20)
557
 
 
558
536
        return ret
559
537
    finally:
560
538
        os.close(pffileno)
585
563
    --profile
586
564
        Run under the Python profiler.
587
565
    """
 
566
    # Load all of the transport methods
 
567
    import bzrlib.transport.local, bzrlib.transport.http
588
568
    
589
569
    argv = [a.decode(bzrlib.user_encoding) for a in argv]
590
570
 
644
624
def run_bzr_catch_errors(argv):
645
625
    try:
646
626
        try:
647
 
            try:
648
 
                return run_bzr(argv)
649
 
            finally:
650
 
                # do this here inside the exception wrappers to catch EPIPE
651
 
                sys.stdout.flush()
652
 
        #wrap common errors as CommandErrors.
653
 
        except (NotBranchError,), e:
654
 
            raise BzrCommandError(str(e))
 
627
            return run_bzr(argv)
 
628
        finally:
 
629
            # do this here inside the exception wrappers to catch EPIPE
 
630
            sys.stdout.flush()
655
631
    except BzrCommandError, e:
656
632
        # command line syntax error, etc
657
633
        log_error(str(e))
663
639
        bzrlib.trace.log_exception('assertion failed: ' + str(e))
664
640
        return 3
665
641
    except KeyboardInterrupt, e:
666
 
        bzrlib.trace.note('interrupted')
 
642
        bzrlib.trace.log_exception('interrupted')
667
643
        return 2
668
644
    except Exception, e:
669
645
        import errno
673
649
            bzrlib.trace.note('broken pipe')
674
650
            return 2
675
651
        else:
 
652
            ## import pdb
 
653
            ## pdb.pm()
676
654
            bzrlib.trace.log_exception()
677
655
            return 2
678
656
 
679
 
 
680
657
if __name__ == '__main__':
681
658
    sys.exit(main(sys.argv))