)]}'
{"test-requirements.txt":[{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"0f34d2f5113d40d33ba1308e4b4a0d9d8ff13526","unresolved":false,"context_lines":[{"line_number":1,"context_line":"hacking\u003e\u003d0.10,\u003c0.11"},{"line_number":2,"context_line":"bashate\u003e\u003d0.2"},{"line_number":3,"context_line":"grafyaml"},{"line_number":4,"context_line":"PyYAML\u003e\u003d3.1.0"},{"line_number":5,"context_line":"-e git://git.openstack.org/openstack-infra/nodepool#egg\u003dnodepool"}],"source_content_type":"text/plain","patch_set":1,"id":"ba8a016a_e7af9de1","line":4,"updated":"2015-11-16 23:34:54.000000000","message":"voluptuous too?","commit_id":"12c0155b25ecbab48ef1ebfbefff1e6ff9a95860"}],"tools/jenkins-projects-checks.py":[{"author":{"_account_id":6547,"name":"Andreas Jaeger","email":"jaegerandi@gmail.com","username":"jaegerandi"},"change_message_id":"a8eef9d92b36e12c1783e863709e9f601363dbca","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def validate_jobs():"},{"line_number":63,"context_line":"    jobs \u003d map(lambda x: yaml.load(open(x)), glob.glob(\u0027jenkins/jobs/*.yaml\u0027))"},{"line_number":64,"context_line":"    for job in jobs:"},{"line_number":65,"context_line":"        for item in job:"},{"line_number":66,"context_line":"            if \u0027job-template\u0027 in item:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_6fab5bd7","line":63,"updated":"2015-11-17 16:30:48.000000000","message":"Add a comment, please.","commit_id":"12c0155b25ecbab48ef1ebfbefff1e6ff9a95860"},{"author":{"_account_id":6547,"name":"Andreas Jaeger","email":"jaegerandi@gmail.com","username":"jaegerandi"},"change_message_id":"a8eef9d92b36e12c1783e863709e9f601363dbca","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"def check_all():"},{"line_number":71,"context_line":"    validate_jobs()"},{"line_number":72,"context_line":"    exit"},{"line_number":73,"context_line":"    errors \u003d check_alphabetical()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    if errors:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_afa863dc","line":72,"updated":"2015-11-17 16:30:48.000000000","message":"exit? Ok, it\u0027s WIP...","commit_id":"12c0155b25ecbab48ef1ebfbefff1e6ff9a95860"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"48fec4420eab2c4568ee8fbf58ec711bb1e2e5dd","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    count \u003d 0"},{"line_number":103,"context_line":"    errors \u003d False"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    jobs \u003d map(lambda x: yaml.load(open(x)), glob.glob(\u0027jenkins/jobs/*.yaml\u0027))"},{"line_number":106,"context_line":"    for job in jobs:"},{"line_number":107,"context_line":"        for item in job:"},{"line_number":108,"context_line":"            if not (\u0027builder\u0027 in item"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a710552_6b734281","line":105,"updated":"2015-12-16 04:11:37.000000000","message":"i\u0027d prefer to see this refactored to do this file-by-file, so the error message can give a useful pointer to what file you went wrong in.\n\nfair enough that it\u0027s used in CI where you\u0027re testing a specific change, so should be fairly obvious, but still, let\u0027s be helpful","commit_id":"f3291876495299d986cee2fc02725833744098d4"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"48fec4420eab2c4568ee8fbf58ec711bb1e2e5dd","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    jobs \u003d map(lambda x: yaml.load(open(x)), glob.glob(\u0027jenkins/jobs/*.yaml\u0027))"},{"line_number":106,"context_line":"    for job in jobs:"},{"line_number":107,"context_line":"        for item in job:"},{"line_number":108,"context_line":"            if not (\u0027builder\u0027 in item"},{"line_number":109,"context_line":"                    or \u0027job\u0027 in item"},{"line_number":110,"context_line":"                    or \u0027job-group\u0027 in item"},{"line_number":111,"context_line":"                    or \u0027job-template\u0027 in item"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a710552_6b4ca242","line":108,"updated":"2015-12-16 04:11:37.000000000","message":"i feel like this is kind of redundant; why not just have the \"if\" chain below this, and add\n\n  elif \u0027wrapper\u0027 in item:\n    continue\n  elif \u0027defaults\u0027 in item:\n    continue","commit_id":"f3291876495299d986cee2fc02725833744098d4"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"48fec4420eab2c4568ee8fbf58ec711bb1e2e5dd","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                    or \u0027project\u0027 in item"},{"line_number":113,"context_line":"                    or \u0027publisher\u0027 in item):"},{"line_number":114,"context_line":"                # Currently unhandled: \u0027wrapper\u0027 and \u0027defaults\u0027"},{"line_number":115,"context_line":"                next"},{"line_number":116,"context_line":"            if \u0027builder\u0027 in item:"},{"line_number":117,"context_line":"                schema \u003d BUILDER"},{"line_number":118,"context_line":"                entry \u003d item[\u0027builder\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a710552_6bdee26e","line":115,"updated":"2015-12-16 04:11:37.000000000","message":"I have never seen this, I think you mean \"continue\"?","commit_id":"f3291876495299d986cee2fc02725833744098d4"}]}
