[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: python-apt and downgrades



On Wed, Oct 23, 2019 at 11:58:04AM +0100, Stephen Quinney wrote:
> I'm fairly new to using the apt python modules and I'm really hoping
> someone can help me with a script I need for downgrading packages.
> 
> I have development machines where I regularly manually install new
> packages (using dpkg) for testing. It's easy to lose track of what has
> been manually changed so once I'm done with the testing I'd like to
> run a script which reverts all those packages to the best version
> available in the repository.
> 
> I'm finding that my script works fine if the local version is less
> than the repository version (i.e. it's like a normal 'upgrade') but
> whenever I attempt a downgrade the package goes into the 'keep' state
> and nothing changes. I have enabled the APT::Get::Allow-Downgrades
> option but I wonder if there is something else I need to do? I've
> tried to reduce it down to the smallest possible working example that
> demonstrates this (see below).
> 
> #!/usr/bin/python3
> 
> import apt_pkg
> import apt.progress
> 
> progress_acquire = apt.progress.text.AcquireProgress()
> progress_install = apt.progress.base.InstallProgress()
> progress_op      = apt.progress.text.OpProgress()
> 
> apt_pkg.init()
> 
> cache = apt_pkg.Cache(progress_op)
> cache.update(progress_acquire,sources)
> depcache = apt_pkg.DepCache(cache)
> 
> for pkg in cache.packages:
>     if pkg.selected_state != apt_pkg.SELSTATE_INSTALL:
>         continue
> 
>     best_match = None
>     for v in pkg.version_list:
>         if v.downloadable and ( best_match is None or v > best_match ):
>             best_match = v
> 
>     if best_match is not None and best_match != pkg.current_ver:
>         depcache.mark_install(pkg)
>         depcache.set_candidate_ver(pkg,best_match)

These lines need to be swapped.

-- 
debian developer - deb.li/jak | jak-linux.org - free software dev
ubuntu core developer                              i speak de, en


Reply to: