diff --git a/runbot/models/build_error.py b/runbot/models/build_error.py
index 16f22ed9..ad89c2b0 100644
--- a/runbot/models/build_error.py
+++ b/runbot/models/build_error.py
@@ -516,6 +516,21 @@ class BuildErrorContent(models.Model):
for errors_content_to_merge in to_merge:
errors_content_to_merge._merge()
+ def action_find_duplicates(self):
+ rg = [r['id_arr'] for r in self.env['runbot.build.error.content'].read_group([], ['id_count:count(id)', 'id_arr:array_agg(id)', 'fingerprint'], ['fingerprint']) if r['id_count'] >1]
+ duplicate_ids = []
+ for ids_lists in rg:
+ duplicate_ids += ids_lists
+
+ return {
+ "type": "ir.actions.act_window",
+ "res_model": "runbot.build.error.content",
+ "domain": [('id', 'in', duplicate_ids)],
+ "context": {"create": False, 'group_by': ['fingerprint']},
+ "name": "Duplicate Error contents",
+ 'view_mode': 'tree,form'
+ }
+
class BuildErrorTag(models.Model):
diff --git a/runbot/views/build_error_views.xml b/runbot/views/build_error_views.xml
index 39f0885a..d98ca78f 100644
--- a/runbot/views/build_error_views.xml
+++ b/runbot/views/build_error_views.xml
@@ -241,6 +241,7 @@
create="false"
>
@@ -393,7 +394,15 @@
tree,form
-
+
+ Find Duplicates
+
+ ir.actions.server
+ code
+
+ action = model._find_duplicates()
+
+