)]}'
{"openstack_releases/cmds/interactive_release.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"94e25f55fa1e211703d910578add97afbfe24f5a","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            newest_release \u003d collections.OrderedDict(["},{"line_number":182,"context_line":"                (\u0027launchpad\u0027, launchpad_project),"},{"line_number":183,"context_line":"                (\u0027send-announcements-to\u0027, announce_email),"},{"line_number":184,"context_line":"                (\u0027include-pypi-link\u0027, True),"},{"line_number":185,"context_line":"                (\u0027release-notes\u0027, notes_link),"},{"line_number":186,"context_line":"                (\u0027releases\u0027, []),"},{"line_number":187,"context_line":"            ])"}],"source_content_type":"text/x-python","patch_set":15,"id":"dab17558_7893795b","line":184,"updated":"2016-05-11 15:44:10.000000000","message":"We don\u0027t always want to include the PyPI link.","commit_id":"dcecaf98cafdc919c6c23b6083f77340a7cd2d31"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"9fb40517f0789c3b9c938dc22c2fe8a9edbff254","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            newest_release \u003d collections.OrderedDict(["},{"line_number":182,"context_line":"                (\u0027launchpad\u0027, launchpad_project),"},{"line_number":183,"context_line":"                (\u0027send-announcements-to\u0027, announce_email),"},{"line_number":184,"context_line":"                (\u0027include-pypi-link\u0027, True),"},{"line_number":185,"context_line":"                (\u0027release-notes\u0027, notes_link),"},{"line_number":186,"context_line":"                (\u0027releases\u0027, []),"},{"line_number":187,"context_line":"            ])"}],"source_content_type":"text/x-python","patch_set":15,"id":"dab17558_e111245f","line":184,"in_reply_to":"dab17558_7893795b","updated":"2016-05-12 23:41:54.000000000","message":"Done","commit_id":"dcecaf98cafdc919c6c23b6083f77340a7cd2d31"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"94e25f55fa1e211703d910578add97afbfe24f5a","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                (\u0027launchpad\u0027, launchpad_project),"},{"line_number":183,"context_line":"                (\u0027send-announcements-to\u0027, announce_email),"},{"line_number":184,"context_line":"                (\u0027include-pypi-link\u0027, True),"},{"line_number":185,"context_line":"                (\u0027release-notes\u0027, notes_link),"},{"line_number":186,"context_line":"                (\u0027releases\u0027, []),"},{"line_number":187,"context_line":"            ])"},{"line_number":188,"context_line":"        possible_hashes \u003d []"}],"source_content_type":"text/x-python","patch_set":15,"id":"dab17558_98d1fd25","line":185,"updated":"2016-05-11 15:44:10.000000000","message":"The release notes links being added aren\u0027t always valid (they won\u0027t exist at the beginning of a cycle, like now).","commit_id":"dcecaf98cafdc919c6c23b6083f77340a7cd2d31"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"9fb40517f0789c3b9c938dc22c2fe8a9edbff254","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                (\u0027launchpad\u0027, launchpad_project),"},{"line_number":183,"context_line":"                (\u0027send-announcements-to\u0027, announce_email),"},{"line_number":184,"context_line":"                (\u0027include-pypi-link\u0027, True),"},{"line_number":185,"context_line":"                (\u0027release-notes\u0027, notes_link),"},{"line_number":186,"context_line":"                (\u0027releases\u0027, []),"},{"line_number":187,"context_line":"            ])"},{"line_number":188,"context_line":"        possible_hashes \u003d []"}],"source_content_type":"text/x-python","patch_set":15,"id":"dab17558_811c9878","line":185,"in_reply_to":"dab17558_98d1fd25","updated":"2016-05-12 23:41:54.000000000","message":"Done","commit_id":"dcecaf98cafdc919c6c23b6083f77340a7cd2d31"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"94e25f55fa1e211703d910578add97afbfe24f5a","unresolved":false,"context_lines":[{"line_number":227,"context_line":"            newest_release \u003d yamlutils.dumps(newest_release)"},{"line_number":228,"context_line":"            with open(newest_release_path, \u0027wb\u0027) as fh:"},{"line_number":229,"context_line":"                fh.write(newest_release)"},{"line_number":230,"context_line":"        if uc_path:"},{"line_number":231,"context_line":"            with open(uc_path, \u0027rb\u0027) as fh:"},{"line_number":232,"context_line":"                uc_lines \u003d fh.read().splitlines()"},{"line_number":233,"context_line":"            new_lines \u003d []"}],"source_content_type":"text/x-python","patch_set":15,"id":"dab17558_d8ac258e","line":230,"updated":"2016-05-11 15:44:10.000000000","message":"We\u0027re going to make updating the constraints file part of the release process, so we should leave this stuff out.","commit_id":"dcecaf98cafdc919c6c23b6083f77340a7cd2d31"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"9fb40517f0789c3b9c938dc22c2fe8a9edbff254","unresolved":false,"context_lines":[{"line_number":227,"context_line":"            newest_release \u003d yamlutils.dumps(newest_release)"},{"line_number":228,"context_line":"            with open(newest_release_path, \u0027wb\u0027) as fh:"},{"line_number":229,"context_line":"                fh.write(newest_release)"},{"line_number":230,"context_line":"        if uc_path:"},{"line_number":231,"context_line":"            with open(uc_path, \u0027rb\u0027) as fh:"},{"line_number":232,"context_line":"                uc_lines \u003d fh.read().splitlines()"},{"line_number":233,"context_line":"            new_lines \u003d []"}],"source_content_type":"text/x-python","patch_set":15,"id":"dab17558_412c70ab","line":230,"in_reply_to":"dab17558_d8ac258e","updated":"2016-05-12 23:41:54.000000000","message":"Done","commit_id":"dcecaf98cafdc919c6c23b6083f77340a7cd2d31"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"94e25f55fa1e211703d910578add97afbfe24f5a","unresolved":false,"context_lines":[{"line_number":367,"context_line":"                output \u003d output.strip()"},{"line_number":368,"context_line":"                changes \u003d list(clean_changes(output.splitlines()))"},{"line_number":369,"context_line":"            else:"},{"line_number":370,"context_line":"                print(\"The last release of project %s was:\" % short_project)"},{"line_number":371,"context_line":"                print(\"  Released in: %s\" % last_release_cycle)"},{"line_number":372,"context_line":"                print(\"  Version: %s\" % last_release[\u0027version\u0027])"},{"line_number":373,"context_line":"                print(\"  At sha: %s\" % last_release[\u0027projects\u0027][0][\u0027hash\u0027])"}],"source_content_type":"text/x-python","patch_set":15,"id":"dab17558_388571ce","line":370,"updated":"2016-05-11 15:44:10.000000000","message":"The last release might be on a different branch than where we need to release the current version from, so the log command below is going to show the wrong data in a lot of cases right around the start of each cycle. See how list_unreleased_changes.sh in the release-tools repo does this.","commit_id":"dcecaf98cafdc919c6c23b6083f77340a7cd2d31"}],"tools/propose_unreleased_changes.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"120f399928205d4667837f1f148ac2767319c722","unresolved":false,"context_lines":[{"line_number":67,"context_line":"def clone_a_repo(repo_url, repo_base_path, repo_name):"},{"line_number":68,"context_line":"    repo_path \u003d os.path.join(repo_base_path, repo_name)"},{"line_number":69,"context_line":"    if not os.path.isdir(repo_path):"},{"line_number":70,"context_line":"        cmd \u003d [\u0027git\u0027, \u0027clone\u0027, repo_url, repo_name]"},{"line_number":71,"context_line":"        subprocess.check_output(cmd, cwd\u003drepo_base_path,"},{"line_number":72,"context_line":"                                stderr\u003dsubprocess.STDOUT)"},{"line_number":73,"context_line":"    return repo_path"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_76460a50","line":70,"updated":"2016-04-20 16:02:58.000000000","message":"We generally try to use zuul-cloner for checking out repos because we want to avoid downloading the whole repo if there is a local cache available. \n\nhttp://git.openstack.org/cgit/openstack/releases/tree/openstack_releases/gitutils.py#n57","commit_id":"b09df46c5759aeb1a80ecac6d743bcf34a15147e"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"31b5a51998460667bbabec6aab6c0e58dac7e1f1","unresolved":false,"context_lines":[{"line_number":67,"context_line":"def clone_a_repo(repo_url, repo_base_path, repo_name):"},{"line_number":68,"context_line":"    repo_path \u003d os.path.join(repo_base_path, repo_name)"},{"line_number":69,"context_line":"    if not os.path.isdir(repo_path):"},{"line_number":70,"context_line":"        cmd \u003d [\u0027git\u0027, \u0027clone\u0027, repo_url, repo_name]"},{"line_number":71,"context_line":"        subprocess.check_output(cmd, cwd\u003drepo_base_path,"},{"line_number":72,"context_line":"                                stderr\u003dsubprocess.STDOUT)"},{"line_number":73,"context_line":"    return repo_path"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_7fb86875","line":70,"in_reply_to":"1a122d0e_76460a50","updated":"2016-04-20 19:15:13.000000000","message":"Right I switched to that.","commit_id":"b09df46c5759aeb1a80ecac6d743bcf34a15147e"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"120f399928205d4667837f1f148ac2767319c722","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    else:"},{"line_number":111,"context_line":"        print(\"%s changes to release are:\" % (len(change_lines)))"},{"line_number":112,"context_line":"    for sha, descr in change_lines[0:max_changes_show]:"},{"line_number":113,"context_line":"        print(\"  %s %s\" % (sha, descr))"},{"line_number":114,"context_line":"    leftover_change_lines \u003d change_lines[max_changes_show:]"},{"line_number":115,"context_line":"    if leftover_change_lines:"},{"line_number":116,"context_line":"        print(\"   and %s more changes...\" % len(leftover_change_lines))"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_3695b286","line":113,"updated":"2016-04-20 16:02:58.000000000","message":"http://git.openstack.org/cgit/openstack-infra/release-tools/tree/list_unreleased_changes.sh\n\nand in particular\n\nhttp://git.openstack.org/cgit/openstack-infra/release-tools/tree/list_oslo_unreleased_changes.sh","commit_id":"b09df46c5759aeb1a80ecac6d743bcf34a15147e"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"31b5a51998460667bbabec6aab6c0e58dac7e1f1","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    else:"},{"line_number":111,"context_line":"        print(\"%s changes to release are:\" % (len(change_lines)))"},{"line_number":112,"context_line":"    for sha, descr in change_lines[0:max_changes_show]:"},{"line_number":113,"context_line":"        print(\"  %s %s\" % (sha, descr))"},{"line_number":114,"context_line":"    leftover_change_lines \u003d change_lines[max_changes_show:]"},{"line_number":115,"context_line":"    if leftover_change_lines:"},{"line_number":116,"context_line":"        print(\"   and %s more changes...\" % len(leftover_change_lines))"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_3f371000","line":113,"in_reply_to":"1a122d0e_3695b286","updated":"2016-04-20 19:15:13.000000000","message":"Ya, I could just drop this and prefer that, but since people would be viewing the list of changes to have a release come out in this tool it seems like its just a nice to have/small thing for this tool to do.\n\nTo try this out:\n\nCheckout the review, pip install requirements.\n\nThen\n\n  $ interactive-release  openstack/oslo.log\n\nI think doing that will make this more clear as to what its doing here...","commit_id":"b09df46c5759aeb1a80ecac6d743bcf34a15147e"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"120f399928205d4667837f1f148ac2767319c722","unresolved":false,"context_lines":[{"line_number":198,"context_line":""},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"def prettify_yaml(obj):"},{"line_number":201,"context_line":"    return pyaml.dumps(obj, safe\u003dTrue,"},{"line_number":202,"context_line":"                       explicit_start\u003dTrue, indent\u003d2)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_364ad226","line":201,"updated":"2016-04-20 16:02:58.000000000","message":"Does this preserve formatting like\n\n  - foo: val\n     bar: val\n\nor does it turn it into this?\n\n  - {\u0027foo\u0027: \u0027val\u0027, \u0027bar\u0027: \u0027val\u0027}","commit_id":"b09df46c5759aeb1a80ecac6d743bcf34a15147e"}]}
