~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/commands.py

  • Committer: Martin Pool
  • Date: 2005-05-02 04:32:56 UTC
  • Revision ID: mbp@sourcefrog.net-20050502043256-ca265e354b2c4e54
- better error message for broken pipe

Show diffs side-by-side

added added

removed removed

Lines of Context:
1106
1106
 
1107
1107
 
1108
1108
 
1109
 
def _report_exception(e, summary):
 
1109
def _report_exception(e, summary, quiet=False):
1110
1110
    import traceback
1111
1111
    log_error('bzr: ' + summary)
1112
1112
    bzrlib.trace.log_exception(e)
1113
 
    tb = sys.exc_info()[2]
1114
 
    exinfo = traceback.extract_tb(tb)
1115
 
    if exinfo:
1116
 
        sys.stderr.write('  at %s:%d in %s()\n' % exinfo[-1][:3])
1117
 
    sys.stderr.write('  see ~/.bzr.log for debug information\n')
 
1113
 
 
1114
    if not quiet:
 
1115
        tb = sys.exc_info()[2]
 
1116
        exinfo = traceback.extract_tb(tb)
 
1117
        if exinfo:
 
1118
            sys.stderr.write('  at %s:%d in %s()\n' % exinfo[-1][:3])
 
1119
        sys.stderr.write('  see ~/.bzr.log for debug information\n')
1118
1120
 
1119
1121
 
1120
1122
def cmd_assert_fail():
1122
1124
 
1123
1125
 
1124
1126
def main(argv):
 
1127
    import errno
 
1128
    
1125
1129
    bzrlib.trace.create_tracefile(argv)
1126
1130
 
1127
1131
    try:
1128
1132
        try:
1129
1133
            ret = run_bzr(argv)
 
1134
            # do this here to catch EPIPE
 
1135
            sys.stdout.flush()
1130
1136
            return ret
1131
1137
        except BzrError, e:
1132
1138
            _report_exception(e, 'error: ' + e.args[0])
1141
1147
                msg += ': ' + str(e)
1142
1148
            _report_exception(e, msg)
1143
1149
        except Exception, e:
1144
 
            _report_exception(e, 'exception: %s' % str(e).rstrip('\n'))
 
1150
            quiet = False
 
1151
            if isinstance(e, IOError) and e.errno == errno.EPIPE:
 
1152
                quiet = True
 
1153
                msg = 'broken pipe'
 
1154
            else:
 
1155
                msg = str(e).rstrip('\n')
 
1156
            _report_exception(e, msg, quiet)
1145
1157
            return 1
1146
1158
    finally:
1147
1159
        bzrlib.trace.close_trace()
1148
1160
 
1149
 
    ## TODO: Trap AssertionError
1150
 
 
1151
 
    # TODO: Maybe nicer handling of IOError especially for broken pipe.
1152
 
 
1153
 
 
1154
1161
 
1155
1162
if __name__ == '__main__':
1156
1163
    sys.exit(main(sys.argv))