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)) 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)

View File

@ -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

View File

@ -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:

View File

@ -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():

View File

@ -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": "/",

View File

@ -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)

View File

@ -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"],
} }