)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"ec9d7906e77af14dc53c142bde599d43297fec99","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     shuangyang.qian \u003cshuangyang.qian@easystack.cn\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-01-22 15:12:43 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix the metadata re to match the Chinese"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"we modify the metadata re to support boot vm with"},{"line_number":10,"context_line":"Chinese metadata."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7f96bb07_888386a9","line":7,"range":{"start_line":7,"start_character":33,"end_line":7,"end_character":40},"updated":"2018-01-24 05:27:44.000000000","message":"unicode might be better","commit_id":"594d82d0301fa907cf94db167f143f735b293376"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"38bad8366cd96de42e56cd843d7f0b5951400fde","unresolved":false,"context_lines":[{"line_number":3,"context_line":"AuthorDate: 2018-01-22 14:57:30 +0800"},{"line_number":4,"context_line":"Commit:     shuangyang.qian \u003cshuangyang.qian@easystack.cn\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-01-26 11:02:24 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix the metadata re to match the unicode"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"we modify the metadata re to support boot vm with"},{"line_number":10,"context_line":"unicode metadata."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ia1a0c532f57ddaaa194eaeebd0db6388e2b2ae2c"},{"line_number":13,"context_line":"Closes-bug: #1737711"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9f6a8fd7_18654146","line":10,"range":{"start_line":6,"start_character":0,"end_line":10,"end_character":17},"updated":"2018-04-24 03:35:36.000000000","message":"you are also changing the schema of flavor extra_specs, should also mention here.","commit_id":"e77be855b8cc807cd60718652c8e99d22a84478b"},{"author":{"_account_id":27518,"name":"wanghongtao","email":"hongtao.wang@easystack.cn","username":"hongtao.wang"},"change_message_id":"c6d1310ab6e08495b99900cc64a5c95281f388c8","unresolved":false,"context_lines":[{"line_number":3,"context_line":"AuthorDate: 2018-01-22 14:57:30 +0800"},{"line_number":4,"context_line":"Commit:     shuangyang.qian \u003cshuangyang.qian@easystack.cn\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-01-26 11:02:24 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix the metadata re to match the unicode"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"we modify the metadata re to support boot vm with"},{"line_number":10,"context_line":"unicode metadata."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ia1a0c532f57ddaaa194eaeebd0db6388e2b2ae2c"},{"line_number":13,"context_line":"Closes-bug: #1737711"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9f6a8fd7_3e1a6dcb","line":10,"range":{"start_line":6,"start_character":0,"end_line":10,"end_character":17},"in_reply_to":"9f6a8fd7_18654146","updated":"2018-04-26 08:54:53.000000000","message":"Thank you,i will mention it","commit_id":"e77be855b8cc807cd60718652c8e99d22a84478b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d0c10637f1a95dbe16a1cc0aa4e049531e0d6156","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fix the metadata re to match the unicode"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1.we modify the metadata re to support boot vm with"},{"line_number":10,"context_line":"unicode metadata."},{"line_number":11,"context_line":"2.changed the schema of flavor extra_specs"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ia1a0c532f57ddaaa194eaeebd0db6388e2b2ae2c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5f7c97a3_a429638a","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":16},"updated":"2018-06-01 15:06:29.000000000","message":"To be clear, this is supporting unicode in metadata *keys*.  It\u0027s already supported in the *values*.","commit_id":"35be3e18ad11c0b346e22d3aa93367ff13983bd1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d0c10637f1a95dbe16a1cc0aa4e049531e0d6156","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1.we modify the metadata re to support boot vm with"},{"line_number":10,"context_line":"unicode metadata."},{"line_number":11,"context_line":"2.changed the schema of flavor extra_specs"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ia1a0c532f57ddaaa194eaeebd0db6388e2b2ae2c"},{"line_number":14,"context_line":"Closes-bug: #1737711"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5f7c97a3_04437740","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":42},"updated":"2018-06-01 15:06:29.000000000","message":"...to also allow unicode in the keys.  (be specific)\n\nBut I would suggest making this commit message read less like it\u0027s doing two separate things, as that\u0027s usually a red flag to reviewers.  (I had to go through the review thoroughly to convince myself that the extra_specs part shouldn\u0027t be split into a separate change set.)  For example:\n\n Allow unicode keys for metadata and extra_specs\n\n Fix the metadata regex to allow unicode characters in keys\n for instance and image metadata and flavor extra_specs.","commit_id":"35be3e18ad11c0b346e22d3aa93367ff13983bd1"},{"author":{"_account_id":27518,"name":"wanghongtao","email":"hongtao.wang@easystack.cn","username":"hongtao.wang"},"change_message_id":"70808c66d4a6ab8213e31b149b21088bb8333ec5","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1.we modify the metadata re to support boot vm with"},{"line_number":10,"context_line":"unicode metadata."},{"line_number":11,"context_line":"2.changed the schema of flavor extra_specs"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ia1a0c532f57ddaaa194eaeebd0db6388e2b2ae2c"},{"line_number":14,"context_line":"Closes-bug: #1737711"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5f7c97a3_003335f8","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":42},"in_reply_to":"5f7c97a3_04437740","updated":"2018-06-06 12:44:37.000000000","message":"Thank you very much,i will accept your suggest.","commit_id":"35be3e18ad11c0b346e22d3aa93367ff13983bd1"}],"nova/api/openstack/compute/schemas/flavors_extraspecs.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"02a8cb42e9c245489b975ce49e1972ca7d378af9","unresolved":false,"context_lines":[{"line_number":22,"context_line":"metadata[\u0027patternProperties\u0027].pop(parameter_types.metakey_pattern)"},{"line_number":23,"context_line":"metadata[\u0027patternProperties\u0027][\u0027^[a-zA-Z0-9-_:. ]{1,255}$\u0027] \u003d {"},{"line_number":24,"context_line":"    \u0027type\u0027: [\u0027string\u0027, \u0027number\u0027],"},{"line_number":25,"context_line":"    \u0027maxLength\u0027: 255"},{"line_number":26,"context_line":"}"},{"line_number":27,"context_line":"create \u003d {"},{"line_number":28,"context_line":"    \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_60c4d241","line":25,"range":{"start_line":25,"start_character":4,"end_line":25,"end_character":20},"updated":"2018-07-30 18:42:14.000000000","message":"Jay pointed out that this is redundant (it\u0027s already covered by the {1,255} part of the regex).","commit_id":"dc153c82ec02a66fc0af37064379bb6de5260d07"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0530a6e044c0c51ba74769e71c23c9878b52068e","unresolved":false,"context_lines":[{"line_number":22,"context_line":"metadata[\u0027patternProperties\u0027].pop(parameter_types.metakey_pattern)"},{"line_number":23,"context_line":"metadata[\u0027patternProperties\u0027][\u0027^[a-zA-Z0-9-_:. ]{1,255}$\u0027] \u003d {"},{"line_number":24,"context_line":"    \u0027type\u0027: [\u0027string\u0027, \u0027number\u0027],"},{"line_number":25,"context_line":"    \u0027maxLength\u0027: 255"},{"line_number":26,"context_line":"}"},{"line_number":27,"context_line":"create \u003d {"},{"line_number":28,"context_line":"    \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_e02b02e7","line":25,"range":{"start_line":25,"start_character":4,"end_line":25,"end_character":20},"in_reply_to":"5f7c97a3_60c4d241","updated":"2018-07-30 18:45:47.000000000","message":"...but I now see you carried this over from the original metadata key pattern, which is the right thing to do (even though it\u0027s redundant there as well) because you could get different schema failure messages, and theoretically somebody might be relying on that.","commit_id":"dc153c82ec02a66fc0af37064379bb6de5260d07"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"84189461a256ea53ed53082fae0a832cfda47c24","unresolved":false,"context_lines":[{"line_number":22,"context_line":"metadata[\u0027patternProperties\u0027].pop(parameter_types.metakey_pattern)"},{"line_number":23,"context_line":"metadata[\u0027patternProperties\u0027][\u0027^[a-zA-Z0-9-_:. ]{1,255}$\u0027] \u003d {"},{"line_number":24,"context_line":"    \u0027type\u0027: [\u0027string\u0027, \u0027number\u0027],"},{"line_number":25,"context_line":"    \u0027maxLength\u0027: 255"},{"line_number":26,"context_line":"}"},{"line_number":27,"context_line":"create \u003d {"},{"line_number":28,"context_line":"    \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_40d676c6","line":25,"range":{"start_line":25,"start_character":4,"end_line":25,"end_character":20},"in_reply_to":"5f7c97a3_e02b02e7","updated":"2018-07-30 18:52:34.000000000","message":"I\u0027m scratching my head on this one... why again don\u0027t we just want to use metakey_pattern for flavor extra spec keys?","commit_id":"dc153c82ec02a66fc0af37064379bb6de5260d07"}],"nova/api/validation/parameter_types.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d0c10637f1a95dbe16a1cc0aa4e049531e0d6156","unresolved":false,"context_lines":[{"line_number":377,"context_line":"}"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"metakey_pattern \u003d \u0027^[\\\\\\\\a-zA-Z0-9-_:. ]{1,255}$\u0027"},{"line_number":381,"context_line":"metadata \u003d {"},{"line_number":382,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":383,"context_line":"    \u0027patternProperties\u0027: {"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_c91ef86e","line":380,"range":{"start_line":380,"start_character":18,"end_line":380,"end_character":49},"updated":"2018-06-01 15:06:29.000000000","message":"if you use r\u0027\u0027 (raw string) here, you can avoid doubling the backslashes twice.\n\n metakey_pattern \u003d r\u0027^[\\\\a-zA-Z0-9-_:. ]{1,255}$\u0027","commit_id":"35be3e18ad11c0b346e22d3aa93367ff13983bd1"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"41b1638ab4f6f31254c57a867c84fa4c9b596899","unresolved":false,"context_lines":[{"line_number":376,"context_line":"}"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"metakey_pattern \u003d u\u0027^[\\u4e00-\\u9fa5a-zA-Z0-9-_:. ]{1,255}$\u0027"},{"line_number":380,"context_line":"metadata \u003d {"},{"line_number":381,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":382,"context_line":"    \u0027patternProperties\u0027: {"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_4faeb580","line":379,"range":{"start_line":379,"start_character":22,"end_line":379,"end_character":36},"updated":"2018-07-30 04:08:21.000000000","message":"can you give some comments at least? because 4e00-u9fa is something not every one knows... for chinese characters only?","commit_id":"e3ec114eab1a79f5c679d2656ab102ff3fd6d596"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"bcaea3213bd6f1f38cfa0ab330119df7d2438139","unresolved":false,"context_lines":[{"line_number":376,"context_line":"}"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"metakey_pattern \u003d u\u0027^[\\u4e00-\\u9fa5a-zA-Z0-9-_:. ]{1,255}$\u0027"},{"line_number":380,"context_line":"metadata \u003d {"},{"line_number":381,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":382,"context_line":"    \u0027patternProperties\u0027: {"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_03097630","line":379,"range":{"start_line":379,"start_character":22,"end_line":379,"end_character":36},"in_reply_to":"5f7c97a3_43e1ae96","updated":"2018-07-30 09:43:37.000000000","message":"that\u0027s my understanding, you want to support all languages","commit_id":"e3ec114eab1a79f5c679d2656ab102ff3fd6d596"},{"author":{"_account_id":26286,"name":"huanhongda","email":"hongda.xun@easystack.cn","username":"huanhongda"},"change_message_id":"55ec5e76b460722cbde5675ed3a8445d9e0ad64e","unresolved":false,"context_lines":[{"line_number":376,"context_line":"}"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"metakey_pattern \u003d u\u0027^[\\u4e00-\\u9fa5a-zA-Z0-9-_:. ]{1,255}$\u0027"},{"line_number":380,"context_line":"metadata \u003d {"},{"line_number":381,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":382,"context_line":"    \u0027patternProperties\u0027: {"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_43e1ae96","line":379,"range":{"start_line":379,"start_character":22,"end_line":379,"end_character":36},"in_reply_to":"5f7c97a3_4faeb580","updated":"2018-07-30 09:31:16.000000000","message":"Thanks for reply. Not only chinese characters need to support. Other non-english languages also need to support. I have modified the regex. Please take a look. Thanks again.","commit_id":"e3ec114eab1a79f5c679d2656ab102ff3fd6d596"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"bcaea3213bd6f1f38cfa0ab330119df7d2438139","unresolved":false,"context_lines":[{"line_number":376,"context_line":"}"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"metakey_pattern_base \u003d \u0027^[%s]{1,255}$\u0027"},{"line_number":380,"context_line":"metakey_pattern \u003d metakey_pattern_base % (_build_regex_range())"},{"line_number":381,"context_line":"metadata \u003d {"},{"line_number":382,"context_line":"    \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_be2c5994","line":379,"range":{"start_line":379,"start_character":26,"end_line":379,"end_character":28},"updated":"2018-07-30 09:43:37.000000000","message":"I am not expert in this area :(\nquick search on regex for %s seems not match existing pattern\nis this %s equal to \u0027any char\u0027?","commit_id":"dc153c82ec02a66fc0af37064379bb6de5260d07"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"a8c9c54ef9c365deb598e4bcd00940d099c59fa8","unresolved":false,"context_lines":[{"line_number":376,"context_line":"}"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"metakey_pattern_base \u003d \u0027^[%s]{1,255}$\u0027"},{"line_number":380,"context_line":"metakey_pattern \u003d metakey_pattern_base % (_build_regex_range())"},{"line_number":381,"context_line":"metadata \u003d {"},{"line_number":382,"context_line":"    \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_743d6f8b","line":379,"range":{"start_line":379,"start_character":26,"end_line":379,"end_character":28},"in_reply_to":"5f7c97a3_403c36bf","updated":"2018-07-31 04:55:04.000000000","message":"then it means anything? why we need a %s here...\njust a string with 1-255 should be fine?","commit_id":"dc153c82ec02a66fc0af37064379bb6de5260d07"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"65ac056adc0b0335fa1e05d49d761aab1771a9c7","unresolved":false,"context_lines":[{"line_number":376,"context_line":"}"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"metakey_pattern_base \u003d \u0027^[%s]{1,255}$\u0027"},{"line_number":380,"context_line":"metakey_pattern \u003d metakey_pattern_base % (_build_regex_range())"},{"line_number":381,"context_line":"metadata \u003d {"},{"line_number":382,"context_line":"    \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_47c75a12","line":379,"range":{"start_line":379,"start_character":26,"end_line":379,"end_character":28},"in_reply_to":"5f7c97a3_743d6f8b","updated":"2018-07-31 13:31:39.000000000","message":"I think you\u0027re just getting confused because we\u0027re building the regex in two steps.  metakey_pattern_base isn\u0027t being sent to the regex engine - we\u0027re using it to compose the regex that is. Maybe this helps:\n\n In [3]: import re\n\n In [4]: pat_fmt \u003d \u0027^[%s]{1,255}$\u0027\n\n In [5]: pat \u003d pat_fmt % \u0027a-zA-Z0-9\u0027\n\n In [6]: pat\n Out[6]: \u0027^[a-zA-Z0-9]{1,255}$\u0027\n\n In [7]: re.match(pat, \"Hello123\")\n Out[7]: \u003c_sre.SRE_Match at 0x7f205c00f510\u003e\n\n In [8]: re.match(pat, \"Hello, world!\")\n\n In [9]:","commit_id":"dc153c82ec02a66fc0af37064379bb6de5260d07"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a67f750c440d9931f8a63433eb016e9235efc951","unresolved":false,"context_lines":[{"line_number":376,"context_line":"}"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"metakey_pattern_base \u003d \u0027^[%s]{1,255}$\u0027"},{"line_number":380,"context_line":"metakey_pattern \u003d metakey_pattern_base % (_build_regex_range())"},{"line_number":381,"context_line":"metadata \u003d {"},{"line_number":382,"context_line":"    \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_403c36bf","line":379,"range":{"start_line":379,"start_character":26,"end_line":379,"end_character":28},"in_reply_to":"5f7c97a3_be2c5994","updated":"2018-07-30 18:35:38.000000000","message":"It\u0027s being used as a normal string substitution placeholder, swapped out on the subsequent line with the result of _build_regex_range()","commit_id":"dc153c82ec02a66fc0af37064379bb6de5260d07"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a67f750c440d9931f8a63433eb016e9235efc951","unresolved":false,"context_lines":[{"line_number":377,"context_line":""},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"metakey_pattern_base \u003d \u0027^[%s]{1,255}$\u0027"},{"line_number":380,"context_line":"metakey_pattern \u003d metakey_pattern_base % (_build_regex_range())"},{"line_number":381,"context_line":"metadata \u003d {"},{"line_number":382,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":383,"context_line":"    \u0027patternProperties\u0027: {"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_203fbab2","line":380,"range":{"start_line":380,"start_character":41,"end_line":380,"end_character":63},"updated":"2018-07-30 18:35:38.000000000","message":"parens redundant.","commit_id":"dc153c82ec02a66fc0af37064379bb6de5260d07"}],"nova/tests/unit/api/openstack/compute/test_server_metadata.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"ec9d7906e77af14dc53c142bde599d43297fec99","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        })"},{"line_number":229,"context_line":"        self.assertEqual(body, res_dict)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def test_create_with_chinese(self):"},{"line_number":232,"context_line":"        self.stubs.Set(objects.Instance, \u0027save\u0027, fake_instance_save)"},{"line_number":233,"context_line":"        req \u003d self._get_request()"},{"line_number":234,"context_line":"        req.method \u003d \u0027POST\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_a89e8204","line":231,"range":{"start_line":231,"start_character":25,"end_line":231,"end_character":32},"updated":"2018-01-24 05:27:44.000000000","message":"use unicode might be better","commit_id":"594d82d0301fa907cf94db167f143f735b293376"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"ec9d7906e77af14dc53c142bde599d43297fec99","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        self.assertEqual(body, res_dict)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def test_create_with_chinese(self):"},{"line_number":232,"context_line":"        self.stubs.Set(objects.Instance, \u0027save\u0027, fake_instance_save)"},{"line_number":233,"context_line":"        req \u003d self._get_request()"},{"line_number":234,"context_line":"        req.method \u003d \u0027POST\u0027"},{"line_number":235,"context_line":"        req.content_type \u003d \"application/json\""}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_c8ec2e91","line":232,"range":{"start_line":232,"start_character":8,"end_line":232,"end_character":68},"updated":"2018-01-24 05:27:44.000000000","message":"maybe you can consider use mock for new test cases...","commit_id":"594d82d0301fa907cf94db167f143f735b293376"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"03a0a7d02815f8ed004ccd15801ee6c360fce963","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        self.assertEqual(body, res_dict)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def test_create_with_unicide(self):"},{"line_number":232,"context_line":"        self.stubs.Set(objects.Instance, \u0027save\u0027, fake_instance_save)"},{"line_number":233,"context_line":"        req \u003d self._get_request()"},{"line_number":234,"context_line":"        req.method \u003d \u0027POST\u0027"},{"line_number":235,"context_line":"        req.content_type \u003d \"application/json\""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_d84ae325","line":232,"range":{"start_line":232,"start_character":8,"end_line":232,"end_character":68},"updated":"2018-04-27 07:01:56.000000000","message":"you may need avoid this if you have chance, replace with stub_out or mock..","commit_id":"e77be855b8cc807cd60718652c8e99d22a84478b"},{"author":{"_account_id":27518,"name":"wanghongtao","email":"hongtao.wang@easystack.cn","username":"hongtao.wang"},"change_message_id":"a26741b30d72d8a078a80bc371fae7ebed3f1e9b","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        self.assertEqual(body, res_dict)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def test_create_with_unicide(self):"},{"line_number":232,"context_line":"        self.stubs.Set(objects.Instance, \u0027save\u0027, fake_instance_save)"},{"line_number":233,"context_line":"        req \u003d self._get_request()"},{"line_number":234,"context_line":"        req.method \u003d \u0027POST\u0027"},{"line_number":235,"context_line":"        req.content_type \u003d \"application/json\""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_7f3ac3cd","line":232,"range":{"start_line":232,"start_character":8,"end_line":232,"end_character":68},"in_reply_to":"5f93b717_d84ae325","updated":"2018-05-18 02:07:49.000000000","message":"Thank you,i will acceput your suggest.","commit_id":"e77be855b8cc807cd60718652c8e99d22a84478b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d0c10637f1a95dbe16a1cc0aa4e049531e0d6156","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        self.assertEqual(body, res_dict)"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    @mock.patch.object(server_metadata_v21.ServerMetadataController, \u0027create\u0027)"},{"line_number":231,"context_line":"    def test_create_with_unicode(self, mock_create):"},{"line_number":232,"context_line":"        req \u003d self._get_request()"},{"line_number":233,"context_line":"        body \u003d {\"metadata\": {\"\\u4e2d\\u6587\": \"\\u4e2d\\u6587\"}}"},{"line_number":234,"context_line":"        mock_create.return_value \u003d body"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_a41ba37e","line":231,"range":{"start_line":231,"start_character":8,"end_line":231,"end_character":32},"updated":"2018-06-01 15:06:29.000000000","message":"This test still passes with the fix reverted.\n\nIt\u0027s because you\u0027re mocking ServerMetadataController.create to return the exact value you\u0027re checking for, and then calling that mock.  You can make anything pass that way :)\n\nYou\u0027re going to need something that actually hits the JSON schema validation.","commit_id":"35be3e18ad11c0b346e22d3aa93367ff13983bd1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d0c10637f1a95dbe16a1cc0aa4e049531e0d6156","unresolved":false,"context_lines":[{"line_number":230,"context_line":"    @mock.patch.object(server_metadata_v21.ServerMetadataController, \u0027create\u0027)"},{"line_number":231,"context_line":"    def test_create_with_unicode(self, mock_create):"},{"line_number":232,"context_line":"        req \u003d self._get_request()"},{"line_number":233,"context_line":"        body \u003d {\"metadata\": {\"\\u4e2d\\u6587\": \"\\u4e2d\\u6587\"}}"},{"line_number":234,"context_line":"        mock_create.return_value \u003d body"},{"line_number":235,"context_line":"        res_dict \u003d self.controller.create(req, self.uuid, body\u003dbody)"},{"line_number":236,"context_line":"        self.assertEqual(res_dict, body)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_8414674e","line":233,"range":{"start_line":233,"start_character":29,"end_line":233,"end_character":43},"updated":"2018-06-01 15:06:29.000000000","message":"I suspect this isn\u0027t a real test of your use case.  I think you want to use an actual unicode string (u\"...\").  At which point I\u0027m actually not sure whether your fix will work at all...","commit_id":"35be3e18ad11c0b346e22d3aa93367ff13983bd1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a67f750c440d9931f8a63433eb016e9235efc951","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        })"},{"line_number":228,"context_line":"        self.assertEqual(body, res_dict)"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    @mock.patch.object(server_metadata_v21.ServerMetadataController, \u0027create\u0027)"},{"line_number":231,"context_line":"    def test_create_with_unicode(self, mock_create):"},{"line_number":232,"context_line":"        req \u003d self._get_request()"},{"line_number":233,"context_line":"        body \u003d {\"metadata\": {u\"\\u4e2d\\u6587\": u\"\\u4e2d\\u6587\"}}"},{"line_number":234,"context_line":"        mock_create.return_value \u003d body"},{"line_number":235,"context_line":"        res_dict \u003d self.controller.create(req, self.uuid, body\u003dbody)"},{"line_number":236,"context_line":"        self.assertEqual(res_dict, body)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def test_create_empty_body(self):"},{"line_number":239,"context_line":"        self.stub_out(\u0027nova.db.api.instance_metadata_update\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_20ad7ae6","line":236,"range":{"start_line":230,"start_character":0,"end_line":236,"end_character":40},"updated":"2018-07-30 18:35:38.000000000","message":"This test passes without the fix.","commit_id":"dc153c82ec02a66fc0af37064379bb6de5260d07"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"bed123f5c46bf94a2b19736483347f4fa6ea71b1","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        })"},{"line_number":228,"context_line":"        self.assertEqual(body, res_dict)"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    @mock.patch.object(server_metadata_v21.ServerMetadataController, \u0027create\u0027)"},{"line_number":231,"context_line":"    def test_create_with_unicode(self, mock_create):"},{"line_number":232,"context_line":"        req \u003d self._get_request()"},{"line_number":233,"context_line":"        body \u003d {\"metadata\": {u\"\\u4e2d\\u6587\": u\"\\u4e2d\\u6587\"}}"},{"line_number":234,"context_line":"        mock_create.return_value \u003d body"},{"line_number":235,"context_line":"        res_dict \u003d self.controller.create(req, self.uuid, body\u003dbody)"},{"line_number":236,"context_line":"        self.assertEqual(res_dict, body)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def test_create_empty_body(self):"},{"line_number":239,"context_line":"        self.stub_out(\u0027nova.db.api.instance_metadata_update\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5fc1f717_da6934f8","line":236,"range":{"start_line":230,"start_character":0,"end_line":236,"end_character":40},"in_reply_to":"5f7c97a3_20ad7ae6","updated":"2019-03-25 07:39:45.000000000","message":"self.controller.create is mocked. It does not make sense.","commit_id":"dc153c82ec02a66fc0af37064379bb6de5260d07"}],"releasenotes/notes/bug-173771-d1d453b963131b81.yaml":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"31eab15addca8a4c014ea2fc0347ab2588e55ea6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes \u00271737711\u0027 modify the metadata re to support boot vm with"},{"line_number":5,"context_line":"    unicode metadata."},{"line_number":6,"context_line":"    .. _bug 1737711: https://review.openstack.org/#/c/536236"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5f7c97a3_d5b9c6cb","line":4,"range":{"start_line":4,"start_character":10,"end_line":4,"end_character":19},"updated":"2018-05-31 12:58:24.000000000","message":"This link is broken. It should be `bug 1737711`_\n\nhttp://logs.openstack.org/36/536236/6/check/build-openstack-releasenotes/a6dbe35/html/unreleased.html#bug-fixes","commit_id":"62da9d8aa4a1927a2270211335f1af13c3e1a242"},{"author":{"_account_id":27518,"name":"wanghongtao","email":"hongtao.wang@easystack.cn","username":"hongtao.wang"},"change_message_id":"70808c66d4a6ab8213e31b149b21088bb8333ec5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes \u00271737711\u0027 modify the metadata re to support boot vm with"},{"line_number":5,"context_line":"    unicode metadata."},{"line_number":6,"context_line":"    .. _bug 1737711: https://review.openstack.org/#/c/536236"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5f7c97a3_d7e1c0d1","line":4,"range":{"start_line":4,"start_character":10,"end_line":4,"end_character":19},"in_reply_to":"5f7c97a3_d5b9c6cb","updated":"2018-06-06 12:44:37.000000000","message":"Thank you very much,i will modify it.","commit_id":"62da9d8aa4a1927a2270211335f1af13c3e1a242"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"31eab15addca8a4c014ea2fc0347ab2588e55ea6","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes \u00271737711\u0027 modify the metadata re to support boot vm with"},{"line_number":5,"context_line":"    unicode metadata."},{"line_number":6,"context_line":"    .. _bug 1737711: https://review.openstack.org/#/c/536236"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5f7c97a3_b02218a2","line":5,"updated":"2018-05-31 12:58:24.000000000","message":"Add a blank line between line 5 and 6.","commit_id":"62da9d8aa4a1927a2270211335f1af13c3e1a242"},{"author":{"_account_id":27518,"name":"wanghongtao","email":"hongtao.wang@easystack.cn","username":"hongtao.wang"},"change_message_id":"70808c66d4a6ab8213e31b149b21088bb8333ec5","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes \u00271737711\u0027 modify the metadata re to support boot vm with"},{"line_number":5,"context_line":"    unicode metadata."},{"line_number":6,"context_line":"    .. _bug 1737711: https://review.openstack.org/#/c/536236"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5f7c97a3_97e7c8e3","line":5,"in_reply_to":"5f7c97a3_b02218a2","updated":"2018-06-06 12:44:37.000000000","message":"Thank you very much,i will modify it.","commit_id":"62da9d8aa4a1927a2270211335f1af13c3e1a242"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"31eab15addca8a4c014ea2fc0347ab2588e55ea6","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes \u00271737711\u0027 modify the metadata re to support boot vm with"},{"line_number":5,"context_line":"    unicode metadata."},{"line_number":6,"context_line":"    .. _bug 1737711: https://review.openstack.org/#/c/536236"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5f7c97a3_d029d489","line":6,"range":{"start_line":6,"start_character":21,"end_line":6,"end_character":60},"updated":"2018-05-31 12:58:24.000000000","message":"https://bugs.launchpad.net/nova/+bug/1737711","commit_id":"62da9d8aa4a1927a2270211335f1af13c3e1a242"},{"author":{"_account_id":27518,"name":"wanghongtao","email":"hongtao.wang@easystack.cn","username":"hongtao.wang"},"change_message_id":"70808c66d4a6ab8213e31b149b21088bb8333ec5","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes \u00271737711\u0027 modify the metadata re to support boot vm with"},{"line_number":5,"context_line":"    unicode metadata."},{"line_number":6,"context_line":"    .. _bug 1737711: https://review.openstack.org/#/c/536236"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5f7c97a3_37d27401","line":6,"range":{"start_line":6,"start_character":21,"end_line":6,"end_character":60},"in_reply_to":"5f7c97a3_d029d489","updated":"2018-06-06 12:44:37.000000000","message":"Thank you very much,i will modify it.","commit_id":"62da9d8aa4a1927a2270211335f1af13c3e1a242"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d0c10637f1a95dbe16a1cc0aa4e049531e0d6156","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes `bug 1737711`_ modify the metadata re to support boot vm with"},{"line_number":5,"context_line":"    unicode metadata."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    .. _bug 1737711: https://bugs.launchpad.net/nova/+bug/1737711"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"5f7c97a3_24e8f3df","line":5,"range":{"start_line":4,"start_character":0,"end_line":5,"end_character":21},"updated":"2018-06-01 15:06:29.000000000","message":"Suggest reword:\n\n Unicode characters are now allowed in metadata and flavor\n extra_specs keys.  This fixes `bug 1737711`_.","commit_id":"35be3e18ad11c0b346e22d3aa93367ff13983bd1"}]}
