kiwi-el8/kiwi/utils/temporary.py
Marcus Schäfer a7b984115d
Fixed delta_root build
The support for delta_root allows to build a delta container
image from a given base container. Due to the refactoring of
the kiwi code base using context managers no explicit deletion
of instances happens anymore. This uncovered a weakness of
the delta root code at the level of the overlay mount. At
the time of the umount there are still active temporary
mount handlers which keeps the mountpoint busy. In order to
fix this properly also the PackageManager factory is now
a context manager and the Repository factory received a
cleanup method which is called when the PackageManager goes
out of scope. This refactoring also fixes the busy state
when building deltas
2024-03-07 15:50:58 +01:00

55 lines
1.5 KiB
Python

# Copyright (c) 2021 SUSE Linux GmbH. All rights reserved.
#
# This file is part of kiwi.
#
# kiwi is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# kiwi is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with kiwi. If not, see <http://www.gnu.org/licenses/>
#
from typing import IO, NamedTuple
from tempfile import (
NamedTemporaryFile,
TemporaryDirectory
)
# project
import kiwi.defaults as defaults
class TmpT(NamedTuple):
name: str
class Temporary:
"""
**Provides namespace to handle temporary files and directories**
"""
def __init__(
self, path: str = '', prefix: str = ''
):
self.prefix = prefix if prefix else 'kiwi_'
self.path = path or defaults.TEMP_DIR
def new_file(self) -> IO[bytes]:
return NamedTemporaryFile(
dir=self.path, prefix=self.prefix
)
def new_dir(self) -> TemporaryDirectory:
return TemporaryDirectory(
dir=self.path, prefix=self.prefix
)
def unmanaged_file(self) -> TmpT:
return TmpT(name=f'{self.path}/{self.prefix}')