)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"7f69ead25dd9cdd87a8f6c1179f1bc81dce21cff","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Akihiro Motoki \u003cmotoki@da.jp.nec.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-11-10 14:43:37 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add maxlen check to StrOpt"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I7c5a6d0bdad51cd07e13bcf95a2b72bf383ba513"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"da85f559_99bef1d2","line":7,"updated":"2015-11-10 14:22:56.000000000","message":"s/maxlen/max length","commit_id":"0c0f4f4fbe6b65c80648f1cc7c15881e9c2bf586"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"89a640b0b36d61ef65b0029a01f9fdfa04db92a2","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Akihiro Motoki \u003cmotoki@da.jp.nec.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-11-10 14:43:37 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add maxlen check to StrOpt"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I7c5a6d0bdad51cd07e13bcf95a2b72bf383ba513"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"da85f559_a19b6f71","line":7,"in_reply_to":"da85f559_99bef1d2","updated":"2015-11-10 17:33:18.000000000","message":"Done","commit_id":"0c0f4f4fbe6b65c80648f1cc7c15881e9c2bf586"}],"oslo_config/cfg.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"58f09f1f43ff0af893efcdef85a26dd7491c9b5f","unresolved":false,"context_lines":[{"line_number":1018,"context_line":"    \"\"\""},{"line_number":1019,"context_line":""},{"line_number":1020,"context_line":"    def __init__(self, name, choices\u003dNone, quotes\u003dNone,"},{"line_number":1021,"context_line":"                 regex\u003dNone, ignore_case\u003dNone, maxlen\u003d0, **kwargs):"},{"line_number":1022,"context_line":"        super(StrOpt, self).__init__(name,"},{"line_number":1023,"context_line":"                                     type\u003dtypes.String("},{"line_number":1024,"context_line":"                                         choices\u003dchoices,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_42b69c8b","line":1021,"updated":"2015-11-09 09:41:33.000000000","message":"None as default.","commit_id":"3ba3f5998e32bebc037e63e8279c2e81696efeee"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"86f800336833c47c8c5f4d355bdba86847eb0109","unresolved":false,"context_lines":[{"line_number":1018,"context_line":"    \"\"\""},{"line_number":1019,"context_line":""},{"line_number":1020,"context_line":"    def __init__(self, name, choices\u003dNone, quotes\u003dNone,"},{"line_number":1021,"context_line":"                 regex\u003dNone, ignore_case\u003dNone, maxlen\u003d0, **kwargs):"},{"line_number":1022,"context_line":"        super(StrOpt, self).__init__(name,"},{"line_number":1023,"context_line":"                                     type\u003dtypes.String("},{"line_number":1024,"context_line":"                                         choices\u003dchoices,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_99692828","line":1021,"in_reply_to":"da85f559_42b69c8b","updated":"2015-11-10 05:48:54.000000000","message":"Done","commit_id":"3ba3f5998e32bebc037e63e8279c2e81696efeee"}],"oslo_config/tests/test_cfg.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"89a640b0b36d61ef65b0029a01f9fdfa04db92a2","unresolved":false,"context_lines":[{"line_number":3852,"context_line":"        self.assertEqual(self.conf.foo, \u0027BaR\u0027)"},{"line_number":3853,"context_line":""},{"line_number":3854,"context_line":""},{"line_number":3855,"context_line":"class StrOptMaxLenghtTestCase(BaseTestCase):"},{"line_number":3856,"context_line":""},{"line_number":3857,"context_line":"    def test_stropt_maxlen_good(self):"},{"line_number":3858,"context_line":"        self.conf.register_cli_opt(cfg.StrOpt(\u0027foo\u0027, maxlen\u003d5))"}],"source_content_type":"text/x-python","patch_set":2,"id":"da85f559_a1728f47","line":3855,"range":{"start_line":3855,"start_character":15,"end_line":3855,"end_character":21},"updated":"2015-11-10 17:33:18.000000000","message":"Fixed typo in the next patch set: Lenght -\u003e Length","commit_id":"0c0f4f4fbe6b65c80648f1cc7c15881e9c2bf586"}],"oslo_config/types.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"58f09f1f43ff0af893efcdef85a26dd7491c9b5f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    \"\"\""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def __init__(self, choices\u003dNone, quotes\u003dFalse, regex\u003dNone,"},{"line_number":67,"context_line":"                 ignore_case\u003dFalse, maxlen\u003d0):"},{"line_number":68,"context_line":"        super(String, self).__init__()"},{"line_number":69,"context_line":"        if choices and regex:"},{"line_number":70,"context_line":"            raise ValueError(\"\u0027choices\u0027 and \u0027regex\u0027 cannot both be specified\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_82bc846d","line":67,"updated":"2015-11-09 09:41:33.000000000","message":"None as default is more clear.","commit_id":"3ba3f5998e32bebc037e63e8279c2e81696efeee"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"86f800336833c47c8c5f4d355bdba86847eb0109","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    \"\"\""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def __init__(self, choices\u003dNone, quotes\u003dFalse, regex\u003dNone,"},{"line_number":67,"context_line":"                 ignore_case\u003dFalse, maxlen\u003d0):"},{"line_number":68,"context_line":"        super(String, self).__init__()"},{"line_number":69,"context_line":"        if choices and regex:"},{"line_number":70,"context_line":"            raise ValueError(\"\u0027choices\u0027 and \u0027regex\u0027 cannot both be specified\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_5973c015","line":67,"in_reply_to":"da85f559_82bc846d","updated":"2015-11-10 05:48:54.000000000","message":"Done","commit_id":"3ba3f5998e32bebc037e63e8279c2e81696efeee"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"7f69ead25dd9cdd87a8f6c1179f1bc81dce21cff","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    \"\"\""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def __init__(self, choices\u003dNone, quotes\u003dFalse, regex\u003dNone,"},{"line_number":67,"context_line":"                 ignore_case\u003dFalse, maxlen\u003dNone):"},{"line_number":68,"context_line":"        super(String, self).__init__()"},{"line_number":69,"context_line":"        if choices and regex:"},{"line_number":70,"context_line":"            raise ValueError(\"\u0027choices\u0027 and \u0027regex\u0027 cannot both be specified\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"da85f559_d9ba390a","line":67,"updated":"2015-11-10 14:22:56.000000000","message":"We use format xxx_yyy in other places, to keep consistent, use max_length instead of maxlen ?","commit_id":"0c0f4f4fbe6b65c80648f1cc7c15881e9c2bf586"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"89a640b0b36d61ef65b0029a01f9fdfa04db92a2","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    \"\"\""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def __init__(self, choices\u003dNone, quotes\u003dFalse, regex\u003dNone,"},{"line_number":67,"context_line":"                 ignore_case\u003dFalse, maxlen\u003dNone):"},{"line_number":68,"context_line":"        super(String, self).__init__()"},{"line_number":69,"context_line":"        if choices and regex:"},{"line_number":70,"context_line":"            raise ValueError(\"\u0027choices\u0027 and \u0027regex\u0027 cannot both be specified\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"da85f559_41896325","line":67,"in_reply_to":"da85f559_d9ba390a","updated":"2015-11-10 17:33:18.000000000","message":"Done","commit_id":"0c0f4f4fbe6b65c80648f1cc7c15881e9c2bf586"},{"author":{"_account_id":11650,"name":"Tom Cammann","email":"tom.cammann@hpe.com","username":"cammann"},"change_message_id":"765b01a63bfb3f26ec0ecbe2efc7fa61fbc13ecf","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    \"\"\""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def __init__(self, choices\u003dNone, quotes\u003dFalse, regex\u003dNone,"},{"line_number":67,"context_line":"                 ignore_case\u003dFalse, max_length\u003dNone):"},{"line_number":68,"context_line":"        super(String, self).__init__()"},{"line_number":69,"context_line":"        if choices and regex:"},{"line_number":70,"context_line":"            raise ValueError(\"\u0027choices\u0027 and \u0027regex\u0027 cannot both be specified\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_f46eadfe","line":67,"updated":"2015-11-12 13:47:24.000000000","message":"nit: Why not default to 0? You could then get rid of the \"or\" below.","commit_id":"31286f1fe54736eff9aa715f918a375f2439ff04"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"eca0fb3e260ec96a19934cdfb536bae0ac2aa075","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    \"\"\""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def __init__(self, choices\u003dNone, quotes\u003dFalse, regex\u003dNone,"},{"line_number":67,"context_line":"                 ignore_case\u003dFalse, max_length\u003dNone):"},{"line_number":68,"context_line":"        super(String, self).__init__()"},{"line_number":69,"context_line":"        if choices and regex:"},{"line_number":70,"context_line":"            raise ValueError(\"\u0027choices\u0027 and \u0027regex\u0027 cannot both be specified\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_4d2cc898","line":67,"in_reply_to":"da85f559_b216f549","updated":"2015-11-12 14:16:20.000000000","message":"Because if you reviewed the previous patchsets, you would have seen that I suggested None.","commit_id":"31286f1fe54736eff9aa715f918a375f2439ff04"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f4e44662af587163a153de081d509ddf50315530","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    \"\"\""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def __init__(self, choices\u003dNone, quotes\u003dFalse, regex\u003dNone,"},{"line_number":67,"context_line":"                 ignore_case\u003dFalse, max_length\u003dNone):"},{"line_number":68,"context_line":"        super(String, self).__init__()"},{"line_number":69,"context_line":"        if choices and regex:"},{"line_number":70,"context_line":"            raise ValueError(\"\u0027choices\u0027 and \u0027regex\u0027 cannot both be specified\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_527f89df","line":67,"in_reply_to":"da85f559_b216f549","updated":"2015-11-12 14:21:19.000000000","message":"I used 0 in the initial version and was suggested to use \u0027None\u0027 instead of \u00270\u0027 in patch set 1. Check patch set 1.\nPersonally I am okay with either, but None sounds consistent because all default value for options which takes non-boolean value is None.\n\nActually speaking, python allows us to compare None and integer,\nso \u0027or 0\u0027 at L.74 is not necessarily required and it is just for clarification.","commit_id":"31286f1fe54736eff9aa715f918a375f2439ff04"},{"author":{"_account_id":12952,"name":"ice yao","email":"yao3690093@gmail.com","username":"xiabing.yao"},"change_message_id":"cb300d464f617d03239037d555f25e428f0b4cbb","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    \"\"\""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def __init__(self, choices\u003dNone, quotes\u003dFalse, regex\u003dNone,"},{"line_number":67,"context_line":"                 ignore_case\u003dFalse, max_length\u003dNone):"},{"line_number":68,"context_line":"        super(String, self).__init__()"},{"line_number":69,"context_line":"        if choices and regex:"},{"line_number":70,"context_line":"            raise ValueError(\"\u0027choices\u0027 and \u0027regex\u0027 cannot both be specified\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_b216f549","line":67,"in_reply_to":"da85f559_f46eadfe","updated":"2015-11-12 14:02:34.000000000","message":"+1","commit_id":"31286f1fe54736eff9aa715f918a375f2439ff04"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"eca0fb3e260ec96a19934cdfb536bae0ac2aa075","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        self.ignore_case \u003d ignore_case"},{"line_number":73,"context_line":"        self.quotes \u003d quotes"},{"line_number":74,"context_line":"        self.max_length \u003d max_length or 0"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        self.choices \u003d choices"},{"line_number":77,"context_line":"        self.lower_case_choices \u003d None"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_ed557cf9","line":74,"updated":"2015-11-12 14:16:20.000000000","message":"No need to put or 0","commit_id":"31286f1fe54736eff9aa715f918a375f2439ff04"},{"author":{"_account_id":11650,"name":"Tom Cammann","email":"tom.cammann@hpe.com","username":"cammann"},"change_message_id":"765b01a63bfb3f26ec0ecbe2efc7fa61fbc13ecf","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                    raise ValueError(\u0027Non-closed quote: %s\u0027 % value)"},{"line_number":97,"context_line":"                value \u003d value[1:-1]"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        if self.max_length \u003e 0 and len(value) \u003e self.max_length:"},{"line_number":100,"context_line":"            raise ValueError(\"Value \u0027%s\u0027 exceeds maximum length %d\" %"},{"line_number":101,"context_line":"                             (value, self.max_length))"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_973de3c5","line":99,"updated":"2015-11-12 13:47:24.000000000","message":"\u003e 0 is unnecessary \n\n    if self.max_length and ...","commit_id":"31286f1fe54736eff9aa715f918a375f2439ff04"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f4e44662af587163a153de081d509ddf50315530","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                    raise ValueError(\u0027Non-closed quote: %s\u0027 % value)"},{"line_number":97,"context_line":"                value \u003d value[1:-1]"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        if self.max_length \u003e 0 and len(value) \u003e self.max_length:"},{"line_number":100,"context_line":"            raise ValueError(\"Value \u0027%s\u0027 exceeds maximum length %d\" %"},{"line_number":101,"context_line":"                             (value, self.max_length))"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_6d542cc9","line":99,"in_reply_to":"da85f559_973de3c5","updated":"2015-11-12 14:21:19.000000000","message":"It is to avoid a confusing behavior when a negative integer is specified.","commit_id":"31286f1fe54736eff9aa715f918a375f2439ff04"}]}
