summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Katz <katzj@redhat.com>2002-11-05 19:49:19 +0000
committerJeremy Katz <katzj@redhat.com>2002-11-05 19:49:19 +0000
commit2072ef40b48c36ef346786959953c079f61ce25e (patch)
treee0857eec063fd7a6504130e650314888c94fd84d
parentfc51b57d4e2f0ef85ec99229256294dc869f474a (diff)
downloadanaconda-2072ef40b48c36ef346786959953c079f61ce25e.tar.gz
anaconda-2072ef40b48c36ef346786959953c079f61ce25e.tar.xz
anaconda-2072ef40b48c36ef346786959953c079f61ce25e.zip
first pass upgrade autodetection. the ui still needs a little work, but it
seems to work reasonably well.
-rw-r--r--dispatch.py4
-rw-r--r--installclass.py1
-rw-r--r--instdata.py1
-rw-r--r--iw/examine_gui.py94
-rw-r--r--kickstart.py3
-rw-r--r--partedUtils.py21
-rw-r--r--textw/upgrade_text.py92
7 files changed, 109 insertions, 107 deletions
diff --git a/dispatch.py b/dispatch.py
index cb6655345..de77aec42 100644
--- a/dispatch.py
+++ b/dispatch.py
@@ -54,9 +54,9 @@ installSteps = [
("language", ("intf", "id.instLanguage")),
("keyboard", ("id.instLanguage.getDefaultKeyboard()", "id.keyboard", "id.xconfig")),
("mouse", ("id.mouse",)),
- ("installtype", ("dispatch", "id", "method", "intf")),
- ("findrootparts", findRootParts, ("intf", "id", "dir", "instPath")),
+ ("findrootparts", findRootParts, ("intf", "id", "dispatch", "dir", "instPath")),
("findinstall", ("dispatch", "intf", "id", "instPath")),
+ ("installtype", ("dispatch", "id", "method", "intf")),
("partitionmethod", ("id.partitions", "id.instClass")),
("partitionobjinit", partitionObjectsInitialize, ("id.diskset",
"id.partitions",
diff --git a/installclass.py b/installclass.py
index 480bd4781..0f69f8d6f 100644
--- a/installclass.py
+++ b/installclass.py
@@ -86,6 +86,7 @@ class BaseInstallClass:
"keyboard",
"mouse",
"welcome",
+ "findrootparts",
"betanag",
"installtype",
"partitionmethod",
diff --git a/instdata.py b/instdata.py
index e627ddc53..8ec4fb718 100644
--- a/instdata.py
+++ b/instdata.py
@@ -71,6 +71,7 @@ class InstallData:
self.handleDeps = CHECK_DEPS
self.dbpath = None
self.upgradeRoot = None
+ self.rootParts = None
self.upgradeSwapInfo = None
self.upgradeDeps = ""
self.configFileData = self.tmpData
diff --git a/iw/examine_gui.py b/iw/examine_gui.py
index c8137a60b..a2ddc90d4 100644
--- a/iw/examine_gui.py
+++ b/iw/examine_gui.py
@@ -18,6 +18,10 @@ from package_gui import *
from rhpl.translate import _, N_
from constants import *
from upgrade import *
+from flags import flags
+
+import upgradeclass
+UpgradeClass = upgradeclass.InstallClass
class UpgradeExamineWindow (InstallWindow):
@@ -27,13 +31,27 @@ class UpgradeExamineWindow (InstallWindow):
def toggled (self, widget, newPart):
if widget.get_active ():
self.root = newPart
+ if self.root is None:
+ self.individualPackages.set_sensitive(gtk.FALSE)
+ else:
+ self.individualPackages.set_sensitive(gtk.TRUE)
def getNext (self):
- self.id.upgradeRoot = [self.root]
- if self.individualPackages.get_active():
- self.dispatch.skipStep("indivpackage", skip = 0)
- else:
- self.dispatch.skipStep("indivpackage")
+ if self.root is not None:
+ # set the install class to be an upgrade
+ c = UpgradeClass(flags.expert)
+ c.setSteps(self.dispatch)
+ c.setInstallData(self.id)
+
+ self.id.upgradeRoot = [self.root]
+ self.id.rootParts = self.parts
+ if self.individualPackages.get_active():
+ self.dispatch.skipStep("indivpackage", skip = 0)
+ else:
+ self.dispatch.skipStep("indivpackage")
+ self.dispatch.skipStep("installtype", skip = 1)
+ else:
+ self.dispatch.skipStep("installtype", skip = 0)
return None
@@ -44,54 +62,32 @@ class UpgradeExamineWindow (InstallWindow):
self.id = id
self.chroot = chroot
- self.parts = self.id.upgradeRoot
-
+ self.parts = self.id.rootParts
+
box = gtk.VBox (gtk.FALSE)
- if not self.parts:
- box.pack_start (gtk.Label (_("You don't have any Linux partitions."
- "\nYou can't upgrade this sytem!")),
- gtk.FALSE)
- self.ics.setNextEnabled (gtk.FALSE)
- return box
vbox = gtk.VBox (gtk.FALSE, 10)
vbox.set_border_width (8)
- if self.parts and len (self.parts) > 1:
- label = gtk.Label (_("Please select the device containing the root "
- "filesystem: "))
- label.set_alignment(0.0, 0.5)
- box.pack_start(label, gtk.FALSE)
-
- table = gtk.Table(2, 6)
- table.set_border_width (10)
- box.pack_start (table, gtk.FALSE)
- box.pack_start (gtk.HSeparator ())
- spacer = gtk.Label("")
- spacer.set_size_request(15, 1)
- table.attach(spacer, 0, 1, 2, 4, gtk.FALSE)
-
- self.ics.setNextEnabled (gtk.TRUE)
- self.root = self.parts[0]
- group = None
- row = 1
- for (part, filesystem) in self.parts:
- group = gtk.RadioButton (group, part)
- group.connect ("toggled", self.toggled, (part, filesystem))
- table.attach(group, 1, 2, row, row+1)
- row = row + 1
-
- vbox.pack_start (box, gtk.FALSE)
- else:
- # if there is only one partition, go on.
- self.ics.setNextEnabled (gtk.TRUE)
- self.root = self.parts[0]
- label = gtk.Label (_("Upgrading the %s installation "
- "on partition /dev/%s")
- % (productName, self.root[0] + "\n\n",))
- label.set_alignment(0.0, 0.5)
- vbox.pack_start(label, gtk.FALSE)
-
+ label = gui.WrappingLabel (_("The following root partitions have been found "
+ "on your system. FIXME: I NEED BETTER TEXT "
+ "HERE."))
+ label.set_alignment(0.0, 0.5)
+ box.pack_start(label, gtk.FALSE)
+
+ group = None
+ for (part, filesystem, desc) in self.parts:
+ group = gtk.RadioButton (group, "/dev/%s (%s)" %(part, desc))
+ group.connect ("toggled", self.toggled, part)
+ box.pack_start(group, gtk.FALSE)
+
+ group = gtk.RadioButton (group, "Don't upgrade")
+ group.connect("toggled", self.toggled, None)
+ box.pack_start(group, gtk.FALSE)
+
+ vbox.pack_start (box, gtk.FALSE)
+ self.root = self.parts[0]
+
self.individualPackages = gtk.CheckButton (_("_Customize packages to be "
"upgraded"))
self.individualPackages.set_active (not dispatch.stepInSkipList("indivpackage"))
@@ -99,6 +95,6 @@ class UpgradeExamineWindow (InstallWindow):
align = gtk.Alignment (0.0, 0.5)
align.add (self.individualPackages)
- vbox.pack_start (align, gtk.FALSE)
+ vbox.pack_end (align, gtk.FALSE)
return vbox
diff --git a/kickstart.py b/kickstart.py
index 1134b71e1..85bfab77e 100644
--- a/kickstart.py
+++ b/kickstart.py
@@ -1058,7 +1058,8 @@ class KickstartBase(BaseInstallClass):
dispatch.skipStep("betanag")
dispatch.skipStep("installtype")
else:
- BaseInstallClass.setSteps(self, dispatch)
+ BaseInstallClass.setSteps(self, dispatch)
+ dispatch.skipStep("findrootparts")
if self.interactive or flags.autostep:
dispatch.skipStep("installtype")
diff --git a/partedUtils.py b/partedUtils.py
index 01fe89064..5c5716165 100644
--- a/partedUtils.py
+++ b/partedUtils.py
@@ -332,7 +332,15 @@ def sniffFilesystemType(device):
# FIXME: we don't look for reiserfs, jfs, or vfat
return None
-
+
+def getRedHatReleaseString(mountpoint):
+ if os.access(mountpoint + "/etc/redhat-release", os.R_OK):
+ f = open(mountpoint + "/etc/redhat-release", "r")
+ lines = f.readlines()
+ f.close()
+ # return the first line with the newline at the end stripped
+ return lines[0][:-1]
+ return ""
class DiskSet:
"""The disks in the system."""
@@ -405,7 +413,8 @@ class DiskSet:
if found:
if os.access (mountpoint + '/etc/fstab', os.R_OK):
- rootparts.append ((dev, fs))
+ rootparts.append ((dev, fs,
+ getRedHatReleaseString(mountpoint)))
isys.umount(mountpoint)
# now, look for candidate lvm roots
@@ -433,7 +442,8 @@ class DiskSet:
if found:
if os.access (mountpoint + '/etc/fstab', os.R_OK):
- rootparts.append ((dev, fs))
+ rootparts.append ((dev, fs,
+ getRedHatReleaseString(mountpoint)))
isys.umount(mountpoint)
lvm.vgdeactivate()
@@ -467,7 +477,8 @@ class DiskSet:
part = disk.next_partition(part)
continue
if os.access (mountpoint + '/etc/fstab', os.R_OK):
- rootparts.append ((node, part.fs_type.name))
+ rootparts.append ((node, part.fs_type.name,
+ getRedHatReleaseString(mountpoint)))
isys.umount(mountpoint)
elif part.fs_type and (part.fs_type.name == "FAT"):
node = get_partition_name(part)
@@ -481,7 +492,7 @@ class DiskSet:
continue
if os.access(mountpoint + '/redhat.img', os.R_OK):
- rootparts.append((node, "vfat"))
+ rootparts.append((node, "vfat", ""))
isys.umount(mountpoint)
diff --git a/textw/upgrade_text.py b/textw/upgrade_text.py
index be5846e4a..5b10d20a7 100644
--- a/textw/upgrade_text.py
+++ b/textw/upgrade_text.py
@@ -20,6 +20,8 @@ from snack import *
from fsset import *
from flags import flags
from constants import *
+import upgradeclass
+UpgradeClass = upgradeclass.InstallClass
from rhpl.log import log
from rhpl.translate import _
@@ -186,64 +188,54 @@ class UpgradeSwapWindow:
class UpgradeExamineWindow:
def __call__ (self, screen, dispatch, intf, id, chroot):
- self.parts = upgrade.findExistingRoots(intf, id, chroot)
- parts = id.upgradeRoot
-
- if not parts:
- ButtonChoiceWindow(screen, _("Error"),
- _("You don't have any Linux partitions. You "
- "can't upgrade this system!"),
- [ TEXT_BACK_BUTTON ], width = 50)
+ parts = id.rootParts
+
+ height = min(len(parts), 11) + 1
+ if height == 12:
+ scroll = 1
+ else:
+ scroll = 0
+ partList = []
+ for (drive, fs, desc) in parts:
+ partList.append("/dev/%s (%s)" %(drive, desc))
+ partList.append("Don't Upgrade")
+
+ (button, choice) = ListboxChoiceWindow(screen, _("System to Upgrade"),
+ _("The following root partitions have been found "
+ "on your system. FIXME: I NEED BETTER TEXT "
+ "HERE."), partList,
+ [ TEXT_OK_BUTTON,
+ TEXT_BACK_BUTTON ],
+ width = 30, scroll = scroll,
+ height = height,
+ help = "upgraderoot")
+
+ if button == TEXT_BACK_CHECK:
return INSTALL_BACK
-
- if len (parts) > 1:
- height = min (len (parts), 12)
- if height == 12:
- scroll = 1
- else:
- scroll = 0
-
- partList = []
- for (drive, fs) in parts:
- partList.append(drive)
-
- (button, choice) = \
- ListboxChoiceWindow(screen, _("System to Upgrade"),
- _("What partition holds the root partition "
- "of your installation?"), partList,
- [ TEXT_OK_BUTTON, TEXT_BACK_BUTTON ], width = 30,
- scroll = scroll, height = height,
- help = "multipleroot")
- if button == TEXT_BACK_CHECK:
- return INSTALL_BACK
+ else:
+ if choice >= len(parts):
+ root = None
else:
root = parts[choice]
+
+ if root is not None:
+ c = UpgradeClass(flags.expert)
+ c.setSteps(dispatch)
+ c.setInstallData(id)
+
+ id.upgradeRoot = [root]
+ id.rootParts = parts
+ dispatch.skipStep("installtype", skip = 1)
else:
- root = parts[0]
- (drive, fs) = root
-
- rc = ButtonChoiceWindow (screen, _("Upgrade Partition"),
- _("Upgrading the %s "
- "installation on partition "
- "/dev/%s") % (productName, drive,),
- buttons = [ TEXT_OK_BUTTON,
- TEXT_BACK_BUTTON ])
- if rc == TEXT_BACK_CHECK:
- return INSTALL_BACK
-
- id.upgradeRoot = [root]
-
- # if root is on vfat we want to always display boot floppy screen
- # otherwise they can't boot!
- # This check is required for upgradeonly installclass to work so
- # we only show boot floppy screen in partitonless install case
- # XXX WRONG PLACE TO DO THIS
- #if root[1] == "vfat":
- # todo.instClass.removeFromSkipList("bootdisk")
+ dispatch.skipStep("installtype", skip = 0)
+ id.upgradeRoot = None
+
return INSTALL_OK
class CustomizeUpgradeWindow:
def __call__ (self, screen, dispatch, intf, id, chroot):
+ if id.upgradeRoot is None:
+ return INSTALL_NOOP
rc = ButtonChoiceWindow (screen, _("Customize Packages to Upgrade"),
_("The packages you have installed, "
"and any other packages which are "