)]}'
{"trove/guestagent/datastore/mysql/manager.py":[{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"6c0d62ee2c0265ad48a22356fb3871503390155e","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            device \u003d volume.VolumeDevice(device_path)"},{"line_number":119,"context_line":"            # unmount if device is already mounted"},{"line_number":120,"context_line":"            mount_points \u003d device.mount_points()"},{"line_number":121,"context_line":"            for mnt in mount_points:"},{"line_number":122,"context_line":"                LOG.info(_(\"Device %(device)s is already mounted in \""},{"line_number":123,"context_line":"                           \"%(mount_point)s\") %"},{"line_number":124,"context_line":"                         {\u0027device\u0027: device_path, \u0027mount_point\u0027: mnt})"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2F%2BKo%3D","line":121,"updated":"2014-04-09 06:32:38.000000000","message":"would it be useful to add a system check to if the mount points are there?\n\nimport os\n\nif os.path.ismount(mnt):\n   device.umount(mnt)\n\nmaybe this is already being done in device ?","commit_id":"91a7c412c6c18b2ca263668616a51a2e057bc3eb"},{"author":{"_account_id":5390,"name":"Steve Leon","username":"steve-leon","inactive":true},"change_message_id":"95bb78b262256d9fcd86e1f8fe2229b5f994e2d5","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            device \u003d volume.VolumeDevice(device_path)"},{"line_number":119,"context_line":"            # unmount if device is already mounted"},{"line_number":120,"context_line":"            mount_points \u003d device.mount_points()"},{"line_number":121,"context_line":"            for mnt in mount_points:"},{"line_number":122,"context_line":"                LOG.info(_(\"Device %(device)s is already mounted in \""},{"line_number":123,"context_line":"                           \"%(mount_point)s\") %"},{"line_number":124,"context_line":"                         {\u0027device\u0027: device_path, \u0027mount_point\u0027: mnt})"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2F4zs%3D","line":121,"in_reply_to":"AAAAW3%2F%2F%2BKo%3D","updated":"2014-04-09 17:21:35.000000000","message":"Nice Dan. This is better. Great find","commit_id":"91a7c412c6c18b2ca263668616a51a2e057bc3eb"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"5588cb1c4e8d02fc453f6361f3bbcde34d54bffe","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            device \u003d volume.VolumeDevice(device_path)"},{"line_number":119,"context_line":"            # unmount if device is already mounted"},{"line_number":120,"context_line":"            mount_points \u003d device.mount_points()"},{"line_number":121,"context_line":"            for mnt in mount_points:"},{"line_number":122,"context_line":"                LOG.info(_(\"Device %(device)s is already mounted in \""},{"line_number":123,"context_line":"                           \"%(mount_point)s\") %"},{"line_number":124,"context_line":"                         {\u0027device\u0027: device_path, \u0027mount_point\u0027: mnt})"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FnkQ%3D","line":121,"in_reply_to":"AAAAW3%2F%2F4gU%3D","updated":"2014-04-11 17:30:38.000000000","message":"no problem, thanks for looking into it!","commit_id":"91a7c412c6c18b2ca263668616a51a2e057bc3eb"},{"author":{"_account_id":5390,"name":"Steve Leon","username":"steve-leon","inactive":true},"change_message_id":"ff062b1c925b0f6db9aeefa3caf5e937d3ac1139","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            device \u003d volume.VolumeDevice(device_path)"},{"line_number":119,"context_line":"            # unmount if device is already mounted"},{"line_number":120,"context_line":"            mount_points \u003d device.mount_points()"},{"line_number":121,"context_line":"            for mnt in mount_points:"},{"line_number":122,"context_line":"                LOG.info(_(\"Device %(device)s is already mounted in \""},{"line_number":123,"context_line":"                           \"%(mount_point)s\") %"},{"line_number":124,"context_line":"                         {\u0027device\u0027: device_path, \u0027mount_point\u0027: mnt})"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2F4gU%3D","line":121,"in_reply_to":"AAAAW3%2F%2F4zs%3D","updated":"2014-04-09 17:49:22.000000000","message":"Hi Dan,\n\nI looked into this more. It seems that os.path.ismount() returns true/false if the folder is mounted. It doesnt say if the device is mounted.","commit_id":"91a7c412c6c18b2ca263668616a51a2e057bc3eb"}],"trove/guestagent/volume.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4df257ab00ee61885a48cecd36df9a606fdd0409","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def mount_points(self):"},{"line_number":122,"context_line":"        \"\"\"Returns a list of mount points on the specificed device.\"\"\""},{"line_number":123,"context_line":"        result \u003d utils.execute(\"sudo\", \"mount\")[0].strip().split(\u0027\\n\u0027)"},{"line_number":124,"context_line":"        # Matches the words between \u0027 on \u0027 and the next space."},{"line_number":125,"context_line":"        # so \u0027/dev/vdb on /mnt type ext3 (rw,_netdev)\u0027 will match to \u0027/mnt\u0027"},{"line_number":126,"context_line":"        return [re.search(r\u0027(?\u003c\u003d\\son\\s)([^\\s]+)\u0027, mnt).group(0)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWn%2F%2F%2BII%3D","line":123,"updated":"2014-04-08 06:56:27.000000000","message":"i\u0027d suggest to avoi explicit unpacking.\nand also, please wrap it with try:except block","commit_id":"42eb00304f867502ac7d277552610f918d932989"},{"author":{"_account_id":6268,"name":"Robert Myers","email":"myer0052@gmail.com","username":"rmyers"},"change_message_id":"cb87fb563fb876c68a9b18bd9cd1434d96bbd665","unresolved":false,"context_lines":[{"line_number":121,"context_line":"    def mount_points(self):"},{"line_number":122,"context_line":"        \"\"\"Returns a list of mount points on the specificed device.\"\"\""},{"line_number":123,"context_line":"        try:"},{"line_number":124,"context_line":"            stdout, stderr \u003d utils.execute(\"sudo\", \"mount\")"},{"line_number":125,"context_line":"            result \u003d stdout.strip().split(\u0027\\n\u0027)"},{"line_number":126,"context_line":"            # Matches the words between \u0027 on \u0027 and the next space."},{"line_number":127,"context_line":"            # so \u0027/dev/vdb on /mnt type ext3 (rw,_netdev)\u0027 will match to \u0027/mnt\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2Fncg%3D","line":124,"updated":"2014-04-11 17:54:13.000000000","message":"utils.execute(\"mount\", run_as_root\u003dTrue, root_helper\u003d\u0027sudo\u0027)","commit_id":"91a7c412c6c18b2ca263668616a51a2e057bc3eb"},{"author":{"_account_id":5390,"name":"Steve Leon","username":"steve-leon","inactive":true},"change_message_id":"8a26ab8514cc37616bfe45c861ea3ce8f0b5c5a7","unresolved":false,"context_lines":[{"line_number":121,"context_line":"    def mount_points(self):"},{"line_number":122,"context_line":"        \"\"\"Returns a list of mount points on the specificed device.\"\"\""},{"line_number":123,"context_line":"        try:"},{"line_number":124,"context_line":"            stdout, stderr \u003d utils.execute(\"sudo\", \"mount\")"},{"line_number":125,"context_line":"            result \u003d stdout.strip().split(\u0027\\n\u0027)"},{"line_number":126,"context_line":"            # Matches the words between \u0027 on \u0027 and the next space."},{"line_number":127,"context_line":"            # so \u0027/dev/vdb on /mnt type ext3 (rw,_netdev)\u0027 will match to \u0027/mnt\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2Fm3o%3D","line":124,"in_reply_to":"AAAAW3%2F%2Fncg%3D","updated":"2014-04-11 19:30:21.000000000","message":"Thanks will do.","commit_id":"91a7c412c6c18b2ca263668616a51a2e057bc3eb"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"b56764ee806a4a0e2721c8d41cedba4001d6e06b","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    def mount_points(self, device_path):"},{"line_number":132,"context_line":"        \"\"\"Returns a list of mount points on the specified device.\"\"\""},{"line_number":133,"context_line":"        try:"},{"line_number":134,"context_line":"            stdout, stderr \u003d utils.execute(\"mount\", run_as_root\u003dTrue,"},{"line_number":135,"context_line":"                                           root_helper\u003d\u0027sudo\u0027)"},{"line_number":136,"context_line":"            result \u003d stdout.strip().split(\u0027\\n\u0027)"},{"line_number":137,"context_line":"            # Matches the words between \u0027 on \u0027 and the next space."}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAXH%2F%2FWI4%3D","line":134,"updated":"2014-04-22 12:08:08.000000000","message":"maybe i\u0027m old fashioned but I\u0027d cat /etc/mtab instead of running the mount command.\n\nwhich means you can also send down a command like\n\ngrep \"/dev/sda1\" /etc/mtab | awk \u0027{print $2}\u0027","commit_id":"b189140827eec07fd22768a867d1800ca29efc48"},{"author":{"_account_id":5390,"name":"Steve Leon","username":"steve-leon","inactive":true},"change_message_id":"92ec1935b1aec5051fca7148ea44b8f6aff0c435","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    def mount_points(self, device_path):"},{"line_number":132,"context_line":"        \"\"\"Returns a list of mount points on the specified device.\"\"\""},{"line_number":133,"context_line":"        try:"},{"line_number":134,"context_line":"            stdout, stderr \u003d utils.execute(\"mount\", run_as_root\u003dTrue,"},{"line_number":135,"context_line":"                                           root_helper\u003d\u0027sudo\u0027)"},{"line_number":136,"context_line":"            result \u003d stdout.strip().split(\u0027\\n\u0027)"},{"line_number":137,"context_line":"            # Matches the words between \u0027 on \u0027 and the next space."}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAXH%2F%2FT%2Bk%3D","line":134,"in_reply_to":"AAAAXH%2F%2FWI4%3D","updated":"2014-04-22 15:19:58.000000000","message":"The reason i used the \u0027mount\u0027 command to list all the mount points was because we were already using \u0027mount\u0027 to mount and unmount. However your suggestion is cleaner. No ugly regex stuff. Ill make the change :-)","commit_id":"b189140827eec07fd22768a867d1800ca29efc48"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"fba594984f64a425cddd15e29e87a0ba081fd099","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            stdout, stderr \u003d utils.execute(cmd, shell\u003dTrue)"},{"line_number":135,"context_line":"            return stdout.strip().split(\u0027\\n\u0027)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        except ProcessExecutionError as err:"},{"line_number":138,"context_line":"            LOG.error(err)"},{"line_number":139,"context_line":"            raise GuestError(\"Could not obtain a list of mount points for \""},{"line_number":140,"context_line":"                             \"device: %s\" % device_path)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2FDC8%3D","line":137,"updated":"2014-04-24 11:51:21.000000000","message":"please log stderr and stdout if they exist","commit_id":"941f43fd7bc6ebf6a74be879dd1dd4786f431316"},{"author":{"_account_id":5390,"name":"Steve Leon","username":"steve-leon","inactive":true},"change_message_id":"c9ee2d3b43c3c195037f6aa56e250d027fd1cb7d","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            stdout, stderr \u003d utils.execute(cmd, shell\u003dTrue)"},{"line_number":135,"context_line":"            return stdout.strip().split(\u0027\\n\u0027)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        except ProcessExecutionError as err:"},{"line_number":138,"context_line":"            LOG.error(err)"},{"line_number":139,"context_line":"            raise GuestError(\"Could not obtain a list of mount points for \""},{"line_number":140,"context_line":"                             \"device: %s\" % device_path)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2FBIY%3D","line":137,"in_reply_to":"AAAAXH%2F%2FDC8%3D","updated":"2014-04-24 16:15:05.000000000","message":"I dont think they need to be logged. Stdout will contain the result, which is parsed and returnd. Stderr will be logged by the exception trace when an error happens. I think logging this variables are unnecessary and too verbose","commit_id":"941f43fd7bc6ebf6a74be879dd1dd4786f431316"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"3b9ceb2c29ee53c7acfaf8cc6e7bd6da59545da4","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        except ProcessExecutionError as err:"},{"line_number":138,"context_line":"            LOG.error(err)"},{"line_number":139,"context_line":"            raise GuestError(\"Could not obtain a list of mount points for \""},{"line_number":140,"context_line":"                             \"device: %s\" % device_path)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad9bd40_5b487f2d","line":139,"updated":"2014-04-30 21:21:07.000000000","message":"_()","commit_id":"941f43fd7bc6ebf6a74be879dd1dd4786f431316"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"8462f16a0883ea0d296c9a3c8a31c91e97600d49","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        except ProcessExecutionError as err:"},{"line_number":138,"context_line":"            LOG.error(err)"},{"line_number":139,"context_line":"            raise GuestError(\"Could not obtain a list of mount points for \""},{"line_number":140,"context_line":"                             \"device: %s\" % device_path)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad9bd40_9b7e87ad","line":139,"in_reply_to":"9ad9bd40_5b487f2d","updated":"2014-04-30 21:46:00.000000000","message":"agreed.","commit_id":"941f43fd7bc6ebf6a74be879dd1dd4786f431316"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"ff1a042ef295edda00e7002af90d42fc8a3ef40c","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            child.expect(pexpect.EOF)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def unmount_device(self, device_path):"},{"line_number":124,"context_line":"        # unmount if device is already mounted"},{"line_number":125,"context_line":"        mount_points \u003d self.mount_points(device_path)"},{"line_number":126,"context_line":"        for mnt in mount_points:"},{"line_number":127,"context_line":"            LOG.info(_(\"Device %(device)s is already mounted in \""}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad9bd40_c0033840","line":124,"updated":"2014-05-07 10:04:01.000000000","message":"can we replace the comment with the docstring","commit_id":"f173997da46be0ef9c93c2196af3447f5921d584"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"ff1a042ef295edda00e7002af90d42fc8a3ef40c","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        try:"},{"line_number":136,"context_line":"            cmd \u003d \"grep %s /etc/mtab | awk \u0027{print $2}\u0027\" % device_path"},{"line_number":137,"context_line":"            stdout, stderr \u003d utils.execute(cmd, shell\u003dTrue)"},{"line_number":138,"context_line":"            return stdout.strip().split(\u0027\\n\u0027)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        except ProcessExecutionError as err:"},{"line_number":141,"context_line":"            LOG.error(err)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad9bd40_d25bfcf3","line":138,"updated":"2014-05-07 10:04:01.000000000","message":"it will still return a list with 1 element with blank element in case if mount_point does not exists.\n\n[\u0027\u0027]","commit_id":"f173997da46be0ef9c93c2196af3447f5921d584"}]}
