diff options
author | Jeremy Katz <katzj@redhat.com> | 2002-11-05 19:49:19 +0000 |
---|---|---|
committer | Jeremy Katz <katzj@redhat.com> | 2002-11-05 19:49:19 +0000 |
commit | 2072ef40b48c36ef346786959953c079f61ce25e (patch) | |
tree | e0857eec063fd7a6504130e650314888c94fd84d | |
parent | fc51b57d4e2f0ef85ec99229256294dc869f474a (diff) | |
download | anaconda-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.py | 4 | ||||
-rw-r--r-- | installclass.py | 1 | ||||
-rw-r--r-- | instdata.py | 1 | ||||
-rw-r--r-- | iw/examine_gui.py | 94 | ||||
-rw-r--r-- | kickstart.py | 3 | ||||
-rw-r--r-- | partedUtils.py | 21 | ||||
-rw-r--r-- | textw/upgrade_text.py | 92 |
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 " |