[elbe-devel] [PATCH v2 20/22] virtapt: add package downloading code

Bastian Germann bage at linutronix.de
Tue Jul 2 17:37:18 CEST 2019


> use code based on lookup_uri to lookup package urls, then use the Acquire
> functionality to download the packages.
> 
> This special implemention is not able to resolve provides, which is
> not needed, when only packages shall be downloaded, that are listed
> in the full package list.
> 
> Signed-off-by: Torben Hohn <torben.hohn at linutronix.de>

Reviewed-by: Bastian Germann <bage at linutronix.de>

> ---
>  elbepack/virtapt.py | 46 ++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 46 insertions(+)
> 
> diff --git a/elbepack/virtapt.py b/elbepack/virtapt.py
> index 71d7d54c0..f74facd0c 100644
> --- a/elbepack/virtapt.py
> +++ b/elbepack/virtapt.py
> @@ -147,6 +147,9 @@ class VirtApt(object):
>          except BaseException as e:
>              print(e)
>  
> +        self.downloads = {}
> +        self.acquire = apt_pkg.Acquire(self)
> +
>      def add_key(self, key):
>          cmd = 'echo "%s" > %s' % (key, self.basefs.fname("tmp/key.pub"))
>          clean = 'rm -f %s' % self.basefs.fname("tmp/key.pub")
> @@ -217,6 +220,49 @@ class VirtApt(object):
>      def has_pkg(self, pkgname):
>          return pkgname in self.cache
>  
> +    def mark_pkg_download(self, pkgname):
> +        pkg = self.cache[pkgname]
> +        c = self.depcache.get_candidate_ver(pkg)
> +
> +        r = apt_pkg.PackageRecords(self.cache)
> +        r.lookup(c.file_list[0])
> +
> +        x = self.source.find_index(c.file_list[0][0])
> +        uri = x.archive_uri(r.filename)
> +        hashval = str(r.hashes.find('SHA256'))
> +
> +        acq = apt_pkg.AcquireFile(self.acquire,
> +                                  uri,
> +                                  hash=hashval,
> +                                  size=c.size,
> +                                  descr=r.long_desc,
> +                                  short_descr=r.short_desc,
> +                                  destdir=self.basefs.fname('/cache/archives'))
> +        self.downloads[pkgname] = acq
> +
> +    def do_downloads(self):
> +        res = self.acquire.run()
> +        print(res)
> +
> +    def get_downloaded_files(self):
> +        ret = []
> +        for _, d in self.downloads.iteritems():
> +            if d.complete:
> +                ret.append(d.destfile)
> +            else:
> +                print('incomplete download "%s"' % d.desc_uri)
> +
> +        return ret
> +
> +    def get_downloaded_pkg(self, pkgname):
> +        d = self.downloads[pkgname]
> +
> +        if not d.complete:
> +            print('incomplete download "%s"' % d.desc_uri)
> +            raise KeyError
> +
> +        return d.destfile
> +
>      def get_uri(self, target_pkg, incl_deps=False):
>  
>          d = apt_pkg.DepCache(self.cache)
> 



More information about the elbe-devel mailing list