Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 9 Jul 2013 10:00:21 GMT
From:      mattbw@FreeBSD.org
To:        svn-soc-all@FreeBSD.org
Subject:   socsvn commit: r254487 - soc2013/mattbw/backend
Message-ID:  <201307091000.r69A0LTo052364@socsvn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mattbw
Date: Tue Jul  9 10:00:21 2013
New Revision: 254487
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=254487

Log:
  report packages already installed as installed when searching

Modified:
  soc2013/mattbw/backend/pkgutils.c
  soc2013/mattbw/backend/pkgutils.h

Modified: soc2013/mattbw/backend/pkgutils.c
==============================================================================
--- soc2013/mattbw/backend/pkgutils.c	Tue Jul  9 09:59:46 2013	(r254486)
+++ soc2013/mattbw/backend/pkgutils.c	Tue Jul  9 10:00:21 2013	(r254487)
@@ -18,6 +18,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
+#include <assert.h>
 #include <string.h>
 #include <glib.h>
 #include "pk-backend.h"
@@ -33,9 +34,19 @@
 PkInfoEnum
 pkgutils_pkg_current_state(struct pkg *pkg)
 {
+	PkInfoEnum	info;
+	
+	/* If the package is local, then it's installed.  If it is remote, then
+	 * it is installed if it is the same version as an installed package,
+	 * and available if it is not.
+	 */
+	if ((pkg_type(pkg) == PKG_INSTALLED) ||
+	    pkgutils_pkg_install_state(pkg) == PK_INFO_ENUM_REINSTALLING)
+		info = PK_INFO_ENUM_INSTALLED;
+	else
+		info = PK_INFO_ENUM_AVAILABLE;
 
-	return (pkg_type(pkg) == PKG_INSTALLED ?
-	   PK_INFO_ENUM_INSTALLED : PK_INFO_ENUM_AVAILABLE);
+	return info;
 }
 
 /*
@@ -146,6 +157,31 @@
 }
 
 /*
+ * Adds any old version of the given package to itself as PKG_OLD_VERSION.
+ */
+void
+pkgutils_add_old_version(struct pkgdb *db, struct pkg *pkg)
+{
+	const char     *origin;
+	struct pkg     *pkg2;
+
+	origin = NULL;
+	pkg_get(pkg, PKG_ORIGIN, &origin);
+
+	pkg2 = NULL;
+	if (pkg_try_installed(db, origin, &pkg2, PKG_LOAD_BASIC) == EPKG_OK) {
+		const char     *version;
+
+		assert(pkg2 != NULL);
+
+		pkg_get(pkg2, PKG_VERSION, &version);
+		pkg_set(pkg, PKG_OLD_VERSION, version);
+
+		pkg_free(pkg2);
+	}
+}
+
+/*
  * Emits a package through the backend with the given info enum.
  */
 void
@@ -173,7 +209,7 @@
 
 	should_emit = TRUE;
 
-	if (pkg_type(pkg) == PKG_INSTALLED)
+	if (pkgutils_pkg_current_state(pkg) == PK_INFO_ENUM_INSTALLED)
 		should_emit = pk_bitfield_contain(filters,
 		    PK_FILTER_ENUM_NOT_INSTALLED) ? FALSE : should_emit;
 	else

Modified: soc2013/mattbw/backend/pkgutils.h
==============================================================================
--- soc2013/mattbw/backend/pkgutils.h	Tue Jul  9 09:59:46 2013	(r254486)
+++ soc2013/mattbw/backend/pkgutils.h	Tue Jul  9 10:00:21 2013	(r254487)
@@ -30,6 +30,7 @@
 const char     *pkgutils_pk_repo_of(struct pkg *pkg);
 gchar          *pkgutils_pkg_to_id(struct pkg *pkg);
 gchar          *pkgutils_pkg_to_id_through(struct pkg *pkg, const gchar **strv);
+void		pkgutils_add_old_version(struct pkgdb *db, struct pkg *pkg);
 void		pkgutils_emit(struct pkg *pkg, PkBackend *backend, PkInfoEnum info);
 void		pkgutils_emit_filtered(struct pkg *pkg, PkBackend *backend, PkBitfield filters, PkInfoEnum info);
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201307091000.r69A0LTo052364>