Просмотр исходного кода

* apt-pkg/pkgcache.cc:
- get the best matching arch package from a group with FindPreferredPkg

David Kalnischkies лет назад: 16
Родитель
Сommit
bd2fb30a86
3 измененных файлов с 27 добавлено и 1 удалено
  1. 5 0
      apt-pkg/cacheiterators.h
  2. 19 0
      apt-pkg/pkgcache.cc
  3. 3 1
      debian/changelog

+ 5 - 0
apt-pkg/cacheiterators.h

@@ -104,6 +104,11 @@ class pkgCache::GrpIterator: public Iterator<Group, GrpIterator> {
 	inline const char *Name() const {return S->Name == 0?0:Owner->StrP + S->Name;};
 	inline PkgIterator PackageList() const;
 	PkgIterator FindPkg(string Arch = "any");
+	/** \brief find the package with the "best" architecture
+
+	    The best architecture is either the "native" or the first
+	    in the list of Architectures which is not an end-Pointer */
+	PkgIterator FindPreferredPkg();
 	PkgIterator NextPkg(PkgIterator const &Pkg);
 
 	// Constructors

+ 19 - 0
apt-pkg/pkgcache.cc

@@ -340,6 +340,25 @@ pkgCache::PkgIterator pkgCache::GrpIterator::FindPkg(string Arch) {
 			break;
 	}
 
+	return PkgIterator(*Owner, 0);
+}
+									/*}}}*/
+// GrpIterator::FindPreferredPkg - Locate the "best" package		/*{{{*/
+// ---------------------------------------------------------------------
+/* Returns an End-Pointer on error, pointer to the package otherwise */
+pkgCache::PkgIterator pkgCache::GrpIterator::FindPreferredPkg() {
+	pkgCache::PkgIterator Pkg = FindPkg("native");
+	if (Pkg.end() == false)
+		return Pkg;
+
+	std::vector<std::string> const archs = APT::Configuration::getArchitectures();
+	for (std::vector<std::string>::const_iterator a = archs.begin();
+	     a != archs.end(); ++a) {
+		Pkg = FindPkg(*a);
+		if (Pkg.end() == false)
+			return Pkg;
+	}
+
 	return PkgIterator(*Owner, 0);
 }
 									/*}}}*/

+ 3 - 1
debian/changelog

@@ -28,8 +28,10 @@ apt (0.7.26~exp6) UNRELEASED; urgency=low
     - move cmdline parsing from apt-cache to new FromCommandLine method
   * apt-pkg/contrib/cmdline.cc:
     - fix segfault in SaveInConfig caused by writing over char[] sizes
+  * apt-pkg/pkgcache.cc:
+    - get the best matching arch package from a group with FindPreferredPkg
 
- -- David Kalnischkies <kalnischkies@gmail.com>  Mon, 31 May 2010 17:21:00 +0200
+ -- David Kalnischkies <kalnischkies@gmail.com>  Mon, 31 May 2010 19:59:04 +0200
 
 apt (0.7.26~exp5) experimental; urgency=low