[pacman-dev] [PATCH 03/13] Require handle argument to all alpm_trans_*() methods

Dan McGee dan at archlinux.org
Tue Jun 7 17:36:32 EDT 2011


Begin enforcing the need to pass a handle. This allows us to remove one
more extern handle declaration from the backend.

Signed-off-by: Dan McGee <dan at archlinux.org>
---
 lib/libalpm/alpm.h   |   26 +++++++++++++++++---------
 lib/libalpm/deps.c   |    6 +++---
 lib/libalpm/trans.c  |   23 ++++++++++-------------
 src/pacman/pacman.c  |    4 ++--
 src/pacman/remove.c  |    8 ++++----
 src/pacman/sync.c    |   10 +++++-----
 src/pacman/upgrade.c |   12 ++++++------
 src/pacman/util.c    |    6 +++---
 8 files changed, 50 insertions(+), 45 deletions(-)

diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h
index 26ed1e5..d63b987 100644
--- a/lib/libalpm/alpm.h
+++ b/lib/libalpm/alpm.h
@@ -794,54 +794,62 @@ typedef void (*alpm_trans_cb_conv)(pmtransconv_t, void *, void *,
 typedef void (*alpm_trans_cb_progress)(pmtransprog_t, const char *, int, size_t, size_t);
 
 /** Returns the bitfield of flags for the current transaction.
- * @sa _pmtransflag_t
+ * @param handle the context handle
+ * @return the bitfield of transaction flags
  */
-int alpm_trans_get_flags(void);
+pmtransflag_t alpm_trans_get_flags(pmhandle_t *handle);
 
 /** Returns a list of packages added by the transaction.
+ * @param handle the context handle
  * @return a list of pmpkg_t structures
  */
-alpm_list_t * alpm_trans_get_add(void);
+alpm_list_t * alpm_trans_get_add(pmhandle_t *handle);
 
 /** Returns the list of packages removed by the transaction.
+ * @param handle the context handle
  * @return a list of pmpkg_t structures
  */
-alpm_list_t * alpm_trans_get_remove(void);
+alpm_list_t * alpm_trans_get_remove(pmhandle_t *handle);
 
 /** Initialize the transaction.
+ * @param handle the context handle
  * @param flags flags of the transaction (like nodeps, etc)
  * @param event event callback function pointer
  * @param conv question callback function pointer
  * @param progress progress callback function pointer
  * @return 0 on success, -1 on error (pm_errno is set accordingly)
  */
-int alpm_trans_init(pmtransflag_t flags,
+int alpm_trans_init(pmhandle_t *handle, pmtransflag_t flags,
                     alpm_trans_cb_event cb_event, alpm_trans_cb_conv conv,
                     alpm_trans_cb_progress cb_progress);
 
 /** Prepare a transaction.
+ * @param handle the context handle
  * @param data the address of an alpm_list where a list
  * of pmdepmissing_t objects is dumped (conflicting packages)
  * @return 0 on success, -1 on error (pm_errno is set accordingly)
  */
-int alpm_trans_prepare(alpm_list_t **data);
+int alpm_trans_prepare(pmhandle_t *handle, alpm_list_t **data);
 
 /** Commit a transaction.
+ * @param handle the context handle
  * @param data the address of an alpm_list where detailed description
  * of an error can be dumped (ie. list of conflicting files)
  * @return 0 on success, -1 on error (pm_errno is set accordingly)
  */
-int alpm_trans_commit(alpm_list_t **data);
+int alpm_trans_commit(pmhandle_t *handle, alpm_list_t **data);
 
 /** Interrupt a transaction.
+ * @param handle the context handle
  * @return 0 on success, -1 on error (pm_errno is set accordingly)
  */
-int alpm_trans_interrupt(void);
+int alpm_trans_interrupt(pmhandle_t *handle);
 
 /** Release a transaction.
+ * @param handle the context handle
  * @return 0 on success, -1 on error (pm_errno is set accordingly)
  */
-int alpm_trans_release(void);
+int alpm_trans_release(pmhandle_t *handle);
 /** @} */
 
 /** @name Common Transactions */
diff --git a/lib/libalpm/deps.c b/lib/libalpm/deps.c
index 62e8702..3292289 100644
--- a/lib/libalpm/deps.c
+++ b/lib/libalpm/deps.c
@@ -204,9 +204,9 @@ alpm_list_t *_alpm_sortbydeps(alpm_list_t *targets, int reverse)
 	return newtargs;
 }
 
-static int no_dep_version(void)
+static int no_dep_version(pmhandle_t *handle)
 {
-	int flags = alpm_trans_get_flags();
+	int flags = alpm_trans_get_flags(handle);
 	return flags != -1 && (flags & PM_TRANS_FLAG_NODEPVERSION);
 }
 
@@ -282,7 +282,7 @@ alpm_list_t SYMEXPORT *alpm_checkdeps(alpm_list_t *pkglist, int reversedeps,
 	}
 	alpm_list_free(targets);
 
-	nodepversion = no_dep_version();
+	nodepversion = no_dep_version(handle);
 
 	/* look for unsatisfied dependencies of the upgrade list */
 	for(i = upgrade; i; i = i->next) {
diff --git a/lib/libalpm/trans.c b/lib/libalpm/trans.c
index 59f6aec..f7fbd2b 100644
--- a/lib/libalpm/trans.c
+++ b/lib/libalpm/trans.c
@@ -43,9 +43,6 @@
 #include "sync.h"
 #include "alpm.h"
 
-/* global handle variable */
-extern pmhandle_t *handle;
-
 /** \addtogroup alpm_trans Transaction Functions
  * @brief Functions to manipulate libalpm transactions
  * @{
@@ -99,7 +96,7 @@ static int remove_lock(pmhandle_t *handle)
 }
 
 /** Initialize the transaction. */
-int SYMEXPORT alpm_trans_init(pmtransflag_t flags,
+int SYMEXPORT alpm_trans_init(pmhandle_t *handle, pmtransflag_t flags,
 		alpm_trans_cb_event event, alpm_trans_cb_conv conv,
 		alpm_trans_cb_progress progress)
 {
@@ -144,7 +141,7 @@ int SYMEXPORT alpm_trans_init(pmtransflag_t flags,
 	return 0;
 }
 
-static alpm_list_t *check_arch(alpm_list_t *pkgs)
+static alpm_list_t *check_arch(pmhandle_t *handle, alpm_list_t *pkgs)
 {
 	alpm_list_t *i;
 	alpm_list_t *invalid = NULL;
@@ -170,7 +167,7 @@ static alpm_list_t *check_arch(alpm_list_t *pkgs)
 }
 
 /** Prepare a transaction. */
-int SYMEXPORT alpm_trans_prepare(alpm_list_t **data)
+int SYMEXPORT alpm_trans_prepare(pmhandle_t *handle, alpm_list_t **data)
 {
 	pmtrans_t *trans;
 
@@ -188,7 +185,7 @@ int SYMEXPORT alpm_trans_prepare(alpm_list_t **data)
 		return 0;
 	}
 
-	alpm_list_t *invalid = check_arch(trans->add);
+	alpm_list_t *invalid = check_arch(handle, trans->add);
 	if(invalid) {
 		if(data) {
 			*data = invalid;
@@ -214,7 +211,7 @@ int SYMEXPORT alpm_trans_prepare(alpm_list_t **data)
 }
 
 /** Commit a transaction. */
-int SYMEXPORT alpm_trans_commit(alpm_list_t **data)
+int SYMEXPORT alpm_trans_commit(pmhandle_t *handle, alpm_list_t **data)
 {
 	pmtrans_t *trans;
 
@@ -253,7 +250,7 @@ int SYMEXPORT alpm_trans_commit(alpm_list_t **data)
 }
 
 /** Interrupt a transaction. */
-int SYMEXPORT alpm_trans_interrupt(void)
+int SYMEXPORT alpm_trans_interrupt(pmhandle_t *handle)
 {
 	pmtrans_t *trans;
 
@@ -271,7 +268,7 @@ int SYMEXPORT alpm_trans_interrupt(void)
 }
 
 /** Release a transaction. */
-int SYMEXPORT alpm_trans_release(void)
+int SYMEXPORT alpm_trans_release(pmhandle_t *handle)
 {
 	pmtrans_t *trans;
 
@@ -428,7 +425,7 @@ cleanup:
 	return retval;
 }
 
-int SYMEXPORT alpm_trans_get_flags()
+pmtransflag_t SYMEXPORT alpm_trans_get_flags(pmhandle_t *handle)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1));
@@ -437,7 +434,7 @@ int SYMEXPORT alpm_trans_get_flags()
 	return handle->trans->flags;
 }
 
-alpm_list_t SYMEXPORT * alpm_trans_get_add()
+alpm_list_t SYMEXPORT *alpm_trans_get_add(pmhandle_t *handle)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return NULL);
@@ -446,7 +443,7 @@ alpm_list_t SYMEXPORT * alpm_trans_get_add()
 	return handle->trans->add;
 }
 
-alpm_list_t SYMEXPORT * alpm_trans_get_remove()
+alpm_list_t SYMEXPORT *alpm_trans_get_remove(pmhandle_t *handle)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return NULL);
diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
index 9e283b5..db6b687 100644
--- a/src/pacman/pacman.c
+++ b/src/pacman/pacman.c
@@ -307,12 +307,12 @@ static void handler(int signum)
 	} else if(signum == SIGINT) {
 		const char *msg = "\nInterrupt signal received\n";
 		xwrite(err, msg, strlen(msg));
-		if(alpm_trans_interrupt() == 0) {
+		if(alpm_trans_interrupt(config->handle) == 0) {
 			/* a transaction is being interrupted, don't exit pacman yet. */
 			return;
 		}
 		/* no commiting transaction, we can release it now and then exit pacman */
-		alpm_trans_release();
+		alpm_trans_release(config->handle);
 		/* output a newline to be sure we clear any line we may be on */
 		xwrite(out, "\n", 1);
 	}
diff --git a/src/pacman/remove.c b/src/pacman/remove.c
index 46c595f..b96687a 100644
--- a/src/pacman/remove.c
+++ b/src/pacman/remove.c
@@ -99,7 +99,7 @@ int pacman_remove(alpm_list_t *targets)
 	}
 
 	/* Step 2: prepare the transaction based on its type, targets and flags */
-	if(alpm_trans_prepare(&data) == -1) {
+	if(alpm_trans_prepare(config->handle, &data) == -1) {
 		pm_fprintf(stderr, PM_LOG_ERROR, _("failed to prepare transaction (%s)\n"),
 		        alpm_strerrorlast());
 		switch(pm_errno) {
@@ -129,7 +129,7 @@ int pacman_remove(alpm_list_t *targets)
 
 	/* Search for holdpkg in target list */
 	int holdpkg = 0;
-	for(i = alpm_trans_get_remove(); i; i = alpm_list_next(i)) {
+	for(i = alpm_trans_get_remove(config->handle); i; i = alpm_list_next(i)) {
 		pmpkg_t *pkg = alpm_list_getdata(i);
 		if(alpm_list_find_str(config->holdpkg, alpm_pkg_get_name(pkg))) {
 			pm_printf(PM_LOG_WARNING, _("%s is designated as a HoldPkg.\n"),
@@ -143,7 +143,7 @@ int pacman_remove(alpm_list_t *targets)
 	}
 
 	/* Step 3: actually perform the removal */
-	alpm_list_t *pkglist = alpm_trans_get_remove();
+	alpm_list_t *pkglist = alpm_trans_get_remove(config->handle);
 	if(pkglist == NULL) {
 		printf(_(" there is nothing to do\n"));
 		goto cleanup; /* we are done */
@@ -162,7 +162,7 @@ int pacman_remove(alpm_list_t *targets)
 		goto cleanup;
 	}
 
-	if(alpm_trans_commit(NULL) == -1) {
+	if(alpm_trans_commit(config->handle, NULL) == -1) {
 		pm_fprintf(stderr, PM_LOG_ERROR, _("failed to commit transaction (%s)\n"),
 		        alpm_strerrorlast());
 		retval = 1;
diff --git a/src/pacman/sync.c b/src/pacman/sync.c
index 3876d92..6f8508e 100644
--- a/src/pacman/sync.c
+++ b/src/pacman/sync.c
@@ -768,7 +768,7 @@ static int sync_trans(alpm_list_t *targets)
 	}
 
 	/* Step 2: "compute" the transaction based on targets and flags */
-	if(alpm_trans_prepare(&data) == -1) {
+	if(alpm_trans_prepare(config->handle, &data) == -1) {
 		pm_fprintf(stderr, PM_LOG_ERROR, _("failed to prepare transaction (%s)\n"),
 		        alpm_strerrorlast());
 		switch(pm_errno) {
@@ -810,7 +810,7 @@ static int sync_trans(alpm_list_t *targets)
 		goto cleanup;
 	}
 
-	packages = alpm_trans_get_add();
+	packages = alpm_trans_get_add(config->handle);
 	if(packages == NULL) {
 		/* nothing to do: just exit without complaining */
 		printf(_(" there is nothing to do\n"));
@@ -823,8 +823,8 @@ static int sync_trans(alpm_list_t *targets)
 		goto cleanup;
 	}
 
-	display_targets(alpm_trans_get_remove(), 0);
-	display_targets(alpm_trans_get_add(), 1);
+	display_targets(alpm_trans_get_remove(config->handle), 0);
+	display_targets(alpm_trans_get_add(config->handle), 1);
 	printf("\n");
 
 	int confirm;
@@ -837,7 +837,7 @@ static int sync_trans(alpm_list_t *targets)
 		goto cleanup;
 	}
 
-	if(alpm_trans_commit(&data) == -1) {
+	if(alpm_trans_commit(config->handle, &data) == -1) {
 		pm_fprintf(stderr, PM_LOG_ERROR, _("failed to commit transaction (%s)\n"),
 		        alpm_strerrorlast());
 		switch(pm_errno) {
diff --git a/src/pacman/upgrade.c b/src/pacman/upgrade.c
index 21d9411..ddb8a2e 100644
--- a/src/pacman/upgrade.c
+++ b/src/pacman/upgrade.c
@@ -93,7 +93,7 @@ int pacman_upgrade(alpm_list_t *targets)
 
 	/* Step 2: "compute" the transaction based on targets and flags */
 	/* TODO: No, compute nothing. This is stupid. */
-	if(alpm_trans_prepare(&data) == -1) {
+	if(alpm_trans_prepare(config->handle, &data) == -1) {
 		pm_fprintf(stderr, PM_LOG_ERROR, _("failed to prepare transaction (%s)\n"),
 		        alpm_strerrorlast());
 		switch(pm_errno) {
@@ -142,20 +142,20 @@ int pacman_upgrade(alpm_list_t *targets)
 	/* Step 3: perform the installation */
 
 	if(config->print) {
-		print_packages(alpm_trans_get_add());
+		print_packages(alpm_trans_get_add(config->handle));
 		trans_release();
 		return 0;
 	}
 
 	/* print targets and ask user confirmation */
-	alpm_list_t *packages = alpm_trans_get_add();
+	alpm_list_t *packages = alpm_trans_get_add(config->handle);
 	if(packages == NULL) { /* we are done */
 		printf(_(" there is nothing to do\n"));
 		trans_release();
 		return retval;
 	}
-	display_targets(alpm_trans_get_remove(), 0);
-	display_targets(alpm_trans_get_add(), 1);
+	display_targets(alpm_trans_get_remove(config->handle), 0);
+	display_targets(alpm_trans_get_add(config->handle), 1);
 	printf("\n");
 	int confirm = yesno(_("Proceed with installation?"));
 	if(!confirm) {
@@ -163,7 +163,7 @@ int pacman_upgrade(alpm_list_t *targets)
 		return retval;
 	}
 
-	if(alpm_trans_commit(&data) == -1) {
+	if(alpm_trans_commit(config->handle, &data) == -1) {
 		pm_fprintf(stderr, PM_LOG_ERROR, _("failed to commit transaction (%s)\n"),
 				alpm_strerrorlast());
 		switch(pm_errno) {
diff --git a/src/pacman/util.c b/src/pacman/util.c
index 8d174e9..043b9d6 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -53,9 +53,9 @@ int trans_init(pmtransflag_t flags)
 {
 	int ret;
 	if(config->print) {
-		ret = alpm_trans_init(flags, NULL, NULL, NULL);
+		ret = alpm_trans_init(config->handle, flags, NULL, NULL, NULL);
 	} else {
-		ret = alpm_trans_init(flags, cb_trans_evt, cb_trans_conv,
+		ret = alpm_trans_init(config->handle, flags, cb_trans_evt, cb_trans_conv,
 				cb_trans_progress);
 	}
 
@@ -78,7 +78,7 @@ int trans_init(pmtransflag_t flags)
 
 int trans_release(void)
 {
-	if(alpm_trans_release() == -1) {
+	if(alpm_trans_release(config->handle) == -1) {
 		pm_fprintf(stderr, PM_LOG_ERROR, _("failed to release transaction (%s)\n"),
 				alpm_strerrorlast());
 		return -1;
-- 
1.7.5.2



More information about the pacman-dev mailing list