)]}'
{"nova/privsep/path.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a302c5de225e98f00daee9f0ef29c7002884fd25","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    os.utime(path, None)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"@nova.privsep.sys_admin_pctxt.entrypoint"},{"line_number":81,"context_line":"def rmdir(path):"},{"line_number":82,"context_line":"    if not os.path.exists(path):"},{"line_number":83,"context_line":"        raise exception.FileNotFound(file_path\u003dpath)"},{"line_number":84,"context_line":"    os.rmdir(path)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"class path(object):"}],"source_content_type":"text/x-python","patch_set":24,"id":"9f5c4f37_b1886971","line":84,"range":{"start_line":80,"start_character":0,"end_line":84,"end_character":18},"updated":"2017-09-21 16:22:20.000000000","message":"nit: can we place this under \u0027makedirs\u0027 for __synergy__","commit_id":"a462a1bb302ec1174f61511c4bcbcd955d2db39b"}],"nova/tests/unit/virt/disk/mount/test_nbd.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a302c5de225e98f00daee9f0ef29c7002884fd25","unresolved":false,"context_lines":[{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    @mock.patch(\u0027nova.privsep.fs.mount\u0027, return_value\u003d(\u0027\u0027, \u0027broken\u0027))"},{"line_number":276,"context_line":"    def test_do_mount_need_to_specify_fs_type(self, mock_mount):"},{"line_number":277,"context_line":"        # NOTE(mikal): Bug 1094373 saw a regression where we failed to"},{"line_number":278,"context_line":"        # communicate a failed mount properly."},{"line_number":279,"context_line":"        imgfile \u003d tempfile.NamedTemporaryFile()"},{"line_number":280,"context_line":"        self.addCleanup(imgfile.close)"},{"line_number":281,"context_line":"        tempdir \u003d self.useFixture(fixtures.TempDir()).path"}],"source_content_type":"text/x-python","patch_set":24,"id":"9f5c4f37_5197ed91","line":278,"range":{"start_line":277,"start_character":8,"end_line":278,"end_character":46},"updated":"2017-09-21 16:22:20.000000000","message":"I assume this refers to the test rather than the fixture you were using?","commit_id":"a462a1bb302ec1174f61511c4bcbcd955d2db39b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"460b9e0c6b89b1905035d4916dbf136f1a529777","unresolved":false,"context_lines":[{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    @mock.patch(\u0027nova.privsep.fs.mount\u0027, return_value\u003d(\u0027\u0027, \u0027broken\u0027))"},{"line_number":276,"context_line":"    def test_do_mount_need_to_specify_fs_type(self, mock_mount):"},{"line_number":277,"context_line":"        # NOTE(mikal): Bug 1094373 saw a regression where we failed to"},{"line_number":278,"context_line":"        # communicate a failed mount properly."},{"line_number":279,"context_line":"        imgfile \u003d tempfile.NamedTemporaryFile()"},{"line_number":280,"context_line":"        self.addCleanup(imgfile.close)"},{"line_number":281,"context_line":"        tempdir \u003d self.useFixture(fixtures.TempDir()).path"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f4e5783_42ee0a89","line":278,"range":{"start_line":277,"start_character":8,"end_line":278,"end_character":46},"in_reply_to":"7f515b1d_7301b5af","updated":"2017-10-10 14:35:06.000000000","message":"Sorry, I meant that it doesn\u0027t apply to the removed fixture (lines 277-279 in the base) and therefore shouldn\u0027t be removed too. Good to know","commit_id":"a462a1bb302ec1174f61511c4bcbcd955d2db39b"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"f9841bb7f4bc594bdd7a1a3cc192c9a95a8aad9c","unresolved":false,"context_lines":[{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    @mock.patch(\u0027nova.privsep.fs.mount\u0027, return_value\u003d(\u0027\u0027, \u0027broken\u0027))"},{"line_number":276,"context_line":"    def test_do_mount_need_to_specify_fs_type(self, mock_mount):"},{"line_number":277,"context_line":"        # NOTE(mikal): Bug 1094373 saw a regression where we failed to"},{"line_number":278,"context_line":"        # communicate a failed mount properly."},{"line_number":279,"context_line":"        imgfile \u003d tempfile.NamedTemporaryFile()"},{"line_number":280,"context_line":"        self.addCleanup(imgfile.close)"},{"line_number":281,"context_line":"        tempdir \u003d self.useFixture(fixtures.TempDir()).path"}],"source_content_type":"text/x-python","patch_set":24,"id":"7f515b1d_7301b5af","line":278,"range":{"start_line":277,"start_character":8,"end_line":278,"end_character":46},"in_reply_to":"9f5c4f37_5197ed91","updated":"2017-10-09 22:45:55.000000000","message":"This comment is pre-existing, but yes.","commit_id":"a462a1bb302ec1174f61511c4bcbcd955d2db39b"}],"nova/virt/disk/mount/api.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a302c5de225e98f00daee9f0ef29c7002884fd25","unresolved":false,"context_lines":[{"line_number":249,"context_line":"        LOG.debug(\"Mount %(dev)s on %(dir)s\","},{"line_number":250,"context_line":"                  {\u0027dev\u0027: self.mapped_device, \u0027dir\u0027: self.mount_dir})"},{"line_number":251,"context_line":"        _out, err \u003d utils.trycmd(\u0027mount\u0027, self.mapped_device, self.mount_dir,"},{"line_number":252,"context_line":"                                 discard_warnings\u003dTrue, run_as_root\u003dTrue)"},{"line_number":253,"context_line":"        if err:"},{"line_number":254,"context_line":"            self.error \u003d _(\u0027Failed to mount filesystem: %s\u0027) % err"},{"line_number":255,"context_line":"            LOG.debug(self.error)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9f5c4f37_d1d19d59","side":"PARENT","line":252,"range":{"start_line":252,"start_character":33,"end_line":252,"end_character":55},"updated":"2017-09-21 16:22:20.000000000","message":"This option tells us to \"handle commands that output to stderr but otherwise succeed\" (i.e. discard stderr). I can\u0027t figure out is we\u0027re doing that here or not. Any tips?","commit_id":"2181ef52492d6ecc2fc27a87e1324c7543f24268"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"31f0b56d6c009501dbc6d8c5cb593db29b700232","unresolved":false,"context_lines":[{"line_number":249,"context_line":"        LOG.debug(\"Mount %(dev)s on %(dir)s\","},{"line_number":250,"context_line":"                  {\u0027dev\u0027: self.mapped_device, \u0027dir\u0027: self.mount_dir})"},{"line_number":251,"context_line":"        _out, err \u003d utils.trycmd(\u0027mount\u0027, self.mapped_device, self.mount_dir,"},{"line_number":252,"context_line":"                                 discard_warnings\u003dTrue, run_as_root\u003dTrue)"},{"line_number":253,"context_line":"        if err:"},{"line_number":254,"context_line":"            self.error \u003d _(\u0027Failed to mount filesystem: %s\u0027) % err"},{"line_number":255,"context_line":"            LOG.debug(self.error)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3f4b6375_caf467d2","side":"PARENT","line":252,"range":{"start_line":252,"start_character":33,"end_line":252,"end_character":55},"in_reply_to":"5f4e5783_a2949ee9","updated":"2017-10-18 06:54:20.000000000","message":"Done","commit_id":"2181ef52492d6ecc2fc27a87e1324c7543f24268"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"460b9e0c6b89b1905035d4916dbf136f1a529777","unresolved":false,"context_lines":[{"line_number":249,"context_line":"        LOG.debug(\"Mount %(dev)s on %(dir)s\","},{"line_number":250,"context_line":"                  {\u0027dev\u0027: self.mapped_device, \u0027dir\u0027: self.mount_dir})"},{"line_number":251,"context_line":"        _out, err \u003d utils.trycmd(\u0027mount\u0027, self.mapped_device, self.mount_dir,"},{"line_number":252,"context_line":"                                 discard_warnings\u003dTrue, run_as_root\u003dTrue)"},{"line_number":253,"context_line":"        if err:"},{"line_number":254,"context_line":"            self.error \u003d _(\u0027Failed to mount filesystem: %s\u0027) % err"},{"line_number":255,"context_line":"            LOG.debug(self.error)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f4e5783_a2949ee9","side":"PARENT","line":252,"range":{"start_line":252,"start_character":33,"end_line":252,"end_character":55},"in_reply_to":"7f515b1d_e6e32f04","updated":"2017-10-10 14:35:06.000000000","message":"Fair enough. Probably worth calling that out in the commit message and a change in behavior?","commit_id":"2181ef52492d6ecc2fc27a87e1324c7543f24268"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"f9841bb7f4bc594bdd7a1a3cc192c9a95a8aad9c","unresolved":false,"context_lines":[{"line_number":249,"context_line":"        LOG.debug(\"Mount %(dev)s on %(dir)s\","},{"line_number":250,"context_line":"                  {\u0027dev\u0027: self.mapped_device, \u0027dir\u0027: self.mount_dir})"},{"line_number":251,"context_line":"        _out, err \u003d utils.trycmd(\u0027mount\u0027, self.mapped_device, self.mount_dir,"},{"line_number":252,"context_line":"                                 discard_warnings\u003dTrue, run_as_root\u003dTrue)"},{"line_number":253,"context_line":"        if err:"},{"line_number":254,"context_line":"            self.error \u003d _(\u0027Failed to mount filesystem: %s\u0027) % err"},{"line_number":255,"context_line":"            LOG.debug(self.error)"}],"source_content_type":"text/x-python","patch_set":24,"id":"7f515b1d_e6e32f04","side":"PARENT","line":252,"range":{"start_line":252,"start_character":33,"end_line":252,"end_character":55},"in_reply_to":"9f5c4f37_d1d19d59","updated":"2017-10-09 22:45:55.000000000","message":"I\u0027m uncomfortable with the discard_warnings here -- the code below wants to check stderr and handle a bug, but discard_warnings clears stderr for \"succeeding commands\".\n\nUnless we can come up with a rationale for why we should be ignoring stderr (and if we can it should be documented in a comment here), I\u0027d like to give this way a try.","commit_id":"2181ef52492d6ecc2fc27a87e1324c7543f24268"}],"releasenotes/notes/privsep-queens-rootwrap-adds-907aa1bc8e3eb2ca.yaml":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a302c5de225e98f00daee9f0ef29c7002884fd25","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  - |"},{"line_number":7,"context_line":"    The following commands are no longer required to be listed in your rootwrap"},{"line_number":8,"context_line":"    configuration: cat; chown; cryptsetup; dd; mkdir; mount; ploop;"},{"line_number":9,"context_line":"    prl_disk_tool; readlink; tee; touch; and umount."}],"source_content_type":"text/x-yaml","patch_set":24,"id":"9f5c4f37_7113110f","line":9,"range":{"start_line":9,"start_character":41,"end_line":9,"end_character":44},"updated":"2017-09-21 16:22:20.000000000","message":"maybe drop this. It\u0027s also odd that you use semicolons here instead of commas. /me goes to find his copy of \"Eats, Shoots \u0026 Leaves\"","commit_id":"a462a1bb302ec1174f61511c4bcbcd955d2db39b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"460b9e0c6b89b1905035d4916dbf136f1a529777","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  - |"},{"line_number":7,"context_line":"    The following commands are no longer required to be listed in your rootwrap"},{"line_number":8,"context_line":"    configuration: cat; chown; cryptsetup; dd; mkdir; mount; ploop;"},{"line_number":9,"context_line":"    prl_disk_tool; readlink; tee; touch; and umount."}],"source_content_type":"text/x-yaml","patch_set":24,"id":"5f4e5783_82508234","line":9,"range":{"start_line":9,"start_character":41,"end_line":9,"end_character":44},"in_reply_to":"7f515b1d_2685c707","updated":"2017-10-10 14:35:06.000000000","message":"You may ignore them, but ignorance will not make you correct :P Semicolons are used items in a list or series if any of the items contain commas. For example:\n\n\u003e There are basically two ways to write: with a pen or pencil, which is inexpensive and easily accessible; or by computer and printer, which is more expensive but quick and neat.\n\nHowever, this is a nit that doesn\u0027t need to be fixed here.\n\nGrammatical heckling completed.","commit_id":"a462a1bb302ec1174f61511c4bcbcd955d2db39b"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"f9841bb7f4bc594bdd7a1a3cc192c9a95a8aad9c","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  - |"},{"line_number":7,"context_line":"    The following commands are no longer required to be listed in your rootwrap"},{"line_number":8,"context_line":"    configuration: cat; chown; cryptsetup; dd; mkdir; mount; ploop;"},{"line_number":9,"context_line":"    prl_disk_tool; readlink; tee; touch; and umount."}],"source_content_type":"text/x-yaml","patch_set":24,"id":"7f515b1d_2685c707","line":9,"range":{"start_line":9,"start_character":41,"end_line":9,"end_character":44},"in_reply_to":"9f5c4f37_7113110f","updated":"2017-10-09 22:45:55.000000000","message":"I will ignore your grammatical heckling. Semicolons are correct in a list, and the \"and\" here is a pure delight.","commit_id":"a462a1bb302ec1174f61511c4bcbcd955d2db39b"}]}
