{"push_id":622141054,"size":248,"distinct_size":247,"ref":"refs/heads/launchpad/+upstream","head":"d3949c3ce0dbe8b7098010bb6ddfecd21b951175","before":"e590096a9d3239f88a53c0c1a7f495924852ee88","commits":[{"sha":"93d2ff0ecbe569289900826a9a8dcc465939fc11","author":{"email":"4995ece5d2ee592bd019942436af23bc2b08a65e@canonical.com","name":"Po-Hsu Lin"},"message":"Adding new touchpad checking to see if it's detected as a mouse","distinct":true,"url":"https://api.github.com/repos/checkbox/checkbox/commits/93d2ff0ecbe569289900826a9a8dcc465939fc11"},{"sha":"07a88bdc1ab0af32ae33d3dccde287063d8705ed","author":{"email":"da39a3ee5e6b4b0d3255bfef95601890afd80709","name":"cgregan@canonical.com"},"message":"New versions of gnome screenshot tests for hybrid graphics","distinct":true,"url":"https://api.github.com/repos/checkbox/checkbox/commits/07a88bdc1ab0af32ae33d3dccde287063d8705ed"},{"sha":"55ccaabb762bd6c4cfa05ac46f52f0815daed1ad","author":{"email":"da39a3ee5e6b4b0d3255bfef95601890afd80709","name":"cgregan@canonical.com"},"message":"Updated the new hybrid graphics jobs to use templates","distinct":true,"url":"https://api.github.com/repos/checkbox/checkbox/commits/55ccaabb762bd6c4cfa05ac46f52f0815daed1ad"},{"sha":"9f375c1d4a2dd59f5606866dbe15708b27dc3fa2","author":{"email":"da39a3ee5e6b4b0d3255bfef95601890afd80709","name":"cgregan@canonical.com"},"message":"updated $PLAINBOX_SESSION_SHARE","distinct":true,"url":"https://api.github.com/repos/checkbox/checkbox/commits/9f375c1d4a2dd59f5606866dbe15708b27dc3fa2"},{"sha":"46feaa6eade4d06f5f6195e7bbc3a0e981de2ff5","author":{"email":"da39a3ee5e6b4b0d3255bfef95601890afd80709","name":"cgregan@canonical.com"},"message":"Removing eroneous $ from depends and id lines","distinct":true,"url":"https://api.github.com/repos/checkbox/checkbox/commits/46feaa6eade4d06f5f6195e7bbc3a0e981de2ff5"},{"sha":"7cda867d9af06f615798f0389abeaa8bb21a4381","author":{"email":"b36e835d89a0661b013747732f05a897fe162424@ubuntu.com","name":"Daniel Manrique"},"message":"providers:resource: graphics_card_resource produce job id-compatible product names","distinct":true,"url":"https://api.github.com/repos/checkbox/checkbox/commits/7cda867d9af06f615798f0389abeaa8bb21a4381"},{"sha":"e371fbbce30afb83293b8af45ebd118a6f835f52","author":{"email":"06b40a82600060aa4dd63b8edab70ee2d86817cd@canonical.com","name":"Zygmunt Krynicki"},"message":"plainbox:pod: dedent Field.doc\n\nThis patch makes Field(doc=...) produce a natural, correct docstring\nwhen the doc= argument is a multi-line field with additional indent. In\npractice it allows to use natural indents in souce code and still have\ncorrect neutral indentation in documentation viewers, such as pydoc.\n\nSigned-off-by: Zygmunt Krynicki <zygmunt.krynicki@canonical.com>","distinct":true,"url":"https://api.github.com/repos/checkbox/checkbox/commits/e371fbbce30afb83293b8af45ebd118a6f835f52"},{"sha":"63e61e337bedb9b2db438898a543dea7ab3987f9","author":{"email":"06b40a82600060aa4dd63b8edab70ee2d86817cd@canonical.com","name":"Zygmunt Krynicki"},"message":"plainbox:pod: add Field(notify_fn=...)\n\nThis patch adds support for using customized notification functions for\npod.Fields that use field modification notification facility.\n\nThe primary use case of this feature is to allow to define a custom\nfirst responder. Without it, the automatically generated change\nresponder was used and the POD subclass that contains that field would\nhave to resort to manually connecting additional signal handler in it's\ncustom __init__ method. With this patch this is as simple as passing the\nnotification function as an argument.\n\nSigned-off-by: Zygmunt Krynicki <zygmunt.krynicki@canonical.com>","distinct":true,"url":"https://api.github.com/repos/checkbox/checkbox/commits/63e61e337bedb9b2db438898a543dea7ab3987f9"},{"sha":"85fe967bdfb20c4f1ce925f5685c6b2369ebfdea","author":{"email":"06b40a82600060aa4dd63b8edab70ee2d86817cd@canonical.com","name":"Zygmunt Krynicki"},"message":"plainbox:pod: add unique_elements_assign_filter() aka unique()\n\nThis patch adds a new assign filter that ensures that all elements of\nthe sequence that is being assigned to a field are unique.\n\nThis feature is useful when coupled with tuples (which are immutable)\nand change notification. It allows applications to make modifications to\na sequence of objects by assigning new tuples (so \"editing\" the sequence\nis possible) while retaining the simple check that ensures that no\naccidental edits cause duplicates.\n\nSigned-off-by: Zygmunt Krynicki <zygmunt.krynicki@canonical.com>","distinct":true,"url":"https://api.github.com/repos/checkbox/checkbox/commits/85fe967bdfb20c4f1ce925f5685c6b2369ebfdea"},{"sha":"f8a917926c08598fb44dc99102f9c5b98a46f26a","author":{"email":"06b40a82600060aa4dd63b8edab70ee2d86817cd@canonical.com","name":"Zygmunt Krynicki"},"message":"plainbox: fix select_jobs() on generated non-pattern jobs\n\nThis patch fixes an issue in select_jobs() that was discovered when\nworking with a test plan and templates in a particular arrangement. In\nthat arrangement the test plan selects a job for execution by its full\nidentifier but that job is actually generated and is not known yet.\n\nIn the past it was assumed that this would never be the case, after all\ngenerated jobs are typically selected with a pattern which are handled\ncorrectly. Now when this happens the code simply ignores the affected\npattern.\n\nThis example illustrates the problem:\n\n        unit: test plan\n        id: foo-test-plan\n        include:\n          foo-resource\n          foo\n\n        unit: template\n        template-unit: job\n        template-resource: foo-resource\n        id: {const}\n\n        unit: job\n        id: foo-resource:\n        plugin: resource\n        command: echo \"const: foo\"\n\n(non-essential fields were omitted)\n\nHere, when plainbox begins execution of the foo-test-plan it will try to\nmatch the pattern /^ns::foo$/ to all known jobs but only 'foo-resource'\njob exists so far. Before foo-resource runs and triggers instatiation of\nthe template, the job 'foo' doesn't exist and select_jobs() would crash.\n\nSigned-off-by: Zygmunt Krynicki <zygmunt.krynicki@canonical.com>","distinct":true,"url":"https://api.github.com/repos/checkbox/checkbox/commits/f8a917926c08598fb44dc99102f9c5b98a46f26a"},{"sha":"55cdc92d2464a0583c673b2d58a56b36c5499813","author":{"email":"06b40a82600060aa4dd63b8edab70ee2d86817cd@canonical.com","name":"Zygmunt Krynicki"},"message":"plainbox:secure:providers: remove unused import\n\nSigned-off-by: Zygmunt Krynicki <zygmunt.krynicki@canonical.com>","distinct":true,"url":"https://api.github.com/repos/checkbox/checkbox/commits/55cdc92d2464a0583c673b2d58a56b36c5499813"},{"sha":"e3105cbd5bad45ef71422a51efe1444a72712564","author":{"email":"06b40a82600060aa4dd63b8edab70ee2d86817cd@canonical.com","name":"Zygmunt Krynicki"},"message":"plainbox:unit:testplan: give less incorrect advice for pattern validation\n\nThis patch builds upon the earlier realization that select_jobs() was\nbuggy and refrains from telling the user in strong words that a test\nplan (or whitelist) is totally broken since we cannot determine that\nreliably yet.\n\nFor all the cases where we don't know for sure that a given entry is\ncorrect we emit an advice to say that it might be incorrect. This is\nbetter from UI point of view but also fixes an issue where a correct\ntest plan (such as the one described in the commit message of the fix to\nselect_jobs() earlier) is incorrectly classified as buggy.\n\nSigned-off-by: Zygmunt Krynicki <zygmunt.krynicki@canonical.com>","distinct":true,"url":"https://api.github.com/repos/checkbox/checkbox/commits/e3105cbd5bad45ef71422a51efe1444a72712564"},{"sha":"052e54b29f9059f924cdc6cd52e27d7fbf0aacf9","author":{"email":"06b40a82600060aa4dd63b8edab70ee2d86817cd@canonical.com","name":"Zygmunt Krynicki"},"message":"plainbox:unit:testplan: fix TestPlanUnitSupport\n\nThis patch fixes a simple issue where some of the data in a TestPlanUnit\nis not available (corresponding properties return None) and our parser\nchokes on that data. When a property is None we just refrain from\nparsing it.\n\nSigned-off-by: Zygmunt Krynicki <zygmunt.krynicki@canonical.com>","distinct":true,"url":"https://api.github.com/repos/checkbox/checkbox/commits/052e54b29f9059f924cdc6cd52e27d7fbf0aacf9"},{"sha":"b51ef82beab6e2363660c5e91465305dd63e216b","author":{"email":"06b40a82600060aa4dd63b8edab70ee2d86817cd@canonical.com","name":"Zygmunt Krynicki"},"message":"plainbox:session: add JobState.apply_overrides()\n\nThis patch adds a new method to the JobState class that applies given\noverrides. It works with the same data that is produced by\nTestPlanUnitSupport.\n\nMonitoring logging in this module is useful to observe overrides as they\nare being applied during a testing session.\n\nSigned-off-by: Zygmunt Krynicki <zygmunt.krynicki@canonical.com>","distinct":true,"url":"https://api.github.com/repos/checkbox/checkbox/commits/b51ef82beab6e2363660c5e91465305dd63e216b"},{"sha":"460306c259d01d116c37b1d74d7e335615e14142","author":{"email":"06b40a82600060aa4dd63b8edab70ee2d86817cd@canonical.com","name":"Zygmunt Krynicki"},"message":"plainbox:session: enable doctests for 'state'\n\nSigned-off-by: Zygmunt Krynicki <zygmunt.krynicki@canonical.com>","distinct":true,"url":"https://api.github.com/repos/checkbox/checkbox/commits/460306c259d01d116c37b1d74d7e335615e14142"},{"sha":"7fef0d388719d48f12bcccb7ed5c4c35a8c7e901","author":{"email":"06b40a82600060aa4dd63b8edab70ee2d86817cd@canonical.com","name":"Zygmunt Krynicki"},"message":"plainbox:session: bump copyright\n\nSigned-off-by: Zygmunt Krynicki <zygmunt.krynicki@canonical.com>","distinct":true,"url":"https://api.github.com/repos/checkbox/checkbox/commits/7fef0d388719d48f12bcccb7ed5c4c35a8c7e901"},{"sha":"a27f494253f6809d816267eb9251b110f085e2bd","author":{"email":"06b40a82600060aa4dd63b8edab70ee2d86817cd@canonical.com","name":"Zygmunt Krynicki"},"message":"plainbox:session: add live override updates to SessionDeviceContext\n\nThis patch adds a few things to allow SessionDeviceContext to maintain a\nconsistent set of effective overrides on all of the jobs that it knows\nabout.\n\nThis is implemented using a layered approach:\n - The SessionDeviceContext.set_test_plan_list() method can be called to\n   set an arbitrary list of test plans. This setting determines the\n   effective overrides and immediately applies it to the whole session\n   state.\n - Whenever test plans change we invalidate override_map and perform\n   bulk update (affecting all of the jobs) of effective values in the\n   JobState objects of all the job definitions that a device context\n   knows about.\n - The override_map is computed on-demand as a union of the\n   override_list from all of the test plans used.\n - The new on_job_added signal is fired when a job definition unit is\n   added. It is used to compute and assign effective overrides\n   applicable to the new job definition.\n\nThe API is semi private and will likely change as soon as\nSessionDeviceContext becomes a POD class. Then the set_test_plan_list()\nmethod will be dropped in favour of just assigning a new list to the\ntest_plans field.\n\nSigned-off-by: Zygmunt Krynicki <zygmunt.krynicki@canonical.com>","distinct":true,"url":"https://api.github.com/repos/checkbox/checkbox/commits/a27f494253f6809d816267eb9251b110f085e2bd"},{"sha":"b7bc1e0401e7204f7ecf3b7972f9bc29b3e21a99","author":{"email":"06b40a82600060aa4dd63b8edab70ee2d86817cd@canonical.com","name":"Zygmunt Krynicki"},"message":"plainbox:session: add note about complexity\n\nThis patch adds a small note on how to improve the\n_bulk_override_update() method. The algorithm I was thinking of is based\non combining *all* regular expressions that cause any overrides into one\nlarge regular expression (using the | operator) and associating a set of\noverrides with each accepting state.\n\nUsing a properly crafted algorithm, the regular expression could be\nmatched to each word in parallel (so that all edges are followed) if\nthis is permitted (this is essential for matching wildcards) and\ncombining the union of sets stored in all reached accepting states.\n\nThis would transform the loop from:\n\n    for pattern in patterns:\n       for job in jobs:\n           if job matches pattern:\n               apply overrides associated with pattern\n\nTo something like:\n\n    combined_pattern = combine(patterns)\n    for job in jobs:\n        if job matches combined_pattern:\n            apply overrides associated with patterns that matched\n\nThis is trivial to do (as in, using built-in regular expression engine\nfrom python) in the naive case where at each job can be matched by at\nmost one pattern. In the realistic case where this limitation doesn't\napply a different way of matching patterns must be used (as explained\nabove).\n\nI think that it still provides improvement in complexity as the\ncombined_pattern state machine can be minimized to combine states and\nthat the complexity is proportional to the number of edges. In the\noriginal implementetion this would have been still proportional to the\nnumber of regular expressions and I think this value can be larger.\n\nOne (separate) improvement would be to combine all of the known job\nidentifiers into a suffix tree and run the algorithm on that tree. Then\nwe can reduce that to O(1) given that we have the prefix tree (could be\ncached by a provider if we also support handling generate jobs\nseparately) and ignore the linear complexity in the number of edges in\nthe resulting combined_pattern.\n\nSigned-off-by: Zygmunt Krynicki <zygmunt.krynicki@canonical.com>","distinct":true,"url":"https://api.github.com/repos/checkbox/checkbox/commits/b7bc1e0401e7204f7ecf3b7972f9bc29b3e21a99"},{"sha":"7b4f67b29a61f6b67c078b320eede1a06dc33bd5","author":{"email":"06b40a82600060aa4dd63b8edab70ee2d86817cd@canonical.com","name":"Zygmunt Krynicki"},"message":"plainbox:session: don't use private SessionManager APIs\n\nThis patch changes SesssionManager to refrain from using _private\nmembers in anticipation of changes to that class.\n\nSigned-off-by: Zygmunt Krynicki <zygmunt.krynicki@canonical.com>","distinct":true,"url":"https://api.github.com/repos/checkbox/checkbox/commits/7b4f67b29a61f6b67c078b320eede1a06dc33bd5"},{"sha":"0d9112f6a674b4f5c9905da367dca07b32664fb0","author":{"email":"06b40a82600060aa4dd63b8edab70ee2d86817cd@canonical.com","name":"Zygmunt Krynicki"},"message":"plainbox:session: mock SessionStorage.create() return type\n\nThis patch ensures that SessionStorage.create() returns a mock object\nthat pretends to be of the same class. This is done in anticipation of\nchanges that will check the type of the SessionManager.storage\nattribute.\n\nSigned-off-by: Zygmunt Krynicki <zygmunt.krynicki@canonical.com>","distinct":true,"url":"https://api.github.com/repos/checkbox/checkbox/commits/0d9112f6a674b4f5c9905da367dca07b32664fb0"}]}