)]}'
{"doc/source/conf.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"5f22b72bec281cc8f39b9c0a909d8a9b0c22524a","unresolved":false,"context_lines":[{"line_number":32,"context_line":"#              \u0027sphinx.ext.todo\u0027, \u0027sphinx.ext.coverage\u0027]"},{"line_number":33,"context_line":"extensions \u003d [\u0027sphinx.ext.autodoc\u0027,"},{"line_number":34,"context_line":"              \u0027sphinx.ext.todo\u0027,"},{"line_number":35,"context_line":"              # \u0027sphinx.ect.intersphinx\u0027,"},{"line_number":36,"context_line":"              \u0027sphinx.ext.coverage\u0027]"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"todo_include_todos \u003d True"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B6tk%3D","line":35,"updated":"2013-02-14 15:35:13.000000000","message":"out of curiousity, this file has quite a few differences than the oslo/doc/source/conf.py file. are these just keystone custom values?","commit_id":"5e82d945aa6ba6ab3527abb54163ae6a22a25fa7"}],"keystone/openstack/common/setup.py":[{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"3e6920b7c9fe41f2b21637d6322f214e056eab93","unresolved":false,"context_lines":[{"line_number":118,"context_line":""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"def _run_shell_command(cmd):"},{"line_number":121,"context_line":"    if os.name \u003d\u003d \u0027nt\u0027:"},{"line_number":122,"context_line":"        output \u003d subprocess.Popen([\"cmd.exe\", \"/C\", cmd],"},{"line_number":123,"context_line":"                                  stdout\u003dsubprocess.PIPE)"},{"line_number":124,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FiSM%3D","line":121,"updated":"2013-01-16 21:49:54.000000000","message":"Why was support added for nt?  Is there a thought that this will run not just on Linux platforms but expand to windows platforms?","commit_id":"086b40a3742f81ea375aa6551742cc01f9bd7fbd"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"abb1ca0ba54fe1ed8cedfd70552da73367d9420e","unresolved":false,"context_lines":[{"line_number":118,"context_line":""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"def _run_shell_command(cmd):"},{"line_number":121,"context_line":"    if os.name \u003d\u003d \u0027nt\u0027:"},{"line_number":122,"context_line":"        output \u003d subprocess.Popen([\"cmd.exe\", \"/C\", cmd],"},{"line_number":123,"context_line":"                                  stdout\u003dsubprocess.PIPE)"},{"line_number":124,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FNDs%3D","line":121,"in_reply_to":"AAAAM3%2F%2FiSM%3D","updated":"2013-02-03 00:13:58.000000000","message":"I don\u0027t know - the nt support was added separately from the version update code.","commit_id":"086b40a3742f81ea375aa6551742cc01f9bd7fbd"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"1b6e54bd4ee76b412b31285b3983234e8f0003a5","unresolved":false,"context_lines":[{"line_number":36,"context_line":"            for l in fp:"},{"line_number":37,"context_line":"                try:"},{"line_number":38,"context_line":"                    canonical_email, alias \u003d re.match("},{"line_number":39,"context_line":"                        r\u0027[^#]*?(\u003c.+\u003e).*(\u003c.+\u003e).*\u0027, l).groups()"},{"line_number":40,"context_line":"                except AttributeError:"},{"line_number":41,"context_line":"                    continue"},{"line_number":42,"context_line":"                mapping[alias] \u003d canonical_email"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FKfk%3D","line":39,"updated":"2013-02-05 05:31:37.000000000","message":"might want to comment this regular expression so it is easier to understand","commit_id":"1169a5684ef608328ff7ef7d8766a8a381887a45"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d5724576c2d853b9285b7402a31cb42ac7924a60","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"def _run_shell_command(cmd, throw_on_error\u003dFalse):"},{"line_number":112,"context_line":"    if os.name \u003d\u003d \u0027nt\u0027:"},{"line_number":113,"context_line":"        output \u003d subprocess.Popen([\"cmd.exe\", \"/C\", cmd],"},{"line_number":114,"context_line":"                                  stdout\u003dsubprocess.PIPE,"},{"line_number":115,"context_line":"                                  stderr\u003dsubprocess.PIPE)"},{"line_number":116,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B5nQ%3D","line":113,"updated":"2013-02-15 02:52:08.000000000","message":"why do we need to wrap the command in a cmd.exe or /bin/sh? A comment would explain it all.\n\nI\u0027m guessing it\u0027s to parse/split up the command string. If that\u0027s the case, I\u0027d rather the string was split up by the caller.","commit_id":"5e82d945aa6ba6ab3527abb54163ae6a22a25fa7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d5724576c2d853b9285b7402a31cb42ac7924a60","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    else:"},{"line_number":117,"context_line":"        output \u003d subprocess.Popen([\"/bin/sh\", \"-c\", cmd],"},{"line_number":118,"context_line":"                                  stdout\u003dsubprocess.PIPE,"},{"line_number":119,"context_line":"                                  stderr\u003dsubprocess.PIPE)"},{"line_number":120,"context_line":"    if output.returncode and throw_on_error:"},{"line_number":121,"context_line":"        raise Exception(\"%s returned %d\" % cmd, output.returncode)"},{"line_number":122,"context_line":"    out \u003d output.communicate()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B5nM%3D","line":119,"updated":"2013-02-15 02:52:08.000000000","message":"stderr was added, but it\u0027s not used. any reason? A comment would help.","commit_id":"5e82d945aa6ba6ab3527abb54163ae6a22a25fa7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d5724576c2d853b9285b7402a31cb42ac7924a60","unresolved":false,"context_lines":[{"line_number":290,"context_line":"                return \"%s.a%s.g%s\" % (pre_version, _get_revno(), sha)"},{"line_number":291,"context_line":"        else:"},{"line_number":292,"context_line":"            return _run_shell_command("},{"line_number":293,"context_line":"                \"git describe --always\").replace(\u0027-\u0027, \u0027.\u0027)"},{"line_number":294,"context_line":"    return None"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B5m0%3D","line":293,"updated":"2013-02-15 02:52:08.000000000","message":"why isn\u0027t this one throw_on_error? seems like that should be the default.","commit_id":"5e82d945aa6ba6ab3527abb54163ae6a22a25fa7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d5724576c2d853b9285b7402a31cb42ac7924a60","unresolved":false,"context_lines":[{"line_number":297,"context_line":"def _get_version_from_pkg_info(package_name):"},{"line_number":298,"context_line":"    \"\"\"Get the version from PKG-INFO file if we can.\"\"\""},{"line_number":299,"context_line":"    try:"},{"line_number":300,"context_line":"        pkg_info_file \u003d open(\u0027PKG-INFO\u0027, \u0027r\u0027)"},{"line_number":301,"context_line":"    except (IOError, OSError):"},{"line_number":302,"context_line":"        return None"},{"line_number":303,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B5ng%3D","line":300,"updated":"2013-02-15 02:52:08.000000000","message":"Should use \n\n with open(\u0027PKG-INFO\u0027, \u0027r\u0027) as f:\n\nsee http://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects , \"good practice to use the with keyword\"","commit_id":"5e82d945aa6ba6ab3527abb54163ae6a22a25fa7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d5724576c2d853b9285b7402a31cb42ac7924a60","unresolved":false,"context_lines":[{"line_number":305,"context_line":"    except email.MessageError:"},{"line_number":306,"context_line":"        return None"},{"line_number":307,"context_line":"    # Check to make sure we\u0027re in our own dir"},{"line_number":308,"context_line":"    if pkg_info.get(\u0027Name\u0027, None) !\u003d package_name:"},{"line_number":309,"context_line":"        return None"},{"line_number":310,"context_line":"    return pkg_info.get(\u0027Version\u0027, None)"},{"line_number":311,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B5nc%3D","line":308,"updated":"2013-02-15 02:52:08.000000000","message":"suggest remove \", None\". This is a common theme throughout this file.","commit_id":"5e82d945aa6ba6ab3527abb54163ae6a22a25fa7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d5724576c2d853b9285b7402a31cb42ac7924a60","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"def get_version(package_name, pre_version\u003dNone):"},{"line_number":314,"context_line":"    \"\"\"Get the version of the project. First, try getting it from PKG-INFO, if"},{"line_number":315,"context_line":"    it exists. If it does, that means we\u0027re in a distribution tarball or that"},{"line_number":316,"context_line":"    install has happened. Otherwise, if there is no PKG-INFO file, pull the"},{"line_number":317,"context_line":"    version from git."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B5ns%3D","line":314,"updated":"2013-02-15 02:52:08.000000000","message":"This comment is misleading because the first thing this function does is try to get the version from OSLO_PACKAGE_VERSION.\n\nPersonally, I think the comments explaining what this function does could be removed. The function is short and understandable enough as is.","commit_id":"5e82d945aa6ba6ab3527abb54163ae6a22a25fa7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d5724576c2d853b9285b7402a31cb42ac7924a60","unresolved":false,"context_lines":[{"line_number":320,"context_line":"    we support packagers directly sucking our git repo into theirs. We expect"},{"line_number":321,"context_line":"    that a source tarball be made from our git repo - or that if someone wants"},{"line_number":322,"context_line":"    to make a source tarball from a fork of our repo with additional tags in it"},{"line_number":323,"context_line":"    that they understand and desire the results of doing that."},{"line_number":324,"context_line":"    \"\"\""},{"line_number":325,"context_line":"    version \u003d os.environ.get(\"OSLO_PACKAGE_VERSION\", None)"},{"line_number":326,"context_line":"    if version:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B5no%3D","line":323,"updated":"2013-02-15 02:52:08.000000000","message":"harsh, but true.","commit_id":"5e82d945aa6ba6ab3527abb54163ae6a22a25fa7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d5724576c2d853b9285b7402a31cb42ac7924a60","unresolved":false,"context_lines":[{"line_number":322,"context_line":"    to make a source tarball from a fork of our repo with additional tags in it"},{"line_number":323,"context_line":"    that they understand and desire the results of doing that."},{"line_number":324,"context_line":"    \"\"\""},{"line_number":325,"context_line":"    version \u003d os.environ.get(\"OSLO_PACKAGE_VERSION\", None)"},{"line_number":326,"context_line":"    if version:"},{"line_number":327,"context_line":"        return version"},{"line_number":328,"context_line":"    version \u003d _get_version_from_pkg_info(package_name)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B5nk%3D","line":325,"updated":"2013-02-15 02:52:08.000000000","message":"suggest remove \", None\". The default is to return None if it\u0027s not found.","commit_id":"5e82d945aa6ba6ab3527abb54163ae6a22a25fa7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d5724576c2d853b9285b7402a31cb42ac7924a60","unresolved":false,"context_lines":[{"line_number":332,"context_line":"    if version:"},{"line_number":333,"context_line":"        return version"},{"line_number":334,"context_line":"    raise Exception(\"Versioning for this project requires either an sdist\""},{"line_number":335,"context_line":"                    \" tarball, or access to an upstream git repository.\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B5nY%3D","line":335,"updated":"2013-02-15 02:52:08.000000000","message":"As a reviewer, I would have found this file a lot easier to understand if the get_version() function was first in the file, so I suggest changing the order.","commit_id":"5e82d945aa6ba6ab3527abb54163ae6a22a25fa7"}],"keystone/openstack/common/version.py":[{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"1b6e54bd4ee76b412b31285b3983234e8f0003a5","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            provider \u003d pkg_resources.get_provider(requirement)"},{"line_number":42,"context_line":"            return provider.version"},{"line_number":43,"context_line":"        except pkg_resources.DistributionNotFound:"},{"line_number":44,"context_line":"            # The most likely cause for this is running tests in a tree with"},{"line_number":45,"context_line":"            # produced from a tarball where the package itself has not been"},{"line_number":46,"context_line":"            # installed into anything. Check for a PKG-INFO file."},{"line_number":47,"context_line":"            from keystone.openstack.common import setup"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FKfY%3D","line":44,"updated":"2013-02-05 05:31:37.000000000","message":"typo in comments","commit_id":"1169a5684ef608328ff7ef7d8766a8a381887a45"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d5724576c2d853b9285b7402a31cb42ac7924a60","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def __repr__(self):"},{"line_number":41,"context_line":"        \"\"\"Include the name.\"\"\""},{"line_number":42,"context_line":"        return \"VersionInfo(%s:%s)\" % (self.package, self.version_string())"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _get_version_from_pkg_resources(self):"},{"line_number":45,"context_line":"        \"\"\"Get the version of the package from the pkg_resources record"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B5mU%3D","line":42,"updated":"2013-02-15 02:52:08.000000000","message":"HACKING.py says \"Avoid using \"double quotes\" where you can reasonably use \u0027single quotes\u0027\", https://github.com/openstack/keystone/blob/master/HACKING.rst","commit_id":"5e82d945aa6ba6ab3527abb54163ae6a22a25fa7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d5724576c2d853b9285b7402a31cb42ac7924a60","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    canonical_version_string \u003d version_string"},{"line_number":82,"context_line":"    version_string_with_vcs \u003d release_string"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def cached_version_string(self, prefix\u003d\"\"):"},{"line_number":85,"context_line":"        \"\"\"Generate an object which will expand in a string context to"},{"line_number":86,"context_line":"        the results of version_string(). We do this so that don\u0027t"},{"line_number":87,"context_line":"        call into pkg_resources every time we start up a program when"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B5mM%3D","line":84,"updated":"2013-02-15 02:52:08.000000000","message":"\" -\u003e \u0027","commit_id":"5e82d945aa6ba6ab3527abb54163ae6a22a25fa7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d5724576c2d853b9285b7402a31cb42ac7924a60","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def cached_version_string(self, prefix\u003d\"\"):"},{"line_number":85,"context_line":"        \"\"\"Generate an object which will expand in a string context to"},{"line_number":86,"context_line":"        the results of version_string(). We do this so that don\u0027t"},{"line_number":87,"context_line":"        call into pkg_resources every time we start up a program when"},{"line_number":88,"context_line":"        passing version information into the CONF constructor, but"},{"line_number":89,"context_line":"        rather only do the calculation when and if a version is requested"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B5l0%3D","line":86,"updated":"2013-02-15 02:52:08.000000000","message":"this is a lot of text for a function that just returns a string.","commit_id":"5e82d945aa6ba6ab3527abb54163ae6a22a25fa7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d5724576c2d853b9285b7402a31cb42ac7924a60","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def cached_version_string(self, prefix\u003d\"\"):"},{"line_number":85,"context_line":"        \"\"\"Generate an object which will expand in a string context to"},{"line_number":86,"context_line":"        the results of version_string(). We do this so that don\u0027t"},{"line_number":87,"context_line":"        call into pkg_resources every time we start up a program when"},{"line_number":88,"context_line":"        passing version information into the CONF constructor, but"},{"line_number":89,"context_line":"        rather only do the calculation when and if a version is requested"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B5l4%3D","line":86,"updated":"2013-02-15 02:52:08.000000000","message":"this is a lot of text for a function that just returns a string.","commit_id":"5e82d945aa6ba6ab3527abb54163ae6a22a25fa7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d5724576c2d853b9285b7402a31cb42ac7924a60","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        rather only do the calculation when and if a version is requested"},{"line_number":90,"context_line":"        \"\"\""},{"line_number":91,"context_line":"        if not self._cached_version:"},{"line_number":92,"context_line":"            self._cached_version \u003d \"%s%s\" % (prefix,"},{"line_number":93,"context_line":"                                             self.version_string())"},{"line_number":94,"context_line":"        return self._cached_version"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B5mQ%3D","line":92,"updated":"2013-02-15 02:52:08.000000000","message":"\" -\u003e \u0027","commit_id":"5e82d945aa6ba6ab3527abb54163ae6a22a25fa7"}]}
