def get_key(path): """calculate the debinfo key for a Debian binary package at <path>""" filename = None for fn in ar.list(path): if fn.startswith('control.tar'): filename = fn break return md5(ar.extract(path, filename)).hexdigest()
def _extract_control(path): control_tar_gz = ar.extract(path, "control.tar.gz") fh = StringIO(control_tar_gz) tar = tarfile.open("control.tar.gz", mode="r:gz", fileobj=fh) try: return tar.extractfile("./control").read() except KeyError: return tar.extractfile("control").read()
def _extract_control(path): filenames = ar.list(path) filename = None for fn in filenames: if fn.startswith('control.tar'): filename = fn break if not filename: raise Error("no 'control.tar.[gz|bz2|xz]' in archive") _, compression_type = splitext(filename) compression_type = compression_type[1:] control_tar_archive = ar.extract(path, filename) if compression_type == 'xz': xz_str = lzma.decompress(control_tar_archive) xz_bytes = BytesIO(xz_str) tar = tarfile.open(mode="r:", fileobj=xz_bytes) reload(sys) sys.setdefaultencoding('utf8') else: fh = BytesIO(control_tar_archive) tar = tarfile.open(filename, mode="r:" + compression_type, fileobj=fh) reload(sys) sys.setdefaultencoding('utf8') try: return tar.extractfile("./control").read().encode('ascii', errors='replace') except KeyError: return tar.extractfile("control").read().encode('ascii', errors='replace')
def get_key(path): """calculate the debinfo key for a Debian binary package at <path>""" return md5(ar.extract(path, "control.tar.gz")).hexdigest()