Hello community,

here is the log from the commit of package openSUSE-release-tools for 
openSUSE:Factory checked in at 2017-10-17 01:51:43
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openSUSE-release-tools (Old)
 and      /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "openSUSE-release-tools"

Tue Oct 17 01:51:43 2017 rev:6 rq:533857 version:20171013.b00a8f5

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes
    2017-10-11 23:01:52.771519119 +0200
+++ 
/work/SRC/openSUSE:Factory/.openSUSE-release-tools.new/openSUSE-release-tools.changes
       2017-10-17 01:51:46.276533315 +0200
@@ -1,0 +2,50 @@
+Fri Oct 13 09:12:23 UTC 2017 - opensuse-releaset...@opensuse.org
+
+- Update to version 20171013.b00a8f5:
+  * osclib/stagingapi: get_staging_projects(): provide include_dvd option.
+  * check_source: print message if checking devel project.
+  * check_source: move all relevant flags to config to work properly without 
flags.
+  * ttm: update for Leap 15.0
+  * osclib: provide ConfigCommand and expose via osc-staging.
+  * repo_checker: utilize staging configuration for whitelist additions.
+  * repo_checker: filter empty whitelist entries.
+  * osclib/stagingapi: set_prj_pseudometa(): only change if different.
+  * osclib/freeze: clear staging config during freeze as well.
+
+-------------------------------------------------------------------
+Tue Oct 10 16:26:17 UTC 2017 - opensuse-releaset...@opensuse.org
+
+- Update to version 20171010.a2ba667:
+  * dist: provide check-source subpackage.
+
+-------------------------------------------------------------------
+Tue Oct 10 16:18:11 UTC 2017 - opensuse-releaset...@opensuse.org
+
+- Update to version 20171010.73cec11:
+  * dist: provide maintenance subpackage.
+
+-------------------------------------------------------------------
+Tue Oct 10 16:09:46 UTC 2017 - opensuse-releaset...@opensuse.org
+
+- Update to version 20171010.3ed4156:
+  * dist: rework totest-manager subpackage to provide new style service.
+  * dist/spec: add python-openqa_client as Requires for totest-manager.
+  * dist/spec: totest-manager: reword to avoid dollar sign.
+
+-------------------------------------------------------------------
+Tue Oct 10 15:55:26 UTC 2017 - opensuse-releaset...@opensuse.org
+
+- Update to version 20171010.f50ea95:
+  * dist: provide leaper services and related configuration.
+
+-------------------------------------------------------------------
+Tue Oct 10 15:35:17 UTC 2017 - opensuse-releaset...@opensuse.org
+
+- Update to version 20171010.de533a2:
+  * dist: provide staging-bot subpackage for related services.
+  * dist/spec: include project_only repo-checker service in pre/post.
+  * dist: provide staging-bot-devel-list service (changed from leaper).
+  * dist: include suppkg_rebuild in staging-bot subpackage.
+  * dist: include supersede service in staging-bot subpackage.
+
+-------------------------------------------------------------------

Old:
----
  openSUSE-release-tools-20171010.02e5000.obscpio

New:
----
  openSUSE-release-tools-20171013.b00a8f5.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ openSUSE-release-tools.spec ++++++
--- /var/tmp/diff_new_pack.OfiIRC/_old  2017-10-17 01:51:48.344436445 +0200
+++ /var/tmp/diff_new_pack.OfiIRC/_new  2017-10-17 01:51:48.348436258 +0200
@@ -20,7 +20,7 @@
 %define source_dir osc-plugin-factory
 %define announcer_filename factory-package-news
 Name:           openSUSE-release-tools
-Version:        20171010.02e5000
+Version:        20171013.b00a8f5
 Release:        0
 Summary:        Tools to aid in staging and release work for openSUSE/SUSE
 License:        GPL-2.0+ and MIT
@@ -109,6 +109,39 @@
 %description announcer
 OBS product release announcer for generating email diffs summaries.
 
+%package check-source
+Summary:        Check source review bot
+Group:          Development/Tools/Other
+BuildArch:      noarch
+# TODO Update requirements.
+Requires:       osclib = %{version}
+Requires(pre):  shadow
+
+%description check-source
+Check source review bot that performs basic source analysis and assigns 
reviews.
+
+%package leaper
+Summary:        Leap-style services
+Group:          Development/Tools/Other
+BuildArch:      noarch
+Requires:       %{name} = %{version}
+Requires:       osclib = %{version}
+Requires(pre):  shadow
+
+%description leaper
+Leap-style services for non-Factory projects.
+
+%package maintenance
+Summary:        Maintenance related services
+Group:          Development/Tools/Other
+BuildArch:      noarch
+# TODO Update requirements.
+Requires:       osclib = %{version}
+Requires(pre):  shadow
+
+%description maintenance
+Maintenance related services like incident check.
+
 %package metrics
 Summary:        Ingest relevant data to generate insightful metrics
 Group:          Development/Tools/Other
@@ -134,15 +167,30 @@
 %description repo-checker
 Repository checker service that inspects built RPMs from stagings.
 
+%package staging-bot
+Summary:        Staging bot services
+Group:          Development/Tools/Other
+BuildArch:      noarch
+# devel-project.py
+Requires:       %{name} = %{version}
+Requires:       osc-plugin-staging = %{version}
+# For supersede service.
+Requires:       osc-plugin-check_dups = %{version}
+Requires(pre):  shadow
+
+%description staging-bot
+Staging bot services and system user.
+
 %package totest-manager
-Summary:        Manages \$product:ToTest repository
+Summary:        Manages product ToTest repository
 Group:          Development/Tools/Other
 BuildArch:      noarch
 # TODO Update requirements.
 Requires:       osclib = %{version}
+Requires:       python-openqa_client
 
 %description totest-manager
-Manages \$product:ToTest repository workflow and openQA interaction
+Manages product ToTest repository workflow and openQA interaction
 
 %package -n osclib
 Summary:        Supplemental osc libraries
@@ -214,34 +262,129 @@
 %postun announcer
 %service_del_postun %{announcer_filename}.service
 
+%pre check-source
+%service_add_pre osrt-check-source.service
+getent passwd osrt-check-source > /dev/null || \
+  useradd -r -m -s /sbin/nologin -c "user for 
openSUSE-release-tools-check-source" osrt-check-source
+exit 0
+
+%post check-source
+%service_add_post osrt-check-source.service
+
+%preun check-source
+%service_del_preun osrt-check-source.service
+
+%postun check-source
+%service_del_postun osrt-check-source.service
+
+%pre leaper
+%service_add_pre osrt-leaper-crawler@.service
+%service_add_pre osrt-leaper-manager@.service
+%service_add_pre osrt-leaper-review.service
+getent passwd osrt-leaper > /dev/null || \
+  useradd -r -m -s /sbin/nologin -c "user for openSUSE-release-tools-leaper" 
osrt-leaper
+exit 0
+
+%post leaper
+%service_add_post osrt-leaper-crawler@.service
+%service_add_post osrt-leaper-manager@.service
+%service_add_post osrt-leaper-review.service
+
+%preun leaper
+%service_del_preun osrt-leaper-crawler@.service
+%service_del_preun osrt-leaper-manager@.service
+%service_del_preun osrt-leaper-review.service
+
+%postun leaper
+%service_del_postun osrt-leaper-crawler@.service
+%service_del_postun osrt-leaper-manager@.service
+%service_del_postun osrt-leaper-review.service
+
+%pre maintenance
+%service_add_pre osrt-maintenance-incidents.service
+getent passwd osrt-maintenance > /dev/null || \
+  useradd -r -m -s /sbin/nologin -c "user for 
openSUSE-release-tools-maintenance" osrt-maintenance
+exit 0
+
+%post maintenance
+%service_add_post osrt-maintenance-incidents.service
+
+%preun maintenance
+%service_del_preun osrt-maintenance-incidents.service
+
+%postun maintenance
+%service_del_postun osrt-maintenance-incidents.service
+
 # TODO Provide metrics service once #1006 is resolved.
 
 %pre repo-checker
 %service_add_pre osrt-repo-checker.service
+%service_add_pre osrt-repo-checker-project_only@.service
 getent passwd osrt-repo-checker > /dev/null || \
   useradd -r -m -s /sbin/nologin -c "user for 
openSUSE-release-tools-repo-checker" osrt-repo-checker
 exit 0
 
 %post repo-checker
 %service_add_post osrt-repo-checker.service
+%service_add_post osrt-repo-checker-project_only@.service
 
 %preun repo-checker
 %service_del_preun osrt-repo-checker.service
+%service_del_preun osrt-repo-checker-project_only@.service
 
 %postun repo-checker
 %service_del_postun osrt-repo-checker.service
+%service_del_postun osrt-repo-checker-project_only@.service
+
+%pre staging-bot
+%service_add_pre osrt-staging-bot-daily@.service
+%service_add_pre osrt-staging-bot-devel-list.service
+%service_add_pre osrt-staging-bot-regular@.service
+%service_add_pre osrt-staging-bot-reminder.service
+%service_add_pre osrt-staging-bot-supersede@.service
+%service_add_pre osrt-staging-bot-support-rebuild@.service
+getent passwd osrt-staging-bot > /dev/null || \
+  useradd -r -m -s /sbin/nologin -c "user for 
openSUSE-release-tools-staging-bot" osrt-staging-bot
+exit 0
+
+%post staging-bot
+%service_add_post osrt-staging-bot-daily@.service
+%service_add_post osrt-staging-bot-devel-list.service
+%service_add_post osrt-staging-bot-regular@.service
+%service_add_post osrt-staging-bot-reminder.service
+%service_add_post osrt-staging-bot-supersede@.service
+%service_add_post osrt-staging-bot-support-rebuild@.service
+
+%preun staging-bot
+%service_del_preun osrt-staging-bot-daily@.service
+%service_del_preun osrt-staging-bot-devel-list.service
+%service_del_preun osrt-staging-bot-regular@.service
+%service_del_preun osrt-staging-bot-reminder.service
+%service_del_preun osrt-staging-bot-supersede@.service
+%service_del_preun osrt-staging-bot-support-rebuild@.service
+
+%postun staging-bot
+%service_del_postun osrt-staging-bot-daily@.service
+%service_del_postun osrt-staging-bot-devel-list.service
+%service_del_postun osrt-staging-bot-regular@.service
+%service_del_postun osrt-staging-bot-reminder.service
+%service_del_postun osrt-staging-bot-supersede@.service
+%service_del_postun osrt-staging-bot-support-rebuild@.service
 
 %pre totest-manager
-%service_add_pre opensuse-totest-manager.service
+%service_add_pre osrt-totest-manager@.service
+getent passwd osrt-totest-manager > /dev/null || \
+  useradd -r -m -s /sbin/nologin -c "user for 
openSUSE-release-tools-totest-manager" osrt-totest-manager
+exit 0
 
 %post totest-manager
-%service_add_post opensuse-totest-manager.service
+%service_add_post osrt-totest-manager@.service
 
 %preun totest-manager
-%service_del_preun opensuse-totest-manager.service
+%service_del_preun osrt-totest-manager@.service
 
 %postun totest-manager
-%service_del_postun opensuse-totest-manager.service
+%service_del_postun osrt-totest-manager@.service
 
 %files
 %defattr(-,root,root,-)
@@ -249,15 +392,24 @@
 %{_datadir}/%{source_dir}
 %exclude %{_datadir}/%{source_dir}/abichecker
 %exclude %{_datadir}/%{source_dir}/%{announcer_filename}
+%exclude %{_datadir}/%{source_dir}/check_maintenance_incidents.py
+%exclude %{_datadir}/%{source_dir}/check_source.pl
+%exclude %{_datadir}/%{source_dir}/check_source.py
+%exclude %{_datadir}/%{source_dir}/devel-project.py
+%exclude %{_datadir}/%{source_dir}/leaper.py
+%exclude %{_datadir}/%{source_dir}/manager_42.py
 %exclude %{_datadir}/%{source_dir}/metrics
 %exclude %{_datadir}/%{source_dir}/metrics.py
 %exclude %{_datadir}/%{source_dir}/repo_checker.pl
 %exclude %{_datadir}/%{source_dir}/repo_checker.py
+%exclude %{_datadir}/%{source_dir}/suppkg_rebuild.py
 %exclude %{_datadir}/%{source_dir}/totest-manager.py
 %exclude %{_datadir}/%{source_dir}/osclib
 %exclude %{_datadir}/%{source_dir}/osc-check_dups.py
 %exclude %{_datadir}/%{source_dir}/osc-cycle.py
 %exclude %{_datadir}/%{source_dir}/osc-staging.py
+%exclude %{_datadir}/%{source_dir}/update_crawler.py
+%dir %{_sysconfdir}/openSUSE-release-tools
 
 %files devel
 %defattr(-,root,root,-)
@@ -280,6 +432,38 @@
 %{_unitdir}/%{announcer_filename}.service
 %{_unitdir}/%{announcer_filename}.timer
 
+%files check-source
+%defattr(-,root,root,-)
+%{_bindir}/osrt-check_source
+%{_datadir}/%{source_dir}/check_source.pl
+%{_datadir}/%{source_dir}/check_source.py
+%{_unitdir}/osrt-check-source.service
+%{_unitdir}/osrt-check-source.timer
+
+%files leaper
+%defattr(-,root,root,-)
+%{_bindir}/osrt-leaper
+%{_bindir}/osrt-leaper-crawler-*
+%{_bindir}/osrt-manager_42
+%{_bindir}/osrt-update_crawler
+%{_datadir}/%{source_dir}/leaper.py
+%{_datadir}/%{source_dir}/manager_42.py
+%{_datadir}/%{source_dir}/update_crawler.py
+%{_unitdir}/osrt-leaper-crawler@.service
+%{_unitdir}/osrt-leaper-crawler@.timer
+%{_unitdir}/osrt-leaper-manager@.service
+%{_unitdir}/osrt-leaper-manager@.timer
+%{_unitdir}/osrt-leaper-review.service
+%{_unitdir}/osrt-leaper-review.timer
+%{_sysconfdir}/openSUSE-release-tools/manager_42
+
+%files maintenance
+%defattr(-,root,root,-)
+%{_bindir}/osrt-check_maintenance_incidents
+%{_datadir}/%{source_dir}/check_maintenance_incidents.py
+%{_unitdir}/osrt-maintenance-incidents.service
+%{_unitdir}/osrt-maintenance-incidents.timer
+
 %files metrics
 %defattr(-,root,root,-)
 %{_datadir}/%{source_dir}/metrics
@@ -295,10 +479,30 @@
 %{_unitdir}/osrt-repo-checker-project_only@.service
 %{_unitdir}/osrt-repo-checker-project_only@.timer
 
+%files staging-bot
+%defattr(-,root,root,-)
+%{_bindir}/osrt-devel-project
+%{_bindir}/osrt-suppkg_rebuild
+%{_datadir}/%{source_dir}/devel-project.py
+%{_datadir}/%{source_dir}/suppkg_rebuild.py
+%{_unitdir}/osrt-staging-bot-daily@.service
+%{_unitdir}/osrt-staging-bot-daily@.timer
+%{_unitdir}/osrt-staging-bot-devel-list.service
+%{_unitdir}/osrt-staging-bot-devel-list.timer
+%{_unitdir}/osrt-staging-bot-regular@.service
+%{_unitdir}/osrt-staging-bot-regular@.timer
+%{_unitdir}/osrt-staging-bot-reminder.service
+%{_unitdir}/osrt-staging-bot-reminder.timer
+%{_unitdir}/osrt-staging-bot-supersede@.service
+%{_unitdir}/osrt-staging-bot-supersede@.timer
+%{_unitdir}/osrt-staging-bot-support-rebuild@.service
+%{_unitdir}/osrt-staging-bot-support-rebuild@.timer
+
 %files totest-manager
 %defattr(-,root,root,-)
-%{_unitdir}/opensuse-totest-manager.service
+%{_bindir}/osrt-totest-manager
 %{_datadir}/%{source_dir}/totest-manager.py
+%{_unitdir}/osrt-totest-manager@.service
 
 %files -n osclib
 %defattr(-,root,root,-)

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.OfiIRC/_old  2017-10-17 01:51:48.392434196 +0200
+++ /var/tmp/diff_new_pack.OfiIRC/_new  2017-10-17 01:51:48.392434196 +0200
@@ -1,6 +1,6 @@
 <servicedata>
   <service name="tar_scm">
     <param 
name="url">https://github.com/openSUSE/osc-plugin-factory.git</param>
-    <param 
name="changesrevision">239c6314c7a8b0192c85181e7f64ab274e74cc31</param>
+    <param 
name="changesrevision">b00a8f5ed667e32a4cec71523bddbcefb1ca20fd</param>
   </service>
 </servicedata>

++++++ openSUSE-release-tools-20171010.02e5000.obscpio -> 
openSUSE-release-tools-20171013.b00a8f5.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openSUSE-release-tools-20171010.02e5000/Makefile 
new/openSUSE-release-tools-20171013.b00a8f5/Makefile
--- old/openSUSE-release-tools-20171010.02e5000/Makefile        2017-10-10 
13:31:25.000000000 +0200
+++ new/openSUSE-release-tools-20171013.b00a8f5/Makefile        2017-10-13 
11:12:22.000000000 +0200
@@ -2,7 +2,7 @@
 
 include Makefile.common
 
-pkgdata_BINS=repo_checker
+pkgdata_BINS=check_maintenance_incidents check_source devel-project leaper 
manager_42 repo_checker suppkg_rebuild totest-manager update_crawler
 pkgdata_SCRIPTS=$(wildcard *.py *.pl *.sh)
 pkgdata_SCRIPTS+=bs_mirrorfull findfileconflicts
 pkgdata_DATA+=bs_copy metrics osclib $(wildcard *.pm *.testcase)
@@ -12,7 +12,7 @@
 all:
 
 install:
-       install -d -m 755 $(DESTDIR)$(bindir) $(DESTDIR)$(pkgdatadir) 
$(DESTDIR)$(unitdir) $(DESTDIR)$(oscplugindir)
+       install -d -m 755 $(DESTDIR)$(bindir) $(DESTDIR)$(pkgdatadir) 
$(DESTDIR)$(unitdir) $(DESTDIR)$(oscplugindir) 
$(DESTDIR)$(sysconfdir)/$(package_name)
        for i in $(pkgdata_SCRIPTS); do install -m 755 $$i 
$(DESTDIR)$(pkgdatadir); done
        chmod 644 $(DESTDIR)$(pkgdatadir)/osc-*.py
        for i in $(pkgdata_DATA); do cp -a $$i $(DESTDIR)$(pkgdatadir); done
@@ -22,6 +22,8 @@
        sed -i "s/OSC_STAGING_VERSION = '.*'/OSC_STAGING_VERSION = 
'$(VERSION)'/" \
          $(DESTDIR)$(pkgdatadir)/osc-staging.py
        for i in $(pkgdata_BINS); do ln -s $(pkgdatadir)/$$i.py 
$(DESTDIR)$(bindir)/osrt-$$i; done
+       install -m 755 script/* $(DESTDIR)$(bindir)
+       cp -R config/* $(DESTDIR)$(sysconfdir)/$(package_name)
 
 check: test
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/check_source.py 
new/openSUSE-release-tools-20171013.b00a8f5/check_source.py
--- old/openSUSE-release-tools-20171010.02e5000/check_source.py 2017-10-10 
13:31:25.000000000 +0200
+++ new/openSUSE-release-tools-20171013.b00a8f5/check_source.py 2017-10-13 
11:12:22.000000000 +0200
@@ -10,6 +10,7 @@
 except ImportError:
     import cElementTree as ET
 
+import osc.conf
 import osc.core
 import urllib2
 import ReviewBot
@@ -27,16 +28,24 @@
 
         self.maintbot = MaintenanceChecker(*args, **kwargs)
 
-        self.ignore_devel = False
-        self.review_team = 'opensuse-review-team'
-        self.repo_checker = 'repo-checker'
         self.skip_add_reviews = False
 
+    def target_project_config(self, project):
+        # Load project config and allow for remote entries.
+        self.staging_api(project)
+        config = self.staging_config[project]
+
+        self.ignore_devel = not bool(config.get('devel-project-enforce', 
False))
+        self.review_team = config.get('review-team')
+        self.repo_checker = config.get('repo-checker')
+        self.devel_whitelist = config.get('devel-whitelist', '').split()
+
     def check_source_submission(self, source_project, source_package, 
source_revision, target_project, target_package):
         super(CheckSource, self).check_source_submission(source_project, 
source_package, source_revision, target_project, target_package)
+        self.target_project_config(target_project)
 
         if not self.ignore_devel:
-            # Check if target package exists and has devel project.
+            self.logger.info('checking if target package exists and has devel 
project')
             devel_project, devel_package = 
self.get_devel_project(target_project, target_package)
             if devel_project:
                 if (source_project != devel_project or source_package != 
devel_package) and \
@@ -137,10 +146,7 @@
         return None
 
     def is_devel_project(self, source_project, target_project):
-        # Load project config and allow for remote entries.
-        self.staging_api(target_project)
-        devel_whitelist = 
self.staging_config[target_project].get('devel-whitelist', '').split()
-        if source_project in devel_whitelist:
+        if source_project in self.devel_whitelist:
             return True
 
         # Allow any projects already used as devel projects for other packages.
@@ -252,9 +258,6 @@
     def get_optparser(self):
         parser = ReviewBot.CommandLineInterface.get_optparser(self)
 
-        parser.add_option('--ignore-devel', action='store_true', 
default=False, help='ignore devel projects for target package')
-        parser.add_option('--review-team', metavar='GROUP', help='review team 
group added to requests')
-        parser.add_option('--repo-checker', metavar='USER', help='repo checker 
user added after accepted review')
         parser.add_option('--skip-add-reviews', action='store_true', 
default=False, help='skip adding review after completing checks')
 
         return parser
@@ -262,16 +265,6 @@
     def setup_checker(self):
         bot = ReviewBot.CommandLineInterface.setup_checker(self)
 
-        if self.options.ignore_devel:
-            bot.ignore_devel = self.options.ignore_devel
-        if self.options.review_team:
-            if self.options.review_team == 'None':
-                self.options.review_team = None
-            bot.review_team = self.options.review_team
-        if self.options.repo_checker:
-            if self.options.repo_checker == 'None':
-                self.options.repo_checker = None
-            bot.repo_checker = self.options.repo_checker
         bot.skip_add_reviews = self.options.skip_add_reviews
 
         return bot
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/config/manager_42/openSUSE:Leap:15.0.yml
 
new/openSUSE-release-tools-20171013.b00a8f5/config/manager_42/openSUSE:Leap:15.0.yml
--- 
old/openSUSE-release-tools-20171010.02e5000/config/manager_42/openSUSE:Leap:15.0.yml
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/config/manager_42/openSUSE:Leap:15.0.yml
        2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,9 @@
+---
+project_preference_order:
+- SUSE:SLE-15:Update
+- SUSE:SLE-15:GA
+- openSUSE:Factory
+- openSUSE:Factory:NonFree
+- openSUSE:Leap:15.0:SLE-workarounds
+- openSUSE:Leap:15.0:SLE-workarounds
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/config/manager_42/openSUSE:Leap:42.3.yml
 
new/openSUSE-release-tools-20171013.b00a8f5/config/manager_42/openSUSE:Leap:42.3.yml
--- 
old/openSUSE-release-tools-20171010.02e5000/config/manager_42/openSUSE:Leap:42.3.yml
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/config/manager_42/openSUSE:Leap:42.3.yml
        2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,22 @@
+---
+project_preference_order:
+- SUSE:SLE-12-SP3:GA
+- SUSE:SLE-12-SP2:Update
+- SUSE:SLE-12-SP2:GA
+- SUSE:SLE-12-SP1:Update
+- SUSE:SLE-12-SP1:GA
+- SUSE:SLE-12:Update
+- SUSE:SLE-12:GA
+- openSUSE:Leap:42.2:Update
+- openSUSE:Leap:42.2
+- openSUSE:Leap:42.2:NonFree:Update
+- openSUSE:Leap:42.2:NonFree
+- openSUSE:Leap:42.1:Update
+- openSUSE:Leap:42.1
+- openSUSE:Leap:42.1:NonFree:Update
+- openSUSE:Leap:42.1:NonFree
+- openSUSE:Factory
+- openSUSE:Factory:NonFree
+- openSUSE:Leap:42.3:SLE-workarounds
+- openSUSE:Leap:42.2:SLE-workarounds
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/dist/package/openSUSE-release-tools.spec
 
new/openSUSE-release-tools-20171013.b00a8f5/dist/package/openSUSE-release-tools.spec
--- 
old/openSUSE-release-tools-20171010.02e5000/dist/package/openSUSE-release-tools.spec
        2017-10-10 13:31:25.000000000 +0200
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/dist/package/openSUSE-release-tools.spec
        2017-10-13 11:12:22.000000000 +0200
@@ -109,6 +109,39 @@
 %description announcer
 OBS product release announcer for generating email diffs summaries.
 
+%package check-source
+Summary:        Check source review bot
+Group:          Development/Tools/Other
+BuildArch:      noarch
+# TODO Update requirements.
+Requires:       osclib = %{version}
+Requires(pre):  shadow
+
+%description check-source
+Check source review bot that performs basic source analysis and assigns 
reviews.
+
+%package leaper
+Summary:        Leap-style services
+Group:          Development/Tools/Other
+BuildArch:      noarch
+Requires:       %{name} = %{version}
+Requires:       osclib = %{version}
+Requires(pre):  shadow
+
+%description leaper
+Leap-style services for non-Factory projects.
+
+%package maintenance
+Summary:        Maintenance related services
+Group:          Development/Tools/Other
+BuildArch:      noarch
+# TODO Update requirements.
+Requires:       osclib = %{version}
+Requires(pre):  shadow
+
+%description maintenance
+Maintenance related services like incident check.
+
 %package metrics
 Summary:        Ingest relevant data to generate insightful metrics
 Group:          Development/Tools/Other
@@ -134,15 +167,30 @@
 %description repo-checker
 Repository checker service that inspects built RPMs from stagings.
 
+%package staging-bot
+Summary:        Staging bot services
+Group:          Development/Tools/Other
+BuildArch:      noarch
+# devel-project.py
+Requires:       %{name} = %{version}
+Requires:       osc-plugin-staging = %{version}
+# For supersede service.
+Requires:       osc-plugin-check_dups = %{version}
+Requires(pre):  shadow
+
+%description staging-bot
+Staging bot services and system user.
+
 %package totest-manager
-Summary:        Manages \$product:ToTest repository
+Summary:        Manages product ToTest repository
 Group:          Development/Tools/Other
 BuildArch:      noarch
 # TODO Update requirements.
 Requires:       osclib = %{version}
+Requires:       python-openqa_client
 
 %description totest-manager
-Manages \$product:ToTest repository workflow and openQA interaction
+Manages product ToTest repository workflow and openQA interaction
 
 %package -n osclib
 Summary:        Supplemental osc libraries
@@ -214,34 +262,129 @@
 %postun announcer
 %service_del_postun %{announcer_filename}.service
 
+%pre check-source
+%service_add_pre osrt-check-source.service
+getent passwd osrt-check-source > /dev/null || \
+  useradd -r -m -s /sbin/nologin -c "user for 
openSUSE-release-tools-check-source" osrt-check-source
+exit 0
+
+%post check-source
+%service_add_post osrt-check-source.service
+
+%preun check-source
+%service_del_preun osrt-check-source.service
+
+%postun check-source
+%service_del_postun osrt-check-source.service
+
+%pre leaper
+%service_add_pre osrt-leaper-crawler@.service
+%service_add_pre osrt-leaper-manager@.service
+%service_add_pre osrt-leaper-review.service
+getent passwd osrt-leaper > /dev/null || \
+  useradd -r -m -s /sbin/nologin -c "user for openSUSE-release-tools-leaper" 
osrt-leaper
+exit 0
+
+%post leaper
+%service_add_post osrt-leaper-crawler@.service
+%service_add_post osrt-leaper-manager@.service
+%service_add_post osrt-leaper-review.service
+
+%preun leaper
+%service_del_preun osrt-leaper-crawler@.service
+%service_del_preun osrt-leaper-manager@.service
+%service_del_preun osrt-leaper-review.service
+
+%postun leaper
+%service_del_postun osrt-leaper-crawler@.service
+%service_del_postun osrt-leaper-manager@.service
+%service_del_postun osrt-leaper-review.service
+
+%pre maintenance
+%service_add_pre osrt-maintenance-incidents.service
+getent passwd osrt-maintenance > /dev/null || \
+  useradd -r -m -s /sbin/nologin -c "user for 
openSUSE-release-tools-maintenance" osrt-maintenance
+exit 0
+
+%post maintenance
+%service_add_post osrt-maintenance-incidents.service
+
+%preun maintenance
+%service_del_preun osrt-maintenance-incidents.service
+
+%postun maintenance
+%service_del_postun osrt-maintenance-incidents.service
+
 # TODO Provide metrics service once #1006 is resolved.
 
 %pre repo-checker
 %service_add_pre osrt-repo-checker.service
+%service_add_pre osrt-repo-checker-project_only@.service
 getent passwd osrt-repo-checker > /dev/null || \
   useradd -r -m -s /sbin/nologin -c "user for 
openSUSE-release-tools-repo-checker" osrt-repo-checker
 exit 0
 
 %post repo-checker
 %service_add_post osrt-repo-checker.service
+%service_add_post osrt-repo-checker-project_only@.service
 
 %preun repo-checker
 %service_del_preun osrt-repo-checker.service
+%service_del_preun osrt-repo-checker-project_only@.service
 
 %postun repo-checker
 %service_del_postun osrt-repo-checker.service
+%service_del_postun osrt-repo-checker-project_only@.service
+
+%pre staging-bot
+%service_add_pre osrt-staging-bot-daily@.service
+%service_add_pre osrt-staging-bot-devel-list.service
+%service_add_pre osrt-staging-bot-regular@.service
+%service_add_pre osrt-staging-bot-reminder.service
+%service_add_pre osrt-staging-bot-supersede@.service
+%service_add_pre osrt-staging-bot-support-rebuild@.service
+getent passwd osrt-staging-bot > /dev/null || \
+  useradd -r -m -s /sbin/nologin -c "user for 
openSUSE-release-tools-staging-bot" osrt-staging-bot
+exit 0
+
+%post staging-bot
+%service_add_post osrt-staging-bot-daily@.service
+%service_add_post osrt-staging-bot-devel-list.service
+%service_add_post osrt-staging-bot-regular@.service
+%service_add_post osrt-staging-bot-reminder.service
+%service_add_post osrt-staging-bot-supersede@.service
+%service_add_post osrt-staging-bot-support-rebuild@.service
+
+%preun staging-bot
+%service_del_preun osrt-staging-bot-daily@.service
+%service_del_preun osrt-staging-bot-devel-list.service
+%service_del_preun osrt-staging-bot-regular@.service
+%service_del_preun osrt-staging-bot-reminder.service
+%service_del_preun osrt-staging-bot-supersede@.service
+%service_del_preun osrt-staging-bot-support-rebuild@.service
+
+%postun staging-bot
+%service_del_postun osrt-staging-bot-daily@.service
+%service_del_postun osrt-staging-bot-devel-list.service
+%service_del_postun osrt-staging-bot-regular@.service
+%service_del_postun osrt-staging-bot-reminder.service
+%service_del_postun osrt-staging-bot-supersede@.service
+%service_del_postun osrt-staging-bot-support-rebuild@.service
 
 %pre totest-manager
-%service_add_pre opensuse-totest-manager.service
+%service_add_pre osrt-totest-manager@.service
+getent passwd osrt-totest-manager > /dev/null || \
+  useradd -r -m -s /sbin/nologin -c "user for 
openSUSE-release-tools-totest-manager" osrt-totest-manager
+exit 0
 
 %post totest-manager
-%service_add_post opensuse-totest-manager.service
+%service_add_post osrt-totest-manager@.service
 
 %preun totest-manager
-%service_del_preun opensuse-totest-manager.service
+%service_del_preun osrt-totest-manager@.service
 
 %postun totest-manager
-%service_del_postun opensuse-totest-manager.service
+%service_del_postun osrt-totest-manager@.service
 
 %files
 %defattr(-,root,root,-)
@@ -249,15 +392,24 @@
 %{_datadir}/%{source_dir}
 %exclude %{_datadir}/%{source_dir}/abichecker
 %exclude %{_datadir}/%{source_dir}/%{announcer_filename}
+%exclude %{_datadir}/%{source_dir}/check_maintenance_incidents.py
+%exclude %{_datadir}/%{source_dir}/check_source.pl
+%exclude %{_datadir}/%{source_dir}/check_source.py
+%exclude %{_datadir}/%{source_dir}/devel-project.py
+%exclude %{_datadir}/%{source_dir}/leaper.py
+%exclude %{_datadir}/%{source_dir}/manager_42.py
 %exclude %{_datadir}/%{source_dir}/metrics
 %exclude %{_datadir}/%{source_dir}/metrics.py
 %exclude %{_datadir}/%{source_dir}/repo_checker.pl
 %exclude %{_datadir}/%{source_dir}/repo_checker.py
+%exclude %{_datadir}/%{source_dir}/suppkg_rebuild.py
 %exclude %{_datadir}/%{source_dir}/totest-manager.py
 %exclude %{_datadir}/%{source_dir}/osclib
 %exclude %{_datadir}/%{source_dir}/osc-check_dups.py
 %exclude %{_datadir}/%{source_dir}/osc-cycle.py
 %exclude %{_datadir}/%{source_dir}/osc-staging.py
+%exclude %{_datadir}/%{source_dir}/update_crawler.py
+%dir %{_sysconfdir}/openSUSE-release-tools
 
 %files devel
 %defattr(-,root,root,-)
@@ -280,6 +432,38 @@
 %{_unitdir}/%{announcer_filename}.service
 %{_unitdir}/%{announcer_filename}.timer
 
+%files check-source
+%defattr(-,root,root,-)
+%{_bindir}/osrt-check_source
+%{_datadir}/%{source_dir}/check_source.pl
+%{_datadir}/%{source_dir}/check_source.py
+%{_unitdir}/osrt-check-source.service
+%{_unitdir}/osrt-check-source.timer
+
+%files leaper
+%defattr(-,root,root,-)
+%{_bindir}/osrt-leaper
+%{_bindir}/osrt-leaper-crawler-*
+%{_bindir}/osrt-manager_42
+%{_bindir}/osrt-update_crawler
+%{_datadir}/%{source_dir}/leaper.py
+%{_datadir}/%{source_dir}/manager_42.py
+%{_datadir}/%{source_dir}/update_crawler.py
+%{_unitdir}/osrt-leaper-crawler@.service
+%{_unitdir}/osrt-leaper-crawler@.timer
+%{_unitdir}/osrt-leaper-manager@.service
+%{_unitdir}/osrt-leaper-manager@.timer
+%{_unitdir}/osrt-leaper-review.service
+%{_unitdir}/osrt-leaper-review.timer
+%{_sysconfdir}/openSUSE-release-tools/manager_42
+
+%files maintenance
+%defattr(-,root,root,-)
+%{_bindir}/osrt-check_maintenance_incidents
+%{_datadir}/%{source_dir}/check_maintenance_incidents.py
+%{_unitdir}/osrt-maintenance-incidents.service
+%{_unitdir}/osrt-maintenance-incidents.timer
+
 %files metrics
 %defattr(-,root,root,-)
 %{_datadir}/%{source_dir}/metrics
@@ -295,10 +479,30 @@
 %{_unitdir}/osrt-repo-checker-project_only@.service
 %{_unitdir}/osrt-repo-checker-project_only@.timer
 
+%files staging-bot
+%defattr(-,root,root,-)
+%{_bindir}/osrt-devel-project
+%{_bindir}/osrt-suppkg_rebuild
+%{_datadir}/%{source_dir}/devel-project.py
+%{_datadir}/%{source_dir}/suppkg_rebuild.py
+%{_unitdir}/osrt-staging-bot-daily@.service
+%{_unitdir}/osrt-staging-bot-daily@.timer
+%{_unitdir}/osrt-staging-bot-devel-list.service
+%{_unitdir}/osrt-staging-bot-devel-list.timer
+%{_unitdir}/osrt-staging-bot-regular@.service
+%{_unitdir}/osrt-staging-bot-regular@.timer
+%{_unitdir}/osrt-staging-bot-reminder.service
+%{_unitdir}/osrt-staging-bot-reminder.timer
+%{_unitdir}/osrt-staging-bot-supersede@.service
+%{_unitdir}/osrt-staging-bot-supersede@.timer
+%{_unitdir}/osrt-staging-bot-support-rebuild@.service
+%{_unitdir}/osrt-staging-bot-support-rebuild@.timer
+
 %files totest-manager
 %defattr(-,root,root,-)
-%{_unitdir}/opensuse-totest-manager.service
+%{_bindir}/osrt-totest-manager
 %{_datadir}/%{source_dir}/totest-manager.py
+%{_unitdir}/osrt-totest-manager@.service
 
 %files -n osclib
 %defattr(-,root,root,-)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/manager_42-leap423.yml 
new/openSUSE-release-tools-20171013.b00a8f5/manager_42-leap423.yml
--- old/openSUSE-release-tools-20171010.02e5000/manager_42-leap423.yml  
2017-10-10 13:31:25.000000000 +0200
+++ new/openSUSE-release-tools-20171013.b00a8f5/manager_42-leap423.yml  
1970-01-01 01:00:00.000000000 +0100
@@ -1,22 +0,0 @@
----
-project_preference_order:
-- SUSE:SLE-12-SP3:GA
-- SUSE:SLE-12-SP2:Update
-- SUSE:SLE-12-SP2:GA
-- SUSE:SLE-12-SP1:Update
-- SUSE:SLE-12-SP1:GA
-- SUSE:SLE-12:Update
-- SUSE:SLE-12:GA
-- openSUSE:Leap:42.2:Update
-- openSUSE:Leap:42.2
-- openSUSE:Leap:42.2:NonFree:Update
-- openSUSE:Leap:42.2:NonFree
-- openSUSE:Leap:42.1:Update
-- openSUSE:Leap:42.1
-- openSUSE:Leap:42.1:NonFree:Update
-- openSUSE:Leap:42.1:NonFree
-- openSUSE:Factory
-- openSUSE:Factory:NonFree
-- openSUSE:Leap:42.3:SLE-workarounds
-- openSUSE:Leap:42.2:SLE-workarounds
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/openqa-comments.py 
new/openSUSE-release-tools-20171013.b00a8f5/openqa-comments.py
--- old/openSUSE-release-tools-20171010.02e5000/openqa-comments.py      
2017-10-10 13:31:25.000000000 +0200
+++ new/openSUSE-release-tools-20171013.b00a8f5/openqa-comments.py      
2017-10-13 11:12:22.000000000 +0200
@@ -231,6 +231,5 @@
     if args.staging:
         openQA.report(api.prj_from_letter(args.staging))
     else:
-        for staging in api.get_staging_projects():
-            if not staging.endswith(':DVD'):
-                openQA.report(staging)
+        for staging in api.get_staging_projects(include_dvd=False):
+            openQA.report(staging)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/osc-staging.py 
new/openSUSE-release-tools-20171013.b00a8f5/osc-staging.py
--- old/openSUSE-release-tools-20171010.02e5000/osc-staging.py  2017-10-10 
13:31:25.000000000 +0200
+++ new/openSUSE-release-tools-20171013.b00a8f5/osc-staging.py  2017-10-13 
11:12:22.000000000 +0200
@@ -38,6 +38,7 @@
 from osclib.check_duplicate_binaries_command import 
CheckDuplicateBinariesCommand
 from osclib.cleanup_rings import CleanupRings
 from osclib.conf import Config
+from osclib.config_command import ConfigCommand
 from osclib.freeze_command import FreezeCommand
 from osclib.ignore_command import IgnoreCommand
 from osclib.unignore_command import UnignoreCommand
@@ -136,6 +137,8 @@
 @cmdln.option('--strategy', help='apply a specific strategy')
 @cmdln.option('--no-color', action='store_true', help='strip colors from 
output (or add staging.color = 0 to the .oscrc general section')
 @cmdln.option('--save', action='store_true', help='save the result to the 
dashboard container')
+@cmdln.option('--append', action='store_true', help='append to existing value')
+@cmdln.option('--clear', action='store_true', help='clear value')
 def do_staging(self, subcmd, opts, *args):
     """${cmd_name}: Commands to work with staging projects
 
@@ -161,6 +164,34 @@
 
     "check_duplicate_binaries" list binaries provided by multiple packages
 
+    "config" will modify or view staging specific configuration
+
+        Target project level configuration that applies to all stagings can be
+        found in the $PROJECT:Staging/dashboard container in file "config". 
Both
+        configuration locations follow the .oscrc format (space separated 
list).
+
+        config
+            Print all staging configuration.
+        config key
+            Print the value of key for stagings.
+        conf key value...
+            Set the value of key for stagings.
+        config --clear
+            Clear all staging configuration.
+        config --clear key
+            Clear (unset) a single key from staging configuration
+        config --append key value...
+            Append value to existing value or set if no existing value.
+
+        All of the above may be restricted to a set of stagings.
+
+        The staging configuration is automatically cleared anytime staging
+        psuedometa is cleared (accept, or unstage all requests).
+
+        The keys that may be set in staging configuration are:
+
+        - repo_checker-binary-whitelist[-arch]: appended to target project list
+
     "cleanup_rings" will try to cleanup rings content and print
         out problems
 
@@ -288,6 +319,7 @@
         osc staging adi [--move] [--by-develproject] [--split] [REQUEST...]
         osc staging check [--old] [STAGING...]
         osc staging check_duplicate_binaries
+        osc staging config [--append] [--clear] [STAGING...] [key] [value]
         osc staging cleanup_rings
         osc staging freeze [--no-bootstrap] STAGING...
         osc staging frozenage [STAGING...]
@@ -320,6 +352,7 @@
         'accept',
         'adi',
         'check',
+        'config',
         'frozenage',
         'unignore',
         'select',
@@ -393,6 +426,25 @@
                     print()
         elif cmd == 'check_duplicate_binaries':
             CheckDuplicateBinariesCommand(api).perform(opts.save)
+        elif cmd == 'config':
+            projects = set()
+            key = value = None
+            stagings = api.get_staging_projects_short(None) + \
+                       api.get_staging_projects(include_dvd=False)
+            for arg in args[1:]:
+                if arg in stagings:
+                    projects.add(api.prj_from_short(arg))
+                elif key is None:
+                    key = arg
+                elif value is None:
+                    value = arg
+                else:
+                    value += ' ' + arg
+
+            if not len(projects):
+                projects = api.get_staging_projects(include_dvd=False)
+
+            ConfigCommand(api).perform(projects, key, value, opts.append, 
opts.clear)
         elif cmd == 'freeze':
             for prj in args[1:]:
                 prj = api.prj_from_short(prj)
@@ -454,7 +506,7 @@
         elif cmd == 'select':
             # Include list of all stagings in short-hand and by full name.
             existing_stagings = api.get_staging_projects_short(None)
-            existing_stagings += [p for p in api.get_staging_projects() if not 
p.endswith(':DVD')]
+            existing_stagings += api.get_staging_projects(include_dvd=False)
             stagings = []
             requests = []
             for arg in args[1:]:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/osclib/conf.py 
new/openSUSE-release-tools-20171013.b00a8f5/osclib/conf.py
--- old/openSUSE-release-tools-20171010.02e5000/osclib/conf.py  2017-10-10 
13:31:25.000000000 +0200
+++ new/openSUSE-release-tools-20171013.b00a8f5/osclib/conf.py  2017-10-13 
11:12:22.000000000 +0200
@@ -46,6 +46,10 @@
         'lock-ns': 'openSUSE',
         'delreq-review': 'factory-maintainers',
         'main-repo': 'standard',
+        # check_source.py
+        'devel-project-enforce': 'True',
+        'review-team': 'opensuse-review-team',
+        'repo-checker': 'repo-checker',
     },
     r'openSUSE:(?P<project>Leap:[\d.]+)': {
         'staging': 'openSUSE:%(project)s:Staging',
@@ -62,6 +66,9 @@
         'lock-ns': 'openSUSE',
         'delreq-review': None,
         'main-repo': 'standard',
+        # check_source.py
+        # review-team optionally added by leaper.py.
+        'repo-checker': 'repo-checker',
     },
     r'SUSE:(?P<project>SLE-15.*$)': {
         'staging': 'SUSE:%(project)s:Staging',
@@ -77,6 +84,8 @@
         'lock-ns': 'SUSE',
         'delreq-review': None,
         'main-repo': 'standard',
+        # check_source.py
+        'repo-checker': 'repo-checker',
     },
     r'SUSE:(?P<project>.*$)': {
         'staging': 'SUSE:%(project)s:Staging',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/osclib/config_command.py 
new/openSUSE-release-tools-20171013.b00a8f5/osclib/config_command.py
--- old/openSUSE-release-tools-20171010.02e5000/osclib/config_command.py        
1970-01-01 01:00:00.000000000 +0100
+++ new/openSUSE-release-tools-20171013.b00a8f5/osclib/config_command.py        
2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,28 @@
+class ConfigCommand(object):
+    def __init__(self, api):
+        self.api = api
+
+    def perform(self, projects, key=None, value=None, append=False, 
clear=False):
+        project_max_format = '{:<' + str(len(max(projects, key=len))) + '} {}'
+        for project in projects:
+            meta = self.api.get_prj_pseudometa(project)
+            meta.setdefault('config', {})
+
+            if clear:
+                if key:
+                    meta['config'].pop(key, None)
+                else:
+                    meta.pop('config', None)
+                self.api.set_prj_pseudometa(project, meta)
+            elif value:
+                value_project = value
+                if append:
+                    value_project = ' '.join([meta['config'].get(key, ''), 
value_project.strip()])
+                meta['config'][key] = value_project.strip()
+                self.api.set_prj_pseudometa(project, meta)
+
+            keys = [key] if key else meta.get('config', {}).keys()
+            for key_print in keys:
+                print('{} = {}'.format(
+                    project_max_format.format(project, key_print) if 
len(projects) > 1 else key_print,
+                    meta['config'].get(key_print)))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/osclib/freeze_command.py 
new/openSUSE-release-tools-20171013.b00a8f5/osclib/freeze_command.py
--- old/openSUSE-release-tools-20171010.02e5000/osclib/freeze_command.py        
2017-10-10 13:31:25.000000000 +0200
+++ new/openSUSE-release-tools-20171013.b00a8f5/osclib/freeze_command.py        
2017-10-13 11:12:22.000000000 +0200
@@ -14,6 +14,7 @@
 # with this program; if not, write to the Free Software Foundation, Inc.,
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
+from osclib.config_command import ConfigCommand
 import time
 import re
 from xml.etree import cElementTree as ET
@@ -119,6 +120,9 @@
     def perform(self, prj, copy_bootstrap=True):
         self.prj = prj
 
+        # Depending on what eventually lives in config this may need to change.
+        ConfigCommand(self.api).perform([prj], clear=True)
+
         if self.api.is_adi_project(prj):
             src_prj = 
self.api.find_devel_project_from_adi_frozenlinks(self.prj)
             if src_prj is None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/osclib/stagingapi.py 
new/openSUSE-release-tools-20171013.b00a8f5/osclib/stagingapi.py
--- old/openSUSE-release-tools-20171010.02e5000/osclib/stagingapi.py    
2017-10-10 13:31:25.000000000 +0200
+++ new/openSUSE-release-tools-20171013.b00a8f5/osclib/stagingapi.py    
2017-10-13 11:12:22.000000000 +0200
@@ -325,7 +325,7 @@
 
         return True
 
-    def get_staging_projects(self):
+    def get_staging_projects(self, include_dvd=True):
         """
         Get all current running staging projects
         :return list of known staging projects
@@ -338,7 +338,10 @@
         projxml = http_GET(url)
         root = ET.parse(projxml).getroot()
         for val in root.findall('project'):
-            projects.append(val.get('name'))
+            project = val.get('name')
+            if not include_dvd and project.endswith(':DVD'):
+                continue
+            projects.append(project)
         return projects
 
     def extract_staging_short(self, p):
@@ -361,9 +364,8 @@
                     and None for both.
         """
         projects = []
-        for project in self.get_staging_projects():
-            if project.endswith(':DVD') or \
-               (adi is not None and self.is_adi_project(project) != adi):
+        for project in self.get_staging_projects(include_dvd=False):
+            if adi is not None and self.is_adi_project(project) != adi:
                 continue
             short = self.extract_staging_short(project)
             if adi is False and len(short) > 1:
@@ -736,7 +738,10 @@
         description = root.find('description')
         # Order the requests and replace it with yaml
         meta['requests'] = sorted(meta.get('requests', []), key=lambda x: 
x['id'])
-        description.text = yaml.dump(meta)
+        yaml_new = yaml.dump(meta)
+        if yaml_new == description.text:
+            return
+        description.text = yaml_new
         # Find title
         title = root.find('title')
         # Put something nice into title as well
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/repo_checker.py 
new/openSUSE-release-tools-20171013.b00a8f5/repo_checker.py
--- old/openSUSE-release-tools-20171010.02e5000/repo_checker.py 2017-10-10 
13:31:25.000000000 +0200
+++ new/openSUSE-release-tools-20171013.b00a8f5/repo_checker.py 2017-10-13 
11:12:22.000000000 +0200
@@ -170,7 +170,7 @@
             # Only bother if staging can match arch, but layered first.
             directories.insert(0, self.mirror(project, arch))
 
-            whitelist = self.binary_whitelist(project, arch)
+            whitelist = self.binary_whitelist(project, arch, group)
 
             # Perform checks on group.
             results = {
@@ -240,11 +240,14 @@
             if binary.package in packages:
                 yield binary.name
 
-    def binary_whitelist(self, project, arch):
+    def binary_whitelist(self, project, arch, group):
+        additions = 
self.staging_api(project).get_prj_pseudometa(group).get('config', {})
         prefix = 'repo_checker-binary-whitelist'
         whitelist = set()
         for key in [prefix, '-'.join([prefix, arch])]:
             whitelist.update(self.staging_config[project].get(key, '').split(' 
'))
+            whitelist.update(additions.get(key, '').split(' '))
+        whitelist = filter(None, whitelist)
         return whitelist
 
     def install_check(self, project, directories, arch, ignore=[], 
whitelist=[], parse=False):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/script/osrt-leaper-crawler-openSUSE:Leap:15.0
 
new/openSUSE-release-tools-20171013.b00a8f5/script/osrt-leaper-crawler-openSUSE:Leap:15.0
--- 
old/openSUSE-release-tools-20171010.02e5000/script/osrt-leaper-crawler-openSUSE:Leap:15.0
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/script/osrt-leaper-crawler-openSUSE:Leap:15.0
   2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+TO=openSUSE:Leap:15.0
+
+osrt-update_crawler --to $TO \
+    --from SUSE:SLE-15:GA \
+    --only-from SUSE:SLE-15:GA \
+    --only-from SUSE:SLE-15:Update \
+    "$@"
+
+osrt-update_crawler --to $TO \
+    --from openSUSE:Factory \
+    --only-from openSUSE:Factory \
+    "$@"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/script/osrt-leaper-crawler-openSUSE:Leap:42.3
 
new/openSUSE-release-tools-20171013.b00a8f5/script/osrt-leaper-crawler-openSUSE:Leap:42.3
--- 
old/openSUSE-release-tools-20171010.02e5000/script/osrt-leaper-crawler-openSUSE:Leap:42.3
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/script/osrt-leaper-crawler-openSUSE:Leap:42.3
   2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+TO=openSUSE:Leap:42.3
+
+osrt-update_crawler --to $TO \
+    --from SUSE:SLE-12-SP3:GA \
+    --only-from SUSE:SLE-12:GA \
+    --only-from SUSE:SLE-12:Update \
+    --only-from SUSE:SLE-12-SP1:GA \
+    --only-from SUSE:SLE-12-SP1:Update \
+    --only-from SUSE:SLE-12-SP2:GA \
+    --only-from SUSE:SLE-12-SP2:Update \
+    --only-from SUSE:SLE-12-SP3:GA \
+    --only-from SUSE:SLE-12-SP3:Update \
+    "$@"
+
+osrt-update_crawler --to $TO \
+    --from openSUSE:Leap:42.3:Update \
+    --only-from openSUSE:Leap:42.1 \
+    --only-from openSUSE:Leap:42.1:Update \
+    --only-from openSUSE:Leap:42.2 \
+    --only-from openSUSE:Leap:42.2:Update \
+    --only-from openSUSE:Leap:42.3 \
+    --only-from openSUSE:Leap:42.3:Update \
+    "$@"
+
+osrt-update_crawler --to $TO \
+    --from openSUSE:Leap:42.3:NonFree:Update \
+    --only-from openSUSE:Leap:42.1:NonFree \
+    --only-from openSUSE:Leap:42.1:NonFree:Update \
+    --only-from openSUSE:Leap:42.2:NonFree \
+    --only-from openSUSE:Leap:42.2:NonFree:Update \
+    --only-from openSUSE:Leap:42.3:NonFree \
+    --only-from openSUSE:Leap:42.3:NonFree:Update \
+    "$@"
+
+osrt-update_crawler --to $TO \
+    --from openSUSE:Factory \
+    --only-from openSUSE:Factory \
+    "$@"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/systemd/opensuse-totest-manager.service
 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/opensuse-totest-manager.service
--- 
old/openSUSE-release-tools-20171010.02e5000/systemd/opensuse-totest-manager.service
 2017-10-10 13:31:25.000000000 +0200
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/opensuse-totest-manager.service
 1970-01-01 01:00:00.000000000 +0100
@@ -1,9 +0,0 @@
-[Unit]
-Description=openSUSE Factory ToTest Manager
-
-[Service]
-Type=simple
-ExecStart=/usr/bin/screen -DmS totest-manager 
/usr/share/osc-plugin-factory/totest-manager.py run --verbose --interval 15
-ExecStop=/usr/bin/screen -S totest-manager -X quit
-WorkingDirectory=/usr/share/osc-plugin-factory
-User=_opensuse.org-totest-manager
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-check-source.service 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-check-source.service
--- 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-check-source.service   
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-check-source.service   
    2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,12 @@
+[Unit]
+Description=openSUSE Release Tools: check-source
+
+[Service]
+Type=simple
+User=osrt-check-source
+SyslogIdentifier=osrt-check-source
+# TODO Drop group flag once #1181 is resolved.
+ExecStart=/usr/bin/osrt-check_source --verbose --group factory-auto review
+
+[Install]
+WantedBy=multi-user.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-check-source.timer 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-check-source.timer
--- old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-check-source.timer 
1970-01-01 01:00:00.000000000 +0100
+++ new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-check-source.timer 
2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,10 @@
+[Unit]
+Description=openSUSE Release Tools: check-source
+
+[Timer]
+OnBootSec=120
+OnUnitInactiveSec=3 min
+Unit=osrt-check-source.service
+
+[Install]
+WantedBy=timers.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-leaper-crawler@.service
 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-leaper-crawler@.service
--- 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-leaper-crawler@.service
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-leaper-crawler@.service
    2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,10 @@
+[Unit]
+Description=openSUSE Release Tools: leaper crawler for %i (creates SRs from 
upstream projects)
+
+[Service]
+Type=simple
+User=osrt-leaper
+ExecStart=/usr/bin/osrt-leaper-crawler-%i
+
+[Install]
+WantedBy=multi-user.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-leaper-crawler@.timer 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-leaper-crawler@.timer
--- 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-leaper-crawler@.timer  
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-leaper-crawler@.timer  
    2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,10 @@
+[Unit]
+Description=openSUSE Release Tools: leaper crawler for %i (creates SRs from 
upstream projects)
+
+[Timer]
+OnBootSec=120
+OnUnitInactiveSec=4 hour
+Unit=osrt-leaper-crawler@%i.service
+
+[Install]
+WantedBy=timers.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-leaper-manager@.service
 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-leaper-manager@.service
--- 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-leaper-manager@.service
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-leaper-manager@.service
    2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,10 @@
+[Unit]
+Description=openSUSE Release Tools: leaper manager for %i (set source projects)
+
+[Service]
+Type=simple
+User=osrt-leaper
+ExecStart=/usr/bin/osrt-manager_42 -c 
/etc/openSUSE-release-tools/manager_42/%i.yml
+
+[Install]
+WantedBy=multi-user.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-leaper-manager@.timer 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-leaper-manager@.timer
--- 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-leaper-manager@.timer  
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-leaper-manager@.timer  
    2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,10 @@
+[Unit]
+Description=openSUSE Release Tools: leaper manager for %i
+
+[Timer]
+OnBootSec=120
+OnUnitInactiveSec=3 min
+Unit=osrt-leaper-manager@%i.service
+
+[Install]
+WantedBy=timers.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-leaper-review.service 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-leaper-review.service
--- 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-leaper-review.service  
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-leaper-review.service  
    2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,10 @@
+[Unit]
+Description=openSUSE Release Tools: leaper review
+
+[Service]
+Type=oneshot
+User=osrt-leaper
+ExecStart=/usr/bin/osrt-leaper --verbose --manual-version-updates 
--manual-maintenance-updates review
+
+[Install]
+WantedBy=multi-user.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-leaper-review.timer 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-leaper-review.timer
--- 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-leaper-review.timer    
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-leaper-review.timer    
    2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,10 @@
+[Unit]
+Description=openSUSE Release Tools: leaper review
+
+[Timer]
+OnBootSec=120
+OnUnitInactiveSec=3 min
+Unit=osrt-leaper-review.service
+
+[Install]
+WantedBy=timers.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-maintenance-incidents.service
 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-maintenance-incidents.service
--- 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-maintenance-incidents.service
      1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-maintenance-incidents.service
      2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,10 @@
+[Unit]
+Description=openSUSE Release Tools: maintenance incidents
+
+[Service]
+Type=simple
+User=osrt-maintenance
+ExecStart=/usr/bin/osrt-check_maintenance_incidents --verbose review
+
+[Install]
+WantedBy=multi-user.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-maintenance-incidents.timer
 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-maintenance-incidents.timer
--- 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-maintenance-incidents.timer
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-maintenance-incidents.timer
        2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,10 @@
+[Unit]
+Description=openSUSE Release Tools: maintenance incidents
+
+[Timer]
+OnBootSec=120
+OnUnitInactiveSec=30 min
+Unit=osrt-maintenance-incidents.service
+
+[Install]
+WantedBy=timers.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-staging-bot-daily@.service
 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-staging-bot-daily@.service
--- 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-staging-bot-daily@.service
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-staging-bot-daily@.service
 2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,14 @@
+[Unit]
+Description=openSUSE Release Tools: staging-bot daily for %i
+
+[Service]
+Type=oneshot
+User=osrt-staging-bot
+SyslogIdentifier=osrt-staging-bot
+ExecStart=/usr/bin/env bash -c ' \
+  osc staging -p "%i" unignore --cleanup \
+  '
+TimeoutStartSec=3 hour
+
+[Install]
+WantedBy=multi-user.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-staging-bot-daily@.timer
 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-staging-bot-daily@.timer
--- 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-staging-bot-daily@.timer
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-staging-bot-daily@.timer
   2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,9 @@
+[Unit]
+Description=openSUSE Release Tools: staging-bot daily for %i
+
+[Timer]
+OnCalendar=daily
+Unit=osrt-staging-bot-daily@%i.service
+
+[Install]
+WantedBy=timers.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-staging-bot-devel-list.service
 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-staging-bot-devel-list.service
--- 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-staging-bot-devel-list.service
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-staging-bot-devel-list.service
     2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,11 @@
+[Unit]
+Description=openSUSE Release Tools: staging-bot devel list (stored in 
dashboard)
+
+[Service]
+Type=simple
+User=osrt-staging-bot
+SyslogIdentifier=osrt-staging-bot
+ExecStart=/usr/bin/osrt-devel-project list -w
+
+[Install]
+WantedBy=multi-user.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-staging-bot-devel-list.timer
 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-staging-bot-devel-list.timer
--- 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-staging-bot-devel-list.timer
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-staging-bot-devel-list.timer
       2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,10 @@
+[Unit]
+Description=openSUSE Release Tools: staging-bot devel list (stored in 
dashboard)
+
+[Timer]
+OnBootSec=120
+OnCalendar=daily
+Unit=osrt-staging-bot-devel-list.service
+
+[Install]
+WantedBy=timers.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-staging-bot-regular@.service
 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-staging-bot-regular@.service
--- 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-staging-bot-regular@.service
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-staging-bot-regular@.service
       2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,19 @@
+[Unit]
+Description=openSUSE Release Tools: staging-bot regular for %i
+
+[Service]
+Type=oneshot
+User=osrt-staging-bot
+SyslogIdentifier=osrt-staging-bot
+ExecStart=/usr/bin/env bash -c ' \
+  osc staging -p "%i" rebuild && \
+  osc staging -p "%i" list --supersede && \
+  osc staging -p "%i" adi --by-develproject && \
+  osc staging -p "%i" select --non-interactive --merge --try-strategies && \
+  osc staging -p "%i" unselect --cleanup && \
+  osc staging -p "%i" repair --cleanup \
+  '
+TimeoutStartSec=5 hour
+
+[Install]
+WantedBy=multi-user.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-staging-bot-regular@.timer
 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-staging-bot-regular@.timer
--- 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-staging-bot-regular@.timer
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-staging-bot-regular@.timer
 2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,10 @@
+[Unit]
+Description=openSUSE Release Tools: staging-bot regular for %i
+
+[Timer]
+OnBootSec=120
+OnUnitInactiveSec=60 min
+Unit=osrt-staging-bot-regular@%i.service
+
+[Install]
+WantedBy=timers.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-staging-bot-reminder.service
 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-staging-bot-reminder.service
--- 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-staging-bot-reminder.service
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-staging-bot-reminder.service
       2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,15 @@
+[Unit]
+Description=openSUSE Release Tools: staging-bot reminder
+
+[Service]
+Type=oneshot
+User=osrt-staging-bot
+SyslogIdentifier=osrt-staging-bot
+ExecStart=/usr/bin/env bash -c ' \
+  /usr/bin/osrt-devel-project reviews --min-age 3 --remind && \
+  /usr/bin/osrt-devel-project requests --min-age 3 --remind \
+  '
+TimeoutStartSec=3 hour
+
+[Install]
+WantedBy=multi-user.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-staging-bot-reminder.timer
 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-staging-bot-reminder.timer
--- 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-staging-bot-reminder.timer
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-staging-bot-reminder.timer
 2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,9 @@
+[Unit]
+Description=openSUSE Release Tools: staging-bot reminder
+
+[Timer]
+OnCalendar=daily
+Unit=osrt-staging-bot-reminder.service
+
+[Install]
+WantedBy=timers.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-staging-bot-supersede@.service
 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-staging-bot-supersede@.service
--- 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-staging-bot-supersede@.service
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-staging-bot-supersede@.service
     2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,11 @@
+[Unit]
+Description=openSUSE Release Tools: supersede duplicate submissions for %i
+
+[Service]
+Type=simple
+User=osrt-staging-bot
+SyslogIdentifier=osrt-staging-bot
+ExecStart=/usr/bin/osc check_dups "%i"
+
+[Install]
+WantedBy=multi-user.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-staging-bot-supersede@.timer
 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-staging-bot-supersede@.timer
--- 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-staging-bot-supersede@.timer
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-staging-bot-supersede@.timer
       2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,10 @@
+[Unit]
+Description=openSUSE Release Tools: supersede duplicate submissions for %i
+
+[Timer]
+OnBootSec=120
+OnUnitInactiveSec=4 min
+Unit=osrt-staging-bot-supersede@%i.service
+
+[Install]
+WantedBy=timers.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-staging-bot-support-rebuild@.service
 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-staging-bot-support-rebuild@.service
--- 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-staging-bot-support-rebuild@.service
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-staging-bot-support-rebuild@.service
       2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,11 @@
+[Unit]
+Description=openSUSE Release Tools: staging-bot regular for %i (rebuild 
staging project if support package staged)
+
+[Service]
+Type=oneshot
+User=osrt-staging-bot
+SyslogIdentifier=osrt-staging-bot
+ExecStart=/usr/bin/osrt-suppkg_rebuild -p "%i"
+
+[Install]
+WantedBy=multi-user.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-staging-bot-support-rebuild@.timer
 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-staging-bot-support-rebuild@.timer
--- 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-staging-bot-support-rebuild@.timer
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-staging-bot-support-rebuild@.timer
 2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,10 @@
+[Unit]
+Description=openSUSE Release Tools: staging-bot regular for %i (rebuild 
staging project if support package staged)
+
+[Timer]
+OnBootSec=120
+OnUnitInactiveSec=60 min
+Unit=osrt-staging-bot-support-rebuild@%i.service
+
+[Install]
+WantedBy=timers.target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-totest-manager@.service
 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-totest-manager@.service
--- 
old/openSUSE-release-tools-20171010.02e5000/systemd/osrt-totest-manager@.service
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20171013.b00a8f5/systemd/osrt-totest-manager@.service
    2017-10-13 11:12:22.000000000 +0200
@@ -0,0 +1,8 @@
+[Unit]
+Description=openSUSE Release Tools: ToTest Manager for %i
+
+[Service]
+Type=simple
+User=osrt-totest-manager
+WorkingDirectory=~
+ExecStart=/usr/bin/osrt-totest-manager --verbose run --interval 5 "%i"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171010.02e5000/totest-manager.py 
new/openSUSE-release-tools-20171013.b00a8f5/totest-manager.py
--- old/openSUSE-release-tools-20171010.02e5000/totest-manager.py       
2017-10-10 13:31:25.000000000 +0200
+++ new/openSUSE-release-tools-20171013.b00a8f5/totest-manager.py       
2017-10-13 11:12:22.000000000 +0200
@@ -24,12 +24,12 @@
 
 import osc
 
-logger = logging.getLogger()
-
 from osclib.conf import Config
 from osclib.stagingapi import StagingAPI
 from osc.core import makeurl
 
+logger = logging.getLogger()
+
 ISSUE_FILE = 'issues_to_ignore'
 
 # QA Results
@@ -38,6 +38,10 @@
 QA_PASSED = 3
 
 
+class NotFoundException(Exception):
+    pass
+
+
 class ToTestBase(object):
 
     """Base class to store the basic interface"""
@@ -98,14 +102,14 @@
             result = re.match(r'openSUSE.*Build(.*)-Media1.report', binary)
             if result:
                 return result.group(1)
-        raise Exception("can't find %s version" % self.project)
+        raise NotFoundException("can't find %s ftp version" % project)
 
     def iso_build_version(self, project, tree):
         for binary in self.binaries_of_product('openSUSE:%s' % project, tree):
             result = re.match(r'openSUSE.*Build(.*)-Media.iso', binary)
             if result:
                 return result.group(1)
-        raise Exception("can't find %s version" % self.project)
+        raise NotFoundException("can't find %s iso version" % project)
 
     def release_version(self):
         url = self.api.makeurl(['build', 'openSUSE:%s' % self.project, 
'standard', self.arch(),
@@ -118,7 +122,7 @@
             if result:
                 return result.group(1)
 
-        raise Exception("can't find %s version" % self.project)
+        raise NotFoundException("can't find %s version" % self.project)
 
     def find_openqa_results(self, snapshot):
         """Return the openqa jobs of a given snapshot and filter out the
@@ -215,7 +219,6 @@
                 f = self.api.retried_GET(url)
                 comments = json.load(f)
                 refs = set()
-                #pprint(comments)
                 labeled = 0
                 to_ignore = False
                 for comment in comments:
@@ -322,10 +325,10 @@
         if re.match(r'.*-dvd9-dvd-.*', package):
             return 8539996159
 
-        if package.startswith('_product:openSUSE-ftp-ftp-'):
+        if ':openSUSE-ftp-ftp-' in package:
             return None
 
-        if package.startswith('_product:openSUSE-Addon-NonOss-ftp-ftp'):
+        if ':openSUSE-Addon-NonOss-ftp-ftp' in package:
             return None
 
         raise Exception('No maxsize for {}'.format(package))
@@ -389,7 +392,7 @@
 
         return True
 
-    def release_package(self, project, package, set_release=None):
+    def _release_package(self, project, package, set_release=None):
         query = {'cmd': 'release'}
 
         if set_release:
@@ -408,6 +411,18 @@
         else:
             self.api.retried_POST(url)
 
+    def _release(self, set_release=None):
+        for product in self.ftp_products:
+            self._release_package('openSUSE:%s' % self.project, product)
+
+        for cd in self.livecd_products:
+            self._release_package('openSUSE:%s:Live' %
+                                  self.project, cd, set_release=release)
+
+        for cd in self.main_products:
+            self._release_package('openSUSE:%s' %
+                                  self.project, cd, set_release=release)
+
     def update_totest(self, snapshot=None):
         release = 'Snapshot%s' % snapshot if snapshot else None
         logger.info('Updating snapshot %s' % snapshot)
@@ -415,16 +430,7 @@
             self.api.switch_flag_in_prj(
                 'openSUSE:%s:ToTest' % self.project, flag='publish', 
state='disable')
 
-        for product in self.ftp_products:
-            self.release_package('openSUSE:%s' % self.project, product)
-
-        for cd in self.livecd_products:
-            self.release_package('openSUSE:%s:Live' %
-                                 self.project, cd, set_release=release)
-
-        for cd in self.main_products:
-            self.release_package(
-                'openSUSE:%s' % self.project, cd, set_release=release)
+        self._release(set_release=snapshot)
 
     def publish_factory_totest(self):
         logger.info('Publish ToTest')
@@ -450,7 +456,12 @@
         return False
 
     def totest(self):
-        current_snapshot = self.get_current_snapshot()
+        try:
+            current_snapshot = self.get_current_snapshot()
+        except NotFoundException, e:
+            # nothing in :ToTest (yet)
+            logger.warn(e)
+            current_snapshot = None
         new_snapshot = self.current_version()
 
         current_result = self.overall_result(current_snapshot)
@@ -509,6 +520,45 @@
             osc.core.http_PUT(url + '?comment=Update+version', data=version)
 
 
+class ToTestBaseNew(ToTestBase):
+
+    """Base class for new product builder"""
+    def _release(self, set_release=None):
+        query = {'cmd': 'release'}
+
+        package = '000product'
+        project = 'openSUSE:{}'.format(self.project)
+
+        if set_release:
+            query['setrelease'] = set_release
+
+        baseurl = ['source', project, package]
+
+        url = self.api.makeurl(baseurl, query=query)
+        if self.dryrun:
+            logger.info("release %s/%s (%s)" % (project, package, set_release))
+        else:
+            self.api.retried_POST(url)
+
+        # XXX still legacy
+        for cd in self.livecd_products:
+            self._release_package('openSUSE:%s:Live' %
+                                  self.project, cd, set_release=release)
+
+    def release_version(self):
+        url = self.api.makeurl(['build', 'openSUSE:%s' % self.project, 
'standard', self.arch(),
+                                '000product:openSUSE-release'])
+        f = self.api.retried_GET(url)
+        root = ET.parse(f).getroot()
+        for binary in root.findall('binary'):
+            binary = binary.get('filename', '')
+            result = re.match(r'.*-([^-]*)-[^-]*.src.rpm', binary)
+            if result:
+                return result.group(1)
+
+        raise NotFoundException("can't find %s release version" % self.project)
+
+
 class ToTestFactory(ToTestBase):
     main_products = ['_product:openSUSE-dvd5-dvd-i586',
                      '_product:openSUSE-dvd5-dvd-x86_64',
@@ -607,19 +657,20 @@
         return 2
 
 
-class ToTest423(ToTestBase):
+class ToTest150(ToTestBaseNew):
     main_products = [
-        '_product:openSUSE-cd-mini-x86_64',
-        '_product:openSUSE-dvd5-dvd-x86_64',
+        '000product:openSUSE-cd-mini-x86_64',
+        '000product:openSUSE-dvd5-dvd-x86_64',
     ]
 
-    ftp_products = ['_product:openSUSE-ftp-ftp-x86_64',
-                    '_product:openSUSE-Addon-NonOss-ftp-ftp-x86_64']
+    ftp_products = ['000product:openSUSE-ftp-ftp-x86_64',
+                    # TODO '000product:openSUSE-Addon-NonOss-ftp-ftp-x86_64'
+                    ]
 
     livecd_products = []
 
     def openqa_group(self):
-        return 'openSUSE Leap 42.3'
+        return 'openSUSE Leap 15.0'
 
     def current_version(self):
         return self.iso_build_version(self.project, self.main_products[0])
@@ -628,7 +679,7 @@
         return self.iso_build_version(self.project + ':ToTest', 
self.main_products[0])
 
     def is_snapshottable(self):
-        ret = super(ToTest423, self).is_snapshottable()
+        ret = super(ToTest150, self).is_snapshottable()
         if ret:
             # make sure all medias have the same build number
             builds = set()
@@ -646,7 +697,7 @@
 
     def update_totest(self, snapshot):
         # omit snapshot, we don't want to rename on release
-        super(ToTest423, self).update_totest()
+        super(ToTest150, self).update_totest()
 
 
 class CommandlineInterface(cmdln.Cmdln):
@@ -659,7 +710,7 @@
             'Factory:PowerPC': ToTestFactoryPowerPC,
             'Factory:ARM': ToTestFactoryARM,
             'Factory:zSystems': ToTestFactoryzSystems,
-            'Leap:42.3': ToTest423,
+            'Leap:15.0': ToTest150,
         }
 
     def get_optparser(self):

++++++ openSUSE-release-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.OfiIRC/_old  2017-10-17 01:51:49.128399720 +0200
+++ /var/tmp/diff_new_pack.OfiIRC/_new  2017-10-17 01:51:49.128399720 +0200
@@ -1,5 +1,5 @@
 name: openSUSE-release-tools
-version: 20171010.02e5000
-mtime: 1507634868
-commit: 02e50005b16b70a269ad15b97099c0a1b3035b32
+version: 20171013.b00a8f5
+mtime: 1507885185
+commit: b00a8f5ed667e32a4cec71523bddbcefb1ca20fd
 


Reply via email to