Esempio n. 1
0
def AppBundleMain(argv):
    login_shell = False

    b = os_path.basename(argv[0])
    main_name, ext = os_path.splitext(b)
    if main_name.startswith('-'):
        login_shell = True
        main_name = main_name[1:]

    if main_name == 'oil' and ext:  # oil.py or oil.ovm
        try:
            first_arg = argv[1]
        except IndexError:
            raise args.UsageError('Missing required applet name.')

        if first_arg in ('-h', '--help'):
            builtin.Help(['bundle-usage'], pyutil.GetResourceLoader())
            sys.exit(0)

        if first_arg in ('-V', '--version'):
            _ShowVersion()
            sys.exit(0)

        main_name = first_arg
        if main_name.startswith('-'):  # TODO: Remove duplication above
            login_shell = True
            main_name = main_name[1:]
        argv0 = argv[1]
        main_argv = argv[2:]
    else:
        argv0 = argv[0]
        main_argv = argv[1:]

    if main_name in ('osh', 'sh'):
        status = ShellMain('osh', argv0, main_argv, login_shell)
        _tlog('done osh main')
        return status
    elif main_name == 'oshc':
        try:
            return OshCommandMain(main_argv)
        except args.UsageError as e:
            ui.Stderr('oshc usage error: %s', e.msg)
            return 2

    elif main_name == 'oil':
        return ShellMain('oil', argv0, main_argv, login_shell)
    elif main_name == 'wok':
        return WokMain(main_argv)
    elif main_name == 'boil':
        return BoilMain(main_argv)

    # For testing latency
    elif main_name == 'true':
        return 0
    elif main_name == 'false':
        return 1
    elif main_name == 'readlink':
        return readlink.main(main_argv)
    else:
        raise args.UsageError('Invalid applet name %r.' % main_name)
Esempio n. 2
0
def AppBundleMain(argv):
    # type: (List[str]) -> int

    # NOTE: This has a side effect of deleting _OVM_* from the environment!
    loader = pyutil.GetResourceLoader()

    b = os_path.basename(argv[0])
    main_name, ext = os_path.splitext(b)

    arg_r = args.Reader(argv)
    if main_name == 'oil' and ext:  # oil.py or oil.ovm
        arg_r.Next()
        first_arg = arg_r.Peek()
        if first_arg is None:
            raise error.Usage('Missing required applet name.')

        if first_arg in ('-h', '--help'):
            errfmt = None  # not needed here
            help_builtin = builtin_misc.Help(loader, errfmt)
            help_builtin.Run(pure.MakeBuiltinArgv(['bundle-usage']))
            sys.exit(0)

        if first_arg in ('-V', '--version'):
            pyutil.ShowAppVersion('Oil', loader)
            sys.exit(0)

        main_name = first_arg

    login_shell = False
    if main_name.startswith('-'):
        login_shell = True
        main_name = main_name[1:]

    if main_name in ('osh', 'sh'):
        # TODO:
        # - Initialize a different shell if line_input isn't present
        status = shell.Main('osh', arg_r, posix.environ, login_shell, loader,
                            line_input)

        _tlog('done osh main')
        return status

    elif main_name == 'osh-pure':
        # TODO: pure.Main()
        pass

    elif main_name == 'oshc':
        arg_r.Next()
        main_argv = arg_r.Rest()
        try:
            return OshCommandMain(main_argv)
        except error.Usage as e:
            stderr_line('oshc usage error: %s', e.msg)
            return 2

    elif main_name == 'oil':
        return shell.Main('oil', arg_r, posix.environ, login_shell, loader,
                          line_input)

    elif main_name == 'tea':
        main_argv = arg_r.Rest()
        return TeaMain(main_argv)

    # For testing latency
    elif main_name == 'true':
        return 0
    elif main_name == 'false':
        return 1
    elif main_name == 'readlink':
        main_argv = arg_r.Rest()
        return readlink.main(main_argv)
    else:
        raise error.Usage('Invalid applet name %r.' % main_name)