)]}'
{"nova/tests/unit/virt/libvirt/storage/test_dmcrypt.py":[{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"22850bbf38d669a7dff6418de3614058ce4577fc","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        self.NAME \u003d \u0027disk\u0027"},{"line_number":31,"context_line":"        self.TARGET \u003d dmcrypt.volume_name(self.NAME)"},{"line_number":32,"context_line":"        self.PATH \u003d \u0027/dev/nova-lvm/instance_disk\u0027"},{"line_number":33,"context_line":"        self.KEY \u003d \u0027\u0027.join(str(x) for x in range(0, self.KEY_SIZE))"},{"line_number":34,"context_line":"        self.KEY_STR \u003d \\"},{"line_number":35,"context_line":"            binascii.hexlify(bytes(self.KEY, \u0027utf-8\u0027)).decode(\u0027utf-8\u0027)"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_358bdb1f","line":33,"updated":"2017-05-08 19:14:54.000000000","message":"Perhaps this needs to be self.KEY \u003d b\u0027\u0027.join(....)","commit_id":"0726453a9df7a703ff843ba837d541af8ac8be49"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"8d91a8366cb5d001b6a85e4f34cd797bfae94f65","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        self.NAME \u003d \u0027disk\u0027"},{"line_number":31,"context_line":"        self.TARGET \u003d dmcrypt.volume_name(self.NAME)"},{"line_number":32,"context_line":"        self.PATH \u003d \u0027/dev/nova-lvm/instance_disk\u0027"},{"line_number":33,"context_line":"        self.KEY \u003d \u0027\u0027.join(str(x) for x in range(0, self.KEY_SIZE))"},{"line_number":34,"context_line":"        self.KEY_STR \u003d \\"},{"line_number":35,"context_line":"            binascii.hexlify(bytes(self.KEY, \u0027utf-8\u0027)).decode(\u0027utf-8\u0027)"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_352cfb00","line":33,"in_reply_to":"3f044301_358bdb1f","updated":"2017-05-08 19:22:53.000000000","message":"That doesn\u0027t quite work. What about:\n\n  self.KEY \u003d \u0027\u0027.join(str(x) for x in range(0, self.KEY_SIZE)).encode()","commit_id":"0726453a9df7a703ff843ba837d541af8ac8be49"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"22850bbf38d669a7dff6418de3614058ce4577fc","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self.PATH \u003d \u0027/dev/nova-lvm/instance_disk\u0027"},{"line_number":33,"context_line":"        self.KEY \u003d \u0027\u0027.join(str(x) for x in range(0, self.KEY_SIZE))"},{"line_number":34,"context_line":"        self.KEY_STR \u003d \\"},{"line_number":35,"context_line":"            binascii.hexlify(bytes(self.KEY, \u0027utf-8\u0027)).decode(\u0027utf-8\u0027)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @mock.patch(\u0027nova.utils.execute\u0027)"},{"line_number":38,"context_line":"    def test_create_volume(self, mock_execute):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_f584530e","line":35,"range":{"start_line":35,"start_character":45,"end_line":35,"end_character":52},"updated":"2017-05-08 19:14:54.000000000","message":"This probably needs to be removed.","commit_id":"0726453a9df7a703ff843ba837d541af8ac8be49"},{"author":{"_account_id":8623,"name":"Kaitlin Farr","email":"kaitlin.farr@jhuapl.edu","username":"kaitlin.farr"},"change_message_id":"db376e01dfe1713c66603565d3745af49d45f8c4","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        self.NAME \u003d \u0027disk\u0027"},{"line_number":31,"context_line":"        self.TARGET \u003d dmcrypt.volume_name(self.NAME)"},{"line_number":32,"context_line":"        self.PATH \u003d \u0027/dev/nova-lvm/instance_disk\u0027"},{"line_number":33,"context_line":"        self.KEY \u003d \u0027\u0027.join(str(x) for x in range(0, self.KEY_SIZE)).encode()"},{"line_number":34,"context_line":"        self.KEY_STR \u003d binascii.hexlify(self.KEY).decode(\u0027utf-8\u0027)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @mock.patch(\u0027nova.utils.execute\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f044301_a41d7b10","line":33,"range":{"start_line":33,"start_character":8,"end_line":33,"end_character":76},"updated":"2017-05-09 03:26:19.000000000","message":"This results in a key that\u0027s actually 658 bytes long.  What about:\n\nself.KEY \u003d bytes(bytearray(x for x in range(0, self.KEY_SIZE)))","commit_id":"fe962ac9272a81e2413ff591ca6064720fc1b138"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"8a837f601225c95a7ba52366693870dc7c556741","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        self.NAME \u003d \u0027disk\u0027"},{"line_number":31,"context_line":"        self.TARGET \u003d dmcrypt.volume_name(self.NAME)"},{"line_number":32,"context_line":"        self.PATH \u003d \u0027/dev/nova-lvm/instance_disk\u0027"},{"line_number":33,"context_line":"        self.KEY \u003d \u0027\u0027.join(str(x) for x in range(0, self.KEY_SIZE)).encode()"},{"line_number":34,"context_line":"        self.KEY_STR \u003d binascii.hexlify(self.KEY).decode(\u0027utf-8\u0027)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @mock.patch(\u0027nova.utils.execute\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f044301_aa3e5ad7","line":33,"range":{"start_line":33,"start_character":8,"end_line":33,"end_character":76},"in_reply_to":"3f044301_a41d7b10","updated":"2017-05-09 17:38:30.000000000","message":"Good call. Done.","commit_id":"fe962ac9272a81e2413ff591ca6064720fc1b138"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5b9bfd3277e9d8aa394ed5176b28d7ef5ba9a71e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        self.NAME \u003d \u0027disk\u0027"},{"line_number":31,"context_line":"        self.TARGET \u003d dmcrypt.volume_name(self.NAME)"},{"line_number":32,"context_line":"        self.PATH \u003d \u0027/dev/nova-lvm/instance_disk\u0027"},{"line_number":33,"context_line":"        self.KEY \u003d bytes(bytearray(x for x in range(0, self.KEY_SIZE)))"},{"line_number":34,"context_line":"        self.KEY_STR \u003d binascii.hexlify(self.KEY).decode(\u0027utf-8\u0027)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @mock.patch(\u0027nova.utils.execute\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff0f0b1f_8484dc5f","line":33,"range":{"start_line":33,"start_character":35,"end_line":33,"end_character":46},"updated":"2017-05-19 14:19:07.000000000","message":"this seems unnecessary? I thought it was here because range is an iterator in Python 3, but bytearray in Python 3 handles iterators just fine","commit_id":"53a71c1241aac70018c16d174032427a172378ed"}],"nova/virt/libvirt/storage/dmcrypt.py":[{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"e2834bfe8ca058b787ae0b4eeeb8d4f4b764e871","unresolved":false,"context_lines":[{"line_number":62,"context_line":"           \u0027--cipher\u003d\u0027 + cipher,"},{"line_number":63,"context_line":"           \u0027--key-size\u003d\u0027 + str(key_size),"},{"line_number":64,"context_line":"           \u0027--key-file\u003d-\u0027)"},{"line_number":65,"context_line":"    # NOTE(lyarwood): This replicates the methods used prior to Newton to"},{"line_number":66,"context_line":"    # first encode the passphrase as a list of unsigned int\u0027s before"},{"line_number":67,"context_line":"    # decoding back into a string. This method strips any leading 0\u0027s"},{"line_number":68,"context_line":"    # of the resulting hex digit pairs, resulting in a different"},{"line_number":69,"context_line":"    # passphrase being returned."},{"line_number":70,"context_line":"    encoded_key \u003d array.array(\u0027B\u0027, key).tolist()"},{"line_number":71,"context_line":"    key \u003d \u0027\u0027.join(map(lambda byte: \"%02x\" % byte, encoded_key))"},{"line_number":72,"context_line":"    try:"},{"line_number":73,"context_line":"        utils.execute(*cmd, process_input\u003dkey, run_as_root\u003dTrue)"},{"line_number":74,"context_line":"    except processutils.ProcessExecutionError as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f044301_75d2985e","line":71,"range":{"start_line":65,"start_character":0,"end_line":71,"end_character":63},"updated":"2017-05-07 15:26:41.000000000","message":"Shouldn\u0027t we just use the new binascii method?\n\n    key \u003d binascii.hexlify(key).decode(\u0027utf-8\u0027)\n\nhttps://github.com/openstack/os-brick/blob/6cf9b1cd689f70a2c50c0fa83a9a9f7c502712a1/os_brick/encryptors/cryptsetup.py#L100-L102","commit_id":"291b8ccb67becc3ed57f92eb70e484ba42168ddd"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"c94aa5be3331801b92da3f467980d3b04e7a8823","unresolved":false,"context_lines":[{"line_number":62,"context_line":"           \u0027--cipher\u003d\u0027 + cipher,"},{"line_number":63,"context_line":"           \u0027--key-size\u003d\u0027 + str(key_size),"},{"line_number":64,"context_line":"           \u0027--key-file\u003d-\u0027)"},{"line_number":65,"context_line":"    # NOTE(lyarwood): This replicates the methods used prior to Newton to"},{"line_number":66,"context_line":"    # first encode the passphrase as a list of unsigned int\u0027s before"},{"line_number":67,"context_line":"    # decoding back into a string. This method strips any leading 0\u0027s"},{"line_number":68,"context_line":"    # of the resulting hex digit pairs, resulting in a different"},{"line_number":69,"context_line":"    # passphrase being returned."},{"line_number":70,"context_line":"    encoded_key \u003d array.array(\u0027B\u0027, key).tolist()"},{"line_number":71,"context_line":"    key \u003d \u0027\u0027.join(map(lambda byte: \"%02x\" % byte, encoded_key))"},{"line_number":72,"context_line":"    try:"},{"line_number":73,"context_line":"        utils.execute(*cmd, process_input\u003dkey, run_as_root\u003dTrue)"},{"line_number":74,"context_line":"    except processutils.ProcessExecutionError as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f044301_d2517064","line":71,"range":{"start_line":65,"start_character":0,"end_line":71,"end_character":63},"in_reply_to":"3f044301_2747387b","updated":"2017-05-08 15:53:23.000000000","message":"Yes, the line I suggested replaces both lines added here and the comment.","commit_id":"291b8ccb67becc3ed57f92eb70e484ba42168ddd"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"8aed4fd788e9aeaafebc1b91a3b5665d73848c71","unresolved":false,"context_lines":[{"line_number":62,"context_line":"           \u0027--cipher\u003d\u0027 + cipher,"},{"line_number":63,"context_line":"           \u0027--key-size\u003d\u0027 + str(key_size),"},{"line_number":64,"context_line":"           \u0027--key-file\u003d-\u0027)"},{"line_number":65,"context_line":"    # NOTE(lyarwood): This replicates the methods used prior to Newton to"},{"line_number":66,"context_line":"    # first encode the passphrase as a list of unsigned int\u0027s before"},{"line_number":67,"context_line":"    # decoding back into a string. This method strips any leading 0\u0027s"},{"line_number":68,"context_line":"    # of the resulting hex digit pairs, resulting in a different"},{"line_number":69,"context_line":"    # passphrase being returned."},{"line_number":70,"context_line":"    encoded_key \u003d array.array(\u0027B\u0027, key).tolist()"},{"line_number":71,"context_line":"    key \u003d \u0027\u0027.join(map(lambda byte: \"%02x\" % byte, encoded_key))"},{"line_number":72,"context_line":"    try:"},{"line_number":73,"context_line":"        utils.execute(*cmd, process_input\u003dkey, run_as_root\u003dTrue)"},{"line_number":74,"context_line":"    except processutils.ProcessExecutionError as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f044301_ec601704","line":71,"range":{"start_line":65,"start_character":0,"end_line":71,"end_character":63},"in_reply_to":"3f044301_75d2985e","updated":"2017-05-08 14:32:09.000000000","message":"Lee, that makes sense and is much simpler. I\u0027ll update in my next patch.","commit_id":"291b8ccb67becc3ed57f92eb70e484ba42168ddd"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"a18e66ba3002999b58a3af227d30049030e872cd","unresolved":false,"context_lines":[{"line_number":62,"context_line":"           \u0027--cipher\u003d\u0027 + cipher,"},{"line_number":63,"context_line":"           \u0027--key-size\u003d\u0027 + str(key_size),"},{"line_number":64,"context_line":"           \u0027--key-file\u003d-\u0027)"},{"line_number":65,"context_line":"    # NOTE(lyarwood): This replicates the methods used prior to Newton to"},{"line_number":66,"context_line":"    # first encode the passphrase as a list of unsigned int\u0027s before"},{"line_number":67,"context_line":"    # decoding back into a string. This method strips any leading 0\u0027s"},{"line_number":68,"context_line":"    # of the resulting hex digit pairs, resulting in a different"},{"line_number":69,"context_line":"    # passphrase being returned."},{"line_number":70,"context_line":"    encoded_key \u003d array.array(\u0027B\u0027, key).tolist()"},{"line_number":71,"context_line":"    key \u003d \u0027\u0027.join(map(lambda byte: \"%02x\" % byte, encoded_key))"},{"line_number":72,"context_line":"    try:"},{"line_number":73,"context_line":"        utils.execute(*cmd, process_input\u003dkey, run_as_root\u003dTrue)"},{"line_number":74,"context_line":"    except processutils.ProcessExecutionError as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f044301_2747387b","line":71,"range":{"start_line":65,"start_character":0,"end_line":71,"end_character":63},"in_reply_to":"3f044301_ec601704","updated":"2017-05-08 15:24:23.000000000","message":"At this point, wouldn\u0027t it make more sense to just remove the encoding to a list of unsigned int\u0027s, and go straight to the decoding using the binascii method?","commit_id":"291b8ccb67becc3ed57f92eb70e484ba42168ddd"}]}
