)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6547,"name":"Andreas Jaeger","email":"jaegerandi@gmail.com","username":"jaegerandi"},"change_message_id":"ae7bed53215d623d7629ad0781c78db8eb3aa76f","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    precedence: low"},{"line_number":29,"context_line":"    trigger:"},{"line_number":30,"context_line":"      url:"},{"line_number":31,"context_line":"        - delay: \u0027*/10 * * * *\u0027"},{"line_number":32,"context_line":"          url: https://domain.com/artifacts/foo/2.x/foo.tgz"},{"line_number":33,"context_line":"          attribute: ETag"},{"line_number":34,"context_line":"    success:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9fdfeff1_5b68fd85","line":31,"updated":"2019-02-11 10:58:58.000000000","message":"What is the expectations here? Check every 10 minutes?\n\nOr trigger 10 minutes after something happened? Reading delay this would be my expectation...\n\nUsing a delay with the complete \"crontab\" entry is confusing, I suggest to rework this part of the interface.","commit_id":"1473e96190abeea2ce3aefb68fd73e9f0f5491ca"}],"doc/source/reference/drivers/url.rst":[{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"8a011f1fd6f3890a72594d4255a4e16782bd84a8","unresolved":false,"context_lines":[{"line_number":20,"context_line":"To evaluate if a resource state has changed, the driver keeps a cache"},{"line_number":21,"context_line":"of the configured header\u0027s field value. When the cache is empty then the"},{"line_number":22,"context_line":"cache is filled with the value but no event is enqueued. If the field value"},{"line_number":23,"context_line":"differ from the cached value then event is enqueued in the pipeline."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":".. attr:: pipeline.trigger.url"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"3fa7e38b_60a31dff","line":23,"updated":"2020-02-18 13:33:02.000000000","message":"\"differs\"\n\"then the event\"","commit_id":"bee62d611e68d52c4444c1ed89824364c8184bd4"},{"author":{"_account_id":6889,"name":"Fabien Boucher","email":"fboucher@redhat.com","username":"fabien-boucher"},"change_message_id":"e09a0f9589170f95c0bcb0c86188c095d4fabbcb","unresolved":false,"context_lines":[{"line_number":20,"context_line":"To evaluate if a resource state has changed, the driver keeps a cache"},{"line_number":21,"context_line":"of the configured header\u0027s field value. When the cache is empty then the"},{"line_number":22,"context_line":"cache is filled with the value but no event is enqueued. If the field value"},{"line_number":23,"context_line":"differ from the cached value then event is enqueued in the pipeline."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":".. attr:: pipeline.trigger.url"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"3fa7e38b_c8c9c8ae","line":23,"in_reply_to":"3fa7e38b_60a31dff","updated":"2020-02-19 09:32:01.000000000","message":"Done","commit_id":"bee62d611e68d52c4444c1ed89824364c8184bd4"},{"author":{"_account_id":30637,"name":"Jan Kubovy","email":"jan.kubovy@bmw.de","username":"kubovy"},"change_message_id":"01d4ac051bc4bb24dae4a8d1273657b7fad90505","unresolved":false,"context_lines":[{"line_number":5,"context_line":""},{"line_number":6,"context_line":"The driver supports triggers only. It is used for configuring"},{"line_number":7,"context_line":"pipelines so that jobs run when a resource located at an URL"},{"line_number":8,"context_line":"has changed. No connection configuration is required."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Trigger Configuration"},{"line_number":11,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":23,"id":"1f493fa4_45dc9ee3","line":8,"range":{"start_line":8,"start_character":13,"end_line":8,"end_character":53},"updated":"2020-04-27 09:09:40.000000000","message":"I think that maybe a proxy configuration may be useful including credentials. Just a suggestion for a future enhancement.","commit_id":"e3861b01569efb7ea8c8493146a52bdbc1791ba4"}],"tests/unit/test_url_driver.py":[{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"9528b94be441bbb74d86a8484155baf6b4bccd44","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        # Let some time to the driver to read the initial"},{"line_number":82,"context_line":"        # state of the resource"},{"line_number":83,"context_line":"        time.sleep(3)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        # Ensure no jobs have run"},{"line_number":86,"context_line":"        self.assertEqual(len(self.history), 0)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_2f2152a0","line":83,"updated":"2019-06-21 08:02:41.000000000","message":"Can you think of a way to make this sleep deterministic? Those sleeps often tend to create test races which destabilize the gate. We typically use iterate_timeout combined with some status check in those cases.","commit_id":"9532ac3f08cb06a51f074332fee10239b85a948e"},{"author":{"_account_id":6889,"name":"Fabien Boucher","email":"fboucher@redhat.com","username":"fabien-boucher"},"change_message_id":"1559b431ad5c21b821054a3d7c98f030b59e32ce","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        # Let some time to the driver to read the initial"},{"line_number":82,"context_line":"        # state of the resource"},{"line_number":83,"context_line":"        time.sleep(3)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        # Ensure no jobs have run"},{"line_number":86,"context_line":"        self.assertEqual(len(self.history), 0)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_753b7dc7","line":83,"in_reply_to":"9fb8cfa7_2f2152a0","updated":"2019-06-24 13:48:16.000000000","message":"Done","commit_id":"9532ac3f08cb06a51f074332fee10239b85a948e"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"9528b94be441bbb74d86a8484155baf6b4bccd44","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        # Let time for the driver to detect the change"},{"line_number":93,"context_line":"        # and send the event in the scheduler"},{"line_number":94,"context_line":"        time.sleep(3)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        # Make sure the related job has been triggered"},{"line_number":97,"context_line":"        # but only 1 job has run"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_4f24c6af","line":94,"updated":"2019-06-21 08:02:41.000000000","message":"Same","commit_id":"9532ac3f08cb06a51f074332fee10239b85a948e"},{"author":{"_account_id":6889,"name":"Fabien Boucher","email":"fboucher@redhat.com","username":"fabien-boucher"},"change_message_id":"1559b431ad5c21b821054a3d7c98f030b59e32ce","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        # Let time for the driver to detect the change"},{"line_number":93,"context_line":"        # and send the event in the scheduler"},{"line_number":94,"context_line":"        time.sleep(3)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        # Make sure the related job has been triggered"},{"line_number":97,"context_line":"        # but only 1 job has run"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_154a4154","line":94,"in_reply_to":"9fb8cfa7_4f24c6af","updated":"2019-06-24 13:48:16.000000000","message":"Done","commit_id":"9532ac3f08cb06a51f074332fee10239b85a948e"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"8a9f6277e413e8217a908cebfe8ff9ca43a58783","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        trigger \u003d pipeline.triggers[0]"},{"line_number":69,"context_line":"        count_ref \u003d trigger.driver.trigger_count"},{"line_number":70,"context_line":"        sleep_count \u003d 0"},{"line_number":71,"context_line":"        while True:"},{"line_number":72,"context_line":"            if sleep_count \u003e\u003d 5:"},{"line_number":73,"context_line":"                break"},{"line_number":74,"context_line":"            if trigger.driver.trigger_count \u003e count_ref:"}],"source_content_type":"text/x-python","patch_set":24,"id":"9f560f44_8022f352","line":71,"updated":"2020-09-23 12:43:41.000000000","message":"We typically use iterate_timeout for such kind of waits.","commit_id":"b25ceccf2f0e2b454d0ca2f7af688f5fe974b068"}],"zuul/driver/url/__init__.py":[{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"9528b94be441bbb74d86a8484155baf6b4bccd44","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                jobs.append(job)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def _onTrigger("},{"line_number":54,"context_line":"            self, tenant, pipeline_name, timespec, url, field):"},{"line_number":55,"context_line":"        for project_name, pcs in tenant.layout.project_configs.items():"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"            pcst \u003d tenant.layout.getAllProjectConfigs(project_name)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_ef3a5acb","line":54,"updated":"2019-06-21 08:02:41.000000000","message":"The trigger is per pipeline so shouldn\u0027t we make the http query before the loop and within the loop just emit the trigger events?","commit_id":"9532ac3f08cb06a51f074332fee10239b85a948e"},{"author":{"_account_id":6889,"name":"Fabien Boucher","email":"fboucher@redhat.com","username":"fabien-boucher"},"change_message_id":"1559b431ad5c21b821054a3d7c98f030b59e32ce","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                jobs.append(job)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def _onTrigger("},{"line_number":54,"context_line":"            self, tenant, pipeline_name, timespec, url, field):"},{"line_number":55,"context_line":"        for project_name, pcs in tenant.layout.project_configs.items():"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"            pcst \u003d tenant.layout.getAllProjectConfigs(project_name)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_35450544","line":54,"in_reply_to":"9fb8cfa7_ef3a5acb","updated":"2019-06-24 13:48:16.000000000","message":"Done","commit_id":"9532ac3f08cb06a51f074332fee10239b85a948e"}],"zuul/lib/connections.py":[{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"8a011f1fd6f3890a72594d4255a4e16782bd84a8","unresolved":false,"context_lines":[{"line_number":27,"context_line":"import zuul.driver.bubblewrap"},{"line_number":28,"context_line":"import zuul.driver.nullwrap"},{"line_number":29,"context_line":"import zuul.driver.mqtt"},{"line_number":30,"context_line":"import zuul.driver.url"},{"line_number":31,"context_line":"import zuul.driver.pagure"},{"line_number":32,"context_line":"from zuul.connection import BaseConnection"},{"line_number":33,"context_line":"from zuul.driver import SourceInterface"}],"source_content_type":"text/x-python","patch_set":19,"id":"3fa7e38b_a0c835a7","line":30,"range":{"start_line":30,"start_character":0,"end_line":30,"end_character":22},"updated":"2020-02-18 13:33:02.000000000","message":"NIT \"url\" as a name might be too generic, how about \"urlwatch\" or something else?","commit_id":"bee62d611e68d52c4444c1ed89824364c8184bd4"}]}
