)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"989ba421c26049f863401233b67ff06f6da44ba1","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"28fe9a47_046ec000","updated":"2024-01-24 16:36:23.000000000","message":"May I know any example of actual use cases where this may be useful ?\n\nshell completion may be useful for CLI commands such as openstack CLI, but oslo.config is used by services and I\u0027m not too sure completion for services may be very useful.","commit_id":"ef6088905f3915c4556811a8b4163889e4b1049c"},{"author":{"_account_id":36116,"name":"Philippe SÉRAPHIN","email":"philippe.seraphin@infomaniak.com","username":"pseraf"},"change_message_id":"efc3db106d0aadc71539d77edc628b6083a0d3b1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"499ac673_426dc576","in_reply_to":"1817b5b9_ae76c93e","updated":"2024-04-11 05:48:03.000000000","message":"Done","commit_id":"ef6088905f3915c4556811a8b4163889e4b1049c"},{"author":{"_account_id":36116,"name":"Philippe SÉRAPHIN","email":"philippe.seraphin@infomaniak.com","username":"pseraf"},"change_message_id":"c56c559f7a93d99242c61d1e2901650ab86db004","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"ff5e773d_492e2c2b","in_reply_to":"28fe9a47_046ec000","updated":"2024-01-25 08:18:26.000000000","message":"Hi,\nI use oslo.config for the swift-tools (https://salsa.debian.org/openstack-team/third-party/swift-tools), and, more generally, we use oslo.config a lot at Infomaniak","commit_id":"ef6088905f3915c4556811a8b4163889e4b1049c"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"f640d8a38932aa6828102dbd015490573eb5287f","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"1817b5b9_ae76c93e","in_reply_to":"ff5e773d_492e2c2b","updated":"2024-01-25 08:28:55.000000000","message":"Hi Takashi,\nAs Philippe wrote, it may be useful outside of OpenStack. However, in *many* OpenStack components, it would be super useful. For example, most of the \u003cproject\u003e-manage shell utility don\u0027t provide completion. nova-manage and cinder-manage comes to mind, but that\u0027s not the only ones. Everything that does db upgrades for example, are lacking the feature, and they are almost all different, which is super annoying. bash-autocomplete will solve this problem when doing stuff by hand.\n\nIn the Debian packaging, I\u0027ll happily add the auto-completion everywhere I can when this patch is merged.","commit_id":"ef6088905f3915c4556811a8b4163889e4b1049c"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"a32897b72acf25f7f6f6a9d5a9871186529237c7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"e5cb07e0_c3e1f7a5","updated":"2024-01-26 09:30:57.000000000","message":"recheck","commit_id":"db616ac5210379ebbeb2a3d3fa9be612306367fa"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"b5758a99117c83d20695c21036cd24ed87334847","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"ade46780_f031559f","updated":"2024-01-31 11:38:45.000000000","message":"Please fix search path for the template files.","commit_id":"4b6ba2d09b4c58cc1127ccc20d855c77de3ce670"}],"oslo_config/bash-completion.template":[{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"248befcf91eb47f2bb451169b4ef9189eafab4ec","unresolved":true,"context_lines":[{"line_number":7,"context_line":"    COMPREPLY\u003d()"},{"line_number":8,"context_line":"\tcur\u003d\"${{COMP_WORDS[COMP_CWORD]}}\""},{"line_number":9,"context_line":"\tprev\u003d\"${{COMP_WORDS[COMP_CWORD-1]}}\""},{"line_number":10,"context_line":"    "},{"line_number":11,"context_line":"    OPTS\u003d({opts})"},{"line_number":12,"context_line":"    OPTS_SUB\u003d({opts_sub})"},{"line_number":13,"context_line":"    ARGS\u003d({args})"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1fcb0948_a3198bc6","line":10,"updated":"2024-01-24 11:28:19.000000000","message":"Can you please remove the space here.","commit_id":"9e42007dc0ef7c4f4cacc903c56b9d6afe2fbfd0"},{"author":{"_account_id":36116,"name":"Philippe SÉRAPHIN","email":"philippe.seraphin@infomaniak.com","username":"pseraf"},"change_message_id":"03f6dde7fad5c22b632bc72ce0020ac6a87fb4d9","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    COMPREPLY\u003d()"},{"line_number":8,"context_line":"\tcur\u003d\"${{COMP_WORDS[COMP_CWORD]}}\""},{"line_number":9,"context_line":"\tprev\u003d\"${{COMP_WORDS[COMP_CWORD-1]}}\""},{"line_number":10,"context_line":"    "},{"line_number":11,"context_line":"    OPTS\u003d({opts})"},{"line_number":12,"context_line":"    OPTS_SUB\u003d({opts_sub})"},{"line_number":13,"context_line":"    ARGS\u003d({args})"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"62d450f5_92878abf","line":10,"in_reply_to":"1fcb0948_a3198bc6","updated":"2024-01-25 12:29:48.000000000","message":"OK, it\u0027s fixed","commit_id":"9e42007dc0ef7c4f4cacc903c56b9d6afe2fbfd0"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"05138054b7c33d3abca6bf8cc872eeef079982ae","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash completion for {scriptname}"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"_{scriptname}(){{"},{"line_number":4,"context_line":"    local cur prev"}],"source_content_type":"application/x-shellscript","patch_set":29,"id":"ca67f90a_32290028","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":39},"updated":"2024-04-11 06:43:09.000000000","message":"I\u0027d suggest you create a directory (shell_completion or templates, probably ?) and put all template files under it, instead of putting these files at top-level.","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"},{"author":{"_account_id":36116,"name":"Philippe SÉRAPHIN","email":"philippe.seraphin@infomaniak.com","username":"pseraf"},"change_message_id":"ee58abdd61c157b182920880daf714c28790ff5c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash completion for {scriptname}"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"_{scriptname}(){{"},{"line_number":4,"context_line":"    local cur prev"}],"source_content_type":"application/x-shellscript","patch_set":29,"id":"1a60cc6c_da102055","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":39},"in_reply_to":"ca67f90a_32290028","updated":"2024-04-12 09:16:43.000000000","message":"Done","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"05138054b7c33d3abca6bf8cc872eeef079982ae","unresolved":true,"context_lines":[{"line_number":5,"context_line":"    local -A ARGS MAP FORCE OPTS OPTS_SUB MULTI"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    COMPREPLY\u003d()"},{"line_number":8,"context_line":"\tcur\u003d\"${{COMP_WORDS[COMP_CWORD]}}\""},{"line_number":9,"context_line":"\tprev\u003d\"${{COMP_WORDS[COMP_CWORD-1]}}\""},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    OPTS\u003d({opts})"}],"source_content_type":"application/x-shellscript","patch_set":29,"id":"534d0ef0_76936aed","line":8,"range":{"start_line":8,"start_character":0,"end_line":8,"end_character":1},"updated":"2024-04-11 06:43:09.000000000","message":"tabs used here","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"},{"author":{"_account_id":36116,"name":"Philippe SÉRAPHIN","email":"philippe.seraphin@infomaniak.com","username":"pseraf"},"change_message_id":"ee58abdd61c157b182920880daf714c28790ff5c","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    local -A ARGS MAP FORCE OPTS OPTS_SUB MULTI"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    COMPREPLY\u003d()"},{"line_number":8,"context_line":"\tcur\u003d\"${{COMP_WORDS[COMP_CWORD]}}\""},{"line_number":9,"context_line":"\tprev\u003d\"${{COMP_WORDS[COMP_CWORD-1]}}\""},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    OPTS\u003d({opts})"}],"source_content_type":"application/x-shellscript","patch_set":29,"id":"64f4284c_059a61ce","line":8,"range":{"start_line":8,"start_character":0,"end_line":8,"end_character":1},"in_reply_to":"534d0ef0_76936aed","updated":"2024-04-12 09:16:43.000000000","message":"Done","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"}],"oslo_config/cfg.py":[{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"248befcf91eb47f2bb451169b4ef9189eafab4ec","unresolved":true,"context_lines":[{"line_number":1961,"context_line":"    disallow_names \u003d (\u0027project\u0027, \u0027prog\u0027, \u0027version\u0027,"},{"line_number":1962,"context_line":"                      \u0027usage\u0027, \u0027default_config_files\u0027, \u0027default_config_dirs\u0027)"},{"line_number":1963,"context_line":""},{"line_number":1964,"context_line":"    supported_shell_completion \u003d [\u0027bash\u0027,\u0027zsh\u0027]"},{"line_number":1965,"context_line":"    # NOTE(dhellmann): This instance is reused by list_opts()."},{"line_number":1966,"context_line":"    _config_source_opt \u003d ListOpt("},{"line_number":1967,"context_line":"        \u0027config_source\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"c093eda3_fa659738","line":1964,"updated":"2024-01-24 11:28:19.000000000","message":"Can you please fix the pep8 error. The whitespace after the comma.","commit_id":"9e42007dc0ef7c4f4cacc903c56b9d6afe2fbfd0"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"b90b74e8f7e7d671fc2a409c2fff5a292a89002d","unresolved":false,"context_lines":[{"line_number":1961,"context_line":"    disallow_names \u003d (\u0027project\u0027, \u0027prog\u0027, \u0027version\u0027,"},{"line_number":1962,"context_line":"                      \u0027usage\u0027, \u0027default_config_files\u0027, \u0027default_config_dirs\u0027)"},{"line_number":1963,"context_line":""},{"line_number":1964,"context_line":"    supported_shell_completion \u003d [\u0027bash\u0027,\u0027zsh\u0027]"},{"line_number":1965,"context_line":"    # NOTE(dhellmann): This instance is reused by list_opts()."},{"line_number":1966,"context_line":"    _config_source_opt \u003d ListOpt("},{"line_number":1967,"context_line":"        \u0027config_source\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"d76aa701_41741324","line":1964,"in_reply_to":"c093eda3_fa659738","updated":"2024-01-24 13:16:20.000000000","message":"Done","commit_id":"9e42007dc0ef7c4f4cacc903c56b9d6afe2fbfd0"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"b5758a99117c83d20695c21036cd24ed87334847","unresolved":true,"context_lines":[{"line_number":2194,"context_line":""},{"line_number":2195,"context_line":"        path \u003d f\"/etc/oslo.config/{shell}-completion.template\""},{"line_number":2196,"context_line":"        template \u003d path if os.path.isfile(path) \\"},{"line_number":2197,"context_line":"            else f\"{shell}-completion.template\""},{"line_number":2198,"context_line":""},{"line_number":2199,"context_line":"        for o, g in self._all_cli_opts():"},{"line_number":2200,"context_line":"            if type(o).__name__ \u003d\u003d \u0027SubCommandOpt\u0027:"}],"source_content_type":"text/x-python","patch_set":23,"id":"34fccfa3_d4dc1123","line":2197,"updated":"2024-01-31 11:38:45.000000000","message":"In here, please use instead:\nelse os.path.join(pathlib.Path(__file__).parent.resolve(), f\"{shell}-completion.template\")\n\nso that if there\u0027s nothing in /etc/oslo.config, the code then uses the template just right next to cfg.py, rather than in the template file in current directory.","commit_id":"4b6ba2d09b4c58cc1127ccc20d855c77de3ce670"},{"author":{"_account_id":36116,"name":"Philippe SÉRAPHIN","email":"philippe.seraphin@infomaniak.com","username":"pseraf"},"change_message_id":"ce374e9d683ed05b04c09c384624a3d15a6adcb8","unresolved":false,"context_lines":[{"line_number":2194,"context_line":""},{"line_number":2195,"context_line":"        path \u003d f\"/etc/oslo.config/{shell}-completion.template\""},{"line_number":2196,"context_line":"        template \u003d path if os.path.isfile(path) \\"},{"line_number":2197,"context_line":"            else f\"{shell}-completion.template\""},{"line_number":2198,"context_line":""},{"line_number":2199,"context_line":"        for o, g in self._all_cli_opts():"},{"line_number":2200,"context_line":"            if type(o).__name__ \u003d\u003d \u0027SubCommandOpt\u0027:"}],"source_content_type":"text/x-python","patch_set":23,"id":"c3f732c5_25d1095b","line":2197,"in_reply_to":"34fccfa3_d4dc1123","updated":"2024-01-31 14:20:55.000000000","message":"Fixed","commit_id":"4b6ba2d09b4c58cc1127ccc20d855c77de3ce670"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"05138054b7c33d3abca6bf8cc872eeef079982ae","unresolved":true,"context_lines":[{"line_number":1973,"context_line":"    )"},{"line_number":1974,"context_line":"    # Add option for generate a shell completion script"},{"line_number":1975,"context_line":"    _shell_completion_opt \u003d StrOpt("},{"line_number":1976,"context_line":"                \u0027shell_completion\u0027,"},{"line_number":1977,"context_line":"                choices\u003dsupported_shell_completion,"},{"line_number":1978,"context_line":"                help\u003d\u0027Display a shell completion script\u0027"},{"line_number":1979,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":29,"id":"37d798df_50825971","line":1976,"range":{"start_line":1976,"start_character":4,"end_line":1976,"end_character":16},"updated":"2024-04-11 06:43:09.000000000","message":"maybe you can remove redundant indentation ? (4 spaces should be enough)","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"},{"author":{"_account_id":36116,"name":"Philippe SÉRAPHIN","email":"philippe.seraphin@infomaniak.com","username":"pseraf"},"change_message_id":"ee58abdd61c157b182920880daf714c28790ff5c","unresolved":false,"context_lines":[{"line_number":1973,"context_line":"    )"},{"line_number":1974,"context_line":"    # Add option for generate a shell completion script"},{"line_number":1975,"context_line":"    _shell_completion_opt \u003d StrOpt("},{"line_number":1976,"context_line":"                \u0027shell_completion\u0027,"},{"line_number":1977,"context_line":"                choices\u003dsupported_shell_completion,"},{"line_number":1978,"context_line":"                help\u003d\u0027Display a shell completion script\u0027"},{"line_number":1979,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":29,"id":"f34be307_b6db613d","line":1976,"range":{"start_line":1976,"start_character":4,"end_line":1976,"end_character":16},"in_reply_to":"37d798df_50825971","updated":"2024-04-12 09:16:43.000000000","message":"Done","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"05138054b7c33d3abca6bf8cc872eeef079982ae","unresolved":true,"context_lines":[{"line_number":2148,"context_line":"        :raises: SystemExit, ConfigFilesNotFoundError, ConfigFileParseError,"},{"line_number":2149,"context_line":"                 ConfigFilesPermissionDeniedError,"},{"line_number":2150,"context_line":"                 RequiredOptError, DuplicateOptError"},{"line_number":2151,"context_line":"        .. versionchanged:: 9.3.0"},{"line_number":2152,"context_line":"        Added shell-completion option for generate a shell completion script."},{"line_number":2153,"context_line":"        \"\"\""},{"line_number":2154,"context_line":"        self.clear()"}],"source_content_type":"text/x-python","patch_set":29,"id":"1e1a92fe_3d9a3371","line":2151,"range":{"start_line":2151,"start_character":28,"end_line":2151,"end_character":33},"updated":"2024-04-11 06:43:09.000000000","message":"This may need to be 9.5.0 now.","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"},{"author":{"_account_id":36116,"name":"Philippe SÉRAPHIN","email":"philippe.seraphin@infomaniak.com","username":"pseraf"},"change_message_id":"ee58abdd61c157b182920880daf714c28790ff5c","unresolved":false,"context_lines":[{"line_number":2148,"context_line":"        :raises: SystemExit, ConfigFilesNotFoundError, ConfigFileParseError,"},{"line_number":2149,"context_line":"                 ConfigFilesPermissionDeniedError,"},{"line_number":2150,"context_line":"                 RequiredOptError, DuplicateOptError"},{"line_number":2151,"context_line":"        .. versionchanged:: 9.3.0"},{"line_number":2152,"context_line":"        Added shell-completion option for generate a shell completion script."},{"line_number":2153,"context_line":"        \"\"\""},{"line_number":2154,"context_line":"        self.clear()"}],"source_content_type":"text/x-python","patch_set":29,"id":"64cfa375_fe604f3f","line":2151,"range":{"start_line":2151,"start_character":28,"end_line":2151,"end_character":33},"in_reply_to":"1e1a92fe_3d9a3371","updated":"2024-04-12 09:16:43.000000000","message":"Done","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"05138054b7c33d3abca6bf8cc872eeef079982ae","unresolved":true,"context_lines":[{"line_number":2192,"context_line":"        maps, descr, opts, opts_sub, args \u003d {}, {}, {}, {}, {}"},{"line_number":2193,"context_line":"        multi \u003d []"},{"line_number":2194,"context_line":""},{"line_number":2195,"context_line":"        path \u003d f\"/etc/oslo.config/{shell}-completion.template\""},{"line_number":2196,"context_line":"        template \u003d path if os.path.isfile(path) \\"},{"line_number":2197,"context_line":"            else os.path.join(os.path.dirname(os.path.abspath(__file__)),"},{"line_number":2198,"context_line":"                              f\"{shell}-completion.template\")"}],"source_content_type":"text/x-python","patch_set":29,"id":"9b859915_3b097261","line":2195,"range":{"start_line":2195,"start_character":8,"end_line":2195,"end_character":62},"updated":"2024-04-11 06:43:09.000000000","message":"oslo.config is a library and I\u0027m unsure if having config file for it is the right choise. This would also affect selinux (and probably apparmor ?)\n\nI don\u0027t know if users may likely need to customize the template. Probably we can use the built-in one, and add an option to override the template in case someone really needs it ?","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"},{"author":{"_account_id":36116,"name":"Philippe SÉRAPHIN","email":"philippe.seraphin@infomaniak.com","username":"pseraf"},"change_message_id":"ee58abdd61c157b182920880daf714c28790ff5c","unresolved":false,"context_lines":[{"line_number":2192,"context_line":"        maps, descr, opts, opts_sub, args \u003d {}, {}, {}, {}, {}"},{"line_number":2193,"context_line":"        multi \u003d []"},{"line_number":2194,"context_line":""},{"line_number":2195,"context_line":"        path \u003d f\"/etc/oslo.config/{shell}-completion.template\""},{"line_number":2196,"context_line":"        template \u003d path if os.path.isfile(path) \\"},{"line_number":2197,"context_line":"            else os.path.join(os.path.dirname(os.path.abspath(__file__)),"},{"line_number":2198,"context_line":"                              f\"{shell}-completion.template\")"}],"source_content_type":"text/x-python","patch_set":29,"id":"8f0e863e_786917d3","line":2195,"range":{"start_line":2195,"start_character":8,"end_line":2195,"end_character":62},"in_reply_to":"9b859915_3b097261","updated":"2024-04-12 09:16:43.000000000","message":"Done","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"05138054b7c33d3abca6bf8cc872eeef079982ae","unresolved":true,"context_lines":[{"line_number":2197,"context_line":"            else os.path.join(os.path.dirname(os.path.abspath(__file__)),"},{"line_number":2198,"context_line":"                              f\"{shell}-completion.template\")"},{"line_number":2199,"context_line":""},{"line_number":2200,"context_line":"        for o, g in self._all_cli_opts():"},{"line_number":2201,"context_line":"            if type(o).__name__ \u003d\u003d \u0027SubCommandOpt\u0027:"},{"line_number":2202,"context_line":"                # If a subcommand, call _add_to_cli, for getting the subparser"},{"line_number":2203,"context_line":"                o._add_to_cli(self._oparser, g)"}],"source_content_type":"text/x-python","patch_set":29,"id":"e4539466_28e67be7","line":2200,"range":{"start_line":2200,"start_character":12,"end_line":2200,"end_character":13},"updated":"2024-04-11 06:43:09.000000000","message":"can we please avoid using o, g, whatever too short variable names and make it more meaning ful like opt, group ?","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"},{"author":{"_account_id":36116,"name":"Philippe SÉRAPHIN","email":"philippe.seraphin@infomaniak.com","username":"pseraf"},"change_message_id":"ee58abdd61c157b182920880daf714c28790ff5c","unresolved":false,"context_lines":[{"line_number":2197,"context_line":"            else os.path.join(os.path.dirname(os.path.abspath(__file__)),"},{"line_number":2198,"context_line":"                              f\"{shell}-completion.template\")"},{"line_number":2199,"context_line":""},{"line_number":2200,"context_line":"        for o, g in self._all_cli_opts():"},{"line_number":2201,"context_line":"            if type(o).__name__ \u003d\u003d \u0027SubCommandOpt\u0027:"},{"line_number":2202,"context_line":"                # If a subcommand, call _add_to_cli, for getting the subparser"},{"line_number":2203,"context_line":"                o._add_to_cli(self._oparser, g)"}],"source_content_type":"text/x-python","patch_set":29,"id":"ffdf6266_90ef2846","line":2200,"range":{"start_line":2200,"start_character":12,"end_line":2200,"end_character":13},"in_reply_to":"e4539466_28e67be7","updated":"2024-04-12 09:16:43.000000000","message":"Done","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"05138054b7c33d3abca6bf8cc872eeef079982ae","unresolved":true,"context_lines":[{"line_number":2198,"context_line":"                              f\"{shell}-completion.template\")"},{"line_number":2199,"context_line":""},{"line_number":2200,"context_line":"        for o, g in self._all_cli_opts():"},{"line_number":2201,"context_line":"            if type(o).__name__ \u003d\u003d \u0027SubCommandOpt\u0027:"},{"line_number":2202,"context_line":"                # If a subcommand, call _add_to_cli, for getting the subparser"},{"line_number":2203,"context_line":"                o._add_to_cli(self._oparser, g)"},{"line_number":2204,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":29,"id":"4883fb69_ff7ddacb","line":2201,"updated":"2024-04-11 06:43:09.000000000","message":"Please consider using `isinstance(foo, bar)` or `type(foo) is bar`","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"},{"author":{"_account_id":36116,"name":"Philippe SÉRAPHIN","email":"philippe.seraphin@infomaniak.com","username":"pseraf"},"change_message_id":"ee58abdd61c157b182920880daf714c28790ff5c","unresolved":false,"context_lines":[{"line_number":2198,"context_line":"                              f\"{shell}-completion.template\")"},{"line_number":2199,"context_line":""},{"line_number":2200,"context_line":"        for o, g in self._all_cli_opts():"},{"line_number":2201,"context_line":"            if type(o).__name__ \u003d\u003d \u0027SubCommandOpt\u0027:"},{"line_number":2202,"context_line":"                # If a subcommand, call _add_to_cli, for getting the subparser"},{"line_number":2203,"context_line":"                o._add_to_cli(self._oparser, g)"},{"line_number":2204,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":29,"id":"65a6babe_3ea6c3c4","line":2201,"in_reply_to":"4883fb69_ff7ddacb","updated":"2024-04-12 09:16:43.000000000","message":"Itisn\u0027t only type(foo) but type(foo).__name__.\nI didn\u0027t find howt o test only __name__ of type","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"24f6c7c926aa6a621c8b1b15252899af84ee7491","unresolved":true,"context_lines":[{"line_number":2198,"context_line":"                              f\"{shell}-completion.template\")"},{"line_number":2199,"context_line":""},{"line_number":2200,"context_line":"        for o, g in self._all_cli_opts():"},{"line_number":2201,"context_line":"            if type(o).__name__ \u003d\u003d \u0027SubCommandOpt\u0027:"},{"line_number":2202,"context_line":"                # If a subcommand, call _add_to_cli, for getting the subparser"},{"line_number":2203,"context_line":"                o._add_to_cli(self._oparser, g)"},{"line_number":2204,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":29,"id":"c0d53bfd_be601c2a","line":2201,"in_reply_to":"65a6babe_3ea6c3c4","updated":"2024-04-12 10:31:19.000000000","message":"The aim of this logic is to check if the type of o is SubCommandOpt. Is my understanding right ?\n\nThen this can be `type(opt) is SubCommandOpt` or even `isinstance(opt, SubCommandOpt)` if child classes may also work. I didn\u0027t fully understand why we need to use `__name__` here.","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"},{"author":{"_account_id":36116,"name":"Philippe SÉRAPHIN","email":"philippe.seraphin@infomaniak.com","username":"pseraf"},"change_message_id":"c980db7c1400f86a21c2bc23303b0d4608d992f2","unresolved":false,"context_lines":[{"line_number":2198,"context_line":"                              f\"{shell}-completion.template\")"},{"line_number":2199,"context_line":""},{"line_number":2200,"context_line":"        for o, g in self._all_cli_opts():"},{"line_number":2201,"context_line":"            if type(o).__name__ \u003d\u003d \u0027SubCommandOpt\u0027:"},{"line_number":2202,"context_line":"                # If a subcommand, call _add_to_cli, for getting the subparser"},{"line_number":2203,"context_line":"                o._add_to_cli(self._oparser, g)"},{"line_number":2204,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":29,"id":"913dc1af_fe60c307","line":2201,"in_reply_to":"c0d53bfd_be601c2a","updated":"2024-04-12 11:23:20.000000000","message":"Done","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"05138054b7c33d3abca6bf8cc872eeef079982ae","unresolved":true,"context_lines":[{"line_number":2214,"context_line":"                if o.short:"},{"line_number":2215,"context_line":"                    opts[name] +\u003d [f\"-{o.short}\"]"},{"line_number":2216,"context_line":"                    maps[f\"-{o.short}\"] \u003d name"},{"line_number":2217,"context_line":"                if not (o.type is None or"},{"line_number":2218,"context_line":"                        o.type.__class__.__name__ \u003d\u003d \u0027Boolean\u0027):"},{"line_number":2219,"context_line":"                    if hasattr(o.type, \u0027choices\u0027) and o.type.choices:"},{"line_number":2220,"context_line":"                        args[name] \u003d \u0027 \u0027.join(o.type.choices.keys())"}],"source_content_type":"text/x-python","patch_set":29,"id":"a80ee322_d00353f8","line":2217,"updated":"2024-04-11 06:43:09.000000000","message":"I wonder if there is a case where type can be None.","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"},{"author":{"_account_id":36116,"name":"Philippe SÉRAPHIN","email":"philippe.seraphin@infomaniak.com","username":"pseraf"},"change_message_id":"ee58abdd61c157b182920880daf714c28790ff5c","unresolved":false,"context_lines":[{"line_number":2214,"context_line":"                if o.short:"},{"line_number":2215,"context_line":"                    opts[name] +\u003d [f\"-{o.short}\"]"},{"line_number":2216,"context_line":"                    maps[f\"-{o.short}\"] \u003d name"},{"line_number":2217,"context_line":"                if not (o.type is None or"},{"line_number":2218,"context_line":"                        o.type.__class__.__name__ \u003d\u003d \u0027Boolean\u0027):"},{"line_number":2219,"context_line":"                    if hasattr(o.type, \u0027choices\u0027) and o.type.choices:"},{"line_number":2220,"context_line":"                        args[name] \u003d \u0027 \u0027.join(o.type.choices.keys())"}],"source_content_type":"text/x-python","patch_set":29,"id":"3918dede_6d2eee6e","line":2217,"in_reply_to":"a80ee322_d00353f8","updated":"2024-04-12 09:16:43.000000000","message":"Done","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"05138054b7c33d3abca6bf8cc872eeef079982ae","unresolved":true,"context_lines":[{"line_number":2215,"context_line":"                    opts[name] +\u003d [f\"-{o.short}\"]"},{"line_number":2216,"context_line":"                    maps[f\"-{o.short}\"] \u003d name"},{"line_number":2217,"context_line":"                if not (o.type is None or"},{"line_number":2218,"context_line":"                        o.type.__class__.__name__ \u003d\u003d \u0027Boolean\u0027):"},{"line_number":2219,"context_line":"                    if hasattr(o.type, \u0027choices\u0027) and o.type.choices:"},{"line_number":2220,"context_line":"                        args[name] \u003d \u0027 \u0027.join(o.type.choices.keys())"},{"line_number":2221,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":29,"id":"120880f6_9dfa8ab6","line":2218,"updated":"2024-04-11 06:43:09.000000000","message":"I think we should implement a few methods in each Type class and use it, instead of having type-specific implementation here.","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"},{"author":{"_account_id":36116,"name":"Philippe SÉRAPHIN","email":"philippe.seraphin@infomaniak.com","username":"pseraf"},"change_message_id":"ee58abdd61c157b182920880daf714c28790ff5c","unresolved":false,"context_lines":[{"line_number":2215,"context_line":"                    opts[name] +\u003d [f\"-{o.short}\"]"},{"line_number":2216,"context_line":"                    maps[f\"-{o.short}\"] \u003d name"},{"line_number":2217,"context_line":"                if not (o.type is None or"},{"line_number":2218,"context_line":"                        o.type.__class__.__name__ \u003d\u003d \u0027Boolean\u0027):"},{"line_number":2219,"context_line":"                    if hasattr(o.type, \u0027choices\u0027) and o.type.choices:"},{"line_number":2220,"context_line":"                        args[name] \u003d \u0027 \u0027.join(o.type.choices.keys())"},{"line_number":2221,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":29,"id":"8e600902_3712a924","line":2218,"in_reply_to":"120880f6_9dfa8ab6","updated":"2024-04-12 09:16:43.000000000","message":"Done","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"05138054b7c33d3abca6bf8cc872eeef079982ae","unresolved":true,"context_lines":[{"line_number":2256,"context_line":""},{"line_number":2257,"context_line":"    def _generate_bash_completion(self,"},{"line_number":2258,"context_line":"                                  template,"},{"line_number":2259,"context_line":"                                  maps\u003d{},"},{"line_number":2260,"context_line":"                                  opts\u003d{},"},{"line_number":2261,"context_line":"                                  descr\u003d{},"},{"line_number":2262,"context_line":"                                  opts_sub\u003d{},"}],"source_content_type":"text/x-python","patch_set":29,"id":"215e2ee0_9aac8ee3","line":2259,"range":{"start_line":2259,"start_character":38,"end_line":2259,"end_character":42},"updated":"2024-04-11 06:43:09.000000000","message":"Using mutable values for method defaults is known to cause unexpected results, Please use None.\n\nexample: https://stackoverflow.com/questions/1132941/least-astonishment-and-the-mutable-default-argument","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"},{"author":{"_account_id":36116,"name":"Philippe SÉRAPHIN","email":"philippe.seraphin@infomaniak.com","username":"pseraf"},"change_message_id":"ee58abdd61c157b182920880daf714c28790ff5c","unresolved":false,"context_lines":[{"line_number":2256,"context_line":""},{"line_number":2257,"context_line":"    def _generate_bash_completion(self,"},{"line_number":2258,"context_line":"                                  template,"},{"line_number":2259,"context_line":"                                  maps\u003d{},"},{"line_number":2260,"context_line":"                                  opts\u003d{},"},{"line_number":2261,"context_line":"                                  descr\u003d{},"},{"line_number":2262,"context_line":"                                  opts_sub\u003d{},"}],"source_content_type":"text/x-python","patch_set":29,"id":"e5a8f098_705bcffa","line":2259,"range":{"start_line":2259,"start_character":38,"end_line":2259,"end_character":42},"in_reply_to":"215e2ee0_9aac8ee3","updated":"2024-04-12 09:16:43.000000000","message":"Done","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"}],"oslo_config/tests/test_generator.py":[{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"33749214cdc5a1ad0933eb9cf0f3bf3dafcd685e","unresolved":true,"context_lines":[{"line_number":1404,"context_line":"    @mock.patch.object(generator, \u0027_get_raw_opts_loaders\u0027)"},{"line_number":1405,"context_line":"    def test_generate(self, raw_opts_loader):"},{"line_number":1406,"context_line":"        generator.register_cli_opts(self.conf)"},{"line_number":1407,"context_line":"        generator.register_cli_opt(cfg.StrOpt(\u0027shell_completion\u0027))"},{"line_number":1408,"context_line":"        namespaces \u003d [i[0] for i in self.opts]"},{"line_number":1409,"context_line":"        self.config(namespace\u003dnamespaces, format_\u003d\u0027yaml\u0027)"},{"line_number":1410,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5bdab8fb_0c3ccdf1","line":1407,"range":{"start_line":1407,"start_character":18,"end_line":1407,"end_character":66},"updated":"2024-01-25 21:14:15.000000000","message":"I guess you meant register_cli_opts (notice the final \"s\"), so I added it to see if it passes the CI.","commit_id":"9d75ce34ca6c8f386739f5af59064f50cf6c7b10"},{"author":{"_account_id":36116,"name":"Philippe SÉRAPHIN","email":"philippe.seraphin@infomaniak.com","username":"pseraf"},"change_message_id":"aafb9ebe82e2dc1bcad874711a82943d07ad4f6e","unresolved":true,"context_lines":[{"line_number":1404,"context_line":"    @mock.patch.object(generator, \u0027_get_raw_opts_loaders\u0027)"},{"line_number":1405,"context_line":"    def test_generate(self, raw_opts_loader):"},{"line_number":1406,"context_line":"        generator.register_cli_opts(self.conf)"},{"line_number":1407,"context_line":"        generator.register_cli_opt(cfg.StrOpt(\u0027shell_completion\u0027))"},{"line_number":1408,"context_line":"        namespaces \u003d [i[0] for i in self.opts]"},{"line_number":1409,"context_line":"        self.config(namespace\u003dnamespaces, format_\u003d\u0027yaml\u0027)"},{"line_number":1410,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"8a372839_334e87cc","line":1407,"range":{"start_line":1407,"start_character":18,"end_line":1407,"end_character":66},"in_reply_to":"5bdab8fb_0c3ccdf1","updated":"2024-01-26 05:54:11.000000000","message":"THe patch 8 is with the final \u0027s\u0027 but there was an error with CI","commit_id":"9d75ce34ca6c8f386739f5af59064f50cf6c7b10"},{"author":{"_account_id":36116,"name":"Philippe SÉRAPHIN","email":"philippe.seraphin@infomaniak.com","username":"pseraf"},"change_message_id":"5a1e779a688e59324527b0ea031862223cf16c5d","unresolved":false,"context_lines":[{"line_number":1404,"context_line":"    @mock.patch.object(generator, \u0027_get_raw_opts_loaders\u0027)"},{"line_number":1405,"context_line":"    def test_generate(self, raw_opts_loader):"},{"line_number":1406,"context_line":"        generator.register_cli_opts(self.conf)"},{"line_number":1407,"context_line":"        generator.register_cli_opt(cfg.StrOpt(\u0027shell_completion\u0027))"},{"line_number":1408,"context_line":"        namespaces \u003d [i[0] for i in self.opts]"},{"line_number":1409,"context_line":"        self.config(namespace\u003dnamespaces, format_\u003d\u0027yaml\u0027)"},{"line_number":1410,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"32f1d885_9bcd9364","line":1407,"range":{"start_line":1407,"start_character":18,"end_line":1407,"end_character":66},"in_reply_to":"8a372839_334e87cc","updated":"2024-02-01 07:56:54.000000000","message":"Fixed","commit_id":"9d75ce34ca6c8f386739f5af59064f50cf6c7b10"}],"oslo_config/zsh-completion.template":[{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"248befcf91eb47f2bb451169b4ef9189eafab4ec","unresolved":true,"context_lines":[{"line_number":8,"context_line":"\t_{scriptname}_cmds\u003d("},{"line_number":9,"context_line":"{commands_list}"},{"line_number":10,"context_line":"\t)"},{"line_number":11,"context_line":"\t"},{"line_number":12,"context_line":"\tif (( CURRENT \u003d\u003d 1 )); then"},{"line_number":13,"context_line":"\t\t_describe -t commands \u0027{scriptname} command\u0027 _{scriptname}_cmds || compadd \"$@\""},{"line_number":14,"context_line":"\telse"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"391296af_9fa1aad0","line":11,"updated":"2024-01-24 11:28:19.000000000","message":"I think you need to remove the » everywhere.","commit_id":"9e42007dc0ef7c4f4cacc903c56b9d6afe2fbfd0"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"2d8faad95ff2315901073e9745b865e67a169078","unresolved":true,"context_lines":[{"line_number":8,"context_line":"\t_{scriptname}_cmds\u003d("},{"line_number":9,"context_line":"{commands_list}"},{"line_number":10,"context_line":"\t)"},{"line_number":11,"context_line":"\t"},{"line_number":12,"context_line":"\tif (( CURRENT \u003d\u003d 1 )); then"},{"line_number":13,"context_line":"\t\t_describe -t commands \u0027{scriptname} command\u0027 _{scriptname}_cmds || compadd \"$@\""},{"line_number":14,"context_line":"\telse"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"eaba3565_c6976306","line":11,"in_reply_to":"10ebfc5f_aa753170","updated":"2024-01-24 16:34:22.000000000","message":"\"\u003e\u003e\" indicates here tabs are used instead of spaces.\n\nI think spaces are preferred globally. Can we replace these tabs by 4 spaces ? (if it works)","commit_id":"9e42007dc0ef7c4f4cacc903c56b9d6afe2fbfd0"},{"author":{"_account_id":31245,"name":"Daniel Bengtsson","email":"dbengt@redhat.com","username":"damani42"},"change_message_id":"b90b74e8f7e7d671fc2a409c2fff5a292a89002d","unresolved":true,"context_lines":[{"line_number":8,"context_line":"\t_{scriptname}_cmds\u003d("},{"line_number":9,"context_line":"{commands_list}"},{"line_number":10,"context_line":"\t)"},{"line_number":11,"context_line":"\t"},{"line_number":12,"context_line":"\tif (( CURRENT \u003d\u003d 1 )); then"},{"line_number":13,"context_line":"\t\t_describe -t commands \u0027{scriptname} command\u0027 _{scriptname}_cmds || compadd \"$@\""},{"line_number":14,"context_line":"\telse"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"10ebfc5f_aa753170","line":11,"in_reply_to":"391296af_9fa1aad0","updated":"2024-01-24 13:16:20.000000000","message":"It seems the » is added by gerrit sorry.","commit_id":"9e42007dc0ef7c4f4cacc903c56b9d6afe2fbfd0"},{"author":{"_account_id":36116,"name":"Philippe SÉRAPHIN","email":"philippe.seraphin@infomaniak.com","username":"pseraf"},"change_message_id":"03f6dde7fad5c22b632bc72ce0020ac6a87fb4d9","unresolved":false,"context_lines":[{"line_number":8,"context_line":"\t_{scriptname}_cmds\u003d("},{"line_number":9,"context_line":"{commands_list}"},{"line_number":10,"context_line":"\t)"},{"line_number":11,"context_line":"\t"},{"line_number":12,"context_line":"\tif (( CURRENT \u003d\u003d 1 )); then"},{"line_number":13,"context_line":"\t\t_describe -t commands \u0027{scriptname} command\u0027 _{scriptname}_cmds || compadd \"$@\""},{"line_number":14,"context_line":"\telse"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"ca00457d_9e1423f6","line":11,"in_reply_to":"eaba3565_c6976306","updated":"2024-01-25 12:29:48.000000000","message":"Ok it\u0027s fixed","commit_id":"9e42007dc0ef7c4f4cacc903c56b9d6afe2fbfd0"}],"releasenotes/notes/add_option_for_shell_completion-47b1b47d41a490e8.yaml":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"05138054b7c33d3abca6bf8cc872eeef079982ae","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Add option for generate shell completion script"},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - |"},{"line_number":6,"context_line":"    Add generic options, methods in ConfigsOpts class and template files for"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"5a019f69_ead3b8c8","line":3,"range":{"start_line":2,"start_character":0,"end_line":3,"end_character":51},"updated":"2024-04-11 06:43:09.000000000","message":"prelude needs to be created per-release. I\u0027d suggest you exclude this section now and we can discuss if we really want to add prelude section when we create a new release.","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"},{"author":{"_account_id":36116,"name":"Philippe SÉRAPHIN","email":"philippe.seraphin@infomaniak.com","username":"pseraf"},"change_message_id":"ee58abdd61c157b182920880daf714c28790ff5c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Add option for generate shell completion script"},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - |"},{"line_number":6,"context_line":"    Add generic options, methods in ConfigsOpts class and template files for"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"30b182b7_1d4c465c","line":3,"range":{"start_line":2,"start_character":0,"end_line":3,"end_character":51},"in_reply_to":"5a019f69_ead3b8c8","updated":"2024-04-12 09:16:43.000000000","message":"Done","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"05138054b7c33d3abca6bf8cc872eeef079982ae","unresolved":true,"context_lines":[{"line_number":3,"context_line":"    Add option for generate shell completion script"},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - |"},{"line_number":6,"context_line":"    Add generic options, methods in ConfigsOpts class and template files for"},{"line_number":7,"context_line":"    generate bash and zsh completion scripts"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"f10fbbc6_18889697","line":6,"range":{"start_line":6,"start_character":8,"end_line":6,"end_character":23},"updated":"2024-04-11 06:43:09.000000000","message":"Can you please describe details of the usage ? I don\u0027t think generic option describes the feature better and users can understand what they can really achieve with this feature. Also I\u0027m unsure if mentioning internal implementations like methods or template files would be useful.\n\nWhat I may suggest is something like\n\n```\nAdd ``--shell_completion`` argument to generate shell completion file content. Currently bash and zsh are supported.\n```","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"},{"author":{"_account_id":36116,"name":"Philippe SÉRAPHIN","email":"philippe.seraphin@infomaniak.com","username":"pseraf"},"change_message_id":"ee58abdd61c157b182920880daf714c28790ff5c","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    Add option for generate shell completion script"},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - |"},{"line_number":6,"context_line":"    Add generic options, methods in ConfigsOpts class and template files for"},{"line_number":7,"context_line":"    generate bash and zsh completion scripts"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"bab26c5e_715e1b68","line":6,"range":{"start_line":6,"start_character":8,"end_line":6,"end_character":23},"in_reply_to":"f10fbbc6_18889697","updated":"2024-04-12 09:16:43.000000000","message":"Done","commit_id":"2bdfa88b5475d4fc1b513d3b002a7a92021fa656"}]}
