From 14d7b8b25d6c03a71823e39f6a43bd06fae99898 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eray=20=C3=96zkural?= Date: Mon, 8 Aug 2005 11:27:17 +0000 Subject: [PATCH] * bug 333 fixed * comar'i ve dep'leri ignore etmek icin option koy - comar ignore implement et, comariface disaridan init ediliyor artik - packageop diye bir abstract komut tanimla --- pisi/cli/commands.py | 54 ++++++++++++++++++++++++++++++++++---------- pisi/comariface.py | 15 ++++++++++-- pisi/install.py | 7 +++--- pisi/operations.py | 5 ++-- 4 files changed, 62 insertions(+), 19 deletions(-) diff --git a/pisi/cli/commands.py b/pisi/cli/commands.py index 34b9217f..bb9fc62f 100644 --- a/pisi/cli/commands.py +++ b/pisi/cli/commands.py @@ -17,6 +17,7 @@ from pisi.config import config from pisi.purl import PUrl from common import * import pisi.toplevel +from pisi.ui import ui # helper functions def cmdObject(cmd, fail=False): @@ -100,6 +101,10 @@ class Command(object): def help(self): print getattr(self, "__doc__") + def die(self): + print 'Program terminated abnormally.' + sys.exit(-1) + class Help(Command): """Prints usage @@ -145,7 +150,38 @@ fetch all necessary files and build the package for you. for arg in self.args: pisi.toplevel.build(arg, self.authInfo) -class Install(Command): +class PackageOp(Command): + """Abstract package operation command""" + def __init__(self): + super(PackageOp, self).__init__() + + def options(self): + self.parser.add_option("", "--ignore-comar", action="store_true", + default=False, help="xxxx") + self.parser.add_option("", "--ignore-dependency", + action="store_true", + default=False, help="xxxx") + + def init(self): + self.init_db() + import pisi.comariface + if not self.options.ignore_comar: + try: + pisi.comariface.init() + except pisi.comariface.ComarError: + ui.error('Comar error encountered\n') + self.die() + + def finalize(self): + #self.finalize_db() + if not self.options.ignore_comar: + pass + #try: + # pisi.comariface.finalize() + #except pisi.comariface.ComarError: + # ui.error('Comar error encountered\n') + +class Install(PackageOp): """Install PISI packages Usage: @@ -158,19 +194,16 @@ repositories (with add-repo). def __init__(self): super(Install, self).__init__() - def options(self): - self.parser.add_option("", "--test", action="store_true", - default=True, help="xxxx") - def run(self): if not self.args: self.help() return - self.init_db() + self.init() pisi.toplevel.install(self.args) + self.finalize() -class Remove(Command): +class Remove(PackageOp): """Remove PISI packages Usage: @@ -181,17 +214,14 @@ Remove a package from your system. Just give the package name to remove. def __init__(self): super(Remove, self).__init__() - def options(self): - self.parser.add_option("", "--test", action="store_true", - default=True, help="xxxx") - def run(self): if not self.args: self.help() return - self.init_db() + self.init() pisi.toplevel.remove(self.args) + self.finalize() class Info(Command): """Display information about a package diff --git a/pisi/comariface.py b/pisi/comariface.py index 28e2081c..6c34811f 100644 --- a/pisi/comariface.py +++ b/pisi/comariface.py @@ -13,6 +13,9 @@ import socket import struct +class ComarError(Exception): + pass + class ComarIface: """A class for communicating with comard.""" RESULT = 0 @@ -31,7 +34,7 @@ class ComarIface: self.sock.connect("/tmp/comar") except: # should raise an exception here - print "Cannot connect to COMAR" + raise ComarError, 'Cannot connect to COMAR daemon' def __pack(self, cmd, id, args): size = 0 @@ -104,4 +107,12 @@ class ComarIface: """ pass -comard = ComarIface() +comard = None + +def init(): + comard = ComarIface() + +def finalize(): + if comard: + del comard + diff --git a/pisi/install.py b/pisi/install.py index 504c3597..a17bc639 100644 --- a/pisi/install.py +++ b/pisi/install.py @@ -85,9 +85,10 @@ class Installer: ui.info("Registering COMAR script %s\n" % pcomar.script) # FIXME: We must check the result of the command (possibly # with id?) - comard.register(pcomar.om, - self.metadata.package.name, - scriptPath) + if comard: + comard.register(pcomar.om, + self.metadata.package.name, + scriptPath) def check_requirements(self): """check system requirements""" diff --git a/pisi/operations.py b/pisi/operations.py index 3517a093..dcf29f1e 100644 --- a/pisi/operations.py +++ b/pisi/operations.py @@ -44,8 +44,9 @@ def remove_single(package_name): os.unlink(fpath) installdb.remove(package_name) inst_packagedb.remove_package(package_name) - # FIXME: (return value)... - comard.remove(package_name) + if comard: + # FIXME: (return value)... + comard.remove(package_name) def install_single(pkg): """install a single package from URI or ID"""