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:
commit
9ed5de40b2
|
@ -152,7 +152,6 @@ class FilesystemController(BaseController):
|
||||||
log.debug('disk.freespace: {}'.format(disk.free))
|
log.debug('disk.freespace: {}'.format(disk.free))
|
||||||
|
|
||||||
if partition is not None:
|
if partition is not None:
|
||||||
partition.number = spec['partnum']
|
|
||||||
partition.size = align_up(spec['size'])
|
partition.size = align_up(spec['size'])
|
||||||
if disk.free < 0:
|
if disk.free < 0:
|
||||||
raise Exception("partition size too large")
|
raise Exception("partition size too large")
|
||||||
|
@ -176,12 +175,12 @@ class FilesystemController(BaseController):
|
||||||
if not system_bootable and len(disk.partitions()) == 0:
|
if not system_bootable and len(disk.partitions()) == 0:
|
||||||
if self.is_uefi():
|
if self.is_uefi():
|
||||||
log.debug('Adding EFI partition first')
|
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')
|
fs = self.model.add_filesystem(part, 'fat32')
|
||||||
self.model.add_mount(fs, '/boot/efi')
|
self.model.add_mount(fs, '/boot/efi')
|
||||||
else:
|
else:
|
||||||
log.debug('Adding grub_bios gpt partition first')
|
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
|
disk.grub_device = True
|
||||||
|
|
||||||
# adjust downward the partition size to accommodate
|
# adjust downward the partition size to accommodate
|
||||||
|
@ -191,9 +190,8 @@ class FilesystemController(BaseController):
|
||||||
"{} - {} = {}".format(spec['size'], part.size,
|
"{} - {} = {}".format(spec['size'], part.size,
|
||||||
spec['size'] - part.size))
|
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:
|
if spec['fstype'].label is not None:
|
||||||
fs = self.model.add_filesystem(part, spec['fstype'].label)
|
fs = self.model.add_filesystem(part, spec['fstype'].label)
|
||||||
if spec['mount']:
|
if spec['mount']:
|
||||||
|
@ -287,12 +285,12 @@ class FilesystemController(BaseController):
|
||||||
self.ui.set_body(afv_view)
|
self.ui.set_body(afv_view)
|
||||||
|
|
||||||
def format_mount_partition(self, partition):
|
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:
|
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.")
|
footer = _("Mount partition.")
|
||||||
else:
|
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.")
|
footer = _("Format and mount partition.")
|
||||||
self.ui.set_header(header)
|
self.ui.set_header(header)
|
||||||
self.ui.set_footer(footer)
|
self.ui.set_footer(footer)
|
||||||
|
|
|
@ -157,16 +157,6 @@ class Disk:
|
||||||
def available(self):
|
def available(self):
|
||||||
return self.used < self.size
|
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
|
@property
|
||||||
def size(self):
|
def size(self):
|
||||||
return align_down(self._info.size) - (2<<20) # The first and last megabyte of the disk are not usable.
|
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"))
|
id = attr.ib(default=id_factory("part"))
|
||||||
type = attr.ib(default="partition")
|
type = attr.ib(default="partition")
|
||||||
number = attr.ib(default=0)
|
|
||||||
device = attr.ib(default=None) # Disk
|
device = attr.ib(default=None) # Disk
|
||||||
size = attr.ib(default=None)
|
size = attr.ib(default=None)
|
||||||
wipe = attr.ib(default=None)
|
wipe = attr.ib(default=None)
|
||||||
|
@ -224,9 +213,14 @@ class Partition:
|
||||||
return fs_obj.is_mounted
|
return fs_obj.is_mounted
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
@property
|
||||||
|
def _number(self):
|
||||||
|
return self.device._partitions.index(self) + 1
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def path(self):
|
def path(self):
|
||||||
return "%s%s"%(self.device.path, self.number)
|
return "%s%s"%(self.device.path, self._number)
|
||||||
|
|
||||||
|
|
||||||
@attr.s
|
@attr.s
|
||||||
|
@ -360,7 +354,7 @@ class FilesystemModel(object):
|
||||||
def get_disk(self, path):
|
def get_disk(self, path):
|
||||||
return self._available_disks.get(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:
|
if size > disk.free:
|
||||||
raise Exception("%s > %s", size, disk.free)
|
raise Exception("%s > %s", size, disk.free)
|
||||||
real_size = align_up(size)
|
real_size = align_up(size)
|
||||||
|
@ -368,7 +362,7 @@ class FilesystemModel(object):
|
||||||
self._use_disk(disk)
|
self._use_disk(disk)
|
||||||
if disk._fs is not None:
|
if disk._fs is not None:
|
||||||
raise Exception("%s is already formatted" % (disk.path,))
|
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)
|
disk._partitions.append(p)
|
||||||
self._partitions.append(p)
|
self._partitions.append(p)
|
||||||
return p
|
return p
|
||||||
|
|
|
@ -87,7 +87,7 @@ class DiskPartitionView(BaseView):
|
||||||
partitioned_disks.append(format_volume("entire disk", self.disk))
|
partitioned_disks.append(format_volume("entire disk", self.disk))
|
||||||
else:
|
else:
|
||||||
for part in self.disk.partitions():
|
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:
|
if self.disk.free > 0:
|
||||||
free_space = humanize_size(self.disk.free)
|
free_space = humanize_size(self.disk.free)
|
||||||
if len(self.disk.partitions()) > 0:
|
if len(self.disk.partitions()) > 0:
|
||||||
|
|
|
@ -195,7 +195,7 @@ class FilesystemView(BaseView):
|
||||||
disk_btn = Color.info_minor(Text(" " + label))
|
disk_btn = Color.info_minor(Text(" " + label))
|
||||||
col1(disk_btn)
|
col1(disk_btn)
|
||||||
for partition in disk.partitions():
|
for partition in disk.partitions():
|
||||||
label = "partition {}, ".format(partition.number)
|
label = "partition {}, ".format(partition._number)
|
||||||
fs = partition.fs()
|
fs = partition.fs()
|
||||||
if fs is not None:
|
if fs is not None:
|
||||||
if fs.mount():
|
if fs.mount():
|
||||||
|
|
|
@ -90,7 +90,6 @@ class GuidedDiskSelectionView(BaseView):
|
||||||
def choose_disk(self, btn, disk):
|
def choose_disk(self, btn, disk):
|
||||||
self.model.reset()
|
self.model.reset()
|
||||||
result = {
|
result = {
|
||||||
"partnum": 1,
|
|
||||||
"size": disk.free,
|
"size": disk.free,
|
||||||
"fstype": self.model.fs_by_name["ext4"],
|
"fstype": self.model.fs_by_name["ext4"],
|
||||||
"mount": "/",
|
"mount": "/",
|
||||||
|
|
|
@ -91,7 +91,6 @@ class PartitionForm(Form):
|
||||||
self.size.caption = "Size (max {})".format(self.size_str)
|
self.size.caption = "Size (max {})".format(self.size_str)
|
||||||
super().__init__(initial)
|
super().__init__(initial)
|
||||||
if max_size is None:
|
if max_size is None:
|
||||||
self.remove_field('partnum')
|
|
||||||
self.remove_field('size')
|
self.remove_field('size')
|
||||||
connect_signal(self.fstype.widget, 'select', self.select_fstype)
|
connect_signal(self.fstype.widget, 'select', self.select_fstype)
|
||||||
self.select_fstype(None, self.fstype.widget.value)
|
self.select_fstype(None, self.fstype.widget.value)
|
||||||
|
@ -99,7 +98,6 @@ class PartitionForm(Form):
|
||||||
def select_fstype(self, sender, fs):
|
def select_fstype(self, sender, fs):
|
||||||
self.mount.enabled = fs.is_mounted
|
self.mount.enabled = fs.is_mounted
|
||||||
|
|
||||||
partnum = IntegerField("Partition number")
|
|
||||||
size = SizeField()
|
size = SizeField()
|
||||||
fstype = FSTypeField("Format")
|
fstype = FSTypeField("Format")
|
||||||
mount = MountField("Mount")
|
mount = MountField("Mount")
|
||||||
|
@ -186,15 +184,12 @@ class PartitionView(PartitionFormatView):
|
||||||
self.partition = partition
|
self.partition = partition
|
||||||
|
|
||||||
max_size = disk.free
|
max_size = disk.free
|
||||||
|
initial = {}
|
||||||
if partition is None:
|
if partition is None:
|
||||||
initial = {'partnum': disk.next_partnum}
|
|
||||||
label = _("Create")
|
label = _("Create")
|
||||||
else:
|
else:
|
||||||
max_size += partition.size
|
max_size += partition.size
|
||||||
initial = {
|
initial['size'] = humanize_size(partition.size)
|
||||||
'partnum': partition.number,
|
|
||||||
'size': humanize_size(partition.size),
|
|
||||||
}
|
|
||||||
label = _("Save")
|
label = _("Save")
|
||||||
super().__init__(max_size, partition, initial, lambda : self.controller.partition_disk(disk))
|
super().__init__(max_size, partition, initial, lambda : self.controller.partition_disk(disk))
|
||||||
self.form.buttons.base_widget[0].set_label(label)
|
self.form.buttons.base_widget[0].set_label(label)
|
||||||
|
|
|
@ -35,7 +35,7 @@ class PartitionViewTests(unittest.TestCase):
|
||||||
view = self.make_view()
|
view = self.make_view()
|
||||||
focus_path = view_helpers.get_focus_path(view)
|
focus_path = view_helpers.get_focus_path(view)
|
||||||
for w in reversed(focus_path):
|
for w in reversed(focus_path):
|
||||||
if w is view.form.partnum.widget:
|
if w is view.form.size.widget:
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
self.fail("Guided button not focus")
|
self.fail("Guided button not focus")
|
||||||
|
@ -71,7 +71,6 @@ class PartitionViewTests(unittest.TestCase):
|
||||||
|
|
||||||
def test_create_partition(self):
|
def test_create_partition(self):
|
||||||
valid_data = {
|
valid_data = {
|
||||||
'partnum':1,
|
|
||||||
'size':"1M",
|
'size':"1M",
|
||||||
'fstype':FilesystemModel.fs_by_name["ext4"],
|
'fstype':FilesystemModel.fs_by_name["ext4"],
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue