[pacman-dev] [PATCH] Allow access to package origin data

Dan McGee dan at archlinux.org
Mon Aug 29 00:41:57 EDT 2011


Add new alpm_pkg_get_origin() method, use it in the front end now that
the enum constants are publicly available.

Signed-off-by: Dan McGee <dan at archlinux.org>
---
 README                |    2 +-
 lib/libalpm/alpm.h    |    5 +++++
 lib/libalpm/package.c |    7 +++++++
 src/pacman/package.c  |    7 +++----
 src/pacman/package.h  |    2 +-
 src/pacman/query.c    |    4 ++--
 src/pacman/sync.c     |    4 ++--
 7 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/README b/README
index fbd40d2..c14fd3c 100644
--- a/README
+++ b/README
@@ -429,7 +429,7 @@ API CHANGES BETWEEN 3.5 AND 4.0
     alpm_option_get_default_siglevel(), alpm_option_set_default_siglevel(),
     alpm_option_get_gpgdir(), alpm_option_set_gpgdir(), alpm_db_get_siglevel(),
     alpm_sigresult_cleanup(), alpm_db_check_pgp_signature(), alpm_pkg_check_pgp_signature(),
-    alpm_pkg_get_sha256sum(), alpm_pkg_get_base64_sig()
+    alpm_pkg_get_origin(), alpm_pkg_get_sha256sum(), alpm_pkg_get_base64_sig()
 - list functions:
     alpm_list_to_array(), alpm_list_previous()
 - structs:
diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h
index 2f62565..42e6038 100644
--- a/lib/libalpm/alpm.h
+++ b/lib/libalpm/alpm.h
@@ -598,6 +598,11 @@ const char *alpm_pkg_get_name(alpm_pkg_t *pkg);
  */
 const char *alpm_pkg_get_version(alpm_pkg_t *pkg);
 
+/** Returns the origin of the package.
+ * @return a #alpm_pkgfrom_t constant, -1 on error
+ */
+alpm_pkgfrom_t alpm_pkg_get_origin(alpm_pkg_t *pkg);
+
 /** Returns the package description.
  * @param pkg a pointer to package
  * @return a reference to an internal string
diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c
index 3d73a43..487b56d 100644
--- a/lib/libalpm/package.c
+++ b/lib/libalpm/package.c
@@ -185,6 +185,13 @@ const char SYMEXPORT *alpm_pkg_get_version(alpm_pkg_t *pkg)
 	return pkg->version;
 }
 
+alpm_pkgfrom_t SYMEXPORT alpm_pkg_get_origin(alpm_pkg_t *pkg)
+{
+	ASSERT(pkg != NULL, return -1);
+	pkg->handle->pm_errno = 0;
+	return pkg->origin;
+}
+
 const char SYMEXPORT *alpm_pkg_get_desc(alpm_pkg_t *pkg)
 {
 	ASSERT(pkg != NULL, return NULL);
diff --git a/src/pacman/package.c b/src/pacman/package.c
index f7065d5..5654944 100644
--- a/src/pacman/package.c
+++ b/src/pacman/package.c
@@ -61,7 +61,7 @@ static void deplist_display(const char *title,
  * @param from the type of package we are dealing with
  * @param extra should we show extra information
  */
-void dump_pkg_full(alpm_pkg_t *pkg, alpm_pkgfrom_t from, int extra)
+void dump_pkg_full(alpm_pkg_t *pkg, int extra)
 {
 	const char *reason;
 	time_t bdate, idate;
@@ -69,10 +69,9 @@ void dump_pkg_full(alpm_pkg_t *pkg, alpm_pkgfrom_t from, int extra)
 	const char *label;
 	double size;
 	alpm_list_t *requiredby = NULL;
+	alpm_pkgfrom_t from;
 
-	if(pkg == NULL) {
-		return;
-	}
+	from = alpm_pkg_get_origin(pkg);
 
 	/* set variables here, do all output below */
 	bdate = alpm_pkg_get_builddate(pkg);
diff --git a/src/pacman/package.h b/src/pacman/package.h
index 4bbc2ba..890b4fe 100644
--- a/src/pacman/package.h
+++ b/src/pacman/package.h
@@ -22,7 +22,7 @@
 
 #include <alpm.h>
 
-void dump_pkg_full(alpm_pkg_t *pkg, alpm_pkgfrom_t from, int extra);
+void dump_pkg_full(alpm_pkg_t *pkg, int extra);
 
 void dump_pkg_backups(alpm_pkg_t *pkg);
 void dump_pkg_files(alpm_pkg_t *pkg, int quiet);
diff --git a/src/pacman/query.c b/src/pacman/query.c
index ec98c99..5f2b37e 100644
--- a/src/pacman/query.c
+++ b/src/pacman/query.c
@@ -460,9 +460,9 @@ static int display(alpm_pkg_t *pkg)
 
 	if(config->op_q_info) {
 		if(config->op_q_isfile) {
-			dump_pkg_full(pkg, PKG_FROM_FILE, 0);
+			dump_pkg_full(pkg, 0);
 		} else {
-			dump_pkg_full(pkg, PKG_FROM_LOCALDB, config->op_q_info > 1);
+			dump_pkg_full(pkg, config->op_q_info > 1);
 		}
 	}
 	if(config->op_q_list) {
diff --git a/src/pacman/sync.c b/src/pacman/sync.c
index a7fe5be..e97da37 100644
--- a/src/pacman/sync.c
+++ b/src/pacman/sync.c
@@ -469,7 +469,7 @@ static int sync_info(alpm_list_t *syncs, alpm_list_t *targets)
 					alpm_pkg_t *pkg = alpm_list_getdata(k);
 
 					if(strcmp(alpm_pkg_get_name(pkg), pkgstr) == 0) {
-						dump_pkg_full(pkg, PKG_FROM_SYNCDB, config->op_s_info > 1);
+						dump_pkg_full(pkg, config->op_s_info > 1);
 						foundpkg = 1;
 						break;
 					}
@@ -494,7 +494,7 @@ static int sync_info(alpm_list_t *syncs, alpm_list_t *targets)
 
 			for(j = alpm_db_get_pkgcache(db); j; j = alpm_list_next(j)) {
 				alpm_pkg_t *pkg = alpm_list_getdata(j);
-				dump_pkg_full(pkg, PKG_FROM_SYNCDB, config->op_s_info > 1);
+				dump_pkg_full(pkg, config->op_s_info > 1);
 			}
 		}
 	}
-- 
1.7.6



More information about the pacman-dev mailing list