diff --git a/flask/cli.py b/flask/cli.py index 6c8cf32d..f142f038 100644 --- a/flask/cli.py +++ b/flask/cli.py @@ -336,15 +336,15 @@ class FlaskGroup(AppGroup): # # This also means that the script stays functional in case the # application completely fails. - rv = AppGroup.get_command(self, ctx, name) - if rv is not None: - return rv + builtin_rv = AppGroup.get_command(self, ctx, name) info = ctx.ensure_object(ScriptInfo) try: rv = info.load_app().cli.get_command(ctx, name) if rv is not None: return rv + elif builtin_rv is not None: + return builtin_rv except NoAppException: pass diff --git a/tests/test_cli.py b/tests/test_cli.py index 18026a75..24037ac1 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -190,3 +190,16 @@ def test_flaskgroup(): result = runner.invoke(cli, ['test']) assert result.exit_code == 0 assert result.output == 'flaskgroup\n' + +def test_override_builtin_cli(): + cli = FlaskGroup(create_app=lambda info: Flask('override_builtin')) + + @cli.command('run', help="foo") + def run(): + click.echo(current_app.name) + + runner = CliRunner() + result = runner.invoke(cli, ['run']) + assert result.exit_code == 0 + assert result.output == 'override_builtin\n' +