Merge pull request #302 from CanonicalLtd/mwhudson/no-partnum-in-ui

remove ability to supply partition number from the UI
This commit is contained in:
Michael Hudson-Doyle 2018-03-26 11:54:00 +13:00 committed by GitHub
commit 9ed5de40b2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 19 additions and 34 deletions

View File

@ -152,7 +152,6 @@ class FilesystemController(BaseController):
log.debug('disk.freespace: {}'.format(disk.free))
if partition is not None:
partition.number = spec['partnum']
partition.size = align_up(spec['size'])
if disk.free < 0:
raise Exception("partition size too large")
@ -176,12 +175,12 @@ class FilesystemController(BaseController):
if not system_bootable and len(disk.partitions()) == 0:
if self.is_uefi():
log.debug('Adding EFI partition first')
part = self.model.add_partition(disk=disk, partnum=1, size=UEFI_GRUB_SIZE_BYTES, flag='boot')
part = self.model.add_partition(disk=disk, size=UEFI_GRUB_SIZE_BYTES, flag='boot')
fs = self.model.add_filesystem(part, 'fat32')
self.model.add_mount(fs, '/boot/efi')
else:
log.debug('Adding grub_bios gpt partition first')
part = self.model.add_partition(disk=disk, partnum=1, size=BIOS_GRUB_SIZE_BYTES, flag='bios_grub')
part = self.model.add_partition(disk=disk, size=BIOS_GRUB_SIZE_BYTES, flag='bios_grub')
disk.grub_device = True
# adjust downward the partition size to accommodate
@ -191,9 +190,8 @@ class FilesystemController(BaseController):
"{} - {} = {}".format(spec['size'], part.size,
spec['size'] - part.size))
spec['size'] -= part.size
spec['partnum'] = 2
part = self.model.add_partition(disk=disk, partnum=spec["partnum"], size=spec["size"])
part = self.model.add_partition(disk=disk, size=spec["size"])
if spec['fstype'].label is not None:
fs = self.model.add_filesystem(part, spec['fstype'].label)
if spec['mount']:
@ -287,12 +285,12 @@ class FilesystemController(BaseController):
self.ui.set_body(afv_view)
def format_mount_partition(self, partition):
log.debug("format_entire {}".format(partition))
log.debug("format_mount_partition {}".format(partition))
if partition.fs() is not None:
header = (_("Mount partition {} of {}").format(partition.number, partition.device.label))
header = (_("Mount partition {} of {}").format(partition._number, partition.device.label))
footer = _("Mount partition.")
else:
header = (_("Format and mount partition {} of {}").format(partition.number, partition.device.label))
header = (_("Format and mount partition {} of {}").format(partition._number, partition.device.label))
footer = _("Format and mount partition.")
self.ui.set_header(header)
self.ui.set_footer(footer)

View File

@ -157,16 +157,6 @@ class Disk:
def available(self):
return self.used < self.size
@property
def next_partnum(self):
partnums = set()
for p in self._partitions:
partnums.add(p.number)
i = 1
while i in partnums:
i += 1
return i
@property
def size(self):
return align_down(self._info.size) - (2<<20) # The first and last megabyte of the disk are not usable.
@ -199,7 +189,6 @@ class Partition:
id = attr.ib(default=id_factory("part"))
type = attr.ib(default="partition")
number = attr.ib(default=0)
device = attr.ib(default=None) # Disk
size = attr.ib(default=None)
wipe = attr.ib(default=None)
@ -224,9 +213,14 @@ class Partition:
return fs_obj.is_mounted
return False
@property
def _number(self):
return self.device._partitions.index(self) + 1
@property
def path(self):
return "%s%s"%(self.device.path, self.number)
return "%s%s"%(self.device.path, self._number)
@attr.s
@ -360,7 +354,7 @@ class FilesystemModel(object):
def get_disk(self, path):
return self._available_disks.get(path)
def add_partition(self, disk, partnum, size, flag=""):
def add_partition(self, disk, size, flag=""):
if size > disk.free:
raise Exception("%s > %s", size, disk.free)
real_size = align_up(size)
@ -368,7 +362,7 @@ class FilesystemModel(object):
self._use_disk(disk)
if disk._fs is not None:
raise Exception("%s is already formatted" % (disk.path,))
p = Partition(device=disk, number=partnum, size=real_size, flag=flag)
p = Partition(device=disk, size=real_size, flag=flag)
disk._partitions.append(p)
self._partitions.append(p)
return p

View File

@ -87,7 +87,7 @@ class DiskPartitionView(BaseView):
partitioned_disks.append(format_volume("entire disk", self.disk))
else:
for part in self.disk.partitions():
partitioned_disks.append(format_volume("Partition {}".format(part.number), part))
partitioned_disks.append(format_volume("Partition {}".format(part._number), part))
if self.disk.free > 0:
free_space = humanize_size(self.disk.free)
if len(self.disk.partitions()) > 0:

View File

@ -195,7 +195,7 @@ class FilesystemView(BaseView):
disk_btn = Color.info_minor(Text(" " + label))
col1(disk_btn)
for partition in disk.partitions():
label = "partition {}, ".format(partition.number)
label = "partition {}, ".format(partition._number)
fs = partition.fs()
if fs is not None:
if fs.mount():

View File

@ -90,7 +90,6 @@ class GuidedDiskSelectionView(BaseView):
def choose_disk(self, btn, disk):
self.model.reset()
result = {
"partnum": 1,
"size": disk.free,
"fstype": self.model.fs_by_name["ext4"],
"mount": "/",

View File

@ -91,7 +91,6 @@ class PartitionForm(Form):
self.size.caption = "Size (max {})".format(self.size_str)
super().__init__(initial)
if max_size is None:
self.remove_field('partnum')
self.remove_field('size')
connect_signal(self.fstype.widget, 'select', self.select_fstype)
self.select_fstype(None, self.fstype.widget.value)
@ -99,7 +98,6 @@ class PartitionForm(Form):
def select_fstype(self, sender, fs):
self.mount.enabled = fs.is_mounted
partnum = IntegerField("Partition number")
size = SizeField()
fstype = FSTypeField("Format")
mount = MountField("Mount")
@ -186,15 +184,12 @@ class PartitionView(PartitionFormatView):
self.partition = partition
max_size = disk.free
initial = {}
if partition is None:
initial = {'partnum': disk.next_partnum}
label = _("Create")
else:
max_size += partition.size
initial = {
'partnum': partition.number,
'size': humanize_size(partition.size),
}
initial['size'] = humanize_size(partition.size)
label = _("Save")
super().__init__(max_size, partition, initial, lambda : self.controller.partition_disk(disk))
self.form.buttons.base_widget[0].set_label(label)

View File

@ -35,7 +35,7 @@ class PartitionViewTests(unittest.TestCase):
view = self.make_view()
focus_path = view_helpers.get_focus_path(view)
for w in reversed(focus_path):
if w is view.form.partnum.widget:
if w is view.form.size.widget:
return
else:
self.fail("Guided button not focus")
@ -71,7 +71,6 @@ class PartitionViewTests(unittest.TestCase):
def test_create_partition(self):
valid_data = {
'partnum':1,
'size':"1M",
'fstype':FilesystemModel.fs_by_name["ext4"],
}