)]}'
{"tools/check-install.py":[{"author":{"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},"change_message_id":"f53d4cd2e715fd8e0d861b5aefdd05e8eedbce5b","unresolved":false,"context_lines":[{"line_number":7,"context_line":"import re"},{"line_number":8,"context_line":"import sys"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"def main():"},{"line_number":11,"context_line":"    errors \u003d 0"},{"line_number":12,"context_line":"    pattern \u003d re.compile(\u0027^(.*?)\\s?\u003d\\s?([^:]*?):.*$\u0027)"},{"line_number":13,"context_line":"    config \u003d ConfigParser.ConfigParser()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_c6648aba","line":10,"updated":"2016-06-24 03:18:41.000000000","message":"two blank lines required","commit_id":"f7764508d342e9c35bae41489dc22429cc71b3ab"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"669dd7aafb027ca3b844bdfe77afa9581260590e","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    pattern \u003d re.compile(\u0027^(.*?)\\s?\u003d\\s?([^:]*?):.*$\u0027)"},{"line_number":13,"context_line":"    config \u003d ConfigParser.ConfigParser()"},{"line_number":14,"context_line":"    config.read(\u0027setup.cfg\u0027)"},{"line_number":15,"context_line":"    console_scripts \u003d config.get(\u0027entry_points\u0027, \u0027console_scripts\u0027)"},{"line_number":16,"context_line":"    for script in console_scripts.split(\u0027\\n\u0027):"},{"line_number":17,"context_line":"        match \u003d pattern.match(script)"},{"line_number":18,"context_line":"        if match:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_dae620af","line":15,"updated":"2016-06-24 01:41:02.000000000","message":"It would have been nice to use PBR for this but I couldn\u0027t see a quick way to do that.","commit_id":"f7764508d342e9c35bae41489dc22429cc71b3ab"},{"author":{"_account_id":7102,"name":"Thomas Bechtold","email":"thomas.bechtold@chainguard.dev","username":"toabctl"},"change_message_id":"54f9d27891c47d96fa0452e5c8f52f3b9ad39065","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    pattern \u003d re.compile(\u0027^(.*?)\\s?\u003d\\s?([^:]*?):.*$\u0027)"},{"line_number":13,"context_line":"    config \u003d ConfigParser.ConfigParser()"},{"line_number":14,"context_line":"    config.read(\u0027setup.cfg\u0027)"},{"line_number":15,"context_line":"    console_scripts \u003d config.get(\u0027entry_points\u0027, \u0027console_scripts\u0027)"},{"line_number":16,"context_line":"    for script in console_scripts.split(\u0027\\n\u0027):"},{"line_number":17,"context_line":"        match \u003d pattern.match(script)"},{"line_number":18,"context_line":"        if match:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_300ee734","line":15,"in_reply_to":"3aaa91ec_dae620af","updated":"2016-07-04 05:41:48.000000000","message":"It\u0027s a bit tricky to get metadata from distutils/setuptools/pbr. I wrote something for py2pack (see https://github.com/saschpe/py2pack/blob/master/py2pack/get_metadata.py ).\nThis is a distutil command and can be used for any setup.py with \"python setup.py --command-packages\u003dpy2pack get_metadata -o my_metadata.json\"\n\nThis writes the metadata (including the entry points) into the json file. Maybe that\u0027s a bit more clean that using regex to parse the setup.cfg file?","commit_id":"f7764508d342e9c35bae41489dc22429cc71b3ab"},{"author":{"_account_id":10384,"name":"Haïkel Guémar","email":"hguemar@fedoraproject.org","username":"hguemar"},"change_message_id":"e93166e62b35b20798df171d1ea295c70b7bf0d7","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"def main():"},{"line_number":12,"context_line":"    errors \u003d 0"},{"line_number":13,"context_line":"    pattern \u003d re.compile(\u0027^(.*?)\\s?\u003d\\s?([^:]*?):.*$\u0027)"},{"line_number":14,"context_line":"    config \u003d ConfigParser.ConfigParser()"},{"line_number":15,"context_line":"    config.read(\u0027setup.cfg\u0027)"},{"line_number":16,"context_line":"    console_scripts \u003d config.get(\u0027entry_points\u0027, \u0027console_scripts\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3aaa91ec_aaa13cfa","line":13,"updated":"2016-06-24 07:17:56.000000000","message":"I inserted garbage whitespaces in setup.cfg to check correctness of the regular expressions. So we\u0027d need to switch to the \u0027*\u0027 quantifier for the whitespace around equal operator. \nIt should also be a raw string.\n\nshould be r\u0027\u0027^(.*?)\\s*\u003d\\s*([^:]*?):.*$\u0027\n\nIf we fix it, I\u0027d change my vote to +1","commit_id":"bce889b7d63305ed6681f979c52954fc3191041a"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"56ce177ad281806f6143782bb4274eaad7b35e95","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"def main():"},{"line_number":12,"context_line":"    errors \u003d 0"},{"line_number":13,"context_line":"    pattern \u003d re.compile(\u0027^(.*?)\\s?\u003d\\s?([^:]*?):.*$\u0027)"},{"line_number":14,"context_line":"    config \u003d ConfigParser.ConfigParser()"},{"line_number":15,"context_line":"    config.read(\u0027setup.cfg\u0027)"},{"line_number":16,"context_line":"    console_scripts \u003d config.get(\u0027entry_points\u0027, \u0027console_scripts\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3aaa91ec_aaed6a26","line":13,"in_reply_to":"3aaa91ec_aaa13cfa","updated":"2016-07-01 11:40:41.000000000","message":"Done","commit_id":"bce889b7d63305ed6681f979c52954fc3191041a"},{"author":{"_account_id":10384,"name":"Haïkel Guémar","email":"hguemar@fedoraproject.org","username":"hguemar"},"change_message_id":"e93166e62b35b20798df171d1ea295c70b7bf0d7","unresolved":false,"context_lines":[{"line_number":22,"context_line":"                importlib.import_module(module)"},{"line_number":23,"context_line":"            except ImportError as err:"},{"line_number":24,"context_line":"                print(\u0027Imports for %s failed:\\n\\t%s\u0027 % (script, err))"},{"line_number":25,"context_line":"                errors +\u003d 1"},{"line_number":26,"context_line":"    return 1 if errors else 0"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3aaa91ec_e7d37dd3","line":25,"updated":"2016-06-24 07:17:56.000000000","message":"suggestion: since we count the number of failed import, it\u0027d be a nice touch to display it.\nprint(\u0027Failed import modules: %s\u0027 % errors) if errors else print(\u0027Success\u0027).\n\nShould not block the review though","commit_id":"bce889b7d63305ed6681f979c52954fc3191041a"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"56ce177ad281806f6143782bb4274eaad7b35e95","unresolved":false,"context_lines":[{"line_number":22,"context_line":"                importlib.import_module(module)"},{"line_number":23,"context_line":"            except ImportError as err:"},{"line_number":24,"context_line":"                print(\u0027Imports for %s failed:\\n\\t%s\u0027 % (script, err))"},{"line_number":25,"context_line":"                errors +\u003d 1"},{"line_number":26,"context_line":"    return 1 if errors else 0"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3aaa91ec_0ac8fea6","line":25,"in_reply_to":"3aaa91ec_e7d37dd3","updated":"2016-07-01 11:40:41.000000000","message":"We already print one line per error and I\u0027m  big fan of the old UNIX approach of be silent if things are all good :)","commit_id":"bce889b7d63305ed6681f979c52954fc3191041a"},{"author":{"_account_id":10384,"name":"Haïkel Guémar","email":"hguemar@fedoraproject.org","username":"hguemar"},"change_message_id":"34c88dcdf55ff9f937278447fe10e0423411bf1c","unresolved":false,"context_lines":[{"line_number":6,"context_line":"import importlib"},{"line_number":7,"context_line":"import re"},{"line_number":8,"context_line":"import sys"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"def main():"},{"line_number":11,"context_line":"    errors \u003d 0"},{"line_number":12,"context_line":"    pattern \u003d re.compile(\u0027^(.*?)\\s*\u003d\\s*([^:]*?):.*$\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_958a4619","line":9,"updated":"2016-07-01 14:00:30.000000000","message":"PEP8 reclaims a second line here.\n\nBut I think we\u0027re almost good! +1","commit_id":"b4090aeeefd8ac8a69d5820b2256e6f3c3aaf740"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"6c486109b18f6583edd69cd1e2c7380deaec1132","unresolved":false,"context_lines":[{"line_number":7,"context_line":"import re"},{"line_number":8,"context_line":"import sys"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"def main():"},{"line_number":11,"context_line":"    errors \u003d 0"},{"line_number":12,"context_line":"    pattern \u003d re.compile(\u0027^(.*?)\\s*\u003d\\s*([^:]*?):.*$\u0027)"},{"line_number":13,"context_line":"    config \u003d ConfigParser.ConfigParser()"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_dbe27cd4","line":10,"updated":"2016-07-27 00:47:10.000000000","message":"Gah.  I forgot I used the inline editor","commit_id":"0cb5e91c21a095d2ac52c35ae1ed7eeae5adab6e"}]}
