)]}'
{"openstack_election/cmds/generate_rolls.py":[{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"26730eccf6bd448fbba8da283dd9ff117d675c88","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    end \u003d utils.conf[\u0027timeframe\u0027][\u0027end\u0027]"},{"line_number":44,"context_line":"    description \u003d (\u0027Generate electorate rolls\u0027)"},{"line_number":45,"context_line":"    parser \u003d argparse.ArgumentParser(description)"},{"line_number":46,"context_line":"    parser.add_argument(\u0027--limit\u0027, dest\u003d\u0027limit\u0027, type\u003dint, default\u003d1,"},{"line_number":47,"context_line":"                        help\u003d(\u0027How many validating changes to report.  \u0027"},{"line_number":48,"context_line":"                              \u0027A negative value means report many.  \u0027"},{"line_number":49,"context_line":"                              \u0027Default: %(default)s\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_f7521266","line":46,"updated":"2017-01-31 02:25:12.000000000","message":"NIT: The arg isn\u0027t used AFAICT","commit_id":"120771453828c5984503cf17bd64d07d6f9a9b11"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"fee980fb02ccd4c1b1e30550fdf677f62bffecd6","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    end \u003d utils.conf[\u0027timeframe\u0027][\u0027end\u0027]"},{"line_number":44,"context_line":"    description \u003d (\u0027Generate electorate rolls\u0027)"},{"line_number":45,"context_line":"    parser \u003d argparse.ArgumentParser(description)"},{"line_number":46,"context_line":"    parser.add_argument(\u0027--limit\u0027, dest\u003d\u0027limit\u0027, type\u003dint, default\u003d1,"},{"line_number":47,"context_line":"                        help\u003d(\u0027How many validating changes to report.  \u0027"},{"line_number":48,"context_line":"                              \u0027A negative value means report many.  \u0027"},{"line_number":49,"context_line":"                              \u0027Default: %(default)s\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_5ab94dcb","line":46,"in_reply_to":"3a461143_f7521266","updated":"2017-01-31 03:08:22.000000000","message":"Indeed, this is now removed","commit_id":"120771453828c5984503cf17bd64d07d6f9a9b11"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"26730eccf6bd448fbba8da283dd9ff117d675c88","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    parser.add_argument(\u0027--rolls_dir\u0027, default\u003d\"./rolls/%s\" % ("},{"line_number":54,"context_line":"                        utils.conf[\u0027tag\u0027]), help\u003d(\u0027The output directory.  \u0027"},{"line_number":55,"context_line":"                        \u0027Default: %(default)s\u0027))"},{"line_number":56,"context_line":"    parser.add_argument(\u0027--before\u0027, default\u003dend.strftime(\"%Y-%m-%d\"),"},{"line_number":57,"context_line":"                        help\u003d(\u0027The start date.  Default: %(default)s\u0027))"},{"line_number":58,"context_line":"    parser.add_argument(\u0027--after\u0027, default\u003dstart.strftime(\"%Y-%m-%d\"),"},{"line_number":59,"context_line":"                        help\u003d(\u0027The end date.  Default: %(default)s\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_f78772b2","line":56,"range":{"start_line":56,"start_character":36,"end_line":56,"end_character":67},"updated":"2017-01-31 02:25:12.000000000","message":"This is slightly wrong as it either need to be the full timestamp from the config *or* you should increment end to the next day (but that assumes that the dealine will always be somethign approching midnight.\n\n end +\u003d datetime.timedelata(days\u003d1)\n\nOf course we could just drop the time portion of the end date and then the problem becomes one of language rather than mathematics.","commit_id":"120771453828c5984503cf17bd64d07d6f9a9b11"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"2b26771e5cde38d5f69f77d50a773afaefbbc53f","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    parser.add_argument(\u0027--rolls_dir\u0027, default\u003d\"./rolls/%s\" % ("},{"line_number":54,"context_line":"                        utils.conf[\u0027tag\u0027]), help\u003d(\u0027The output directory.  \u0027"},{"line_number":55,"context_line":"                        \u0027Default: %(default)s\u0027))"},{"line_number":56,"context_line":"    parser.add_argument(\u0027--before\u0027, default\u003dend.strftime(\"%Y-%m-%d\"),"},{"line_number":57,"context_line":"                        help\u003d(\u0027The start date.  Default: %(default)s\u0027))"},{"line_number":58,"context_line":"    parser.add_argument(\u0027--after\u0027, default\u003dstart.strftime(\"%Y-%m-%d\"),"},{"line_number":59,"context_line":"                        help\u003d(\u0027The end date.  Default: %(default)s\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_0205770f","line":56,"range":{"start_line":56,"start_character":36,"end_line":56,"end_character":67},"in_reply_to":"3a461143_7abc49bb","updated":"2017-01-31 21:32:37.000000000","message":"Yeah I agree.","commit_id":"120771453828c5984503cf17bd64d07d6f9a9b11"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"fee980fb02ccd4c1b1e30550fdf677f62bffecd6","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    parser.add_argument(\u0027--rolls_dir\u0027, default\u003d\"./rolls/%s\" % ("},{"line_number":54,"context_line":"                        utils.conf[\u0027tag\u0027]), help\u003d(\u0027The output directory.  \u0027"},{"line_number":55,"context_line":"                        \u0027Default: %(default)s\u0027))"},{"line_number":56,"context_line":"    parser.add_argument(\u0027--before\u0027, default\u003dend.strftime(\"%Y-%m-%d\"),"},{"line_number":57,"context_line":"                        help\u003d(\u0027The start date.  Default: %(default)s\u0027))"},{"line_number":58,"context_line":"    parser.add_argument(\u0027--after\u0027, default\u003dstart.strftime(\"%Y-%m-%d\"),"},{"line_number":59,"context_line":"                        help\u003d(\u0027The end date.  Default: %(default)s\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_7abc49bb","line":56,"range":{"start_line":56,"start_character":36,"end_line":56,"end_character":67},"in_reply_to":"3a461143_f78772b2","updated":"2017-01-31 03:08:22.000000000","message":"Oh well, using the full timestamp from the config sounds like the more reasonable strategy...","commit_id":"120771453828c5984503cf17bd64d07d6f9a9b11"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"2b26771e5cde38d5f69f77d50a773afaefbbc53f","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    parser.add_argument(\u0027--rolls_dir\u0027, default\u003d\"./rolls/%s\" % ("},{"line_number":54,"context_line":"                        utils.conf[\u0027tag\u0027]), help\u003d(\u0027The output directory.  \u0027"},{"line_number":55,"context_line":"                        \u0027Default: %(default)s\u0027))"},{"line_number":56,"context_line":"    parser.add_argument(\u0027--before\u0027, default\u003dend.strftime(\"%Y-%m-%d\"),"},{"line_number":57,"context_line":"                        help\u003d(\u0027The start date.  Default: %(default)s\u0027))"},{"line_number":58,"context_line":"    parser.add_argument(\u0027--after\u0027, default\u003dstart.strftime(\"%Y-%m-%d\"),"},{"line_number":59,"context_line":"                        help\u003d(\u0027The end date.  Default: %(default)s\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_5a2f8d3e","line":56,"range":{"start_line":56,"start_character":36,"end_line":56,"end_character":67},"in_reply_to":"3a461143_f78772b2","updated":"2017-01-31 21:32:37.000000000","message":"Okay you can ignore this reviews crossed in the ether","commit_id":"120771453828c5984503cf17bd64d07d6f9a9b11"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"26730eccf6bd448fbba8da283dd9ff117d675c88","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                        help\u003d(\u0027The start date.  Default: %(default)s\u0027))"},{"line_number":58,"context_line":"    parser.add_argument(\u0027--after\u0027, default\u003dstart.strftime(\"%Y-%m-%d\"),"},{"line_number":59,"context_line":"                        help\u003d(\u0027The end date.  Default: %(default)s\u0027))"},{"line_number":60,"context_line":"    parser.add_argument(\u0027--without-stable\u0027, default\u003dFalse, action\u003d\u0027store_true\u0027,"},{"line_number":61,"context_line":"                        help\u003d(\u0027Do not include stables\u0027))"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    args \u003d parser.parse_args()"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_ba2231a1","line":60,"updated":"2017-01-31 02:25:12.000000000","message":"NIT:\n\n parser.add_argument(\u0027--without-stable\u0027, dest\u003d\u0027with_stable\u0027 default\u003dTrue, action\u003d\u0027store_false\u0027\n\nWould be a more direct translation of the shell script and means that Line 88 would become:\n\n  if args.with_stable:\n\nWhich I\u0027d find easier to parse than the not args.without_stable","commit_id":"120771453828c5984503cf17bd64d07d6f9a9b11"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"fee980fb02ccd4c1b1e30550fdf677f62bffecd6","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                        help\u003d(\u0027The start date.  Default: %(default)s\u0027))"},{"line_number":58,"context_line":"    parser.add_argument(\u0027--after\u0027, default\u003dstart.strftime(\"%Y-%m-%d\"),"},{"line_number":59,"context_line":"                        help\u003d(\u0027The end date.  Default: %(default)s\u0027))"},{"line_number":60,"context_line":"    parser.add_argument(\u0027--without-stable\u0027, default\u003dFalse, action\u003d\u0027store_true\u0027,"},{"line_number":61,"context_line":"                        help\u003d(\u0027Do not include stables\u0027))"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    args \u003d parser.parse_args()"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_dacd3d67","line":60,"in_reply_to":"3a461143_ba2231a1","updated":"2017-01-31 03:08:22.000000000","message":"Indeed that\u0027s better!","commit_id":"120771453828c5984503cf17bd64d07d6f9a9b11"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"26730eccf6bd448fbba8da283dd9ff117d675c88","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    os.makedirs(args.rolls_dir, 0o700)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    os.chdir(os.path.dirname(args.rolls_dir))"},{"line_number":77,"context_line":"    if not os.path.isfile(\"owners.py\"):"},{"line_number":78,"context_line":"        print(\"Grabbing script from: %s\" % CGIT_URL)"},{"line_number":79,"context_line":"        open(\"owners.py\", \"wb\").write(urlopen(CGIT_URL).read())"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_377c9ab4","line":77,"updated":"2017-01-31 02:25:12.000000000","message":"The shell version always grabbed the latest owners.py to ensure we had the latest version but this means that we can have a stale version in rolls/owners.py.\n\nPerhaps we shoudl add an arg --cached (or similar) and do:\n\n if not args.cached:\n      print(\u0027Grabbing ....)\n else:\n     print(\u0027using existing owners.py script\u0027)\n\nI think that strike a balance between devel/debug and safe","commit_id":"120771453828c5984503cf17bd64d07d6f9a9b11"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"fee980fb02ccd4c1b1e30550fdf677f62bffecd6","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    os.makedirs(args.rolls_dir, 0o700)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    os.chdir(os.path.dirname(args.rolls_dir))"},{"line_number":77,"context_line":"    if not os.path.isfile(\"owners.py\"):"},{"line_number":78,"context_line":"        print(\"Grabbing script from: %s\" % CGIT_URL)"},{"line_number":79,"context_line":"        open(\"owners.py\", \"wb\").write(urlopen(CGIT_URL).read())"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_facf5953","line":77,"in_reply_to":"3a461143_377c9ab4","updated":"2017-01-31 03:08:22.000000000","message":"This logic is required to test the owners.py change, I added a --cached-owners toggle.","commit_id":"120771453828c5984503cf17bd64d07d6f9a9b11"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"26730eccf6bd448fbba8da283dd9ff117d675c88","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    os.chdir(os.path.dirname(args.rolls_dir))"},{"line_number":77,"context_line":"    if not os.path.isfile(\"owners.py\"):"},{"line_number":78,"context_line":"        print(\"Grabbing script from: %s\" % CGIT_URL)"},{"line_number":79,"context_line":"        open(\"owners.py\", \"wb\").write(urlopen(CGIT_URL).read())"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    sys.path.append(os.getcwd())"},{"line_number":82,"context_line":"    import owners"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_37a57a46","line":79,"updated":"2017-01-31 02:25:12.000000000","message":"I think in the case it\u0027s better to use a context manager as  that will ensure that the file exists and avoid file-system specific issues.","commit_id":"120771453828c5984503cf17bd64d07d6f9a9b11"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"fee980fb02ccd4c1b1e30550fdf677f62bffecd6","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    os.chdir(os.path.dirname(args.rolls_dir))"},{"line_number":77,"context_line":"    if not os.path.isfile(\"owners.py\"):"},{"line_number":78,"context_line":"        print(\"Grabbing script from: %s\" % CGIT_URL)"},{"line_number":79,"context_line":"        open(\"owners.py\", \"wb\").write(urlopen(CGIT_URL).read())"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    sys.path.append(os.getcwd())"},{"line_number":82,"context_line":"    import owners"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_faf6798d","line":79,"in_reply_to":"3a461143_37a57a46","updated":"2017-01-31 03:08:22.000000000","message":"Done","commit_id":"120771453828c5984503cf17bd64d07d6f9a9b11"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"26730eccf6bd448fbba8da283dd9ff117d675c88","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    print(\"Electoral rolls SHA256sum\")"},{"line_number":102,"context_line":"    with open(\"%s.shasums\" % args.tag, \"wb\") as ofile:"},{"line_number":103,"context_line":"        for fname in sorted(glob.glob(\"./%s/*.txt\" % args.tag)):"},{"line_number":104,"context_line":"            # Sort the list"},{"line_number":105,"context_line":"            roll \u003d sorted(open(fname).readlines())"},{"line_number":106,"context_line":"            open(fname, \"wb\").write(bytes(\"\\n\".join(roll), \u0027utf-8\u0027))"},{"line_number":107,"context_line":"            # Generate the hash"},{"line_number":108,"context_line":"            h \u003d hashlib.sha256(open(fname).read().encode(\u0027utf-8\u0027)).hexdigest()"},{"line_number":109,"context_line":"            s \u003d \"%s  %s\" % (h, fname)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_9ac9f5ae","line":106,"range":{"start_line":104,"start_character":0,"end_line":106,"end_character":68},"updated":"2017-01-31 02:25:12.000000000","message":"I\u0027m not certain we should do this but I\u0027m also not certain we shouldn\u0027t.\n\nIf we\u0027re going to do this then I\u0027d really like to see context mangers used or explicit close() calls made so that we avoid any potential strange interactions with file-systems.\n\nIt\u0027s possible I\u0027m over thinking things but I saw plenty of kernel issues around tight  open/write/open/read loops not getting the correct data","commit_id":"120771453828c5984503cf17bd64d07d6f9a9b11"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"fee980fb02ccd4c1b1e30550fdf677f62bffecd6","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    print(\"Electoral rolls SHA256sum\")"},{"line_number":102,"context_line":"    with open(\"%s.shasums\" % args.tag, \"wb\") as ofile:"},{"line_number":103,"context_line":"        for fname in sorted(glob.glob(\"./%s/*.txt\" % args.tag)):"},{"line_number":104,"context_line":"            # Sort the list"},{"line_number":105,"context_line":"            roll \u003d sorted(open(fname).readlines())"},{"line_number":106,"context_line":"            open(fname, \"wb\").write(bytes(\"\\n\".join(roll), \u0027utf-8\u0027))"},{"line_number":107,"context_line":"            # Generate the hash"},{"line_number":108,"context_line":"            h \u003d hashlib.sha256(open(fname).read().encode(\u0027utf-8\u0027)).hexdigest()"},{"line_number":109,"context_line":"            s \u003d \"%s  %s\" % (h, fname)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_baa15148","line":106,"range":{"start_line":104,"start_character":0,"end_line":106,"end_character":68},"in_reply_to":"3a461143_9ac9f5ae","updated":"2017-01-31 03:08:22.000000000","message":"Interesting, I always trusted python garbage collection to close files when they are open().read() or open().write() like in above statements.\n\nAnyways I added the context manager statement since we definitely want safety around rolls manipulation. I also removed the un-necessary re-read for the hash.","commit_id":"120771453828c5984503cf17bd64d07d6f9a9b11"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"2b26771e5cde38d5f69f77d50a773afaefbbc53f","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    print(\"Electoral rolls SHA256sum\")"},{"line_number":102,"context_line":"    with open(\"%s.shasums\" % args.tag, \"wb\") as ofile:"},{"line_number":103,"context_line":"        for fname in sorted(glob.glob(\"./%s/*.txt\" % args.tag)):"},{"line_number":104,"context_line":"            # Sort the list"},{"line_number":105,"context_line":"            roll \u003d sorted(open(fname).readlines())"},{"line_number":106,"context_line":"            open(fname, \"wb\").write(bytes(\"\\n\".join(roll), \u0027utf-8\u0027))"},{"line_number":107,"context_line":"            # Generate the hash"},{"line_number":108,"context_line":"            h \u003d hashlib.sha256(open(fname).read().encode(\u0027utf-8\u0027)).hexdigest()"},{"line_number":109,"context_line":"            s \u003d \"%s  %s\" % (h, fname)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_42705fa4","line":106,"range":{"start_line":104,"start_character":0,"end_line":106,"end_character":68},"in_reply_to":"3a461143_ba46b178","updated":"2017-01-31 21:32:37.000000000","message":"Yeah okay.  I thought owners.py was deterministic but it won\u0027t hurt to sort it.","commit_id":"120771453828c5984503cf17bd64d07d6f9a9b11"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"c253eb49f2e3befc4a8e9b76547cca3830d28cdd","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    print(\"Electoral rolls SHA256sum\")"},{"line_number":102,"context_line":"    with open(\"%s.shasums\" % args.tag, \"wb\") as ofile:"},{"line_number":103,"context_line":"        for fname in sorted(glob.glob(\"./%s/*.txt\" % args.tag)):"},{"line_number":104,"context_line":"            # Sort the list"},{"line_number":105,"context_line":"            roll \u003d sorted(open(fname).readlines())"},{"line_number":106,"context_line":"            open(fname, \"wb\").write(bytes(\"\\n\".join(roll), \u0027utf-8\u0027))"},{"line_number":107,"context_line":"            # Generate the hash"},{"line_number":108,"context_line":"            h \u003d hashlib.sha256(open(fname).read().encode(\u0027utf-8\u0027)).hexdigest()"},{"line_number":109,"context_line":"            s \u003d \"%s  %s\" % (h, fname)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_ba46b178","line":106,"range":{"start_line":104,"start_character":0,"end_line":106,"end_character":68},"in_reply_to":"3a461143_baa15148","updated":"2017-01-31 03:11:33.000000000","message":"And regarding the sort-or-not-sort doubt, it seems better to actually sort so that subsequent run yields the same rolls.","commit_id":"120771453828c5984503cf17bd64d07d6f9a9b11"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"d5e22ac7b15e6257ab848ce941b6dc3be67e8b87","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    parser.add_argument(\u0027--rolls_dir\u0027, default\u003d\"./rolls/%s\" % ("},{"line_number":54,"context_line":"                        utils.conf[\u0027tag\u0027]), help\u003d(\u0027The output directory.  \u0027"},{"line_number":55,"context_line":"                        \u0027Default: %(default)s\u0027))"},{"line_number":56,"context_line":"    parser.add_argument(\u0027--before\u0027, default\u003dend.strftime(\"%Y-%m-%d %H-%M-%S\"),"},{"line_number":57,"context_line":"                        help\u003d(\u0027The start date.  Default: %(default)s\u0027))"},{"line_number":58,"context_line":"    parser.add_argument(\u0027--after\u0027, default\u003dstart.strftime(\"%Y-%m-%d\"),"},{"line_number":59,"context_line":"                        help\u003d(\u0027The end date.  Default: %(default)s\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_7a3289a8","line":56,"updated":"2017-01-31 02:26:53.000000000","message":"+1 Looks good to me","commit_id":"cc1ea866010d5f2df9f5d03fe09c0f2a5b0593b6"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"8686487d79c40dc0745e4473b2ab39c32d13868b","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    print(\"Run information:\")"},{"line_number":64,"context_line":"    print(\" - TAG    : %s\" % args.tag)"},{"line_number":65,"context_line":"    print(\" - ROLLS  : %s\" % args.rolls_dir)"},{"line_number":66,"context_line":"    print(\" - STABLE : %s\" % (not args.without_stable))"},{"line_number":67,"context_line":"    print(\" - BEFORE : %s\" % args.before)"},{"line_number":68,"context_line":"    print(\" - AFTER  : %s\" % args.after)"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a461143_823887d4","line":66,"range":{"start_line":66,"start_character":30,"end_line":66,"end_character":53},"updated":"2017-01-31 21:34:01.000000000","message":"This should be args.with_stable shouldn\u0027t it?","commit_id":"c4d1cc4a7ef251da820ffae92949157baa913757"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"b55420146dd8aa40d1c283abd69458eebed62fce","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    print(\"Run information:\")"},{"line_number":64,"context_line":"    print(\" - TAG    : %s\" % args.tag)"},{"line_number":65,"context_line":"    print(\" - ROLLS  : %s\" % args.rolls_dir)"},{"line_number":66,"context_line":"    print(\" - STABLE : %s\" % (not args.without_stable))"},{"line_number":67,"context_line":"    print(\" - BEFORE : %s\" % args.before)"},{"line_number":68,"context_line":"    print(\" - AFTER  : %s\" % args.after)"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a461143_8af099ca","line":66,"range":{"start_line":66,"start_character":30,"end_line":66,"end_character":53},"in_reply_to":"3a461143_823887d4","updated":"2017-02-01 01:19:43.000000000","message":"Oops, indeed!","commit_id":"c4d1cc4a7ef251da820ffae92949157baa913757"}]}
