)]}'
{"swift/cli/relinker.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"4bd37a064a8e01cdc3f8f608048638cdebbdced3","unresolved":true,"context_lines":[{"line_number":275,"context_line":"        relink_partition_filter \u003d partial(partitions_filter,"},{"line_number":276,"context_line":"                                          states, part_power, next_part_power)"},{"line_number":277,"context_line":"        relink_hook_post_partition \u003d partial("},{"line_number":278,"context_line":"            hook_post_partition, states, STEP_RELINK, policy, diskfile_mgr)"},{"line_number":279,"context_line":"        relink_hashes_filter \u003d partial(hashes_filter, conf[\u0027devices\u0027],"},{"line_number":280,"context_line":"                                       next_part_power)"},{"line_number":281,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"81a073bf_b9f78696","line":278,"updated":"2021-03-12 15:24:35.000000000","message":"the stats processing change that\u0027s landed on master adds a logger to THIS partial and makes a \"merge conflict\" with the next line so I can\u0027t `git review` anymore w/o changing the commits of the other two changes that have already got a +A (but are failing zuul)","commit_id":"9feb0cb447bc17220e89e707535fe6b2ce5b9218"}],"swift/common/utils.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"acdf24ae23e96373a47ed291a2b740e24e7c2106","unresolved":true,"context_lines":[{"line_number":5804,"context_line":"    Takes a path and a partition power and returns the same path, but with the"},{"line_number":5805,"context_line":"    correct partition number. Most useful when increasing the partition power."},{"line_number":5806,"context_line":""},{"line_number":5807,"context_line":"    :param devices: full path to a file, for example object .data file"},{"line_number":5808,"context_line":"    :param path: full path to a object file or hashdir"},{"line_number":5809,"context_line":"    :param part_power: partition power to compute correct partition number"},{"line_number":5810,"context_line":"    :param is_hash_dir: if True then ``path`` is the path to a hash dir,"}],"source_content_type":"text/x-python","patch_set":2,"id":"93f6f81f_645e425b","line":5807,"range":{"start_line":5807,"start_character":20,"end_line":5807,"end_character":70},"updated":"2021-03-11 20:55:52.000000000","message":"eh?","commit_id":"9feb0cb447bc17220e89e707535fe6b2ce5b9218"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"846a51092f1c26a98b68f447b9d9fa55b38e5983","unresolved":true,"context_lines":[{"line_number":5804,"context_line":"    Takes a path and a partition power and returns the same path, but with the"},{"line_number":5805,"context_line":"    correct partition number. Most useful when increasing the partition power."},{"line_number":5806,"context_line":""},{"line_number":5807,"context_line":"    :param devices: full path to a file, for example object .data file"},{"line_number":5808,"context_line":"    :param path: full path to a object file or hashdir"},{"line_number":5809,"context_line":"    :param part_power: partition power to compute correct partition number"},{"line_number":5810,"context_line":"    :param is_hash_dir: if True then ``path`` is the path to a hash dir,"}],"source_content_type":"text/x-python","patch_set":2,"id":"aa0bdd05_ef7fc4e8","line":5807,"range":{"start_line":5807,"start_character":20,"end_line":5807,"end_character":70},"in_reply_to":"93f6f81f_645e425b","updated":"2021-03-12 14:16:18.000000000","message":"yeah, i\u0027m not sure #willfix","commit_id":"9feb0cb447bc17220e89e707535fe6b2ce5b9218"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"acdf24ae23e96373a47ed291a2b740e24e7c2106","unresolved":true,"context_lines":[{"line_number":5811,"context_line":"        otherwise ``path`` is the path to a file in a hash dir."},{"line_number":5812,"context_line":"    :returns: Path with re-computed partition power"},{"line_number":5813,"context_line":"    \"\"\""},{"line_number":5814,"context_line":"    offset \u003d len(devices.rstrip(os.sep).split(os.sep))"},{"line_number":5815,"context_line":"    path_components \u003d path.split(os.sep)"},{"line_number":5816,"context_line":"    part \u003d get_partition_for_hash(path_components[offset + 4], part_power)"},{"line_number":5817,"context_line":"    path_components[offset + 2] \u003d \"%d\" % part"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f88311e_031a304d","line":5814,"updated":"2021-03-11 20:55:52.000000000","message":"Should we have a\n\n if not path.startswith(devices.rstrip(os.sep) + os.sep):\n     raise ValueError\n\n?","commit_id":"9feb0cb447bc17220e89e707535fe6b2ce5b9218"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"846a51092f1c26a98b68f447b9d9fa55b38e5983","unresolved":true,"context_lines":[{"line_number":5811,"context_line":"        otherwise ``path`` is the path to a file in a hash dir."},{"line_number":5812,"context_line":"    :returns: Path with re-computed partition power"},{"line_number":5813,"context_line":"    \"\"\""},{"line_number":5814,"context_line":"    offset \u003d len(devices.rstrip(os.sep).split(os.sep))"},{"line_number":5815,"context_line":"    path_components \u003d path.split(os.sep)"},{"line_number":5816,"context_line":"    part \u003d get_partition_for_hash(path_components[offset + 4], part_power)"},{"line_number":5817,"context_line":"    path_components[offset + 2] \u003d \"%d\" % part"}],"source_content_type":"text/x-python","patch_set":2,"id":"147b84b6_6729ceaa","line":5814,"in_reply_to":"1f88311e_031a304d","updated":"2021-03-12 14:16:18.000000000","message":"we could add a little valiation, yeah","commit_id":"9feb0cb447bc17220e89e707535fe6b2ce5b9218"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a78dcfc032155337f6ed958308acffc9e2277b9f","unresolved":true,"context_lines":[{"line_number":5813,"context_line":"    \"\"\""},{"line_number":5814,"context_line":"    offset_parts \u003d devices.rstrip(os.sep).split(os.sep)"},{"line_number":5815,"context_line":"    path_components \u003d path.split(os.sep)"},{"line_number":5816,"context_line":"    if offset_parts \u003d\u003d path_components[:len(offset_parts)]:"},{"line_number":5817,"context_line":"        offset \u003d len(offset_parts)"},{"line_number":5818,"context_line":"    else:"},{"line_number":5819,"context_line":"        raise ValueError(\u0027Path %r is not under device dir %r\u0027 % ("}],"source_content_type":"text/x-python","patch_set":3,"id":"2a9f5e6b_7607c3c0","line":5816,"updated":"2021-03-17 12:28:00.000000000","message":"could probably also have used \n\n  if os.path.commonprefix((path, devices)) \u003d\u003d devices\n\nbut we need to split path into parts anyway so NM","commit_id":"f0470c24ff3c38dd418903dca1f7ac8b4c7eae8b"}]}
