Добавлена частичная поддержка tar.xz. Исправлена работа с layman/make.conf

master-3.5 3.5.4.1
Mike Hiretsky 7 years ago
parent 22e1eba05a
commit 8dabc6e187

@ -1440,8 +1440,7 @@ def get_free_dirname(dn):
"""
Возвращает имя указанной директорий если оно отсутствует либо добавляются
цифры
:param base_dn:
:param name:
:param dn:
:return:
"""
if not path.exists(dn):
@ -1498,6 +1497,21 @@ def tar_directory(dn, archfile):
except (IOError, OSError) as e:
raise FilesError(_("Failed to create tarball: %s") % str(e))
def tar_xz_directory(dn, archfile):
"""
Заархивировать указанную директорю в xz формате
:param dn:
:param archfile:
:return:
"""
try:
tar = "/bin/tar"
p = process(tar, "-cJf", archfile, "-C", dn, *listDirectory(dn))
if p.failed():
raise FilesError(_("Failed to create tarball: %s")
% str(p.readerr()))
except (IOError, OSError) as e:
raise FilesError(_("Failed to create tarball: %s") % str(e))
def tar_list(file_list, archfile, prefix='/'):
"""
@ -1585,3 +1599,38 @@ def xz(data, decompress=False):
return data
else:
raise FilesError(errors)
class XZStreamRead(object):
"""
XZ объект для чтения данных для tarfile
"""
def __init__(self, data):
self._data = xz(data, decompress=True)
self.pos = 0
def tell(self):
return self.pos
def seek(self, n=0):
self.pos = n
def read(self, size=None):
if size is None:
try:
return self._data[self.pos:]
finally:
self.pos = len(self._data)
try:
return self._data[self.pos:self.pos+size]
finally:
self.pos += min(size,len(self._data))
@contextmanager
def xztaropen(fn):
f = None
try:
f = tarfile.TarFile(mode="r", fileobj=XZStreamRead(readFile(fn)))
yield f
finally:
if f:
f.close()

@ -419,8 +419,7 @@ class Layman(object):
self._add_to_installed(rname, rurl)
if self.is_new_layman():
self._add_to_laymanconf(rname, rurl, rpath)
else:
self._add_to_makeconf(rpath)
self._add_to_makeconf(rpath)
return True
def _remove_from_installed(self, rname):
@ -450,8 +449,7 @@ class Layman(object):
self._remove_from_installed(rname)
if self.is_new_layman():
self._remove_from_laymanconf(rname)
else:
self._remove_from_makeconf(rpath)
self._remove_from_makeconf(rpath)
return True
def get_installed(self):

@ -41,4 +41,4 @@ class VariableClVer(ReadonlyVariable):
"""
Package version
"""
value = "3.5.4"
value = "3.5.4.1"

Loading…
Cancel
Save