Merge pull request 'flash: Replace disks[str,str] with list[Disk] type' (#2100) from Qubasa/clan-core:Qubasa-main into main
This commit is contained in:
@@ -140,12 +140,18 @@ def list_possible_languages() -> list[str]:
|
|||||||
return languages
|
return languages
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Disk:
|
||||||
|
name: str
|
||||||
|
device: str
|
||||||
|
|
||||||
|
|
||||||
@API.register
|
@API.register
|
||||||
def flash_machine(
|
def flash_machine(
|
||||||
machine: Machine,
|
machine: Machine,
|
||||||
*,
|
*,
|
||||||
mode: str,
|
mode: str,
|
||||||
disks: dict[str, str],
|
disks: list[Disk],
|
||||||
system_config: SystemConfig,
|
system_config: SystemConfig,
|
||||||
dry_run: bool,
|
dry_run: bool,
|
||||||
write_efi_boot_entries: bool,
|
write_efi_boot_entries: bool,
|
||||||
@@ -153,7 +159,7 @@ def flash_machine(
|
|||||||
no_udev: bool = False,
|
no_udev: bool = False,
|
||||||
extra_args: list[str] | None = None,
|
extra_args: list[str] | None = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
devices = [Path(device) for device in disks.values()]
|
devices = [Path(disk.device) for disk in disks]
|
||||||
with pause_automounting(devices, no_udev):
|
with pause_automounting(devices, no_udev):
|
||||||
if extra_args is None:
|
if extra_args is None:
|
||||||
extra_args = []
|
extra_args = []
|
||||||
@@ -226,8 +232,8 @@ def flash_machine(
|
|||||||
disko_install.append("--dry-run")
|
disko_install.append("--dry-run")
|
||||||
if debug:
|
if debug:
|
||||||
disko_install.append("--debug")
|
disko_install.append("--debug")
|
||||||
for name, device in disks.items():
|
for disk in disks:
|
||||||
disko_install.extend(["--disk", name, device])
|
disko_install.extend(["--disk", disk.name, disk.device])
|
||||||
|
|
||||||
disko_install.extend(["--extra-files", str(local_dir), upload_dir])
|
disko_install.extend(["--extra-files", str(local_dir), upload_dir])
|
||||||
disko_install.extend(["--flake", str(machine.flake) + "#" + machine.name])
|
disko_install.extend(["--flake", str(machine.flake) + "#" + machine.name])
|
||||||
@@ -252,7 +258,7 @@ def flash_machine(
|
|||||||
class FlashOptions:
|
class FlashOptions:
|
||||||
flake: FlakeId
|
flake: FlakeId
|
||||||
machine: str
|
machine: str
|
||||||
disks: dict[str, str]
|
disks: list[Disk]
|
||||||
dry_run: bool
|
dry_run: bool
|
||||||
confirm: bool
|
confirm: bool
|
||||||
debug: bool
|
debug: bool
|
||||||
@@ -271,12 +277,23 @@ class AppendDiskAction(argparse.Action):
|
|||||||
self,
|
self,
|
||||||
parser: argparse.ArgumentParser,
|
parser: argparse.ArgumentParser,
|
||||||
namespace: argparse.Namespace,
|
namespace: argparse.Namespace,
|
||||||
values: str | Sequence[str] | None,
|
values: str | Sequence[str] | None, # Updated type hint
|
||||||
option_string: str | None = None,
|
option_string: str | None = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
disks = getattr(namespace, self.dest)
|
# Ensure 'values' is a sequence of two elements
|
||||||
assert isinstance(values, list), "values must be a list"
|
if not (
|
||||||
disks[values[0]] = values[1]
|
isinstance(values, Sequence)
|
||||||
|
and not isinstance(values, str)
|
||||||
|
and len(values) == 2
|
||||||
|
):
|
||||||
|
msg = "Two values must be provided for a 'disk'"
|
||||||
|
raise ValueError(msg)
|
||||||
|
|
||||||
|
# Use the same logic as before, ensuring 'values' is a sequence
|
||||||
|
current_disks: list[Disk] = getattr(namespace, self.dest, [])
|
||||||
|
disk_name, disk_device = values
|
||||||
|
current_disks.append(Disk(name=disk_name, device=disk_device))
|
||||||
|
setattr(namespace, self.dest, current_disks)
|
||||||
|
|
||||||
|
|
||||||
def flash_command(args: argparse.Namespace) -> None:
|
def flash_command(args: argparse.Namespace) -> None:
|
||||||
@@ -317,7 +334,7 @@ def flash_command(args: argparse.Namespace) -> None:
|
|||||||
|
|
||||||
machine = Machine(opts.machine, flake=opts.flake)
|
machine = Machine(opts.machine, flake=opts.flake)
|
||||||
if opts.confirm and not opts.dry_run:
|
if opts.confirm and not opts.dry_run:
|
||||||
disk_str = ", ".join(f"{name}={device}" for name, device in opts.disks.items())
|
disk_str = ", ".join(f"{disk.name}={disk.device}" for disk in opts.disks)
|
||||||
msg = f"Install {machine.name}"
|
msg = f"Install {machine.name}"
|
||||||
if disk_str != "":
|
if disk_str != "":
|
||||||
msg += f" to {disk_str}"
|
msg += f" to {disk_str}"
|
||||||
@@ -351,10 +368,10 @@ def register_parser(parser: argparse.ArgumentParser) -> None:
|
|||||||
"--disk",
|
"--disk",
|
||||||
type=str,
|
type=str,
|
||||||
nargs=2,
|
nargs=2,
|
||||||
metavar=("name", "value"),
|
metavar=("name", "device"),
|
||||||
action=AppendDiskAction,
|
action=AppendDiskAction,
|
||||||
help="device to flash to",
|
help="device to flash to",
|
||||||
default={},
|
default=[],
|
||||||
)
|
)
|
||||||
mode_help = textwrap.dedent(
|
mode_help = textwrap.dedent(
|
||||||
"""\
|
"""\
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ export const Flash = () => {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
mode: "format",
|
mode: "format",
|
||||||
disks: { main: values.disk },
|
disks: [{ name: "main", device: values.disk }],
|
||||||
system_config: {
|
system_config: {
|
||||||
language: values.language,
|
language: values.language,
|
||||||
keymap: values.keymap,
|
keymap: values.keymap,
|
||||||
|
|||||||
Reference in New Issue
Block a user