)]}'
{"glance/db/sqlalchemy/migrate_repo/versions/016_quote_encrypted_swift_credentials.py":[{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"449ae6934f37fe5ad1f88b137409b25109188375","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import types"},{"line_number":19,"context_line":"import urlparse"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fiyo%3D","line":17,"updated":"2013-01-16 17:14:38.000000000","message":"Can you add some module-level documentation that describes what this does and why it is necessary?","commit_id":"7224ae1636ae08c0684cac95d0ec88a188058a70"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"b00eb6a866e250332c44a1e10d8fe64e5a529e83","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import types"},{"line_number":19,"context_line":"import urlparse"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FieQ%3D","line":17,"in_reply_to":"AAAAM3%2F%2Fiyo%3D","updated":"2013-01-16 20:00:45.000000000","message":"sure sure","commit_id":"7224ae1636ae08c0684cac95d0ec88a188058a70"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"449ae6934f37fe5ad1f88b137409b25109188375","unresolved":false,"context_lines":[{"line_number":30,"context_line":"CONF \u003d cfg.CONF"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"if not hasattr(CONF, \u0027metadata_encryption_key\u0027):"},{"line_number":33,"context_line":"    CONF.register_opt(cfg.StrOpt(\u0027metadata_encryption_key\u0027, secret\u003dTrue))"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"def upgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FizQ%3D","line":33,"updated":"2013-01-16 17:14:38.000000000","message":"It would be cleaner to use CONF.import_opt here, I think.","commit_id":"7224ae1636ae08c0684cac95d0ec88a188058a70"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"b00eb6a866e250332c44a1e10d8fe64e5a529e83","unresolved":false,"context_lines":[{"line_number":30,"context_line":"CONF \u003d cfg.CONF"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"if not hasattr(CONF, \u0027metadata_encryption_key\u0027):"},{"line_number":33,"context_line":"    CONF.register_opt(cfg.StrOpt(\u0027metadata_encryption_key\u0027, secret\u003dTrue))"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"def upgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FieU%3D","line":33,"in_reply_to":"AAAAM3%2F%2FizQ%3D","updated":"2013-01-16 20:00:45.000000000","message":"ah interesting","commit_id":"7224ae1636ae08c0684cac95d0ec88a188058a70"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"449ae6934f37fe5ad1f88b137409b25109188375","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        msg \u003d _(\"\u0027metadata_encryption_key\u0027 was not specified in the config\""},{"line_number":56,"context_line":"                \" file or a config file was not specified. This means that\""},{"line_number":57,"context_line":"                \" this migration is a NOOP.\")"},{"line_number":58,"context_line":"        LOG.warn(msg)"},{"line_number":59,"context_line":"        return"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    meta \u003d sqlalchemy.schema.MetaData()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FizA%3D","line":58,"updated":"2013-01-16 17:14:38.000000000","message":"This could be an INFO-level statement, I think. WARN is a negative, yet non-fatal, level in my mind.","commit_id":"7224ae1636ae08c0684cac95d0ec88a188058a70"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"b00eb6a866e250332c44a1e10d8fe64e5a529e83","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        msg \u003d _(\"\u0027metadata_encryption_key\u0027 was not specified in the config\""},{"line_number":56,"context_line":"                \" file or a config file was not specified. This means that\""},{"line_number":57,"context_line":"                \" this migration is a NOOP.\")"},{"line_number":58,"context_line":"        LOG.warn(msg)"},{"line_number":59,"context_line":"        return"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    meta \u003d sqlalchemy.schema.MetaData()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fid8%3D","line":58,"in_reply_to":"AAAAM3%2F%2FizA%3D","updated":"2013-01-16 20:00:45.000000000","message":"yeah i spose i agree. Just want to make sure the people that need to know, do, but it wouldn\u0027t always be negative so you\u0027re right about that.","commit_id":"7224ae1636ae08c0684cac95d0ec88a188058a70"},{"author":{"_account_id":6493,"name":"John Bresnahan","email":"john@bresnahan.me","username":"jbresnah"},"change_message_id":"7e585293b22fe7fb4a65c8245a2fa00ea5e09095","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        location.parse_uri(decrypt_location(uri))"},{"line_number":121,"context_line":"        return encrypt_location(location.get_uri())"},{"line_number":122,"context_line":"    except TypeError:"},{"line_number":123,"context_line":"        pass"},{"line_number":124,"context_line":"    return uri"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FRBs%3D","line":123,"updated":"2013-01-30 22:45:51.000000000","message":"This TypeError exception seems to only be raised when the padding is not right.  However, if you substitute file://fake_file with file://ab a TypeError is not raised, instead it seems that a ValueError is raise.  Thus if URLs being converted happen to be of a length that would not require padding in a base64 encoding this will fail.  Perhaps it would be better to detect whether or not a URL needs decoding in another way.","commit_id":"6a914a34697403d19d8066a77743ad6f98c0e8fa"}],"glance/tests/unit/test_migrations.py":[{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"449ae6934f37fe5ad1f88b137409b25109188375","unresolved":false,"context_lines":[{"line_number":474,"context_line":"            conn.close()"},{"line_number":475,"context_line":"            return locations"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        locations \u003d [\u0027file://poop\u0027,"},{"line_number":478,"context_line":"                     \u0027swift://acct3A%foobar:pass@example.com/container/obj-id\u0027]"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        # Insert images with an unquoted image location"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fi1w%3D","line":477,"updated":"2013-01-16 17:14:38.000000000","message":"Unfortunately, I\u0027ve got to put my adult hat on and ask you to change this.\n\nGood try, though ;)","commit_id":"7224ae1636ae08c0684cac95d0ec88a188058a70"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"b00eb6a866e250332c44a1e10d8fe64e5a529e83","unresolved":false,"context_lines":[{"line_number":474,"context_line":"            conn.close()"},{"line_number":475,"context_line":"            return locations"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        locations \u003d [\u0027file://poop\u0027,"},{"line_number":478,"context_line":"                     \u0027swift://acct3A%foobar:pass@example.com/container/obj-id\u0027]"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        # Insert images with an unquoted image location"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fieg%3D","line":477,"in_reply_to":"AAAAM3%2F%2Fi1w%3D","updated":"2013-01-16 20:00:45.000000000","message":"hahaha whoops","commit_id":"7224ae1636ae08c0684cac95d0ec88a188058a70"}]}
