refs #1513 add ogSetPartitionId

code-review
Natalia Serrano 2025-02-14 13:54:20 +01:00
parent 788ae31b0f
commit 0d8d543526
1 changed files with 24 additions and 40 deletions

View File

@ -10,6 +10,7 @@ import filecmp
import subprocess import subprocess
import shutil import shutil
import os import os
import re
import stat import stat
from pathlib import Path from pathlib import Path
@ -1167,52 +1168,35 @@ def ogSetPartitionActive (disk, par):
#@exception OG_ERR_PARTITION Error al cambiar el id. de partición. #@exception OG_ERR_PARTITION Error al cambiar el id. de partición.
#@attention Requisitos: fdisk, sgdisk #@attention Requisitos: fdisk, sgdisk
#*/ ## #*/ ##
def ogSetPartitionId(*args): def ogSetPartitionId (disk, par, id):
# Variables locales DISK = ogDiskToDev (disk)
DISK = None if not DISK: return None
PART = None
PTTYPE = None
ID = None
# Si se solicita, mostrar ayuda. PART = ogDiskToDev (disk, par)
if len(args) == 1 and args[0] == "help": if not PART: return None
SystemLib.ogHelp('ogSetPartitionId', 'ogSetPartitionId int_ndisk int_npartition hex_partid', 'ogSetPartitionId 1 1 7')
return
# Error si no se reciben 3 parámetros. # Error si el id. de partición no es hexadecimal.
if len(args) != 3: if not re.match ('^[0-9A-Fa-f]+$', id):
SystemLib.ogRaiseError(OG_ERR_FORMAT) SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_OUTOFLIMIT, id)
return return None
# Sustituye nº de disco y nº partición por su dispositivo. # Elección del tipo de partición.
DISK = ogDiskToDev(args[0]) PTTYPE = ogGetPartitionTableType (disk)
if DISK is None: if 'GPT' == PTTYPE:
return p = subprocess.run (['sgdisk', f'-t{par}:{id.upper()}', DISK])
PART = ogDiskToDev(args[0], args[1]) elif 'MSDOS' == PTTYPE:
if PART is None: p = subprocess.run (['sfdisk', '--id', DISK, par, id.upper()])
return
# Error si el id. de partición no es hexadecimal.
ID = args[2].upper()
if not re.match("^[0-9A-F]+$", ID):
SystemLib.ogRaiseError(OG_ERR_OUTOFLIMIT, args[2])
return
# Elección del tipo de partición.
PTTYPE = ogGetPartitionTableType(args[0])
if PTTYPE == "GPT":
subprocess.run(["sgdisk", f"-t{args[1]}:{ID}", DISK], stderr=subprocess.DEVNULL)
elif PTTYPE == "MSDOS":
subprocess.run(["sfdisk", f"--id", DISK, args[1], ID], stderr=subprocess.DEVNULL)
else: else:
SystemLib.ogRaiseError(OG_ERR_OUTOFLIMIT, f"{args[0]},{PTTYPE}") SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_OUTOFLIMIT, f'{disk},{PTTYPE}')
return return None
# MSDOS) Correcto si fdisk sin error o con error pero realiza Syncing # MSDOS) Correcto si fdisk sin error o con error pero realiza Syncing
if subprocess.run(["partprobe", DISK], stderr=subprocess.DEVNULL).returncode == 0: if 0 == p.returncode:
return subprocess.run (['partprobe', DISK])
return True
else: else:
SystemLib.ogRaiseError(OG_ERR_PARTITION, f"{args[0]},{args[1]},{args[2]}") SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_PARTITION, f'{disk},{part},{id}')
return return None
#/** #/**