Bug#591882: apt: fails to upgrade some packages properly
On Fr, 2010-08-06 at 11:04 -0400, Lucas Nussbaum wrote:
> On 06/08/10 at 11:35 +0200, Julian Andres Klode wrote:
> > On Fr, 2010-08-06 at 02:40 -0400, Lucas Nussbaum wrote:
> > > Package: apt
> > > Version: 0.7.25.3
> > > Severity: serious
> > >
> > > Hi,
> > >
> > > I have been testing upgrades from lenny to sid with a tool similar to
> > > piuparts. I ran into many (~80) strange failures, where apt takes a
> > > wrong decision about which packages to upgrade.
> > >
> > > All the logs are available from
> > > http://people.debian.org/~lucas/logs/2010/08/05/pkg-upgrade/
> > > Here are the various cases:
> > > package-not-upgraded/:
> > > The package under test was not upgraded during apt-get dist-upgrade.
> > > That is always because upgrading it would have required the removal of
> > > another package. However, in the case of library packages being removed
> > > to permit the upgrade, I was wondering whether it was possible to trick
> > > apt into upgrading the package.
> > >
> > > package-uninstalled/:
> > > The package under test was removed during apt-get dist-upgrade.
> > >
> > > package-uninstalled/no-removal/ <= that's where the serious issues are
> > > The package under test was removed during dist-upgrade, but no removal
> > > was neded to get it back! It should really have been upgraded together
> > > with the other packages.
> > > There are quite a lot of failures related to emacs packages, so they
> > > are separated in the logs.
> > >
> > > package-uninstalled/removals/:
> > > A package was removed to permit the upgrade. I'm wondering if in some
> > > cases, it would have made sense to auto-detect the correct solution.
> >
> > Please use a two stage upgrade process:
> > apt-get upgrade
> > apt-get dist-upgrade
> > This will reduce the number of issues.
>
> I'm now doing:
> apt-get install apt (to upgrade apt)
> apt-get upgrade
> apt-get dist-upgrade
> And I don't really see any difference (I haven't tested all the packages
> that were failing).
>
> Good examples of packages that fail are pyrex-mode and
> python-application. Both get removed during apt-get dist-upgrade, but
> can be installed without removing any package after that.
>
At least those two work now with the latest commit in
debian-experimental-ma.
------------------------------------------------------------
revno: 2032
committer: Julian Andres Klode <jak@debian.org>
branch nick: debian-experimental-ma
timestamp: Fri 2010-08-06 23:33:55 +0200
message:
* apt-pkg/depcache.cc:
- Only try upgrade for Breaks if there is a newer version, otherwise
handle it as Conflicts (by removing it) (helps for #591881).
diff:
=== modified file 'apt-pkg/depcache.cc'
--- apt-pkg/depcache.cc 2010-07-14 20:59:43 +0000
+++ apt-pkg/depcache.cc 2010-08-06 21:33:55 +0000
@@ -1425,10 +1425,13 @@
VerIterator Ver(*this,*I);
PkgIterator Pkg = Ver.ParentPkg();
- if (Start->Type != Dep::DpkgBreaks)
+
+
+ if (PkgState[Pkg->ID].CandidateVer != *I &&
+ Start->Type == Dep::DpkgBreaks)
+ MarkInstall(Pkg,true,Depth + 1, false, ForceImportantDeps);
+ else
MarkDelete(Pkg,false,Depth + 1, false);
- else if (PkgState[Pkg->ID].CandidateVer != *I)
- MarkInstall(Pkg,true,Depth + 1, false, ForceImportantDeps);
}
continue;
}
=== modified file 'debian/changelog'
--- debian/changelog 2010-08-02 19:02:01 +0000
+++ debian/changelog 2010-08-06 21:33:55 +0000
@@ -8,6 +8,11 @@
* apt-pkg/cdrom.cc:
- fix off-by-one error in DropBinaryArch
+ [ Julian Andres Klode ]
+ * apt-pkg/depcache.cc:
+ - Only try upgrade for Breaks if there is a newer version, otherwise
+ handle it as Conflicts (by removing it) (helps for #591881).
+
-- Michael Vogt <michael.vogt@ubuntu.com> Fri, 30 Jul 2010 17:37:14 +0200
apt (0.7.26~exp12) experimental; urgency=low
--
Julian Andres Klode - Debian Developer, Ubuntu Member
See http://wiki.debian.org/JulianAndresKlode and http://jak-linux.org/.
Reply to: