[elbe-devel] [PATCH 1/5] rpcaptcache: Add get_corresponding_source_packages

Olivier Dion dion at linutronix.de
Mon May 25 14:46:09 CEST 2020


On Mon, 25 May 2020, Torben Hohn <torben.hohn at linutronix.de> wrote:
> On Tue, May 19, 2020 at 10:26:59PM -0400, Olivier Dion wrote:
>> The method constructs a set of source packages from a list of binary
>> packages.  This former includes the sources of the binaries, but also
>> the built-using sources.
>> 
>> A list of unique tuples of the form (src_name, src_version) is
>> returned.
>> 
>> Signed-off-by: Olivier Dion <dion at linutronix.de>
>> ---
>>  elbepack/rpcaptcache.py | 32 +++++++++++++++++++++++++++++++-
>>  1 file changed, 31 insertions(+), 1 deletion(-)
>> 
>> diff --git a/elbepack/rpcaptcache.py b/elbepack/rpcaptcache.py
>> index 5a1bb01a..14c3f654 100644
>> --- a/elbepack/rpcaptcache.py
>> +++ b/elbepack/rpcaptcache.py
>> @@ -16,7 +16,7 @@ import time
>>  from multiprocessing.util import Finalize
>>  from multiprocessing.managers import BaseManager
>>  
>> -from apt_pkg import config, version_compare
>> +from apt_pkg import config, version_compare, TagFile
>>  from apt import Cache
>>  
>>  from elbepack.aptprogress import (ElbeAcquireProgress, ElbeInstallProgress,
>> @@ -289,6 +289,36 @@ class RPCAPTCache(InChRootObject):
>>                  self.cache[p]) for p in sorted(
>>                  self.cache.keys()) if pkgname in p.lower()]
>>  
>> +    def get_corresponding_source_packages(self, pkg_lst=None):
>> +
>> +        if pkg_lst is None:
>> +            pkg_lst = {p.name for p in self.cache if p.is_installed}
>
> why {} ? this does not seem to be a dict.

This is a set.  This is useful because we do a 'in' operator later.
Which is much faster on set than on list.

>
> rest looks good... use [] and:
>
> Reviewed-by: Torben Hohn <torben.hohn at linutronix.de>
>
>> +
>> +        src_set = set()
>> +
>> +        with TagFile('/var/lib/dpkg/status') as tagfile:
>> +            for section in tagfile:
>> +
>> +                pkg = section['Package']
>> +
>> +                if pkg not in pkg_lst:
>> +                    continue
>> +
>> +                tmp = self.cache[pkg].installed or self.cache[pkg].candidate
>> +
>> +                src_set.add((tmp.source_name, tmp.source_version))
>> +
>> +                if "Built-Using" not in section:
>> +                    continue
>> +
>> +                built_using_lst = section["Built-Using"].split(', ')
>> +                for built_using in built_using_lst:
>> +                    name, version = built_using.split(' ', 1)
>> +                    version = version.strip('(= )')
>> +                    src_set.add((name, version))
>> +
>> +        return list(src_set)
>> +
>>      def compare_versions(self, ver1, ver2):
>>          return version_compare(ver1, ver2)
>>  
>> -- 
>> 2.26.2
>> 
>> 
>> _______________________________________________
>> elbe-devel mailing list
>> elbe-devel at linutronix.de
>> https://lists.linutronix.de/mailman/listinfo/elbe-devel
>
> -- 
> Torben Hohn
> Linutronix GmbH | Bahnhofstrasse 3 | D-88690 Uhldingen-Mühlhofen
> Phone: +49 7556 25 999 18; Fax.: +49 7556 25 999 99
>
> Hinweise zum Datenschutz finden Sie hier (Informations on data privacy 
> can be found here): https://linutronix.de/kontakt/Datenschutz.php
>
> Linutronix GmbH | Firmensitz (Registered Office): Uhldingen-Mühlhofen | 
> Registergericht (Registration Court): Amtsgericht Freiburg i.Br., HRB700 
> 806 | Geschäftsführer (Managing Directors): Heinz Egger, Thomas Gleixner
-- 
Olivier Dion
Linutronix GmbH | Bahnhofstrasse 3 | D-88690 Uhldingen-Mühlhofen



More information about the elbe-devel mailing list