Skip to content
This repository has been archived by the owner on Mar 6, 2024. It is now read-only.

Commit

Permalink
Partition edit dialog: fix the "format" checkbox (#1093)
Browse files Browse the repository at this point in the history
  • Loading branch information
jpnurmi committed Sep 5, 2022
1 parent 78501c1 commit c3f67bc
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 70 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -198,9 +198,14 @@ Future<void> showEditPartitionDialog(
],
<Widget>[
const SizedBox.shrink(),
_PartitionWipeCheckbox(
canWipe: partition.canWipe,
wipe: partitionWipe,
ValueListenableBuilder(
valueListenable: partitionFormat,
builder: (context, value, child) {
return _PartitionWipeCheckbox(
canWipe: partitionFormat.value?.canWipe == true,
wipe: partitionWipe,
);
},
),
],
<Widget>[
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ import 'dart:async';

import 'package:dartx/dartx.dart';
import 'package:safe_change_notifier/safe_change_notifier.dart';
import 'package:subiquity_client/subiquity_client.dart';

import '../../services.dart';
import 'storage_types.dart';

/// The default mount points for auto-completion.
const kDefaultMountPoints = <String>[
Expand All @@ -19,63 +19,6 @@ const kDefaultMountPoints = <String>[
'/usr/local',
];

/// Available partition formats.
class PartitionFormat {
const PartitionFormat._(this.type);

/// The type of the partition format (e.g. 'ext4').
final String type;

@override
String toString() => type;

static const btrfs = PartitionFormat._('btrfs');
static const ext2 = PartitionFormat._('ext2');
static const ext3 = PartitionFormat._('ext3');
static const ext4 = PartitionFormat._('ext4');
static const fat = PartitionFormat._('fat');
static const fat12 = PartitionFormat._('fat12');
static const fat16 = PartitionFormat._('fat16');
static const fat32 = PartitionFormat._('fat32');
static const iso9660 = PartitionFormat._('iso9660');
static const vfat = PartitionFormat._('vfat');
static const jfs = PartitionFormat._('jfs');
static const ntfs = PartitionFormat._('ntfs');
static const reiserfs = PartitionFormat._('reiserfs');
static const swap = PartitionFormat._('swap');
static const xfs = PartitionFormat._('xfs');
static const zfsroot = PartitionFormat._('zfsroot');

/// The default partition format.
static PartitionFormat get defaultValue => _formats['ext4']!;

/// Converts a Partition object to a PartitionFormat enum value.
static PartitionFormat? fromPartition(Partition partition) =>
_formats[partition.format];

/// Available partition formats.
static List<PartitionFormat> get values => _formats.values.toList();

static const _formats = <String, PartitionFormat>{
'btrfs': btrfs,
'ext2': ext2,
'ext3': ext3,
'ext4': ext4,
'fat': fat,
'fat12': fat12,
'fat16': fat16,
'fat32': fat32,
'iso9660': iso9660,
'vfat': vfat,
'jfs': jfs,
'ntfs': ntfs,
'reiserfs': reiserfs,
'swap': swap,
'xfs': xfs,
'zfsroot': zfsroot,
};
}

/// The location of the partition within to the available space around.
enum PartitionLocation {
/// At the beginning of the free space.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,67 @@ extension DiskExtension on Disk {
}

extension PartitionExtension on Partition {
bool get canWipe => mount != null;
bool get canWipe => PartitionFormat.fromPartition(this)?.canWipe == true;
bool get isWiped => wipe == 'superblock';
String get prettySize => filesize(size ?? 0);
}

/// Available partition formats.
class PartitionFormat {
const PartitionFormat._(this.type);

/// The type of the partition format (e.g. 'ext4').
final String type;

/// Whether a partition with this format can be wiped.
bool get canWipe => type != 'swap';

@override
String toString() => type;

static const btrfs = PartitionFormat._('btrfs');
static const ext2 = PartitionFormat._('ext2');
static const ext3 = PartitionFormat._('ext3');
static const ext4 = PartitionFormat._('ext4');
static const fat = PartitionFormat._('fat');
static const fat12 = PartitionFormat._('fat12');
static const fat16 = PartitionFormat._('fat16');
static const fat32 = PartitionFormat._('fat32');
static const iso9660 = PartitionFormat._('iso9660');
static const vfat = PartitionFormat._('vfat');
static const jfs = PartitionFormat._('jfs');
static const ntfs = PartitionFormat._('ntfs');
static const reiserfs = PartitionFormat._('reiserfs');
static const swap = PartitionFormat._('swap');
static const xfs = PartitionFormat._('xfs');
static const zfsroot = PartitionFormat._('zfsroot');

/// The default partition format.
static PartitionFormat get defaultValue => _formats['ext4']!;

/// Converts a Partition object to a PartitionFormat enum value.
static PartitionFormat? fromPartition(Partition partition) =>
_formats[partition.format];

/// Available partition formats.
static List<PartitionFormat> get values => _formats.values.toList();

static const _formats = <String, PartitionFormat>{
'btrfs': btrfs,
'ext2': ext2,
'ext3': ext3,
'ext4': ext4,
'fat': fat,
'fat12': fat12,
'fat16': fat16,
'fat32': fat32,
'iso9660': iso9660,
'vfat': vfat,
'jfs': jfs,
'ntfs': ntfs,
'reiserfs': reiserfs,
'swap': swap,
'xfs': xfs,
'zfsroot': zfsroot,
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -186,16 +186,16 @@ void main() {
testDisk(partitions: [Gap(offset: 0, size: 1, usable: GapUsable.YES)]);
final fullDisk = testDisk();
final normalDisk = emptyDisk.copyWith(partitions: [Partition()]);
final mountedPartition =
emptyDisk.copyWith(partitions: [Partition(mount: '/')]);
final formattedPartition =
emptyDisk.copyWith(partitions: [Partition(format: 'ext4')]);

final service = MockDiskStorageService();
when(service.getStorage()).thenAnswer(
(_) async => [
emptyDisk,
fullDisk,
normalDisk,
mountedPartition,
formattedPartition,
],
);

Expand Down Expand Up @@ -255,7 +255,7 @@ void main() {
expect(model.canReformatDisk, isFalse);

model.selectStorage(3, 0);
expect(model.selectedDisk, equals(mountedPartition));
expect(model.selectedDisk, equals(formattedPartition));
expect(model.selectedPartition, isNotNull);
expect(model.selectedPartition!.canWipe, isTrue);
expect(model.selectedGap, isNull);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ final testDisks = <Disk>[
number: 1,
size: 11,
mount: '/mnt/1',
format: 'ext',
format: 'btrfs',
preserve: true,
),
Partition(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@ import 'dart:async' as _i5;
import 'dart:ui' as _i6;

import 'package:mockito/mockito.dart' as _i1;
import 'package:subiquity_client/subiquity_client.dart' as _i4;
import 'package:ubuntu_desktop_installer/pages/allocate_disk_space/allocate_disk_space_model.dart'
as _i3;
import 'package:ubuntu_desktop_installer/pages/allocate_disk_space/storage_types.dart'
as _i4;
import 'package:ubuntu_desktop_installer/services.dart' as _i2;

// ignore_for_file: type=lint
Expand Down Expand Up @@ -89,7 +90,7 @@ class MockAllocateDiskSpaceModel extends _i1.Mock
returnValue: false) as bool);
@override
_i5.Future<void> addPartition(_i4.Disk? disk, _i4.Gap? gap,
{int? size, _i3.PartitionFormat? format, String? mount}) =>
{int? size, _i4.PartitionFormat? format, String? mount}) =>
(super.noSuchMethod(
Invocation.method(#addPartition, [disk, gap],
{#size: size, #format: format, #mount: mount}),
Expand All @@ -98,7 +99,7 @@ class MockAllocateDiskSpaceModel extends _i1.Mock
as _i5.Future<void>);
@override
_i5.Future<void> editPartition(_i4.Disk? disk, _i4.Partition? partition,
{_i3.PartitionFormat? format, bool? wipe, String? mount}) =>
{_i4.PartitionFormat? format, bool? wipe, String? mount}) =>
(super.noSuchMethod(
Invocation.method(#editPartition, [disk, partition],
{#format: format, #wipe: wipe, #mount: mount}),
Expand Down

0 comments on commit c3f67bc

Please sign in to comment.