)]}'
{"sahara/plugins/utils.py":[{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"f943c2f1ed228e95ea8829e1badca395054b2538","unresolved":false,"context_lines":[{"line_number":163,"context_line":"    return files.get_file_text(file_name, package)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"def get_file_binary(file_name, package\u003d\u0027sahara\u0027, **kwargs):"},{"line_number":167,"context_line":"    return files.get_file_binary(file_name, package)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_f166c455","line":166,"updated":"2019-07-26 12:23:57.000000000","message":"This require a bump in the requirements of the plugin which use it, which may be complicated when backporting.","commit_id":"bd418f048fbc7b686c029931d75fdb32a4ce5485"},{"author":{"_account_id":8932,"name":"Telles Mota Vidal Nóbrega","email":"tellesnobrega@gmail.com","username":"tellesnobrega"},"change_message_id":"7d1c361073ebaf8ad964b87297dd948bce03d62b","unresolved":false,"context_lines":[{"line_number":163,"context_line":"    return files.get_file_text(file_name, package)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"def get_file_binary(file_name, package\u003d\u0027sahara\u0027, **kwargs):"},{"line_number":167,"context_line":"    return files.get_file_binary(file_name, package)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_838ccd7f","line":166,"in_reply_to":"7faddb67_315e9c76","updated":"2019-07-29 10:00:20.000000000","message":"I was planning to use this but turned out I kept using the get_text_file I will remove this change.","commit_id":"bd418f048fbc7b686c029931d75fdb32a4ce5485"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"a8384dc8fd809689340a50138849ef9e7383531f","unresolved":false,"context_lines":[{"line_number":163,"context_line":"    return files.get_file_text(file_name, package)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"def get_file_binary(file_name, package\u003d\u0027sahara\u0027, **kwargs):"},{"line_number":167,"context_line":"    return files.get_file_binary(file_name, package)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_315e9c76","line":166,"in_reply_to":"7faddb67_f166c455","updated":"2019-07-26 12:25:19.000000000","message":"checking it more: is this needed by any plugin? https://review.opendev.org/#/c/672811/ does not use it.","commit_id":"bd418f048fbc7b686c029931d75fdb32a4ce5485"}],"sahara/utils/files.py":[{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"f943c2f1ed228e95ea8829e1badca395054b2538","unresolved":false,"context_lines":[{"line_number":21,"context_line":"def get_file_text(file_name, package\u003d\u0027sahara\u0027):"},{"line_number":22,"context_line":"    full_name \u003d pkg.resource_filename("},{"line_number":23,"context_line":"        package, file_name)"},{"line_number":24,"context_line":"    return open(full_name).read()"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def get_file_binary(file_name, package\u003d\u0027sahara\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_5178f8f6","line":24,"updated":"2019-07-26 12:23:57.000000000","message":"is there a reason why we can\u0027t always use binary and defer the decoding?","commit_id":"bd418f048fbc7b686c029931d75fdb32a4ce5485"},{"author":{"_account_id":8932,"name":"Telles Mota Vidal Nóbrega","email":"tellesnobrega@gmail.com","username":"tellesnobrega"},"change_message_id":"7d1c361073ebaf8ad964b87297dd948bce03d62b","unresolved":false,"context_lines":[{"line_number":21,"context_line":"def get_file_text(file_name, package\u003d\u0027sahara\u0027):"},{"line_number":22,"context_line":"    full_name \u003d pkg.resource_filename("},{"line_number":23,"context_line":"        package, file_name)"},{"line_number":24,"context_line":"    return open(full_name).read()"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def get_file_binary(file_name, package\u003d\u0027sahara\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_c392c59f","line":24,"in_reply_to":"7faddb67_5178f8f6","updated":"2019-07-29 10:00:20.000000000","message":"I\u0027m not entirely sure, I can give it a try, but iirc we use this same function to read config files as well and reading as binary may not work or decoding may not work on some binary files, but I can check.","commit_id":"bd418f048fbc7b686c029931d75fdb32a4ce5485"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"f2eb40872dfeae5e21a318f2f68c1ccdac380611","unresolved":false,"context_lines":[{"line_number":21,"context_line":"def get_file_text(file_name, package\u003d\u0027sahara\u0027):"},{"line_number":22,"context_line":"    full_name \u003d pkg.resource_filename("},{"line_number":23,"context_line":"        package, file_name)"},{"line_number":24,"context_line":"    return open(full_name, \u0027rb\u0027).read()"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def get_file_binary(file_name, package\u003d\u0027sahara\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_84d32201","line":24,"updated":"2019-08-02 13:20:30.000000000","message":"Isn\u0027t it basically the same as get_file_text?","commit_id":"609b646d55e389fc78cfbd9b98b006507dae173b"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"dbc9fabf70b1155af3c7410214c0ce6fca918fbd","unresolved":false,"context_lines":[{"line_number":21,"context_line":"def get_file_text(file_name, package\u003d\u0027sahara\u0027):"},{"line_number":22,"context_line":"    full_name \u003d pkg.resource_filename("},{"line_number":23,"context_line":"        package, file_name)"},{"line_number":24,"context_line":"    return open(full_name, \u0027rb\u0027).read()"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def get_file_binary(file_name, package\u003d\u0027sahara\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_8715643f","line":24,"in_reply_to":"7faddb67_8441e2a8","updated":"2019-08-02 13:39:10.000000000","message":"also, but also try_get_file_text","commit_id":"609b646d55e389fc78cfbd9b98b006507dae173b"},{"author":{"_account_id":8932,"name":"Telles Mota Vidal Nóbrega","email":"tellesnobrega@gmail.com","username":"tellesnobrega"},"change_message_id":"0df52cfae76e194fa4278b2cb8c841647928f1c3","unresolved":false,"context_lines":[{"line_number":21,"context_line":"def get_file_text(file_name, package\u003d\u0027sahara\u0027):"},{"line_number":22,"context_line":"    full_name \u003d pkg.resource_filename("},{"line_number":23,"context_line":"        package, file_name)"},{"line_number":24,"context_line":"    return open(full_name, \u0027rb\u0027).read()"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def get_file_binary(file_name, package\u003d\u0027sahara\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_8441e2a8","line":24,"in_reply_to":"7faddb67_84d32201","updated":"2019-08-02 13:22:32.000000000","message":"you mean get_file_binary?","commit_id":"609b646d55e389fc78cfbd9b98b006507dae173b"},{"author":{"_account_id":8932,"name":"Telles Mota Vidal Nóbrega","email":"tellesnobrega@gmail.com","username":"tellesnobrega"},"change_message_id":"221e18d89eb6adfaaa8d819d62a787c7d21fb30e","unresolved":false,"context_lines":[{"line_number":21,"context_line":"def get_file_text(file_name, package\u003d\u0027sahara\u0027):"},{"line_number":22,"context_line":"    full_name \u003d pkg.resource_filename("},{"line_number":23,"context_line":"        package, file_name)"},{"line_number":24,"context_line":"    return open(full_name, \u0027rb\u0027).read()"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def get_file_binary(file_name, package\u003d\u0027sahara\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_a742e03c","line":24,"in_reply_to":"7faddb67_8715643f","updated":"2019-08-02 13:41:20.000000000","message":"I can\u0027t remember right now why we have the try_ one, but iirc it is because we had some cases where path isn\u0027t a file and it would fail when trying to read. But this is the same as get_file_binary and we can merge them into one.","commit_id":"609b646d55e389fc78cfbd9b98b006507dae173b"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"dbc9fabf70b1155af3c7410214c0ce6fca918fbd","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    return open(full_name, \"rb\").read()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def try_get_file_text(file_name, package\u003d\u0027sahara\u0027):"},{"line_number":34,"context_line":"    full_name \u003d pkg.resource_filename("},{"line_number":35,"context_line":"        package, file_name)"},{"line_number":36,"context_line":"    return ("}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_272a707e","line":33,"updated":"2019-08-02 13:39:10.000000000","message":"same here","commit_id":"609b646d55e389fc78cfbd9b98b006507dae173b"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"12300f417b34e5e2cdc7f8ce74cd50d38f906e2c","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    return open(full_name, \u0027rb\u0027).read()"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def get_file_binary(file_name, package\u003d\u0027sahara\u0027):"},{"line_number":28,"context_line":"    full_name \u003d pkg.resource_filename("},{"line_number":29,"context_line":"        package, file_name)"},{"line_number":30,"context_line":"    return open(full_name, \"rb\").read()"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_30fd856e","line":27,"updated":"2019-08-08 08:02:25.000000000","message":"The question is more or less the same: if this is file is basically the same as get_file_text, do we need to duplicate the function?\nPlease note that this file may be part of the plugin interface, so we can\u0027t remove it (but it should be possible to avoid a duplication of its code).","commit_id":"8d4c71f60e3cb186504627769f6429d3afeb0870"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"312cf32a59d004c6f6e722c4f86963b30d87e8b6","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def get_file_binary(file_name, package\u003d\u0027sahara\u0027):"},{"line_number":28,"context_line":"    full_name \u003d pkg.resource_filename("},{"line_number":29,"context_line":"        package, file_name)"},{"line_number":30,"context_line":"    return open(full_name, \"rb\").read()"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_81bdb003","line":28,"updated":"2019-08-28 14:33:52.000000000","message":"how does this change now impact the py3 compatibility?","commit_id":"7c60eed4877ac1dc2ee86248e3ceab5774a551d9"},{"author":{"_account_id":8932,"name":"Telles Mota Vidal Nóbrega","email":"tellesnobrega@gmail.com","username":"tellesnobrega"},"change_message_id":"d2a02fd67b7c96e7004989632b0a77875d3d2356","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def get_file_binary(file_name, package\u003d\u0027sahara\u0027):"},{"line_number":28,"context_line":"    full_name \u003d pkg.resource_filename("},{"line_number":29,"context_line":"        package, file_name)"},{"line_number":30,"context_line":"    return open(full_name, \"rb\").read()"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_ac978345","line":28,"in_reply_to":"7faddb67_81bdb003","updated":"2019-08-28 15:22:10.000000000","message":"It doesn\u0027t really, leftover from previous changes.","commit_id":"7c60eed4877ac1dc2ee86248e3ceab5774a551d9"}],"sahara/utils/ssh_remote.py":[{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"f943c2f1ed228e95ea8829e1badca395054b2538","unresolved":false,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"def _write_fl(sftp, remote_file, data):"},{"line_number":279,"context_line":"    try:"},{"line_number":280,"context_line":"        write_data \u003d paramiko.py3compat.StringIO(data)"},{"line_number":281,"context_line":"    except TypeError:"},{"line_number":282,"context_line":"        write_data \u003d paramiko.py3compat.BytesIO(data)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_d16b881c","line":279,"updated":"2019-07-26 12:23:57.000000000","message":"This looks a bit random: I think it would be better to know how the data are written in a consistent way.","commit_id":"bd418f048fbc7b686c029931d75fdb32a4ce5485"}]}
