summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--text.py3
-rw-r--r--textw/partition_text.py1484
2 files changed, 12 insertions, 1475 deletions
diff --git a/text.py b/text.py
index 61c5fb960..a632b782d 100644
--- a/text.py
+++ b/text.py
@@ -48,10 +48,9 @@ stepToClasses = {
"language" : ("language_text", "LanguageWindow"),
"keyboard" : ("keyboard_text", "KeyboardWindow"),
"welcome" : ("welcome_text", "WelcomeWindow"),
- "parttype" : ("partition_text", "PartitionTypeWindow"),
+ "parttype" : ("partition_text", "PartitionTypeWindow"),
"addswap" : ("upgrade_text", "UpgradeSwapWindow"),
"upgrademigratefs" : ("upgrade_text", "UpgradeMigrateFSWindow"),
- "partition": ("partition_text", ("PartitionWindow")),
"zfcpconfig": ("zfcp_text", ("ZFCPWindow")),
"findinstall" : ("upgrade_text", ("UpgradeExamineWindow")),
"upgbootloader": ("upgrade_bootloader_text", "UpgradeBootloaderWindow"),
diff --git a/textw/partition_text.py b/textw/partition_text.py
index f11222e40..77f937dcc 100644
--- a/textw/partition_text.py
+++ b/textw/partition_text.py
@@ -44,1451 +44,6 @@ _ = lambda x: gettext.ldgettext("anaconda", x)
import logging
log = logging.getLogger("anaconda")
-# sanity checking for various numeric input boxes
-def invalidInteger(str):
- ints = string.digits
- if str == "":
- return _("Must specify a value")
- for n in str:
- if n not in ints:
- return _("Requested value is not an integer")
- if len(str) > 9:
- return _("Requested value is too large")
-
- return None
-
-class PartitionWindow:
- def _findFirstUnused(self, dict):
- keys = dict.keys()
- i = 0
-
- while True:
- if i in keys:
- i += 1
- else:
- return i
-
- def populate(self):
- # XXX we really should separate this stuff out into interface
- # independent bits...
- self.lb.clear()
-
- # first do LVM
- lvmrequests = self.partitions.getLVMRequests()
- if lvmrequests:
- for vgname in lvmrequests.keys():
- vgrequest = self.partitions.getRequestByVolumeGroupName(vgname)
- size = vgrequest.getActualSize(self.partitions, self.diskset)
- device = "VG %s" % (vgname,)
- self.lb.append(["%s" % (device,),
- "", "", "%dM" %(size),
- "VolGroup", ""], str(vgrequest.uniqueID),
- [LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT])
-
- for lvrequest in lvmrequests[vgname]:
- lvdevice = "LV %s" % (lvrequest.logicalVolumeName,)
- if lvrequest.fstype and lvrequest.mountpoint:
- mntpt = lvrequest.mountpoint
- else:
- mntpt = ""
- lvsize = lvrequest.getActualSize(self.partitions, self.diskset)
- ptype = lvrequest.fstype.getName()
- self.lb.append(["%s" %(lvdevice),
- "", "", "%dM" %(lvsize),
- "%s" %(ptype), "%s" %(mntpt)], str(lvrequest.uniqueID),
- [LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT])
-
-
- # next, add the raid partitions
- self.raidminors = {}
- raidrequests = self.partitions.getRaidRequests()
- if raidrequests:
- for request in raidrequests:
- if request and request.mountpoint:
- mount = request.mountpoint
- else:
- mount = ""
-
- if request.fstype:
- ptype = request.fstype.getName()
- else:
- ptype = _("None")
-
- try:
- self.raidminors[request.raidminor] = True
- device = "/dev/md%d" % (request.raidminor,)
- except:
- minor = self._findFirstUnused(self.raidminors)
- self.raidminors[minor] = True
- device = _("RAID Device %s" %(str(minor)))
-
- size = request.size
- self.lb.append(["%s" %(device),
- "", "", "%dM" %(size),
- "%s" %(ptype), "%s" %(mount)], str(request.uniqueID),
- [LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT])
-
- # next, add the drives and partitions to the list
- drives = self.diskset.disks.keys()
- drives.sort()
- for drive in drives:
- disk = self.diskset.disks[drive]
- sectorsPerCyl = disk.dev.heads * disk.dev.sectors
-
- self.lb.append([devify(drive),"","","","",""], None)
-
- extendedParent = None
- part = disk.next_partition()
- while part:
- if part.type & parted.PARTITION_METADATA:
-# print("partition %s has type %d" %(get_partition_name(part), part.type))
- part = disk.next_partition(part)
- continue
- # ignore the tiny < 1 MB partitions (#119479)
- if getPartSizeMB(part) <= 1.0:
- if not part.is_active() or not part.get_flag(parted.PARTITION_BOOT):
- part = disk.next_partition(part)
- continue
-
- device = get_partition_name(part)
- request = self.partitions.getRequestByDeviceName(device)
- if request and request.mountpoint:
- mount = request.mountpoint
- else:
- mount = ""
-
- if part.type & parted.PARTITION_FREESPACE:
- ptype = _("Free space")
- elif part.type & parted.PARTITION_EXTENDED:
- ptype = _("Extended")
- elif part.get_flag(parted.PARTITION_RAID) == 1:
- ptype = _("software RAID")
- elif part.fs_type:
- if request and request.fstype != None:
- ptype = request.fstype.getName()
- if ptype == "foreign":
- ptype = map_foreign_to_fsname(part.native_type)
- else:
- ptype = part.fs_type.name
- else:
- if request and request.fstype != None:
- ptype = request.fstype.getName()
- if ptype == "foreign":
- ptype = map_foreign_to_fsname(part.native_type)
- else:
- ptype = _("None")
-
- start = (part.geom.start / sectorsPerCyl) + 1
- end = (part.geom.end / sectorsPerCyl) + 1
- size = (part.geom.length * disk.dev.sector_size / (1024.0 * 1024.0))
-
- if part.type & parted.PARTITION_EXTENDED:
- if extendedParent:
- raise RuntimeError, ("can't handle more than"
- "one extended partition per disk")
- extendedParent = part.num
- indent = 2 * " "
- elif part.type & parted.PARTITION_LOGICAL:
- if not extendedParent:
- raise RuntimeError("crossed logical partition "
- "before extended")
- indent = 4 * " "
- else:
- indent = 2 * " "
-
- if part.type & parted.PARTITION_FREESPACE:
- self.lb.append(["%s%s" %(indent, _("Free space")),
- "%d" %(start),
- "%d" %(end),
- "%dM" %(size),
- "%s" %(ptype),
- ""], part,
- [LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT])
-
- else:
- dev = devify(get_partition_name(part))
- # save some space per #90838
- if dev.startswith("/dev/iseries/"):
- dev = dev[13:]
- elif dev.startswith("/dev/"):
- dev = dev[5:]
- self.lb.append(["%s%s" %(indent, dev),
- "%d" %(start),
- "%d" %(end),
- "%dM" %(size),
- "%s" %(ptype),
- "%s" %(mount)], part,
- [LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT])
- part = disk.next_partition(part)
-
- def refresh(self):
- # XXX need some way to stay at the same place in the list after
- # repopulating
-
- # XXXX - Backup some info which doPartitioning munges if it fails
- origInfoDict = {}
- for request in self.partitions.requests:
- try:
- origInfoDict[request.uniqueID] = (request.requestSize, request.currentDrive)
- except:
- pass
-
- try:
- doPartitioning(self.diskset, self.partitions)
- rc = 0
- except PartitioningError, msg:
- try:
- for request in self.partitions.requests:
- if request.uniqueID in origInfoDict.keys():
- (request.requestSize, request.currentDrive) = origInfoDict[request.uniqueID]
- except:
- log.error("Failed to restore original info")
-
- self.intf.messageWindow(_("Error Partitioning"),
- _("Could not allocate requested partitions: %s.") % (msg))
- rc = -1
- except PartitioningWarning, msg:
- rc = ButtonChoiceWindow(self.screen, _("Warning"), _("Warning: %s") %(msg),
- buttons = [ (_("Modify Partition"), "modify"), (_("Add anyway"), "add") ])
-
- if rc == "modify":
- rc = -1
- else:
- rc = 0
- reqs = self.partitions.getBootableRequest()
- if reqs:
- for req in reqs:
- req.ignoreBootConstraints = 1
-
- self.populate()
- return rc
-
-
- def fstypeSet(self, obj):
- (current, entry) = obj
- flag = FLAGS_RESET
- if not current.isMountable():
- if entry.value() != _("<Not Applicable>"):
- self.oldMount = entry.value()
- entry.set(_("<Not Applicable>"))
- flag = FLAGS_SET
- elif entry.value() == _("<Not Applicable>"):
- if self.oldMount:
- entry.set(self.oldMount)
- else:
- entry.set("")
-
- entry.setFlags(FLAG_DISABLED, flag)
-
- def fstypeSetCB(self, obj):
- (listbox, entry) = obj
- self.fstypeSet((listbox.current(), entry))
-
- # make the entry for the mount point and its label
- def makeMountEntry(self, request):
- mountgrid = Grid(2, 1)
- mountLbl = Label(_("Mount Point:"))
- mountgrid.setField(mountLbl, 0, 0, (0,0,0,0), anchorLeft = 1)
- mountpoint = request.mountpoint
- if mountpoint:
- mount = Entry(20, mountpoint)
- else:
- mount = Entry(20, "")
- mountgrid.setField(mount, 1, 0, anchorRight = 1, growx = 1)
- if request.fstype and not request.fstype.isMountable():
- mount.setFlags(FLAG_DISABLED, FLAGS_SET)
- mount.set(_("<Not Applicable>"))
- return (mount, mountgrid)
-
- # make the entry for the lv name and it's label
- def makeLVNameEntry(self, request):
- lvnamegrid = Grid(2, 1)
- lvnameLbl = Label(_("Logical Volume Name:"))
- lvnamegrid.setField(lvnameLbl, 0, 0, (0,0,0,0), anchorLeft = 1)
- lvn = request.logicalVolumeName
- if lvn:
- lvname = Entry(20, lvn)
- else:
- lvname = Entry(20, "")
- lvnamegrid.setField(lvname, 1, 0, anchorRight = 1, growx = 1)
- if request.preexist:
- lvname.setFlags(FLAG_DISABLED, FLAGS_SET)
- return (lvname, lvnamegrid)
-
- # make the size entry for a logical volume
- def makeLVSize(self, request):
- grid = Grid(3, 1)
- lbl = Label(_("Size (MB):"))
- grid.setField(lbl, 0, 0, (0,0,0,0), anchorLeft = 1)
- if request.size:
- size = Entry(8, "%d" %(request.size,))
- else:
- size = Entry(8, "")
- grid.setField(size, 1, 0, anchorRight = 1, growx = 1)
-# maxLbl = Label(_("(Max is %s MB") %(maxlv,))
-# grid.setField(maxLbl, 2, 0, anchorRight = 1)
- if request.preexist:
- size.setFlags(FLAG_DISABLED, FLAGS_SET)
- return (size, grid)
-
-
- # make the list of available filesystems and its label
- def makeFsList(self, request, usecallback=1, uselabel=1, usetypes=None,
- ignorefs = None):
- subgrid = Grid(1, 2)
- row = 0
- # filesystem type selection
- if uselabel:
- typeLbl = Label(_("File System type:"))
- subgrid.setField(typeLbl, 0, row)
- row = row + 1
-
- fstype = Listbox(height=2, scroll=1)
- types = fileSystemTypeGetTypes()
- if usetypes:
- names = usetypes
- else:
- names = types.keys()
- names.sort()
- for name in names:
- if not fileSystemTypeGet(name).isSupported():
- continue
-
- if ignorefs and name in ignorefs:
- continue
-
- if fileSystemTypeGet(name).isFormattable():
- fstype.append(name, types[name])
- if request.fstype and request.fstype.getName() in names and \
- request.fstype.isFormattable() and request.fstype.isSupported():
- fstype.setCurrent(request.fstype)
- else:
- fstype.setCurrent(fileSystemTypeGetDefault())
- subgrid.setField(fstype, 0, row)
- if usecallback:
- fstype.setCallback(self.fstypeSetCB, (fstype, self.mount))
- return (fstype, subgrid)
-
-
- # make the list of drives
- def makeDriveList(self, request):
- subgrid = Grid(1, 2)
- driveLbl = Label(_("Allowable Drives:"))
- subgrid.setField(driveLbl, 0, 0)
- disks = self.diskset.disks.keys()
- disks.sort()
- drivelist = CheckboxTree(height=2, scroll=1)
- if not request.drive:
- for disk in disks:
- drivelist.append(disk, selected = 1)
- else:
- for disk in disks:
- if disk in request.drive:
- selected = 1
- else:
- selected = 0
- drivelist.append(disk, selected = selected)
- subgrid.setField(drivelist, 0, 1)
- return (drivelist, subgrid)
-
-
- def makeSizeEntry(self, request):
- # requested size
- sizegrid = Grid(2, 1)
- sizeLbl = Label(_("Size (MB):"))
- sizegrid.setField(sizeLbl, 0, 0, (0,0,2,0))
- if request.size:
- origsize = "%s" %(int(request.size))
- else:
- origsize = "1"
- size = Entry(7, origsize)
- sizegrid.setField(size, 1, 0, growx = 1, anchorLeft = 1)
- return (size, sizegrid)
-
-
- def sizeOptionsChange(self, (sizeopts, limitentry)):
- flag = FLAGS_RESET
- if sizeopts.getSelection() != "limit":
- flag = FLAGS_SET
- limitentry.setFlags(FLAG_DISABLED, flag)
-
-
- def makeSizeOptions(self, request):
- # size options
- optiongrid = Grid(2, 3)
- sizeopts = RadioGroup()
- limitdef = 0
- maxdef = 0
- fixeddef = 0
- limitentrydef = "1"
- if request.grow:
- if request.maxSizeMB != None:
- limitdef = 1
- limitentrydef = "%s" %(int(request.maxSizeMB))
- else:
- maxdef = 1
- else:
- fixeddef = 1
- fixed = sizeopts.add(_("Fixed Size:"), "fixed", fixeddef)
- optiongrid.setField(fixed, 0, 0, anchorRight = 1)
- limit = sizeopts.add(_("Fill maximum size of (MB):"), "limit", limitdef)
- optiongrid.setField(limit, 0, 1, anchorRight = 1)
- limitentry = Entry(5, limitentrydef)
- optiongrid.setField(limitentry, 1, 1, (1,0,0,0), anchorRight = 1)
- max = sizeopts.add(_("Fill all available space:"), "max", maxdef)
- optiongrid.setField(max, 0, 2, anchorRight = 1)
- fixed.setCallback(self.sizeOptionsChange, (sizeopts, limitentry))
- limit.setCallback(self.sizeOptionsChange, (sizeopts, limitentry))
- max.setCallback(self.sizeOptionsChange, (sizeopts, limitentry))
- self.sizeOptionsChange((sizeopts, limitentry))
- return (sizeopts, limitentry, optiongrid)
-
-
- # the selected cylinder boundary type changed
- def cylOptionsChange(self, (cylopts, end, size)):
- if cylopts.getSelection() == "end":
- end.setFlags(FLAG_DISABLED, FLAGS_RESET)
- size.setFlags(FLAG_DISABLED, FLAGS_SET)
- elif cylopts.getSelection() == "size":
- end.setFlags(FLAG_DISABLED, FLAGS_SET)
- size.setFlags(FLAG_DISABLED, FLAGS_RESET)
-
-
- # make the list of cylinder stuff
- def makeCylEntries(self, request):
- subgrid = Grid(2, 4)
-
- startLbl = Label(_("Start Cylinder:"))
- subgrid.setField(startLbl, 0, 0, (0,0,2,0), anchorRight=1)
- start = "%s" %(int(request.start))
- start = Entry(7, start)
- subgrid.setField(start, 1, 0, anchorLeft=1)
-
- cylopts = RadioGroup()
- enddef = 1
- sizedef = 0
- if not request.end:
- enddef = 0
- sizedef = 1
-
- endrb = cylopts.add(_("End Cylinder:"), "end", enddef)
- subgrid.setField(endrb, 0, 1, (0,0,2,0), anchorRight=1)
- end = Entry(7)
- if request.end:
- end.set("%s" %(int(request.end)))
- subgrid.setField(end, 1, 1, anchorLeft=1)
-
- sizerb = cylopts.add(_("Size (MB):"), "size", sizedef)
- subgrid.setField(sizerb, 0, 2, (0,0,2,0), anchorRight=1)
- size = Entry(7)
- if request.size:
- size.set("%s" %(int(request.size)))
- subgrid.setField(size, 1, 2, anchorLeft=1)
-
- endrb.setCallback(self.cylOptionsChange, (cylopts, end, size))
- sizerb.setCallback(self.cylOptionsChange, (cylopts, end, size))
- self.cylOptionsChange((cylopts, end, size))
-
- return (cylopts, start, end, size, subgrid)
-
- # make the list of VGs
- def makeVGList(self, request):
- subgrid = Grid(1, 2)
- vgLbl = Label(_("Volume Group:"))
- subgrid.setField(vgLbl, 0, 0)
- vgs = self.partitions.getLVMVGRequests()
- if len(vgs) > 3:
- scroll = 1
- else:
- scroll = 0
- vgBox = Listbox(height=3, scroll=scroll)
- current = None
- for vg in vgs:
- vgBox.append(vg.volumeGroupName, vg)
- if vg.uniqueID == request.volumeGroup:
- current = vg
- if request.volumeGroup is not None:
- vgBox.setCurrent(current)
-
- subgrid.setField(vgBox, 0, 1)
- return (vgBox, subgrid)
-
- # make the list of RAID levels
- def makeRaidList(self, request):
- subgrid = Grid(1, 2)
- raidLbl = Label(_("RAID Level:"))
- subgrid.setField(raidLbl, 0, 0)
- if len(availRaidLevels) > 3:
- scroll = 1
- else:
- scroll = 0
- raidBox = Listbox(height=3, scroll=scroll)
- for level in availRaidLevels:
- raidBox.append(level, level)
- if request.raidlevel:
- raidBox.setCurrent(request.raidlevel)
- subgrid.setField(raidBox, 0, 1)
- return (raidBox, subgrid)
-
-
- # make the list of drives for the RAID
- def makeRaidDriveList(self, request):
- subgrid = Grid(1, 2)
- driveLbl = Label(_("RAID Members:"))
- subgrid.setField(driveLbl, 0, 0)
- disks = self.diskset.disks.keys()
- drivelist = CheckboxTree(height=2, scroll=1)
- avail = self.partitions.getAvailRaidPartitions(request, self.diskset)
-
- # XXX
- if not request.raidmembers:
- for (part, size, used) in avail:
- drivelist.append(part, part, 1)
- else:
- for (part, size, used) in avail:
- drivelist.append(part, part, used)
- subgrid.setField(drivelist, 0, 1)
- return (drivelist, subgrid)
-
-
- def makeSpareEntry(self, request):
- subgrid = Grid(2, 1)
- label = Label(_("Number of spares?"))
- subgrid.setField(label, 1, 0)
- entry = Entry(3)
- if request.raidspares:
- entry.set(str(request.raidspares))
- else:
- entry.set("0")
- subgrid.setField(entry, 0, 0, (0,0,1,0))
- return (entry, subgrid)
-
- def fsOptionsGrid(self, origrequest, newfstype):
- subgrid = Grid(2, 4)
- # filesystem type selection
- srow = 0
- typeLbl = Label(_("File System Type:"))
- subgrid.setField(typeLbl, 0, srow, (0,0,0,1), anchorLeft = 1)
- ptype = origrequest.fstype.getName()
- if ptype == "foreign":
- part = get_partition_by_name(self.diskset.disks, origrequest.device)
- if part is not None:
- ptype = map_foreign_to_fsname(part.native_type)
- else:
- pytype = _("Foreign")
- type = Label(ptype)
- subgrid.setField(type, 1, srow, (0,0,0,1), anchorRight = 1)
- srow = srow +1
- if origrequest.type != REQUEST_NEW and origrequest.fslabel:
- fsLbl = Label(_("File System Label:"))
- subgrid.setField(fsLbl, 0, srow, (0,0,0,1), anchorLeft = 1)
- label = Label(origrequest.fslabel)
- subgrid.setField(label, 1, srow, (0,0,0,1), anchorRight = 1)
- srow = srow + 1
-
- sizeLbl = Label(_("Size (MB):"))
- subgrid.setField(sizeLbl, 0, srow, (0,0,0,1), anchorLeft = 1)
- size = Label("%s" %(int(origrequest.size)))
- subgrid.setField(size, 1, srow, (0,0,0,1), anchorRight = 1)
- srow = srow + 1
- tmpLbl = Label(_("File System Option:"))
- subgrid.setField(tmpLbl, 0, srow, (0,0,0,1), anchorLeft = 1)
- if origrequest.format:
- fsoptLbl = Label(_("Format as %s") % (newfstype.getName()))
- elif origrequest.migrate:
- fsoptLbl = Label(_("Migrate to %s") %(newfstype.getName()))
- else:
- fsoptLbl = Label(_("Leave unchanged"))
- subgrid.setField(fsoptLbl, 1, srow, (0,0,0,1), anchorLeft = 1)
-
- return (subgrid, fsoptLbl, type)
-
-
- def fsOptionsDialog(self, origrequest, format, migrate, newfstype):
-
- def formatChanged((formatrb)):
- flag = FLAGS_SET
- if formatrb.selected():
- flag = FLAGS_RESET
-
- poplevel = GridFormHelp(self.screen, _("File System Options"),
- "fsoption", 1, 6)
- row = 0
- poplevel.add(TextboxReflowed(40, _("Please choose how you would "
- "like to prepare the file system "
- "on this partition.")), 0, 0)
- row = row + 1
- subgrid = Grid(2, 5)
- srow = 0
-
- noformatrb = SingleRadioButton(_("Leave unchanged (preserve data)"),
- None, not format and not migrate)
- subgrid.setField(noformatrb, 0, srow, (0,0,0,1),anchorLeft = 1)
-
- srow = srow + 1
- if format:
- forflag = 1
- else:
- forflag = 0
- formatrb = SingleRadioButton(_("Format as:"), noformatrb, forflag)
- formatrb.setCallback(formatChanged, (formatrb))
- noformatrb.setCallback(formatChanged, (formatrb))
-
- subgrid.setField(formatrb, 0, srow, (0,0,0,1), anchorLeft = 1)
-
- (fortype, forgrid) = self.makeFsList(origrequest, usecallback = 0,
- uselabel = 0)
- if newfstype and newfstype.isFormattable() and \
- newfstype.getName() in fileSystemTypeGetTypes().keys() and \
- newfstype.isSupported():
- fortype.setCurrent(newfstype)
- subgrid.setField(forgrid, 1, srow, (0,0,0,1))
-
- if origrequest.origfstype and origrequest.origfstype.isMigratable():
- srow = srow + 1
- if migrate:
- migflag = 1
- else:
- migflag = 0
- migraterb = SingleRadioButton(_("Migrate to:"), formatrb, migflag)
- migraterb.setCallback(formatChanged, (formatrb))
- subgrid.setField(migraterb, 0, srow, (0,0,0,1), anchorLeft = 1)
-
- migtypes = origrequest.origfstype.getMigratableFSTargets()
-
- (migtype, miggrid) = self.makeFsList(origrequest, usecallback = 0,
- uselabel = 0,
- usetypes = migtypes)
-
- if newfstype and newfstype.getName() in migtypes:
- migtype.setCurrent(newfstype)
- subgrid.setField(miggrid, 1, srow, (0,0,0,1))
- else:
- migraterb = None
-
- poplevel.add(subgrid, 0, row, (0,1,0,1))
-
- row = row + 1
-
- formatChanged((formatrb))
-
- popbb = ButtonBar(self.screen, (TEXT_OK_BUTTON, TEXT_CANCEL_BUTTON))
- poplevel.add(popbb, 0, row, (0,0,0,0), growx = 1)
-
- while 1:
- res = poplevel.run()
-
- if popbb.buttonPressed(res) == 'cancel':
- self.screen.popWindow()
- return (format, migrate, newfstype)
-
- if noformatrb.selected():
- format = 0
- migrate = 0
- newfstype = origrequest.origfstype
- elif formatrb and formatrb.selected():
- format = 1
- migrate = 0
- newfstype = fortype.current()
- elif migraterb and migraterb.selected():
- format = 0
- migrate = 1
- newfstype = migtype.current()
-
- self.screen.popWindow()
-
- return (format, migrate, newfstype)
-
- def shutdownUI(self):
- # XXX remove parted object refs
- # need to put in clear() method for checkboxtree in snack
- if self.drivelist:
- self.drivelist.key2item = {}
- self.drivelist.item2key = {}
-
- # isNew implies that this request has never been successfully used before
- def editPartitionRequest(self, origrequest, isNew = 0):
- self.oldMount = None
-
- poplevel = GridFormHelp(self.screen,_("Add Partition"),"addpart", 1, 6)
-
- # mount point entry
- row = 0
- (self.mount, mountgrid) = self.makeMountEntry(origrequest)
- poplevel.add(mountgrid, 0, row)
-
- row = row + 1
-
- self.drivelist = None
- if origrequest.type == REQUEST_NEW:
- subgrid = Grid(2, 1)
- (fstype, fsgrid) = self.makeFsList(origrequest)
- subgrid.setField(fsgrid, 0, 0, anchorLeft = 1, anchorTop=1)
-
- if origrequest.start == None:
- (self.drivelist, drivegrid) = self.makeDriveList(origrequest)
- subgrid.setField(drivegrid, 1, 0, (2,0,0,0), anchorRight=1, anchorTop=1)
- poplevel.add(subgrid, 0, row, (0,1,0,0), growx=1)
-
- # size stuff
- row = row + 1
-
- allsize = Grid(2, 1)
- (size, sizegrid) = self.makeSizeEntry(origrequest)
- allsize.setField(sizegrid, 0, 0, anchorTop = 1)
-
- (sizeopts, limitentry, optiongrid) = self.makeSizeOptions(origrequest)
- allsize.setField(optiongrid, 1, 0)
-
- poplevel.add(allsize, 0, row, (0,1,0,0), growx=1)
- else: # explicit add via cylinder
- poplevel.add(subgrid, 0, row, (0,1,0,0))
-
- row = row + 1
- (cylopts, start, end, size, cylgrid) = self.makeCylEntries(origrequest)
- poplevel.add(cylgrid, 0, row, (0,1,0,0))
-
- # primary
- # XXX need to see if cylinder range is in extended or not
- row = row + 1
- primary = Checkbox(_("Force to be a primary partition"))
- # only show if we have something other than primary
- if not self.diskset.onlyPrimaryParts():
- poplevel.add(primary, 0, row, (0,1,0,0))
- row = row + 1
-
- fsoptLbl = None
-
- elif origrequest.type == REQUEST_VG:
- self.intf.messageWindow(_("Not Supported"),
- _("You can only edit LVM Volume Groups "
- "in the graphical installer."))
- return
-
- elif (origrequest.type == REQUEST_LV or origrequest.type == REQUEST_PREEXIST) and origrequest.fstype:
-
- # set some defaults
- format = origrequest.format
- migrate = origrequest.migrate
- newfstype = origrequest.fstype
-
- (subgrid, fsoptLbl, fstypeLbl) = self.fsOptionsGrid(origrequest, newfstype)
- poplevel.add(subgrid, 0, row, (0,1,0,0))
-
-
- row = row + 1
- if origrequest.type == REQUEST_NEW or origrequest.getProtected():
- popbb = ButtonBar(self.screen, (TEXT_OK_BUTTON, TEXT_CANCEL_BUTTON))
- else:
- popbb = ButtonBar(self.screen, (TEXT_OK_BUTTON,
- (_("File System Options"), "fsopts"),
- TEXT_CANCEL_BUTTON))
- poplevel.add(popbb, 0, row, (0,1,0,0), growx = 1)
-
- while 1:
-
- res = poplevel.run()
-
- # if the user hit cancel, do nothing
- if popbb.buttonPressed(res) == 'cancel':
- self.screen.popWindow()
- return
-
- if popbb.buttonPressed(res) == 'fsopts':
- (format, migrate, newfstype) = self.fsOptionsDialog(origrequest, format, migrate, newfstype)
- self.fstypeSet((newfstype, self.mount))
- fstypeLbl.setText(newfstype.getName())
-
- if fsoptLbl:
- if format:
- fsoptLbl.setText(_("Format as %s") % (newfstype.getName()))
- elif migrate:
- fsoptLbl.setText(_("Migrate to %s") %(newfstype.getName()))
- else:
- fsoptLbl.setText(_("Leave unchanged"))
-
- continue
-
- if origrequest.type == REQUEST_NEW:
- filesystem = fstype.current()
-
- if primary.selected():
- primonly = True
- else:
- primonly = None
-
- request = copy.copy(origrequest)
- request.fstype = filesystem
- if request.fstype.isMountable():
- request.mountpoint = self.mount.value()
- else:
- request.mountpoint = None
- request.format = True
- request.primary = primonly
-
- if origrequest.start == None:
- if invalidInteger(size.value()):
- self.intf.messageWindow(_("Invalid Entry for Partition Size"),
- invalidInteger(size.value()))
- continue
- request.size = int(size.value())
-
- growtype = sizeopts.getSelection()
- if growtype == "fixed":
- grow = None
- else:
- grow = True
- if growtype == "limit":
- if invalidInteger(limitentry.value()):
- self.intf.messageWindow(_("Invalid Entry for Maximum Size"),
- invalidInteger(limitentry.value()))
- continue
-
- maxsize = int(limitentry.value())
- else:
- maxsize = None
- request.grow = grow
- request.maxSizeMB = maxsize
-
- if len(self.drivelist.getSelection()) == len(self.diskset.disks.keys()):
- allowdrives = None
- else:
- allowdrives = []
- for i in self.drivelist.getSelection():
- allowdrives.append(i)
- request.drive = allowdrives
- else:
- if invalidInteger(start.value()):
- self.intf.messageWindow(_("Invalid Entry for Starting Cylinder"),
- invalidInteger(start.value()))
- continue
-
- request.start = int(start.value())
-
- cyltype = cylopts.getSelection()
- if cyltype == "end":
- if invalidInteger(end.value()):
- self.intf.messageWindow(_("Invalid Entry for End Cylinder"),
- invalidInteger(end.value()))
- continue
-
- request.end = int(end.value())
- request.size = None
- elif cyltype == "size":
- if invalidInteger(size.value()):
- self.intf.messageWindow(_("Invalid Entry for Partition Size"),
- invalidInteger(size.value()))
- continue
- request.end = None
- request.size = int(size.value())
- else: # can't ever get here
- raise RuntimeError, "Selected a way of partitioning by cylinder that's not supported"
-
- err = request.sanityCheckRequest(self.partitions)
- if err:
- self.intf.messageWindow(_("Error With Request"),
- "%s" % (err))
- continue
- else:
- request = copy.copy(origrequest)
-
- if request.type == REQUEST_PREEXIST or request.type == REQUEST_LV:
- request.fstype = newfstype
-
- if request.fstype.isMountable():
- request.mountpoint = self.mount.value()
- else:
- request.mountpoint = None
-
- if request.type == REQUEST_PREEXIST or request.type == REQUEST_LV:
- request.format = format
- request.migrate = migrate
- request.fstype = newfstype
-
- err = request.sanityCheckRequest(self.partitions)
- if err:
- self.intf.messageWindow(_("Error With Request"),
- "%s" % (err))
- continue
-
- if (not request.format and request.mountpoint
- and request.formatByDefault()):
- if not queryNoFormatPreExisting(self.intf):
- continue
-
- if not isNew:
- self.partitions.removeRequest(origrequest)
-
- self.partitions.addRequest(request)
- if self.refresh():
- # the add failed; remove what we just added and put
- # back what was there if we removed it
- self.partitions.removeRequest(request)
- if not isNew:
- self.partitions.addRequest(origrequest)
- if self.refresh():
- # this worked before and doesn't now...
- raise RuntimeError, "Returning partitions to state prior to edit failed"
- else:
- break
-
- # clean up
- self.shutdownUI()
- self.screen.popWindow()
-
- # isNew implies that this request has never been successfully used before
- def editRaidRequest(self, raidrequest, isNew = 0):
- preexist = raidrequest and raidrequest.preexist
- if preexist:
- tmpstr = _("Edit RAID Device")
- else:
- tmpstr = _("Make RAID Device")
- poplevel = GridFormHelp(self.screen, tmpstr, "makeraid", 1, 6)
-
- # mount point entry
- row = 0
- (self.mount, mountgrid) = self.makeMountEntry(raidrequest)
- poplevel.add(mountgrid, 0, row)
- row = row + 1
-
- # initialize holder for temporary mount point value
- self.oldMount = None
-
- if preexist:
- # set some defaults
- format = raidrequest.format
- migrate = raidrequest.migrate
- newfstype = raidrequest.fstype
-
- (subgrid, fsoptLbl, fstypeLbl) = self.fsOptionsGrid(raidrequest, newfstype)
- poplevel.add(subgrid, 0, row, (0,1,0,0))
- self.drivelist = None
- else:
- subgrid = Grid(2, 1)
- (fstype, fsgrid) = self.makeFsList(raidrequest, ignorefs = ["software RAID", "PPC PReP Boot", "Apple Bootstrap"])
- subgrid.setField(fsgrid, 0, 0, anchorLeft = 1, anchorTop=1)
- (raidtype, raidgrid) = self.makeRaidList(raidrequest)
- subgrid.setField(raidgrid, 1, 0, (2,0,0,0), anchorRight=1, anchorTop=1)
- poplevel.add(subgrid, 0, row, (0,1,0,0))
-
- row = row + 1
- drivegrid = Grid(2, 1)
-
- #Let's see if we have any RAID partitions to make a RAID device with
- avail = self.partitions.getAvailRaidPartitions(raidrequest, self.diskset)
-
- #If we don't, then tell the user that none exist
- if len(avail) < 2:
- ButtonChoiceWindow (self.screen, _("No RAID partitions"),
- _("At least two software RAID partitions are needed."),
- [ TEXT_OK_BUTTON ])
- return
-
- (self.drivelist, drivesubgrid) = self.makeRaidDriveList(raidrequest)
- drivegrid.setField(drivesubgrid, 0, 0, (0,0,4,0), anchorLeft = 1, anchorTop = 1)
-
- miscgrid = Grid(1, 2)
- (spares, sparegrid) = self.makeSpareEntry(raidrequest)
- miscgrid.setField(sparegrid, 0, 0, anchorRight=1, anchorTop=1)
-
- if raidrequest.fstype and raidrequest.fstype.isFormattable():
- format = Checkbox(_("Format partition?"))
- miscgrid.setField(format, 0, 1)
- else:
- format = None
-
- if raidrequest.format == 1 or raidrequest.format == None:
- format.setValue("*")
-
- drivegrid.setField(miscgrid, 1, 0, anchorTop=1)
- poplevel.add(drivegrid, 0, row, (0,1,0,0))
-
- row = row + 1
- if preexist:
- popbb = ButtonBar(self.screen, (TEXT_OK_BUTTON,
- (_("File System Options"), "fsopts"),
- TEXT_CANCEL_BUTTON))
- else:
- popbb = ButtonBar(self.screen, (TEXT_OK_BUTTON,TEXT_CANCEL_BUTTON))
- poplevel.add(popbb, 0, row, (0,1,0,0), growx = 1)
-
- while 1:
- res = poplevel.run()
-
- if popbb.buttonPressed(res) == 'cancel':
- self.screen.popWindow()
- return
-
- if popbb.buttonPressed(res) == 'fsopts':
- (format, migrate, newfstype) = self.fsOptionsDialog(raidrequest, format, migrate, newfstype)
- self.fstypeSet((newfstype, self.mount))
- fstypeLbl.setText(newfstype.getName())
-
- if fsoptLbl:
- if format:
- fsoptLbl.setText(_("Format as %s") % (newfstype.getName()))
- elif migrate:
- fsoptLbl.setText(_("Migrate to %s") %(newfstype.getName()))
- else:
- fsoptLbl.setText(_("Leave unchanged"))
-
- continue
-
- request = copy.copy(raidrequest)
-
- if not preexist:
- request.fstype = fstype.current()
- else:
- request.fstype = newfstype
-
- if request.fstype.isMountable():
- request.mountpoint = self.mount.value()
- else:
- request.mountpoint = None
-
- if not preexist:
- raidmembers = []
- for drive in self.drivelist.getSelection():
- id = self.partitions.getRequestByDeviceName(drive).uniqueID
- raidmembers.append(id)
-
- request.raidmembers = raidmembers
- if invalidInteger(spares.value()):
- self.intf.messageWindow(_("Invalid Entry for RAID Spares"),
- invalidInteger(spares.value()))
- continue
-
- request.raidspares = int(spares.value())
- request.raidlevel = raidtype.current()
- request.raidminor = self._findFirstUnused(self.raidminors)
- self.raidminors[request.raidminor] = True
-
- if format:
- request.format = format.selected()
- else:
- request.format = 0
-
- if request.raidlevel == "RAID0" and request.raidspares > 0:
- self.intf.messageWindow(_("Too many spares"),
- _("You may not use any spares "
- "with a RAID0 array."))
- continue
- else:
- request.format = format
- request.migrate = migrate
- request.fstype = newfstype
-
- err = request.sanityCheckRequest(self.partitions)
- if err:
- self.intf.messageWindow(_("Error With Request"),
- "%s" % (err))
- continue
-
- if not isNew:
- self.partitions.removeRequest(raidrequest)
-
- self.partitions.addRequest(request)
-
- if self.refresh():
- # how can this fail? well, if it does, do the remove new,
- # add old back in dance
- self.partitions.removeRequest(request)
- if not isNew:
- self.partitions.addRequest(raidrequest)
- if self.refresh():
- raise RuntimeError, "Returning partitions to state prior to RAID edit failed"
- else:
- break
-
- break
-
- # clean up
- self.shutdownUI()
- self.screen.popWindow()
-
- # isNew implies that this request has never been successfully used before
- def editLVRequest(self, lvrequest, isNew = 0):
- preexist = lvrequest and lvrequest.preexist
- if preexist:
- tmpstr = _("Edit Logical Volume")
- else:
- tmpstr = _("Make Logical Volume")
- self.drivelist = None
- poplevel = GridFormHelp(self.screen, tmpstr, "makelv", 1, 8)
-
- # mount point entry
- row = 0
- (self.mount, mountgrid) = self.makeMountEntry(lvrequest)
- poplevel.add(mountgrid, 0, row)
- row = row + 1
-
- (self.lvname, lvgrid) = self.makeLVNameEntry(lvrequest)
- poplevel.add(lvgrid, 0, row)
- row = row + 1
-
- (lvsize, lvsizegrid) = self.makeLVSize(lvrequest)
- poplevel.add(lvsizegrid, 0, row)
- row = row + 1
-
- # initialize holder for temporary mount point value
- self.oldMount = None
-
- if preexist:
- # set some defaults
- format = lvrequest.format
- migrate = lvrequest.migrate
- newfstype = lvrequest.fstype
-
- (subgrid, fsoptLbl, fstypeLbl) = self.fsOptionsGrid(lvrequest, newfstype)
- poplevel.add(subgrid, 0, row, (0,1,0,0))
- self.drivelist = None
- else:
- subgrid = Grid(2, 1)
- (fstype, fsgrid) = self.makeFsList(lvrequest, ignorefs = ["software RAID", "efi", "PPC PReP Boot", "Apple Bootstrap"])
- subgrid.setField(fsgrid, 0, 0, anchorLeft = 1, anchorTop=1)
-
- vgs = self.partitions.getLVMVGRequests()
- if len(vgs) < 1:
- ButtonChoiceWindow (self.screen, _("No Volume Groups"),
- _("No volume groups exist in which to create "
- "a logical volume"),[ TEXT_OK_BUTTON ])
- return
-
- (vgtype, vggrid) = self.makeVGList(lvrequest)
- subgrid.setField(vggrid, 1, 0, (2,0,0,0), anchorRight=1, anchorTop=1)
- poplevel.add(subgrid, 0, row, (0,1,0,0))
-
- row = row + 1
-
- miscgrid = Grid(1, 3)
-
- if lvrequest.fstype and lvrequest.fstype.isFormattable():
- format = Checkbox(_("Format partition?"))
- miscgrid.setField(format, 0, 1)
- else:
- format = None
-
- if lvrequest.format == 1 or lvrequest.format == None:
- format.setValue("*")
-
- poplevel.add(miscgrid, 0, row, (0,1,0,0))
-
- row = row + 1
- if preexist:
- popbb = ButtonBar(self.screen, (TEXT_OK_BUTTON,
- (_("File System Options"), "fsopts"),
- TEXT_CANCEL_BUTTON))
- else:
- popbb = ButtonBar(self.screen, (TEXT_OK_BUTTON,TEXT_CANCEL_BUTTON))
- poplevel.add(popbb, 0, row, (0,1,0,0), growx = 1)
-
- while 1:
- res = poplevel.run()
-
- if popbb.buttonPressed(res) == 'cancel':
- self.screen.popWindow()
- return
-
- if popbb.buttonPressed(res) == 'fsopts':
- (format, migrate, newfstype) = self.fsOptionsDialog(lvrequest, format, migrate, newfstype)
- self.fstypeSet((newfstype, self.mount))
- fstypeLbl.setText(newfstype.getName())
-
- if fsoptLbl:
- if format:
- fsoptLbl.setText(_("Format as %s") % (newfstype.getName()))
- elif migrate:
- fsoptLbl.setText(_("Migrate to %s") %(newfstype.getName()))
- else:
- fsoptLbl.setText(_("Leave unchanged"))
-
- continue
-
- request = copy.copy(lvrequest)
-
- if not preexist:
- request.fstype = fstype.current()
- else:
- request.fstype = newfstype
-
- if request.fstype.isMountable():
- request.mountpoint = self.mount.value()
- else:
- request.mountpoint = None
-
- if not preexist:
- if format:
- request.format = format.selected()
- else:
- request.format = 0
-
- # set the vg
- vgreq = vgtype.current()
- request.volumeGroup = vgreq.uniqueID
-
- if vgreq is None:
- raise RuntimeError, "Somehow ended up with a None volume group!"
-
- # get the lv name, check for a "valid" name
- lvn = self.lvname.value().strip()
- err = sanityCheckLogicalVolumeName(lvn)
- if err:
- self.intf.messageWindow(_("Illegal Logical Volume Name"), err, custom_icon="error")
-
- continue
-
- # make sure we don't have an LV in this volume group by
- # this name already
- used = 0
- origlvname = lvrequest.logicalVolumeName
- for lv in self.partitions.getLVMLVRequests():
- if origlvname and lvn == origlvname:
- break
- if ((lv.logicalVolumeName == lvn) and
- (lv.volumeGroup == vgreq.uniqueID)):
- used = 1
- break
-
- if used:
- self.intf.messageWindow(_("Illegal logical volume name"),
- _("The logical volume name \"%s\" "
- "is already in use. Please "
- "pick another.") % (lvn,),
- custom_icon="error")
- continue
-
- request.logicalVolumeName = lvn
-
- try:
- size = int(lvsize.value().strip())
- except:
- self.intf.messageWindow(_("Illegal size"),
- _("The requested size as entered is "
- "not a valid number greater "
- "than 0."), custom_icon="error")
- continue
-
- pesize = vgreq.pesize
- size = lvm.clampLVSizeRequest(size, pesize, roundup=1)
-
- maxlv = lvm.getMaxLVSize(pesize)
- if size > lvm.getMaxLVSize(pesize):
- self.intf.messageWindow(_("Not enough space"),
- _("The current requested size "
- "(%10.2f MB) is larger than the "
- "maximum logical volume "
- "size (%10.2f MB). ") % (size,
- maxlv),
- custom_icon="error")
- continue
-
- vgsize = vgreq.getActualSize(self.partitions, self.diskset)
- avail = vgsize
- for req in self.partitions.requests:
- if ((req.type == REQUEST_LV) and
- (req.volumeGroup == vgreq.uniqueID)):
- avail -= req.size
- if lvrequest.size:
- avail += lvrequest.size
-
- if size > avail:
- self.intf.messageWindow(_("Not enough space"),
- _("The current requested size "
- "(%10.2f MB) is larger than "
- "the available size in "
- "the volume group "
- "(%10.2f MB).") %(size, avail),
- custom_icon="error")
- continue
-
- request.size = size
- request.grow = 0
- request.dev = None
- else:
- request.format = format
- request.migrate = migrate
- request.fstype = newfstype
-
- err = request.sanityCheckRequest(self.partitions)
- if err:
- self.intf.messageWindow(_("Error With Request"),
- "%s" % (err))
- continue
-
- if not isNew:
- self.partitions.removeRequest(lvrequest)
-
- self.partitions.addRequest(request)
-
- if self.refresh():
- # how can this fail? well, if it does, do the remove new,
- # add old back in dance
- self.partitions.removeRequest(request)
- if not isNew:
- self.partitions.addRequest(lvrequest)
- if self.refresh():
- raise RuntimeError, "Returning partitions to state prior to RAID edit failed"
- else:
- break
-
- break
-
- # clean up
- self.shutdownUI()
- self.screen.popWindow()
-
- def newCb(self):
- hasvg = 0
- dolv = 0
- for request in self.partitions.requests:
- if request.type == REQUEST_VG:
- hasvg = 1
- break
- if hasvg:
- rc = ListboxChoiceWindow(self.screen,
- _("New Partition or Logical Volume?"),
- _("Would you like to create a new "
- "partition or a new logical volume?"),
- [ _("partition"), _("logical volume") ],
- [ TEXT_OK_BUTTON, TEXT_CANCEL_BUTTON ],
- width = 30, scroll = 0, height = 2)
- (button, choice) = rc
- if button == TEXT_CANCEL_CHECK:
- return
- if choice == 1:
- dolv = 1
-
- if not dolv:
- request = NewPartitionSpec(fileSystemTypeGetDefault(), 1)
- self.editPartitionRequest(request, isNew = 1)
- else:
- request = LogicalVolumeRequestSpec(fileSystemTypeGetDefault(),
- size=1)
- self.editLVRequest(request, isNew = 1)
-
- def makeraidCb(self):
- request = RaidRequestSpec(fileSystemTypeGetDefault())
- self.editRaidRequest(request, isNew = 1)
-
- def editCb(self):
- part = self.lb.current()
- (type, request) = doEditPartitionByRequest(self.intf, self.partitions, part)
- if request:
- if type == "RAID":
- self.editRaidRequest(request)
- elif type == "LVMLV":
- self.editLVRequest(request)
- elif type == "NEW":
- self.editPartitionRequest(request, isNew = 1)
- else:
- self.editPartitionRequest(request)
-
- def deleteCb(self):
- partition = self.lb.current()
-
- req = self.partitions.getRequestByID(partition)
- if req and isinstance(req, RaidRequestSpec):
- del(self.raidminors[req.raidminor])
-
- if doDeletePartitionByRequest(self.intf, self.partitions, partition):
- self.refresh()
-
- def resetCb(self):
- if not confirmResetPartitionState(self.intf):
- return
-
- self.diskset.refreshDevices()
- self.partitions.setFromDisk(self.diskset)
- self.populate()
-
- def shutdownMainUI(self):
- self.lb.clear()
-
- def __call__(self, screen, anaconda):
- self.screen = screen
- self.fsset = anaconda.id.fsset
- self.diskset = anaconda.id.diskset
- self.intf = anaconda.intf
-
- self.diskset.openDevices()
- self.partitions = anaconda.id.partitions
-
- checkForSwapNoMatch(anaconda)
-
- self.g = GridFormHelp(screen, _("Partitioning"), "partition", 1, 5)
-
- self.lb = CListbox(height=10, cols=6,
- col_widths=[17,6,6,7,10,12],
- scroll=1, returnExit = 1,
- width=70, col_pad=2,
- col_labels=[_('Device'), _('Start'), _('End'), _('Size'), _('Type'), _('Mount Point')],
- col_label_align=[CENTER, CENTER,CENTER,CENTER,CENTER,CENTER])
- self.g.add(self.lb, 0, 1)
-
- self.bb = ButtonBar (screen, ((_("New"), "new", "F2"),
- (_("Edit"), "edit", "F3"),
- (_("Delete"), "delete", "F4"),
- (_("RAID"), "raid", "F11"),
- TEXT_OK_BUTTON, TEXT_BACK_BUTTON))
-
- screen.pushHelpLine( _(" F1-Help F2-New F3-Edit F4-Delete F5-Reset F12-OK "))
-
- self.g.add(self.bb, 0, 2, (0, 1, 0, 0))
- self.g.addHotKey("F5")
- self.populate()
-
- while 1:
- rc = self.g.run()
- res = self.bb.buttonPressed(rc)
-
- if res == "new":
- self.newCb()
- elif res == "edit" or rc == self.lb.listbox: # XXX better way?
- self.editCb()
- elif res == "delete":
- self.deleteCb()
- elif res == "raid":
- self.makeraidCb()
- elif res == "reset" or rc == "F5":
- self.resetCb()
- elif res == TEXT_BACK_CHECK:
- # remove refs to parted objects
- self.shutdownMainUI()
-
- self.diskset.refreshDevices()
- self.partitions.setFromDisk(self.diskset)
-
- screen.popHelpLine()
- screen.popWindow()
- return INSTALL_BACK
- else:
- if not self.partitions.getRequestByMountPoint("/"):
- self.intf.messageWindow(_("No Root Partition"),
- _("Installation requires a / partition."))
- continue
-
- (errors, warnings) = self.partitions.sanityCheckAllRequests(self.diskset)
- rc = partitionSanityErrors(self.intf, errors)
- if rc != 1:
- continue
-
- rc = partitionSanityWarnings(self.intf, warnings)
- if rc != 1:
- continue
-
- warnings = getPreExistFormatWarnings(self.partitions,
- self.diskset)
- rc = partitionPreExistFormatWarnings(self.intf, warnings)
- if rc != 1:
- continue
-
- # remove refs to parted objects
- self.shutdownMainUI()
-
- screen.popHelpLine()
- screen.popWindow()
- return INSTALL_OK
-
class PartitionTypeWindow:
def typeboxChange(self, (typebox, drivelist)):
flag = FLAGS_RESET
@@ -1513,16 +68,12 @@ class PartitionTypeWindow:
opts = ((_("Use entire drive"), CLEARPART_TYPE_ALL),
(_("Replace existing Linux system"), CLEARPART_TYPE_LINUX),
- (_("Use free space"), CLEARPART_TYPE_NONE),
- (_("Create custom layout"), -1))
+ (_("Use free space"), CLEARPART_TYPE_NONE))
typebox = Listbox(height = len(opts), scroll = 0)
for (txt, val) in opts:
typebox.append(txt, val)
- if anaconda.dispatch.stepInSkipList("autopartitionexecute"):
- typebox.setCurrent(-1)
- else:
- typebox.setCurrent(anaconda.id.partitions.autoClearPartType)
+ typebox.setCurrent(anaconda.id.partitions.autoClearPartType)
g.add(typebox, 0, 1, (0, 1, 0, 0))
@@ -1539,11 +90,11 @@ class PartitionTypeWindow:
g.add(bb, 0, 5, (0,1,0,0))
- typebox.setCallback(self.typeboxChange, (typebox, drivelist))
+ typebox.setCallback(self.typeboxChange, (typebox, drivelist))
self.drivelist = drivelist
g.addHotKey("F2")
- screen.pushHelpLine (_("<Space>,<+>,<-> selection | <F2> Add drive | <F12> next screen"))
+ screen.pushHelpLine (_("<Space>,<+>,<-> selection | <F2> Add drive | <F12> next screen"))
# restore the drive list each time
disks = anaconda.id.diskset.disks.keys()
@@ -1575,7 +126,7 @@ class PartitionTypeWindow:
sel = []
partmethod_ans = typebox.current()
res = bb.buttonPressed(rc)
-
+
self.clearDrivelist()
screen.popHelpLine()
screen.popWindow()
@@ -1584,7 +135,7 @@ class PartitionTypeWindow:
if self.addDriveDialog(screen) != INSTALL_BACK:
partitions.partitionObjectsInitialize(anaconda)
continue
-
+
if res == TEXT_BACK_CHECK:
return INSTALL_BACK
@@ -1595,28 +146,15 @@ class PartitionTypeWindow:
mustHaveSelectedDrive(anaconda.intf)
continue
- if partmethod_ans == -1:
- anaconda.dispatch.skipStep("autopartitionexecute", skip = 1)
- break
- else:
- anaconda.dispatch.skipStep("autopartitionexecute", skip = 0)
-
- anaconda.id.partitions.autoClearPartType = partmethod_ans
- anaconda.id.partitions.autoClearPartDrives = sel
- break
+ anaconda.dispatch.skipStep("autopartitionexecute", skip = 0)
+ anaconda.id.partitions.autoClearPartType = partmethod_ans
+ anaconda.id.partitions.autoClearPartDrives = sel
+ break
# ask to review autopartition layout - but only if it's not custom partitioning
- anaconda.dispatch.skipStep("partition", skip = 0)
+ anaconda.dispatch.skipStep("partition", skip = 1)
anaconda.dispatch.skipStep("bootloader", skip = 1)
- if partmethod_ans != -1:
- reviewLayout = anaconda.intf.messageWindow(_("Review Partition Layout"),
- _("Review and modify partitioning layout?"),
- type = "yesno")
-
- if reviewLayout != 1:
- anaconda.dispatch.skipStep("partition", skip = 1)
-
return INSTALL_OK
def addDriveDialog(self, screen):