)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"49713180f56edcba97b27c6c89dfb7c73cc3f760","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     John Dennis \u003cjdennis@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-03-21 15:24:44 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"code hygiene; use six.text_type, escape regexp\u0027s, use key function"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Some simple code clean up for code hygiene"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAWH%2F%2B1Ag%3D","line":7,"updated":"2014-03-23 23:48:53.000000000","message":"this would be easier to review if these were separate commits.","commit_id":"6efa94334e6ffd5b4c2611978f3d8af5b630e23a"}],"keystone/tests/fakeldap.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"49713180f56edcba97b27c6c89dfb7c73cc3f760","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    # This is a wild card search. Implemented as all or nothing for now."},{"line_number":112,"context_line":"    if value \u003d\u003d \u0027*\u0027:"},{"line_number":113,"context_line":"        return True"},{"line_number":114,"context_line":"    if key \u003d\u003d \u0027serviceId\u0027:"},{"line_number":115,"context_line":"        # for serviceId, the backend is returning a list of numbers"},{"line_number":116,"context_line":"        # make sure we convert them to strings first before comparing"},{"line_number":117,"context_line":"        # them"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2B1BA%3D","line":114,"updated":"2014-03-23 23:48:53.000000000","message":"as far as I can tell this is the only place that serviceId is mentioned in keystone.","commit_id":"6efa94334e6ffd5b4c2611978f3d8af5b630e23a"},{"author":{"_account_id":8116,"name":"John Dennis","email":"jdennis@redhat.com","username":"jdennis"},"change_message_id":"a47b4e8fe50019c1522156d5d74d053ad62f0392","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    # This is a wild card search. Implemented as all or nothing for now."},{"line_number":112,"context_line":"    if value \u003d\u003d \u0027*\u0027:"},{"line_number":113,"context_line":"        return True"},{"line_number":114,"context_line":"    if key \u003d\u003d \u0027serviceId\u0027:"},{"line_number":115,"context_line":"        # for serviceId, the backend is returning a list of numbers"},{"line_number":116,"context_line":"        # make sure we convert them to strings first before comparing"},{"line_number":117,"context_line":"        # them"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2Bwic%3D","line":114,"in_reply_to":"AAAAWH%2F%2B1BA%3D","updated":"2014-03-25 23:11:39.000000000","message":"I was trying not to change any existing behavior not related to handling non-ascii values (the ultimate goal). I really don\u0027t know if special casing \u0027serviceId\u0027 is necessary or not. I think this module was originally copied from heat, maybe it\u0027s left over cruft.\n\nFWIW, serviceId is mentioned here\n\nkeystone/doc/source/api_curl_examples.rst\n\nnot sure if that attribute name will ever show up in LDAP or not.\n\nMy suggestion would be to open a separate bug if you think special casing serviceId needs to be removed, that way we can keep the issues independent.","commit_id":"6efa94334e6ffd5b4c2611978f3d8af5b630e23a"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"ed399eb33528764390cd6d78ac01a0a5bfdf805a","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    # This is a wild card search. Implemented as all or nothing for now."},{"line_number":112,"context_line":"    if value \u003d\u003d \u0027*\u0027:"},{"line_number":113,"context_line":"        return True"},{"line_number":114,"context_line":"    if key \u003d\u003d \u0027serviceId\u0027:"},{"line_number":115,"context_line":"        # for serviceId, the backend is returning a list of numbers"},{"line_number":116,"context_line":"        # make sure we convert them to strings first before comparing"},{"line_number":117,"context_line":"        # them"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2BuGY%3D","line":114,"in_reply_to":"AAAAWH%2F%2B1BA%3D","updated":"2014-03-24 20:42:03.000000000","message":"Possibly a vestige of old implementations.","commit_id":"6efa94334e6ffd5b4c2611978f3d8af5b630e23a"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"22b971fd31a0ca95895b51e50ad999ef4d6d55d1","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        else:"},{"line_number":170,"context_line":"            self.db \u003d shelve.open(url[7:])"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def dn(self, dn):"},{"line_number":173,"context_line":"        # temporarily return input value,"},{"line_number":174,"context_line":"        # subsequent patch will add implementation"},{"line_number":175,"context_line":"        return dn"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2B0EY%3D","line":172,"updated":"2014-03-24 05:07:17.000000000","message":"I would have preferred this as two separate patches as well.  Confusing to shove it into one potpourri patch","commit_id":"6efa94334e6ffd5b4c2611978f3d8af5b630e23a"},{"author":{"_account_id":8116,"name":"John Dennis","email":"jdennis@redhat.com","username":"jdennis"},"change_message_id":"a47b4e8fe50019c1522156d5d74d053ad62f0392","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        else:"},{"line_number":170,"context_line":"            self.db \u003d shelve.open(url[7:])"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def dn(self, dn):"},{"line_number":173,"context_line":"        # temporarily return input value,"},{"line_number":174,"context_line":"        # subsequent patch will add implementation"},{"line_number":175,"context_line":"        return dn"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2Bw3w%3D","line":172,"in_reply_to":"AAAAWH%2F%2B0EY%3D","updated":"2014-03-25 23:11:39.000000000","message":"The entire set of changes was already broken down into 4 smaller incremental patches of which this is the first. I don\u0027t really see the value in splitting this yet again into smaller increments. I think what\u0027s going on here is simple enough it doesn\u0027t need to be split further.","commit_id":"6efa94334e6ffd5b4c2611978f3d8af5b630e23a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"49713180f56edcba97b27c6c89dfb7c73cc3f760","unresolved":false,"context_lines":[{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        LOG.debug(\u0027add item: dn\u003d%(dn)s, attrs\u003d%(attrs)s\u0027, {"},{"line_number":221,"context_line":"            \u0027dn\u0027: dn, \u0027attrs\u0027: attrs})"},{"line_number":222,"context_line":"        key \u003d self.key(dn)"},{"line_number":223,"context_line":"        if key in self.db:"},{"line_number":224,"context_line":"            LOG.debug(\u0027add item failed: dn\u003d%s is already in store.\u0027, dn)"},{"line_number":225,"context_line":"            raise ldap.ALREADY_EXISTS(dn)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2B1Ak%3D","line":222,"updated":"2014-03-23 23:48:53.000000000","message":"why is this moving? Does it fix a problem? I don\u0027t see it mentioned in the commit message that the key calculation had to be moved.","commit_id":"6efa94334e6ffd5b4c2611978f3d8af5b630e23a"},{"author":{"_account_id":8116,"name":"John Dennis","email":"jdennis@redhat.com","username":"jdennis"},"change_message_id":"a47b4e8fe50019c1522156d5d74d053ad62f0392","unresolved":false,"context_lines":[{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        LOG.debug(\u0027add item: dn\u003d%(dn)s, attrs\u003d%(attrs)s\u0027, {"},{"line_number":221,"context_line":"            \u0027dn\u0027: dn, \u0027attrs\u0027: attrs})"},{"line_number":222,"context_line":"        key \u003d self.key(dn)"},{"line_number":223,"context_line":"        if key in self.db:"},{"line_number":224,"context_line":"            LOG.debug(\u0027add item failed: dn\u003d%s is already in store.\u0027, dn)"},{"line_number":225,"context_line":"            raise ldap.ALREADY_EXISTS(dn)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2Bwto%3D","line":222,"in_reply_to":"AAAAWH%2F%2B1Ak%3D","updated":"2014-03-25 23:11:39.000000000","message":"Done. \n\nIt was moved for a couple of reasons none of which are relevant to the final outcome. So rather than explain the reasoning for the move I restored their original location. The debug messages are removed in a subsequent patch, so ultimately it works out the same.","commit_id":"6efa94334e6ffd5b4c2611978f3d8af5b630e23a"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"22b971fd31a0ca95895b51e50ad999ef4d6d55d1","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                LOG.debug(\u0027FakeLdap subtree_delete item: dn\u003d%s\u0027, dn)"},{"line_number":253,"context_line":"                children \u003d [k for k, v in six.iteritems(self.db)"},{"line_number":254,"context_line":"                            if re.match(\u0027%s.*,%s\u0027 % ("},{"line_number":255,"context_line":"                                        re.escape(self.__prefix),"},{"line_number":256,"context_line":"                                        re.escape(self.dn(dn))), k)]"},{"line_number":257,"context_line":"                for c in children:"},{"line_number":258,"context_line":"                    del self.db[c]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2B0DY%3D","line":255,"updated":"2014-03-24 05:07:17.000000000","message":"Would be helpful for you to add a comment on why the escaping was needed for certain metacharacters like you point out in the commit.  3 months from now folks won\u0027t remember why this was added","commit_id":"6efa94334e6ffd5b4c2611978f3d8af5b630e23a"},{"author":{"_account_id":8116,"name":"John Dennis","email":"jdennis@redhat.com","username":"jdennis"},"change_message_id":"a47b4e8fe50019c1522156d5d74d053ad62f0392","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                LOG.debug(\u0027FakeLdap subtree_delete item: dn\u003d%s\u0027, dn)"},{"line_number":253,"context_line":"                children \u003d [k for k, v in six.iteritems(self.db)"},{"line_number":254,"context_line":"                            if re.match(\u0027%s.*,%s\u0027 % ("},{"line_number":255,"context_line":"                                        re.escape(self.__prefix),"},{"line_number":256,"context_line":"                                        re.escape(self.dn(dn))), k)]"},{"line_number":257,"context_line":"                for c in children:"},{"line_number":258,"context_line":"                    del self.db[c]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2BwtM%3D","line":255,"in_reply_to":"AAAAWH%2F%2B0DY%3D","updated":"2014-03-25 23:11:39.000000000","message":"My feeling is if as a programmer you can\u0027t understand why one needs to escape user supplied input we\u0027ve got bigger problems than the lack of a comment explaining the necessity for escaping. Superfluous comments for things which are supposed to be obvious are considered bad form. But if one is still befuddled there is always the commit message :-)\n\nHowever I did try to accommodate this request. The problem I ran into was I couldn\u0027t find any wording that would fit in a single line comment that adhered to PEP-8 indentation and line length rules. A multi-line comment seemed too invasive and then shouldn\u0027t there be a comment for each location that performs escaping? Just seemed overkill. If you feel strongly we can revisit.","commit_id":"6efa94334e6ffd5b4c2611978f3d8af5b630e23a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f934be701e1292abd54a2591b586575e52c899b2","unresolved":false,"context_lines":[{"line_number":257,"context_line":"                for c in children:"},{"line_number":258,"context_line":"                    del self.db[c]"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"            key \u003d self.key(dn)"},{"line_number":261,"context_line":"            LOG.debug(_(\u0027FakeLdap delete item: dn\u003d%s\u0027), dn)"},{"line_number":262,"context_line":"            del self.db[key]"},{"line_number":263,"context_line":"        except KeyError:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2BaWI%3D","line":260,"updated":"2014-03-27 00:17:19.000000000","message":"why did this move?","commit_id":"322d8361c7d110f630bf45570c31e9bb49e8513e"}]}
