[arch-commits] Commit in packagekit/trunk (PKGBUILD alpm-track-pacman-round-2.patch)

Christian Hesse eworm at archlinux.org
Wed Mar 18 14:26:14 UTC 2015


    Date: Wednesday, March 18, 2015 @ 15:26:14
  Author: eworm
Revision: 129491

upgpkg: packagekit 1.0.5-3

* really fix local database tracking

Added:
  packagekit/trunk/alpm-track-pacman-round-2.patch
Modified:
  packagekit/trunk/PKGBUILD

---------------------------------+
 PKGBUILD                        |   14 +
 alpm-track-pacman-round-2.patch |  296 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 307 insertions(+), 3 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2015-03-18 14:20:27 UTC (rev 129490)
+++ PKGBUILD	2015-03-18 14:26:14 UTC (rev 129491)
@@ -4,7 +4,7 @@
 
 pkgname='packagekit'
 pkgver=1.0.5
-pkgrel=2
+pkgrel=3
 pkgdesc='A system designed to make installation and updates of packages easier'
 arch=('i686' 'x86_64')
 url='http://www.packagekit.org/'
@@ -20,10 +20,18 @@
 	'etc/PackageKit/alpm.d/pacman.conf'
 	'etc/PackageKit/alpm.d/repos.list')
 validpgpkeys=('163EB50119225DB3DF8F49EA17ACBA8DFA970E17') # Richard Hughes
-source=("http://www.freedesktop.org/software/PackageKit/releases/PackageKit-${pkgver}.tar.xz"{,.asc})
+source=("http://www.freedesktop.org/software/PackageKit/releases/PackageKit-${pkgver}.tar.xz"{,.asc}
+	'alpm-track-pacman-round-2.patch')
 sha256sums=('e0010fbe266042f07aa3b47377e94139466876dabe86a191587758f23c1ac8d6'
-	'SKIP')
+	'SKIP'
+	'6f34263db8cbf36456f0e61e85cf2418c947c318a765fff2208063661a15d6d2')
 
+prepare() {
+	cd "${srcdir}/PackageKit-${pkgver}"
+
+	patch -Np1 < "${srcdir}/alpm-track-pacman-round-2.patch"
+}
+
 build() {
 	cd "${srcdir}/PackageKit-${pkgver}"
 

Added: alpm-track-pacman-round-2.patch
===================================================================
--- alpm-track-pacman-round-2.patch	                        (rev 0)
+++ alpm-track-pacman-round-2.patch	2015-03-18 14:26:14 UTC (rev 129491)
@@ -0,0 +1,296 @@
+diff --git a/backends/alpm/pk-alpm-config.c b/backends/alpm/pk-alpm-config.c
+index 54e0e7f..4584f36 100644
+--- a/backends/alpm/pk-alpm-config.c
++++ b/backends/alpm/pk-alpm-config.c
+@@ -796,7 +796,7 @@ pk_alpm_siglevel_cross (alpm_siglevel_t base, const alpm_list_t *list, GError **
+ }
+ 
+ static gboolean
+-pk_alpm_config_configure_repos (PkAlpmConfig *config,
++pk_alpm_config_configure_repos (PkBackend *backend, PkAlpmConfig *config,
+ 				   alpm_handle_t *handle, GError **error)
+ {
+ 	alpm_siglevel_t base, local, remote;
+@@ -834,7 +834,7 @@ pk_alpm_config_configure_repos (PkAlpmConfig *config,
+ 		level = pk_alpm_siglevel_parse (base, repo->siglevels, error);
+ 		if (level == ALPM_SIG_USE_DEFAULT)
+ 			return FALSE;
+-		pk_alpm_add_database (repo->name, repo->servers, level);
++		pk_alpm_add_database (backend, repo->name, repo->servers, level);
+ 	}
+ 
+ 	return TRUE;
+@@ -936,7 +936,7 @@ out:
+ }
+ 
+ static alpm_handle_t *
+-pk_alpm_config_configure_alpm (PkAlpmConfig *config, GError **error)
++pk_alpm_config_configure_alpm (PkBackend *backend, PkAlpmConfig *config, GError **error)
+ {
+ 	PkBackendAlpmPrivate *priv = pk_backend_get_user_data (config->backend);
+ 	alpm_handle_t *handle;
+@@ -984,7 +984,7 @@ pk_alpm_config_configure_alpm (PkAlpmConfig *config, GError **error)
+ 	alpm_option_set_noupgrades (handle, config->noupgrades);
+ 	config->noupgrades = NULL;
+ 
+-	pk_alpm_config_configure_repos (config, handle, error);
++	pk_alpm_config_configure_repos (backend, config, handle, error);
+ 
+ 	return handle;
+ }
+@@ -1003,7 +1003,7 @@ pk_alpm_configure (PkBackend *backend, const gchar *filename, GError **error)
+ 	pk_alpm_config_enter_section (config, "options");
+ 
+ 	if (pk_alpm_config_parse (config, filename, NULL, &e))
+-		handle = pk_alpm_config_configure_alpm (config, &e);
++		handle = pk_alpm_config_configure_alpm (backend, config, &e);
+ 
+ 	pk_alpm_config_free (config);
+ 	if (e != NULL) {
+diff --git a/backends/alpm/pk-alpm-databases.c b/backends/alpm/pk-alpm-databases.c
+index aef3cb8..e41bc0a 100644
+--- a/backends/alpm/pk-alpm-databases.c
++++ b/backends/alpm/pk-alpm-databases.c
+@@ -33,9 +33,6 @@ typedef struct
+ 	alpm_siglevel_t level;
+ } PkBackendRepo;
+ 
+-static GHashTable *disabled = NULL;
+-static alpm_list_t *configured = NULL;
+-
+ static GHashTable *
+ pk_alpm_disabled_repos_new (GError **error)
+ {
+@@ -126,7 +123,7 @@ pk_alpm_disabled_repos_configure (PkBackend *backend, GHashTable *table, gboolea
+ 		return FALSE;
+ 	}
+ 
+-	for (i = configured; i != NULL; i = i->next) {
++	for (i = priv->configured_repos; i != NULL; i = i->next) {
+ 		PkBackendRepo *repo = (PkBackendRepo *) i->data;
+ 		alpm_siglevel_t level = repo->level;
+ 		alpm_db_t *db;
+@@ -155,9 +152,10 @@ pk_alpm_disabled_repos_configure (PkBackend *backend, GHashTable *table, gboolea
+ }
+ 
+ void
+-pk_alpm_add_database (const gchar *name, alpm_list_t *servers,
++pk_alpm_add_database (PkBackend *backend, const gchar *name, alpm_list_t *servers,
+ 			 alpm_siglevel_t level)
+ {
++	PkBackendAlpmPrivate *priv = pk_backend_get_user_data (backend);
+ 	PkBackendRepo *repo = g_new (PkBackendRepo, 1);
+ 
+ 	g_return_if_fail (name != NULL);
+@@ -166,29 +164,32 @@ pk_alpm_add_database (const gchar *name, alpm_list_t *servers,
+ 	repo->servers = alpm_list_strdup (servers);
+ 	repo->level = level;
+ 
+-	configured = alpm_list_add (configured, repo);
++	priv->configured_repos = alpm_list_add (priv->configured_repos, repo);
+ }
+ 
+ gboolean
+ pk_alpm_disable_signatures (PkBackend *backend, GError **error)
+ {
+-	return pk_alpm_disabled_repos_configure (backend, disabled, FALSE, error);
++	PkBackendAlpmPrivate *priv = pk_backend_get_user_data (backend);
++	return pk_alpm_disabled_repos_configure (backend, priv->disabled_repos, FALSE, error);
+ }
+ 
+ gboolean
+ pk_alpm_enable_signatures (PkBackend *backend, GError **error)
+ {
+-	return pk_alpm_disabled_repos_configure (backend, disabled, TRUE, error);
++	PkBackendAlpmPrivate *priv = pk_backend_get_user_data (backend);
++	return pk_alpm_disabled_repos_configure (backend, priv->disabled_repos, TRUE, error);
+ }
+ 
+ gboolean
+ pk_alpm_initialize_databases (PkBackend *backend, GError **error)
+ {
+-	disabled = pk_alpm_disabled_repos_new (error);
+-	if (disabled == NULL)
++	PkBackendAlpmPrivate *priv = pk_backend_get_user_data (backend);
++	priv->disabled_repos = pk_alpm_disabled_repos_new (error);
++	if (priv->disabled_repos == NULL)
+ 		return FALSE;
+ 
+-	if (!pk_alpm_disabled_repos_configure (backend, disabled, TRUE, error))
++	if (!pk_alpm_disabled_repos_configure (backend, priv->disabled_repos, TRUE, error))
+ 		return FALSE;
+ 
+ 	return TRUE;
+@@ -197,18 +198,19 @@ pk_alpm_initialize_databases (PkBackend *backend, GError **error)
+ void
+ pk_alpm_destroy_databases (PkBackend *backend)
+ {
++	PkBackendAlpmPrivate *priv = pk_backend_get_user_data (backend);
+ 	alpm_list_t *i;
+ 
+-	if (disabled != NULL)
+-		pk_alpm_disabled_repos_free (disabled);
++	if (priv->disabled_repos != NULL)
++		pk_alpm_disabled_repos_free (priv->disabled_repos);
+ 
+-	for (i = configured; i != NULL; i = i->next) {
++	for (i = priv->configured_repos; i != NULL; i = i->next) {
+ 		PkBackendRepo *repo = (PkBackendRepo *) i->data;
+ 		g_free (repo->name);
+ 		FREELIST (repo->servers);
+ 		g_free (repo);
+ 	}
+-	alpm_list_free (configured);
++	alpm_list_free (priv->configured_repos);
+ }
+ 
+ static gboolean
+@@ -229,7 +231,7 @@ pk_backend_get_repo_list_thread (PkBackendJob *job, GVariant *params, gpointer d
+ 	GHashTableIter iter;
+ 	gpointer key, value;
+ 
+-	g_return_if_fail (disabled != NULL);
++	g_return_if_fail (priv->disabled_repos != NULL);
+ 
+ 	/* emit enabled repos */
+ 	for (i = alpm_get_syncdbs (priv->alpm); i != NULL; i = i->next) {
+@@ -241,7 +243,7 @@ pk_backend_get_repo_list_thread (PkBackendJob *job, GVariant *params, gpointer d
+ 	}
+ 
+ 	/* emit disabled repos */
+-	g_hash_table_iter_init (&iter, disabled);
++	g_hash_table_iter_init (&iter, priv->disabled_repos);
+ 	while (g_hash_table_iter_next (&iter, &key, &value)) {
+ 		const gchar *repo = (const gchar *) key;
+ 		if (pk_backend_job_is_cancelled (job))
+@@ -264,15 +266,16 @@ pk_backend_repo_enable_thread (PkBackendJob *job, GVariant *params, gpointer dat
+ 	const gchar *repo;
+ 	gboolean enabled;
+ 	PkBackend *backend = pk_backend_job_get_backend (job);
++	PkBackendAlpmPrivate *priv = pk_backend_get_user_data (backend);
+ 	_cleanup_error_free_ GError *error = NULL;
+ 
+-	g_return_if_fail (disabled != NULL);
++	g_return_if_fail (priv->disabled_repos != NULL);
+ 
+ 	g_variant_get (params, "(&sb)", &repo, &enabled);
+ 
+-	if (g_hash_table_remove (disabled, repo)) {
++	if (g_hash_table_remove (priv->disabled_repos, repo)) {
+ 		/* reload configuration to preserve ordering */
+-		if (pk_alpm_disabled_repos_configure (backend, disabled, TRUE, &error)) {
++		if (pk_alpm_disabled_repos_configure (backend, priv->disabled_repos, TRUE, &error)) {
+ 			pk_backend_repo_list_changed (backend);
+ 		}
+ 	} else {
+@@ -311,7 +314,7 @@ pk_backend_repo_disable_thread (PkBackendJob *job, GVariant *params, gpointer da
+ 					     "[%s]: %s", repo,
+ 					     alpm_strerror (errno));
+ 			} else {
+-				g_hash_table_insert (disabled, g_strdup (repo),
++				g_hash_table_insert (priv->disabled_repos, g_strdup (repo),
+ 						     GINT_TO_POINTER (1));
+ 			}
+ 			break;
+diff --git a/backends/alpm/pk-alpm-databases.h b/backends/alpm/pk-alpm-databases.h
+index c3a9c3b..9b13a68 100644
+--- a/backends/alpm/pk-alpm-databases.h
++++ b/backends/alpm/pk-alpm-databases.h
+@@ -24,7 +24,8 @@
+ #include <alpm.h>
+ #include <pk-backend.h>
+ 
+-void		 pk_alpm_add_database			(const gchar *name,
++void		 pk_alpm_add_database			(PkBackend *backend,
++					                 const gchar *name,
+ 							 alpm_list_t *servers,
+ 							 alpm_siglevel_t level);
+ 
+diff --git a/backends/alpm/pk-backend-alpm.c b/backends/alpm/pk-backend-alpm.c
+index 8e2efc8..c1bff1a 100644
+--- a/backends/alpm/pk-backend-alpm.c
++++ b/backends/alpm/pk-backend-alpm.c
+@@ -103,7 +103,10 @@ pk_alpm_initialize (PkBackend *backend, GError **error)
+ static void
+ pk_backend_context_invalidate_cb (GFileMonitor *monitor, GFile *file, GFile *other_file, GFileMonitorEvent event_type, PkBackend *backend)
+ {
+-	pk_backend_installed_db_changed (backend);
++	PkBackendAlpmPrivate *priv = pk_backend_get_user_data (backend);
++	if (!pk_backend_is_transaction_inhibited (backend)) {
++		priv->localdb_changed = TRUE;
++	}
+ }
+ 
+ static void
+@@ -152,6 +155,8 @@ pk_backend_initialize (GKeyFile *conf, PkBackend *backend)
+ 
+ 	if (!pk_alpm_initialize_monitor (backend, &error))
+ 		g_error ("Failed to initialize monitor: %s", error->message);
++
++	priv->localdb_changed = FALSE;
+ }
+ 
+ void
+@@ -193,8 +198,16 @@ pk_backend_get_mime_types (PkBackend *backend)
+ void
+ pk_alpm_run (PkBackendJob *job, PkStatusEnum status, PkBackendJobThreadFunc func, gpointer data)
+ {
++	PkBackend *backend = pk_backend_job_get_backend (job);
++	PkBackendAlpmPrivate *priv = pk_backend_get_user_data (backend);
+ 	g_return_if_fail (func != NULL);
+ 
++	if (priv->localdb_changed) {
++		pk_backend_destroy (backend);
++		pk_backend_initialize (NULL, backend);
++		pk_backend_installed_db_changed (backend);
++	}
++
+ 	pk_backend_job_set_allow_cancel (job, TRUE);
+ 	pk_backend_job_set_status (job, status);
+ 	pk_backend_job_thread_create (job, func, data, NULL);
+diff --git a/backends/alpm/pk-backend-alpm.h b/backends/alpm/pk-backend-alpm.h
+index 7ba70ac..fc082fa 100644
+--- a/backends/alpm/pk-backend-alpm.h
++++ b/backends/alpm/pk-backend-alpm.h
+@@ -48,6 +48,9 @@ typedef struct {
+ 	alpm_list_t	*holdpkgs;
+ 	alpm_handle_t	*alpm;
+ 	GFileMonitor    *monitor;
++	GHashTable      *disabled_repos; /* list of disabled repos */
++	alpm_list_t     *configured_repos; /* list of configured repos */
++	gboolean	localdb_changed;
+ } PkBackendAlpmPrivate;
+ 
+ void		 pk_alpm_run		(PkBackendJob *job, PkStatusEnum status,
+diff --git a/src/pk-backend.c b/src/pk-backend.c
+index a92503b..cada3c4 100644
+--- a/src/pk-backend.c
++++ b/src/pk-backend.c
+@@ -809,6 +809,15 @@ pk_backend_transaction_inhibit_end (PkBackend *backend)
+ }
+ 
+ /**
++ * pk_backend_is_transaction_inhibited:
++ **/
++gboolean
++pk_backend_is_transaction_inhibited (PkBackend *backend)
++{
++	return backend->priv->transaction_in_progress;
++}
++
++/**
+  * pk_backend_start_job:
+  *
+  * This is called just before the threaded transaction method, and in
+diff --git a/src/pk-backend.h b/src/pk-backend.h
+index e1d1515..373760d 100644
+--- a/src/pk-backend.h
++++ b/src/pk-backend.h
+@@ -90,6 +90,7 @@ gboolean	 pk_backend_updates_changed_delay	(PkBackend	*backend,
+ 
+ void		 pk_backend_transaction_inhibit_start	(PkBackend      *backend);
+ void		 pk_backend_transaction_inhibit_end	(PkBackend      *backend);
++gboolean	 pk_backend_is_transaction_inhibited    (PkBackend      *backend);
+ const gchar	*pk_backend_bool_to_string		(gboolean	 value);
+ gboolean	 pk_backend_is_online			(PkBackend	*backend);
+ gchar		*pk_backend_convert_uri			(const gchar	*proxy);



More information about the arch-commits mailing list