[PATCH 2/6] Begin removing references to anaconda.method and anaconda.methodstr.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Kickstart]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]
  Powered by Linux