)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"f90a30a02d53bd803946cd559633826d7d193646","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Cmd manage commands parse positional args"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently all db commands in glance doesnot care about"},{"line_number":10,"context_line":"non-positional args, e.g. --version"},{"line_number":11,"context_line":"So for example:"},{"line_number":12,"context_line":"glance-manage db upgrade --version 1111"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAATn%2F8q4g%3D","line":9,"updated":"2013-12-23 13:49:23.000000000","message":"s/doesnot/do not care/","commit_id":"3b21e8ea62aa516fc80a8d11f75d09cc5b0546aa"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"f90a30a02d53bd803946cd559633826d7d193646","unresolved":false,"context_lines":[{"line_number":12,"context_line":"glance-manage db upgrade --version 1111"},{"line_number":13,"context_line":"will work as if version was not passed"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This is somekind of blocker that doesnot allow to extend"},{"line_number":16,"context_line":"db manage commands for alembic usage"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Ifc8d8ed56223d9903d2e37266c174f1d5a10fcc8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAATn%2F8q4U%3D","line":15,"updated":"2013-12-23 13:49:23.000000000","message":"s/somekind/a kind/\n\ns/doesnot/doesn\u0027t/","commit_id":"3b21e8ea62aa516fc80a8d11f75d09cc5b0546aa"}],"glance/cmd/manage.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"23600992ce7fa6ea1668a976c2e3956cb9d1dcd8","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    try:"},{"line_number":190,"context_line":"        fn \u003d CONF.command.action_fn"},{"line_number":191,"context_line":"        fn_args \u003d [arg.decode(\u0027utf-8\u0027) for arg"},{"line_number":192,"context_line":"                   in getattr(CONF.command, \u0027action_args\u0027, [])]"},{"line_number":193,"context_line":"        fn_kwargs \u003d {}"},{"line_number":194,"context_line":"        for k in getattr(CONF.command, \u0027action_kwargs\u0027, []):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F8%2BH8%3D","line":191,"updated":"2013-12-18 09:26:13.000000000","message":"should we care about encoding here at all? or we can just pass byte/str value as is?","commit_id":"b15d679bb465e90e6ae8c06739c92c3fcd995ff3"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"23600992ce7fa6ea1668a976c2e3956cb9d1dcd8","unresolved":false,"context_lines":[{"line_number":192,"context_line":"                   in getattr(CONF.command, \u0027action_args\u0027, [])]"},{"line_number":193,"context_line":"        fn_kwargs \u003d {}"},{"line_number":194,"context_line":"        for k in getattr(CONF.command, \u0027action_kwargs\u0027, []):"},{"line_number":195,"context_line":"            v \u003d getattr(CONF.command, \u0027action_kwarg_\u0027 + k)"},{"line_number":196,"context_line":"            if v is None:"},{"line_number":197,"context_line":"                continue"},{"line_number":198,"context_line":"            if isinstance(v, six.string_types):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F8%2BJE%3D","line":195,"updated":"2013-12-18 09:26:13.000000000","message":"provide a default value of None for this getattr() call? otherwise it might fail with AttributeError","commit_id":"b15d679bb465e90e6ae8c06739c92c3fcd995ff3"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"23600992ce7fa6ea1668a976c2e3956cb9d1dcd8","unresolved":false,"context_lines":[{"line_number":195,"context_line":"            v \u003d getattr(CONF.command, \u0027action_kwarg_\u0027 + k)"},{"line_number":196,"context_line":"            if v is None:"},{"line_number":197,"context_line":"                continue"},{"line_number":198,"context_line":"            if isinstance(v, six.string_types):"},{"line_number":199,"context_line":"                v \u003d v.decode(\u0027utf-8\u0027)"},{"line_number":200,"context_line":"            fn_kwargs[k] \u003d v"},{"line_number":201,"context_line":"        fn(*fn_args, **fn_kwargs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F8%2BIE%3D","line":198,"updated":"2013-12-18 09:26:13.000000000","message":"this seems to be wrong: a string value shouldn\u0027t be decoded (and this fails on Python 3 - http://paste.openstack.org/show/55284/)","commit_id":"b15d679bb465e90e6ae8c06739c92c3fcd995ff3"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"f90a30a02d53bd803946cd559633826d7d193646","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        sys.exit(\"ERROR: %s\" % e)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    try:"},{"line_number":189,"context_line":"        fn \u003d CONF.command.action_fn"},{"line_number":190,"context_line":"        fn_args \u003d getattr(CONF.command, \u0027action_args\u0027, [])"},{"line_number":191,"context_line":"        fn_kwargs \u003d {}"},{"line_number":192,"context_line":"        for k in getattr(CONF.command, \u0027action_kwargs\u0027, []):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F8qtA%3D","line":189,"updated":"2013-12-23 13:49:23.000000000","message":"This API is really... strange. But I can\u0027t suggest a better way :(","commit_id":"3b21e8ea62aa516fc80a8d11f75d09cc5b0546aa"},{"author":{"_account_id":6493,"name":"John Bresnahan","email":"john@bresnahan.me","username":"jbresnah"},"change_message_id":"254a3d62d968f7327435a88bdf7d0ea07c530045","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        sys.exit(\"ERROR: %s\" % e)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    try:"},{"line_number":189,"context_line":"        fn \u003d CONF.command.action_fn"},{"line_number":190,"context_line":"        fn_args \u003d getattr(CONF.command, \u0027action_args\u0027, [])"},{"line_number":191,"context_line":"        fn_kwargs \u003d {}"},{"line_number":192,"context_line":"        for k in getattr(CONF.command, \u0027action_kwargs\u0027, []):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2F1C4%3D","line":189,"updated":"2013-12-30 15:47:41.000000000","message":"nit: the above line is not really needed","commit_id":"0b1041120e294cbe71cd3e5cbdb2162d00b54b87"}]}
