)]}'
{"swift/cli/relinker.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7677788f0a223ed520b5f114902c694246961723","unresolved":true,"context_lines":[{"line_number":369,"context_line":"            # most up to date set of files. The new location may have newer"},{"line_number":370,"context_line":"            # files if it has been updated since relinked."},{"line_number":371,"context_line":"            new_hash_path \u003d replace_partition_in_path("},{"line_number":372,"context_line":"                hash_path + \u0027/dummy\u0027, part_power)[:-6]"},{"line_number":373,"context_line":"            # Get on disk data for new and old locations, cleaning up any"},{"line_number":374,"context_line":"            # reclaimable or obsolete files in each. The new location is"},{"line_number":375,"context_line":"            # cleaned up *before* the old location to prevent false negatives"}],"source_content_type":"text/x-python","patch_set":2,"id":"deb5ac5d_154f7b83","line":372,"range":{"start_line":372,"start_character":28,"end_line":372,"end_character":54},"updated":"2021-03-11 03:20:02.000000000","message":"This feels kinda dumb -- how about we add an is_hash_dir kwarg or something?","commit_id":"7c04001c5d8a963bcb44f718e13ceb8a5929a243"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7677788f0a223ed520b5f114902c694246961723","unresolved":true,"context_lines":[{"line_number":384,"context_line":"            old_files \u003d set(old_df_data[\u0027files\u0027])"},{"line_number":385,"context_line":"            union_files \u003d new_files.union(old_files)"},{"line_number":386,"context_line":"            union_data \u003d diskfile_mgr.get_ondisk_files("},{"line_number":387,"context_line":"                union_files, \u0027\u0027, verify\u003dFalse)"},{"line_number":388,"context_line":"            obsolete_files \u003d set(info[\u0027filename\u0027]"},{"line_number":389,"context_line":"                                 for info in union_data.get(\u0027obsolete\u0027, []))"},{"line_number":390,"context_line":"            required_files \u003d union_files.difference(obsolete_files)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ceada7a_0ebcfca9","line":387,"range":{"start_line":387,"start_character":16,"end_line":387,"end_character":27},"updated":"2021-03-11 03:20:02.000000000","message":"We don\u0027t need to sort this? Why do we sort them in cleanup_ondisk_files? I guess it\u0027s all for the sake of results[\u0027files\u0027]...","commit_id":"7c04001c5d8a963bcb44f718e13ceb8a5929a243"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7677788f0a223ed520b5f114902c694246961723","unresolved":true,"context_lines":[{"line_number":390,"context_line":"            required_files \u003d union_files.difference(obsolete_files)"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"            # new location must have at least the set of required files"},{"line_number":393,"context_line":"            if not new_files.issuperset(required_files):"},{"line_number":394,"context_line":"                # TODO: should this warning be more dictinct and or more"},{"line_number":395,"context_line":"                # succinct? this is the *bad* case"},{"line_number":396,"context_line":"                logger.warning("}],"source_content_type":"text/x-python","patch_set":2,"id":"f5f59a6c_6737ab6a","line":393,"updated":"2021-03-11 03:20:02.000000000","message":"Should we further verify that inodes match in old and new for required_files.intersection(old_files)?","commit_id":"7c04001c5d8a963bcb44f718e13ceb8a5929a243"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7677788f0a223ed520b5f114902c694246961723","unresolved":true,"context_lines":[{"line_number":391,"context_line":""},{"line_number":392,"context_line":"            # new location must have at least the set of required files"},{"line_number":393,"context_line":"            if not new_files.issuperset(required_files):"},{"line_number":394,"context_line":"                # TODO: should this warning be more dictinct and or more"},{"line_number":395,"context_line":"                # succinct? this is the *bad* case"},{"line_number":396,"context_line":"                logger.warning("},{"line_number":397,"context_line":"                    \u0027Error cleaning up %s: files %s need relinking to %s\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"6808db0c_7eb8094f","line":394,"range":{"start_line":394,"start_character":47,"end_line":394,"end_character":60},"updated":"2021-03-11 03:20:02.000000000","message":"\"need relinking\" seems to be pretty distinct (at least, in the current code base).","commit_id":"7c04001c5d8a963bcb44f718e13ceb8a5929a243"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7677788f0a223ed520b5f114902c694246961723","unresolved":true,"context_lines":[{"line_number":403,"context_line":"            # new location must not be corrupt"},{"line_number":404,"context_line":"            # TODO: should we open the diskfile earlier? If so, it would still"},{"line_number":405,"context_line":"            # be good to know if the files are all in the new location, even if"},{"line_number":406,"context_line":"            # the diskfile open raises an error"},{"line_number":407,"context_line":"            loc \u003d diskfile.AuditLocation("},{"line_number":408,"context_line":"                new_hash_path, device, partition, policy)"},{"line_number":409,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7043a668_16cdaaeb","line":406,"updated":"2021-03-11 03:20:02.000000000","message":"I\u0027m tempted to say we skip opening in the new -- I\u0027m not actually sure corruption matters as long as we compare inodes in stat results. For any given filename in the new, either\n\n* there\u0027s no such file in the old,\n* there\u0027s a hardlink to the same inode in the old, or\n* the same filename exists in the old but as some other file.\n\nFor the first two, corruption\u0027s moot -- we don\u0027t have a good copy to go back to. For the last, we can\u0027t resolve the state anyway and need to bring it to the operator\u0027s attention.","commit_id":"7c04001c5d8a963bcb44f718e13ceb8a5929a243"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7677788f0a223ed520b5f114902c694246961723","unresolved":true,"context_lines":[{"line_number":408,"context_line":"                new_hash_path, device, partition, policy)"},{"line_number":409,"context_line":"            try:"},{"line_number":410,"context_line":"                df \u003d diskfile_mgr.get_diskfile_from_audit_location(loc)"},{"line_number":411,"context_line":"                with df.open():"},{"line_number":412,"context_line":"                    pass"},{"line_number":413,"context_line":"            except DiskFileQuarantined as exc:"},{"line_number":414,"context_line":"                logger.warning(\u0027ERROR Object %(obj)s failed audit and was\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a729a56_f4123782","line":411,"updated":"2021-03-11 03:20:02.000000000","message":"Plus, this is another opportunity for things to get cleaned up... meaning our file lists are out of date.","commit_id":"7c04001c5d8a963bcb44f718e13ceb8a5929a243"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7677788f0a223ed520b5f114902c694246961723","unresolved":true,"context_lines":[{"line_number":426,"context_line":"            rehash \u003d False"},{"line_number":427,"context_line":"            try:"},{"line_number":428,"context_line":"                for filename in old_files:"},{"line_number":429,"context_line":"                    os.remove(os.path.join(hash_path, filename))"},{"line_number":430,"context_line":"                    rehash \u003d True"},{"line_number":431,"context_line":"            except OSError as exc:"},{"line_number":432,"context_line":"                logger.warning(\u0027Error cleaning up %s: %r\u0027, hash_path, exc)"}],"source_content_type":"text/x-python","patch_set":2,"id":"c11e8eb6_e3ec659e","line":429,"updated":"2021-03-11 03:20:02.000000000","message":"Now that we\u0027re dealing with hashdirs -- should we just rmtree? Or are we worried about a concurrent write that\u0027s still targeting the old part?","commit_id":"7c04001c5d8a963bcb44f718e13ceb8a5929a243"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7677788f0a223ed520b5f114902c694246961723","unresolved":true,"context_lines":[{"line_number":429,"context_line":"                    os.remove(os.path.join(hash_path, filename))"},{"line_number":430,"context_line":"                    rehash \u003d True"},{"line_number":431,"context_line":"            except OSError as exc:"},{"line_number":432,"context_line":"                logger.warning(\u0027Error cleaning up %s: %r\u0027, hash_path, exc)"},{"line_number":433,"context_line":"                errors +\u003d 1"},{"line_number":434,"context_line":"            else:"},{"line_number":435,"context_line":"                cleaned_up +\u003d 1"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff67f61b_0d2fbc5f","line":432,"updated":"2021-03-11 03:20:02.000000000","message":"This should probably tolerate ENOENT in case something comes along while we\u0027re processing and reaps a tombstone or something. So it probably needs to get pushed down into the for loop.","commit_id":"7c04001c5d8a963bcb44f718e13ceb8a5929a243"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"654664d54fa040a0edbf9d17d6ba883ce2b74d49","unresolved":true,"context_lines":[{"line_number":422,"context_line":"                    errors +\u003d 1"},{"line_number":423,"context_line":"                    continue"},{"line_number":424,"context_line":"            try:"},{"line_number":425,"context_line":"                os.remove(fname)"},{"line_number":426,"context_line":"                cleaned_up +\u003d 1"},{"line_number":427,"context_line":"                logger.debug(\"Removed %s\", fname)"},{"line_number":428,"context_line":"                suffix_dir \u003d os.path.dirname(os.path.dirname(fname))"}],"source_content_type":"text/x-python","patch_set":3,"id":"3463cc85_814c6246","side":"PARENT","line":425,"updated":"2021-03-11 16:33:28.000000000","message":"oh yeah, going dir-by-dir is way better than file-by-file","commit_id":"c2f619129c7f1f714229a1be31303dd7520c040f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"654664d54fa040a0edbf9d17d6ba883ce2b74d49","unresolved":true,"context_lines":[{"line_number":383,"context_line":"            new_files \u003d set(new_df_data[\u0027files\u0027])"},{"line_number":384,"context_line":"            old_files \u003d set(old_df_data[\u0027files\u0027])"},{"line_number":385,"context_line":"            union_files \u003d new_files.union(old_files)"},{"line_number":386,"context_line":"            union_data \u003d diskfile_mgr.get_ondisk_files("},{"line_number":387,"context_line":"                union_files, \u0027\u0027, verify\u003dFalse)"},{"line_number":388,"context_line":"            obsolete_files \u003d set(info[\u0027filename\u0027]"},{"line_number":389,"context_line":"                                 for info in union_data.get(\u0027obsolete\u0027, []))"}],"source_content_type":"text/x-python","patch_set":3,"id":"320dfceb_4169e97a","line":386,"updated":"2021-03-11 16:33:28.000000000","message":"get/cleanup ondisk_files always confuses me - but i *think* I\u0027m following all this set math","commit_id":"83820bd8a84989286363611e66e6ef9ef02dbd97"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"654664d54fa040a0edbf9d17d6ba883ce2b74d49","unresolved":true,"context_lines":[{"line_number":429,"context_line":"                    os.remove(os.path.join(hash_path, filename))"},{"line_number":430,"context_line":"                    rehash \u003d True"},{"line_number":431,"context_line":"            except OSError as exc:"},{"line_number":432,"context_line":"                logger.warning(\u0027Error cleaning up %s: %r\u0027, hash_path, exc)"},{"line_number":433,"context_line":"                errors +\u003d 1"},{"line_number":434,"context_line":"            else:"},{"line_number":435,"context_line":"                cleaned_up +\u003d 1"}],"source_content_type":"text/x-python","patch_set":3,"id":"0ecdd7da_99df4750","line":432,"updated":"2021-03-11 16:33:28.000000000","message":"should this catch per-file instead of stopping at the first error?","commit_id":"83820bd8a84989286363611e66e6ef9ef02dbd97"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"745ff9fe1842694e6c4cd05b249aa7c09f9acbe2","unresolved":false,"context_lines":[{"line_number":429,"context_line":"                    os.remove(os.path.join(hash_path, filename))"},{"line_number":430,"context_line":"                    rehash \u003d True"},{"line_number":431,"context_line":"            except OSError as exc:"},{"line_number":432,"context_line":"                logger.warning(\u0027Error cleaning up %s: %r\u0027, hash_path, exc)"},{"line_number":433,"context_line":"                errors +\u003d 1"},{"line_number":434,"context_line":"            else:"},{"line_number":435,"context_line":"                cleaned_up +\u003d 1"}],"source_content_type":"text/x-python","patch_set":3,"id":"0a462e67_c6db1dc2","line":432,"in_reply_to":"0ecdd7da_99df4750","updated":"2021-03-11 20:49:37.000000000","message":"Done","commit_id":"83820bd8a84989286363611e66e6ef9ef02dbd97"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"654664d54fa040a0edbf9d17d6ba883ce2b74d49","unresolved":true,"context_lines":[{"line_number":438,"context_line":"            if rehash:"},{"line_number":439,"context_line":"                try:"},{"line_number":440,"context_line":"                    diskfile.invalidate_hash(os.path.dirname(hash_path))"},{"line_number":441,"context_line":"                except Exception as exc:"},{"line_number":442,"context_line":"                    # note: not counted as an error"},{"line_number":443,"context_line":"                    logger.warning("},{"line_number":444,"context_line":"                        \u0027Error invalidating suffix for %s: %r\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"a553d35d_6d84b645","line":441,"updated":"2021-03-11 16:33:28.000000000","message":"maybe reasonable; but if we\u0027re not actually expecting any kind of error here we might just want to re-organize the code so we can let any error during operation on a hashdir bubble-up and move onto the next hash","commit_id":"83820bd8a84989286363611e66e6ef9ef02dbd97"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"745ff9fe1842694e6c4cd05b249aa7c09f9acbe2","unresolved":false,"context_lines":[{"line_number":438,"context_line":"            if rehash:"},{"line_number":439,"context_line":"                try:"},{"line_number":440,"context_line":"                    diskfile.invalidate_hash(os.path.dirname(hash_path))"},{"line_number":441,"context_line":"                except Exception as exc:"},{"line_number":442,"context_line":"                    # note: not counted as an error"},{"line_number":443,"context_line":"                    logger.warning("},{"line_number":444,"context_line":"                        \u0027Error invalidating suffix for %s: %r\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"d103d828_4a0a2bb0","line":441,"in_reply_to":"a553d35d_6d84b645","updated":"2021-03-11 20:49:37.000000000","message":"agree, but leaving for follow up","commit_id":"83820bd8a84989286363611e66e6ef9ef02dbd97"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8ed83c0044fc5dca79125e3ba6f717768369d2a2","unresolved":true,"context_lines":[{"line_number":373,"context_line":"                hash_path, part_power, is_hash_dir\u003dTrue)"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"            if new_hash_path \u003d\u003d hash_path:"},{"line_number":376,"context_line":"                continue"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"            # Get on disk data for new and old locations, cleaning up any"},{"line_number":379,"context_line":"            # reclaimable or obsolete files in each. The new location is"}],"source_content_type":"text/x-python","patch_set":4,"id":"a23798c8_e4f1aa17","line":376,"updated":"2021-03-11 20:49:29.000000000","message":"We should\u0027ve caught this with our cleanup_hashes_filter, no? Belt \u0026 bracers, I suppose.","commit_id":"228d44209790775f4b0ad4041a4d01440da44653"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"41f07373ed13390a810cfba90423d34c2a3517a9","unresolved":true,"context_lines":[{"line_number":373,"context_line":"                hash_path, part_power, is_hash_dir\u003dTrue)"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"            if new_hash_path \u003d\u003d hash_path:"},{"line_number":376,"context_line":"                continue"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"            # Get on disk data for new and old locations, cleaning up any"},{"line_number":379,"context_line":"            # reclaimable or obsolete files in each. The new location is"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fcaa3d4_a7f50af0","line":376,"in_reply_to":"a23798c8_e4f1aa17","updated":"2021-03-11 20:54:18.000000000","message":"agree, but Matt pointed out I had lost the equivalent check at line 390 in old patchset, so yeah, belt\u0027n\u0027braces","commit_id":"228d44209790775f4b0ad4041a4d01440da44653"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8ed83c0044fc5dca79125e3ba6f717768369d2a2","unresolved":true,"context_lines":[{"line_number":422,"context_line":"                new_file \u003d os.path.join(new_hash_path, filename)"},{"line_number":423,"context_line":"                try:"},{"line_number":424,"context_line":"                    if diskfile.relink_paths(old_file, new_file):"},{"line_number":425,"context_line":"                        logger.debug("},{"line_number":426,"context_line":"                            \"Relinking (cleanup) created link: %s to %s\","},{"line_number":427,"context_line":"                            old_file, new_file)"},{"line_number":428,"context_line":"                        created_links +\u003d 1"}],"source_content_type":"text/x-python","patch_set":4,"id":"137df143_4df10646","line":425,"range":{"start_line":425,"start_character":31,"end_line":425,"end_character":36},"updated":"2021-03-11 20:49:29.000000000","message":"warning, maybe?","commit_id":"228d44209790775f4b0ad4041a4d01440da44653"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"41f07373ed13390a810cfba90423d34c2a3517a9","unresolved":true,"context_lines":[{"line_number":422,"context_line":"                new_file \u003d os.path.join(new_hash_path, filename)"},{"line_number":423,"context_line":"                try:"},{"line_number":424,"context_line":"                    if diskfile.relink_paths(old_file, new_file):"},{"line_number":425,"context_line":"                        logger.debug("},{"line_number":426,"context_line":"                            \"Relinking (cleanup) created link: %s to %s\","},{"line_number":427,"context_line":"                            old_file, new_file)"},{"line_number":428,"context_line":"                        created_links +\u003d 1"}],"source_content_type":"text/x-python","patch_set":4,"id":"ed9f37bb_009f7588","line":425,"range":{"start_line":425,"start_character":31,"end_line":425,"end_character":36},"in_reply_to":"137df143_4df10646","updated":"2021-03-11 20:54:18.000000000","message":"could be, I wasn\u0027t sure","commit_id":"228d44209790775f4b0ad4041a4d01440da44653"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8ed83c0044fc5dca79125e3ba6f717768369d2a2","unresolved":true,"context_lines":[{"line_number":445,"context_line":"                    os.remove(os.path.join(hash_path, filename))"},{"line_number":446,"context_line":"                    rehash \u003d True"},{"line_number":447,"context_line":"            except OSError as exc:"},{"line_number":448,"context_line":"                logger.warning(\u0027Error cleaning up %s: %r\u0027, hash_path, exc)"},{"line_number":449,"context_line":"                errors +\u003d 1"},{"line_number":450,"context_line":"            else:"},{"line_number":451,"context_line":"                cleaned_up +\u003d 1"}],"source_content_type":"text/x-python","patch_set":4,"id":"45d2b018_ba8681f5","line":448,"updated":"2021-03-11 20:49:29.000000000","message":"ENOENT?","commit_id":"228d44209790775f4b0ad4041a4d01440da44653"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"41f07373ed13390a810cfba90423d34c2a3517a9","unresolved":true,"context_lines":[{"line_number":445,"context_line":"                    os.remove(os.path.join(hash_path, filename))"},{"line_number":446,"context_line":"                    rehash \u003d True"},{"line_number":447,"context_line":"            except OSError as exc:"},{"line_number":448,"context_line":"                logger.warning(\u0027Error cleaning up %s: %r\u0027, hash_path, exc)"},{"line_number":449,"context_line":"                errors +\u003d 1"},{"line_number":450,"context_line":"            else:"},{"line_number":451,"context_line":"                cleaned_up +\u003d 1"}],"source_content_type":"text/x-python","patch_set":4,"id":"450b22ee_71b3efb1","line":448,"in_reply_to":"45d2b018_ba8681f5","updated":"2021-03-11 20:54:18.000000000","message":"good point, although in cleanup step what *did* remove the file?","commit_id":"228d44209790775f4b0ad4041a4d01440da44653"}],"swift/common/utils.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7677788f0a223ed520b5f114902c694246961723","unresolved":true,"context_lines":[{"line_number":3217,"context_line":"                             hook_pre_partition\u003dNone, hook_post_partition\u003dNone,"},{"line_number":3218,"context_line":"                             hook_pre_suffix\u003dNone, hook_post_suffix\u003dNone,"},{"line_number":3219,"context_line":"                             hook_pre_hash\u003dNone, hook_post_hash\u003dNone,"},{"line_number":3220,"context_line":"                             error_counter\u003dNone, yield_dirs\u003dFalse):"},{"line_number":3221,"context_line":"    \"\"\""},{"line_number":3222,"context_line":"    Given a devices path and a data directory, yield (path, device,"},{"line_number":3223,"context_line":"    partition) for all files in that directory"}],"source_content_type":"text/x-python","patch_set":2,"id":"2189f69e_b703ff1e","line":3220,"range":{"start_line":3220,"start_character":49,"end_line":3220,"end_character":59},"updated":"2021-03-11 03:20:02.000000000","message":"docstring","commit_id":"7c04001c5d8a963bcb44f718e13ceb8a5929a243"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8ed83c0044fc5dca79125e3ba6f717768369d2a2","unresolved":true,"context_lines":[{"line_number":5796,"context_line":"    \"\"\""},{"line_number":5797,"context_line":"    raw_hash \u003d binascii.unhexlify(hex_hash)"},{"line_number":5798,"context_line":"    part_shift \u003d 32 - int(part_power)"},{"line_number":5799,"context_line":"    return struct.unpack_from(\u0027\u003eI\u0027, raw_hash)[0] \u003e\u003e part_shift"},{"line_number":5800,"context_line":""},{"line_number":5801,"context_line":""},{"line_number":5802,"context_line":"def replace_partition_in_path(path, part_power, is_hash_dir\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":4,"id":"e2f500c9_9173652d","line":5799,"updated":"2021-03-11 20:49:29.000000000","message":"I still want to replace this with something involving int(..., 16)","commit_id":"228d44209790775f4b0ad4041a4d01440da44653"}],"test/unit/cli/test_relinker.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7677788f0a223ed520b5f114902c694246961723","unresolved":true,"context_lines":[{"line_number":931,"context_line":"                \u0027--skip-mount\u0027,"},{"line_number":932,"context_line":"            ]))"},{"line_number":933,"context_line":""},{"line_number":934,"context_line":"        obj_path \u003d os.path.join(self.objdir, self.object_fname)"},{"line_number":935,"context_line":"        self.assertTrue(os.path.isfile(obj_path))"},{"line_number":936,"context_line":"        warning_lines \u003d self.logger.get_lines_for_level(\u0027warning\u0027)"},{"line_number":937,"context_line":"        self.assertIn(\u0027Error cleaning up %s: files %r need relinking to %s\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"805b6983_0c6381f0","line":934,"range":{"start_line":934,"start_character":8,"end_line":934,"end_character":63},"updated":"2021-03-11 03:20:02.000000000","message":"self.objname","commit_id":"7c04001c5d8a963bcb44f718e13ceb8a5929a243"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"654664d54fa040a0edbf9d17d6ba883ce2b74d49","unresolved":true,"context_lines":[{"line_number":959,"context_line":"                \u0027--skip-mount\u0027,"},{"line_number":960,"context_line":"            ])"},{"line_number":961,"context_line":""},{"line_number":962,"context_line":"        self.assertEqual(1, res)"},{"line_number":963,"context_line":"        obj_path \u003d os.path.join(self.objdir, self.object_fname)"},{"line_number":964,"context_line":"        self.assertTrue(os.path.isfile(obj_path))"},{"line_number":965,"context_line":"        self.assertTrue(os.path.isfile(older_obj_file))"}],"source_content_type":"text/x-python","patch_set":3,"id":"5c65e813_0b82fb58","line":962,"updated":"2021-03-11 16:33:28.000000000","message":"yeah, that\u0027s what we want right there","commit_id":"83820bd8a84989286363611e66e6ef9ef02dbd97"}]}
