)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2af5d2761b56757f3575e763d0a06f85bb7b2057","unresolved":false,"context_lines":[{"line_number":7,"context_line":"sphinxext: Support cliff application"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This commit adds a feature to generate a reference of global"},{"line_number":10,"context_line":"optoions of a cliff application to autoprogram-cliff directive."},{"line_number":11,"context_line":"If a class path of a cliff application is specified as the argument of"},{"line_number":12,"context_line":"autoprogram-cliff directive, it will be interpreted as a cliff application"},{"line_number":13,"context_line":"and global options of the specified application are rendered."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f4b6375_c485a108","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":8},"updated":"2017-11-02 14:48:35.000000000","message":"options","commit_id":"2f2d4fae0102fc85415aeb48cff3610e372d5553"}],"cliff/sphinxext.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bff8234d919f33777ccb026a1b7cb8c22c855c5c","unresolved":false,"context_lines":[{"line_number":279,"context_line":"                         if x.strip()]"},{"line_number":280,"context_line":"        ignored_opts \u003d list(set(global_ignored + local_ignored))"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        # TODO(sfinucan): We should probably add this wildcarding functionality"},{"line_number":283,"context_line":"        # to the CommandManager itself to allow things like \"show me the"},{"line_number":284,"context_line":"        # commands like \u0027foo *\u0027\""},{"line_number":285,"context_line":"        manager \u003d commandmanager.CommandManager(self.arguments[0])"},{"line_number":286,"context_line":"        if command_pattern:"},{"line_number":287,"context_line":"            commands \u003d [x for x in manager.commands"},{"line_number":288,"context_line":"                        if fnmatch.fnmatch(x, command_pattern)]"},{"line_number":289,"context_line":"        else:"},{"line_number":290,"context_line":"            commands \u003d manager.commands.keys()"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        output \u003d []"},{"line_number":293,"context_line":"        for command_name in sorted(commands):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f1a1f67_2d93535d","line":290,"range":{"start_line":282,"start_character":0,"end_line":290,"end_character":46},"updated":"2017-07-18 09:14:13.000000000","message":"Suggestion - could we not try to import the path first? If it\u0027s successful, we check if it\u0027s an instance of \u0027cliff.command.App\u0027. If the import is not successful or does not point to an instance of \u0027cliff.command.App\u0027, we ignore the import and proceed down this path","commit_id":"a98aad839f5fca4469818267c8e89efd0fbdd6b5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bff8234d919f33777ccb026a1b7cb8c22c855c5c","unresolved":false,"context_lines":[{"line_number":317,"context_line":"    def _generate_nodes(self, title, app, app_name, ignored_opts):"},{"line_number":318,"context_line":"        \"\"\"Generate the relevant Sphinx nodes."},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"        This is a little funky. Parts of this use raw docutils nodes while"},{"line_number":321,"context_line":"        other parts use reStructuredText and nested parsing. The reason for"},{"line_number":322,"context_line":"        this is simple: it avoids us having to reinvent the wheel. While raw"},{"line_number":323,"context_line":"        docutils nodes are helpful for the simpler elements of the output,"},{"line_number":324,"context_line":"        they don\u0027t provide an easy way to use Sphinx\u0027s own directives, such as"},{"line_number":325,"context_line":"        the \u0027option\u0027 directive. Refer to [1] for more information."},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"        [1] http://www.sphinx-doc.org/en/stable/extdev/markupapi.html"},{"line_number":328,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f1a1f67_22aa4270","line":325,"range":{"start_line":320,"start_character":0,"end_line":325,"end_character":66},"updated":"2017-07-18 09:14:13.000000000","message":"This is no longer true - we\u0027re using rST + nested parsing for everything now. I\u0027ll fix up the base patch in another commit","commit_id":"a98aad839f5fca4469818267c8e89efd0fbdd6b5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bff8234d919f33777ccb026a1b7cb8c22c855c5c","unresolved":false,"context_lines":[{"line_number":336,"context_line":"        parser \u003d app.parser"},{"line_number":337,"context_line":"        ignored_opts \u003d ignored_opts or []"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        # Drop the automatically-added help action"},{"line_number":340,"context_line":"        for action in list(parser._actions):"},{"line_number":341,"context_line":"            for option_string in action.option_strings:"},{"line_number":342,"context_line":"                if option_string in ignored_opts:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f1a1f67_c27f0ede","line":339,"range":{"start_line":339,"start_character":8,"end_line":339,"end_character":50},"updated":"2017-07-18 09:14:13.000000000","message":"This is also not true - we\u0027re dropping added options","commit_id":"a98aad839f5fca4469818267c8e89efd0fbdd6b5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bff8234d919f33777ccb026a1b7cb8c22c855c5c","unresolved":false,"context_lines":[{"line_number":382,"context_line":""},{"line_number":383,"context_line":"def setup(app):"},{"line_number":384,"context_line":"    app.add_directive(\u0027cliff-app\u0027, CliffAppDirective)"},{"line_number":385,"context_line":"    app.add_directive(\u0027cliff-command\u0027, CliffCommandDirective)"},{"line_number":386,"context_line":"    # Keep autoprogram-cliff directive for backward-compatibility."},{"line_number":387,"context_line":"    app.add_directive(\u0027autoprogram-cliff\u0027, CliffCommandDirective)"},{"line_number":388,"context_line":"    app.add_config_value(\u0027autoprogram_cliff_application\u0027, \u0027\u0027, True)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f1a1f67_ada1a3fa","line":385,"range":{"start_line":385,"start_character":23,"end_line":385,"end_character":36},"updated":"2017-07-18 09:14:13.000000000","message":"\u0027cliff-command\u0027 doesn\u0027t sound quite right. We can use wildcards with this directive, meaning it can actually handle multiple commands (plural). I don\u0027t have any better ideas though","commit_id":"a98aad839f5fca4469818267c8e89efd0fbdd6b5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bff8234d919f33777ccb026a1b7cb8c22c855c5c","unresolved":false,"context_lines":[{"line_number":384,"context_line":"    app.add_directive(\u0027cliff-app\u0027, CliffAppDirective)"},{"line_number":385,"context_line":"    app.add_directive(\u0027cliff-command\u0027, CliffCommandDirective)"},{"line_number":386,"context_line":"    # Keep autoprogram-cliff directive for backward-compatibility."},{"line_number":387,"context_line":"    app.add_directive(\u0027autoprogram-cliff\u0027, CliffCommandDirective)"},{"line_number":388,"context_line":"    app.add_config_value(\u0027autoprogram_cliff_application\u0027, \u0027\u0027, True)"},{"line_number":389,"context_line":"    app.add_config_value(\u0027autoprogram_cliff_ignored\u0027, [\u0027--help\u0027], True)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f1a1f67_2d3fd3b4","line":387,"range":{"start_line":387,"start_character":4,"end_line":387,"end_character":65},"updated":"2017-07-18 09:14:13.000000000","message":"From codesearch.o.o, it seems no one but neutron is using this yet. We could probably subclass \u0027CliffCommandDirective\u0027 and add a warning that this will be deprecated in the future, to avoid us carrying this forever","commit_id":"a98aad839f5fca4469818267c8e89efd0fbdd6b5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1211d69f545780ab1f025eebdbc030a83447554a","unresolved":false,"context_lines":[{"line_number":384,"context_line":"    app.add_directive(\u0027cliff-app\u0027, CliffAppDirective)"},{"line_number":385,"context_line":"    app.add_directive(\u0027cliff-command\u0027, CliffCommandDirective)"},{"line_number":386,"context_line":"    # Keep autoprogram-cliff directive for backward-compatibility."},{"line_number":387,"context_line":"    app.add_directive(\u0027autoprogram-cliff\u0027, CliffCommandDirective)"},{"line_number":388,"context_line":"    app.add_config_value(\u0027autoprogram_cliff_application\u0027, \u0027\u0027, True)"},{"line_number":389,"context_line":"    app.add_config_value(\u0027autoprogram_cliff_ignored\u0027, [\u0027--help\u0027], True)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_171774a6","line":387,"range":{"start_line":387,"start_character":4,"end_line":387,"end_character":65},"in_reply_to":"1f1a1f67_2d3fd3b4","updated":"2017-10-26 07:09:34.000000000","message":"In patch set 2, I switched the approach to add App support to autoprogram-cliff directive.","commit_id":"a98aad839f5fca4469818267c8e89efd0fbdd6b5"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"0d31d909d8d1a136b7545b9f22a379172f789655","unresolved":false,"context_lines":[{"line_number":260,"context_line":"    def _load_commands(self):"},{"line_number":261,"context_line":"        # TODO(sfinucan): We should probably add this wildcarding functionality"},{"line_number":262,"context_line":"        # to the CommandManager itself to allow things like \"show me the"},{"line_number":263,"context_line":"        # commands like \u0027foo *\u0027\""},{"line_number":264,"context_line":"        command_pattern \u003d self.options.get(\u0027command\u0027)"},{"line_number":265,"context_line":"        manager \u003d commandmanager.CommandManager(self.arguments[0])"},{"line_number":266,"context_line":"        if command_pattern:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_6ebb150e","line":263,"updated":"2017-10-30 20:08:13.000000000","message":"+1","commit_id":"2f2d4fae0102fc85415aeb48cff3610e372d5553"}],"doc/source/conf.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bff8234d919f33777ccb026a1b7cb8c22c855c5c","unresolved":false,"context_lines":[{"line_number":264,"context_line":""},{"line_number":265,"context_line":"# -- Options for cliff sphinxext ---------------------------------------------"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"autoprogram_cliff_application \u003d \u0027cliffdemo\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f1a1f67_4d7faf14","line":267,"range":{"start_line":267,"start_character":0,"end_line":267,"end_character":29},"updated":"2017-07-18 09:14:13.000000000","message":"The fact that our extension is no longer called \u0027autoprogram-cliff\u0027 makes this name kind of silly. It should be renamed too, but I don\u0027t know what to","commit_id":"a98aad839f5fca4469818267c8e89efd0fbdd6b5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1211d69f545780ab1f025eebdbc030a83447554a","unresolved":false,"context_lines":[{"line_number":264,"context_line":""},{"line_number":265,"context_line":"# -- Options for cliff sphinxext ---------------------------------------------"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"autoprogram_cliff_application \u003d \u0027cliffdemo\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_77f7c88c","line":267,"range":{"start_line":267,"start_character":0,"end_line":267,"end_character":29},"in_reply_to":"1f1a1f67_4d7faf14","updated":"2017-10-26 07:09:34.000000000","message":"Done","commit_id":"a98aad839f5fca4469818267c8e89efd0fbdd6b5"}],"doc/source/user/demoapp.rst":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"cd7d3e7140d00440fba736ecd2fe06fb84e577ba","unresolved":false,"context_lines":[{"line_number":298,"context_line":"------"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"Global Options"},{"line_number":301,"context_line":"++++++++++++++"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":".. autoprogram-cliff:: cliffdemo.main.DemoApp"},{"line_number":304,"context_line":"   :application: cliffdemo"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3f4b6375_7753486c","line":301,"range":{"start_line":301,"start_character":0,"end_line":301,"end_character":14},"updated":"2017-10-26 07:11:23.000000000","message":"~~~~~~ should be used.","commit_id":"6c5dc8d02deadaf80bf279aac72caa36183bfe92"}],"doc/source/user/sphinxext-demoapp.rst":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bff8234d919f33777ccb026a1b7cb8c22c855c5c","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Source"},{"line_number":9,"context_line":"------"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"The direcitve below generates the CLI reference of the demo application."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":".. code-block:: rest"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1f1a1f67_e22c4a03","line":11,"range":{"start_line":11,"start_character":4,"end_line":11,"end_character":13},"updated":"2017-07-18 09:14:13.000000000","message":"might fix this while we\u0027re at it","commit_id":"a98aad839f5fca4469818267c8e89efd0fbdd6b5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bff8234d919f33777ccb026a1b7cb8c22c855c5c","unresolved":false,"context_lines":[{"line_number":22,"context_line":"Global options"},{"line_number":23,"context_line":"~~~~~~~~~~~~~~"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":".. cliff-app:: cliffdemo.main.DemoApp"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Command list"},{"line_number":28,"context_line":"~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1f1a1f67_ad3d2390","line":25,"range":{"start_line":25,"start_character":15,"end_line":25,"end_character":37},"updated":"2017-07-18 09:14:13.000000000","message":"I know that it\u0027s probably necessary, but I really don\u0027t like that we use entrypoints for \u0027cliff-command\u0027 but Python module paths for \u0027cliff-app\u0027. This has to be made abundantly clear in the docs.","commit_id":"a98aad839f5fca4469818267c8e89efd0fbdd6b5"}],"doc/source/user/sphinxext.rst":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bff8234d919f33777ccb026a1b7cb8c22c855c5c","unresolved":false,"context_lines":[{"line_number":8,"context_line":"cliff supports integration with Sphinx by way of a `Sphinx directives`__."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"cliff-command directive"},{"line_number":11,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":".. rst:directive:: .. cliff-command:: namespace"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1f1a1f67_cd617fab","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":23},"updated":"2017-07-18 09:14:13.000000000","message":"These header styles are a neutron\u0027ism that no one else uses :) Can you use \u0027---\u0027 here and \u0027~~~\u0027 below instead, please","commit_id":"a98aad839f5fca4469818267c8e89efd0fbdd6b5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ab31b6a6bc055d91623e5290c11f1c65568410dd","unresolved":false,"context_lines":[{"line_number":8,"context_line":"cliff supports integration with Sphinx by way of a `Sphinx directives`__."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"cliff-command directive"},{"line_number":11,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":".. rst:directive:: .. cliff-command:: namespace"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1f1a1f67_c9470e77","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":23},"in_reply_to":"1f1a1f67_cd617fab","updated":"2017-07-30 08:46:34.000000000","message":"Is there any convention in the OpenStack world? AFAIK it is project-specific. I see a different convention from openstack-manuals too.\nhttps://docs.openstack.org/contributor-guide/rst-conv/titles.html","commit_id":"a98aad839f5fca4469818267c8e89efd0fbdd6b5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bff8234d919f33777ccb026a1b7cb8c22c855c5c","unresolved":false,"context_lines":[{"line_number":25,"context_line":"   either `setup.cfg` or `setup.py`. Refer to the example_ below for more"},{"line_number":26,"context_line":"   information."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Directive options"},{"line_number":29,"context_line":"+++++++++++++++++"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"In addition, the following directive options can be supplied:"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1f1a1f67_2da11395","line":29,"range":{"start_line":28,"start_character":0,"end_line":29,"end_character":17},"updated":"2017-07-18 09:14:13.000000000","message":"Instead of this, could you use the \u0027rubric\u0027 directive, which gives us header-style decoration without the semantic noise. Also, these blocks should remain indented under the directive","commit_id":"a98aad839f5fca4469818267c8e89efd0fbdd6b5"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"0d31d909d8d1a136b7545b9f22a379172f789655","unresolved":false,"context_lines":[{"line_number":69,"context_line":"     This option is effective only in the **command** mode."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"   `:arguments`"},{"line_number":72,"context_line":"     The arguments to be passed when the cliff application. Some cliff"},{"line_number":73,"context_line":"     applications requires arguments when instantiated. This option can be used"},{"line_number":74,"context_line":"     to specify such arguments."},{"line_number":75,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_ce72097d","line":72,"range":{"start_line":72,"start_character":5,"end_line":72,"end_character":59},"updated":"2017-10-30 20:08:13.000000000","message":"This sentence seems incomplete. Are the arguments passed when the application is instantiated? Invoked?","commit_id":"2f2d4fae0102fc85415aeb48cff3610e372d5553"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2271cd3df04fc73aaf0916793be274273f4f1be8","unresolved":false,"context_lines":[{"line_number":69,"context_line":"     This option is effective only in the **command** mode."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"   `:arguments`"},{"line_number":72,"context_line":"     The arguments to be passed when the cliff application. Some cliff"},{"line_number":73,"context_line":"     applications requires arguments when instantiated. This option can be used"},{"line_number":74,"context_line":"     to specify such arguments."},{"line_number":75,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_e9f6dff9","line":72,"range":{"start_line":72,"start_character":5,"end_line":72,"end_character":59},"in_reply_to":"3f4b6375_ce72097d","updated":"2017-10-30 20:43:06.000000000","message":"Done","commit_id":"2f2d4fae0102fc85415aeb48cff3610e372d5553"}]}
