Remove method references from the Anaconda object, along with various support functions that import methods and return instances of methods. This also removes method instances from the backend. --- anaconda | 79 +++++++++++++++++++++++++++++++++++----------- backend.py | 4 +-- dispatch.py | 1 - installclass.py | 19 ----------- installclasses/fedora.py | 6 --- installclasses/rhel.py | 3 -- instdata.py | 31 +----------------- livecd.py | 4 +- rescue.py | 1 - yuminstall.py | 4 +- 10 files changed, 66 insertions(+), 86 deletions(-) diff --git a/anaconda b/anaconda index 79a619a..0e8f7b3 100755 --- a/anaconda +++ b/anaconda @@ -461,7 +461,7 @@ class Anaconda: self.intf = None self.dir = None self.id = None - self.method = None + self._loaderMethodstr = None self.methodstr = None self.backend = None self.rootPath = None @@ -470,6 +470,7 @@ class Anaconda: self.rescue_mount = True self.rescue = False self.updateSrc = None + self.mediaDevice = None def setDispatch(self): self.dispatch = dispatch.Dispatcher(self) @@ -505,14 +506,64 @@ class Anaconda: self.intf = InstallInterface() - def setMethod(self, instClass): - m = instClass.getMethod(self.methodstr) - if m is not None: - self.method = apply(m, (self.methodstr, self.rootPath, self.intf)) - def setBackend(self, instClass): b = instClass.getBackend(self.methodstr) - self.backend = apply(b, (self.method, self.rootPath)) + self.backend = apply(b, (self.rootPath,)) + + def setMethodstr(self, methodstr): + # Save the method string we are given from the loader for printing out + # later. For dealing with the backends, we need to convert it into + # real URIs, though. + self._loaderMethodstr = methodstr + + if methodstr.startswith("nfs://"): + self.methodstr = "file:///" + methodstr[6:] + elif methodstr.startswith("nfsiso:/"): + self.methodstr = "file:///mnt/source2" + elif methodstr.startswith("cdrom://"): + (device, tree) = string.split(methodstr[8:], ":", 1) + + if not tree.startswith("/"): + tree = "/%s" %(tree,) + + self.mediaDevice = device + self.methodstr = "file://" + tree + else: + self.methodstr = methodstr + + def writeMethodstr(self, f): + import urllib + + if self._loaderMethodstr.startswith('ftp://') or self._loaderMethodstr.startswith('http://'): + f.write("url --url %s\n" % urllib.unquote(self._loaderMethodstr)) + elif self._loaderMethodstr.startswith('cdrom://'): + f.write("cdrom\n") + elif self._loaderMethodstr.startswith('hd://'): + pidx = string.find(self._loaderMethodstr, '//') + 2 + didx = string.find(self._loaderMethodstr[pidx:], '/') + partition = string.split(self._loaderMethodstr[pidx:pidx+didx], ':')[0] + dir = self._loaderMethodstr[pidx+didx+1:] + f.write("harddrive --partition=%s --dir=%s\n" % (partition, dir)) + elif self._loaderMethodstr.startswith('nfs:/') or self._loaderMethodstr.startswith('nfsiso:'): + (method, tmpmntpt) = string.split(self._loaderMethodstr, ':') + # clean up extra '/' at front + if tmpmntpt[1] == '/': + rawmntpt = tmpmntpt[1:] + else: + rawmntpt = tmpmntpt + mntpt = os.path.normpath(rawmntpt) + + # find mntpt in /proc/mounts so we can get NFS server info + fproc = open("/proc/mounts", "r") + lines = fproc.readlines() + fproc.close() + + for l in lines: + minfo = string.split(l) + if len(minfo) > 1 and minfo[1] == mntpt and minfo[0].find(":") != -1: + (srv, dir) = minfo[0].split(':') + f.write("nfs --server=%s --dir=%s\n" % (srv, dir)) + break if __name__ == "__main__": anaconda = Anaconda() @@ -597,7 +648,8 @@ if __name__ == "__main__": if opts.method: if opts.method[0] == '@': expandFTPMethod(opts) - anaconda.methodstr = opts.method + + anaconda.setMethodstr(opts.method) if opts.module: for mod in opts.module: @@ -845,17 +897,6 @@ if __name__ == "__main__": if not flags.test and flags.setupFilesystems: iutil.makeDriveDeviceNodes() - # imports after setting up the path - if anaconda.methodstr: - anaconda.setMethod(instClass) - - if not anaconda.method: - anaconda.intf.messageWindow(_("Unknown install method"), - _("You have specified an install method " - "which isn't supported by anaconda.")) - log.critical (_("unknown install method: %s"), opts.method) - sys.exit(1) - anaconda.setBackend(instClass) anaconda.id = instClass.installDataClass(anaconda, extraModules, anaconda.methodstr, opts.display_mode, anaconda.backend) diff --git a/backend.py b/backend.py index 9ec560b..7632f0d 100644 --- a/backend.py +++ b/backend.py @@ -31,12 +31,10 @@ log = logging.getLogger("anaconda") class AnacondaBackend: - def __init__(self, method, instPath): + def __init__(self, instPath): """Abstract backend class all backends should inherit from this - @param method: Object of InstallMethod type @param instPath: root path for the installation to occur""" - self.method = method self.instPath = instPath self.instLog = None self.modeText = "" diff --git a/dispatch.py b/dispatch.py index 4c991e4..ac4b4a0 100644 --- a/dispatch.py +++ b/dispatch.py @@ -238,7 +238,6 @@ class Dispatcher(object): self.step = None self.skipSteps = {} - self.method = anaconda.method self.firstStep = 0 def _getDir(self): diff --git a/installclass.py b/installclass.py index d6a8806..74036c5 100644 --- a/installclass.py +++ b/installclass.py @@ -412,25 +412,6 @@ class BaseInstallClass(object): mouse.set(mouseName, emulThree, device) id.setMouse(mouse) - def getMethod(self, methodstr): - if methodstr.startswith('cdrom://'): - from image import CdromInstallMethod - return CdromInstallMethod - elif methodstr.startswith('nfs:/'): - from image import NfsInstallMethod - return NfsInstallMethod - elif methodstr.startswith('nfsiso:/'): - from image import NfsIsoInstallMethod - return NfsIsoInstallMethod - elif methodstr.startswith('ftp://') or methodstr.startswith('http://'): - from urlinstall import UrlInstallMethod - return UrlInstallMethod - elif methodstr.startswith('hd://'): - from harddrive import HardDriveInstallMethod - return HardDriveInstallMethod - else: - return None - def getBackend(self, methodstr): # this should be overriden in distro install classes from backend import AnacondaBackend diff --git a/installclasses/fedora.py b/installclasses/fedora.py index 696a78c..6f03571 100644 --- a/installclasses/fedora.py +++ b/installclasses/fedora.py @@ -43,12 +43,6 @@ class InstallClass(BaseInstallClass): BaseInstallClass.setSteps(self, anaconda); anaconda.dispatch.skipStep("partition") - def getMethod(self, methodstr): - if methodstr.startswith("livecd://"): - import livecd - return livecd.LiveCDImageMethod - return BaseInstallClass.getMethod(self, methodstr) - def getBackend(self, methodstr): if methodstr.startswith("livecd://"): import livecd diff --git a/installclasses/rhel.py b/installclasses/rhel.py index b6e8cda..387443e 100644 --- a/installclasses/rhel.py +++ b/installclasses/rhel.py @@ -158,9 +158,6 @@ class InstallClass(BaseInstallClass): log.info("repopaths is %s" %(self.repopaths,)) - def getMethod(self, methodstr): - return BaseInstallClass.getMethod(self, methodstr) - def getBackend(self, methodstr): return yuminstall.YumBackend diff --git a/instdata.py b/instdata.py index 784fdb6..cdb0574 100644 --- a/instdata.py +++ b/instdata.py @@ -212,36 +212,7 @@ class InstallData: f.write("install\n"); # figure out the install method and write out a line - if self.methodstr.startswith('ftp://') or self.methodstr.startswith('http://'): - f.write("url --url %s\n" % urllib.unquote(self.methodstr)) - elif self.methodstr.startswith('cdrom://'): - f.write("cdrom\n") - elif self.methodstr.startswith('hd://'): - pidx = string.find(self.methodstr, '//') + 2 - didx = string.find(self.methodstr[pidx:], '/') - partition = string.split(self.methodstr[pidx:pidx+didx], ':')[0] - dir = self.methodstr[pidx+didx+1:] - f.write("harddrive --partition=%s --dir=%s\n" % (partition, dir)) - elif self.methodstr.startswith('nfs:/') or self.methodstr.startswith('nfsiso:'): - (method, tmpmntpt) = string.split(self.methodstr, ':') - # clean up extra '/' at front - if tmpmntpt[1] == '/': - rawmntpt = tmpmntpt[1:] - else: - rawmntpt = tmpmntpt - mntpt = os.path.normpath(rawmntpt) - - # find mntpt in /proc/mounts so we can get NFS server info - fproc = open("/proc/mounts", "r") - lines = fproc.readlines() - fproc.close() - - for l in lines: - minfo = string.split(l) - if len(minfo) > 1 and minfo[1] == mntpt and minfo[0].find(":") != -1: - (srv, dir) = minfo[0].split(':') - f.write("nfs --server=%s --dir=%s\n" % (srv, dir)) - break + self.anaconda.writeMethodstr(f) if self.instClass.skipkey: f.write("key --skip\n") diff --git a/livecd.py b/livecd.py index d718bfe..0e41e60 100644 --- a/livecd.py +++ b/livecd.py @@ -141,8 +141,8 @@ class LiveCDImageMethod(installmethod.InstallMethod): return blkcnt * blksize / 1024 / 1024 class LiveCDCopyBackend(backend.AnacondaBackend): - def __init__(self, method, instPath): - backend.AnacondaBackend.__init__(self, method, instPath) + def __init__(self, instPath): + backend.AnacondaBackend.__init__(self, instPath) flags.livecdInstall = True self.supportsUpgrades = False self.supportsPackageSelection = False diff --git a/rescue.py b/rescue.py index 0c5a039..9cb1003 100644 --- a/rescue.py +++ b/rescue.py @@ -276,7 +276,6 @@ def runRescue(anaconda, instClass): screen = SnackScreen() anaconda.intf = RescueInterface(screen) - anaconda.setMethod(instClass) # prompt to see if we should try and find root filesystem and mount # everything in /etc/fstab on that root diff --git a/yuminstall.py b/yuminstall.py index a7a0758..67f6d66 100644 --- a/yuminstall.py +++ b/yuminstall.py @@ -576,8 +576,8 @@ class AnacondaYum(YumSorter): return False class YumBackend(AnacondaBackend): - def __init__ (self, method, instPath): - AnacondaBackend.__init__(self, method, instPath) + def __init__ (self, instPath): + AnacondaBackend.__init__(self, instPath) self.supportsPackageSelection = True def doInitialSetup(self, anaconda): -- 1.5.3.4 _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list