)]}'
{"pbr/packaging.py":[{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"978d89d5fd9dfa3403eecd18f76a002c37e94336","unresolved":false,"context_lines":[{"line_number":253,"context_line":"    def run(self):"},{"line_number":254,"context_line":"        if not self.single_version_externally_managed:"},{"line_number":255,"context_line":"            have_reqs_file \u003d False"},{"line_number":256,"context_line":"            for req_file in (\u0027requirements.txt\u0027, \u0027tools/pip-requires\u0027):"},{"line_number":257,"context_line":"                if os.path.exists(req_file):"},{"line_number":258,"context_line":"                    have_reqs_file \u003d True"},{"line_number":259,"context_line":"                    pip.main([\u0027install\u0027, \u0027-r\u0027, req_file])"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2F7qY%3D","line":256,"updated":"2013-06-05 19:40:02.000000000","message":"This 2 files are explicitly specified in multiple places in this same module. I think it would be better to have them in a REQUIREMENTS constant.","commit_id":"7d4eb8f8ad4cb861cf20b7fa2babd0d9ce74e651"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"c1e8cf6a3594f5e529cde8803c5e8f20988ba68a","unresolved":false,"context_lines":[{"line_number":253,"context_line":"    def run(self):"},{"line_number":254,"context_line":"        if not self.single_version_externally_managed:"},{"line_number":255,"context_line":"            have_reqs_file \u003d False"},{"line_number":256,"context_line":"            for req_file in (\u0027requirements.txt\u0027, \u0027tools/pip-requires\u0027):"},{"line_number":257,"context_line":"                if os.path.exists(req_file):"},{"line_number":258,"context_line":"                    have_reqs_file \u003d True"},{"line_number":259,"context_line":"                    pip.main([\u0027install\u0027, \u0027-r\u0027, req_file])"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2F7pI%3D","line":256,"in_reply_to":"AAAAPX%2F%2F7qY%3D","updated":"2013-06-05 19:44:21.000000000","message":"*facepalm*","commit_id":"7d4eb8f8ad4cb861cf20b7fa2babd0d9ce74e651"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b044c8cd07e23f1f2a56bee8cad0c73fec70d1f7","unresolved":false,"context_lines":[{"line_number":231,"context_line":"                           filename[:-3])] \u003d True"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"class LocalInstall(install.install):"},{"line_number":235,"context_line":"    \"\"\"Runs python setup.py install in a sensible manner."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    Force a non-egg installed in the manner of"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPX%2F%2F52c%3D","line":234,"updated":"2013-06-06 12:10:26.000000000","message":"Is this an incompatible API change?\n\nIf not, can we hide these classes from the public API?","commit_id":"3253d352efb740c4b75d8112a8fa9bdfd63e72de"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"ecc1de96a9abe9b0103151e61fa713c718d3b8ae","unresolved":false,"context_lines":[{"line_number":231,"context_line":"                           filename[:-3])] \u003d True"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"class LocalInstall(install.install):"},{"line_number":235,"context_line":"    \"\"\"Runs python setup.py install in a sensible manner."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    Force a non-egg installed in the manner of"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPX%2F%2F4RU%3D","line":234,"in_reply_to":"AAAAPX%2F%2F52c%3D","updated":"2013-06-06 20:49:09.000000000","message":"Let\u0027s hide the classes from the public API - I do not expect people to be consuming them directly,.","commit_id":"3253d352efb740c4b75d8112a8fa9bdfd63e72de"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b044c8cd07e23f1f2a56bee8cad0c73fec70d1f7","unresolved":false,"context_lines":[{"line_number":255,"context_line":"            for req_file in REQUIREMENTS_FILES:"},{"line_number":256,"context_line":"                if os.path.exists(req_file):"},{"line_number":257,"context_line":"                    have_reqs_file \u003d True"},{"line_number":258,"context_line":"                    pip.main([\u0027install\u0027, \u0027-r\u0027, req_file])"},{"line_number":259,"context_line":"            if not have_reqs_file and self.distribution.install_requires:"},{"line_number":260,"context_line":"                pip.main([\u0027install\u0027] + self.distribution.install_requires)"},{"line_number":261,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPX%2F%2F52M%3D","line":258,"updated":"2013-06-06 12:10:26.000000000","message":"Hmm.\n\nWe take requirements.txt and do things like translate URLs to valid requirements to go into requirements.txt and add the URLs to dependency_links\n\ndevstack takes the URLs from dependency_links and passes them to pip via \u0027-f\u0027 - that\u0027s so we don\u0027t install a version from a URL if a newer version is already installed\n\nIt seems to me that we need the exact same semantics here too","commit_id":"3253d352efb740c4b75d8112a8fa9bdfd63e72de"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"ecc1de96a9abe9b0103151e61fa713c718d3b8ae","unresolved":false,"context_lines":[{"line_number":255,"context_line":"            for req_file in REQUIREMENTS_FILES:"},{"line_number":256,"context_line":"                if os.path.exists(req_file):"},{"line_number":257,"context_line":"                    have_reqs_file \u003d True"},{"line_number":258,"context_line":"                    pip.main([\u0027install\u0027, \u0027-r\u0027, req_file])"},{"line_number":259,"context_line":"            if not have_reqs_file and self.distribution.install_requires:"},{"line_number":260,"context_line":"                pip.main([\u0027install\u0027] + self.distribution.install_requires)"},{"line_number":261,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPX%2F%2F4Rg%3D","line":258,"in_reply_to":"AAAAPX%2F%2F52M%3D","updated":"2013-06-06 20:49:09.000000000","message":"Actually - we parse and translate the URLs to make easy_install behave more like pip - since easy_install can\u0027t really deal with the things that pip deals with. The requirements files should all be pure pip consumable files.\n\nBut let\u0027s walk through it further. My main goal is that I want us to be behaving sensibly and the same everywhere.","commit_id":"3253d352efb740c4b75d8112a8fa9bdfd63e72de"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"ede018385225e3ebbd5e1f8087e5e0167d11f539","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"log.set_verbosity(log.INFO)"},{"line_number":38,"context_line":"TRUE_VALUES \u003d [\u0027true\u0027, \u00271\u0027, \u0027yes\u0027]"},{"line_number":39,"context_line":"REQUIREMENTS_FILES \u003d [\u0027requirements.txt\u0027, \u0027tools/pip-requires\u0027]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def append_text_list(config, key, text_list):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2FyO4%3D","line":39,"updated":"2013-06-10 18:42:21.000000000","message":"This should be a tuple, not a list: it\u0027s used as the default parameter for a bunch of functions, and mutable data there is a huge OMGWTFBBQ trap for new folk changing the code.","commit_id":"3af7f02ad3a4092003d8ef3b664cf1d4246b92c6"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"6e12bf7c2c639283f36d598b77047ce136b8dd9d","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"log.set_verbosity(log.INFO)"},{"line_number":38,"context_line":"TRUE_VALUES \u003d [\u0027true\u0027, \u00271\u0027, \u0027yes\u0027]"},{"line_number":39,"context_line":"REQUIREMENTS_FILES \u003d [\u0027requirements.txt\u0027, \u0027tools/pip-requires\u0027]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def append_text_list(config, key, text_list):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2FyM0%3D","line":39,"in_reply_to":"AAAAPX%2F%2FyO4%3D","updated":"2013-06-10 18:47:54.000000000","message":"Done","commit_id":"3af7f02ad3a4092003d8ef3b664cf1d4246b92c6"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"1c458703d75cf46b53a20b9bd1dcfdea090517fc","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    return [\"-f \u0027%s\u0027\" % link for link in links]"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"def missing_requires(requires):"},{"line_number":73,"context_line":"    \"\"\"Return the list of requirements that are not already installed.\"\"\""},{"line_number":74,"context_line":"    return [r for r in requires"},{"line_number":75,"context_line":"            if not pkg_resources.working_set.find("}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2Fyzo%3D","line":72,"updated":"2013-06-10 15:00:37.000000000","message":"make private","commit_id":"3af7f02ad3a4092003d8ef3b664cf1d4246b92c6"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"6e12bf7c2c639283f36d598b77047ce136b8dd9d","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    return [\"-f \u0027%s\u0027\" % link for link in links]"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"def missing_requires(requires):"},{"line_number":73,"context_line":"    \"\"\"Return the list of requirements that are not already installed.\"\"\""},{"line_number":74,"context_line":"    return [r for r in requires"},{"line_number":75,"context_line":"            if not pkg_resources.working_set.find("}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2FyMk%3D","line":72,"in_reply_to":"AAAAPX%2F%2Fyzo%3D","updated":"2013-06-10 18:47:54.000000000","message":"Done","commit_id":"3af7f02ad3a4092003d8ef3b664cf1d4246b92c6"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"1c458703d75cf46b53a20b9bd1dcfdea090517fc","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    \"\"\"Return the list of requirements that are not already installed.\"\"\""},{"line_number":74,"context_line":"    return [r for r in requires"},{"line_number":75,"context_line":"            if not pkg_resources.working_set.find("},{"line_number":76,"context_line":"                pkg_resources.Requirement.parse(r))]"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"def pip_install(links, requires, root\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2Fyzs%3D","line":76,"updated":"2013-06-10 15:00:37.000000000","message":"Hmm, care to explain why we need this ?\n\nWhy would pip have a problem with a requirement which is already installed?","commit_id":"3af7f02ad3a4092003d8ef3b664cf1d4246b92c6"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"6e12bf7c2c639283f36d598b77047ce136b8dd9d","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    \"\"\"Return the list of requirements that are not already installed.\"\"\""},{"line_number":74,"context_line":"    return [r for r in requires"},{"line_number":75,"context_line":"            if not pkg_resources.working_set.find("},{"line_number":76,"context_line":"                pkg_resources.Requirement.parse(r))]"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"def pip_install(links, requires, root\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2FyM4%3D","line":76,"in_reply_to":"AAAAPX%2F%2Fyzs%3D","updated":"2013-06-10 18:47:54.000000000","message":"Optimization.","commit_id":"3af7f02ad3a4092003d8ef3b664cf1d4246b92c6"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"1c458703d75cf46b53a20b9bd1dcfdea090517fc","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                pkg_resources.Requirement.parse(r))]"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"def pip_install(links, requires, root\u003dNone):"},{"line_number":80,"context_line":"    root_cmd \u003d \"\""},{"line_number":81,"context_line":"    if root:"},{"line_number":82,"context_line":"        root_cmd \u003d \"--root\u003d%s\" % root"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2Fyzg%3D","line":79,"updated":"2013-06-10 15:00:37.000000000","message":"make private","commit_id":"3af7f02ad3a4092003d8ef3b664cf1d4246b92c6"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"6e12bf7c2c639283f36d598b77047ce136b8dd9d","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                pkg_resources.Requirement.parse(r))]"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"def pip_install(links, requires, root\u003dNone):"},{"line_number":80,"context_line":"    root_cmd \u003d \"\""},{"line_number":81,"context_line":"    if root:"},{"line_number":82,"context_line":"        root_cmd \u003d \"--root\u003d%s\" % root"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2FyMo%3D","line":79,"in_reply_to":"AAAAPX%2F%2Fyzg%3D","updated":"2013-06-10 18:47:54.000000000","message":"Done","commit_id":"3af7f02ad3a4092003d8ef3b664cf1d4246b92c6"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"c6062df4820976468a70efae602cd66101a9c520","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        \"%s -m pip install %s %s %s\" % ("},{"line_number":85,"context_line":"            sys.executable,"},{"line_number":86,"context_line":"            root_cmd,"},{"line_number":87,"context_line":"            \" \".join(links),"},{"line_number":88,"context_line":"            \" \".join(_wrap_in_quotes(missing_requires(requires)))),"},{"line_number":89,"context_line":"        throw_on_error\u003dTrue, buffer\u003dFalse)"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2Fy84%3D","line":87,"updated":"2013-06-10 14:23:58.000000000","message":"It seems likely that we\u0027ll want to have the links quoted like the requirements on the next line are (think of a link with \u0026 in it). Is something else already adding quotes for the links?","commit_id":"3af7f02ad3a4092003d8ef3b664cf1d4246b92c6"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"6e12bf7c2c639283f36d598b77047ce136b8dd9d","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        \"%s -m pip install %s %s %s\" % ("},{"line_number":85,"context_line":"            sys.executable,"},{"line_number":86,"context_line":"            root_cmd,"},{"line_number":87,"context_line":"            \" \".join(links),"},{"line_number":88,"context_line":"            \" \".join(_wrap_in_quotes(missing_requires(requires)))),"},{"line_number":89,"context_line":"        throw_on_error\u003dTrue, buffer\u003dFalse)"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2FyMQ%3D","line":87,"in_reply_to":"AAAAPX%2F%2Fy84%3D","updated":"2013-06-10 18:47:54.000000000","message":"Yeah - they get quoted in _make_links_args","commit_id":"3af7f02ad3a4092003d8ef3b664cf1d4246b92c6"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"ede018385225e3ebbd5e1f8087e5e0167d11f539","unresolved":false,"context_lines":[{"line_number":191,"context_line":"    out \u003d output.communicate()"},{"line_number":192,"context_line":"    if output.returncode and throw_on_error:"},{"line_number":193,"context_line":"        raise distutils.errors.DistutilsError("},{"line_number":194,"context_line":"            \"%s returned %d\" % (cmd, output.returncode))"},{"line_number":195,"context_line":"    if len(out) \u003d\u003d 0 or not out[0] or not out[0].strip():"},{"line_number":196,"context_line":"        return None"},{"line_number":197,"context_line":"    return out[0].strip().decode(\u0027utf-8\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2FyOs%3D","line":194,"updated":"2013-06-10 18:42:21.000000000","message":"This basically reimplements subprocess.check_output; have you considered wrapping that instead?","commit_id":"3af7f02ad3a4092003d8ef3b664cf1d4246b92c6"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"6e12bf7c2c639283f36d598b77047ce136b8dd9d","unresolved":false,"context_lines":[{"line_number":191,"context_line":"    out \u003d output.communicate()"},{"line_number":192,"context_line":"    if output.returncode and throw_on_error:"},{"line_number":193,"context_line":"        raise distutils.errors.DistutilsError("},{"line_number":194,"context_line":"            \"%s returned %d\" % (cmd, output.returncode))"},{"line_number":195,"context_line":"    if len(out) \u003d\u003d 0 or not out[0] or not out[0].strip():"},{"line_number":196,"context_line":"        return None"},{"line_number":197,"context_line":"    return out[0].strip().decode(\u0027utf-8\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2FyME%3D","line":194,"in_reply_to":"AAAAPX%2F%2FyOs%3D","updated":"2013-06-10 18:47:54.000000000","message":"Good call. I\u0027ll do it as a refactor later I think.","commit_id":"3af7f02ad3a4092003d8ef3b664cf1d4246b92c6"}],"setup.py":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"f6bc7df83fca0a73c00d8c8c86a38ff4604b9a0f","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    import subprocess"},{"line_number":23,"context_line":"    subprocess.call("},{"line_number":24,"context_line":"        [sys.executable] +"},{"line_number":25,"context_line":"        \"-m pip install distribute\u003c0.7 d2to1\u003e\u003d0.2.10,\u003c0.3\".split())"},{"line_number":26,"context_line":"    sys.exit(subprocess.call([sys.executable] + sys.argv))"},{"line_number":27,"context_line":"import setuptools"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2FyGs%3D","line":25,"updated":"2013-06-10 19:10:36.000000000","message":"The remaining unresolved issue is the d2to1 version constraints. Won\u0027t they bite us?","commit_id":"c69b38633903945f25297410d0a870fb3ea4cc3f"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"3f3496aa6e2131c7aa1730bc827faaecda3f0cc9","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    import subprocess"},{"line_number":23,"context_line":"    subprocess.call("},{"line_number":24,"context_line":"        [sys.executable] +"},{"line_number":25,"context_line":"        \"-m pip install distribute\u003c0.7 d2to1\u003e\u003d0.2.10,\u003c0.3\".split())"},{"line_number":26,"context_line":"    sys.exit(subprocess.call([sys.executable] + sys.argv))"},{"line_number":27,"context_line":"import setuptools"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPX%2F%2FyD8%3D","line":25,"in_reply_to":"AAAAPX%2F%2FyGs%3D","updated":"2013-06-10 19:26:25.000000000","message":"What is the \"d2to1 version constraints issue\" ?\n\nAnd is it resolved by adding distribute\u003c0.7 in  I44fb72a679a17782b7098fcf86d09f322e902268 ?","commit_id":"c69b38633903945f25297410d0a870fb3ea4cc3f"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"2f3f9110e169581594ee5fa907a41ad922d8a138","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import sys"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"try:"},{"line_number":21,"context_line":"    sys.path +\u003d [x for x in os.listdir(\".\") if x.endswith(\".egg\")]"},{"line_number":22,"context_line":"    import d2to1  # flake8: noqa"},{"line_number":23,"context_line":"except ImportError:"},{"line_number":24,"context_line":"    import subprocess"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPX%2F%2FwYA%3D","line":21,"updated":"2013-06-11 10:11:45.000000000","message":"Good god, that\u0027s horrific","commit_id":"d1c53ddad7a90529f151fa08feee41c6d16c44a1"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"2f3f9110e169581594ee5fa907a41ad922d8a138","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        [sys.executable] +"},{"line_number":27,"context_line":"            \"-m pip.__init__ install distribute\u003c0.7 d2to1\u003e\u003d0.2.10,\u003c0.3\".split()"},{"line_number":28,"context_line":"    ):"},{"line_number":29,"context_line":"        sys.exit(subprocess.call([sys.executable] + sys.argv))"},{"line_number":30,"context_line":"import setuptools"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"setuptools.setup("}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPX%2F%2FwX4%3D","line":29,"updated":"2013-06-11 10:11:45.000000000","message":"And this is all awful too","commit_id":"d1c53ddad7a90529f151fa08feee41c6d16c44a1"}]}
