)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a6ed94936dd6560046359ea4d4d98b9aa076f483","unresolved":true,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2021-07-30 18:06:29 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Kayobe environment dependencies"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Story: 2002009"},{"line_number":10,"context_line":"Task: 42911"},{"line_number":11,"context_line":"Change-Id: I4d9f96ec4cf3c6cd0d28dfe5ddb239d863498a72"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3c11976a_052edff9","line":8,"updated":"2021-08-11 09:53:33.000000000","message":"moar info pls","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":28048,"name":"Will Szumski","email":"will@stackhpc.com","username":"jovial"},"change_message_id":"c5ef43025a85725a04ccd7a7403e63e307006292","unresolved":true,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2021-07-30 18:06:29 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Kayobe environment dependencies"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Story: 2002009"},{"line_number":10,"context_line":"Task: 42911"},{"line_number":11,"context_line":"Change-Id: I4d9f96ec4cf3c6cd0d28dfe5ddb239d863498a72"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"e96d7243_d3de2f42","line":8,"in_reply_to":"3c11976a_052edff9","updated":"2023-03-09 09:44:36.000000000","message":"I\u0027ve fleshed this out a bit.","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"7b97bdd3d43c6c1018c3344a088882646aeccd01","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2021-07-30 18:06:29 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Kayobe environment dependencies"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Story: 2002009"},{"line_number":10,"context_line":"Task: 42911"},{"line_number":11,"context_line":"Change-Id: I4d9f96ec4cf3c6cd0d28dfe5ddb239d863498a72"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"0fd6ce78_63a96b24","line":8,"in_reply_to":"e96d7243_d3de2f42","updated":"2023-04-19 14:15:58.000000000","message":"Done","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"45480bafe102cea0ba5510da67b00408ed011aaf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"0a0772e2_68dcb861","updated":"2023-03-14 09:35:55.000000000","message":"recheck -  tenks failed with: \"Connection failure: The read operation timed out\"","commit_id":"a3d323f5d12c01529d541b2982c55f4f05d5d23b"},{"author":{"_account_id":28048,"name":"Will Szumski","email":"will@stackhpc.com","username":"jovial"},"change_message_id":"c5ef43025a85725a04ccd7a7403e63e307006292","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"ddee7e5c_81bf87b0","updated":"2023-03-09 09:44:36.000000000","message":"retry, tenks failed with: \"Connection failure: The read operation timed out\"","commit_id":"a3d323f5d12c01529d541b2982c55f4f05d5d23b"},{"author":{"_account_id":14200,"name":"Maksim Malchuk","email":"maksim.malchuk@gmail.com","username":"mmalchuk"},"change_message_id":"5b0170ee5862cfdfd829ce165223241772b8a04e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"11cbfc20_befe36eb","updated":"2023-09-01 17:14:56.000000000","message":"ah... I see both got +W","commit_id":"0ae9e8d4892c5e7a0fd3477452b1a134f5dc11d0"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"86b3d59f020fdb77ca1e50cbb46dbcb3cbfb27cd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"114dca8a_0e60932a","updated":"2023-05-31 08:07:41.000000000","message":"recheck\n\nJammy failed on tarballs","commit_id":"0ae9e8d4892c5e7a0fd3477452b1a134f5dc11d0"},{"author":{"_account_id":14200,"name":"Maksim Malchuk","email":"maksim.malchuk@gmail.com","username":"mmalchuk"},"change_message_id":"3d40b118d6060fa3199c76d7bbd4a382dd77ff21","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"98d13ff7_2086c799","updated":"2023-09-01 17:13:57.000000000","message":"should we merge relation chain changes first?","commit_id":"0ae9e8d4892c5e7a0fd3477452b1a134f5dc11d0"}],"doc/source/multiple-environments.rst":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a6ed94936dd6560046359ea4d4d98b9aa076f483","unresolved":true,"context_lines":[{"line_number":203,"context_line":"   :caption: ``$KAYOBE_CONFIG_PATH/environments/environment-C/.kayobe-environment``"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"   dependencies:"},{"line_number":206,"context_line":"      - environment-B - environment-C"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":".. code-block:: yaml"},{"line_number":209,"context_line":"      :caption: ``$KAYOBE_CONFIG_PATH/environments/environment-B/.kayobe-environment``"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9db68c0a_349cb61f","line":206,"range":{"start_line":206,"start_character":22,"end_line":206,"end_character":37},"updated":"2021-08-11 09:53:33.000000000","message":"mistake?","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":28048,"name":"Will Szumski","email":"will@stackhpc.com","username":"jovial"},"change_message_id":"c5ef43025a85725a04ccd7a7403e63e307006292","unresolved":false,"context_lines":[{"line_number":203,"context_line":"   :caption: ``$KAYOBE_CONFIG_PATH/environments/environment-C/.kayobe-environment``"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"   dependencies:"},{"line_number":206,"context_line":"      - environment-B - environment-C"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":".. code-block:: yaml"},{"line_number":209,"context_line":"      :caption: ``$KAYOBE_CONFIG_PATH/environments/environment-B/.kayobe-environment``"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bb9c347d_ff15665b","line":206,"range":{"start_line":206,"start_character":22,"end_line":206,"end_character":37},"in_reply_to":"9db68c0a_349cb61f","updated":"2023-03-09 09:44:36.000000000","message":"Done","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a6ed94936dd6560046359ea4d4d98b9aa076f483","unresolved":true,"context_lines":[{"line_number":206,"context_line":"      - environment-B - environment-C"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":".. code-block:: yaml"},{"line_number":209,"context_line":"      :caption: ``$KAYOBE_CONFIG_PATH/environments/environment-B/.kayobe-environment``"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"      dependencies:"},{"line_number":212,"context_line":"         - environment-A"}],"source_content_type":"text/x-rst","patch_set":2,"id":"4ef146cb_774b0d71","line":209,"range":{"start_line":209,"start_character":7,"end_line":209,"end_character":14},"updated":"2021-08-11 09:53:33.000000000","message":"indentation","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":28048,"name":"Will Szumski","email":"will@stackhpc.com","username":"jovial"},"change_message_id":"c5ef43025a85725a04ccd7a7403e63e307006292","unresolved":false,"context_lines":[{"line_number":206,"context_line":"      - environment-B - environment-C"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":".. code-block:: yaml"},{"line_number":209,"context_line":"      :caption: ``$KAYOBE_CONFIG_PATH/environments/environment-B/.kayobe-environment``"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"      dependencies:"},{"line_number":212,"context_line":"         - environment-A"}],"source_content_type":"text/x-rst","patch_set":2,"id":"21311a49_625ab858","line":209,"range":{"start_line":209,"start_character":7,"end_line":209,"end_character":14},"in_reply_to":"4ef146cb_774b0d71","updated":"2023-03-09 09:44:36.000000000","message":"Done","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"7b97bdd3d43c6c1018c3344a088882646aeccd01","unresolved":true,"context_lines":[{"line_number":389,"context_line":"   :caption: ``$KAYOBE_CONFIG_PATH/environments/environment-C/.kayobe-environment``"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"   dependencies:"},{"line_number":392,"context_line":"      - environment-B - environment-C"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":".. code-block:: yaml"},{"line_number":395,"context_line":"      :caption: ``$KAYOBE_CONFIG_PATH/environments/environment-B/.kayobe-environment``"}],"source_content_type":"text/x-rst","patch_set":8,"id":"8446c42c_801d2624","line":392,"range":{"start_line":392,"start_character":21,"end_line":392,"end_character":37},"updated":"2023-04-19 14:15:58.000000000","message":"What does this bit mean?","commit_id":"a3d323f5d12c01529d541b2982c55f4f05d5d23b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"15e153f4ce75206f0b76f28235d591eb864f1f6f","unresolved":false,"context_lines":[{"line_number":389,"context_line":"   :caption: ``$KAYOBE_CONFIG_PATH/environments/environment-C/.kayobe-environment``"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"   dependencies:"},{"line_number":392,"context_line":"      - environment-B - environment-C"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":".. code-block:: yaml"},{"line_number":395,"context_line":"      :caption: ``$KAYOBE_CONFIG_PATH/environments/environment-B/.kayobe-environment``"}],"source_content_type":"text/x-rst","patch_set":8,"id":"a1cbac4a_387b2ab5","line":392,"range":{"start_line":392,"start_character":21,"end_line":392,"end_character":37},"in_reply_to":"8446c42c_801d2624","updated":"2023-04-19 14:16:33.000000000","message":"Done","commit_id":"a3d323f5d12c01529d541b2982c55f4f05d5d23b"}],"kayobe/kolla_ansible.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a6ed94936dd6560046359ea4d4d98b9aa076f483","unresolved":true,"context_lines":[{"line_number":79,"context_line":"        environments \u003d [\"kayobe\"]"},{"line_number":80,"context_line":"        if parsed_args.environment:"},{"line_number":81,"context_line":"            environments.append(parsed_args.environment)"},{"line_number":82,"context_line":"        else:"},{"line_number":83,"context_line":"            environment_finder \u003d utils.EnvironmentFinder("},{"line_number":84,"context_line":"                parsed_args.config_path, parsed_args.environment)"},{"line_number":85,"context_line":"            for environment in environment_finder.ordered():"}],"source_content_type":"text/x-python","patch_set":2,"id":"003bcc1d_08590c68","line":82,"range":{"start_line":82,"start_character":0,"end_line":82,"end_character":13},"updated":"2021-08-11 09:53:33.000000000","message":"Not sure this is right","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":28048,"name":"Will Szumski","email":"will@stackhpc.com","username":"jovial"},"change_message_id":"c5ef43025a85725a04ccd7a7403e63e307006292","unresolved":true,"context_lines":[{"line_number":79,"context_line":"        environments \u003d [\"kayobe\"]"},{"line_number":80,"context_line":"        if parsed_args.environment:"},{"line_number":81,"context_line":"            environments.append(parsed_args.environment)"},{"line_number":82,"context_line":"        else:"},{"line_number":83,"context_line":"            environment_finder \u003d utils.EnvironmentFinder("},{"line_number":84,"context_line":"                parsed_args.config_path, parsed_args.environment)"},{"line_number":85,"context_line":"            for environment in environment_finder.ordered():"}],"source_content_type":"text/x-python","patch_set":2,"id":"896ff554_2bc44faa","line":82,"range":{"start_line":82,"start_character":0,"end_line":82,"end_character":13},"in_reply_to":"003bcc1d_08590c68","updated":"2023-03-09 09:44:36.000000000","message":"This does look weird. I\u0027ve removed it and it hasn\u0027t broken any of the tests...","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"7b97bdd3d43c6c1018c3344a088882646aeccd01","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        environments \u003d [\"kayobe\"]"},{"line_number":80,"context_line":"        if parsed_args.environment:"},{"line_number":81,"context_line":"            environments.append(parsed_args.environment)"},{"line_number":82,"context_line":"        else:"},{"line_number":83,"context_line":"            environment_finder \u003d utils.EnvironmentFinder("},{"line_number":84,"context_line":"                parsed_args.config_path, parsed_args.environment)"},{"line_number":85,"context_line":"            for environment in environment_finder.ordered():"}],"source_content_type":"text/x-python","patch_set":2,"id":"82b81901_b1903bae","line":82,"range":{"start_line":82,"start_character":0,"end_line":82,"end_character":13},"in_reply_to":"896ff554_2bc44faa","updated":"2023-04-19 14:15:58.000000000","message":"Done","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"7b97bdd3d43c6c1018c3344a088882646aeccd01","unresolved":true,"context_lines":[{"line_number":86,"context_line":"            if utils.is_readable_dir(candidate_path)[\"result\"]:"},{"line_number":87,"context_line":"                paths.append(candidate_path)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        # Inventory in the base layer is placed in the \"kayobe\""},{"line_number":90,"context_line":"        # directory. This means that you can\u0027t have an environment"},{"line_number":91,"context_line":"        # called kayobe as it would conflict."},{"line_number":92,"context_line":"        append_path(\"kayobe\")"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        if parsed_args.environment:"}],"source_content_type":"text/x-python","patch_set":8,"id":"e5874b89_619b36cc","side":"PARENT","line":91,"range":{"start_line":89,"start_character":0,"end_line":91,"end_character":45},"updated":"2023-04-19 14:15:58.000000000","message":"Copy this comment up to L81?","commit_id":"6de6ca59b62a9457d71f86b88c8648c157abced0"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"15e153f4ce75206f0b76f28235d591eb864f1f6f","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            if utils.is_readable_dir(candidate_path)[\"result\"]:"},{"line_number":87,"context_line":"                paths.append(candidate_path)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        # Inventory in the base layer is placed in the \"kayobe\""},{"line_number":90,"context_line":"        # directory. This means that you can\u0027t have an environment"},{"line_number":91,"context_line":"        # called kayobe as it would conflict."},{"line_number":92,"context_line":"        append_path(\"kayobe\")"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        if parsed_args.environment:"}],"source_content_type":"text/x-python","patch_set":8,"id":"f1f22fc8_eaf59818","side":"PARENT","line":91,"range":{"start_line":89,"start_character":0,"end_line":91,"end_character":45},"in_reply_to":"e5874b89_619b36cc","updated":"2023-04-19 14:16:33.000000000","message":"Done","commit_id":"6de6ca59b62a9457d71f86b88c8648c157abced0"}],"kayobe/plugins/lookup/environments.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a6ed94936dd6560046359ea4d4d98b9aa076f483","unresolved":true,"context_lines":[{"line_number":47,"context_line":"        if not kayobe_config_path:"},{"line_number":48,"context_line":"            raise AnsibleError(\"kayobe_config_path is unset\")"},{"line_number":49,"context_line":"        environment_finder \u003d EnvironmentFinder(kayobe_config_path, environment)"},{"line_number":50,"context_line":"        return environment_finder.ordered_paths()"}],"source_content_type":"text/x-python","patch_set":2,"id":"901b147d_b02c03c8","line":50,"range":{"start_line":50,"start_character":34,"end_line":50,"end_character":47},"updated":"2021-08-11 09:53:33.000000000","message":"nit: should the plugin be called environment_paths?","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"7b97bdd3d43c6c1018c3344a088882646aeccd01","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        if not kayobe_config_path:"},{"line_number":48,"context_line":"            raise AnsibleError(\"kayobe_config_path is unset\")"},{"line_number":49,"context_line":"        environment_finder \u003d EnvironmentFinder(kayobe_config_path, environment)"},{"line_number":50,"context_line":"        return environment_finder.ordered_paths()"}],"source_content_type":"text/x-python","patch_set":2,"id":"af34a04f_78fc0dae","line":50,"range":{"start_line":50,"start_character":34,"end_line":50,"end_character":47},"in_reply_to":"1024a295_c538a6da","updated":"2023-04-19 14:15:58.000000000","message":"Done","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":28048,"name":"Will Szumski","email":"will@stackhpc.com","username":"jovial"},"change_message_id":"c5ef43025a85725a04ccd7a7403e63e307006292","unresolved":true,"context_lines":[{"line_number":47,"context_line":"        if not kayobe_config_path:"},{"line_number":48,"context_line":"            raise AnsibleError(\"kayobe_config_path is unset\")"},{"line_number":49,"context_line":"        environment_finder \u003d EnvironmentFinder(kayobe_config_path, environment)"},{"line_number":50,"context_line":"        return environment_finder.ordered_paths()"}],"source_content_type":"text/x-python","patch_set":2,"id":"1024a295_c538a6da","line":50,"range":{"start_line":50,"start_character":34,"end_line":50,"end_character":47},"in_reply_to":"901b147d_b02c03c8","updated":"2023-03-09 09:44:36.000000000","message":"Renamed with your suggestion","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"}],"kayobe/tests/unit/test_ansible.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a6ed94936dd6560046359ea4d4d98b9aa076f483","unresolved":true,"context_lines":[{"line_number":97,"context_line":"                        \"KAYOBE_ENVIRONMENT\": \"test-env\"}"},{"line_number":98,"context_line":"        mock_run.assert_called_once_with(expected_cmd, check_output\u003dFalse,"},{"line_number":99,"context_line":"                                         quiet\u003dFalse, env\u003dexpected_env)"},{"line_number":100,"context_line":"        mock_vars.assert_called_once_with("},{"line_number":101,"context_line":"            [\"/path/to/config\", \"/path/to/config/environments/test-env\"])"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @mock.patch.object(utils, \"run_command\")"},{"line_number":104,"context_line":"    @mock.patch.object(ansible, \"_get_vars_files\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"33fbd279_9eb51588","side":"PARENT","line":101,"range":{"start_line":100,"start_character":0,"end_line":101,"end_character":73},"updated":"2021-08-11 09:53:33.000000000","message":"Unsure why this is going","commit_id":"6405bb3468176460f01cbf910c603eb0bb893b20"},{"author":{"_account_id":28048,"name":"Will Szumski","email":"will@stackhpc.com","username":"jovial"},"change_message_id":"c5ef43025a85725a04ccd7a7403e63e307006292","unresolved":true,"context_lines":[{"line_number":97,"context_line":"                        \"KAYOBE_ENVIRONMENT\": \"test-env\"}"},{"line_number":98,"context_line":"        mock_run.assert_called_once_with(expected_cmd, check_output\u003dFalse,"},{"line_number":99,"context_line":"                                         quiet\u003dFalse, env\u003dexpected_env)"},{"line_number":100,"context_line":"        mock_vars.assert_called_once_with("},{"line_number":101,"context_line":"            [\"/path/to/config\", \"/path/to/config/environments/test-env\"])"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @mock.patch.object(utils, \"run_command\")"},{"line_number":104,"context_line":"    @mock.patch.object(ansible, \"_get_vars_files\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"76eccc3b_ef011978","side":"PARENT","line":101,"range":{"start_line":100,"start_character":0,"end_line":101,"end_character":73},"in_reply_to":"33fbd279_9eb51588","updated":"2023-03-09 09:44:36.000000000","message":"I can\u0027t see this in the latest patch, but you are right. I\u0027d expect that to stay.","commit_id":"6405bb3468176460f01cbf910c603eb0bb893b20"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"7b97bdd3d43c6c1018c3344a088882646aeccd01","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                        \"KAYOBE_ENVIRONMENT\": \"test-env\"}"},{"line_number":98,"context_line":"        mock_run.assert_called_once_with(expected_cmd, check_output\u003dFalse,"},{"line_number":99,"context_line":"                                         quiet\u003dFalse, env\u003dexpected_env)"},{"line_number":100,"context_line":"        mock_vars.assert_called_once_with("},{"line_number":101,"context_line":"            [\"/path/to/config\", \"/path/to/config/environments/test-env\"])"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @mock.patch.object(utils, \"run_command\")"},{"line_number":104,"context_line":"    @mock.patch.object(ansible, \"_get_vars_files\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"385e79b7_f1d31b5f","side":"PARENT","line":101,"range":{"start_line":100,"start_character":0,"end_line":101,"end_character":73},"in_reply_to":"76eccc3b_ef011978","updated":"2023-04-19 14:15:58.000000000","message":"Done","commit_id":"6405bb3468176460f01cbf910c603eb0bb893b20"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a6ed94936dd6560046359ea4d4d98b9aa076f483","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"7edfb2ea_fd3646c4","line":725,"updated":"2021-08-11 09:53:33.000000000","message":"I don\u0027t see any tests covering extra vars files for multiple environments.","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"7b97bdd3d43c6c1018c3344a088882646aeccd01","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"352bfaa5_d4b2d758","line":725,"in_reply_to":"7edfb2ea_fd3646c4","updated":"2023-04-19 14:15:58.000000000","message":"Done","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"}],"kayobe/tests/unit/test_utils.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a6ed94936dd6560046359ea4d4d98b9aa076f483","unresolved":true,"context_lines":[{"line_number":186,"context_line":"        finder \u003d utils.EnvironmentFinder(\u0027/etc/kayobe\u0027, \u0027environment-C\u0027)"},{"line_number":187,"context_line":"        result \u003d finder.ordered()"},{"line_number":188,"context_line":"        expected \u003d [\"environment-A\", \"environment-B\", \"environment-C\"]"},{"line_number":189,"context_line":"        self.assertEqual(expected, result)"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    @mock.patch.object(utils.EnvironmentFinder, \"_read_metadata\")"},{"line_number":192,"context_line":"    def test_environment_finder_with_cycle(self, mock_yaml):"}],"source_content_type":"text/x-python","patch_set":2,"id":"0273ee46_862e1de6","line":189,"updated":"2021-08-11 09:53:33.000000000","message":"maybe also test ordered_paths?","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"7b97bdd3d43c6c1018c3344a088882646aeccd01","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        finder \u003d utils.EnvironmentFinder(\u0027/etc/kayobe\u0027, \u0027environment-C\u0027)"},{"line_number":187,"context_line":"        result \u003d finder.ordered()"},{"line_number":188,"context_line":"        expected \u003d [\"environment-A\", \"environment-B\", \"environment-C\"]"},{"line_number":189,"context_line":"        self.assertEqual(expected, result)"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    @mock.patch.object(utils.EnvironmentFinder, \"_read_metadata\")"},{"line_number":192,"context_line":"    def test_environment_finder_with_cycle(self, mock_yaml):"}],"source_content_type":"text/x-python","patch_set":2,"id":"21abf691_8a07e113","line":189,"in_reply_to":"0273ee46_862e1de6","updated":"2023-04-19 14:15:58.000000000","message":"Done","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a6ed94936dd6560046359ea4d4d98b9aa076f483","unresolved":true,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def test_environment_finder_no_environment(self):"},{"line_number":207,"context_line":"        finder \u003d utils.EnvironmentFinder(\u0027/etc/kayobe\u0027, None)"},{"line_number":208,"context_line":"        self.assertEqual([], finder.ordered())"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af8d41a_db3f800e","line":208,"updated":"2021-08-11 09:53:33.000000000","message":"ditto","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"7b97bdd3d43c6c1018c3344a088882646aeccd01","unresolved":false,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def test_environment_finder_no_environment(self):"},{"line_number":207,"context_line":"        finder \u003d utils.EnvironmentFinder(\u0027/etc/kayobe\u0027, None)"},{"line_number":208,"context_line":"        self.assertEqual([], finder.ordered())"}],"source_content_type":"text/x-python","patch_set":2,"id":"6eeca4af_cf243e71","line":208,"in_reply_to":"1af8d41a_db3f800e","updated":"2023-04-19 14:15:58.000000000","message":"Done","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"}],"kayobe/utils.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a6ed94936dd6560046359ea4d4d98b9aa076f483","unresolved":true,"context_lines":[{"line_number":268,"context_line":"    The constraints are specified via a .kayobe-environment file."},{"line_number":269,"context_line":"    \"\"\""},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def __new__(cls, base_path, environment):"},{"line_number":272,"context_line":"        # Singleton instance so we don\u0027t have to resolve dependencies multiple"},{"line_number":273,"context_line":"        # times or pass round a single instance."},{"line_number":274,"context_line":"        it \u003d cls.__dict__.get(\"__it__\")"},{"line_number":275,"context_line":"        if it is None:"},{"line_number":276,"context_line":"            it \u003d {}"},{"line_number":277,"context_line":"        if (base_path, environment) in it:"},{"line_number":278,"context_line":"            return it[(base_path, environment)]"},{"line_number":279,"context_line":"        singleton \u003d object.__new__(cls)"},{"line_number":280,"context_line":"        singleton._init(base_path, environment)"},{"line_number":281,"context_line":"        it[(base_path, environment)] \u003d singleton"},{"line_number":282,"context_line":"        return singleton"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def _init(self, base_path, environment):"},{"line_number":285,"context_line":"        self._base_path \u003d base_path"}],"source_content_type":"text/x-python","patch_set":2,"id":"1454d743_d9892aa7","line":282,"range":{"start_line":271,"start_character":0,"end_line":282,"end_character":24},"updated":"2021-08-11 09:53:33.000000000","message":"a global variable would probably have done it 😊","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":28048,"name":"Will Szumski","email":"will@stackhpc.com","username":"jovial"},"change_message_id":"c5ef43025a85725a04ccd7a7403e63e307006292","unresolved":true,"context_lines":[{"line_number":268,"context_line":"    The constraints are specified via a .kayobe-environment file."},{"line_number":269,"context_line":"    \"\"\""},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def __new__(cls, base_path, environment):"},{"line_number":272,"context_line":"        # Singleton instance so we don\u0027t have to resolve dependencies multiple"},{"line_number":273,"context_line":"        # times or pass round a single instance."},{"line_number":274,"context_line":"        it \u003d cls.__dict__.get(\"__it__\")"},{"line_number":275,"context_line":"        if it is None:"},{"line_number":276,"context_line":"            it \u003d {}"},{"line_number":277,"context_line":"        if (base_path, environment) in it:"},{"line_number":278,"context_line":"            return it[(base_path, environment)]"},{"line_number":279,"context_line":"        singleton \u003d object.__new__(cls)"},{"line_number":280,"context_line":"        singleton._init(base_path, environment)"},{"line_number":281,"context_line":"        it[(base_path, environment)] \u003d singleton"},{"line_number":282,"context_line":"        return singleton"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def _init(self, base_path, environment):"},{"line_number":285,"context_line":"        self._base_path \u003d base_path"}],"source_content_type":"text/x-python","patch_set":2,"id":"b6db1083_d117fa10","line":282,"range":{"start_line":271,"start_character":0,"end_line":282,"end_character":24},"in_reply_to":"1454d743_d9892aa7","updated":"2023-03-09 09:44:36.000000000","message":"Good call. Problem with a global variable is that you need to know the environment and you only know that when you parse the args. I\u0027ve removed the singleton logic as it was unnecessary complexity.","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":28048,"name":"Will Szumski","email":"will@stackhpc.com","username":"jovial"},"change_message_id":"0d5e50f453615934896d8df768332144d5e1b9eb","unresolved":true,"context_lines":[{"line_number":268,"context_line":"    The constraints are specified via a .kayobe-environment file."},{"line_number":269,"context_line":"    \"\"\""},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def __new__(cls, base_path, environment):"},{"line_number":272,"context_line":"        # Singleton instance so we don\u0027t have to resolve dependencies multiple"},{"line_number":273,"context_line":"        # times or pass round a single instance."},{"line_number":274,"context_line":"        it \u003d cls.__dict__.get(\"__it__\")"},{"line_number":275,"context_line":"        if it is None:"},{"line_number":276,"context_line":"            it \u003d {}"},{"line_number":277,"context_line":"        if (base_path, environment) in it:"},{"line_number":278,"context_line":"            return it[(base_path, environment)]"},{"line_number":279,"context_line":"        singleton \u003d object.__new__(cls)"},{"line_number":280,"context_line":"        singleton._init(base_path, environment)"},{"line_number":281,"context_line":"        it[(base_path, environment)] \u003d singleton"},{"line_number":282,"context_line":"        return singleton"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def _init(self, base_path, environment):"},{"line_number":285,"context_line":"        self._base_path \u003d base_path"}],"source_content_type":"text/x-python","patch_set":2,"id":"1e9b99d1_ffb7c79a","line":282,"range":{"start_line":271,"start_character":0,"end_line":282,"end_character":24},"in_reply_to":"9422667a_2e2d5a1c","updated":"2023-09-01 16:12:36.000000000","message":"Possibly. But I am afraid it may have been lost in the ether. I vote we go with this patch which is passing CI and we can always simplify later.","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"7b97bdd3d43c6c1018c3344a088882646aeccd01","unresolved":true,"context_lines":[{"line_number":268,"context_line":"    The constraints are specified via a .kayobe-environment file."},{"line_number":269,"context_line":"    \"\"\""},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def __new__(cls, base_path, environment):"},{"line_number":272,"context_line":"        # Singleton instance so we don\u0027t have to resolve dependencies multiple"},{"line_number":273,"context_line":"        # times or pass round a single instance."},{"line_number":274,"context_line":"        it \u003d cls.__dict__.get(\"__it__\")"},{"line_number":275,"context_line":"        if it is None:"},{"line_number":276,"context_line":"            it \u003d {}"},{"line_number":277,"context_line":"        if (base_path, environment) in it:"},{"line_number":278,"context_line":"            return it[(base_path, environment)]"},{"line_number":279,"context_line":"        singleton \u003d object.__new__(cls)"},{"line_number":280,"context_line":"        singleton._init(base_path, environment)"},{"line_number":281,"context_line":"        it[(base_path, environment)] \u003d singleton"},{"line_number":282,"context_line":"        return singleton"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def _init(self, base_path, environment):"},{"line_number":285,"context_line":"        self._base_path \u003d base_path"}],"source_content_type":"text/x-python","patch_set":2,"id":"9422667a_2e2d5a1c","line":282,"range":{"start_line":271,"start_character":0,"end_line":282,"end_character":24},"in_reply_to":"b6db1083_d117fa10","updated":"2023-04-19 14:15:58.000000000","message":"Do you have some local changes? This file hasn\u0027t changed despite your comments","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a6ed94936dd6560046359ea4d4d98b9aa076f483","unresolved":true,"context_lines":[{"line_number":286,"context_line":"        self._environment \u003d environment"},{"line_number":287,"context_line":"        self._ordering \u003d None"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def _update_dict(self, A, result):"},{"line_number":290,"context_line":"        for k in A:"},{"line_number":291,"context_line":"            result[k] \u003d A[k].union(result[k])"},{"line_number":292,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"8d04c0d7_2705179c","line":289,"range":{"start_line":289,"start_character":27,"end_line":289,"end_character":28},"updated":"2021-08-11 09:53:33.000000000","message":"nit: upper case variable name","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"7b97bdd3d43c6c1018c3344a088882646aeccd01","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        self._environment \u003d environment"},{"line_number":287,"context_line":"        self._ordering \u003d None"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def _update_dict(self, A, result):"},{"line_number":290,"context_line":"        for k in A:"},{"line_number":291,"context_line":"            result[k] \u003d A[k].union(result[k])"},{"line_number":292,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7f1a4189_7f1dbaee","line":289,"range":{"start_line":289,"start_character":27,"end_line":289,"end_character":28},"in_reply_to":"080e0825_83a03563","updated":"2023-04-19 14:15:58.000000000","message":"Done","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":28048,"name":"Will Szumski","email":"will@stackhpc.com","username":"jovial"},"change_message_id":"c5ef43025a85725a04ccd7a7403e63e307006292","unresolved":true,"context_lines":[{"line_number":286,"context_line":"        self._environment \u003d environment"},{"line_number":287,"context_line":"        self._ordering \u003d None"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def _update_dict(self, A, result):"},{"line_number":290,"context_line":"        for k in A:"},{"line_number":291,"context_line":"            result[k] \u003d A[k].union(result[k])"},{"line_number":292,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"080e0825_83a03563","line":289,"range":{"start_line":289,"start_character":27,"end_line":289,"end_character":28},"in_reply_to":"8d04c0d7_2705179c","updated":"2023-03-09 09:44:36.000000000","message":"Went with your suggestion below.","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a6ed94936dd6560046359ea4d4d98b9aa076f483","unresolved":true,"context_lines":[{"line_number":307,"context_line":"        visited.add(dot_environment_path)"},{"line_number":308,"context_line":"        metadata \u003d EnvironmentFinder._read_metadata(dot_environment_path)"},{"line_number":309,"context_line":"        dependencies \u003d metadata.get(\"dependencies\", [])"},{"line_number":310,"context_line":"        self._update_dict({environment: set(dependencies)}, result)"},{"line_number":311,"context_line":"        for dependency in dependencies:"},{"line_number":312,"context_line":"            self._collect(dependency, result, visited)"},{"line_number":313,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7463c305_20c3a279","line":310,"range":{"start_line":310,"start_character":8,"end_line":310,"end_character":67},"updated":"2021-08-11 09:53:33.000000000","message":"is this just\n\n result[environment] |\u003d set(dependencies)","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":28048,"name":"Will Szumski","email":"will@stackhpc.com","username":"jovial"},"change_message_id":"c5ef43025a85725a04ccd7a7403e63e307006292","unresolved":true,"context_lines":[{"line_number":307,"context_line":"        visited.add(dot_environment_path)"},{"line_number":308,"context_line":"        metadata \u003d EnvironmentFinder._read_metadata(dot_environment_path)"},{"line_number":309,"context_line":"        dependencies \u003d metadata.get(\"dependencies\", [])"},{"line_number":310,"context_line":"        self._update_dict({environment: set(dependencies)}, result)"},{"line_number":311,"context_line":"        for dependency in dependencies:"},{"line_number":312,"context_line":"            self._collect(dependency, result, visited)"},{"line_number":313,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"d5167401_f1855854","line":310,"range":{"start_line":310,"start_character":8,"end_line":310,"end_character":67},"in_reply_to":"7463c305_20c3a279","updated":"2023-03-09 09:44:36.000000000","message":"Seems to pass the tests, so I went with it.","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"7b97bdd3d43c6c1018c3344a088882646aeccd01","unresolved":false,"context_lines":[{"line_number":307,"context_line":"        visited.add(dot_environment_path)"},{"line_number":308,"context_line":"        metadata \u003d EnvironmentFinder._read_metadata(dot_environment_path)"},{"line_number":309,"context_line":"        dependencies \u003d metadata.get(\"dependencies\", [])"},{"line_number":310,"context_line":"        self._update_dict({environment: set(dependencies)}, result)"},{"line_number":311,"context_line":"        for dependency in dependencies:"},{"line_number":312,"context_line":"            self._collect(dependency, result, visited)"},{"line_number":313,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fcc286fa_91091c3e","line":310,"range":{"start_line":310,"start_character":8,"end_line":310,"end_character":67},"in_reply_to":"d5167401_f1855854","updated":"2023-04-19 14:15:58.000000000","message":"Done","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a6ed94936dd6560046359ea4d4d98b9aa076f483","unresolved":true,"context_lines":[{"line_number":317,"context_line":"        if not environment:"},{"line_number":318,"context_line":"            return []"},{"line_number":319,"context_line":"        if self._ordering is not None:"},{"line_number":320,"context_line":"            return self._ordering"},{"line_number":321,"context_line":"        graph \u003d defaultdict(set)"},{"line_number":322,"context_line":"        self._collect(environment, graph, set())"},{"line_number":323,"context_line":"        ts \u003d graphlib.TopologicalSorter(graph)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aab1357_eea094d8","line":320,"range":{"start_line":320,"start_character":24,"end_line":320,"end_character":33},"updated":"2021-08-11 09:53:33.000000000","message":"hopefully no caller is modifying this","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"7b97bdd3d43c6c1018c3344a088882646aeccd01","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        if not environment:"},{"line_number":318,"context_line":"            return []"},{"line_number":319,"context_line":"        if self._ordering is not None:"},{"line_number":320,"context_line":"            return self._ordering"},{"line_number":321,"context_line":"        graph \u003d defaultdict(set)"},{"line_number":322,"context_line":"        self._collect(environment, graph, set())"},{"line_number":323,"context_line":"        ts \u003d graphlib.TopologicalSorter(graph)"}],"source_content_type":"text/x-python","patch_set":2,"id":"815c1815_f705990a","line":320,"range":{"start_line":320,"start_character":24,"end_line":320,"end_character":33},"in_reply_to":"1aab1357_eea094d8","updated":"2023-04-19 14:15:58.000000000","message":"Done","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a6ed94936dd6560046359ea4d4d98b9aa076f483","unresolved":true,"context_lines":[{"line_number":344,"context_line":"            )"},{"line_number":345,"context_line":"            result.append(full_path)"},{"line_number":346,"context_line":"        return result"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    def ordered_inventories(self):"},{"line_number":349,"context_line":"        \"\"\"Environment inventories ordered by the constraints\"\"\""},{"line_number":350,"context_line":"        result \u003d []"},{"line_number":351,"context_line":"        for path in self.ordered_paths():"},{"line_number":352,"context_line":"            result.append(os.path.join(path, \"inventory\"))"},{"line_number":353,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":2,"id":"40b9137b_1845eab2","line":353,"range":{"start_line":347,"start_character":0,"end_line":353,"end_character":21},"updated":"2021-08-11 09:53:33.000000000","message":"I don\u0027t think it\u0027s used?","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":28048,"name":"Will Szumski","email":"will@stackhpc.com","username":"jovial"},"change_message_id":"c5ef43025a85725a04ccd7a7403e63e307006292","unresolved":true,"context_lines":[{"line_number":344,"context_line":"            )"},{"line_number":345,"context_line":"            result.append(full_path)"},{"line_number":346,"context_line":"        return result"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    def ordered_inventories(self):"},{"line_number":349,"context_line":"        \"\"\"Environment inventories ordered by the constraints\"\"\""},{"line_number":350,"context_line":"        result \u003d []"},{"line_number":351,"context_line":"        for path in self.ordered_paths():"},{"line_number":352,"context_line":"            result.append(os.path.join(path, \"inventory\"))"},{"line_number":353,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":2,"id":"f82beffe_9be3d4d6","line":353,"range":{"start_line":347,"start_character":0,"end_line":353,"end_character":21},"in_reply_to":"40b9137b_1845eab2","updated":"2023-03-09 09:44:36.000000000","message":"good spot","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"7b97bdd3d43c6c1018c3344a088882646aeccd01","unresolved":false,"context_lines":[{"line_number":344,"context_line":"            )"},{"line_number":345,"context_line":"            result.append(full_path)"},{"line_number":346,"context_line":"        return result"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    def ordered_inventories(self):"},{"line_number":349,"context_line":"        \"\"\"Environment inventories ordered by the constraints\"\"\""},{"line_number":350,"context_line":"        result \u003d []"},{"line_number":351,"context_line":"        for path in self.ordered_paths():"},{"line_number":352,"context_line":"            result.append(os.path.join(path, \"inventory\"))"},{"line_number":353,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":2,"id":"1d4c9d61_d537c980","line":353,"range":{"start_line":347,"start_character":0,"end_line":353,"end_character":21},"in_reply_to":"f82beffe_9be3d4d6","updated":"2023-04-19 14:15:58.000000000","message":"Done","commit_id":"639c3d1d52c56fa719186ac59c820806efb9264b"}],"requirements.txt":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"7b97bdd3d43c6c1018c3344a088882646aeccd01","unresolved":true,"context_lines":[{"line_number":13,"context_line":"hvac\u003e\u003d0.10.1"},{"line_number":14,"context_line":"ansible-cached-lookup\u003c\u003d2.0.0 # MIT"},{"line_number":15,"context_line":"# NOTE(wszusmki): Remove this when min python\u003e\u003d3.9"},{"line_number":16,"context_line":"graphlib-backport\u003c2.0.0 # PSF"}],"source_content_type":"text/plain","patch_set":8,"id":"99d60225_f044c9cc","line":16,"updated":"2023-04-19 14:15:58.000000000","message":"Could add a python version qualifier here.","commit_id":"a3d323f5d12c01529d541b2982c55f4f05d5d23b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"15e153f4ce75206f0b76f28235d591eb864f1f6f","unresolved":false,"context_lines":[{"line_number":13,"context_line":"hvac\u003e\u003d0.10.1"},{"line_number":14,"context_line":"ansible-cached-lookup\u003c\u003d2.0.0 # MIT"},{"line_number":15,"context_line":"# NOTE(wszusmki): Remove this when min python\u003e\u003d3.9"},{"line_number":16,"context_line":"graphlib-backport\u003c2.0.0 # PSF"}],"source_content_type":"text/plain","patch_set":8,"id":"8ee3629b_9dc700d6","line":16,"in_reply_to":"99d60225_f044c9cc","updated":"2023-04-19 14:16:33.000000000","message":"Done","commit_id":"a3d323f5d12c01529d541b2982c55f4f05d5d23b"}]}
