[Patchew-devel] [PATCH 3/4] testing: Don't reset all tests upon git result update

Paolo Bonzini pbonzini at redhat.com
Thu Aug 2 08:24:45 UTC 2018


On 02/08/2018 10:14, Fam Zheng wrote:
> Git results move to "PENDING" to get applier redo the apply if replies
> have added "reviewed-by" tags etc. The testing mod's event handler
> on_result_update cannot tell if this is only adding tags, in which case
> re-test is not necessary and may result in duplicated error reports.
> 
> Instead, subscribe to TagsUpdate event and handle "Based-on:" tag
> specifically.

What about keeping ResultUpdate, but checking the base from the git
result against the base from the testing result?  Well, there is no base
from the testing result but there should be one...

That's a bigger change, as it requires re-deploying all testers, but it
seems cleaner and more logical.  I'm okay with applying this patch
first, and then redoing patch 3, but please create an issue for it.

Paolo

> Signed-off-by: Fam Zheng <famz at redhat.com>
> ---
>  mods/testing.py | 18 ++++++++++++++----
>  1 file changed, 14 insertions(+), 4 deletions(-)
> 
> diff --git a/mods/testing.py b/mods/testing.py
> index ccdd336..164f97d 100644
> --- a/mods/testing.py
> +++ b/mods/testing.py
> @@ -107,13 +107,23 @@ class TestingModule(PatchewModule):
>                        is_timeout="whether the test has timeout")
>          register_handler("SetProperty", self.on_set_property)
>          register_handler("ResultUpdate", self.on_result_update)
> +        register_handler("TagsUpdate", self.on_tags_update)
> +
> +    def on_tags_update(self, evt, series, old, new):
> +        def find_tag(tags, t):
> +            for i in tags:
> +                if i.lower().startswith(t.lower()):
> +                    return i
> +        old_base = find_tag(old, "Based-on:")
> +        new_base = find_tag(new, "Based-on:")
> +        if old_base != new_base:
> +            self.clear_and_start_testing(series)
>  
>      def on_set_property(self, evt, obj, name, value, old_value):
> -        if ((isinstance(obj, Message) and obj.is_series_head) \
> -            or isinstance(obj, Project)) \
> -            and name in ("git.tag", "git.repo") \
> +        if name in ("git.tag", "git.repo") \
>              and old_value is None \
>              and obj.get_property("git.tag") and obj.get_property("git.repo"):
> +                assert isinstance(obj, Project)
>                  self.clear_and_start_testing(obj)
>          elif isinstance(obj, Project) and name == "git.head" \
>              and old_value != value:
> @@ -130,7 +140,7 @@ class TestingModule(PatchewModule):
>              and old_status != Result.SUCCESS \
>              and result.status == result.SUCCESS \
>              and result.data.get("tag") and result.data.get("repo"):
> -                self.clear_and_start_testing(obj)
> +                self.recalc_pending_tests(obj)
>  
>      def get_testing_results(self, obj, *args, **kwargs):
>          return obj.results.filter(name__startswith='testing.', *args, **kwargs)
> 




More information about the Patchew-devel mailing list