Build a snapshot of master which also bumps the soname
This commit is contained in:
parent
cd16c77c7b
commit
5f0b606d1d
1
.gitignore
vendored
1
.gitignore
vendored
@ -31,3 +31,4 @@ PackageKit-0.6.7.tar.bz2
|
||||
/PackageKit-0.8.14.tar.xz
|
||||
/PackageKit-0.8.15.tar.xz
|
||||
/PackageKit-0.8.16.tar.xz
|
||||
/PackageKit-0.9.1-20140130.tar.xz
|
||||
|
||||
@ -1,22 +1,22 @@
|
||||
%global _changelog_trimtime %(date +%s -d "1 year ago")
|
||||
|
||||
%define gitdate 20140130
|
||||
|
||||
%define _default_patch_fuzz 2
|
||||
%{!?python_sitelib: %define python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
|
||||
|
||||
Summary: Package management service
|
||||
Name: PackageKit
|
||||
Version: 0.8.16
|
||||
Release: 3%{?dist}
|
||||
Version: 0.9.1
|
||||
Release: 0.1.20140130%{?dist}
|
||||
License: GPLv2+ and LGPLv2+
|
||||
URL: http://www.packagekit.org
|
||||
Source0: http://www.packagekit.org/releases/%{name}-%{version}.tar.xz
|
||||
#Source0: http://www.packagekit.org/releases/%{name}-%{version}.tar.xz
|
||||
Source0: http://www.packagekit.org/releases/%{name}-%{version}-%{gitdate}.tar.xz
|
||||
|
||||
# Fedora-specific: set Vendor.conf up for Fedora.
|
||||
Patch0: PackageKit-0.3.8-Fedora-Vendor.conf.patch
|
||||
|
||||
# Already upstream
|
||||
Patch1: master.patch
|
||||
|
||||
# Upstreamable? allow use of xulrunner2 for browser-plugin support
|
||||
Patch4: PackageKit-0.7.4-xulrunner2.patch
|
||||
|
||||
@ -173,9 +173,9 @@ A simple helper that offers to install new packages on the command line
|
||||
using PackageKit.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
#%setup -q
|
||||
%setup -q -n %{name}-%{version}-%{gitdate}
|
||||
%patch0 -p1 -b .fedora
|
||||
%patch1 -p1 -b .master
|
||||
%patch4 -p1 -b .xulrunner2
|
||||
|
||||
NOCONFIGURE=1 ./autogen.sh
|
||||
@ -203,7 +203,7 @@ make install DESTDIR=$RPM_BUILD_ROOT
|
||||
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/libpackagekit*.la
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/packagekit-backend/*.la
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/packagekit-plugins/*.la
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/packagekit-plugins-2/*.la
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/mozilla/plugins/packagekit-plugin.la
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/gtk-2.0/modules/*.la
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/gtk-3.0/modules/*.la
|
||||
@ -279,15 +279,14 @@ popd > /dev/null
|
||||
%{_libexecdir}/packagekitd
|
||||
%{_bindir}/pkmon
|
||||
%{_bindir}/pkcon
|
||||
%{_bindir}/packagekit-bugreport.sh
|
||||
%{_bindir}/pk-debuginfo-install
|
||||
%exclude %{_libdir}/libpackagekit*.so.*
|
||||
%{_libdir}/packagekit-backend/libpk_backend_dummy.so
|
||||
%{_libdir}/packagekit-backend/libpk_backend_test_*.so
|
||||
%ghost %verify(not md5 size mtime) %{_localstatedir}/lib/PackageKit/transactions.db
|
||||
%{_datadir}/dbus-1/system-services/*.service
|
||||
%dir %{_libdir}/packagekit-plugins
|
||||
%{_libdir}/packagekit-plugins/*.so
|
||||
%dir %{_libdir}/packagekit-plugins-2
|
||||
%{_libdir}/packagekit-plugins-2/*.so
|
||||
%{_libdir}/girepository-1.0/PackageKitPlugin-1.0.typelib
|
||||
%{_datadir}/dbus-1/interfaces/*.xml
|
||||
%{_unitdir}/packagekit-offline-update.service
|
||||
@ -340,6 +339,9 @@ popd > /dev/null
|
||||
%{_datadir}/gtk-doc/html/PackageKit
|
||||
|
||||
%changelog
|
||||
* Thu Jan 30 2014 Richard Hughes <rhughes@redhat.com> - 0.9.1-0.1.20140130
|
||||
- Build a snapshot of master which also bumps the soname
|
||||
|
||||
* Tue Jan 28 2014 Richard Hughes <rhughes@redhat.com> - 0.8.16-3
|
||||
- Backport three patches from master
|
||||
- Fixes using --cache-age when using the hawkey backend
|
||||
|
||||
804
master.patch
804
master.patch
@ -1,804 +0,0 @@
|
||||
commit 09c9cde8c0cfec3a5f4320ec10bf2e1b0f9b460f
|
||||
Author: Richard Hughes <richard@hughsie.com>
|
||||
Date: Thu Jan 23 13:46:49 2014 +0000
|
||||
|
||||
hawkey: Fix installing i386 packages on a 64bit computer
|
||||
|
||||
diff --git a/backends/hawkey/pk-backend-hawkey.c b/backends/hawkey/pk-backend-hawkey.c
|
||||
index f2ee746..b069396 100644
|
||||
--- a/backends/hawkey/pk-backend-hawkey.c
|
||||
+++ b/backends/hawkey/pk-backend-hawkey.c
|
||||
@@ -3196,10 +3196,12 @@ out:
|
||||
}
|
||||
|
||||
/**
|
||||
- * hif_is_installed_package_name:
|
||||
+ * hif_is_installed_package_name_arch:
|
||||
*/
|
||||
static gboolean
|
||||
-hif_is_installed_package_name (HySack sack, const gchar *name)
|
||||
+hif_is_installed_package_name_arch (HySack sack,
|
||||
+ const gchar *name,
|
||||
+ const gchar *arch)
|
||||
{
|
||||
gboolean ret;
|
||||
HyPackageList pkglist = NULL;
|
||||
@@ -3208,6 +3210,7 @@ hif_is_installed_package_name (HySack sack, const gchar *name)
|
||||
/* run query */
|
||||
query = hy_query_create (sack);
|
||||
hy_query_filter (query, HY_PKG_NAME, HY_EQ, name);
|
||||
+ hy_query_filter (query, HY_PKG_ARCH, HY_EQ, arch);
|
||||
hy_query_filter (query, HY_PKG_REPONAME, HY_EQ, HY_SYSTEM_REPO_NAME);
|
||||
pkglist = hy_query_run (query);
|
||||
|
||||
@@ -3228,7 +3231,9 @@ hif_is_installed_package_id (HySack sack, const gchar *package_id)
|
||||
gboolean ret;
|
||||
gchar **split;
|
||||
split = pk_package_id_split (package_id);
|
||||
- ret = hif_is_installed_package_name (sack, split[PK_PACKAGE_ID_NAME]);
|
||||
+ ret = hif_is_installed_package_name_arch (sack,
|
||||
+ split[PK_PACKAGE_ID_NAME],
|
||||
+ split[PK_PACKAGE_ID_ARCH]);
|
||||
g_strfreev (split);
|
||||
return ret;
|
||||
}
|
||||
commit 5776000231f81f7d0d764038a9957439c35a7a5d
|
||||
Author: Richard Hughes <richard@hughsie.com>
|
||||
Date: Thu Jan 23 14:25:55 2014 +0000
|
||||
|
||||
hawkey: Release locks early if the state fails
|
||||
|
||||
diff --git a/backends/hawkey/hif-lock.c b/backends/hawkey/hif-lock.c
|
||||
index 97066f4..a644330 100644
|
||||
--- a/backends/hawkey/hif-lock.c
|
||||
+++ b/backends/hawkey/hif-lock.c
|
||||
@@ -91,6 +91,19 @@ hif_lock_type_to_string (HifLockType lock_type)
|
||||
}
|
||||
|
||||
/**
|
||||
+ * hif_lock_mode_to_string:
|
||||
+ **/
|
||||
+static const gchar *
|
||||
+hif_lock_mode_to_string (HifLockMode lock_mode)
|
||||
+{
|
||||
+ if (lock_mode == HIF_LOCK_MODE_THREAD)
|
||||
+ return "thread";
|
||||
+ if (lock_mode == HIF_LOCK_MODE_PROCESS)
|
||||
+ return "process";
|
||||
+ return "unknown";
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
* hif_lock_get_item_by_type_mode:
|
||||
**/
|
||||
static HifLockItem *
|
||||
@@ -337,7 +350,9 @@ hif_lock_take (HifLock *lock,
|
||||
g_set_error (error,
|
||||
HIF_ERROR,
|
||||
PK_ERROR_ENUM_CANNOT_GET_LOCK,
|
||||
- "already locked by %s",
|
||||
+ "%s[%s] already locked by %s",
|
||||
+ hif_lock_type_to_string (type),
|
||||
+ hif_lock_mode_to_string (mode),
|
||||
cmdline);
|
||||
goto out;
|
||||
}
|
||||
@@ -520,7 +535,7 @@ hif_lock_finalize (GObject *object)
|
||||
if (item->refcount > 0) {
|
||||
g_warning ("held lock %s at shutdown",
|
||||
hif_lock_type_to_string (item->type));
|
||||
- hif_lock_release (lock, item->type, NULL);
|
||||
+ hif_lock_release (lock, item->id, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/backends/hawkey/hif-source.c b/backends/hawkey/hif-source.c
|
||||
index b79f525..fffcc31 100644
|
||||
--- a/backends/hawkey/hif-source.c
|
||||
+++ b/backends/hawkey/hif-source.c
|
||||
@@ -695,6 +695,7 @@ hif_source_update (HifSource *src,
|
||||
if (!ret)
|
||||
goto out;
|
||||
out:
|
||||
+ hif_state_release_locks (state);
|
||||
lr_handle_setopt (src->repo_handle, NULL, LRO_PROGRESSCB, NULL);
|
||||
lr_handle_setopt (src->repo_handle, NULL, LRO_PROGRESSDATA, 0xdeadbeef);
|
||||
return ret;
|
||||
diff --git a/backends/hawkey/hif-state.c b/backends/hawkey/hif-state.c
|
||||
index 6cd706f..fc6753c 100644
|
||||
--- a/backends/hawkey/hif-state.c
|
||||
+++ b/backends/hawkey/hif-state.c
|
||||
@@ -273,13 +273,17 @@ hif_state_set_speed (HifState *state, guint64 speed)
|
||||
/**
|
||||
* hif_state_release_locks:
|
||||
**/
|
||||
-static gboolean
|
||||
+gboolean
|
||||
hif_state_release_locks (HifState *state)
|
||||
{
|
||||
gboolean ret = TRUE;
|
||||
guint i;
|
||||
guint lock_id;
|
||||
|
||||
+ /* release children first */
|
||||
+ if (state->priv->child != NULL)
|
||||
+ hif_state_release_locks (state->priv->child);
|
||||
+
|
||||
/* release each one */
|
||||
for (i = 0; i < state->priv->lock_ids->len; i++) {
|
||||
lock_id = GPOINTER_TO_UINT (g_ptr_array_index (state->priv->lock_ids, i));
|
||||
diff --git a/backends/hawkey/hif-state.h b/backends/hawkey/hif-state.h
|
||||
index ffd42e9..b7b26f4 100644
|
||||
--- a/backends/hawkey/hif-state.h
|
||||
+++ b/backends/hawkey/hif-state.h
|
||||
@@ -131,6 +131,7 @@ gboolean hif_state_take_lock (HifState *state,
|
||||
HifLockType lock_type,
|
||||
HifLockMode lock_mode,
|
||||
GError **error);
|
||||
+gboolean hif_state_release_locks (HifState *state);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
diff --git a/backends/hawkey/pk-backend-hawkey.c b/backends/hawkey/pk-backend-hawkey.c
|
||||
index b069396..40831b9 100644
|
||||
--- a/backends/hawkey/pk-backend-hawkey.c
|
||||
+++ b/backends/hawkey/pk-backend-hawkey.c
|
||||
@@ -521,8 +521,10 @@ pk_backend_stop_job (PkBackend *backend, PkBackendJob *job)
|
||||
PkBackendHifJobData *job_data = pk_backend_job_get_user_data (job);
|
||||
|
||||
g_object_unref (job_data->cancellable);
|
||||
- if (job_data->state != NULL)
|
||||
+ if (job_data->state != NULL) {
|
||||
+ hif_state_release_locks (job_data->state);
|
||||
g_object_unref (job_data->state);
|
||||
+ }
|
||||
if (job_data->sources != NULL)
|
||||
g_ptr_array_unref (job_data->sources);
|
||||
g_ptr_array_unref (job_data->packages_to_download);
|
||||
@@ -2954,6 +2956,7 @@ pk_backend_transaction_commit (PkBackendJob *job, HifState *state, GError **erro
|
||||
if (!ret)
|
||||
goto out;
|
||||
out:
|
||||
+ hif_state_release_locks (state);
|
||||
g_free (verbosity_string);
|
||||
if (commit != NULL) {
|
||||
g_timer_destroy (commit->timer);
|
||||
diff --git a/backends/hawkey/hif-sack.c b/backends/hawkey/hif-sack.c
|
||||
index 28c1a65..0c151c3 100644
|
||||
--- a/backends/hawkey/hif-sack.c
|
||||
+++ b/backends/hawkey/hif-sack.c
|
||||
@@ -34,6 +34,7 @@
|
||||
gboolean
|
||||
hif_sack_add_source (HySack sack,
|
||||
HifSource *src,
|
||||
+ guint permissible_cache_age,
|
||||
HifSackAddFlags flags,
|
||||
HifState *state,
|
||||
GError **error)
|
||||
@@ -54,7 +55,10 @@ hif_sack_add_source (HySack sack,
|
||||
|
||||
/* check repo */
|
||||
state_local = hif_state_get_child (state);
|
||||
- ret = hif_source_check (src, state_local, &error_local);
|
||||
+ ret = hif_source_check (src,
|
||||
+ permissible_cache_age,
|
||||
+ state_local,
|
||||
+ &error_local);
|
||||
if (!ret) {
|
||||
g_debug ("failed to check, attempting update: %s",
|
||||
error_local->message);
|
||||
@@ -118,6 +122,7 @@ out:
|
||||
gboolean
|
||||
hif_sack_add_sources (HySack sack,
|
||||
GPtrArray *sources,
|
||||
+ guint permissible_cache_age,
|
||||
HifSackAddFlags flags,
|
||||
HifState *state,
|
||||
GError **error)
|
||||
@@ -143,7 +148,12 @@ hif_sack_add_sources (HySack sack,
|
||||
continue;
|
||||
|
||||
state_local = hif_state_get_child (state);
|
||||
- ret = hif_sack_add_source (sack, src, flags, state_local, error);
|
||||
+ ret = hif_sack_add_source (sack,
|
||||
+ src,
|
||||
+ permissible_cache_age,
|
||||
+ flags,
|
||||
+ state_local,
|
||||
+ error);
|
||||
if (!ret)
|
||||
goto out;
|
||||
|
||||
diff --git a/backends/hawkey/hif-sack.h b/backends/hawkey/hif-sack.h
|
||||
index abfe7f9..435e95b 100644
|
||||
--- a/backends/hawkey/hif-sack.h
|
||||
+++ b/backends/hawkey/hif-sack.h
|
||||
@@ -39,11 +39,13 @@ typedef enum {
|
||||
|
||||
gboolean hif_sack_add_source (HySack sack,
|
||||
HifSource *src,
|
||||
+ guint permissible_cache_age,
|
||||
HifSackAddFlags flags,
|
||||
HifState *state,
|
||||
GError **error);
|
||||
gboolean hif_sack_add_sources (HySack sack,
|
||||
GPtrArray *sources,
|
||||
+ guint permissible_cache_age,
|
||||
HifSackAddFlags flags,
|
||||
HifState *state,
|
||||
GError **error);
|
||||
diff --git a/backends/hawkey/hif-source.c b/backends/hawkey/hif-source.c
|
||||
index fffcc31..3dc5c85 100644
|
||||
--- a/backends/hawkey/hif-source.c
|
||||
+++ b/backends/hawkey/hif-source.c
|
||||
@@ -44,7 +44,8 @@ struct HifSource {
|
||||
gchar *id;
|
||||
gchar *location; /* /var/cache/PackageKit/metadata/fedora */
|
||||
gchar *location_tmp; /* /var/cache/PackageKit/metadata/fedora.tmp */
|
||||
- gint64 timestamp;
|
||||
+ gint64 timestamp_generated; /* µs */
|
||||
+ gint64 timestamp_modified; /* µs */
|
||||
GKeyFile *keyfile;
|
||||
HifSourceKind kind;
|
||||
HyRepo repo;
|
||||
@@ -342,10 +343,48 @@ hif_source_update_state_cb (void *user_data,
|
||||
}
|
||||
|
||||
/**
|
||||
+ * hif_source_set_timestamp_modified:
|
||||
+ */
|
||||
+static gboolean
|
||||
+hif_source_set_timestamp_modified (HifSource *src, GError **error)
|
||||
+{
|
||||
+ gboolean ret = TRUE;
|
||||
+ gchar *filename;
|
||||
+ GFile *file;
|
||||
+ GFileInfo *info;
|
||||
+
|
||||
+ filename = g_build_filename (src->location, "repodata", "repomd.xml", NULL);
|
||||
+ file = g_file_new_for_path (filename);
|
||||
+ info = g_file_query_info (file,
|
||||
+ G_FILE_ATTRIBUTE_TIME_MODIFIED ","
|
||||
+ G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC,
|
||||
+ G_FILE_QUERY_INFO_NONE,
|
||||
+ NULL,
|
||||
+ error);
|
||||
+ if (info == NULL) {
|
||||
+ ret = FALSE;
|
||||
+ goto out;
|
||||
+ }
|
||||
+ src->timestamp_modified = g_file_info_get_attribute_uint64 (info,
|
||||
+ G_FILE_ATTRIBUTE_TIME_MODIFIED) * G_USEC_PER_SEC;
|
||||
+ src->timestamp_modified += g_file_info_get_attribute_uint32 (info,
|
||||
+ G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC);
|
||||
+out:
|
||||
+ g_free (filename);
|
||||
+ g_object_unref (file);
|
||||
+ if (info != NULL)
|
||||
+ g_object_unref (info);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
* hif_source_check:
|
||||
*/
|
||||
gboolean
|
||||
-hif_source_check (HifSource *src, HifState *state, GError **error)
|
||||
+hif_source_check (HifSource *src,
|
||||
+ guint permissible_cache_age,
|
||||
+ HifState *state,
|
||||
+ GError **error)
|
||||
{
|
||||
const gchar *download_list[] = { "primary",
|
||||
"filelists",
|
||||
@@ -357,6 +396,7 @@ hif_source_check (HifSource *src, HifState *state, GError **error)
|
||||
GError *error_local = NULL;
|
||||
LrYumRepo *yum_repo;
|
||||
const gchar *urls[] = { "", NULL };
|
||||
+ gint64 age_of_data; /* in seconds */
|
||||
|
||||
/* has the media repo vanished? */
|
||||
if (src->kind == HIF_SOURCE_KIND_MEDIA &&
|
||||
@@ -406,7 +446,7 @@ hif_source_check (HifSource *src, HifState *state, GError **error)
|
||||
|
||||
/* get timestamp */
|
||||
ret = lr_result_getinfo (src->repo_result, &error_local,
|
||||
- LRR_YUM_TIMESTAMP, &src->timestamp);
|
||||
+ LRR_YUM_TIMESTAMP, &src->timestamp_generated);
|
||||
if (!ret) {
|
||||
g_set_error (error,
|
||||
HIF_ERROR,
|
||||
@@ -417,6 +457,23 @@ hif_source_check (HifSource *src, HifState *state, GError **error)
|
||||
goto out;
|
||||
}
|
||||
|
||||
+ /* check metadata age */
|
||||
+ if (permissible_cache_age != G_MAXUINT) {
|
||||
+ ret = hif_source_set_timestamp_modified (src, error);
|
||||
+ if (!ret)
|
||||
+ goto out;
|
||||
+ age_of_data = (g_get_real_time () - src->timestamp_modified) / G_USEC_PER_SEC;
|
||||
+ if (age_of_data > permissible_cache_age) {
|
||||
+ ret = FALSE;
|
||||
+ g_set_error (error,
|
||||
+ HIF_ERROR,
|
||||
+ PK_ERROR_ENUM_INTERNAL_ERROR,
|
||||
+ "cache too old: %"G_GINT64_FORMAT" > %i",
|
||||
+ age_of_data, permissible_cache_age);
|
||||
+ goto out;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
/* create a HyRepo */
|
||||
src->repo = hy_repo_create (src->id);
|
||||
hy_repo_set_string (src->repo, HY_REPO_MD_FN, yum_repo->repomd);
|
||||
@@ -653,7 +710,7 @@ hif_source_update (HifSource *src,
|
||||
goto out;
|
||||
}
|
||||
if ((flags & HIF_SOURCE_UPDATE_FLAG_FORCE) == 0 ||
|
||||
- timestamp_new < src->timestamp) {
|
||||
+ timestamp_new < src->timestamp_generated) {
|
||||
g_debug ("fresh metadata was older than what we have, ignoring");
|
||||
goto out;
|
||||
}
|
||||
@@ -686,7 +743,7 @@ hif_source_update (HifSource *src,
|
||||
|
||||
/* now setup internal hawkey stuff */
|
||||
state_local = hif_state_get_child (state);
|
||||
- ret = hif_source_check (src, state_local, error);
|
||||
+ ret = hif_source_check (src, G_MAXUINT, state_local, error);
|
||||
if (!ret)
|
||||
goto out;
|
||||
|
||||
diff --git a/backends/hawkey/hif-source.h b/backends/hawkey/hif-source.h
|
||||
index df4b805..f1d230e 100644
|
||||
--- a/backends/hawkey/hif-source.h
|
||||
+++ b/backends/hawkey/hif-source.h
|
||||
@@ -62,6 +62,7 @@ gchar *hif_source_get_description (HifSource *src);
|
||||
HyRepo hif_source_get_repo (HifSource *src);
|
||||
gboolean hif_source_is_devel (HifSource *src);
|
||||
gboolean hif_source_check (HifSource *src,
|
||||
+ guint permissible_cache_age,
|
||||
HifState *state,
|
||||
GError **error);
|
||||
gboolean hif_source_update (HifSource *src,
|
||||
diff --git a/backends/hawkey/pk-backend-hawkey.c b/backends/hawkey/pk-backend-hawkey.c
|
||||
index 40831b9..1a10e04 100644
|
||||
--- a/backends/hawkey/pk-backend-hawkey.c
|
||||
+++ b/backends/hawkey/pk-backend-hawkey.c
|
||||
@@ -593,8 +593,12 @@ hif_utils_add_remote (PkBackendJob *job,
|
||||
|
||||
/* add each repo */
|
||||
state_local = hif_state_get_child (state);
|
||||
- ret = hif_sack_add_sources (sack, job_data->sources,
|
||||
- flags, state_local, error);
|
||||
+ ret = hif_sack_add_sources (sack,
|
||||
+ job_data->sources,
|
||||
+ pk_backend_job_get_cache_age (job),
|
||||
+ flags,
|
||||
+ state_local,
|
||||
+ error);
|
||||
if (!ret)
|
||||
goto out;
|
||||
|
||||
@@ -648,6 +652,13 @@ hif_utils_create_sack_for_filters (PkBackendJob *job,
|
||||
}
|
||||
g_timer_reset (priv->repos_timer);
|
||||
|
||||
+ /* if we've specified a specific cache-age then do not use the cache */
|
||||
+ if ((flags & HIF_SACK_ADD_FLAG_REMOTE) > 0 &&
|
||||
+ pk_backend_job_get_cache_age (job) != G_MAXUINT) {
|
||||
+ g_debug ("not reusing sack specific cache age requested");
|
||||
+ create_flags &= ~HIF_CREATE_SACK_FLAG_USE_CACHE;
|
||||
+ }
|
||||
+
|
||||
/* do we have anything in the cache */
|
||||
cache_key = g_strdup_printf ("HySack::%i", flags);
|
||||
if ((create_flags & HIF_CREATE_SACK_FLAG_USE_CACHE) > 0)
|
||||
@@ -1306,7 +1317,10 @@ pk_backend_get_mime_types (PkBackend *backend)
|
||||
* pk_backend_refresh_source:
|
||||
*/
|
||||
static gboolean
|
||||
-pk_backend_refresh_source (HifSource *src, HifState *state, GError **error)
|
||||
+pk_backend_refresh_source (PkBackendJob *job,
|
||||
+ HifSource *src,
|
||||
+ HifState *state,
|
||||
+ GError **error)
|
||||
{
|
||||
gboolean ret;
|
||||
gboolean src_okay;
|
||||
@@ -1323,7 +1337,10 @@ pk_backend_refresh_source (HifSource *src, HifState *state, GError **error)
|
||||
|
||||
/* is the source up to date? */
|
||||
state_local = hif_state_get_child (state);
|
||||
- src_okay = hif_source_check (src, state_local, &error_local);
|
||||
+ src_okay = hif_source_check (src,
|
||||
+ pk_backend_job_get_cache_age (job),
|
||||
+ state_local,
|
||||
+ &error_local);
|
||||
if (!src_okay) {
|
||||
g_debug ("repo %s not okay [%s], refreshing",
|
||||
hif_source_get_id (src), error_local->message);
|
||||
@@ -1424,7 +1441,7 @@ pk_backend_refresh_cache_thread (PkBackendJob *job,
|
||||
|
||||
/* check and download */
|
||||
state_local = hif_state_get_child (job_data->state);
|
||||
- ret = pk_backend_refresh_source (src, state_local, &error);
|
||||
+ ret = pk_backend_refresh_source (job, src, state_local, &error);
|
||||
if (!ret) {
|
||||
pk_backend_job_error_code (job, error->code, "%s", error->message);
|
||||
g_error_free (error);
|
||||
@@ -3199,21 +3216,20 @@ out:
|
||||
}
|
||||
|
||||
/**
|
||||
- * hif_is_installed_package_name_arch:
|
||||
+ * hif_is_installed_package_id_name:
|
||||
*/
|
||||
static gboolean
|
||||
-hif_is_installed_package_name_arch (HySack sack,
|
||||
- const gchar *name,
|
||||
- const gchar *arch)
|
||||
+hif_is_installed_package_id_name (HySack sack, const gchar *package_id)
|
||||
{
|
||||
gboolean ret;
|
||||
+ gchar **split;
|
||||
HyPackageList pkglist = NULL;
|
||||
HyQuery query = NULL;
|
||||
|
||||
/* run query */
|
||||
query = hy_query_create (sack);
|
||||
- hy_query_filter (query, HY_PKG_NAME, HY_EQ, name);
|
||||
- hy_query_filter (query, HY_PKG_ARCH, HY_EQ, arch);
|
||||
+ split = pk_package_id_split (package_id);
|
||||
+ hy_query_filter (query, HY_PKG_NAME, HY_EQ, split[PK_PACKAGE_ID_NAME]);
|
||||
hy_query_filter (query, HY_PKG_REPONAME, HY_EQ, HY_SYSTEM_REPO_NAME);
|
||||
pkglist = hy_query_run (query);
|
||||
|
||||
@@ -3222,21 +3238,34 @@ hif_is_installed_package_name_arch (HySack sack,
|
||||
|
||||
hy_packagelist_free (pkglist);
|
||||
hy_query_free (query);
|
||||
+ g_strfreev (split);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
- * hif_is_installed_package_id:
|
||||
+ * hif_is_installed_package_id_name_arch:
|
||||
*/
|
||||
static gboolean
|
||||
-hif_is_installed_package_id (HySack sack, const gchar *package_id)
|
||||
+hif_is_installed_package_id_name_arch (HySack sack, const gchar *package_id)
|
||||
{
|
||||
gboolean ret;
|
||||
gchar **split;
|
||||
+ HyPackageList pkglist = NULL;
|
||||
+ HyQuery query = NULL;
|
||||
+
|
||||
+ /* run query */
|
||||
+ query = hy_query_create (sack);
|
||||
split = pk_package_id_split (package_id);
|
||||
- ret = hif_is_installed_package_name_arch (sack,
|
||||
- split[PK_PACKAGE_ID_NAME],
|
||||
- split[PK_PACKAGE_ID_ARCH]);
|
||||
+ hy_query_filter (query, HY_PKG_NAME, HY_EQ, split[PK_PACKAGE_ID_NAME]);
|
||||
+ hy_query_filter (query, HY_PKG_ARCH, HY_EQ, split[PK_PACKAGE_ID_ARCH]);
|
||||
+ hy_query_filter (query, HY_PKG_REPONAME, HY_EQ, HY_SYSTEM_REPO_NAME);
|
||||
+ pkglist = hy_query_run (query);
|
||||
+
|
||||
+ /* any matches? */
|
||||
+ ret = hy_packagelist_count (pkglist) > 0;
|
||||
+
|
||||
+ hy_packagelist_free (pkglist);
|
||||
+ hy_query_free (query);
|
||||
g_strfreev (split);
|
||||
return ret;
|
||||
}
|
||||
@@ -3322,7 +3351,7 @@ pk_backend_remove_packages_thread (PkBackendJob *job, GVariant *params, gpointer
|
||||
|
||||
/* ensure packages are already installed */
|
||||
for (i = 0; package_ids[i] != NULL; i++) {
|
||||
- ret = hif_is_installed_package_id (sack, package_ids[i]);
|
||||
+ ret = hif_is_installed_package_id_name_arch (sack, package_ids[i]);
|
||||
if (!ret) {
|
||||
gchar *printable_tmp;
|
||||
printable_tmp = pk_package_id_to_printable (package_ids[i]);
|
||||
@@ -3465,7 +3494,7 @@ pk_backend_install_packages_thread (PkBackendJob *job, GVariant *params, gpointe
|
||||
|
||||
/* ensure packages are not already installed */
|
||||
for (i = 0; package_ids[i] != NULL; i++) {
|
||||
- ret = hif_is_installed_package_id (sack, package_ids[i]);
|
||||
+ ret = hif_is_installed_package_id_name_arch (sack, package_ids[i]);
|
||||
if (ret) {
|
||||
gchar *printable_tmp;
|
||||
printable_tmp = pk_package_id_to_printable (package_ids[i]);
|
||||
@@ -3729,13 +3758,13 @@ pk_backend_update_packages_thread (PkBackendJob *job, GVariant *params, gpointer
|
||||
|
||||
/* ensure packages are not already installed */
|
||||
for (i = 0; package_ids[i] != NULL; i++) {
|
||||
- ret = hif_is_installed_package_id (sack, package_ids[i]);
|
||||
+ ret = hif_is_installed_package_id_name (sack, package_ids[i]);
|
||||
if (!ret) {
|
||||
gchar *printable_tmp;
|
||||
printable_tmp = pk_package_id_to_printable (package_ids[i]);
|
||||
pk_backend_job_error_code (job,
|
||||
PK_ERROR_ENUM_PACKAGE_NOT_INSTALLED,
|
||||
- "%s is not already installed",
|
||||
+ "cannot update: %s is not already installed",
|
||||
printable_tmp);
|
||||
g_free (printable_tmp);
|
||||
goto out;
|
||||
diff --git a/client/pk-console.c b/client/pk-console.c
|
||||
index 79f1bb5..4f01942 100644
|
||||
--- a/client/pk-console.c
|
||||
+++ b/client/pk-console.c
|
||||
@@ -1801,7 +1801,7 @@ main (int argc, char *argv[])
|
||||
gboolean background = FALSE;
|
||||
gboolean noninteractive = FALSE;
|
||||
gboolean only_download = FALSE;
|
||||
- guint cache_age = 0;
|
||||
+ guint cache_age = G_MAXUINT;
|
||||
gint retval_copy = 0;
|
||||
gboolean plain = FALSE;
|
||||
gboolean program_version = FALSE;
|
||||
diff --git a/contrib/systemd-updates/pk-offline-update.c b/contrib/systemd-updates/pk-offline-update.c
|
||||
index cf0447d..295b2dd 100644
|
||||
--- a/contrib/systemd-updates/pk-offline-update.c
|
||||
+++ b/contrib/systemd-updates/pk-offline-update.c
|
||||
@@ -33,6 +33,7 @@
|
||||
#define PK_OFFLINE_UPDATE_RESULTS_GROUP "PackageKit Offline Update Results"
|
||||
#define PK_OFFLINE_UPDATE_TRIGGER_FILENAME "/system-update"
|
||||
#define PK_OFFLINE_UPDATE_RESULTS_FILENAME "/var/lib/PackageKit/offline-update-competed"
|
||||
+#define PK_OFFLINE_UPDATE_ACTION_FILENAME "/var/lib/PackageKit/offline-update-action"
|
||||
#define PK_OFFLINE_PREPARED_UPDATE_FILENAME "/var/lib/PackageKit/prepared-update"
|
||||
|
||||
/**
|
||||
@@ -200,12 +201,6 @@ pk_offline_update_reboot (void)
|
||||
GError *error = NULL;
|
||||
GVariant *val = NULL;
|
||||
|
||||
- /* allow testing without rebooting */
|
||||
- if (g_getenv ("PK_OFFLINE_UPDATE_TEST") != NULL) {
|
||||
- g_print ("TESTING, so not rebooting\n");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
/* reboot using systemd */
|
||||
sd_journal_print (LOG_INFO, "rebooting");
|
||||
pk_offline_update_set_plymouth_mode ("shutdown");
|
||||
@@ -245,6 +240,54 @@ out:
|
||||
}
|
||||
|
||||
/**
|
||||
+ * pk_offline_update_power_off:
|
||||
+ **/
|
||||
+static void
|
||||
+pk_offline_update_power_off (void)
|
||||
+{
|
||||
+ GDBusConnection *connection;
|
||||
+ GError *error = NULL;
|
||||
+ GVariant *val = NULL;
|
||||
+
|
||||
+ /* reboot using systemd */
|
||||
+ sd_journal_print (LOG_INFO, "shutting down");
|
||||
+ pk_offline_update_set_plymouth_mode ("shutdown");
|
||||
+ /* TRANSLATORS: we've finished doing offline updates */
|
||||
+ pk_offline_update_set_plymouth_msg (_("Shutting down after installing updates…"));
|
||||
+ connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
|
||||
+ if (connection == NULL) {
|
||||
+ sd_journal_print (LOG_WARNING,
|
||||
+ "Failed to get system bus connection: %s",
|
||||
+ error->message);
|
||||
+ g_error_free (error);
|
||||
+ goto out;
|
||||
+ }
|
||||
+ val = g_dbus_connection_call_sync (connection,
|
||||
+ "org.freedesktop.systemd1",
|
||||
+ "/org/freedesktop/systemd1",
|
||||
+ "org.freedesktop.systemd1.Manager",
|
||||
+ "PowerOff",
|
||||
+ NULL,
|
||||
+ NULL,
|
||||
+ G_DBUS_CALL_FLAGS_NONE,
|
||||
+ -1,
|
||||
+ NULL,
|
||||
+ &error);
|
||||
+ if (val == NULL) {
|
||||
+ sd_journal_print (LOG_WARNING,
|
||||
+ "Failed to power off: %s",
|
||||
+ error->message);
|
||||
+ g_error_free (error);
|
||||
+ goto out;
|
||||
+ }
|
||||
+out:
|
||||
+ if (connection != NULL)
|
||||
+ g_object_unref (connection);
|
||||
+ if (val != NULL)
|
||||
+ g_variant_unref (val);
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
* pk_offline_update_write_error:
|
||||
**/
|
||||
static void
|
||||
@@ -487,6 +530,50 @@ pk_offline_update_sigint_cb (gpointer user_data)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
+typedef enum {
|
||||
+ PK_OFFLINE_UPDATE_ACTION_NOTHING,
|
||||
+ PK_OFFLINE_UPDATE_ACTION_REBOOT,
|
||||
+ PK_OFFLINE_UPDATE_ACTION_POWER_OFF
|
||||
+} PkOfflineUpdateAction;
|
||||
+
|
||||
+static PkOfflineUpdateAction
|
||||
+pk_offline_update_get_action (void)
|
||||
+{
|
||||
+ gboolean ret;
|
||||
+ gchar *action_data = NULL;
|
||||
+ PkOfflineUpdateAction action;
|
||||
+
|
||||
+ /* allow testing without rebooting */
|
||||
+ if (g_getenv ("PK_OFFLINE_UPDATE_TEST") != NULL) {
|
||||
+ g_print ("TESTING, so not doing action\n");
|
||||
+ action = PK_OFFLINE_UPDATE_ACTION_NOTHING;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ ret = g_file_get_contents (PK_OFFLINE_UPDATE_ACTION_FILENAME,
|
||||
+ &action_data,
|
||||
+ NULL,
|
||||
+ NULL);
|
||||
+ if (!ret) {
|
||||
+ g_warning ("Failed to get post-update action, using reboot");
|
||||
+ action = PK_OFFLINE_UPDATE_ACTION_REBOOT;
|
||||
+ goto out;
|
||||
+ }
|
||||
+ if (g_strcmp0 (action_data, "reboot") == 0) {
|
||||
+ action = PK_OFFLINE_UPDATE_ACTION_REBOOT;
|
||||
+ goto out;
|
||||
+ }
|
||||
+ if (g_strcmp0 (action_data, "power-off") == 0) {
|
||||
+ action = PK_OFFLINE_UPDATE_ACTION_POWER_OFF;
|
||||
+ goto out;
|
||||
+ }
|
||||
+ g_warning ("failed to parse action '%s', using reboot", action_data);
|
||||
+ action = PK_OFFLINE_UPDATE_ACTION_REBOOT;
|
||||
+out:
|
||||
+ g_free (action_data);
|
||||
+ return action;
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* main:
|
||||
**/
|
||||
@@ -502,6 +589,7 @@ main (int argc, char *argv[])
|
||||
GMainLoop *loop = NULL;
|
||||
PkResults *results = NULL;
|
||||
PkTask *task = NULL;
|
||||
+ PkOfflineUpdateAction action;
|
||||
PkProgressBar *progressbar = NULL;
|
||||
|
||||
#if (GLIB_MAJOR_VERSION == 2 && GLIB_MINOR_VERSION < 35)
|
||||
@@ -598,7 +686,12 @@ out:
|
||||
g_timeout_add_seconds (10, pk_offline_update_loop_quit_cb, loop);
|
||||
g_main_loop_run (loop);
|
||||
}
|
||||
- pk_offline_update_reboot ();
|
||||
+ /* we have to manually either restart or shutdown */
|
||||
+ action = pk_offline_update_get_action ();
|
||||
+ if (action == PK_OFFLINE_UPDATE_ACTION_REBOOT)
|
||||
+ pk_offline_update_reboot ();
|
||||
+ else if (action == PK_OFFLINE_UPDATE_ACTION_POWER_OFF)
|
||||
+ pk_offline_update_power_off ();
|
||||
g_free (packages_data);
|
||||
g_strfreev (package_ids);
|
||||
if (progressbar != NULL)
|
||||
diff --git a/contrib/systemd-updates/pk-trigger-offline-update.c b/contrib/systemd-updates/pk-trigger-offline-update.c
|
||||
index 3b59b1d..532bf3d 100644
|
||||
--- a/contrib/systemd-updates/pk-trigger-offline-update.c
|
||||
+++ b/contrib/systemd-updates/pk-trigger-offline-update.c
|
||||
@@ -30,17 +30,21 @@
|
||||
#include <unistd.h>
|
||||
|
||||
#define PK_OFFLINE_UPDATE_GENERATOR_FLAG "/system-update"
|
||||
+#define PK_OFFLINE_UPDATE_ACTION_FILENAME "/var/lib/PackageKit/offline-update-action"
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
+ FILE *fp = NULL;
|
||||
int rc;
|
||||
+ int retval = EXIT_SUCCESS;
|
||||
struct passwd *pw;
|
||||
|
||||
/* ensure root user */
|
||||
if (getuid () != 0 || geteuid () != 0) {
|
||||
fprintf (stderr, "This program can only be used using pkexec\n");
|
||||
- return EXIT_FAILURE;
|
||||
+ retval = EXIT_FAILURE;
|
||||
+ goto out;
|
||||
}
|
||||
|
||||
if (argc > 1 && strcmp (argv[1], "--cancel") == 0) {
|
||||
@@ -48,18 +52,34 @@ main (int argc, char *argv[])
|
||||
if (rc < 0) {
|
||||
fprintf (stderr, "Failed to remove file " PK_OFFLINE_UPDATE_GENERATOR_FLAG ": %s\n",
|
||||
strerror (errno));
|
||||
- return EXIT_FAILURE;
|
||||
+ retval = EXIT_FAILURE;
|
||||
+ goto out;
|
||||
}
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
+ /* open success action */
|
||||
+ fp = fopen (PK_OFFLINE_UPDATE_ACTION_FILENAME, "w+");
|
||||
+ if (fp == NULL) {
|
||||
+ fprintf (stderr, "Failed to open %s for writing\n",
|
||||
+ PK_OFFLINE_UPDATE_ACTION_FILENAME);
|
||||
+ retval = EXIT_FAILURE;
|
||||
+ goto out;
|
||||
+ }
|
||||
+ if (argc > 1 && strcmp (argv[1], "power-off") == 0) {
|
||||
+ fputs ("power-off", fp);
|
||||
+ } else {
|
||||
+ fputs ("reboot", fp);
|
||||
+ }
|
||||
+
|
||||
/* create symlink for the systemd-system-update-generator */
|
||||
rc = symlink ("/var/cache", PK_OFFLINE_UPDATE_GENERATOR_FLAG);
|
||||
if (rc < 0) {
|
||||
fprintf (stderr, "Failed to create symlink: %s\n",
|
||||
strerror (errno));
|
||||
- return EXIT_FAILURE;
|
||||
+ retval = EXIT_FAILURE;
|
||||
+ goto out;
|
||||
}
|
||||
|
||||
/* get UID for username */
|
||||
@@ -67,7 +87,8 @@ main (int argc, char *argv[])
|
||||
if (pw == NULL) {
|
||||
fprintf (stderr, "Failed to get PackageKit uid: %s\n",
|
||||
strerror (errno));
|
||||
- return EXIT_FAILURE;
|
||||
+ retval = EXIT_FAILURE;
|
||||
+ goto out;
|
||||
}
|
||||
|
||||
/* change it to the PackageKit user so the daemon can delete
|
||||
@@ -76,8 +97,11 @@ main (int argc, char *argv[])
|
||||
if (rc < 0) {
|
||||
fprintf (stderr, "Failed to change owner of symlink: %s\n",
|
||||
strerror (errno));
|
||||
- return EXIT_FAILURE;
|
||||
+ retval = EXIT_FAILURE;
|
||||
+ goto out;
|
||||
}
|
||||
-
|
||||
- return EXIT_SUCCESS;
|
||||
+out:
|
||||
+ if (fp != NULL)
|
||||
+ fclose (fp);
|
||||
+ return retval;
|
||||
}
|
||||
diff --git a/lib/packagekit-glib2/pk-control.h b/lib/packagekit-glib2/pk-control.h
|
||||
index a6c3493..3c483e6 100644
|
||||
--- a/lib/packagekit-glib2/pk-control.h
|
||||
+++ b/lib/packagekit-glib2/pk-control.h
|
||||
@@ -132,13 +132,6 @@ void pk_control_set_proxy2_async (PkControl *control,
|
||||
gboolean pk_control_set_proxy_finish (PkControl *control,
|
||||
GAsyncResult *res,
|
||||
GError **error);
|
||||
-void pk_control_get_network_state_async (PkControl *control,
|
||||
- GCancellable *cancellable,
|
||||
- GAsyncReadyCallback callback,
|
||||
- gpointer user_data);
|
||||
-PkNetworkEnum pk_control_get_network_state_finish (PkControl *control,
|
||||
- GAsyncResult *res,
|
||||
- GError **error);
|
||||
void pk_control_get_time_since_action_async (PkControl *control,
|
||||
PkRoleEnum role,
|
||||
GCancellable *cancellable,
|
||||
Loading…
Reference in New Issue
Block a user