)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"f6bf098391f3e588c63224217eac60b78de8da5c","unresolved":true,"context_lines":[{"line_number":11,"context_line":"very useful branch specifiers with likely many instances in the wild."},{"line_number":12,"context_line":"We need to provide a migration path for these."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This updates the configuration options which currently accept PCRE"},{"line_number":15,"context_line":"regular expressions to additionally accept a nested dictionary which"},{"line_number":16,"context_line":"allows specifying that the regex should be negated.  In the future,"},{"line_number":17,"context_line":"other options (global, multiline, etc) could be added."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"e4659d8b_59bb08b1","line":14,"range":{"start_line":14,"start_character":62,"end_line":14,"end_character":66},"updated":"2023-08-22 13:44:55.000000000","message":"nit: AFAIK Python\u0027s re module is not using PCRE","commit_id":"126824efe96a47570601cf90834ed8dc78051180"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"f0e23f440392b20ad08b098ddd9474ba81f979a4","unresolved":false,"context_lines":[{"line_number":11,"context_line":"very useful branch specifiers with likely many instances in the wild."},{"line_number":12,"context_line":"We need to provide a migration path for these."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This updates the configuration options which currently accept PCRE"},{"line_number":15,"context_line":"regular expressions to additionally accept a nested dictionary which"},{"line_number":16,"context_line":"allows specifying that the regex should be negated.  In the future,"},{"line_number":17,"context_line":"other options (global, multiline, etc) could be added."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"bbe441db_2de33a1a","line":14,"in_reply_to":"e4659d8b_59bb08b1","updated":"2023-08-22 14:02:33.000000000","message":"Correct, I used that as a shortcut in the code (because it is using perl compatible regular expressions, but not actually using the PCRE library) so that this is all easier to grep.  I did make sure that \"PCRE\" didn\u0027t make it to anything user-visible.  You\u0027re right that the commit message is technically wrong though.","commit_id":"126824efe96a47570601cf90834ed8dc78051180"}],"doc/source/project-config.rst":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"9c253133e1bfeb9105933fe8bb43f216265c76e5","unresolved":true,"context_lines":[{"line_number":97,"context_line":"   - job:"},{"line_number":98,"context_line":"       branches:"},{"line_number":99,"context_line":"         - regex: devel"},{"line_number":100,"context_line":"           negate: false"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":".. attr:: \u003cregular expression\u003e"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"7670965b_eccb2814","line":100,"updated":"2023-08-28 20:26:41.000000000","message":"For simplicitly should we only accept one for of the new regex config? Basically either provide it as a list of dicts or a simply a dict and not support the other form? I think it would have to be list of dicts as you may want multiple matches.","commit_id":"07d9dc811c08156f6d2feb4b4d20d718fdaabf2b"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"0aa7e7e4e6d7d7bdc616b2179058631413db12fa","unresolved":false,"context_lines":[{"line_number":97,"context_line":"   - job:"},{"line_number":98,"context_line":"       branches:"},{"line_number":99,"context_line":"         - regex: devel"},{"line_number":100,"context_line":"           negate: false"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":".. attr:: \u003cregular expression\u003e"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"314596f7_241edd2c","line":100,"in_reply_to":"7670965b_eccb2814","updated":"2023-08-28 21:49:12.000000000","message":"I think we should keep the dict-or-list-of-dicts approach here.  We use that in a lot of places, and it\u0027s intentional so that the easy case of \"branches: master\" is nice and brief, and the complex case of a list of dicts is possible.  I think the main thing is that ability is an intentional general design choice for the configuration language, and not an accident that we need to deprecate and clean up.","commit_id":"07d9dc811c08156f6d2feb4b4d20d718fdaabf2b"}],"tests/fixtures/layouts/negate-post.yaml":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"9c253133e1bfeb9105933fe8bb43f216265c76e5","unresolved":true,"context_lines":[{"line_number":38,"context_line":"    trigger:"},{"line_number":39,"context_line":"      gerrit:"},{"line_number":40,"context_line":"        - event: ref-updated"},{"line_number":41,"context_line":"          ref: {\u0027regex\u0027: \u0027^refs/.*$\u0027, \u0027negate\u0027: true}"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"- pipeline:"},{"line_number":44,"context_line":"    name: tag"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"34f0129e_57a458b3","line":41,"range":{"start_line":41,"start_character":27,"end_line":41,"end_character":34},"updated":"2023-08-28 20:26:41.000000000","message":"I know this is just for testing but won\u0027t refs/.* negated prevent matching any ref-updated event? Might not serve as the best example as a result.","commit_id":"07d9dc811c08156f6d2feb4b4d20d718fdaabf2b"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"0aa7e7e4e6d7d7bdc616b2179058631413db12fa","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    trigger:"},{"line_number":39,"context_line":"      gerrit:"},{"line_number":40,"context_line":"        - event: ref-updated"},{"line_number":41,"context_line":"          ref: {\u0027regex\u0027: \u0027^refs/.*$\u0027, \u0027negate\u0027: true}"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"- pipeline:"},{"line_number":44,"context_line":"    name: tag"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"d1cee9d0_dfd74377","line":41,"in_reply_to":"34f0129e_57a458b3","updated":"2023-08-28 21:49:12.000000000","message":"Actually this is correct for post! It\u0027s a gerrit quirk: if it\u0027s a ref-update of refs/branches/foo, gerrit doesn\u0027t give us refs/branches, we just get foo.  So:\n* ref-updated with no refs/ prefix means a change merged to a branch\n* ref-updated with refs/... means anything else (tag, refs/meta, etc)","commit_id":"07d9dc811c08156f6d2feb4b4d20d718fdaabf2b"}],"zuul/change_matcher.py":[{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"f6bf098391f3e588c63224217eac60b78de8da5c","unresolved":true,"context_lines":[{"line_number":94,"context_line":"        return False"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def serialize(self):"},{"line_number":97,"context_line":"        print(\"JEB\", COMPONENT_REGISTRY.model_api)"},{"line_number":98,"context_line":"        if (COMPONENT_REGISTRY.model_api \u003c 16):"},{"line_number":99,"context_line":"            return {"},{"line_number":100,"context_line":"                \"implied\": self.exactmatch,"}],"source_content_type":"text/x-python","patch_set":4,"id":"6a4dd201_44d995f0","line":97,"updated":"2023-08-22 13:44:55.000000000","message":"debug leftover?","commit_id":"126824efe96a47570601cf90834ed8dc78051180"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"f0e23f440392b20ad08b098ddd9474ba81f979a4","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        return False"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def serialize(self):"},{"line_number":97,"context_line":"        print(\"JEB\", COMPONENT_REGISTRY.model_api)"},{"line_number":98,"context_line":"        if (COMPONENT_REGISTRY.model_api \u003c 16):"},{"line_number":99,"context_line":"            return {"},{"line_number":100,"context_line":"                \"implied\": self.exactmatch,"}],"source_content_type":"text/x-python","patch_set":4,"id":"4cbf83a2_8fd0e121","line":97,"in_reply_to":"6a4dd201_44d995f0","updated":"2023-08-22 14:02:33.000000000","message":"Yep fixed.","commit_id":"126824efe96a47570601cf90834ed8dc78051180"}],"zuul/driver/gerrit/gerritmodel.py":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"9c253133e1bfeb9105933fe8bb43f216265c76e5","unresolved":true,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from zuul.model import EventFilter, RefFilter"},{"line_number":22,"context_line":"from zuul.model import Change, TriggerEvent, FalseWithReason"},{"line_number":23,"context_line":"from zuul.driver.util import time_to_seconds, to_list, make_regex"},{"line_number":24,"context_line":"from zuul import exceptions"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"EMPTY_GIT_REF \u003d \u00270\u0027 * 40  # git sha of all zeros, used during creates/deletes"}],"source_content_type":"text/x-python","patch_set":5,"id":"aeb56870_c615944f","line":23,"range":{"start_line":23,"start_character":55,"end_line":23,"end_character":65},"updated":"2023-08-28 20:26:41.000000000","message":"make_regex is imported from zuul.driver.util in a few places despite it actually being defined in configloader. Shouldn\u0027t we import it from configloader to be a little less fragile?","commit_id":"07d9dc811c08156f6d2feb4b4d20d718fdaabf2b"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"0aa7e7e4e6d7d7bdc616b2179058631413db12fa","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from zuul.model import EventFilter, RefFilter"},{"line_number":22,"context_line":"from zuul.model import Change, TriggerEvent, FalseWithReason"},{"line_number":23,"context_line":"from zuul.driver.util import time_to_seconds, to_list, make_regex"},{"line_number":24,"context_line":"from zuul import exceptions"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"EMPTY_GIT_REF \u003d \u00270\u0027 * 40  # git sha of all zeros, used during creates/deletes"}],"source_content_type":"text/x-python","patch_set":5,"id":"56920dc1_7603ff65","line":23,"in_reply_to":"aeb56870_c615944f","updated":"2023-08-28 21:49:12.000000000","message":"to_list in driver.util is a copy of as_list in configloader.  So apparently at some point we decided that we\u0027d put some configloader helper methods in driver.util.  That doesn\u0027t sound like a bad idea, so I\u0027m trying to keep that going here, but without copying the code as happened with to_list.  But maybe we should unify as_list/to_list and clean that up.  Either way, there\u0027s a lot of stuff in configloader that isn\u0027t really meant to be used outside of it, and a few things that are, so dileneating that in some way seems good.\n\nMaybe let\u0027s keep this for now since it provides that signal, and we can look at other re-org options later.","commit_id":"07d9dc811c08156f6d2feb4b4d20d718fdaabf2b"}],"zuul/driver/gerrit/gerrittrigger.py":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"9c253133e1bfeb9105933fe8bb43f216265c76e5","unresolved":true,"context_lines":[{"line_number":18,"context_line":"from zuul.trigger import BaseTrigger"},{"line_number":19,"context_line":"from zuul.driver.gerrit.gerritmodel import GerritEventFilter"},{"line_number":20,"context_line":"from zuul.driver.gerrit import gerritsource"},{"line_number":21,"context_line":"from zuul.driver.util import scalar_or_list, to_list, make_regex, ZUUL_REGEX"},{"line_number":22,"context_line":"from zuul.configloader import DeprecationWarning"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"66578c5c_6f776823","line":21,"range":{"start_line":21,"start_character":66,"end_line":21,"end_character":76},"updated":"2023-08-28 20:26:41.000000000","message":"Similar to make_regex this is actually defined in configloader. Should we import it from there?","commit_id":"07d9dc811c08156f6d2feb4b4d20d718fdaabf2b"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"6e4c2a84b5e3d3143a9475eb55eb512d16d6c1ff","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from zuul.trigger import BaseTrigger"},{"line_number":19,"context_line":"from zuul.driver.gerrit.gerritmodel import GerritEventFilter"},{"line_number":20,"context_line":"from zuul.driver.gerrit import gerritsource"},{"line_number":21,"context_line":"from zuul.driver.util import scalar_or_list, to_list, make_regex, ZUUL_REGEX"},{"line_number":22,"context_line":"from zuul.configloader import DeprecationWarning"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"a97fde6b_25725fe8","line":21,"range":{"start_line":21,"start_character":66,"end_line":21,"end_character":76},"in_reply_to":"66578c5c_6f776823","updated":"2023-08-28 22:39:13.000000000","message":"Done","commit_id":"07d9dc811c08156f6d2feb4b4d20d718fdaabf2b"}]}
