jenkins-bot has submitted this change and it was merged.
Change subject: (bug 62126) Retry creating a new page at wikidata.
......................................................................
(bug 62126) Retry creating a new page at wikidata.
Bug 46535 reports that bot fails while creating a page with
error "Could not create a new page. It already exists." But
the page does not exist.
This is a temporary patch to solve this problem above until
46535 has been fixed. It tries again until the page has been
created or maxretries exceeded.
There is a remaining problem with this bug/patch. There is no way
to check whether the page does really exist or the API gives
a wrong message.
Change-Id: I30d596d814caf3bf812b38b975019aef5213c787
---
M pywikibot/data/api.py
1 file changed, 5 insertions(+), 0 deletions(-)
Approvals:
Merlijn van Deen: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/data/api.py b/pywikibot/data/api.py
index 264dc13..f129665 100644
--- a/pywikibot/data/api.py
+++ b/pywikibot/data/api.py
@@ -392,6 +392,11 @@
if code.startswith(u'internal_api_error_'):
self.wait()
continue
+ # bugs 46535, 62126
+ # maybe removed when it 46535 is solved
+ if code == "failed-save" and action == 'wbeditentity':
+ self.wait()
+ continue
# raise error
try:
pywikibot.log(u"API Error: query=\n%s"
--
To view, visit https://gerrit.wikimedia.org/r/116280
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I30d596d814caf3bf812b38b975019aef5213c787
Gerrit-PatchSet: 4
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: Ladsgroup <ladsgroup(a)gmail.com>
Gerrit-Reviewer: Legoktm <legoktm.wikipedia(a)gmail.com>
Gerrit-Reviewer: Merlijn van Deen <valhallasw(a)arctus.nl>
Gerrit-Reviewer: Multichill <maarten(a)mdammers.nl>
Gerrit-Reviewer: Russell Blau <russblau(a)imapmail.org>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot <>
jenkins-bot has submitted this change and it was merged.
Change subject: [bug 60564] Re-enable pageName for summary message (update from core)
......................................................................
[bug 60564] Re-enable pageName for summary message (update from core)
- pageName is extracted from command option handled by pagegenerators
if availlable. Otherwise we ask for the message.
- -images option is deprecated. -imagelinks from pagegenerators is
used. We just append the right option command to the option list
- deprecated setAction() is removed
- docu replacement from pagegenerators
Change-Id: I203c224b8c802e5752b796a7aaa305c5b400419e
---
M delete.py
1 file changed, 59 insertions(+), 55 deletions(-)
Approvals:
Merlijn van Deen: Looks good to me, approved
jenkins-bot: Verified
diff --git a/delete.py b/delete.py
index 029b3f0..8d60c33 100644
--- a/delete.py
+++ b/delete.py
@@ -3,20 +3,20 @@
This script can be used to delete and undelete pages en masse.
Of course, you will need an admin account on the relevant wiki.
-Syntax: python delete.py [-category categoryName]
+These command line parameters can be used to specify which pages to work on:
-Command line options:
+¶ms;
--page: Delete specified page
--cat: Delete all pages in the given category.
--links: Delete all pages linked from a given page.
--file: Delete all pages listed in a text file.
--ref: Delete all pages referring from a given page.
--images: Delete all images used on a given page.
--always: Don't prompt to delete pages, just do it.
--summary: Supply a custom edit summary.
--undelete: Actually undelete pages instead of deleting.
- Obviously makes sense only with -page and -file.
+Furthermore, the following command line parameters are supported:
+
+-always: Don't prompt to delete pages, just do it.
+
+-summary: Supply a custom edit summary.
+
+-undelete: Actually undelete pages instead of deleting.
+ Obviously makes sense only with -page and -file.
+
+Usage: python delete.py [-category categoryName]
Examples:
@@ -25,7 +25,7 @@
python delete.py -cat:"To delete" -always
"""
#
-# (C) Pywikibot team, 2006-2013
+# (c) Pywikibot team, 2006-2014
#
# Distributed under the terms of the MIT license.
#
@@ -36,36 +36,45 @@
from pywikibot import i18n
import pagegenerators
+# This is required for the text that is shown when you run this script
+# with the parameter -help.
+docuReplacements = {
+ '¶ms;': pagegenerators.parameterHelp,
+}
+
class DeletionRobot:
""" This robot allows deletion of pages en masse. """
def __init__(self, generator, summary, always=False, undelete=True):
- """ Arguments:
- * generator - A page generator.
- * always - Delete without prompting?
+ """
+ Arguments:
+ * generator - A page generator.
+ * always - Delete without prompting?
"""
self.generator = generator
self.summary = summary
- self.always = always
+ self.prompt = not always
self.undelete = undelete
def run(self):
- """ Starts the robot's action. """
- #Loop through everything in the page generator and delete it.
+ """ Starts the robot's action:
+ Loop through everything in the page generator and delete it.
+
+ """
for page in self.generator:
pywikibot.output(u'Processing page %s' % page.title())
if self.undelete:
page.undelete(self.summary, throttle=True)
else:
- page.delete(self.summary, not self.always, throttle=True)
+ page.delete(self.summary, self.prompt, throttle=True)
def main():
genFactory = pagegenerators.GeneratorFactory()
pageName = ''
- summary = ''
+ summary = None
always = False
doImages = False
undelete = False
@@ -84,50 +93,45 @@
else:
summary = arg[len('-summary:'):]
elif arg.startswith('-images'):
- doImages = True
- if len(arg) == len('-images'):
- pageName = pywikibot.input(
- u'Enter the page with the images to delete:')
- else:
- pageName = arg[len('-images'):]
+ pywikibot.output('\n\03{lightred}-image option is deprecated. '
+ 'Please use -imagelinks instead\03{default}\n')
+ localargs.append('-imagelinks' + arg[7:])
elif arg.startswith('-undelete'):
undelete = True
else:
genFactory.handleArg(arg)
+ found = arg.find(':') + 1
+ if found:
+ pageName = arg[found:]
+
if not summary:
- if arg.startswith('-category'):
- summary = i18n.twtranslate(mysite, 'delete-from-category',
- {'page': pageName})
- elif arg.startswith('-links'):
- summary = i18n.twtranslate(mysite, 'delete-linked-pages',
- {'page': pageName})
- elif arg.startswith('-ref'):
- summary = i18n.twtranslate(mysite, 'delete-referring-pages',
- {'page': pageName})
+ if pageName:
+ if arg.startswith('-cat') or arg.startswith('-subcats'):
+ summary = i18n.twtranslate(mysite, 'delete-from-category',
+ {'page': pageName})
+ elif arg.startswith('-links'):
+ summary = i18n.twtranslate(mysite, 'delete-linked-pages',
+ {'page': pageName})
+ elif arg.startswith('-ref'):
+ summary = i18n.twtranslate(mysite, 'delete-referring-pages',
+ {'page': pageName})
+ elif arg.startswith('-imagelinks'):
+ summary = i18n.twtranslate(mysite, 'delete-images',
+ {'page': pageName})
elif arg.startswith('-file'):
summary = i18n.twtranslate(mysite, 'delete-from-file')
-
- if doImages:
- if not summary:
- summary = i18n.twtranslate(mysite, 'delete-images',
- {'page': pageName})
- page = pywikibot.Page(mysite, pageName)
- generator = pagegenerators.ImagesPageGenerator(page)
- if not summary:
- summary = pywikibot.input(u'Enter a reason for the %sdeletion:'
- % ['', 'un'][undelete])
- if not generator:
- generator = genFactory.getCombinedGenerator()
- if not generator:
- # syntax error, show help text from the top of this file
- pywikibot.showHelp('delete')
- return
+ generator = genFactory.getCombinedGenerator()
+ # We are just deleting pages, so we have no need of using a preloading
+ # page generator to actually get the text of those pages.
if generator:
- pywikibot.setAction(summary)
- # We are just deleting pages, so we have no need of using a preloading
- # page generator to actually get the text of those pages.
+ if summary is None:
+ summary = pywikibot.input(u'Enter a reason for the %sdeletion:'
+ % ['', 'un'][undelete])
bot = DeletionRobot(generator, summary, always, undelete)
bot.run()
+ else:
+ # Show help text from the top of this file
+ pywikibot.showHelp()
if __name__ == "__main__":
--
To view, visit https://gerrit.wikimedia.org/r/110154
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I203c224b8c802e5752b796a7aaa305c5b400419e
Gerrit-PatchSet: 4
Gerrit-Project: pywikibot/compat
Gerrit-Branch: master
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: Huji <huji.huji(a)gmail.com>
Gerrit-Reviewer: Ladsgroup <ladsgroup(a)gmail.com>
Gerrit-Reviewer: Merlijn van Deen <valhallasw(a)arctus.nl>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot <>
jenkins-bot has submitted this change and it was merged.
Change subject: Bug 55229: make i18n for AddCategory independent from default site
......................................................................
Bug 55229: make i18n for AddCategory independent from default site
the edit summary depends on the language of each page
yielded by the generator
Change-Id: I9204b1afe3cc26d0f8b0683db4a2d09592f6a43c
---
M scripts/category.py
1 file changed, 11 insertions(+), 11 deletions(-)
Approvals:
Merlijn van Deen: Looks good to me, approved
jenkins-bot: Verified
diff --git a/scripts/category.py b/scripts/category.py
index f83d9e3..895bb24 100755
--- a/scripts/category.py
+++ b/scripts/category.py
@@ -240,7 +240,6 @@
self.sort = sort_by_last_name
self.create = create
self.follow_redirects = follow_redirects
- self.site = pywikibot.getSite()
self.always = False
self.dry = dry
self.newcatTitle = None
@@ -280,12 +279,6 @@
def run(self):
self.newcatTitle = pywikibot.input(
u'Category to add (do not give namespace):')
- if not self.site.nocapitalize:
- self.newcatTitle = (self.newcatTitle[:1].upper() +
- self.newcatTitle[1:])
- if not self.editSummary:
- self.editSummary = i18n.twtranslate(self.site, 'category-adding',
- {'newcat': self.newcatTitle})
counter = 0
for page in self.generator:
self.treat(page)
@@ -308,7 +301,7 @@
pywikibot.output(u"Page %s does not exist; skipping."
% page.title(asLink=True))
except pywikibot.IsRedirectPage as arg:
- redirTarget = pywikibot.Page(self.site, arg.args[0])
+ redirTarget = pywikibot.Page(page.site, arg.args[0])
if self.follow_redirects:
text = redirTarget.get()
else:
@@ -318,11 +311,15 @@
else:
return text
- def save(self, text, page, comment, minorEdit=True, botflag=True):
+ def save(self, text, page, newcatTitle, minorEdit=True, botflag=True):
# only save if something was changed
if text != page.get():
# show what was changed
pywikibot.showDiff(page.get(), text)
+ comment = self.editSummary
+ if not comment:
+ comment = i18n.twtranslate(page.site, 'category-adding',
+ {'newcat': newcatTitle})
pywikibot.output(u'Comment: %s' % comment)
if not self.dry:
if not self.always:
@@ -373,7 +370,10 @@
pywikibot.output(u"Current categories:")
for cat in cats:
pywikibot.output(u"* %s" % cat.title())
- catpl = pywikibot.Page(self.site, self.newcatTitle, defaultNamespace=14)
+ newcatTitle = self.newcatTitle
+ if not page.site.nocapitalize:
+ newcatTitle = newcatTitle[:1].upper() + newcatTitle[1:]
+ catpl = pywikibot.Page(page.site, newcatTitle, ns=14)
if catpl in cats:
pywikibot.output(u"%s is already in %s."
% (page.title(), catpl.title()))
@@ -383,7 +383,7 @@
pywikibot.output(u'Adding %s' % catpl.title(asLink=True))
cats.append(catpl)
text = pywikibot.replaceCategoryLinks(text, cats)
- if not self.save(text, page, self.editSummary):
+ if not self.save(text, page, newcatTitle):
pywikibot.output(u'Page %s not saved.'
% page.title(asLink=True))
--
To view, visit https://gerrit.wikimedia.org/r/118943
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I9204b1afe3cc26d0f8b0683db4a2d09592f6a43c
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Ricordisamoa <ricordisamoa(a)live.it>
Gerrit-Reviewer: Ladsgroup <ladsgroup(a)gmail.com>
Gerrit-Reviewer: Merlijn van Deen <valhallasw(a)arctus.nl>
Gerrit-Reviewer: Ricordisamoa <ricordisamoa(a)live.it>
Gerrit-Reviewer: jenkins-bot <>
jenkins-bot has submitted this change and it was merged.
Change subject: Bug 55118: use the family name and site code to get sources
......................................................................
Bug 55118: use the family name and site code to get sources
instead of the language code only
This prevents the script from importing a source for xxwiki
for data imported from xxwikivoyage or xxwikisource (bug 62037)
Change-Id: I29df011b82fd8687d4c38def62d0c0ea3a1b7994
---
M scripts/harvest_template.py
1 file changed, 11 insertions(+), 11 deletions(-)
Approvals:
Merlijn van Deen: Looks good to me, approved
jenkins-bot: Verified
diff --git a/scripts/harvest_template.py b/scripts/harvest_template.py
index 2507544..79adb7c 100755
--- a/scripts/harvest_template.py
+++ b/scripts/harvest_template.py
@@ -50,14 +50,14 @@
self.repo = pywikibot.Site().data_repository()
self.cacheSources()
- def getSource(self, lang):
+ def getSource(self, site):
"""
- Get the source for the specified language,
+ Get the source for the specified site,
if possible
"""
- if lang in self.source_values:
- source = pywikibot.Claim(self.repo, 'p143')
- source.setTarget(self.source_values.get(lang))
+ if site.family.name in self.source_values and site.code in self.source_values[site.family.name]:
+ source = pywikibot.Claim(self.repo, 'P143')
+ source.setTarget(self.source_values.get(site.family.name).get(site.code))
return source
def cacheSources(self):
@@ -65,12 +65,12 @@
Fetches the sources from the onwiki list
and stores it internally
"""
- page = pywikibot.Page(self.repo, u'Wikidata:List of wikis/python')
+ page = pywikibot.Page(self.repo, u'List of wikis/python', ns=4)
self.source_values = json.loads(page.get())
- self.source_values = self.source_values['wikipedia']
- for source_lang in self.source_values:
- self.source_values[source_lang] = pywikibot.ItemPage(self.repo,
- self.source_values[source_lang])
+ for family_code, family in self.source_values.iteritems():
+ for source_lang in family:
+ self.source_values[family_code][source_lang] = pywikibot.ItemPage(self.repo,
+ family[source_lang])
def run(self):
"""
@@ -152,7 +152,7 @@
pywikibot.output('Adding %s --> %s' % (claim.getID(), claim.getTarget()))
item.addClaim(claim)
# A generator might yield pages from multiple sites
- source = self.getSource(page.site.language())
+ source = self.getSource(page.site)
if source:
claim.addSource(source, bot=True)
--
To view, visit https://gerrit.wikimedia.org/r/118974
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I29df011b82fd8687d4c38def62d0c0ea3a1b7994
Gerrit-PatchSet: 2
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Ricordisamoa <ricordisamoa(a)live.it>
Gerrit-Reviewer: Ladsgroup <ladsgroup(a)gmail.com>
Gerrit-Reviewer: Merlijn van Deen <valhallasw(a)arctus.nl>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot <>
jenkins-bot has submitted this change and it was merged.
Change subject: Add misspelling.py to core
......................................................................
Add misspelling.py to core
Change-Id: Ic4b40cd2203beecb382911cf9bc8d5ce44e129cb
---
A scripts/misspelling.py
1 file changed, 143 insertions(+), 0 deletions(-)
Approvals:
Merlijn van Deen: Looks good to me, approved
Alex S.H. Lin: Verified; Looks good to me, but someone else must approve
jenkins-bot: Verified
diff --git a/scripts/misspelling.py b/scripts/misspelling.py
new file mode 100644
index 0000000..90fa226
--- /dev/null
+++ b/scripts/misspelling.py
@@ -0,0 +1,143 @@
+# -*- coding: utf-8 -*-
+"""
+This script works similar to solve_disambiguation.py. It is supposed to fix
+links that contain common spelling mistakes. This is only possible on wikis
+that have a template for these misspellings.
+
+Command line options:
+
+ -always:XY instead of asking the user what to do, always perform the same
+ action. For example, XY can be "r0", "u" or "2". Be careful with
+ this option, and check the changes made by the bot. Note that
+ some choices for XY don't make sense and will result in a loop,
+ e.g. "l" or "m".
+
+ -start:XY goes through all misspellings in the category on your wiki
+ that is defined (to the bot) as the category containing
+ misspelling pages, starting at XY. If the -start argument is not
+ given, it starts at the beginning.
+
+ -main only check pages in the main namespace, not in the talk,
+ wikipedia, user, etc. namespaces.
+"""
+
+# (C) Daniel Herding, 2007
+# (C) Pywikibot team, 2007-2014
+#
+# Distributed under the terms of the MIT license.
+#
+__version__ = '$Id$'
+#
+
+import pywikibot
+from pywikibot import i18n, pagegenerators
+from solve_disambiguation import DisambiguationRobot
+
+
+class MisspellingRobot(DisambiguationRobot):
+
+ misspellingTemplate = {
+ 'da': None, # uses simple redirects
+ 'de': u'Falschschreibung',
+ 'en': None, # uses simple redirects
+ 'hu': None, # uses simple redirects
+ 'nl': None,
+ }
+
+ # Optional: if there is a category, one can use the -start
+ # parameter.
+ misspellingCategory = {
+ 'da': u'Omdirigeringer af fejlstavninger', # only contains date redirects at the moment
+ 'de': u'Kategorie:Wikipedia:Falschschreibung',
+ 'en': u'Redirects from misspellings',
+ 'hu': u'Átirányítások hibás névről',
+ 'nl': u'Categorie:Wikipedia:Redirect voor spelfout',
+ }
+
+ def __init__(self, always, firstPageTitle, main_only):
+ super(MisspellingRobot, self).__init__(
+ always, [], True, False,
+ self.createPageGenerator(firstPageTitle), False, main_only)
+
+ def createPageGenerator(self, firstPageTitle):
+ mysite = pywikibot.Site()
+ mylang = mysite.lang
+ if mylang in self.misspellingCategory:
+ misspellingCategoryTitle = self.misspellingCategory[mylang]
+ misspellingCategory = pywikibot.Category(mysite,
+ misspellingCategoryTitle)
+ generator = pagegenerators.CategorizedPageGenerator(
+ misspellingCategory, recurse=True, start=firstPageTitle)
+ else:
+ misspellingTemplateName = 'Template:%s' \
+ % self.misspellingTemplate[mylang]
+ misspellingTemplate = pywikibot.Page(mysite,
+ misspellingTemplateName)
+ generator = pagegenerators.ReferringPageGenerator(
+ misspellingTemplate, onlyTemplateInclusion=True)
+ if firstPageTitle:
+ pywikibot.output(
+ u'-start parameter unsupported on this wiki because there '
+ u'is no category for misspellings.')
+ preloadingGen = pagegenerators.PreloadingGenerator(generator)
+ return preloadingGen
+
+ # Overrides the DisambiguationRobot method.
+ def findAlternatives(self, disambPage):
+ if disambPage.isRedirectPage():
+ self.alternatives.append(disambPage.getRedirectTarget().title())
+ return True
+ elif self.misspellingTemplate[disambPage.site.lang] is not None:
+ for template, params in disambPage.templatesWithParams():
+ if template.title() in self.misspellingTemplate[self.mylang]:
+ # The correct spelling is in the last paramter.
+ correctSpelling = params[-1]
+ # On de.wikipedia, there are some cases where the
+ # misspelling is ambigous, see for example:
+ # http://de.wikipedia.org/wiki/Buthan
+ for match in self.linkR.finditer(correctSpelling):
+ self.alternatives.append(match.group('title'))
+
+ if not self.alternatives:
+ # There were no links in the parameter, so there is
+ # only one correct spelling.
+ self.alternatives.append(correctSpelling)
+ return True
+
+ # Overrides the DisambiguationRobot method.
+ def setSummaryMessage(self, disambPage, new_targets=[], unlink=False,
+ dn=False):
+ # TODO: setSummaryMessage() in solve_disambiguation now has parameters
+ # new_targets and unlink. Make use of these here.
+ self.comment = i18n.twtranslate(self.mysite, 'misspelling-fixing',
+ {'page': disambPage.title()})
+
+
+def main():
+ # the option that's always selected when the bot wonders what to do with
+ # a link. If it's None, the user is prompted (default behaviour).
+ always = None
+ main_only = False
+ firstPageTitle = None
+
+ for arg in pywikibot.handleArgs():
+ if arg.startswith('-always:'):
+ always = arg[8:]
+ elif arg.startswith('-start'):
+ if len(arg) == 6:
+ firstPageTitle = pywikibot.input(
+ u'At which page do you want to start?')
+ else:
+ firstPageTitle = arg[7:]
+ elif arg == '-main':
+ main_only = True
+
+ bot = MisspellingRobot(always, firstPageTitle, main_only)
+ bot.run()
+
+
+if __name__ == "__main__":
+ try:
+ main()
+ finally:
+ pywikibot.stopme()
--
To view, visit https://gerrit.wikimedia.org/r/119292
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ic4b40cd2203beecb382911cf9bc8d5ce44e129cb
Gerrit-PatchSet: 5
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: Alex S.H. Lin <alexsh(a)mail2000.com.tw>
Gerrit-Reviewer: Ladsgroup <ladsgroup(a)gmail.com>
Gerrit-Reviewer: Merlijn van Deen <valhallasw(a)arctus.nl>
Gerrit-Reviewer: jenkins-bot <>
jenkins-bot has submitted this change and it was merged.
Change subject: Print a warning message if the target template does not exist
......................................................................
Print a warning message if the target template does not exist
While replaceing templates the target template should exist.
Print a warning and ask for proceed the current replacement.
Change-Id: I0c217b985957e7cb9a2b07005eea384419fcc462
---
M scripts/template.py
1 file changed, 8 insertions(+), 0 deletions(-)
Approvals:
Merlijn van Deen: Looks good to me, approved
jenkins-bot: Verified
diff --git a/scripts/template.py b/scripts/template.py
index a2432c3..843965d 100755
--- a/scripts/template.py
+++ b/scripts/template.py
@@ -272,6 +272,14 @@
elif self.remove:
replacements.append((templateRegex, ''))
else:
+ template = pywikibot.Page(site, new)
+ if not template.exists():
+ pywikibot.warning(u'Template "%s" does not exist.' % new)
+ choice = pywikibot.inputChoice(
+ u'Do you want to proceed anyway?',
+ ['Yes', 'No'], ['y', 'N'], 'N')
+ if choice == 'n':
+ continue
replacements.append((templateRegex,
'{{%s\g<parameters>}}' % new))
--
To view, visit https://gerrit.wikimedia.org/r/119741
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I0c217b985957e7cb9a2b07005eea384419fcc462
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: Ladsgroup <ladsgroup(a)gmail.com>
Gerrit-Reviewer: Merlijn van Deen <valhallasw(a)arctus.nl>
Gerrit-Reviewer: jenkins-bot <>