Blob Blame History Raw
diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc
index a3fb896..cd226ee 100644
--- a/apt-pkg/algorithms.cc
+++ b/apt-pkg/algorithms.cc
@@ -962,8 +962,9 @@ bool pkgProblemResolver::Resolve(bool BrokenFix)
 		    End->Type != pkgCache::Dep::Conflicts &&
 		    End->Type != pkgCache::Dep::Obsoletes))
 	       {
-		  // Try a little harder to fix protected packages..
-		  if ((Flags[I->ID] & Protected) == Protected)
+		  // Try a little harder for protected packages and obsoletes..
+		  if ((Flags[I->ID] & Protected) == Protected ||
+		      End->Type == pkgCache::Dep::Obsoletes)
 		  {
 		     if (DoUpgrade(Pkg) == true)
 		     {
diff --git a/apt-pkg/policy.cc b/apt-pkg/policy.cc
index 70b392a..3d4574f 100644
--- a/apt-pkg/policy.cc
+++ b/apt-pkg/policy.cc
@@ -295,6 +295,13 @@ signed short pkgPolicy::GetPkgPriority(const pkgCache::PkgIterator &Pkg)
 	    Max = Prio;
       }      
    }
+
+   /* XXX HACK alert: give non-native packages slightly lower priority */
+   string CAS = _config->Find("RPM::CompatArchSuffix");
+   if (!CAS.empty() && 
+	string(Pkg.Name()).rfind(CAS) != string::npos) {
+        Max--;
+   }
    return Max;
 }
 									/*}}}*/
diff --git a/apt-pkg/rpm/rpmpackagedata.cc b/apt-pkg/rpm/rpmpackagedata.cc
index 7dbac3a..24060e2 100644
--- a/apt-pkg/rpm/rpmpackagedata.cc
+++ b/apt-pkg/rpm/rpmpackagedata.cc
@@ -42,6 +42,10 @@ RPMPackageData::RPMPackageData()
       PreferredArch = _config->Find(PA.c_str(), BaseArch.c_str());
       string CAS = MLBase + "::CompatArchSuffix";
       CompatArchSuffix = _config->Find(CAS.c_str(), ".32bit");
+
+      // Blech, export for easy use elsewhere .. for now 
+      _config->Set("RPM::PreferredArch", PreferredArch);
+      _config->Set("RPM::CompatArchSuffix", CompatArchSuffix);
    }
 
    // Populate priorities