revisor.spec.in | 30 +++++++++
revisor/__init__.py.in | 11 ++-
revisor/base.py | 60 ++++++++++++++----
revisor/modhub/__init__.py | 144 +++++++++++++++++++++------------------------
4 files changed, 154 insertions(+), 91 deletions(-)
New commits:
commit af900dff2640b595948c4c9d7d365a0edd99c047
Merge: c5cfa1d... e708908...
Author: Jeroen van Meeuwen (Fedora Unity) <kanarip(a)fedoraunity.org>
Date: Fri Dec 12 15:47:26 2008 +0100
Merge branch 'master' of
ssh://git.fedorahosted.org/git/revisor
Conflicts:
revisor/base.py
revisor/modhub/__init__.py
diff --cc revisor/base.py
index 34adcbd,e797c9b..2c11ddb
--- a/revisor/base.py
+++ b/revisor/base.py
@@@ -96,24 -96,27 +96,24 @@@ class RevisorBase
self.cfg.setup_yum()
self.cfg.setup_ks()
-
- def run(self):
- """Split into either running CLI, Server or
GUI"""
+
+ def run(self):
+ """Split into either running CLI, Server, Hub or GUI"""
if self.cfg.cli_mode:
- import revisor.cli
self.log.debug(_("Running Revisor in CLI mode..."), level=1)
+ import revisor.cli
self.cli = revisor.cli.RevisorCLI(self)
self.cli.run()
- #not optimal yet
- # TODO: remove redundant code
- elif hasattr(self.cfg,"hub_mode"):
+ elif hasattr(self.cfg,"server_mode") or
hasattr(self.cfg."hub_mode"):
+ # Check hub_mode,
+ # Then check server_mode,
+ # If we have both attributes, but none is set, fall back to GUI mode
if self.cfg.hub_mode:
self.log.debug(_("Running Revisor in Hub mode..."), level=1)
- self.server = self.plugins.modhub
- self.server.run(base=self)
- elif self.cfg.gui_mode:
- self.log.debug(_("Running Revisor in GUI mode..."), level=1)
- self.gui = self.plugins.modgui
- self.gui.run(base=self)
- elif hasattr(self.cfg,"server_mode"):
- if self.cfg.server_mode:
+ self.hub = self.plugins.modhub
+ self.cfg.gui_mode = False #hack!
+ self.hub.run(base=self)
+ elif self.cfg.server_mode:
self.log.debug(_("Running Revisor in RPC Server mode..."),
level=1)
self.server = self.plugins.modserver
self.server.run(base=self)
diff --cc revisor/modhub/__init__.py
index 85d8937,7b20883..24abc51
--- a/revisor/modhub/__init__.py
+++ b/revisor/modhub/__init__.py
@@@ -90,17 -89,24 +90,19 @@@ class RevisorHub()
class RevisorXMLRPCInterface(object):
""" Functionality to expose to the XML-RPC interface.
"""
- def __init__(self, cfg):
- try:
- if cfg:
- self.cfg = cfg
- else:
- # FIXME: Initialize ConfigStore or return Error
- pass
- except NameError:
- pass
-
- self.sessions = dict()
- #self.next_session = 0
- pass
-
- def session_set_status(self, id, status):
- self.sessions[sid].set_status(id, status)
- return 1
+ def __init__(self, cfg=None):
- #if cfg == None:
- # FIXME: Initialize ConfigStore or return Error
- #pass
- #else:
- #self.cfg = cfg
-
- #self.sessions = dict()
- #self.next_session = 0
- pass
++ try:
++ if cfg:
++ self.cfg = cfg
++ else:
++ # FIXME: Initialize ConfigStore or return Error
++ pass
++ except NameError:
++ pass
++ self.sessions = dict()
++ self.next_session = 0
++ pass
class Session(object):
def __init__(self, id):
commit c5cfa1d3881e0359f4f9a629cd83f85f7ad416b1
Author: Jeroen van Meeuwen (Fedora Unity) <kanarip(a)fedoraunity.org>
Date: Fri Dec 12 15:43:39 2008 +0100
Add a stuff for packaging modhub
diff --git a/revisor.spec.in b/revisor.spec.in
index acf87f2..12f0901 100644
--- a/revisor.spec.in
+++ b/revisor.spec.in
@@ -3,6 +3,7 @@
%define pkg_cobbler 1
%define pkg_comps 1
%define pkg_delta 0
+%define pkg_hub 0
%define pkg_isolinux 1
%define pkg_jigdo 0
%define pkg_rebrand 0
@@ -71,6 +72,9 @@ Obsoletes: revisor-cobbler
%if ! %{pkg_delta}
Obsoletes: revisor-delta
%endif
+%if ! %{pkg_hub}
+Obsoletes: revisor-hub
+%endif
%if ! %{pkg_isolinux}
Obsoletes: revisor-isolinux
%endif
@@ -156,6 +160,19 @@ Requires: system-config-kickstart
This is the Revisor GUI package
##
+## Revisor HUB plugin
+##
+%if %{pkg_hub}
+%package hub
+Summary: Revisor Hub for build farms
+Group: Applications/System
+Requires: revisor-cli = %{version}-%{release}
+
+%description hub
+Revisor build farms need a hub. This is it.
+%endif
+
+##
## Revisor customize isolinux.cfg
##
%if %{pkg_isolinux}
@@ -288,6 +305,10 @@ make install DESTDIR=$RPM_BUILD_ROOT
rm -rf %{buildroot}/%{python_sitelib}/revisor/moddelta
%endif
+%if ! %{pkg_hub}
+ rm -rf %{buildroot}/%{python_sitelib}/revisor/modhub
+%endif
+
%if ! %{pkg_isolinux}
rm -rf %{buildroot}/%{python_sitelib}/revisor/modisolinux
%endif
@@ -392,6 +413,15 @@ rm -rf $RPM_BUILD_ROOT
%{_datadir}/pixmaps/*
%{_datadir}/applications/*.desktop
+%if %{pkg_hub}
+%files hub
+%defattr(-,root,root,-)
+%dir %{python_sitelib}/revisor/modhub
+%{python_sitelib}/revisor/modhub/*.py
+%{python_sitelib}/revisor/modhub/*.pyc
+%{python_sitelib}/revisor/modhub/*.pyo
+%endif
+
%if %{pkg_isolinux}
%files isolinux
%defattr(-,root,root,-)
commit 8163c9544889e17f6ef53cd55c173e07b50100b6
Author: Jeroen van Meeuwen (Fedora Unity) <kanarip(a)fedoraunity.org>
Date: Fri Dec 12 15:42:29 2008 +0100
Enhance the package nevr/nevra resolution by determining whether we have complete
nevr(a)
in the following forms:
- name-version-release.disttag.arch
- name-version-release.arch
- name-version-release.disttag
- name-version-release
diff --git a/revisor/base.py b/revisor/base.py
index 1bc9efe..34adcbd 100644
--- a/revisor/base.py
+++ b/revisor/base.py
@@ -27,7 +27,7 @@ import time
import math
import re
import revisor
-import rpmUtils.miscutils
+import rpmUtils.arch
import shutil
import fnmatch
import yum
@@ -563,10 +563,43 @@ class RevisorBase:
except yum.Errors.PackageSackError, e:
if
self.cfg.ksobj._get("packages","handleMissing") !=
kickstart.constants.KS_MISSING_IGNORE:
warnings.append(e.value)
- # Here's where we try and see if this is a rpm -qa list
+ # Here's where we try and see if this is a rpm -qa list
elif re.match('.*-.*-.*\..*', pkg):
+ # This format can have two forms:
+ # name-ver-release.arch
+ # name-ver-release
+
+ # The first thing we need to get is the name and ver.
+ # This is relatively easy
(name, ver, relarch) = pkg.rsplit('-', 2)
- (rel, arch) = relarch.rsplit('.', 1)
+
+ # For the latter part however (release.arch or release)...
+ try:
+ # Try splitting rel.disttag.arch
+ (rel, dist, arch) = relarch.rsplit('.', 2)
+ except ValueError:
+ # Failed... :/
+ # So, is this rel.arch? or rel.disttag?
+
+ # Let's try and split on .
+ # If it errors, we only have the release
+ # If it's OK, we either have rel, arch, or rel, disttag
+
+ try:
+ (foo, bar) = relarch.split('.', 2)
+ # Now that we've split, see if bar is an arch or a
disttag
+ if rpmUtils.arch.arches.has_key(bar):
+ arch = bar
+ else:
+ arch = None
+ # If we didn't find a valid architecture, then
+ # bar is part of the release (e.g. disttag)
+ rel = "%s.%s" % (foo, bar)
+
+ except ValueError:
+ # Apparently our string only holds the release
+ rel = relarch
+
pkgs = self.cfg.yumobj.pkgSack.searchNevra(name=name, ver=ver,
rel=rel, arch=arch)
if len(pkgs) > 1:
warnings.append(_("More then one package found for
%s-%s-%s.%s - going to add them all to the transaction") % (name,ver,rel,arch))
commit 6b8094429e077ddca46a9a872ea148fdf564dc7a
Author: Mads Kiilerich <mads(a)kiilerich.com>
Date: Fri Dec 12 14:43:54 2008 +0100
Return non-zero error code in case of error
diff --git a/revisor/__init__.py.in b/revisor/__init__.py.in
index 13ad690..73fe257 100644
--- a/revisor/__init__.py.in
+++ b/revisor/__init__.py.in
@@ -436,15 +436,20 @@ class Revisor:
def run(self):
"""Run Forest, RUN!"""
+
+ exitcode = 0
+
try:
self.base.run()
+ except SystemExit:
+ pass
except KeyboardInterrupt:
+ exitcode = 1
self.base.log.info(_("Interrupted by user"))
# except TypeError, e:
# self.log.error(_("Type Error: %s") % e)
- except SystemExit:
- pass
except:
+ exitcode = 2
traceback.print_exc()
print >> sys.stderr, _("Traceback occurred, please report a bug at
http://fedorahosted.org/revisor")
finally:
@@ -462,3 +467,5 @@ class Revisor:
for dir in ["revisor-yumcache"]:
if os.access(os.path.join(self.base.cfg.working_directory, dir),
os.R_OK):
shutil.rmtree(os.path.join(self.base.cfg.working_directory,
dir))
+
+ sys.exit(exitcode)
\ No newline at end of file
commit efe46471a01aedd2c1bd8ae4f93e8c08ef1af001
Author: Jeroen van Meeuwen (Fedora Unity) <kanarip(a)fedoraunity.org>
Date: Fri Dec 12 14:17:13 2008 +0100
Fix the indentation. Use 4 spaces to a tab
diff --git a/revisor/base.py b/revisor/base.py
index 0348035..1bc9efe 100644
--- a/revisor/base.py
+++ b/revisor/base.py
@@ -104,21 +104,29 @@ class RevisorBase:
self.log.debug(_("Running Revisor in CLI mode..."), level=1)
self.cli = revisor.cli.RevisorCLI(self)
self.cli.run()
- elif hasattr(self.cfg,"server_mode"):
- # added hubmode
- if self.cfg.hub_mode:
- self.log.debug(_("Running Revisor in Hub mode..."), level=1)
- self.server = self.plugins.modhub
- self.cfg.gui_mode = False #hack!
- self.server.run(base=self)
- elif self.cfg.server_mode:
- self.log.debug(_("Running Revisor in RPC Server mode..."), level=1)
- self.server = self.plugins.modserver
- self.server.run(base=self)
- elif self.cfg.gui_mode:
- self.log.debug(_("Running Revisor in GUI mode..."), level=1)
- self.gui = self.plugins.modgui
- self.gui.run(base=self)
+ elif hasattr(self.cfg,"server_mode") or
hasattr(self.cfg."hub_mode"):
+ # Check hub_mode,
+ # Then check server_mode,
+ # If we have both attributes, but none is set, fall back to GUI mode
+ if self.cfg.hub_mode:
+ self.log.debug(_("Running Revisor in Hub mode..."), level=1)
+ self.hub = self.plugins.modhub
+ self.cfg.gui_mode = False #hack!
+ self.hub.run(base=self)
+ elif self.cfg.server_mode:
+ self.log.debug(_("Running Revisor in RPC Server mode..."),
level=1)
+ self.server = self.plugins.modserver
+ self.server.run(base=self)
+ elif self.cfg.gui_mode:
+ self.log.debug(_("Running Revisor in GUI mode..."), level=1)
+ self.gui = self.plugins.modgui
+ self.gui.run(base=self)
+
+ # And, finally, fall back to GUI mode
+ elif self.cfg.gui_mode:
+ self.log.debug(_("Running Revisor in GUI mode..."), level=1)
+ self.gui = self.plugins.modgui
+ self.gui.run(base=self)
def create_logger(self):
"""Create a logger instance using
cli_options.debuglevel"""
diff --git a/revisor/modhub/__init__.py b/revisor/modhub/__init__.py
index 4af145c..85d8937 100644
--- a/revisor/modhub/__init__.py
+++ b/revisor/modhub/__init__.py
@@ -12,94 +12,94 @@ import os
#import logger.Logger
class RevisorHub():
- """ Hub Mode """
-
- def __init__(self):
- # blaat
- print "HELLO HUB!!!!!!!"
-
- def do_xmlrpc(self, cfg):
- """ Get our xmlrpc hub running. """
- xinterface = RevisorXMLRPCInterface(cfg)
- hub = RevisorXMLRPCServer(('', int(cfg.hub_port)))
- hub.register_introspection_functions()
- cfg.log.info("XMLRPC Server running on port %s" % cfg.hub_port)
- hub.register_instance(xinterface)
- while True:
- try:
- hub.serve_forever()
- except IOError:
- # interrupted? try to serve again
- time.sleep(0.5)
-
- def run(self, base):
- print "HUB mode started!"
- if base.cfg.fork_mode:
- pid = os.fork()
- self.do_xmlrpc(base.cfg)
- else:
- try:
- self.do_xmlrpc(base.cfg)
- pass
- except KeyboardInterrupt:
+ """ Hub Mode """
+
+ def __init__(self):
+ # blaat
+ print "HELLO HUB!!!!!!!"
+
+ def do_xmlrpc(self, cfg):
+ """ Get our xmlrpc hub running. """
+ xinterface = RevisorXMLRPCInterface(cfg)
+ hub = RevisorXMLRPCServer(('', int(cfg.hub_port)))
+ hub.register_introspection_functions()
+ cfg.log.info("XMLRPC Server running on port %s" % cfg.hub_port)
+ hub.register_instance(xinterface)
+ while True:
+ try:
+ hub.serve_forever()
+ except IOError:
+ # interrupted? try to serve again
+ time.sleep(0.5)
+
+ def run(self, base):
+ print "HUB mode started!"
+ if base.cfg.fork_mode:
+ pid = os.fork()
+ self.do_xmlrpc(base.cfg)
+ else:
+ try:
+ self.do_xmlrpc(base.cfg)
+ pass
+ except KeyboardInterrupt:
#base.log.info("Shutting down...")
- pass
-
- def add_options(self, parser):
- modhub_group = parser.add_option_group("Hub Options")
- modhub_group.add_option( "--hub",
+ pass
+
+ def add_options(self, parser):
+ modhub_group = parser.add_option_group("Hub Options")
+ modhub_group.add_option( "--hub",
dest = "hub_mode",
action = "store_true",
default = False,
help = _("Use the Hub mode for distributed
composing."))
- modhub_group.add_option( "--hub-port",
+ modhub_group.add_option( "--hub-port",
dest = "hub_port",
action = "store",
default = "9321",
help = _("Port to start Hub mode on."),
metavar = "[hub-port]")
- modhub_group.add_option("--forkhub",
- dest = "forkhub_mode",
- action = "store",
- default = False,
- help = _("Start the Hub mode and fork."),
- metavar = "[boolean]")
-
- #def check_options(self, cfg, cli_options):
+ modhub_group.add_option("--forkhub",
+ dest = "forkhub_mode",
+ action = "store",
+ default = False,
+ help = _("Start the Hub mode and fork."),
+ metavar = "[boolean]")
+
+ #def check_options(self, cfg, cli_options):
# Cheater! Found a cheater!
- #print cli_options.server_mode
+ #print cli_options.server_mode
#if cli_options.server_mode:
- #cfg.server_mode = False
- #cfg.hub_mode = True
+ #cfg.server_mode = False
+ #cfg.hub_mode = True
#cfg.gui_mode = False
#cfg.cli_mode = False
- #print "blaat"
+ #print "blaat"
#pass
-
- def set_defaults(self, defaults):
- #defaults.db_server = x.x.x.x
- #defaults.db_type = mysql #for later development
- #defaults.setport = "3306"
- #defaults.username = "blaat"
- #defaults.password = "pass"
- #defaults.dbname = "revisor-hubdb"
- #defaults.configfile = "blaat"
- pass
+
+ def set_defaults(self, defaults):
+ #defaults.db_server = x.x.x.x
+ #defaults.db_type = mysql #for later development
+ #defaults.setport = "3306"
+ #defaults.username = "blaat"
+ #defaults.password = "pass"
+ #defaults.dbname = "revisor-hubdb"
+ #defaults.configfile = "blaat"
+ pass
class RevisorXMLRPCInterface(object):
""" Functionality to expose to the XML-RPC interface.
"""
def __init__(self, cfg=None):
- #if cfg == None:
+ #if cfg == None:
# FIXME: Initialize ConfigStore or return Error
#pass
#else:
- #self.cfg = cfg
-
+ #self.cfg = cfg
+
#self.sessions = dict()
#self.next_session = 0
- pass
+ pass
class Session(object):