)]}'
{"nova/tests/unit/virt/vmwareapi/fake.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"27ea5a16feac0ff03cf39738491ce75735e2ff96","unresolved":false,"context_lines":[{"line_number":1380,"context_line":"            for file in _db_content.get(\"files\"):"},{"line_number":1381,"context_line":"                if file.find(ds_path) !\u003d -1:"},{"line_number":1382,"context_line":"                    if not file.endswith(ds_path):"},{"line_number":1383,"context_line":"                        path \u003d file.replace(dname, \u0027\u0027, 1).split(\u0027/\u0027)"},{"line_number":1384,"context_line":"                        if path:"},{"line_number":1385,"context_line":"                            matched_files.add(path[0])"},{"line_number":1386,"context_line":"            if not matched_files:"}],"source_content_type":"text/x-python","patch_set":10,"id":"3ab451fb_67173da4","line":1383,"updated":"2015-04-17 17:49:31.000000000","message":"This is in no way the same as what was there. Specifically, \u0027  foo\u0027 would be \u0027 foo\u0027, and \u0027foo bar\u0027 would be \u0027foobar\u0027 under the new code, but not under the old code. Do we have guarantees that this can\u0027t happen? If so, can we document them in the review here?\n\nAlso, how is this related to the hash seed?","commit_id":"b2d5c237c53cb8498dabbef4921c8ea5f322615b"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"1019f46c3b4b49dcdebb29835b35d551e381c2c3","unresolved":false,"context_lines":[{"line_number":1380,"context_line":"            for file in _db_content.get(\"files\"):"},{"line_number":1381,"context_line":"                if file.find(ds_path) !\u003d -1:"},{"line_number":1382,"context_line":"                    if not file.endswith(ds_path):"},{"line_number":1383,"context_line":"                        path \u003d file.replace(dname, \u0027\u0027, 1).split(\u0027/\u0027)"},{"line_number":1384,"context_line":"                        if path:"},{"line_number":1385,"context_line":"                            matched_files.add(path[0])"},{"line_number":1386,"context_line":"            if not matched_files:"}],"source_content_type":"text/x-python","patch_set":10,"id":"dac4157f_504d2471","line":1383,"in_reply_to":"3ab451fb_67173da4","updated":"2015-04-20 08:52:49.000000000","message":"Dan, here is example where lstrip cause fail:\n\u003e\u003e\u003e file \u003d \u0027[ds1] vmware_base/a6fa36fc-c930-4bf3-8c8a-ea2a2420deb6/\u0027\n\u003e\u003e\u003e dname \u003d \u0027[ds1] vmware_base/\u0027\n\u003e\u003e\u003e path \u003d file.lstrip(dname)\n\u003e\u003e\u003e path\n\u00276fa36fc-c930-4bf3-8c8a-ea2a2420deb6/\u0027\n\nReplace treats first argument as sequence of characters(string), while lstrip suppose it is unordered set. In example above this cause unexpected result(compare uids).\nTo  achive wanted behavior, there is also third argument equals 1 in replace. it protects us from unwanted replaces in other parts of the path.","commit_id":"b2d5c237c53cb8498dabbef4921c8ea5f322615b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"00cbff72fca7effc94502edd8fbbefc9794754af","unresolved":false,"context_lines":[{"line_number":1380,"context_line":"            for file in _db_content.get(\"files\"):"},{"line_number":1381,"context_line":"                if file.find(ds_path) !\u003d -1:"},{"line_number":1382,"context_line":"                    if not file.endswith(ds_path):"},{"line_number":1383,"context_line":"                        path \u003d file.replace(dname, \u0027\u0027, 1).split(\u0027/\u0027)"},{"line_number":1384,"context_line":"                        if path:"},{"line_number":1385,"context_line":"                            matched_files.add(path[0])"},{"line_number":1386,"context_line":"            if not matched_files:"}],"source_content_type":"text/x-python","patch_set":10,"id":"dac4157f_98d3d538","line":1383,"in_reply_to":"dac4157f_21f38075","updated":"2015-04-20 14:40:22.000000000","message":"I just wanted to make sure that we didn\u0027t under-analyze what seemed to be an equivalent piece of more-deterministic code.","commit_id":"b2d5c237c53cb8498dabbef4921c8ea5f322615b"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"66b0ad5ba2ab92b169425f888cc9376cb8abeb5c","unresolved":false,"context_lines":[{"line_number":1380,"context_line":"            for file in _db_content.get(\"files\"):"},{"line_number":1381,"context_line":"                if file.find(ds_path) !\u003d -1:"},{"line_number":1382,"context_line":"                    if not file.endswith(ds_path):"},{"line_number":1383,"context_line":"                        path \u003d file.replace(dname, \u0027\u0027, 1).split(\u0027/\u0027)"},{"line_number":1384,"context_line":"                        if path:"},{"line_number":1385,"context_line":"                            matched_files.add(path[0])"},{"line_number":1386,"context_line":"            if not matched_files:"}],"source_content_type":"text/x-python","patch_set":10,"id":"dac4157f_21f38075","line":1383,"in_reply_to":"dac4157f_504d2471","updated":"2015-04-20 10:37:11.000000000","message":"Dan, this is a bug caused by a misunderstanding of lstrip. The intention is pretty obvious from the context, but it\u0027s also pretty obvious that it doesn\u0027t do it. It currently only works by coincidence, so I can well believe that poking something down the patch series would trigger it. I wouldn\u0027t spend time over-analysing a trivial bugfix.\n\nIncidentally, I also fixed it last year in a now-abandoned patch series.","commit_id":"b2d5c237c53cb8498dabbef4921c8ea5f322615b"}]}
