mirror of
https://github.com/peridotbuild/pv2.git
synced 2024-11-21 12:41:26 +00:00
add tarutil
This commit is contained in:
parent
33ff668e09
commit
2e15825258
@ -34,7 +34,8 @@ __all__ = [
|
||||
'SrpmImport',
|
||||
'GitImport',
|
||||
'ModuleImport',
|
||||
'JavaPortableImport'
|
||||
'JavaPortableImport',
|
||||
'SourceCodeImport'
|
||||
]
|
||||
# todo: add in logging and replace print with log
|
||||
|
||||
@ -1398,3 +1399,19 @@ class JavaPortableImport(Import):
|
||||
Returns the portable java git URL
|
||||
"""
|
||||
return self.__portable_git_url
|
||||
|
||||
class SourceCodeImport(Import):
|
||||
"""
|
||||
Grabs source code of a package and imports it to a separate org/repo for
|
||||
code only.
|
||||
"""
|
||||
# pylint: disable=too-many-arguments
|
||||
def __init__(
|
||||
self,
|
||||
pkg_name: str,
|
||||
git_url_path: str,
|
||||
branch: str,
|
||||
git_user: str = 'git',
|
||||
org: str = 'src',
|
||||
):
|
||||
print()
|
||||
|
59
pv2/util/tarutil.py
Normal file
59
pv2/util/tarutil.py
Normal file
@ -0,0 +1,59 @@
|
||||
"""
|
||||
Tar functions
|
||||
"""
|
||||
|
||||
import tarfile
|
||||
from pv2.util import error as err
|
||||
from pv2.util import fileutil
|
||||
|
||||
# Tar utilities
|
||||
__all__ = [
|
||||
'tar_members',
|
||||
'type_of_tar',
|
||||
'tarextract'
|
||||
]
|
||||
|
||||
def tar_members(tf, subdir):
|
||||
"""
|
||||
Acts as a "strip component" for tar
|
||||
"""
|
||||
l = len(f"{subdir}/")
|
||||
for member in tf.getmembers():
|
||||
if member.path.startswith(f"{subdir}/"):
|
||||
member.path = member.path[l:]
|
||||
yield member
|
||||
|
||||
def type_of_tar(tf):
|
||||
"""
|
||||
Determines what compression method was used.
|
||||
"""
|
||||
tardata = fileutil.get_magic_file(tf)
|
||||
|
||||
if 'XZ compressed data' in tardata.name:
|
||||
return 'xz'
|
||||
if 'gzip compressed data' in tardata.name:
|
||||
return 'gz'
|
||||
if 'bzip2 compressed data' in tardata.name:
|
||||
return 'bz2'
|
||||
|
||||
return None
|
||||
|
||||
def tarextract(source, dest, topdir_to_strip='', strip=False):
|
||||
"""
|
||||
Extracts a given tar ball to a specific location
|
||||
"""
|
||||
try:
|
||||
with tarfile.open(source) as tar:
|
||||
if strip:
|
||||
tar.extractall(members=tar_members(tar, topdir_to_strip), filter='tar', path=dest)
|
||||
else:
|
||||
tar.extractall(filter='tar', path=dest)
|
||||
tar.close()
|
||||
except tarfile.ReadError as re:
|
||||
raise err.GenericError(f'Could not read tar file: {re}')
|
||||
except tarfile.CompressionError as ce:
|
||||
raise err.GenericError(f'This system does not support compression type used: {ce}')
|
||||
except tarfile.ExtractError as ee:
|
||||
raise err.GenericError(f'Extraction error: {ee}')
|
||||
except Exception as exc:
|
||||
raise err.GenericError(f'Uncaught error: {exc}')
|
Loading…
Reference in New Issue
Block a user