)]}'
{"nodepool/elements/openstack-repos/README.rst":[{"author":{"_account_id":6547,"name":"Andreas Jaeger","email":"jaegerandi@gmail.com","username":"jaegerandi"},"change_message_id":"20c04964cb57bfb9eff0627232becf0f0c4b6f4e","unresolved":false,"context_lines":[{"line_number":2,"context_line":"openstack-repos"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Download all repos and packages that a devstack run might need."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Environment variables:"},{"line_number":8,"context_line":"----------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a98d1f4_c35faf70","line":5,"range":{"start_line":5,"start_character":0,"end_line":5,"end_character":63},"updated":"2016-09-29 11:12:43.000000000","message":"This is out dated. We now call about all kind of runs and don\u0027t limit this to devstack anymore.","commit_id":"e1c10c5b3f7bc04341e99a7c5a66125f7dd1aff7"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"02d3df02311e9c3748e8e0c31d9ac38b7e9a31fa","unresolved":false,"context_lines":[{"line_number":10,"context_line":"DIB_OPENSTACK_REPOS_CUSTOM_LIST"},{"line_number":11,"context_line":"  :Required: No"},{"line_number":12,"context_line":"  :Default: None"},{"line_number":13,"context_line":"  :Description: Path to a file with custom list of repos"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ba5da102_634cc29e","line":13,"updated":"2016-11-01 19:57:49.000000000","message":"separated by newlines; might be good to give an example of how to use it","commit_id":"251ee541fe431694441083a34c899e9ddff1acd3"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"ec3bf6e4463e8d6d1ce3470abc1a5fa7b85542b8","unresolved":false,"context_lines":[{"line_number":10,"context_line":"DIB_OPENSTACK_REPOS_CUSTOM_LIST"},{"line_number":11,"context_line":"  :Required: No"},{"line_number":12,"context_line":"  :Default: None"},{"line_number":13,"context_line":"  :Description: Path to a file with custom list of repos separated by newlines"},{"line_number":14,"context_line":"  :Example: ``DIB_OPENSTACK_REPOS_CUSTOM_LIST\u003d/tmp/path_to_file/openstack_repos_custom``"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a629dbe_c759e18f","line":13,"updated":"2016-11-11 02:56:37.000000000","message":"this should explain what it actually does; which is something like only caches the repos in the list, rather than all repos","commit_id":"bdafd2024b8d07716f92239ac4187feaec5d0982"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"0185126c84c482197b98f483b4ba36f07df908ec","unresolved":false,"context_lines":[{"line_number":16,"context_line":"    Download only the repos that appear in the custom file rather than"},{"line_number":17,"context_line":"    downloading all openstack repos that appear in the default file."},{"line_number":18,"context_line":"  :Example:"},{"line_number":19,"context_line":"    DIB_CUSTOM_PROJECTS_LIST_URL\u003d\u0027file:///etc//project-config//gerrit//custom_projects.yaml\u0027"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5a74a57a_d6ecd0c9","line":19,"updated":"2016-11-23 22:39:03.000000000","message":"nit: it think the double //\u0027s here aren\u0027t required","commit_id":"918a3865963f381506c755e4dfff2d92022e002c"}],"nodepool/elements/openstack-repos/extra-data.d/50-create-repo-list":[{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"ec3bf6e4463e8d6d1ce3470abc1a5fa7b85542b8","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def main():"},{"line_number":33,"context_line":"    if CUSTOM_PROJECTS_LIST_FILE:"},{"line_number":34,"context_line":"        with open(CUSTOM_PROJECTS_LIST_FILE , \u0027r\u0027) as f:"},{"line_number":35,"context_line":"            projects \u003d f.read().strip().split(\u0027\\n\u0027)"},{"line_number":36,"context_line":"    else:"},{"line_number":37,"context_line":"        projects \u003d [f[\u0027project\u0027] for f in yaml.load(urllib2.urlopen(URL))]"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"9a629dbe_877c49ed","line":34,"updated":"2016-11-11 02:56:37.000000000","message":"nice to sanity check exceptions here","commit_id":"bdafd2024b8d07716f92239ac4187feaec5d0982"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"0fd6795a21efe3ce8d234addb349cc1e1de788d1","unresolved":false,"context_lines":[{"line_number":35,"context_line":"            with open(CUSTOM_PROJECTS_LIST_FILE , \u0027r\u0027) as f:"},{"line_number":36,"context_line":"                projects \u003d f.read().strip().split(\u0027\\n\u0027)"},{"line_number":37,"context_line":"        except IOError as e:"},{"line_number":38,"context_line":"            echo \"Could not open CUSTOM_PROJECTS_LIST_FILE\""},{"line_number":39,"context_line":"            projects \u003d [f[\u0027project\u0027] for f in yaml.load(urllib2.urlopen(URL))]"},{"line_number":40,"context_line":"    else:"},{"line_number":41,"context_line":"        projects \u003d [f[\u0027project\u0027] for f in yaml.load(urllib2.urlopen(URL))]"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"7a77a97e_18ae4c98","line":38,"updated":"2016-11-22 20:16:10.000000000","message":"python not shell :)","commit_id":"4dc596da5000d13420b97de7c067f812b3ed950d"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"0fd6795a21efe3ce8d234addb349cc1e1de788d1","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                projects \u003d f.read().strip().split(\u0027\\n\u0027)"},{"line_number":37,"context_line":"        except IOError as e:"},{"line_number":38,"context_line":"            echo \"Could not open CUSTOM_PROJECTS_LIST_FILE\""},{"line_number":39,"context_line":"            projects \u003d [f[\u0027project\u0027] for f in yaml.load(urllib2.urlopen(URL))]"},{"line_number":40,"context_line":"    else:"},{"line_number":41,"context_line":"        projects \u003d [f[\u0027project\u0027] for f in yaml.load(urllib2.urlopen(URL))]"},{"line_number":42,"context_line":"    with open(PROJECTS_REPOS, \u0027w\u0027) as projects_list:"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"7a77a97e_18b3acea","line":39,"updated":"2016-11-22 20:16:10.000000000","message":"i\u0027d prefer to refactor this to not duplicate this line of code, in any way you choose.","commit_id":"4dc596da5000d13420b97de7c067f812b3ed950d"}],"nodepool/scripts/cache_git_repos.py":[{"author":{"_account_id":10213,"name":"Alon Marx","email":"alonma@il.ibm.com","username":"alonmarx"},"change_message_id":"98f3df7d1ba35e6796f295156e26682ce8818aa4","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"def main():"},{"line_number":70,"context_line":"    blacklist_projects \u003d []"},{"line_number":71,"context_line":"    blacklist_projects_file \u003d os.getenv(\u0027BLACKLIST_PROJECTS\u0027)"},{"line_number":72,"context_line":"    if blacklist_projects_file:"},{"line_number":73,"context_line":"        with open(blacklist_projects_file , \u0027r\u0027) as f:"},{"line_number":74,"context_line":"            blacklist_projects \u003d f.read().split(\u0027\\n\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_8825ddaf","line":71,"range":{"start_line":71,"start_character":4,"end_line":71,"end_character":61},"updated":"2016-07-23 08:13:04.000000000","message":"How about using the environment variable to hold the list of repos?","commit_id":"ef6f029318fac8a466f8ebc0331fa3e2d636e7ec"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"ec3bf6e4463e8d6d1ce3470abc1a5fa7b85542b8","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    # \"OPENSTACK_REPOS_CUSTOM_LIST\" is a path to a file holding the custom list"},{"line_number":72,"context_line":"    custom_projects_list \u003d []"},{"line_number":73,"context_line":"    custom_projects_list_file \u003d os.getenv(\u0027OPENSTACK_REPOS_CUSTOM_LIST\u0027)"},{"line_number":74,"context_line":"    if custom_projects_list_file:"},{"line_number":75,"context_line":"        with open(custom_projects_list_file , \u0027r\u0027) as f:"},{"line_number":76,"context_line":"            custom_projects_list \u003d f.read().split(\u0027\\n\u0027)"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_0743d9b2","line":74,"updated":"2016-11-11 02:56:37.000000000","message":"be nice to sanity check this and give some sort of helpful message","commit_id":"bdafd2024b8d07716f92239ac4187feaec5d0982"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"ec3bf6e4463e8d6d1ce3470abc1a5fa7b85542b8","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        m \u003d PROJECT_RE.match(line)"},{"line_number":84,"context_line":"        if m:"},{"line_number":85,"context_line":"            project \u003d m.group(1)"},{"line_number":86,"context_line":"            if custom_projects_list and project not in custom_projects_list:"},{"line_number":87,"context_line":"                continue"},{"line_number":88,"context_line":"            dirname \u003d os.path.dirname(project)"},{"line_number":89,"context_line":"            # Skip repos that are inactive"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_27f7fd8b","line":86,"updated":"2016-11-11 02:56:37.000000000","message":"if project not in custom_projects_list:\n\nachieves the same thing?","commit_id":"bdafd2024b8d07716f92239ac4187feaec5d0982"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"874345b69d73f9e31c266568fd654b32982c5621","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        m \u003d PROJECT_RE.match(line)"},{"line_number":84,"context_line":"        if m:"},{"line_number":85,"context_line":"            project \u003d m.group(1)"},{"line_number":86,"context_line":"            if custom_projects_list and project not in custom_projects_list:"},{"line_number":87,"context_line":"                continue"},{"line_number":88,"context_line":"            dirname \u003d os.path.dirname(project)"},{"line_number":89,"context_line":"            # Skip repos that are inactive"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_67e19ed0","line":86,"in_reply_to":"9a629dbe_27f7fd8b","updated":"2016-11-14 15:42:34.000000000","message":"custom_project_list is an empty list by default.\nThus if it\u0027s empty, we don\u0027t want to filter any project.\nIn other words, if it\u0027s empty we simply ignore the filtering and stay with the default behavior which is caching ALL the repos","commit_id":"bdafd2024b8d07716f92239ac4187feaec5d0982"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"69bd2a4e89e10f702e34fc31a5966cdd11b9ced9","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        m \u003d PROJECT_RE.match(line)"},{"line_number":84,"context_line":"        if m:"},{"line_number":85,"context_line":"            project \u003d m.group(1)"},{"line_number":86,"context_line":"            if custom_projects_list and project not in custom_projects_list:"},{"line_number":87,"context_line":"                continue"},{"line_number":88,"context_line":"            dirname \u003d os.path.dirname(project)"},{"line_number":89,"context_line":"            # Skip repos that are inactive"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a77a97e_207243e6","line":86,"in_reply_to":"9a629dbe_67e19ed0","updated":"2016-11-14 22:46:00.000000000","message":"ok, fair point.  looking at this a little more closely now, it seems we\u0027ve now got skipping logic in two places -- here where we continue, and below where we check the path name with some nesting of the clone.\n\nwhat do you think about building the list in one place and then walking it?","commit_id":"bdafd2024b8d07716f92239ac4187feaec5d0982"}]}
