~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/commands.py

  • Committer: Martin Pool
  • Date: 2010-02-10 00:31:24 UTC
  • mto: This revision was merged to the branch mainline in revision 5025.
  • Revision ID: mbp@canonical.com-20100210003124-p1ye775wsg0okrfx
Add bzrlib.initialize

Show diffs side-by-side

added added

removed removed

Lines of Context:
59
59
    deprecated_function,
60
60
    deprecated_in,
61
61
    deprecated_method,
62
 
    suppress_deprecation_warnings,
63
62
    )
64
63
 
65
64
 
1099
1098
        "bzr plugin-provider-db check")
1100
1099
 
1101
1100
 
1102
 
def main(argv=None):
1103
 
    """Main entry point of command-line interface.
1104
 
 
1105
 
    :param argv: list of unicode command-line arguments similar to sys.argv.
1106
 
        argv[0] is script name usually, it will be ignored.
1107
 
        Don't pass here sys.argv because this list contains plain strings
1108
 
        and not unicode; pass None instead.
1109
 
 
1110
 
    :return: exit code of bzr command.
1111
 
    """
1112
 
    import bzrlib.ui
1113
 
    bzrlib.ui.ui_factory = bzrlib.ui.make_ui_for_terminal(
1114
 
        sys.stdin, sys.stdout, sys.stderr)
1115
 
 
1116
 
    # Is this a final release version? If so, we should suppress warnings
1117
 
    if bzrlib.version_info[3] == 'final':
1118
 
        suppress_deprecation_warnings(override=True)
 
1101
 
 
1102
def _specified_or_unicode_argv(argv):
 
1103
    # For internal or testing use, argv can be passed.  Otherwise, get it from
 
1104
    # the process arguments in a unicode-safe way.
1119
1105
    if argv is None:
1120
 
        argv = osutils.get_unicode_argv()
 
1106
        return osutils.get_unicode_argv()
1121
1107
    else:
1122
1108
        new_argv = []
1123
1109
        try:
1129
1115
                    new_argv.append(a.decode('ascii'))
1130
1116
        except UnicodeDecodeError:
1131
1117
            raise errors.BzrError("argv should be list of unicode strings.")
1132
 
        argv = new_argv
 
1118
        return new_argv
 
1119
 
 
1120
 
 
1121
def main(argv=None):
 
1122
    """Main entry point of command-line interface.
 
1123
 
 
1124
    Typically `bzrlib.initialize` should be called first.
 
1125
 
 
1126
    :param argv: list of unicode command-line arguments similar to sys.argv.
 
1127
        argv[0] is script name usually, it will be ignored.
 
1128
        Don't pass here sys.argv because this list contains plain strings
 
1129
        and not unicode; pass None instead.
 
1130
 
 
1131
    :return: exit code of bzr command.
 
1132
    """
 
1133
    argv = _specified_or_unicode_argv(argv)
1133
1134
    ret = run_bzr_catch_errors(argv)
1134
1135
    bzrlib.ui.ui_factory.log_transport_activity(
1135
1136
        display=('bytes' in debug.debug_flags))
1136
1137
    trace.mutter("return code %d", ret)
1137
 
    osutils.report_extension_load_failures()
1138
1138
    return ret
1139
1139
 
1140
1140
 
1144
1144
    This function assumed that that UI layer is setup, that symbol deprecations
1145
1145
    are already applied, and that unicode decoding has already been performed on argv.
1146
1146
    """
 
1147
    # done here so that they're covered for every test run
1147
1148
    install_bzr_command_hooks()
1148
1149
    return exception_to_return_code(run_bzr, argv)
1149
1150
 
1154
1155
    This is used for the test suite, and might be useful for other programs
1155
1156
    that want to wrap the commandline interface.
1156
1157
    """
 
1158
    # done here so that they're covered for every test run
1157
1159
    install_bzr_command_hooks()
1158
1160
    try:
1159
1161
        return run_bzr(argv)
1209
1211
            yield provider
1210
1212
 
1211
1213
command_providers_registry = ProvidersRegistry()
1212
 
 
1213
 
 
1214
 
if __name__ == '__main__':
1215
 
    sys.exit(main(sys.argv))