[elbe-devel] [PATCH v2 19/22] pkgutils: implement extract_pkg_changelog()
Bastian Germann
bage at linutronix.de
Tue Jul 2 17:33:04 CEST 2019
> extract the changelog from an already downloaded debian package.
>
> Special care must be taken, when /usr/share/doc/<pkgname> is only
... must be taken if /usr...
> a symlink to the actual directory, where a changelog resides in another
> package. In that case an Exception, is thrown, and the extra package needs
no comma after Exception
> to be downloaded and passed as the extra_pkg parameter.
>
> Signed-off-by: Torben Hohn <torben.hohn at linutronix.de>
> ---
> elbepack/pkgutils.py | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 60 insertions(+)
>
> diff --git a/elbepack/pkgutils.py b/elbepack/pkgutils.py
> index eb92db51f..59cc62038 100644
> --- a/elbepack/pkgutils.py
> +++ b/elbepack/pkgutils.py
> @@ -8,9 +8,13 @@
> from __future__ import print_function
>
> import os
> +import re
>
> from apt_pkg import TagFile
>
> +from elbepack.filesystem import TmpdirFilesystem
> +from elbepack.shellhelper import system
> +
>
> class NoPackageException(Exception):
> pass
> @@ -64,3 +68,59 @@ def get_dsc_size(fname):
> sz += int(f[1])
>
> return sz
> +
> +class ChangelogNeedsDependency(Exception):
> + def __init__(self, pkgname):
> + Exception.__init__(self,
> + 'Changlog extraction needs "%s" as dependency' % (
e missing in Changlog.
Suggestion: 'Changelog extraction depends on "%s"'
> + pkgname))
> + self.pkgname = pkgname
> +
> +
> +re_pkgfilename = r'(?P<name>.*)_(?P<ver>.*)_(?P<arch>.*).deb'
> +
> +
> +def extract_pkg_changelog(fname, extra_pkg=None):
> + pkgname = os.path.basename(fname)
> + m = re.match(re_pkgfilename, pkgname)
> +
> + pkgname = m.group('name')
> + # pkgver = m.group('ver')
> + pkgarch = m.group('arch')
> +
> + print('pkg: %s, arch: %s' % (pkgname, pkgarch))
> +
> + fs = TmpdirFilesystem(debug=True)
> +
> + if extra_pkg:
> + print('with extra ' + extra_pkg)
> + system('dpkg -x "%s" "%s"' % (extra_pkg, fs.fname('/')))
> +
> + system('dpkg -x "%s" "%s"' % (fname, fs.fname('/')))
> +
> + dch_dir = '/usr/share/doc/%s' % pkgname
> +
> + if fs.islink(dch_dir) and not extra_pkg:
> + l = fs.readlink(dch_dir)
> + print(dch_dir, l)
> + raise ChangelogNeedsDependency(l)
> +
> + dch_bin = '/usr/share/doc/%s/changelog.Debian.%s.gz' % (pkgname, pkgarch)
> + dch_src = '/usr/share/doc/%s/changelog.Debian.gz' % pkgname
> +
> + print(fs.listdir('/usr/share/doc/'))
> + print(fs.listdir('/usr/share/doc/%s' % pkgname))
> +
> + ret = ""
> +
> + if fs.exists(dch_bin):
> + ret += fs.read_file(dch_bin, gzip=True)
> + else:
> + print("no bin")
> +
> + if fs.exists(dch_src):
> + ret += fs.read_file(dch_src, gzip=True)
> + else:
> + print("no source")
> +
> + return ret
>
With these applied
Reviewed-by: Bastian Germann <bage at linutronix.de>
More information about the elbe-devel
mailing list