#
# upgrade_migratefs_gui.py: dialog for migrating filesystems on upgrades
#
# Copyright (C) 2001, 2002 Red Hat, Inc. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
#
# Author(s): Mike Fulbright
#
from iw_gui import *
from constants import *
from storage.formats import getFormat
from storage.deviceaction import ActionMigrateFormat
import string
import isys
import iutil
import gtk
import gettext
_ = lambda x: gettext.ldgettext("anaconda", x)
import logging
log = logging.getLogger("anaconda")
class UpgradeMigrateFSWindow (InstallWindow):
windowTitle = N_("Migrate File Systems")
def getNext (self):
# I don't like this but I also don't see a better way right now
for (cb, entry) in self.cbs:
action = self.devicetree.findActions(device=entry,
type="migrate")
if cb.get_active():
if action:
# the migrate action has already been scheduled
continue
newfs = getFormat(entry.format.migrationTarget)
if not newfs:
log.warning("failed to get new filesystem type (%s)"
% entry.format.migrationTarget)
continue
action = ActionMigrateFormat(entry)
self.devicetree.registerAction(action)
elif action:
self.devicetree.cancelAction(action)
return None
def getScreen (self, anaconda):
self.devicetree = anaconda.id.storage.devicetree
self.migent = anaconda.id.storage.migratableDevices
box = gtk.VBox (False, 5)
box.set_border_width (5)
text = (_("This release of %(productName)s supports "
"an updated file system, which has several "
"benefits over the file system traditionally shipped "
"in %(productName)s. This installation program can migrate "
"formatted partitions without data loss.\n\n"
"Which of these partitions would you like to migrate?") %
{'productName': productName})
label = gtk.Label (text)
label.set_alignment (0.5, 0.0)
label.set_size_request(400, -1)
label.set_line_wrap (True)
box.pack_start(label, False)
cbox = gtk.VBox(False, 5)
self.cbs = []
for entry in self.migent:
# don't allow the user to migrate /boot to ext4 (#439944)
if (getattr(entry.format, "mountpoint", None) == "/boot" and
not entry.format.migrate and entry.format.type == "ext3"):
continue
cb = gtk.CheckButton("%s - %s - %s" % (entry.path,
entry.format.name,
getattr(entry.format,
"mountpoint",
None)))
cb.set_active(entry.format.migrate)
cbox.pack_start(cb, False)
self.cbs.append((cb, entry))
sw = gtk.ScrolledWindow()
sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
sw.add_with_viewport(cbox)
sw.set_size_request(-1, 175)
viewport = sw.get_children()[0]
viewport.set_shadow_type(gtk.SHADOW_IN)
a = gtk.Alignment(0.25, 0.5)
a.add(sw)
box.pack_start(a, True)
a = gtk.Alignment(0.5, 0.5)
a.add(box)
return a