'This function when given an info name and arguments will kick
off the parsing and create a new :class:`Context`.  It does not
invoke the actual command callback though.
:param info_name: the info name for this invokation.  Generally this
is the most descriptive name for the script or
command.  For the toplevel script it\'s usually
the name of the script, for commands below it it\'s
the name of the script.
:param args: the arguments to parse as list of strings.
:param parent: the parent context if available.
:param extra: extra keyword arguments forwarded to the context
constructor.'

def make_context(self, info_name, args, parent=None, **extra):

    for (key, value) in iteritems(self.context_settings):
        if (key not in extra):
            extra[key] = value
    ctx = Context(self, info_name=info_name, parent=parent, **extra)
    with ctx.scope(cleanup=False):
        self.parse_args(ctx, args)
    return ctx
