)]}'
{"zuul/configloader.py":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"15d0eefc5a8ce232da2fd88f19debb5bd31777d2","unresolved":false,"context_lines":[{"line_number":935,"context_line":"        self.schema \u003d self.getSchema()"},{"line_number":936,"context_line":"        self.not_pipelines \u003d [\u0027name\u0027, \u0027description\u0027, \u0027templates\u0027,"},{"line_number":937,"context_line":"                              \u0027merge-mode\u0027, \u0027default-branch\u0027, \u0027vars\u0027,"},{"line_number":938,"context_line":"                              \u0027_source_context\u0027, \u0027_start_mark\u0027]"},{"line_number":939,"context_line":""},{"line_number":940,"context_line":"    def getSchema(self):"},{"line_number":941,"context_line":"        job \u003d {str: vs.Any(str, JobParser.job_attributes)}"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_c3237bbd","line":938,"updated":"2019-11-18 22:17:05.000000000","message":"Use this variable.","commit_id":"2f798d5fc11b93d158b07c7db21c4b457c7f683e"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"415dfe5baa053c965b08083613a060ba99062b45","unresolved":false,"context_lines":[{"line_number":935,"context_line":"        self.schema \u003d self.getSchema()"},{"line_number":936,"context_line":"        self.not_pipelines \u003d [\u0027name\u0027, \u0027description\u0027, \u0027templates\u0027,"},{"line_number":937,"context_line":"                              \u0027merge-mode\u0027, \u0027default-branch\u0027, \u0027vars\u0027,"},{"line_number":938,"context_line":"                              \u0027_source_context\u0027, \u0027_start_mark\u0027]"},{"line_number":939,"context_line":""},{"line_number":940,"context_line":"    def getSchema(self):"},{"line_number":941,"context_line":"        job \u003d {str: vs.Any(str, JobParser.job_attributes)}"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_666415ba","line":938,"in_reply_to":"3fa7e38b_c3237bbd","updated":"2019-11-18 22:35:33.000000000","message":"Done","commit_id":"2f798d5fc11b93d158b07c7db21c4b457c7f683e"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"f3aa06b212710edd18cb05b86db5b129cd1cb83f","unresolved":false,"context_lines":[{"line_number":944,"context_line":"        self.log \u003d logging.getLogger(\"zuul.ProjectTemplateParser\")"},{"line_number":945,"context_line":"        self.pcontext \u003d pcontext"},{"line_number":946,"context_line":"        self.schema \u003d self.getSchema()"},{"line_number":947,"context_line":"        self.not_pipelines \u003d ProjectTemplateParser.blacklisted_pipeline_names"},{"line_number":948,"context_line":""},{"line_number":949,"context_line":"    def getSchema(self):"},{"line_number":950,"context_line":"        job \u003d {str: vs.Any(str, JobParser.job_attributes)}"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_a6a44da4","line":947,"updated":"2019-11-18 22:43:36.000000000","message":"It seems weird to have two variables with the same value.  Why not just use one or the other in all places?","commit_id":"3bb3d31a96e3014190d989c4ada3f598f3b84d8a"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"88b73f9347539df511c9932eb7f39d3fbaa3c457","unresolved":false,"context_lines":[{"line_number":944,"context_line":"        self.log \u003d logging.getLogger(\"zuul.ProjectTemplateParser\")"},{"line_number":945,"context_line":"        self.pcontext \u003d pcontext"},{"line_number":946,"context_line":"        self.schema \u003d self.getSchema()"},{"line_number":947,"context_line":"        self.not_pipelines \u003d ProjectTemplateParser.blacklisted_pipeline_names"},{"line_number":948,"context_line":""},{"line_number":949,"context_line":"    def getSchema(self):"},{"line_number":950,"context_line":"        job \u003d {str: vs.Any(str, JobParser.job_attributes)}"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_26837dcd","line":947,"in_reply_to":"3fa7e38b_a6a44da4","updated":"2019-11-18 22:55:40.000000000","message":"Done","commit_id":"3bb3d31a96e3014190d989c4ada3f598f3b84d8a"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"f9e6ec8af618188430540880259b1b3dcfde9e49","unresolved":false,"context_lines":[{"line_number":978,"context_line":"        project_template.start_mark \u003d conf[\u0027_start_mark\u0027]"},{"line_number":979,"context_line":"        for pipeline_name, conf_pipeline in conf.items():"},{"line_number":980,"context_line":"            if pipeline_name in \\"},{"line_number":981,"context_line":"               ProjectTemplateParser.blacklisted_pipeline_names:"},{"line_number":982,"context_line":"                continue"},{"line_number":983,"context_line":"            project_pipeline \u003d model.ProjectPipelineConfig()"},{"line_number":984,"context_line":"            project_template.pipelines[pipeline_name] \u003d project_pipeline"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_1f0eb83c","line":981,"updated":"2019-11-19 18:10:54.000000000","message":"0: You can use \"self\" to reference class variables.","commit_id":"202579a3da400cc8e8a4f1c1fbeb9748ede64d33"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"fabe8d8680ed07daf70f3d34949dd5b41cbe9d50","unresolved":false,"context_lines":[{"line_number":978,"context_line":"        project_template.start_mark \u003d conf[\u0027_start_mark\u0027]"},{"line_number":979,"context_line":"        for pipeline_name, conf_pipeline in conf.items():"},{"line_number":980,"context_line":"            if pipeline_name in \\"},{"line_number":981,"context_line":"               ProjectTemplateParser.blacklisted_pipeline_names:"},{"line_number":982,"context_line":"                continue"},{"line_number":983,"context_line":"            project_pipeline \u003d model.ProjectPipelineConfig()"},{"line_number":984,"context_line":"            project_template.pipelines[pipeline_name] \u003d project_pipeline"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_22035b0e","line":981,"in_reply_to":"3fa7e38b_1f0eb83c","updated":"2019-11-19 18:13:41.000000000","message":"Done","commit_id":"202579a3da400cc8e8a4f1c1fbeb9748ede64d33"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"022bd2654090060b44e2497ed6914054d3c33f6d","unresolved":false,"context_lines":[{"line_number":979,"context_line":"        for pipeline_name, conf_pipeline in conf.items():"},{"line_number":980,"context_line":"            if pipeline_name in \\"},{"line_number":981,"context_line":"               ProjectTemplateParser.blacklisted_pipeline_names:"},{"line_number":982,"context_line":"                continue"},{"line_number":983,"context_line":"            project_pipeline \u003d model.ProjectPipelineConfig()"},{"line_number":984,"context_line":"            project_template.pipelines[pipeline_name] \u003d project_pipeline"},{"line_number":985,"context_line":"            project_pipeline.queue_name \u003d conf_pipeline.get(\u0027queue\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_81fd7bb3","line":982,"updated":"2019-11-19 00:14:42.000000000","message":"For consistency with the error below should we raise an error here too? That will give the user something concrete to fix when Zuul doesn\u0027t act the way they expect instead of not applying project templates mysteriously.","commit_id":"202579a3da400cc8e8a4f1c1fbeb9748ede64d33"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"8537ace7136c39c3f3521bd3708789c3ab02b697","unresolved":false,"context_lines":[{"line_number":979,"context_line":"        for pipeline_name, conf_pipeline in conf.items():"},{"line_number":980,"context_line":"            if pipeline_name in \\"},{"line_number":981,"context_line":"               ProjectTemplateParser.blacklisted_pipeline_names:"},{"line_number":982,"context_line":"                continue"},{"line_number":983,"context_line":"            project_pipeline \u003d model.ProjectPipelineConfig()"},{"line_number":984,"context_line":"            project_template.pipelines[pipeline_name] \u003d project_pipeline"},{"line_number":985,"context_line":"            project_pipeline.queue_name \u003d conf_pipeline.get(\u0027queue\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_1cea5073","line":982,"in_reply_to":"3fa7e38b_81fd7bb3","updated":"2019-11-19 03:10:17.000000000","message":"the problem should happen earlier as a blacklisted_pipeline_names triggers a voluptuous error if it\u0027s set to a non pipeline_contents.","commit_id":"202579a3da400cc8e8a4f1c1fbeb9748ede64d33"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"f9e6ec8af618188430540880259b1b3dcfde9e49","unresolved":false,"context_lines":[{"line_number":1210,"context_line":"    def fromYaml(self, conf):"},{"line_number":1211,"context_line":"        self.schema(conf)"},{"line_number":1212,"context_line":"        if conf[\u0027name\u0027] in ProjectTemplateParser.blacklisted_pipeline_names:"},{"line_number":1213,"context_line":"            raise Exception("},{"line_number":1214,"context_line":"                \"Pipeline named %s are not allowed\" % conf[\u0027name\u0027])"},{"line_number":1215,"context_line":"        pipeline \u003d model.Pipeline(conf[\u0027name\u0027], self.pcontext.tenant)"},{"line_number":1216,"context_line":"        pipeline.source_context \u003d conf[\u0027_source_context\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_3f137467","line":1213,"updated":"2019-11-19 18:10:54.000000000","message":"-1: The word \"pipelines\" should be plural in the error message.\n\nThe call side wraps this in a context manager that turns all exceptions into ConfigurationSyntaxErrors.  It would be slightly better if this were handled by voluptuous, in that it could point to the exact line (as it is, it will point to the entire pipeline definition for the error).  See below for a pointer.","commit_id":"202579a3da400cc8e8a4f1c1fbeb9748ede64d33"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"022bd2654090060b44e2497ed6914054d3c33f6d","unresolved":false,"context_lines":[{"line_number":1210,"context_line":"    def fromYaml(self, conf):"},{"line_number":1211,"context_line":"        self.schema(conf)"},{"line_number":1212,"context_line":"        if conf[\u0027name\u0027] in ProjectTemplateParser.blacklisted_pipeline_names:"},{"line_number":1213,"context_line":"            raise Exception("},{"line_number":1214,"context_line":"                \"Pipeline named %s are not allowed\" % conf[\u0027name\u0027])"},{"line_number":1215,"context_line":"        pipeline \u003d model.Pipeline(conf[\u0027name\u0027], self.pcontext.tenant)"},{"line_number":1216,"context_line":"        pipeline.source_context \u003d conf[\u0027_source_context\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_415f83e4","line":1213,"updated":"2019-11-19 00:14:42.000000000","message":"Should this raise ConfigurationSyntaxError?","commit_id":"202579a3da400cc8e8a4f1c1fbeb9748ede64d33"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"fabe8d8680ed07daf70f3d34949dd5b41cbe9d50","unresolved":false,"context_lines":[{"line_number":1210,"context_line":"    def fromYaml(self, conf):"},{"line_number":1211,"context_line":"        self.schema(conf)"},{"line_number":1212,"context_line":"        if conf[\u0027name\u0027] in ProjectTemplateParser.blacklisted_pipeline_names:"},{"line_number":1213,"context_line":"            raise Exception("},{"line_number":1214,"context_line":"                \"Pipeline named %s are not allowed\" % conf[\u0027name\u0027])"},{"line_number":1215,"context_line":"        pipeline \u003d model.Pipeline(conf[\u0027name\u0027], self.pcontext.tenant)"},{"line_number":1216,"context_line":"        pipeline.source_context \u003d conf[\u0027_source_context\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_622633bd","line":1213,"in_reply_to":"3fa7e38b_3f137467","updated":"2019-11-19 18:13:41.000000000","message":"Done","commit_id":"202579a3da400cc8e8a4f1c1fbeb9748ede64d33"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"8537ace7136c39c3f3521bd3708789c3ab02b697","unresolved":false,"context_lines":[{"line_number":1210,"context_line":"    def fromYaml(self, conf):"},{"line_number":1211,"context_line":"        self.schema(conf)"},{"line_number":1212,"context_line":"        if conf[\u0027name\u0027] in ProjectTemplateParser.blacklisted_pipeline_names:"},{"line_number":1213,"context_line":"            raise Exception("},{"line_number":1214,"context_line":"                \"Pipeline named %s are not allowed\" % conf[\u0027name\u0027])"},{"line_number":1215,"context_line":"        pipeline \u003d model.Pipeline(conf[\u0027name\u0027], self.pcontext.tenant)"},{"line_number":1216,"context_line":"        pipeline.source_context \u003d conf[\u0027_source_context\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_7cf82449","line":1213,"in_reply_to":"3fa7e38b_415f83e4","updated":"2019-11-19 03:10:17.000000000","message":"This seems consistent with the other raw Exception raised by the other objects.","commit_id":"202579a3da400cc8e8a4f1c1fbeb9748ede64d33"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"f9e6ec8af618188430540880259b1b3dcfde9e49","unresolved":false,"context_lines":[{"line_number":1885,"context_line":"            if \u0027pipeline\u0027 not in classes:"},{"line_number":1886,"context_line":"                continue"},{"line_number":1887,"context_line":"            with configuration_exceptions(\u0027pipeline\u0027,"},{"line_number":1888,"context_line":"                                          config_pipeline, loading_errors):"},{"line_number":1889,"context_line":"                parsed_config.pipelines.append("},{"line_number":1890,"context_line":"                    pcontext.pipeline_parser.fromYaml(config_pipeline))"},{"line_number":1891,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_df0b4028","line":1888,"updated":"2019-11-19 18:10:54.000000000","message":"This turns it into a ConfigurationSyntaxError.","commit_id":"202579a3da400cc8e8a4f1c1fbeb9748ede64d33"}]}
