)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"5d6fe6f6c438b07f256e3f803ce09c97618437dc","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make plugins location configurable"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The patch introduces CLI option --plugin-dir to specify the location"},{"line_number":10,"context_line":"of plugins"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Iee39217bfe3e5c77e6925910f3998942541387a3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7ad32947_0a266bba","line":9,"updated":"2015-04-27 14:45:35.000000000","message":"This patch doesn\u0027t add any CLI option. It adds ability to specify location via config file","commit_id":"6c13c360328091b1ee2c24854a32fa263ea1ef1e"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"change_message_id":"85a2e37047ef39603c3b2cc8bacc761a4df11031","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make plugins location configurable"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The patch introduces CLI option --plugin-dir to specify the location"},{"line_number":10,"context_line":"of plugins"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Iee39217bfe3e5c77e6925910f3998942541387a3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7ad32947_250038aa","line":9,"in_reply_to":"7ad32947_0a266bba","updated":"2015-04-27 15:09:27.000000000","message":"Why it does not? The patch registers CLI option and it appears in the output of --help command","commit_id":"6c13c360328091b1ee2c24854a32fa263ea1ef1e"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"2fa96505743106094bae7c299bef50832384fb5a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make plugins location configurable"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The patch introduces CLI option --plugin-dir to specify the location"},{"line_number":10,"context_line":"of plugins"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Iee39217bfe3e5c77e6925910f3998942541387a3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7ad32947_05badce1","line":9,"in_reply_to":"7ad32947_250038aa","updated":"2015-04-27 15:10:51.000000000","message":"my fault, sorry.","commit_id":"6c13c360328091b1ee2c24854a32fa263ea1ef1e"}],"rally/cli/cliutils.py":[{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"7b30ca3f63ecf5931956c5a07cf08bd20c4e04a9","unresolved":false,"context_lines":[{"line_number":435,"context_line":"    CONF.register_cli_opt(category_opt)"},{"line_number":436,"context_line":"    help_msg \u003d (\"Custom plugins location. You could specify multiple plugin \""},{"line_number":437,"context_line":"                \"files and multiple directories. And all plugins in this \""},{"line_number":438,"context_line":"                \"directory and subdirectory would be imported.\")"},{"line_number":439,"context_line":"    CONF.register_cli_opt(cfg.ListOpt(\"plugin-paths\","},{"line_number":440,"context_line":"                                      default\u003dos.environ.get("},{"line_number":441,"context_line":"                                          \"RALLY_PLUGIN_PATHS\"),"}],"source_content_type":"text/x-python","patch_set":10,"id":"5afe65bd_69156f47","line":438,"updated":"2015-06-04 15:09:52.000000000","message":"Please note here that plugins in /opt/rally/plugins and ~/.rally/plugins are *always* loaded, no matter what you set this to. I\u0027d suggest something like:\n\n    help_msg \u003d \"Additional custom plugin locations. Multiple files or directories may be specified. All plugins in the specified directories and subdirectories will be imported. Plugins in /opt/rally/plugins and ~/.rally/plugins will always be imported.\"","commit_id":"ae88ebbab4e4c50f01ef36eb3de4178bea025b30"}],"rally/cmd/cliutils.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"0e1ddf2404beca7bff5101d5ca432b53e313d657","unresolved":false,"context_lines":[{"line_number":382,"context_line":"                                     handler\u003dparser)"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    CONF.register_cli_opt(category_opt)"},{"line_number":385,"context_line":"    CONF.register_cli_opt(cfg.ListOpt(\"plugin-path\","},{"line_number":386,"context_line":"                                      help\u003d\"Custom plugins location\"))"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3acd31a7_dc7fe564","line":385,"updated":"2015-04-30 21:48:45.000000000","message":"Maybe plugin-paths ? because it\u0027s list of paths not single path\n\nCan we as well add evn variable as well (something like RALLY_PLUGIN_PATHS)","commit_id":"c78d979f28bb83ab63cecf4241fc88e17a2bee3f"}],"rally/common/utils.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"184317825c2333e684e908a1ac900d15c8a1f3fd","unresolved":false,"context_lines":[{"line_number":300,"context_line":"                    LOG.exception(e)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"def load_plugins_from_file(files):"},{"line_number":304,"context_line":"    \"\"\"Import plugins specified by path"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    :param files: list of plugin files"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a016987_8110545a","line":303,"updated":"2015-05-30 13:04:32.000000000","message":"Remove this method and improve load_plugins","commit_id":"abe6b88e3f439a09d0367a0a072cfcd9fbacd778"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"fb570990fd8e888d58f2ceb6600cb08121c34b6b","unresolved":false,"context_lines":[{"line_number":305,"context_line":"        if plugin_file not in sys.path:"},{"line_number":306,"context_line":"            sys.path.append(plugin_file)"},{"line_number":307,"context_line":"        try:"},{"line_number":308,"context_line":"            imp.load_source(plugin_file.split(\"/\")[-1], plugin_file)"},{"line_number":309,"context_line":"            LOG.info(\"\\t Loaded module with plugins: %s.py\" % plugin_file)"},{"line_number":310,"context_line":"        except Exception as e:"},{"line_number":311,"context_line":"            LOG.warning("}],"source_content_type":"text/x-python","patch_set":9,"id":"5afe65bd_e64bf885","line":308,"updated":"2015-06-03 16:45:24.000000000","message":"what if plugin path is\n\n   my_file.py","commit_id":"88a2b5e9df26215adfb13727263e293f6d758aa9"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"f876eddc4c16b96721af27daea3c506858abfdcf","unresolved":false,"context_lines":[{"line_number":305,"context_line":"        if plugin_file not in sys.path:"},{"line_number":306,"context_line":"            sys.path.append(plugin_file)"},{"line_number":307,"context_line":"        try:"},{"line_number":308,"context_line":"            imp.load_source(plugin_file.split(\"/\")[-1], plugin_file)"},{"line_number":309,"context_line":"            LOG.info(\"\\t Loaded module with plugins: %s.py\" % plugin_file)"},{"line_number":310,"context_line":"        except Exception as e:"},{"line_number":311,"context_line":"            LOG.warning("}],"source_content_type":"text/x-python","patch_set":9,"id":"5afe65bd_1e4e3c3b","line":308,"in_reply_to":"5afe65bd_e64bf885","updated":"2015-06-04 11:03:44.000000000","message":"Done","commit_id":"88a2b5e9df26215adfb13727263e293f6d758aa9"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"7b30ca3f63ecf5931956c5a07cf08bd20c4e04a9","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                    % {\"path\": fullpath, \"e\": e})"},{"line_number":300,"context_line":"                if logging.is_debug():"},{"line_number":301,"context_line":"                    LOG.exception(e)"},{"line_number":302,"context_line":"    if os.path.isfile(dir_or_file):"},{"line_number":303,"context_line":"        plugin_file \u003d dir_or_file"},{"line_number":304,"context_line":"        LOG.info(\"Loading plugins from file %s\" % plugin_file)"},{"line_number":305,"context_line":"        if plugin_file not in sys.path:"}],"source_content_type":"text/x-python","patch_set":10,"id":"5afe65bd_ac06d51a","line":302,"updated":"2015-06-04 15:09:52.000000000","message":"Please make this an elif","commit_id":"ae88ebbab4e4c50f01ef36eb3de4178bea025b30"}],"tests/unit/common/test_utils.py":[{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"7b30ca3f63ecf5931956c5a07cf08bd20c4e04a9","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                                                 \"withoutextension\")),"},{"line_number":213,"context_line":"        (\"/somewhere/subdir/subsubdir\", [], (\"plugin3.py\", ))])"},{"line_number":214,"context_line":"    @mock.patch(\"rally.common.utils.os.path.exists\", return_value\u003dTrue)"},{"line_number":215,"context_line":"    def test_load_plugins_successfull(self, mock_exists,"},{"line_number":216,"context_line":"                                      mock_oswalk, mock_find_module,"},{"line_number":217,"context_line":"                                      mock_load_module, mock_isdir):"},{"line_number":218,"context_line":"        test_path \u003d \"/somewhere\""}],"source_content_type":"text/x-python","patch_set":10,"id":"5afe65bd_cc3911a6","line":215,"updated":"2015-06-04 15:09:52.000000000","message":"All three of the test cases here only test loading plugin directories. Please add three complementary test cases to test loading plugin files. (While you\u0027re at it, fix the \"successfull\" typo.)","commit_id":"ae88ebbab4e4c50f01ef36eb3de4178bea025b30"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"ebe19cd674ac8a3bd5561f7106baccc053a62b46","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                                                 \"withoutextension\")),"},{"line_number":213,"context_line":"        (\"/somewhere/subdir/subsubdir\", [], (\"plugin3.py\", ))])"},{"line_number":214,"context_line":"    @mock.patch(\"rally.common.utils.os.path.exists\", return_value\u003dTrue)"},{"line_number":215,"context_line":"    def test_load_plugins_successfull(self, mock_exists,"},{"line_number":216,"context_line":"                                      mock_oswalk, mock_find_module,"},{"line_number":217,"context_line":"                                      mock_load_module, mock_isdir):"},{"line_number":218,"context_line":"        test_path \u003d \"/somewhere\""}],"source_content_type":"text/x-python","patch_set":10,"id":"5afe65bd_1d4bd52b","line":215,"in_reply_to":"5afe65bd_cc3911a6","updated":"2015-06-04 16:10:42.000000000","message":"We have functional tests for this. Ok","commit_id":"ae88ebbab4e4c50f01ef36eb3de4178bea025b30"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"afc179569234f4bcaf19ffcddc445aa03305f467","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    @mock.patch(\"rally.common.utils.os.path.isfile\", return_value\u003dTrue)"},{"line_number":229,"context_line":"    @mock.patch(\"rally.common.utils.imp.load_source\")"},{"line_number":230,"context_line":"    def test_load_plugins_from_file_successfull(self, mock_load_source,"},{"line_number":231,"context_line":"                                                mock_isfile):"},{"line_number":232,"context_line":"        utils.load_plugins(\"/somewhere/plugin.py\")"},{"line_number":233,"context_line":"        expected \u003d [mock.call(\"plugin\", \"/somewhere/plugin.py\")]"}],"source_content_type":"text/x-python","patch_set":12,"id":"5afe65bd_2548b3cb","line":230,"updated":"2015-06-04 18:09:38.000000000","message":"s/successfull/successful/\n\nNow would be a fine time to fix the typo in test_load_plugins[_from_dir]successfull(), too.\n\nAppropriate negative test cases (from nonexistant file, and loading fails) are still needed.","commit_id":"2f0f9424ec3ddfc84beb996cb9049b678fa30fb0"}]}
