)]}'
{"trove/guestagent/api.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"486143e5ad97d5f7bc0d7bc8399ec8f58caf393f","unresolved":false,"context_lines":[{"line_number":230,"context_line":"           as a database container optionally includes a backup id for restores"},{"line_number":231,"context_line":"        \"\"\""},{"line_number":232,"context_line":"        LOG.debug(\"Sending the call to prepare the Guest\")"},{"line_number":233,"context_line":"        packages \u003d packages.split(\u0027 \u0027)"},{"line_number":234,"context_line":"        self._cast_with_consumer("},{"line_number":235,"context_line":"            \"prepare\", packages\u003dpackages, databases\u003ddatabases,"},{"line_number":236,"context_line":"            memory_mb\u003dmemory_mb, users\u003dusers, device_path\u003ddevice_path,"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_12eb6ea4","line":233,"updated":"2014-07-15 12:18:13.000000000","message":"As i can see, you need to change datastore registration process to fix serializtion/deserialization of packages, so the taskmanager would send a list of strings instead of string, and guest will check \u0027packages\u0027 parameter type.","commit_id":"e4a45fb635c1fcb9a69b60c7d06367933f40d5a3"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"8604ecaceb3a2b2669c738285f191ed9ad2581ee","unresolved":false,"context_lines":[{"line_number":230,"context_line":"           as a database container optionally includes a backup id for restores"},{"line_number":231,"context_line":"        \"\"\""},{"line_number":232,"context_line":"        LOG.debug(\"Sending the call to prepare the Guest\")"},{"line_number":233,"context_line":"        packages \u003d packages.split(\u0027 \u0027)"},{"line_number":234,"context_line":"        self._cast_with_consumer("},{"line_number":235,"context_line":"            \"prepare\", packages\u003dpackages, databases\u003ddatabases,"},{"line_number":236,"context_line":"            memory_mb\u003dmemory_mb, users\u003dusers, device_path\u003ddevice_path,"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_718ba568","line":233,"in_reply_to":"baada198_12eb6ea4","updated":"2014-07-16 06:25:54.000000000","message":"So i dont see why i would need to make a change here because this is used by the taskmanager to cast the call to the guest. The taskmanager has no way of knowing what version of the guest agent is available for it to call (should pass a string or a list). \n\nBut this brings up a point about how to deploy this feature without an issue. It would require you to make sure your guest agents are updated before deploying this new trove taskmanager code.","commit_id":"e4a45fb635c1fcb9a69b60c7d06367933f40d5a3"},{"author":{"_account_id":6268,"name":"Robert Myers","email":"myer0052@gmail.com","username":"rmyers"},"change_message_id":"d55723eaee26c26e65bdf29078a4bf59cd562f01","unresolved":false,"context_lines":[{"line_number":230,"context_line":"           as a database container optionally includes a backup id for restores"},{"line_number":231,"context_line":"        \"\"\""},{"line_number":232,"context_line":"        LOG.debug(\"Sending the call to prepare the Guest\")"},{"line_number":233,"context_line":"        packages \u003d packages.split(\u0027 \u0027)"},{"line_number":234,"context_line":"        self._cast_with_consumer("},{"line_number":235,"context_line":"            \"prepare\", packages\u003dpackages, databases\u003ddatabases,"},{"line_number":236,"context_line":"            memory_mb\u003dmemory_mb, users\u003dusers, device_path\u003ddevice_path,"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_42c61c4a","line":233,"updated":"2014-07-21 16:14:43.000000000","message":"This just needs to be packages.split()","commit_id":"7b482e3293673acd8f24bf792f810f0f36a97157"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"77de8694df5d4e74c8d29f843eec0f836435cccf","unresolved":false,"context_lines":[{"line_number":230,"context_line":"           as a database container optionally includes a backup id for restores"},{"line_number":231,"context_line":"        \"\"\""},{"line_number":232,"context_line":"        LOG.debug(\"Sending the call to prepare the Guest\")"},{"line_number":233,"context_line":"        packages \u003d packages.split(\u0027 \u0027)"},{"line_number":234,"context_line":"        self._cast_with_consumer("},{"line_number":235,"context_line":"            \"prepare\", packages\u003dpackages, databases\u003ddatabases,"},{"line_number":236,"context_line":"            memory_mb\u003dmemory_mb, users\u003dusers, device_path\u003ddevice_path,"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_e5557ac2","line":233,"in_reply_to":"baada198_42c61c4a","updated":"2014-07-21 16:27:13.000000000","message":"ah yea","commit_id":"7b482e3293673acd8f24bf792f810f0f36a97157"}],"trove/guestagent/pkg.py":[{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"8619d69f7fb1a12b776055cf4c47ebc366237c00","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                raise PkgPackageStateError(\"Cannot install packages.\")"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def pkg_is_installed(self, packages):"},{"line_number":181,"context_line":"        pkg_list \u003d packages.split()"},{"line_number":182,"context_line":"        cmd \u003d \"rpm -qa\""},{"line_number":183,"context_line":"        p \u003d commands.getstatusoutput(cmd)"},{"line_number":184,"context_line":"        std_out \u003d p[1]"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_c70dc190","side":"PARENT","line":181,"updated":"2014-07-15 08:55:09.000000000","message":"For the sake of backwards compat something like this might make sense: \n packages \u003d packages if isinstance(packages, list) else packages.split()","commit_id":"f2967bd91538046eae6c7369b4c8961ca7f6f845"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"486143e5ad97d5f7bc0d7bc8399ec8f58caf393f","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                raise PkgPackageStateError(\"Cannot install packages.\")"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def pkg_is_installed(self, packages):"},{"line_number":181,"context_line":"        pkg_list \u003d packages.split()"},{"line_number":182,"context_line":"        cmd \u003d \"rpm -qa\""},{"line_number":183,"context_line":"        p \u003d commands.getstatusoutput(cmd)"},{"line_number":184,"context_line":"        std_out \u003d p[1]"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_f246fabe","side":"PARENT","line":181,"in_reply_to":"baada198_c70dc190","updated":"2014-07-15 12:18:13.000000000","message":"+1","commit_id":"f2967bd91538046eae6c7369b4c8961ca7f6f845"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"8604ecaceb3a2b2669c738285f191ed9ad2581ee","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                raise PkgPackageStateError(\"Cannot install packages.\")"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def pkg_is_installed(self, packages):"},{"line_number":181,"context_line":"        pkg_list \u003d packages.split()"},{"line_number":182,"context_line":"        cmd \u003d \"rpm -qa\""},{"line_number":183,"context_line":"        p \u003d commands.getstatusoutput(cmd)"},{"line_number":184,"context_line":"        std_out \u003d p[1]"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_9f10455b","side":"PARENT","line":181,"in_reply_to":"baada198_f246fabe","updated":"2014-07-16 06:25:54.000000000","message":"great idea.","commit_id":"f2967bd91538046eae6c7369b4c8961ca7f6f845"}],"trove/tests/unittests/guestagent/test_pkg.py":[{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"6da6a6f6c2eb6252b6e35490dd10350b4bd6f090","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        pexpect.spawn.close \u003d self.pexpect_spawn_closed"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    def test_pkg_is_instaled_no_packages(self):"},{"line_number":305,"context_line":"        packages \u003d \"\""},{"line_number":306,"context_line":"        self.assertTrue(self.pkg.pkg_is_installed(packages))"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def test_pkg_is_instaled_yes(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_8b1428ea","side":"PARENT","line":305,"updated":"2014-07-18 04:09:50.000000000","message":"@amcrn do you mean i need to keep this test case with an empty string?","commit_id":"f2967bd91538046eae6c7369b4c8961ca7f6f845"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"e256c0ca5cf7638674670ce213d2aa266f5c68e4","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    def test_pkg_is_instaled_no(self):"},{"line_number":64,"context_line":"        packages \u003d [\"package1\u003d1.0\", \"package2\", \"package3\u003d3.1\"]"},{"line_number":65,"context_line":"        self.pkg.pkg_version \u003d MagicMock(side_effect\u003d[\"1.0\", \"2.0\", \"3.0\"])"},{"line_number":66,"context_line":"        self.assertFalse(self.pkg.pkg_is_installed(packages))"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def test_success_install(self):"},{"line_number":69,"context_line":"        # test"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_48ac2bef","line":66,"updated":"2014-07-22 17:19:47.000000000","message":"The code handles both cases now - should these tests be in addition to the original ones?","commit_id":"fc1ba31b427157b22dd84e022e36b9cb6a5e093e"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"d844ad15aa90d644220adde5d3abfaa70d122598","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    def test_pkg_is_instaled_no(self):"},{"line_number":64,"context_line":"        packages \u003d [\"package1\u003d1.0\", \"package2\", \"package3\u003d3.1\"]"},{"line_number":65,"context_line":"        self.pkg.pkg_version \u003d MagicMock(side_effect\u003d[\"1.0\", \"2.0\", \"3.0\"])"},{"line_number":66,"context_line":"        self.assertFalse(self.pkg.pkg_is_installed(packages))"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def test_success_install(self):"},{"line_number":69,"context_line":"        # test"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_afb306eb","line":66,"in_reply_to":"baada198_48ac2bef","updated":"2014-07-22 20:41:09.000000000","message":"+1","commit_id":"fc1ba31b427157b22dd84e022e36b9cb6a5e093e"}]}
