)]}'
{"zuul/manager/__init__.py":[{"author":{"_account_id":5263,"name":"Jeremy Stanley","display_name":"fungi","email":"fungi@yuggoth.org","username":"fungi","status":"missing, presumed fed"},"change_message_id":"4c798335a18707a33705d95838e8f8fe35c1831a","unresolved":false,"context_lines":[{"line_number":686,"context_line":"        if not item.job_graph:"},{"line_number":687,"context_line":"            try:"},{"line_number":688,"context_line":"                log.debug(\"Freezing job graph for %s\" % (item,))"},{"line_number":689,"context_line":"                item.freezeJobGraph(skip_file_matcher\u003dany(filter("},{"line_number":690,"context_line":"                    lambda trigger: trigger.name \u003d\u003d \"timer\","},{"line_number":691,"context_line":"                    self.pipeline.triggers)))"},{"line_number":692,"context_line":"            except Exception as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfb3d3c7_9e3ddbc5","line":689,"updated":"2019-05-25 14:43:16.000000000","message":"Gerrit ref-updated events (like are used for merges to branches or pushes of tags) also lack a files list, if memory serves, so jobs with files matchers won\u0027t run for those triggers either.","commit_id":"16c67b8286c3901cb15d7c017b56b9fca9a143b7"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"4a5275b58546841b3223c2b4ee3fa1adda36043e","unresolved":false,"context_lines":[{"line_number":686,"context_line":"        if not item.job_graph:"},{"line_number":687,"context_line":"            try:"},{"line_number":688,"context_line":"                log.debug(\"Freezing job graph for %s\" % (item,))"},{"line_number":689,"context_line":"                item.freezeJobGraph(skip_file_matcher\u003dany(filter("},{"line_number":690,"context_line":"                    lambda trigger: trigger.name \u003d\u003d \"timer\","},{"line_number":691,"context_line":"                    self.pipeline.triggers)))"},{"line_number":692,"context_line":"            except Exception as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfb3d3c7_2604167b","line":689,"range":{"start_line":689,"start_character":54,"end_line":689,"end_character":64},"updated":"2019-05-23 02:31:31.000000000","message":"This should be `all(map` if we want that behavior to only happens for pipelines that only has timer trigger.","commit_id":"16c67b8286c3901cb15d7c017b56b9fca9a143b7"},{"author":{"_account_id":4162,"name":"Paul Belanger","email":"pabelanger@redhat.com","username":"pabelanger"},"change_message_id":"d92b0a56ffcc5fef1d3dc616682130301cd86c22","unresolved":false,"context_lines":[{"line_number":686,"context_line":"        if not item.job_graph:"},{"line_number":687,"context_line":"            try:"},{"line_number":688,"context_line":"                log.debug(\"Freezing job graph for %s\" % (item,))"},{"line_number":689,"context_line":"                item.freezeJobGraph(skip_file_matcher\u003dany(filter("},{"line_number":690,"context_line":"                    lambda trigger: trigger.name \u003d\u003d \"timer\","},{"line_number":691,"context_line":"                    self.pipeline.triggers)))"},{"line_number":692,"context_line":"            except Exception as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfb3d3c7_73570028","line":689,"range":{"start_line":689,"start_character":54,"end_line":689,"end_character":64},"in_reply_to":"bfb3d3c7_2604167b","updated":"2019-05-25 14:18:20.000000000","message":"for now, timer triggers is the use case I\u0027m dealing with. Which other pipelines do you have in mind?","commit_id":"16c67b8286c3901cb15d7c017b56b9fca9a143b7"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"a0d9cee20321245629d0becfba70aaf4fc0b088c","unresolved":false,"context_lines":[{"line_number":686,"context_line":"        if not item.job_graph:"},{"line_number":687,"context_line":"            try:"},{"line_number":688,"context_line":"                log.debug(\"Freezing job graph for %s\" % (item,))"},{"line_number":689,"context_line":"                item.freezeJobGraph(skip_file_matcher\u003dany(filter("},{"line_number":690,"context_line":"                    lambda trigger: trigger.name \u003d\u003d \"timer\","},{"line_number":691,"context_line":"                    self.pipeline.triggers)))"},{"line_number":692,"context_line":"            except Exception as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfb3d3c7_791601f4","line":689,"in_reply_to":"bfb3d3c7_5efbe345","updated":"2019-05-26 07:19:55.000000000","message":"Tristan is right, we shouldn\u0027t base this decision on the pipeline configuration but rather on the event.\n\nOne possibility could be to judge here based on the event type. But to me this feels wrong. The skip_file_matcher switch in freezeJobGraph was only introduced by the zuul runner changes so one could freeze a job graph independently. This was done before the event was part of the item but now with this additional use case it feels like a hack.\n\nI think it makes sense to forward the event (it is attached to the item) in \u0027Layout._createJobGraph\u0027 to \u0027Job.changeMatchesFiles\u0027 and do the filtering there based on the event or even push the event information to the matcher itself (which feels like the right place to me).","commit_id":"16c67b8286c3901cb15d7c017b56b9fca9a143b7"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"7daad3ca0b9a1d13d96ccdb4098c1d3a15c4f5d7","unresolved":false,"context_lines":[{"line_number":686,"context_line":"        if not item.job_graph:"},{"line_number":687,"context_line":"            try:"},{"line_number":688,"context_line":"                log.debug(\"Freezing job graph for %s\" % (item,))"},{"line_number":689,"context_line":"                item.freezeJobGraph(skip_file_matcher\u003dany(filter("},{"line_number":690,"context_line":"                    lambda trigger: trigger.name \u003d\u003d \"timer\","},{"line_number":691,"context_line":"                    self.pipeline.triggers)))"},{"line_number":692,"context_line":"            except Exception as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfb3d3c7_5efbe345","line":689,"in_reply_to":"bfb3d3c7_9e3ddbc5","updated":"2019-05-25 23:45:22.000000000","message":"When a pipeline has both a gerrit and timer trigger, then any(filter evaluates to True. Though now that the trigger event is attached to queue items, perhaps TriggerEvent we could have a \"skipFileMatcher()\" procedure that could be used here.","commit_id":"16c67b8286c3901cb15d7c017b56b9fca9a143b7"}],"zuul/model.py":[{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"d403fe9796b39958f5883e9ae304a592e5e43575","unresolved":false,"context_lines":[{"line_number":3084,"context_line":"    def isChangeAbandoned(self):"},{"line_number":3085,"context_line":"        return False"},{"line_number":3086,"context_line":""},{"line_number":3087,"context_line":"    def isFileMatcher(self):"},{"line_number":3088,"context_line":"        return True"},{"line_number":3089,"context_line":""},{"line_number":3090,"context_line":"    def _repr(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_d1dca1e5","line":3087,"range":{"start_line":3087,"start_character":8,"end_line":3087,"end_character":21},"updated":"2019-05-27 04:34:18.000000000","message":"I struggled about the naming here as events are no matchers. Instead we probably want to name it needsFileMatching or something similar.","commit_id":"1a14acc6bade3115519fc6ee899d90e0bb1d8ed3"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"edad801f626172107c8ee1a4b495067992a974d8","unresolved":false,"context_lines":[{"line_number":3084,"context_line":"    def isChangeAbandoned(self):"},{"line_number":3085,"context_line":"        return False"},{"line_number":3086,"context_line":""},{"line_number":3087,"context_line":"    def isFileMatcher(self):"},{"line_number":3088,"context_line":"        return True"},{"line_number":3089,"context_line":""},{"line_number":3090,"context_line":"    def _repr(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_146ea7c8","line":3087,"range":{"start_line":3087,"start_character":8,"end_line":3087,"end_character":21},"in_reply_to":"bfb3d3c7_d1dca1e5","updated":"2019-05-27 05:20:02.000000000","message":"Done","commit_id":"1a14acc6bade3115519fc6ee899d90e0bb1d8ed3"}]}
