Добавлена попытка отключения устройств на которые будет ставиться система если используется параметр --force

develop 3.6.7.15
parent 8787048376
commit 2f64c6a65f

@ -23,7 +23,7 @@ import calculate.lib.utils.device as device
from calculate.lib.utils.device import humanreadableSize from calculate.lib.utils.device import humanreadableSize
from calculate.lib.utils import partition from calculate.lib.utils import partition
from calculate.lib.utils.files import (readLinesFile) from calculate.lib.utils.files import (readLinesFile)
from calculate.lib.utils.mount import isMount from calculate.lib.utils.mount import isMount, try_umount
from calculate.install.fs_manager import FileSystemManager from calculate.install.fs_manager import FileSystemManager
from calculate.lib.utils.tools import Sizes, traverse from calculate.lib.utils.tools import Sizes, traverse
from itertools import * from itertools import *
@ -295,6 +295,24 @@ class VariableClAutopartitionDevice(AutopartitionHelper, Variable):
if typecheck.search(fulltype): if typecheck.search(fulltype):
raise VariableError(_("RAID %s is wrong") % dev) raise VariableError(_("RAID %s is wrong") % dev)
def is_force_param(self):
return "--force" in self.Get("cl_console_args")
def get_mounted_devices(self):
mountedData = [(x,y) for x,y in self.ZipVars(
"os_disk_parent", "os_disk_dev") if isMount(y)]
mountedDevices = {}
for devices, disk in mountedData:
if not isMount(disk):
continue
if self.is_force_param() and try_umount(disk):
continue
for _device in traverse(devices.split(',')):
if _device not in mountedDevices:
mountedDevices[_device] = set()
mountedDevices[_device].add(disk)
return mountedDevices
def check(self, valuelist): def check(self, valuelist):
if self.Get('cl_autopartition_set') == "on": if self.Get('cl_autopartition_set') == "on":
if not valuelist: if not valuelist:
@ -303,14 +321,8 @@ class VariableClAutopartitionDevice(AutopartitionHelper, Variable):
useDisks = set(traverse(x.split(',') for x in self.Select( useDisks = set(traverse(x.split(',') for x in self.Select(
'os_disk_parent', where='os_disk_mount', ne=''))) 'os_disk_parent', where='os_disk_mount', ne='')))
mountedData = [(x,y) for x,y in self.ZipVars(
"os_disk_parent", "os_disk_dev") if isMount(y)] mountedDevices = self.get_mounted_devices()
mountedDevices = {}
for devices, disk in mountedData:
for _device in traverse(devices.split(',')):
if _device not in mountedDevices:
mountedDevices[_device] = set()
mountedDevices[_device].add(disk)
for value in chain(valuelist): for value in chain(valuelist):
for disk in set(chain(self.select( for disk in set(chain(self.select(

@ -35,7 +35,7 @@ from calculate.lib.utils.device import (getPartitionSize,
from calculate.install.variables.autopartition import Sizes from calculate.install.variables.autopartition import Sizes
from calculate.lib.utils.files import getProgPath from calculate.lib.utils.files import getProgPath
from calculate.lib.utils.mount import isMount, FStab, DiskSpace, Btrfs, \ from calculate.lib.utils.mount import isMount, FStab, DiskSpace, Btrfs, \
BtrfsError BtrfsError, try_umount
from calculate.install.fs_manager import FileSystemManager from calculate.install.fs_manager import FileSystemManager
from calculate.lib.cl_lang import setLocalTranslate, _ from calculate.lib.cl_lang import setLocalTranslate, _
@ -1418,6 +1418,9 @@ class VariableOsLocationPerformFormat(LocationHelper, Variable):
fixNtfs = lambda self, x: {'ntfs-3g': 'ntfs'}.get(x, x) fixNtfs = lambda self, x: {'ntfs-3g': 'ntfs'}.get(x, x)
def is_force_param(self):
return "--force" in self.Get("cl_console_args")
def check(self, value): def check(self, value):
"""Check perform format """Check perform format
@ -1453,9 +1456,10 @@ class VariableOsLocationPerformFormat(LocationHelper, Variable):
"mounted to {mountpoint} on the current system").format( "mounted to {mountpoint} on the current system").format(
device=dev, mountpoint=diskMount.get(dev, ''))) device=dev, mountpoint=diskMount.get(dev, '')))
if isMount(dev): if isMount(dev):
raise VariableError( if not self.is_force_param() or not try_umount(dev):
_("Please unmount {device}, as it will be used for " raise VariableError(
"installation").format(device=dev)) _("Please unmount {device}, as it will be used for "
"installation").format(device=dev))
# but user select non-format # but user select non-format
if not self.isTrue(isformat): if not self.isTrue(isformat):
raise VariableError( raise VariableError(
@ -1479,9 +1483,10 @@ class VariableOsLocationPerformFormat(LocationHelper, Variable):
).format( ).format(
device=dev, mountpoint=diskMount.get(dev, ''))) device=dev, mountpoint=diskMount.get(dev, '')))
elif isMount(dev): elif isMount(dev):
raise VariableError( if not self.is_force_param() or not try_umount(dev):
_("Please unmount disk {device} to " raise VariableError(
"use it for install").format(device=dev)) _("Please unmount disk {device} to "
"use it for install").format(device=dev))
def defaultPerformFormat(self): def defaultPerformFormat(self):
diskFormat = dict(zip(self.Get('os_disk_dev'), diskFormat = dict(zip(self.Get('os_disk_dev'),
@ -2036,6 +2041,9 @@ class VariableOsInstallUefi(LocationHelper, Variable):
def install_to_flash(self): def install_to_flash(self):
return self.Get('os_install_root_type') == 'flash' return self.Get('os_install_root_type') == 'flash'
def is_force_param(self):
return "--force" in self.Get("cl_console_args")
def get(self): def get(self):
# если используется авторазметка список разделов находится в ней # если используется авторазметка список разделов находится в ней
if self.GetBool('cl_autopartition_set'): if self.GetBool('cl_autopartition_set'):
@ -2117,9 +2125,11 @@ class VariableOsInstallUefi(LocationHelper, Variable):
os_disk_format__ne="vfat") os_disk_format__ne="vfat")
for efipart in value: for efipart in value:
if efipart in not_fat_efi and isMount(efipart): if efipart in not_fat_efi and isMount(efipart):
raise VariableError(
_("Please unmount {device}, as it will be used for " if not self.is_force_param() or not try_umount(efipart):
"installation").format(device=efipart)) raise VariableError(
_("Please unmount {device}, as it will be used for "
"installation").format(device=efipart))
for efipart in value: for efipart in value:
if efipart in self.select('os_location_source', if efipart in self.select('os_location_source',

Loading…
Cancel
Save