)]}'
{"tempest/cmd/run.py":[{"author":{"_account_id":9364,"name":"Stephen Lowrie","email":"stephen.lowrie@rackspace.com","username":"step6829"},"change_message_id":"7a3a8fb18444e2e07e9fa641073aba92d00eb018","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        elif parsed_args.regex:"},{"line_number":140,"context_line":"            regex \u003d parsed_args.regex"},{"line_number":141,"context_line":"        if parsed_args.whitelist_file or parsed_args.blacklist_file:"},{"line_number":142,"context_line":"            regex_builder.construct_regex(parsed_args.blacklist_file,"},{"line_number":143,"context_line":"                                          parsed_args.whitelist_file,"},{"line_number":144,"context_line":"                                          regex)"},{"line_number":145,"context_line":"        return regex"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def _build_options(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab6814e_af3a5ce5","line":144,"range":{"start_line":142,"start_character":12,"end_line":144,"end_character":48},"updated":"2016-05-24 19:16:41.000000000","message":"You\u0027re not setting the return into regex.","commit_id":"3214dcd20a0b17c6d8afd38b31a3f0ca0eeb51c4"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"ba642d1c391e5d125974ee02b19b87f7cc8c6f6e","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        elif parsed_args.regex:"},{"line_number":140,"context_line":"            regex \u003d parsed_args.regex"},{"line_number":141,"context_line":"        if parsed_args.whitelist_file or parsed_args.blacklist_file:"},{"line_number":142,"context_line":"            regex_builder.construct_regex(parsed_args.blacklist_file,"},{"line_number":143,"context_line":"                                          parsed_args.whitelist_file,"},{"line_number":144,"context_line":"                                          regex)"},{"line_number":145,"context_line":"        return regex"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def _build_options(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab6814e_0f2c48aa","line":144,"range":{"start_line":142,"start_character":12,"end_line":144,"end_character":48},"in_reply_to":"bab6814e_af3a5ce5","updated":"2016-05-24 19:18:12.000000000","message":"oops, good catch thanks","commit_id":"3214dcd20a0b17c6d8afd38b31a3f0ca0eeb51c4"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6423935e7d9402d0d3240b853d0e71ae7c7b20d5","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        regex.add_argument(\u0027--regex\u0027, \u0027-r\u0027, default\u003d\u0027\u0027,"},{"line_number":126,"context_line":"                           help\u003d\u0027A normal testr selection regex used to \u0027"},{"line_number":127,"context_line":"                                \u0027specify a subset of tests to run\u0027)"},{"line_number":128,"context_line":"        list_selector \u003d parser.add_mutually_exclusive_group()"},{"line_number":129,"context_line":"        list_selector.add_argument(\u0027--whitelist_file\u0027,"},{"line_number":130,"context_line":"                                   help\u003d\"Path to a whitelist file, this file \""},{"line_number":131,"context_line":"                                        \"contains a seperate regex on each \""}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_66ba7273","line":128,"range":{"start_line":128,"start_character":24,"end_line":128,"end_character":61},"updated":"2016-06-15 18:29:27.000000000","message":"According to the comment above it is possible to specify both whitelist and blacklist, so they should not be mutually exclusive. This two options cannot passed together with smoke or regex though.\nI\u0027m not sure how to express this via the agrparse.","commit_id":"a664ed075cec4d66cdb3c0c82d7f456575e290bc"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"71591bfdcaf46f0f3072e30b97197b23db9f1c23","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        regex.add_argument(\u0027--regex\u0027, \u0027-r\u0027, default\u003d\u0027\u0027,"},{"line_number":126,"context_line":"                           help\u003d\u0027A normal testr selection regex used to \u0027"},{"line_number":127,"context_line":"                                \u0027specify a subset of tests to run\u0027)"},{"line_number":128,"context_line":"        list_selector \u003d parser.add_mutually_exclusive_group()"},{"line_number":129,"context_line":"        list_selector.add_argument(\u0027--whitelist_file\u0027,"},{"line_number":130,"context_line":"                                   help\u003d\"Path to a whitelist file, this file \""},{"line_number":131,"context_line":"                                        \"contains a seperate regex on each \""}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_a8f420cf","line":128,"range":{"start_line":128,"start_character":24,"end_line":128,"end_character":61},"in_reply_to":"7aa08908_66ba7273","updated":"2016-06-15 21:35:23.000000000","message":"This is correct. The comments above are a mistake (from an earlier draft) I copied this behavior straight from ostestr. We can combine a whitelist or a blacklist with a normal regex (either --regex or --smoke) but not both at once. The behavior with both is unclear at this point, and I didn\u0027t want the functionality here to exclude what ostestr is doing. (especially since this is using the same construction logic). I\u0027ll respin this to drop the comment above","commit_id":"a664ed075cec4d66cdb3c0c82d7f456575e290bc"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"66a61c6c79c46492c3c4e4297255d24b3731e6c9","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        regex.add_argument(\u0027--regex\u0027, \u0027-r\u0027, default\u003d\u0027\u0027,"},{"line_number":126,"context_line":"                           help\u003d\u0027A normal testr selection regex used to \u0027"},{"line_number":127,"context_line":"                                \u0027specify a subset of tests to run\u0027)"},{"line_number":128,"context_line":"        list_selector \u003d parser.add_mutually_exclusive_group()"},{"line_number":129,"context_line":"        list_selector.add_argument(\u0027--whitelist_file\u0027,"},{"line_number":130,"context_line":"                                   help\u003d\"Path to a whitelist file, this file \""},{"line_number":131,"context_line":"                                        \"contains a seperate regex on each \""}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_83330562","line":128,"range":{"start_line":128,"start_character":24,"end_line":128,"end_character":61},"in_reply_to":"7aa08908_a8f420cf","updated":"2016-06-15 22:07:14.000000000","message":"ok, my misunderstanding - thanks for the explanation","commit_id":"a664ed075cec4d66cdb3c0c82d7f456575e290bc"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6423935e7d9402d0d3240b853d0e71ae7c7b20d5","unresolved":false,"context_lines":[{"line_number":163,"context_line":"            regex \u003d \u0027smoke\u0027"},{"line_number":164,"context_line":"        elif parsed_args.regex:"},{"line_number":165,"context_line":"            regex \u003d parsed_args.regex"},{"line_number":166,"context_line":"        if parsed_args.whitelist_file or parsed_args.blacklist_file:"},{"line_number":167,"context_line":"            regex \u003d regex_builder.construct_regex(parsed_args.blacklist_file,"},{"line_number":168,"context_line":"                                                  parsed_args.whitelist_file,"},{"line_number":169,"context_line":"                                                  regex)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_81e028fc","line":166,"range":{"start_line":166,"start_character":8,"end_line":166,"end_character":10},"updated":"2016-06-15 18:29:27.000000000","message":"NIT: Why if and not elif? \n\nIf we rely on argparse mutually exclusive options, than we don\u0027t need elif on L164 either. Else this would be silently overriding the regex defined earlier.\n\nI think having elif would make the code more readable here?","commit_id":"a664ed075cec4d66cdb3c0c82d7f456575e290bc"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"71591bfdcaf46f0f3072e30b97197b23db9f1c23","unresolved":false,"context_lines":[{"line_number":163,"context_line":"            regex \u003d \u0027smoke\u0027"},{"line_number":164,"context_line":"        elif parsed_args.regex:"},{"line_number":165,"context_line":"            regex \u003d parsed_args.regex"},{"line_number":166,"context_line":"        if parsed_args.whitelist_file or parsed_args.blacklist_file:"},{"line_number":167,"context_line":"            regex \u003d regex_builder.construct_regex(parsed_args.blacklist_file,"},{"line_number":168,"context_line":"                                                  parsed_args.whitelist_file,"},{"line_number":169,"context_line":"                                                  regex)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_885684cc","line":166,"range":{"start_line":166,"start_character":8,"end_line":166,"end_character":10},"in_reply_to":"7aa08908_81e028fc","updated":"2016-06-15 21:35:23.000000000","message":"But, it\u0027s not an else if. If it were an elsif then the regex from either smoke or the regex opt would be ignored. This is literally if either option extend whatever regex from the cli (if one) with the regex generated from the file.","commit_id":"a664ed075cec4d66cdb3c0c82d7f456575e290bc"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"66a61c6c79c46492c3c4e4297255d24b3731e6c9","unresolved":false,"context_lines":[{"line_number":163,"context_line":"            regex \u003d \u0027smoke\u0027"},{"line_number":164,"context_line":"        elif parsed_args.regex:"},{"line_number":165,"context_line":"            regex \u003d parsed_args.regex"},{"line_number":166,"context_line":"        if parsed_args.whitelist_file or parsed_args.blacklist_file:"},{"line_number":167,"context_line":"            regex \u003d regex_builder.construct_regex(parsed_args.blacklist_file,"},{"line_number":168,"context_line":"                                                  parsed_args.whitelist_file,"},{"line_number":169,"context_line":"                                                  regex)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_4302bd73","line":166,"range":{"start_line":166,"start_character":8,"end_line":166,"end_character":10},"in_reply_to":"7aa08908_885684cc","updated":"2016-06-15 22:07:14.000000000","message":"Got it, I thought that white/blacklist would exclude the others.","commit_id":"a664ed075cec4d66cdb3c0c82d7f456575e290bc"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"a5a0e5436b3a2e1955c2e5ae15bd81c7539f6f84","unresolved":false,"context_lines":[{"line_number":23,"context_line":"                   any tests that match on re.match() with the regex"},{"line_number":24,"context_line":" * **--smoke**: Run all the tests tagged as smoke"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"There are also the **--blacklist_file** and **--whitelist_file** options that"},{"line_number":27,"context_line":"let you pass a filepath to tempest run with the file format being a line"},{"line_number":28,"context_line":"seperated regex, with \u0027#\u0027 used to signify the start of a comment on a line."},{"line_number":29,"context_line":"For example::"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    # Regex file"},{"line_number":32,"context_line":"    ^regex1 # Match these tests"},{"line_number":33,"context_line":"    .*regex2 # Match those tests"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"The blacklist file will be used to construct a negative lookahead regex and"},{"line_number":36,"context_line":"the whitelist file will simply OR all the regexes in the file."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"You can also use the **--list-tests** option in conjunction with selection"},{"line_number":39,"context_line":"arguments to list which tests will be run."}],"source_content_type":"text/x-python","patch_set":8,"id":"7aa08908_f09b2e71","line":36,"range":{"start_line":26,"start_character":0,"end_line":36,"end_character":62},"updated":"2016-06-18 13:51:47.000000000","message":"I believe it\u0027s still non-obvious from the description that white and black list are mutually exclusive, and that they can be combined with regex or smoke.\nThis info could be added in the online help as well.","commit_id":"ac310d68469025ce26f4e2f1b9e2368a340594f0"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"06c8a3c8ad4a73c7beaf9c363a9bfb9f019cfe4c","unresolved":false,"context_lines":[{"line_number":23,"context_line":"                   any tests that match on re.match() with the regex"},{"line_number":24,"context_line":" * **--smoke**: Run all the tests tagged as smoke"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"There are also the **--blacklist_file** and **--whitelist_file** options that"},{"line_number":27,"context_line":"let you pass a filepath to tempest run with the file format being a line"},{"line_number":28,"context_line":"seperated regex, with \u0027#\u0027 used to signify the start of a comment on a line."},{"line_number":29,"context_line":"For example::"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    # Regex file"},{"line_number":32,"context_line":"    ^regex1 # Match these tests"},{"line_number":33,"context_line":"    .*regex2 # Match those tests"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"The blacklist file will be used to construct a negative lookahead regex and"},{"line_number":36,"context_line":"the whitelist file will simply OR all the regexes in the file."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"You can also use the **--list-tests** option in conjunction with selection"},{"line_number":39,"context_line":"arguments to list which tests will be run."}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_d0f8407f","line":36,"range":{"start_line":26,"start_character":0,"end_line":36,"end_character":62},"in_reply_to":"7aa08908_f09b2e71","updated":"2016-06-22 04:31:03.000000000","message":"Done","commit_id":"ac310d68469025ce26f4e2f1b9e2368a340594f0"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"f655aa846303f8eee457886ad5af8c464cc62aa9","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        if parsed_args.whitelist_file or parsed_args.blacklist_file:"},{"line_number":163,"context_line":"            regex \u003d regex_builder.construct_regex(parsed_args.blacklist_file,"},{"line_number":164,"context_line":"                                                  parsed_args.whitelist_file,"},{"line_number":165,"context_line":"                                                  regex)"},{"line_number":166,"context_line":"        return regex"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def _build_options(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_0ac73a13","line":165,"range":{"start_line":165,"start_character":55,"end_line":165,"end_character":56},"updated":"2016-06-22 03:56:45.000000000","message":"one more parameter - print_exclude is needed.\n\nhttps://github.com/openstack/os-testr/blob/master/os_testr/regex_builder.py#L73","commit_id":"ac310d68469025ce26f4e2f1b9e2368a340594f0"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"06c8a3c8ad4a73c7beaf9c363a9bfb9f019cfe4c","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        if parsed_args.whitelist_file or parsed_args.blacklist_file:"},{"line_number":163,"context_line":"            regex \u003d regex_builder.construct_regex(parsed_args.blacklist_file,"},{"line_number":164,"context_line":"                                                  parsed_args.whitelist_file,"},{"line_number":165,"context_line":"                                                  regex)"},{"line_number":166,"context_line":"        return regex"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def _build_options(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_70034c74","line":165,"range":{"start_line":165,"start_character":55,"end_line":165,"end_character":56},"in_reply_to":"3aaa91ec_0ac73a13","updated":"2016-06-22 04:31:03.000000000","message":"Oops, good catch","commit_id":"ac310d68469025ce26f4e2f1b9e2368a340594f0"},{"author":{"_account_id":11017,"name":"Jerome Bertolino","email":"jeromebertolino@gmail.com","username":"jebertol"},"change_message_id":"8fb60c3e8d34cada739e53843a279b01eda4bca6","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"There are also the **--blacklist_file** and **--whitelist_file** options that"},{"line_number":27,"context_line":"let you pass a filepath to tempest run with the file format being a line"},{"line_number":28,"context_line":"seperated regex, with \u0027#\u0027 used to signify the start of a comment on a line."},{"line_number":29,"context_line":"For example::"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    # Regex file"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_a9eaf80c","line":28,"updated":"2016-06-29 20:13:27.000000000","message":"s/seperated/separated","commit_id":"a6b4da9f5feea59adf30655aff7600f6a74a7b3d"},{"author":{"_account_id":11017,"name":"Jerome Bertolino","email":"jeromebertolino@gmail.com","username":"jebertol"},"change_message_id":"8fb60c3e8d34cada739e53843a279b01eda4bca6","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        list_selector \u003d parser.add_mutually_exclusive_group()"},{"line_number":135,"context_line":"        list_selector.add_argument(\u0027--whitelist_file\u0027,"},{"line_number":136,"context_line":"                                   help\u003d\"Path to a whitelist file, this file \""},{"line_number":137,"context_line":"                                        \"contains a seperate regex on each \""},{"line_number":138,"context_line":"                                        \"newline.\")"},{"line_number":139,"context_line":"        list_selector.add_argument(\u0027--blacklist_file\u0027,"},{"line_number":140,"context_line":"                                   help\u003d\u0027Path to a blacklist file, this file \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_09dcec71","line":137,"updated":"2016-06-29 20:13:27.000000000","message":"here too, s/seperate/separate","commit_id":"a6b4da9f5feea59adf30655aff7600f6a74a7b3d"}],"tempest/tests/cmd/test_run.py":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6423935e7d9402d0d3240b853d0e71ae7c7b20d5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"7aa08908_c146b020","updated":"2016-06-15 18:29:27.000000000","message":"The white/black list logic is covered by os-testr unit tests, but it would be good to have some unit test for passing inconsistent options to the command, such as smoke and regex or smoke and whitelist. \nIt may sound like testing argparse but I think the mutual exclusion logic is complicated enough to justify a test.","commit_id":"a664ed075cec4d66cdb3c0c82d7f456575e290bc"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"b0a9ff1c234c31994a92961e787a69467461dc60","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        args \u003d mock.Mock(spec\u003dargparse.Namespace)"},{"line_number":63,"context_line":"        setattr(args, \u0027smoke\u0027, False)"},{"line_number":64,"context_line":"        setattr(args, \"regex\", \u0027i_am_a_fun_little_regex\u0027)"},{"line_number":65,"context_line":"        setattr(args, \u0027whitelist_file\u0027, None)"},{"line_number":66,"context_line":"        setattr(args, \u0027blacklist_file\u0027, None)"},{"line_number":67,"context_line":"        self.assertEqual(\u0027i_am_a_fun_little_regex\u0027,"},{"line_number":68,"context_line":"                         self.run_cmd._build_regex(args))"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_7cf31a0b","line":66,"range":{"start_line":65,"start_character":0,"end_line":66,"end_character":45},"updated":"2016-06-22 10:07:36.000000000","message":"I think we should have some tests with non None and confirm constructed regex are correct one.","commit_id":"3695fc3e846cfc95225374879f0935a99228ceed"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"ac38d6387a2d8df5b118c52bd6455882753d5f4b","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        args \u003d mock.Mock(spec\u003dargparse.Namespace)"},{"line_number":63,"context_line":"        setattr(args, \u0027smoke\u0027, False)"},{"line_number":64,"context_line":"        setattr(args, \"regex\", \u0027i_am_a_fun_little_regex\u0027)"},{"line_number":65,"context_line":"        setattr(args, \u0027whitelist_file\u0027, None)"},{"line_number":66,"context_line":"        setattr(args, \u0027blacklist_file\u0027, None)"},{"line_number":67,"context_line":"        self.assertEqual(\u0027i_am_a_fun_little_regex\u0027,"},{"line_number":68,"context_line":"                         self.run_cmd._build_regex(args))"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_93304903","line":66,"range":{"start_line":65,"start_character":0,"end_line":66,"end_character":45},"in_reply_to":"3aaa91ec_7cf31a0b","updated":"2016-06-23 01:42:43.000000000","message":"Is that something we really should test here? That is the domain of os-testr\u0027s regex_builder interface.","commit_id":"3695fc3e846cfc95225374879f0935a99228ceed"}]}
