)]}'
{"trove/guestagent/common/operating_system.py":[{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"f911f76ecdbb5cdf0cf00c6017f581f9d5bbe065","unresolved":false,"context_lines":[{"line_number":182,"context_line":"    elif not destination:"},{"line_number":183,"context_line":"        raise exception.UnprocessableEntity(_(\"Missing destination path.\"))"},{"line_number":184,"context_line":"    else:"},{"line_number":185,"context_line":"        options \u003d collections.OrderedDict([(\u0027f\u0027, force),"},{"line_number":186,"context_line":"                                           (\u0027p\u0027, preserve),"},{"line_number":187,"context_line":"                                           (\u0027R\u0027, recursive)])"},{"line_number":188,"context_line":"        _execute_shell_cmd(\u0027cp\u0027, options, source, destination, **kwargs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_789f93b4","line":185,"updated":"2015-04-01 05:23:42.000000000","message":"Why is order significant for this parameter?","commit_id":"55fd8499b8c330d92415d66bb303e9e19eb4da11"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"90c787e7731363b6911b9065c5c5b365070b51c6","unresolved":false,"context_lines":[{"line_number":182,"context_line":"    elif not destination:"},{"line_number":183,"context_line":"        raise exception.UnprocessableEntity(_(\"Missing destination path.\"))"},{"line_number":184,"context_line":"    else:"},{"line_number":185,"context_line":"        options \u003d collections.OrderedDict([(\u0027f\u0027, force),"},{"line_number":186,"context_line":"                                           (\u0027p\u0027, preserve),"},{"line_number":187,"context_line":"                                           (\u0027R\u0027, recursive)])"},{"line_number":188,"context_line":"        _execute_shell_cmd(\u0027cp\u0027, options, source, destination, **kwargs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"baa041b7_544bec59","line":185,"in_reply_to":"da9b358b_789f93b4","updated":"2015-04-01 14:59:12.000000000","message":"That\u0027s for tests... Plain dicts do not guarantee the iteration order. The command options may then appear in an order other than \u0027expected\u0027.\nI have seen it in testing - order of options on my machine was different from the order on the gate.","commit_id":"55fd8499b8c330d92415d66bb303e9e19eb4da11"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"f911f76ecdbb5cdf0cf00c6017f581f9d5bbe065","unresolved":false,"context_lines":[{"line_number":202,"context_line":"    :type timeout:           integer"},{"line_number":203,"context_line":"    \"\"\""},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    exec_args \u003d {}"},{"line_number":206,"context_line":"    if kwargs.pop(\u0027run_as_root\u0027, True):"},{"line_number":207,"context_line":"        exec_args[\u0027run_as_root\u0027] \u003d True"},{"line_number":208,"context_line":"        exec_args[\u0027root_helper\u0027] \u003d \u0027sudo\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_f8aba3d4","line":205,"updated":"2015-04-01 05:23:42.000000000","message":"Without looking at the wrapped function, do you need to add \u0027run_as_root \u003d False\u0027 as the default value?","commit_id":"55fd8499b8c330d92415d66bb303e9e19eb4da11"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"90c787e7731363b6911b9065c5c5b365070b51c6","unresolved":false,"context_lines":[{"line_number":202,"context_line":"    :type timeout:           integer"},{"line_number":203,"context_line":"    \"\"\""},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    exec_args \u003d {}"},{"line_number":206,"context_line":"    if kwargs.pop(\u0027run_as_root\u0027, True):"},{"line_number":207,"context_line":"        exec_args[\u0027run_as_root\u0027] \u003d True"},{"line_number":208,"context_line":"        exec_args[\u0027root_helper\u0027] \u003d \u0027sudo\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"baa041b7_142c4449","line":205,"in_reply_to":"da9b358b_f8aba3d4","updated":"2015-04-01 14:59:12.000000000","message":"The shell command executes (utils.execute_with_timeout) as the current user if \u0027run_as_root\u0027 is not given.\nWe make \u0027run_as_root \u003d True\u0027 default here as by far the most of the calls in the guestagent require superuser access.\nThe caller may still choose to execute under the current user by giving: \u0027run_as_root \u003d False\u0027","commit_id":"55fd8499b8c330d92415d66bb303e9e19eb4da11"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"7610bc2c6ea87b91c33a649ef5c76765c5bc949b","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    timestamps."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    seealso:: _execute_shell_cmd for valid optional keyword arguments."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    :param source:          Path to the source location."},{"line_number":115,"context_line":"    :type source:           string"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baa041b7_97edc88d","line":113,"updated":"2015-04-02 16:36:24.000000000","message":"there should be a space between the two words: \"see also:\"","commit_id":"3f35f5cbbfec0361d34f4bfd198478d7cff07f64"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"1b03d32fea810f8dd88a5021f14057a4d3f0332c","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    timestamps."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    seealso:: _execute_shell_cmd for valid optional keyword arguments."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    :param source:          Path to the source location."},{"line_number":115,"context_line":"    :type source:           string"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baa041b7_df747efe","line":113,"in_reply_to":"baa041b7_97edc88d","updated":"2015-04-02 20:33:06.000000000","message":"This is supposed to be a doc tag - I think it should be \u0027:seealso: ...\u0027 instead though.","commit_id":"3f35f5cbbfec0361d34f4bfd198478d7cff07f64"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"7610bc2c6ea87b91c33a649ef5c76765c5bc949b","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    :type source:           string"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    :param destination:     Path to the source location."},{"line_number":118,"context_line":"    :type destination:      string"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    :param force:           Do not prompt before overwriting."},{"line_number":121,"context_line":"    :type force:            boolean"}],"source_content_type":"text/x-python","patch_set":7,"id":"baa041b7_3794bce0","line":118,"updated":"2015-04-02 16:36:24.000000000","message":"the definition of destination should be: \u0027path to the destination location\u0027 I believe.","commit_id":"3f35f5cbbfec0361d34f4bfd198478d7cff07f64"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"1b03d32fea810f8dd88a5021f14057a4d3f0332c","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    :type source:           string"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    :param destination:     Path to the source location."},{"line_number":118,"context_line":"    :type destination:      string"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    :param force:           Do not prompt before overwriting."},{"line_number":121,"context_line":"    :type force:            boolean"}],"source_content_type":"text/x-python","patch_set":7,"id":"baa041b7_9ff39673","line":118,"in_reply_to":"baa041b7_3794bce0","updated":"2015-04-02 20:33:06.000000000","message":"done","commit_id":"3f35f5cbbfec0361d34f4bfd198478d7cff07f64"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"7610bc2c6ea87b91c33a649ef5c76765c5bc949b","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"def copy(source, destination, force\u003dFalse, preserve\u003dFalse, recursive\u003dTrue,"},{"line_number":137,"context_line":"         **kwargs):"},{"line_number":138,"context_line":"    \"\"\"Copy a given file or directory to another location (by default as root)."},{"line_number":139,"context_line":"    Copy does NOT attempt to preserve ownership, permissions and timestamps"},{"line_number":140,"context_line":"    unless the \u0027preserve\u0027 option is enabled."}],"source_content_type":"text/x-python","patch_set":7,"id":"baa041b7_c23cb095","line":137,"updated":"2015-04-02 16:36:24.000000000","message":"Is there a reason why we have the default value of recursive set to True. When running the cp command from command line, unless we specify the -r option specifically, it wont recursively copy,","commit_id":"3f35f5cbbfec0361d34f4bfd198478d7cff07f64"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"1b03d32fea810f8dd88a5021f14057a4d3f0332c","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"def copy(source, destination, force\u003dFalse, preserve\u003dFalse, recursive\u003dTrue,"},{"line_number":137,"context_line":"         **kwargs):"},{"line_number":138,"context_line":"    \"\"\"Copy a given file or directory to another location (by default as root)."},{"line_number":139,"context_line":"    Copy does NOT attempt to preserve ownership, permissions and timestamps"},{"line_number":140,"context_line":"    unless the \u0027preserve\u0027 option is enabled."}],"source_content_type":"text/x-python","patch_set":7,"id":"baa041b7_5fd62ec6","line":137,"in_reply_to":"baa041b7_c23cb095","updated":"2015-04-02 20:33:06.000000000","message":"No reason other than it should not hurt and this way you don\u0027t have to worry about whether the target is a directory.","commit_id":"3f35f5cbbfec0361d34f4bfd198478d7cff07f64"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"7610bc2c6ea87b91c33a649ef5c76765c5bc949b","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    :param source:          Path to the source location."},{"line_number":145,"context_line":"    :type source:           string"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    :param destination:     Path to the source location."},{"line_number":148,"context_line":"    :type destination:      string"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    :param force:           If an existing destination file cannot be"}],"source_content_type":"text/x-python","patch_set":7,"id":"baa041b7_a26e4cc7","line":147,"updated":"2015-04-02 16:36:24.000000000","message":"path to the destination location.","commit_id":"3f35f5cbbfec0361d34f4bfd198478d7cff07f64"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"1b03d32fea810f8dd88a5021f14057a4d3f0332c","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    :param source:          Path to the source location."},{"line_number":145,"context_line":"    :type source:           string"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    :param destination:     Path to the source location."},{"line_number":148,"context_line":"    :type destination:      string"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    :param force:           If an existing destination file cannot be"}],"source_content_type":"text/x-python","patch_set":7,"id":"baa041b7_7fe8d27c","line":147,"in_reply_to":"baa041b7_a26e4cc7","updated":"2015-04-02 20:33:06.000000000","message":"done","commit_id":"3f35f5cbbfec0361d34f4bfd198478d7cff07f64"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"6ca4d26d3fe8704ef15c1e514d47e0915a962bc2","unresolved":false,"context_lines":[{"line_number":250,"context_line":"         **kwargs):"},{"line_number":251,"context_line":"    \"\"\"Copy a given file or directory to another location (by default as root)."},{"line_number":252,"context_line":"    Copy does NOT attempt to preserve ownership, permissions and timestamps"},{"line_number":253,"context_line":"    unless the \u0027preserve\u0027 option is enabled."},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    :seealso: _execute_shell_cmd for valid optional keyword arguments."},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7aaa499b_c20046ad","line":253,"updated":"2015-04-13 08:13:40.000000000","message":"Since the command is run (by default) as root user, this should preserve the file permissions also, by default, instead of leaving it to executor.","commit_id":"801559c2613f86a8fd68405a6d7092bface6fc8a"},{"author":{"_account_id":13355,"name":"Edmond Kotowski","email":"ekotowski@gmail.com","username":"ekotowski"},"change_message_id":"03b3685ea3937e49f942f9aa8377d1cecd858f69","unresolved":false,"context_lines":[{"line_number":318,"context_line":"        raise exception.UnprocessableEntity(_(\"Missing source path.\"))"},{"line_number":319,"context_line":"    elif not destination:"},{"line_number":320,"context_line":"        raise exception.UnprocessableEntity(_(\"Missing destination path.\"))"},{"line_number":321,"context_line":"    else:"},{"line_number":322,"context_line":"        options \u003d ((\u0027f\u0027, force),)"},{"line_number":323,"context_line":"        _execute_shell_cmd(\u0027mv\u0027, options, source, destination, **kwargs)"},{"line_number":324,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"7aaa499b_1af41984","line":321,"updated":"2015-04-14 16:23:26.000000000","message":"Remove else to reduce branching. Do not need an else here or on copy as your if on source or destination raises an exception and breaks out of the method.","commit_id":"501b7f1066eb4a056e1dec11afc6c9904b0262fe"}],"trove/guestagent/datastore/experimental/cassandra/service.py":[{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"7610bc2c6ea87b91c33a649ef5c76765c5bc949b","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            # no cassandra user in operating system"},{"line_number":142,"context_line":"            execute_function(\"sudo\", \"chown\","},{"line_number":143,"context_line":"                             \"cassandra:cassandra\", system.CASSANDRA_CONF)"},{"line_number":144,"context_line":"            execute_function(\"sudo\", \"chmod\", \"a+r\", system.CASSANDRA_CONF)"},{"line_number":145,"context_line":"        except Exception:"},{"line_number":146,"context_line":"            LOG.exception("},{"line_number":147,"context_line":"                _(\"Exception generating Cassandra configuration %s.\") %"}],"source_content_type":"text/x-python","patch_set":7,"id":"baa041b7_dd7931fe","side":"PARENT","line":144,"updated":"2015-04-02 16:36:24.000000000","message":"Why dont we add methods for chown and chmod in the operating_system class like we did for mv and cp?","commit_id":"00d29e852985bc203cb8380d93011e591e20b28a"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"1b03d32fea810f8dd88a5021f14057a4d3f0332c","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            # no cassandra user in operating system"},{"line_number":142,"context_line":"            execute_function(\"sudo\", \"chown\","},{"line_number":143,"context_line":"                             \"cassandra:cassandra\", system.CASSANDRA_CONF)"},{"line_number":144,"context_line":"            execute_function(\"sudo\", \"chmod\", \"a+r\", system.CASSANDRA_CONF)"},{"line_number":145,"context_line":"        except Exception:"},{"line_number":146,"context_line":"            LOG.exception("},{"line_number":147,"context_line":"                _(\"Exception generating Cassandra configuration %s.\") %"}],"source_content_type":"text/x-python","patch_set":7,"id":"baa041b7_ff76223d","side":"PARENT","line":144,"in_reply_to":"baa041b7_dd7931fe","updated":"2015-04-02 20:33:06.000000000","message":"Coming soon :-) Just decided to do them in a bunch of smaller patchsets.","commit_id":"00d29e852985bc203cb8380d93011e591e20b28a"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"fcde19f2a9a63da27d8965f8b74abc6180ced6c1","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            # no cassandra user in operating system"},{"line_number":142,"context_line":"            execute_function(\"sudo\", \"chown\","},{"line_number":143,"context_line":"                             \"cassandra:cassandra\", system.CASSANDRA_CONF)"},{"line_number":144,"context_line":"            execute_function(\"sudo\", \"chmod\", \"a+r\", system.CASSANDRA_CONF)"},{"line_number":145,"context_line":"        except Exception:"},{"line_number":146,"context_line":"            LOG.exception("},{"line_number":147,"context_line":"                _(\"Exception generating Cassandra configuration %s.\") %"}],"source_content_type":"text/x-python","patch_set":7,"id":"baa041b7_483d612a","side":"PARENT","line":144,"in_reply_to":"baa041b7_dd7931fe","updated":"2015-04-02 16:49:57.000000000","message":"There is already an update_owner to change ownership.","commit_id":"00d29e852985bc203cb8380d93011e591e20b28a"}],"trove/tests/unittests/guestagent/test_dbaas.py":[{"author":{"_account_id":15321,"name":"Matthew Van Dijk","email":"mvandijk@tesora.com","username":"mvandijk"},"change_message_id":"3051c800e9cf85d9465a83406d9065964ee919be","unresolved":false,"context_lines":[{"line_number":1577,"context_line":"    def test_start_db_with_db_update(self):"},{"line_number":1578,"context_line":""},{"line_number":1579,"context_line":"        cass_service.utils.execute_with_timeout \u003d Mock()"},{"line_number":1580,"context_line":"        self.cassandra.start_db \u003d Mock()"},{"line_number":1581,"context_line":"        self.appStatus.set_next_status("},{"line_number":1582,"context_line":"            rd_instance.ServiceStatuses.RUNNING)"},{"line_number":1583,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"baa041b7_d4790e95","line":1580,"updated":"2015-04-02 15:16:48.000000000","message":"Out of scope","commit_id":"0bce358d1deca8b4e56aa537b5ad86eb0d45963f"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"6ca4d26d3fe8704ef15c1e514d47e0915a962bc2","unresolved":false,"context_lines":[{"line_number":1670,"context_line":"        move.assert_called_with(temp_config_name, cass_system.CASSANDRA_CONF)"},{"line_number":1671,"context_line":"        mock_execute.assert_called_with(\"sudo\", \"chown\", \"cassandra:cassandra\","},{"line_number":1672,"context_line":"                                        cass_system.CASSANDRA_CONF)"},{"line_number":1673,"context_line":"        move.assert_called_with(temp_config_name, cass_system.CASSANDRA_CONF)"},{"line_number":1674,"context_line":"        chmod.assert_called_with("},{"line_number":1675,"context_line":"            cass_system.CASSANDRA_CONF, add\u003d[FileMode.ALL_READ])"},{"line_number":1676,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7aaa499b_827ebee2","line":1673,"updated":"2015-04-13 08:13:40.000000000","message":"this is same as 1670","commit_id":"801559c2613f86a8fd68405a6d7092bface6fc8a"}]}
