[PackageKit-commit] packagekit: Branch 'master' - 37 commits
Richard Hughes
hughsient at kemper.freedesktop.org
Tue May 4 10:04:59 PDT 2010
backends/apt/aptBackend.py | 2
backends/entropy/entropyBackend.py | 16
backends/yum/Makefile.am | 13
backends/yum/libzif/egg-string.c | 1
backends/yum/libzif/egg-string.h | 1
backends/yum/libzif/zif-changeset.c | 479 +++++++++
backends/yum/libzif/zif-changeset.h | 84 +
backends/yum/libzif/zif-completion.c | 94 +
backends/yum/libzif/zif-completion.h | 27
backends/yum/libzif/zif-config.c | 86 +
backends/yum/libzif/zif-download.c | 8
backends/yum/libzif/zif-groups.c | 11
backends/yum/libzif/zif-lock.c | 2
backends/yum/libzif/zif-md-comps.c | 1
backends/yum/libzif/zif-md-filelists-sql.c | 542 +++++++++++
backends/yum/libzif/zif-md-filelists-sql.h | 63 +
backends/yum/libzif/zif-md-filelists-xml.c | 675 ++++++++++++++
backends/yum/libzif/zif-md-filelists-xml.h | 63 +
backends/yum/libzif/zif-md-filelists.c | 450 ---------
backends/yum/libzif/zif-md-filelists.h | 68 -
backends/yum/libzif/zif-md-metalink.c | 1
backends/yum/libzif/zif-md-mirrorlist.c | 1
backends/yum/libzif/zif-md-other-sql.c | 524 ++++++++++
backends/yum/libzif/zif-md-other-sql.h | 63 +
backends/yum/libzif/zif-md-primary-sql.c | 199 ++--
backends/yum/libzif/zif-md-primary-xml.c | 169 ++-
backends/yum/libzif/zif-md-updateinfo.c | 24
backends/yum/libzif/zif-md.c | 155 ++-
backends/yum/libzif/zif-md.h | 49 -
backends/yum/libzif/zif-monitor.c | 1
backends/yum/libzif/zif-package-local.c | 10
backends/yum/libzif/zif-package-remote.c | 113 ++
backends/yum/libzif/zif-package-remote.h | 6
backends/yum/libzif/zif-package.c | 141 +-
backends/yum/libzif/zif-package.h | 37
backends/yum/libzif/zif-repos.c | 3
backends/yum/libzif/zif-self-test.c | 87 -
backends/yum/libzif/zif-store-array.c | 43
backends/yum/libzif/zif-store-array.h | 14
backends/yum/libzif/zif-store-local.c | 171 ++-
backends/yum/libzif/zif-store-remote.c | 302 ++++--
backends/yum/libzif/zif-store-remote.h | 5
backends/yum/libzif/zif-store.c | 15
backends/yum/libzif/zif-store.h | 28
backends/yum/libzif/zif-update.c | 87 +
backends/yum/libzif/zif-update.h | 7
backends/yum/libzif/zif-utils.c | 11
backends/yum/licenses.txt | 187 +++
backends/yum/pk-backend-yum.c | 263 ++---
backends/yum/yumBackend.py | 39
backends/yum/yumComps.py | 5
backends/zypp/pk-backend-zypp.cpp | 492 +++++-----
backends/zypp/zypp-utils.cpp | 209 ++--
backends/zypp/zypp-utils.h | 24
client/pk-console.c | 17
configure.ac | 12
contrib/Makefile.am | 4
contrib/PackageKit.spec.in | 6
contrib/ruck/AUTHORS | 3
contrib/ruck/Makefile.am | 9
contrib/ruck/README | 20
contrib/ruck/src/.gitignore | 2
contrib/ruck/src/Makefile.am | 31
contrib/ruck/src/i18n.py | 32
contrib/ruck/src/ruck.in | 52 -
contrib/ruck/src/ruckcachecmds.py | 349 -------
contrib/ruck/src/ruckcommand.py | 641 -------------
contrib/ruck/src/ruckformat.py | 293 ------
contrib/ruck/src/ruckmain.py | 175 ---
contrib/ruck/src/ruckpackagecmds.py | 1343 ----------------------------
contrib/ruck/src/rucktalk.py | 81 -
contrib/ruck/src/rucktransactcmds.py | 244 -----
contrib/ruck/src/ruckyum.py | 295 ------
etc/PackageKit.conf.in | 14
lib/packagekit-glib2/pk-control-sync.c | 53 +
lib/packagekit-glib2/pk-control-sync.h | 4
lib/packagekit-glib2/pk-control.c | 148 +++
lib/packagekit-glib2/pk-control.h | 8
lib/packagekit-glib2/pk-enum.c | 1
lib/packagekit-glib2/pk-enum.h | 1
lib/packagekit-qt/src/Makefile.am | 5
po/da.po | 468 ++++-----
po/es.po | 232 +---
po/id.po | 83 -
po/nl.po | 133 +-
po/pa.po | 631 ++++++-------
po/pl.po | 133 +-
po/pt.po | 341 +++----
po/sr.po | 136 +-
po/sr at latin.po | 136 +-
po/uk.po | 156 +--
policy/org.freedesktop.packagekit.policy.in | 17
src/egg-string.c | 2
src/org.freedesktop.PackageKit.xml | 21
src/pk-backend-internal.h | 2
src/pk-backend-spawn.c | 8
src/pk-backend.c | 33
src/pk-backend.h | 1
src/pk-engine.c | 299 +++++-
src/pk-engine.h | 4
src/pk-spawn.c | 7
src/pk-transaction-db.c | 193 ++++
src/pk-transaction-db.h | 8
src/pk-transaction.c | 26
tools/pk-refresh-licenses.c | 17
105 files changed, 6746 insertions(+), 6355 deletions(-)
New commits:
commit c7f9942f597cea2da551a1f65ea948837a49e4a1
Author: Richard Hughes <richard at hughsie.com>
Date: Tue May 4 14:59:02 2010 +0100
yum: ensure we catch the exception if there are no groups. Fixes rh#587196
diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index 29b6d8f..c88e0b7 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -833,6 +833,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
cats = self.yumbase.comps.categories
except yum.Errors.RepoError, e:
self.error(ERROR_NO_CACHE, "failed to get comps list: %s" %_to_unicode(e), exit=False)
+ except yum.Errors.GroupsError, e:
+ self.error(ERROR_GROUP_LIST_INVALID, "Failed to get groups list: %s" %_to_unicode(e), exit=False)
except exceptions.IOError, e:
self.error(ERROR_NO_SPACE_ON_DEVICE, "Disk error: %s" % _to_unicode(e))
except Exception, e:
commit b4c32e864abbdf1d7ed359657e4bf4a90359faca
Author: Michael Meeks <michael.meeks at novell.com>
Date: Tue May 4 11:57:08 2010 +0100
cleanup calling convention
diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp
index 45557c6..0e0e3ac 100644
--- a/backends/zypp/pk-backend-zypp.cpp
+++ b/backends/zypp/pk-backend-zypp.cpp
@@ -1346,7 +1346,7 @@ backend_find_packages_thread (PkBackend *backend)
if ( ! q.empty() ) {
std::copy( q.begin(), q.end(), std::back_inserter( v ) );
}
- zypp_emit_filtered_packages_in_list (backend, &v);
+ zypp_emit_filtered_packages_in_list (backend, v);
pk_backend_finished (backend);
return TRUE;
@@ -1406,7 +1406,7 @@ backend_search_group_thread (PkBackend *backend)
pk_backend_set_percentage (backend, 70);
- zypp_emit_filtered_packages_in_list (backend, &v);
+ zypp_emit_filtered_packages_in_list (backend, v);
pk_backend_set_percentage (backend, 100);
pk_backend_finished (backend);
@@ -1596,7 +1596,7 @@ backend_get_packages_thread (PkBackend *backend)
v.push_back (it->satSolvable ());
}
- zypp_emit_filtered_packages_in_list (backend, &v);
+ zypp_emit_filtered_packages_in_list (backend, v);
pk_backend_finished (backend);
return TRUE;
diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index 825f1df..03aeed4 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -575,12 +575,12 @@ zypp_filter_solvable (PkBitfield filters, const zypp::sat::Solvable &item)
}
void
-zypp_emit_filtered_packages_in_list (PkBackend *backend, std::vector<zypp::sat::Solvable> *v)
+zypp_emit_filtered_packages_in_list (PkBackend *backend, const std::vector<zypp::sat::Solvable> &v)
{
PkBitfield filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
- for (std::vector<zypp::sat::Solvable>::iterator it = v->begin ();
- it != v->end (); it++) {
+ for (std::vector<zypp::sat::Solvable>::const_iterator it = v.begin ();
+ it != v.end (); it++) {
gchar *package_id = zypp_build_package_id_from_resolvable (*it);
if (zypp_filter_solvable (filters, *it))
diff --git a/backends/zypp/zypp-utils.h b/backends/zypp/zypp-utils.h
index 775f482..ad2cda6 100644
--- a/backends/zypp/zypp-utils.h
+++ b/backends/zypp/zypp-utils.h
@@ -191,7 +191,7 @@ gboolean zypp_filter_solvable (PkBitfield filters, const zypp::sat::Solvable &it
/**
* apply filters to a list.
*/
-void zypp_emit_filtered_packages_in_list (PkBackend *backend, std::vector<zypp::sat::Solvable> *v);
+void zypp_emit_filtered_packages_in_list (PkBackend *backend, const std::vector<zypp::sat::Solvable> &list);
/**
* convert a std::set<zypp::sat::Solvable to gchar ** array
commit a933fa10661df435e45a812b340b81b8301f2e83
Author: Michael Meeks <michael.meeks at novell.com>
Date: Tue May 4 11:52:26 2010 +0100
cleanup 'resolve' filtering code
cosmetic error return cleanup to improve readability
diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp
index b5f124f..45557c6 100644
--- a/backends/zypp/pk-backend-zypp.cpp
+++ b/backends/zypp/pk-backend-zypp.cpp
@@ -131,9 +131,8 @@ backend_get_requires_thread (PkBackend *backend)
package_ids = pk_backend_get_strv (backend, "package_ids");
if (!pk_package_ids_check (package_ids)) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "invalid package id");
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "invalid package id");
}
pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
@@ -161,18 +160,18 @@ backend_get_requires_thread (PkBackend *backend)
g_strfreev (id_parts);
if (found == FALSE) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_INSTALLED, "Package is not installed");
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_PACKAGE_NOT_INSTALLED,
+ "Package is not installed");
}
// set Package as to be uninstalled
package.status ().setToBeUninstalled (zypp::ResStatus::USER);
} else {
if (solvable == zypp::sat::Solvable::noSolvable) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND, "Package couldn't be found");
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+ "Package couldn't be found");
}
zypp::ResPool pool = zypp::ResPool::instance ();
@@ -192,9 +191,9 @@ backend_get_requires_thread (PkBackend *backend)
for (std::list<zypp::ResolverProblem_Ptr>::iterator it = problems.begin (); it != problems.end (); it++){
egg_warning("Solver problem (This should never happen): '%s'", (*it)->description ().c_str ());
}
- pk_backend_error_code (backend, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, "Resolution failed");
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED,
+ "Resolution failed");
}
// look for packages which would be uninstalled
@@ -316,9 +315,9 @@ backend_get_depends_thread (PkBackend *backend)
package_ids = pk_backend_get_strv (backend, "package_ids");
if (!pk_package_ids_check (package_ids)) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "invalid package id");
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID,
+ "invalid package id");
}
zypp::ZYpp::Ptr zypp;
@@ -359,9 +358,9 @@ backend_get_depends_thread (PkBackend *backend)
pk_backend_set_percentage (backend, 40);
if (pool_item_found == FALSE) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, "Did not find the specified package.");
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED,
+ "Did not find the specified package.");
}
// Gather up any dependencies
@@ -464,15 +463,11 @@ backend_get_depends_thread (PkBackend *backend)
pk_backend_set_percentage (backend, 100);
} catch (const zypp::repo::RepoNotFoundException &ex) {
- // TODO: make sure this dumps out the right sring.
- pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, ex.asUserString().c_str() );
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_REPO_NOT_FOUND, ex.asUserString().c_str());
} catch (const zypp::Exception &ex) {
- //pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "Error enumerating repositories");
- pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString().c_str() );
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString().c_str());
}
pk_backend_finished (backend);
@@ -496,9 +491,8 @@ backend_get_details_thread (PkBackend *backend)
package_ids = pk_backend_get_strv (backend, "package_ids");
if (!pk_package_ids_check (package_ids)) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "invalid package id");
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "invalid package id");
}
pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
@@ -534,9 +528,8 @@ backend_get_details_thread (PkBackend *backend)
g_strfreev (id_parts);
if (package == NULL) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND, "couldn't find package");
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND, "couldn't find package");
}
try {
@@ -564,15 +557,11 @@ backend_get_details_thread (PkBackend *backend)
}
} catch (const zypp::target::rpm::RpmException &ex) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, "Couldn't open rpm-database");
- pk_backend_finished (backend);
-
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_REPO_NOT_FOUND, "Couldn't open rpm-database");
} catch (const zypp::Exception &ex) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString ().c_str ());
- pk_backend_finished (backend);
-
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString ().c_str ());
}
}
@@ -596,9 +585,8 @@ backend_get_distro_upgrades_thread(PkBackend *backend)
std::vector<zypp::parser::ProductFileData> result;
if (!zypp::parser::ProductFileReader::scanDir (zypp::functor::getAll (std::back_inserter (result)), "/etc/products.d")) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "Could not parse /etc/products.d");
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_INTERNAL_ERROR, "Could not parse /etc/products.d");
}
for (std::vector<zypp::parser::ProductFileData>::iterator it = result.begin (); it != result.end (); it++) {
@@ -773,9 +761,9 @@ backend_install_files_thread (PkBackend *backend)
// create a temporary directory
zypp::filesystem::TmpDir tmpDir;
if (tmpDir == NULL) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_LOCAL_INSTALL_FAILED, "Could not create a temporary directory");
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_LOCAL_INSTALL_FAILED,
+ "Could not create a temporary directory");
}
for (guint i = 0; i < g_strv_length (full_paths); i++) {
@@ -785,17 +773,17 @@ backend_install_files_thread (PkBackend *backend)
zypp::target::rpm::RpmHeader::constPtr rpmHeader = zypp::target::rpm::RpmHeader::readPackage (rpmPath, zypp::target::rpm::RpmHeader::NOSIGNATURE);
if (rpmHeader == NULL) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_LOCAL_INSTALL_FAILED, "%s is not valid rpm-File", full_paths[i]);
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_LOCAL_INSTALL_FAILED,
+ "%s is not valid rpm-File", full_paths[i]);
}
// copy the rpm into tmpdir
std::string tempDest = tmpDir.path ().asString () + "/" + rpmHeader->tag_name () + ".rpm";
if (zypp::filesystem::copy (full_paths[i], tempDest) != 0) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_LOCAL_INSTALL_FAILED, "Could not copy the rpm-file into the temp-dir");
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_LOCAL_INSTALL_FAILED,
+ "Could not copy the rpm-file into the temp-dir");
}
}
@@ -821,15 +809,11 @@ backend_install_files_thread (PkBackend *backend)
manager.buildCache (tmpRepo);
} catch (const zypp::url::UrlException &ex) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString ().c_str ());
-
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString ().c_str ());
} catch (const zypp::Exception &ex) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString().c_str() );
-
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString ().c_str ());
}
for (guint i = 0; i < g_strv_length (full_paths); i++) {
@@ -893,10 +877,8 @@ backend_get_update_detail_thread (PkBackend *backend)
package_ids = pk_backend_get_strv (backend, "package_ids");
if (package_ids == NULL) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "invalid package id");
-
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "invalid package id");
}
pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
@@ -1022,9 +1004,9 @@ backend_update_system_thread (PkBackend *backend)
}
if (!zypp_perform_execution (backend, UPDATE, FALSE)) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, "Couldn't perform the installation.");
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_TRANSACTION_ERROR,
+ "Couldn't perform the installation.");
}
if (restart != PK_RESTART_ENUM_NONE)
@@ -1059,9 +1041,8 @@ backend_install_packages_thread (PkBackend *backend)
package_ids = pk_backend_get_strv (backend, "package_ids");
if (!pk_package_ids_check (package_ids)) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "invalid package id");
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "invalid package id");
}
/* FIXME: support only_trusted */
@@ -1101,9 +1082,9 @@ backend_install_packages_thread (PkBackend *backend)
g_strfreev (id_parts);
if (!hit) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND, "Couldn't find the package.");
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+ "Couldn't find the package.");
}
pk_backend_set_percentage (backend, 40);
@@ -1125,9 +1106,8 @@ backend_install_packages_thread (PkBackend *backend)
pk_backend_set_percentage (backend, 100);
} catch (const zypp::Exception &ex) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString().c_str() );
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString().c_str());
}
pk_backend_finished (backend);
@@ -1186,9 +1166,8 @@ backend_remove_packages_thread (PkBackend *backend)
package_ids = pk_backend_get_strv (backend, "package_ids");
if (!pk_package_ids_check (package_ids)) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "invalid package id");
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "invalid package id");
}
for (guint i = 0; i < g_strv_length (package_ids); i++) {
gchar **id_parts = pk_package_id_split (package_ids[i]);
@@ -1216,24 +1195,20 @@ backend_remove_packages_thread (PkBackend *backend)
it->statusReset();
}
delete (items);
- pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, "Couldn't remove the package");
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_TRANSACTION_ERROR,
+ "Couldn't remove the package");
}
delete (items);
pk_backend_set_percentage (backend, 100);
} catch (const zypp::repo::RepoNotFoundException &ex) {
- // TODO: make sure this dumps out the right sring.
- pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, ex.asUserString().c_str() );
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_REPO_NOT_FOUND, ex.asUserString().c_str());
} catch (const zypp::Exception &ex) {
- //pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "Error enumerating repositories");
- pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString().c_str() );
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString().c_str());
}
pk_backend_finished (backend);
@@ -1269,9 +1244,7 @@ backend_resolve_thread (PkBackend *backend)
zypp::sat::Solvable package;
for (std::vector<zypp::sat::Solvable>::iterator it = v->begin ();
it != v->end (); it++) {
- if (!it->isSystem() && pk_bitfield_contain (_filters, PK_FILTER_ENUM_INSTALLED))
- continue;
- if (it->isSystem() && pk_bitfield_contain (_filters, PK_FILTER_ENUM_NOT_INSTALLED))
+ if (zypp_filter_solvable (_filters, *it))
continue;
const char *version = it->edition ().asString ().c_str ();
@@ -1286,9 +1259,9 @@ backend_resolve_thread (PkBackend *backend)
delete (v2);
if (package == NULL) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND, "couldn't find package");
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+ "couldn't find package");
}
if (zypp_filter_solvable (_filters, package))
@@ -1409,9 +1382,8 @@ backend_search_group_thread (PkBackend *backend)
group = values[0]; //Fixme - add support for possible multiple values.
if (group == NULL) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_GROUP_NOT_FOUND, "Group is invalid.");
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_GROUP_NOT_FOUND, "Group is invalid.");
}
pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
@@ -1475,12 +1447,13 @@ backend_get_repo_list (PkBackend *backend, PkBitfield filters)
try
{
repos = std::list<zypp::RepoInfo>(manager.repoBegin(),manager.repoEnd());
- }
- catch ( const zypp::Exception &e)
- {
- // FIXME: make sure this dumps out the right sring.
- pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, e.asUserString().c_str() );
- pk_backend_finished (backend);
+ } catch (const zypp::repo::RepoNotFoundException &ex) {
+ zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_REPO_NOT_FOUND, ex.asUserString().c_str());
+ return;
+ } catch (const zypp::Exception &ex) {
+ zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString().c_str());
return;
}
@@ -1516,12 +1489,15 @@ backend_repo_enable (PkBackend *backend, const gchar *rid, gboolean enabled)
zypp::Repository repository = zypp::sat::Pool::instance ().reposFind (repo.alias ());
repository.eraseFromPool ();
}
+
} catch (const zypp::repo::RepoNotFoundException &ex) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, "Couldn't find the specified repository");
- pk_backend_finished (backend);
+ zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_REPO_NOT_FOUND, ex.asUserString().c_str());
return;
} catch (const zypp::Exception &ex) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "Could not enable/disable the repo");
+ zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString().c_str());
+ return;
}
pk_backend_finished (backend);
@@ -1534,9 +1510,8 @@ backend_get_files_thread (PkBackend *backend)
package_ids = pk_backend_get_strv (backend, "package_ids");
if (!pk_package_ids_check (package_ids)) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "invalid package id");
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_PACKAGE_ID_INVALID, "invalid package id");
}
for(uint i = 0; i < g_strv_length(package_ids); i++) {
@@ -1567,9 +1542,9 @@ backend_get_files_thread (PkBackend *backend)
g_strfreev (id_parts);
if (package == NULL) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND, "couldn't find package");
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+ "couldn't find package");
}
std::string temp;
@@ -1584,9 +1559,9 @@ backend_get_files_thread (PkBackend *backend)
}
} catch (const zypp::target::rpm::RpmException &ex) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, "Couldn't open rpm-database");
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_REPO_NOT_FOUND,
+ "Couldn't open rpm-database");
}
} else {
temp = "Only available for installed packages";
@@ -1834,9 +1809,8 @@ backend_what_provides_thread (PkBackend *backend)
egg_warning("Solver problem (This should never happen): '%s'", (*it)->description ().c_str ());
}
solver.setIgnoreAlreadyRecommended (FALSE);
- pk_backend_error_code (backend, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, "Resolution failed");
- pk_backend_finished (backend);
- return FALSE;
+ return zypp_backend_finished_error (
+ backend, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, "Resolution failed");
}
// look for packages which would be installed
diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index 34cc164..825f1df 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -968,3 +968,24 @@ zypp_refresh_cache (PkBackend *backend, gboolean force)
g_free (repo_messages);
return TRUE;
}
+
+gboolean
+zypp_backend_finished_error (PkBackend *backend, PkErrorEnum err_code,
+ const char *format, ...)
+{
+ va_list args;
+ gchar *buffer;
+
+ /* sadly no _va variant for error code setting */
+ va_start (args, format);
+ buffer = g_strdup_vprintf (format, args);
+ va_end (args);
+
+ pk_backend_error_code (backend, err_code, "%s", buffer);
+
+ g_free (buffer);
+
+ pk_backend_finished (backend);
+
+ return FALSE;
+}
diff --git a/backends/zypp/zypp-utils.h b/backends/zypp/zypp-utils.h
index ec38ab9..775f482 100644
--- a/backends/zypp/zypp-utils.h
+++ b/backends/zypp/zypp-utils.h
@@ -36,6 +36,7 @@
#include <zypp/ResPool.h>
#include <zypp/PoolQuery.h>
#include <zypp/ResFilters.h>
+#include <packagekit-glib2/pk-enum.h>
#include <iterator>
#include <list>
@@ -207,5 +208,11 @@ gchar * zypp_build_package_id_capabilities (zypp::Capabilities caps);
*/
gboolean zypp_refresh_cache (PkBackend *backend, gboolean force);
+/**
+ * helper to simplify returning errors
+ */
+gboolean zypp_backend_finished_error (PkBackend *backend, PkErrorEnum err_code,
+ const char *format, ...);
+
#endif // _ZYPP_UTILS_H_
commit 8d766104b804c2672568d976eff9bc2477c2c319
Author: Michael Meeks <michael.meeks at novell.com>
Date: Tue May 4 11:14:25 2010 +0100
fix dummy security model proxy support
diff --git a/src/pk-engine.c b/src/pk-engine.c
index 142ed16..77f37cc 100644
--- a/src/pk-engine.c
+++ b/src/pk-engine.c
@@ -924,7 +924,7 @@ pk_engine_set_proxy (PkEngine *engine, const gchar *proxy_http, const gchar *pro
egg_warning ("*** THERE IS NO SECURITY MODEL BEING USED!!! ***");
/* try to set the new proxy and save to database */
- ret = pk_engine_set_proxy_internal (engine, sender);
+ ret = pk_engine_set_proxy_internal (engine, sender, proxy_http, proxy_ftp);
if (!ret) {
error = g_error_new (PK_ENGINE_ERROR, PK_ENGINE_ERROR_CANNOT_SET_PROXY, "%s", "setting the proxy failed");
dbus_g_method_return_error (context, error);
commit b28d224984de9899cf30ccb0d2a0ed18cdb4c4f6
Author: Michael Meeks <michael.meeks at novell.com>
Date: Tue May 4 11:12:11 2010 +0100
downgrade required autoconf version
diff --git a/configure.ac b/configure.ac
index 4b9152b..5e857d1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
# Copyright (C) 2007-2009 Richard Hughes <richard at hughsie.com>
-AC_PREREQ(2.65)
+AC_PREREQ(2.63)
m4_define([pk_major_version], [0])
m4_define([pk_minor_version], [6])
commit a53ce81e8ff638bbb47703821ff9f3448468a832
Author: Michael Meeks <michael.meeks at novell.com>
Date: Tue May 4 11:11:57 2010 +0100
fix parallel-build snafu wrt. MOC generated files
diff --git a/lib/packagekit-qt/src/Makefile.am b/lib/packagekit-qt/src/Makefile.am
index 1b05c4f..8a458b9 100644
--- a/lib/packagekit-qt/src/Makefile.am
+++ b/lib/packagekit-qt/src/Makefile.am
@@ -58,8 +58,9 @@ libpackagekit_qt_la_SOURCES = \
bitfield.h \
bitfield.cpp \
enum.h \
- enum.cpp \
- dbus_proxies.stamp \
+ enum.cpp \
+ dbus_proxies.stamp \
+ $(MOCFILES) \
$(NULL)
libpackagekit_qt_la_LIBADD = \
commit 48c58d36fc435a3c14f3d352673fc2a17767307f
Author: Michael Meeks <michael.meeks at novell.com>
Date: Tue May 4 09:58:59 2010 +0100
Cleanup a certain amount of superstitious coding:
+ no need to g_strdup before checking for null strings
+ no need to heap allocate and delete stl types in the same scope
+ no need to convert pk-bitfields to strings, and use strstr
Misc whitespace, comment, naming cleanups
Split out the filtering functionality into zypp_filter_solvable
+ re-use this for emit_filtered_packages
+ re-use filtering where it was missing.
Fixes several key pkcon bugs:
+ bogus (installed) dependencies shown during install
+ resolve not doing filtering broke remove - by sometimes
returning 'available' and not 'installed' packages of
the same name
diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp
index 8b54132..b5f124f 100644
--- a/backends/zypp/pk-backend-zypp.cpp
+++ b/backends/zypp/pk-backend-zypp.cpp
@@ -127,6 +127,7 @@ static gboolean
backend_get_requires_thread (PkBackend *backend)
{
gchar **package_ids;
+ PkBitfield _filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
package_ids = pk_backend_get_strv (backend, "package_ids");
if (!pk_package_ids_check (package_ids)) {
@@ -217,7 +218,7 @@ backend_get_requires_thread (PkBackend *backend)
hit = TRUE;
}
- if (hit) {
+ if (hit && !zypp_filter_solvable (_filters, it->resolvable()->satSolvable())) {
gchar *package_id;
package_id = pk_package_id_build ( it->resolvable ()->name ().c_str(),
it->resolvable ()->edition ().asString ().c_str(),
@@ -292,10 +293,23 @@ backend_get_filters (PkBackend *backend)
-1);
}
+static bool
+zypp_is_no_solvable (const zypp::sat::Solvable &solv)
+{
+ return solv.id() == zypp::sat::detail::noSolvableId;
+}
+
+/*
+ * This method is a bit of a travesty of the complexity of
+ * solving dependencies. We try to give a simple answer to
+ * "what packages are required for these packages" - but,
+ * clearly often there is no simple answer.
+ */
static gboolean
backend_get_depends_thread (PkBackend *backend)
{
gchar **package_ids;
+ PkBitfield _filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
pk_backend_set_percentage (backend, 0);
@@ -310,6 +324,8 @@ backend_get_depends_thread (PkBackend *backend)
zypp::ZYpp::Ptr zypp;
zypp = get_zypp ();
+ egg_debug ("get_depends with filter '%s'", pk_filter_bitfield_to_string (_filters));
+
try
{
gchar **id_parts = pk_package_id_split (package_ids[0]);
@@ -357,28 +373,60 @@ backend_get_depends_thread (PkBackend *backend)
zypp::sat::Solvable solvable = pool_item.satSolvable ();
zypp::Capabilities req = solvable[zypp::Dep::REQUIRES];
+ // which package each capability
std::map<std::string, zypp::sat::Solvable> caps;
- std::vector<std::string> temp;
-
- for (zypp::Capabilities::const_iterator it = req.begin (); it != req.end (); ++it) {
- zypp::sat::WhatProvides provider (*it);
- for (zypp::sat::WhatProvides::const_iterator it2 = provider.begin ();
- it2 != provider.end ();
- it2++) {
- // Adding Packages only one time
- std::map<std::string, zypp::sat::Solvable>::iterator mIt;
- mIt = caps.find(it->asString ());
- if (std::find (temp.begin (), temp.end(), it2->name ()) == temp.end()) {
- if( mIt != caps.end()){
- if(it2->isSystem ()){
- caps.erase (mIt);
- caps[it->asString ()] = *it2;
- }
- } else {
- caps[it->asString ()] = *it2;
- }
- temp.push_back(it2->name ());
+ // packages already providing a capability
+ std::vector<std::string> pkg_names;
+
+ for (zypp::Capabilities::const_iterator cap = req.begin (); cap != req.end (); ++cap) {
+ egg_debug ("get_depends - capability '%s'", cap->asString().c_str());
+
+ if (caps.find (cap->asString ()) != caps.end()) {
+ egg_debug ("Interesting ! already have capability '%s'", cap->asString().c_str());
+ continue;
+ }
+
+ // Look for packages providing each capability
+ bool have_preference = false;
+ zypp::sat::Solvable preferred;
+
+ zypp::sat::WhatProvides prov_list (*cap);
+ for (zypp::sat::WhatProvides::const_iterator provider = prov_list.begin ();
+ provider != prov_list.end (); provider++) {
+
+ egg_debug ("provider: '%s'", provider->asString().c_str());
+
+ // filter out caps like "rpmlib(PayloadFilesHavePrefix) <= 4.0-1" (bnc#372429)
+ if (zypp_is_no_solvable (*provider))
+ continue;
+
+
+ // Is this capability provided by a package we already have listed ?
+ if (std::find (pkg_names.begin (), pkg_names.end(),
+ provider->name ()) != pkg_names.end()) {
+ preferred = *provider;
+ have_preference = true;
+ break;
}
+
+ // Something is better than nothing
+ if (!have_preference) {
+ preferred = *provider;
+ have_preference = true;
+
+ // Prefer system packages
+ } else if (provider->isSystem()) {
+ preferred = *provider;
+ break;
+
+ } // else keep our first love
+ }
+
+ if (have_preference &&
+ std::find (pkg_names.begin (), pkg_names.end(),
+ preferred.name ()) == pkg_names.end()) {
+ caps[cap->asString()] = preferred;
+ pkg_names.push_back (preferred.name ());
}
}
@@ -386,42 +434,32 @@ backend_get_depends_thread (PkBackend *backend)
for (std::map<std::string, zypp::sat::Solvable>::iterator it = caps.begin ();
it != caps.end();
it++) {
- gchar *package_id_temp;
- gchar *package_name;
-
- /* do not emit packages with invalid names generated above via dependencies such as "rpmlib(PayloadFilesHavePrefix) <= 4.0-1"
- this was causing a crash - BNC# 372429
- Fixme - need to find if those dependencies should actually be in the list above and if so a better way to strip them out
- */
- package_name = g_strdup (it->second.name ().c_str());
- if (package_name == NULL || *package_name == '\0')
- {
- egg_debug ("Skipping emitting a non valid package");
- g_free (package_name);
+ // backup sanity check for no-solvables
+ if (! it->second.name ().c_str() ||
+ it->second.name ().c_str()[0] == '\0')
continue;
- }
- g_free (package_name);
-
- package_id_temp = pk_package_id_build (it->second.name ().c_str(),
- it->second.edition ().asString ().c_str(),
- it->second.arch ().c_str(),
- it->second.repository ().alias ().c_str());
zypp::PoolItem item = zypp::ResPool::instance ().find (it->second);
-
- if (it->second.isSystem ()) {
- pk_backend_package (backend,
- PK_INFO_ENUM_INSTALLED,
- package_id_temp,
- item->summary ().c_str());
- } else {
- pk_backend_package (backend,
- PK_INFO_ENUM_AVAILABLE,
- package_id_temp,
- item->summary ().c_str());
+ PkInfoEnum info = it->second.isSystem () ? PK_INFO_ENUM_INSTALLED : PK_INFO_ENUM_AVAILABLE;
+
+ egg_debug ("add dep - '%s' '%s' %d [%s]", it->second.name().c_str(),
+ info == PK_INFO_ENUM_INSTALLED ? "installed" : "available",
+ it->second.isSystem(),
+ zypp_filter_solvable (_filters, it->second) ? "don't add" : "add" );
+
+ if (!zypp_filter_solvable (_filters, it->second)) {
+ gchar *package_id_temp;
+
+ package_id_temp = pk_package_id_build (it->second.name ().c_str(),
+ it->second.edition ().asString ().c_str(),
+ it->second.arch ().c_str(),
+ it->second.repository ().alias ().c_str());
+ pk_backend_package (backend, info,
+ package_id_temp,
+ item->summary ().c_str());
+ g_free (package_id_temp);
}
- g_free (package_id_temp);
}
pk_backend_set_percentage (backend, 100);
@@ -641,6 +679,8 @@ check_for_self_update (PkBackend *backend, std::set<zypp::PoolItem> *candidates)
static gboolean
backend_get_updates_thread (PkBackend *backend)
{
+ PkBitfield _filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
+
pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
pk_backend_set_percentage (backend, 0);
@@ -695,13 +735,15 @@ backend_get_updates_thread (PkBackend *backend)
}
}
- gchar *package_id = zypp_build_package_id_from_resolvable (res->satSolvable ());
- pk_backend_package (backend, infoEnum, package_id, res->summary ().c_str ());
- // some package descriptions generate markup parse failures
- // causing the update to show empty package lines, comment for now
- // res->summary ().c_str ());
- // Test if this still happens!
- g_free (package_id);
+ if (!zypp_filter_solvable (_filters, res->satSolvable())) {
+ gchar *package_id = zypp_build_package_id_from_resolvable (res->satSolvable ());
+ pk_backend_package (backend, infoEnum, package_id, res->summary ().c_str ());
+ // some package descriptions generate markup parse failures
+ // causing the update to show empty package lines, comment for now
+ // res->summary ().c_str ());
+ // Test if this still happens!
+ g_free (package_id);
+ }
}
delete (candidates);
@@ -1067,8 +1109,10 @@ backend_install_packages_thread (PkBackend *backend)
pk_backend_set_percentage (backend, 40);
}
+ // Todo: ideally we should call pk_backend_package (...
+ // PK_INFO_ENUM_DOWNLOADING | INSTALLING) for each package.
if (!zypp_perform_execution (backend, INSTALL, FALSE)) {
- //reset the status of the marked packages
+ // reset the status of the marked packages
for (std::vector<zypp::PoolItem>::iterator it = items->begin (); it != items->end (); it++) {
it->statusReset ();
}
@@ -1210,8 +1254,7 @@ static gboolean
backend_resolve_thread (PkBackend *backend)
{
gchar **package_ids = pk_backend_get_strv (backend, "package_ids");
- PkBitfield filters_field = (PkBitfield) pk_backend_get_uint (backend, "filters");
- gchar *filters = pk_filter_bitfield_to_string(filters_field);
+ PkBitfield _filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
@@ -1226,6 +1269,11 @@ backend_resolve_thread (PkBackend *backend)
zypp::sat::Solvable package;
for (std::vector<zypp::sat::Solvable>::iterator it = v->begin ();
it != v->end (); it++) {
+ if (!it->isSystem() && pk_bitfield_contain (_filters, PK_FILTER_ENUM_INSTALLED))
+ continue;
+ if (it->isSystem() && pk_bitfield_contain (_filters, PK_FILTER_ENUM_NOT_INSTALLED))
+ continue;
+
const char *version = it->edition ().asString ().c_str ();
if (package == zypp::sat::Solvable::noSolvable) {
package = *it;
@@ -1238,23 +1286,16 @@ backend_resolve_thread (PkBackend *backend)
delete (v2);
if (package == NULL) {
- g_free (filters);
pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND, "couldn't find package");
pk_backend_finished (backend);
return FALSE;
}
- const gchar *package_id = zypp_build_package_id_from_resolvable (package);
+ if (zypp_filter_solvable (_filters, package))
+ continue;
- PkInfoEnum info = PK_INFO_ENUM_AVAILABLE;
- if( package.isSystem ()){
- info = PK_INFO_ENUM_INSTALLED;
- if (g_strrstr (filters, "~installed") != NULL)
- continue;
- }else{
- if (g_strrstr (filters, "~installed") == NULL)
- continue;
- }
+ const gchar *package_id = zypp_build_package_id_from_resolvable (package);
+ PkInfoEnum info = package.isSystem () ? PK_INFO_ENUM_INSTALLED : PK_INFO_ENUM_AVAILABLE;
pk_backend_package (backend,
info,
@@ -1262,7 +1303,6 @@ backend_resolve_thread (PkBackend *backend)
package.lookupStrAttribute (zypp::sat::SolvAttr::summary).c_str ());
}
- g_free (filters);
pk_backend_finished (backend);
return TRUE;
}
@@ -1281,13 +1321,11 @@ backend_find_packages_thread (PkBackend *backend)
{
gchar **values;
const gchar *search;
- PkBitfield filters;
guint mode;
//GList *list = NULL;
values = pk_backend_get_strv (backend, "search");
search = values[0]; //Fixme - support the possible multiple values (logical OR search)
- filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
mode = pk_backend_get_uint (backend, "mode");
pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
@@ -1335,7 +1373,7 @@ backend_find_packages_thread (PkBackend *backend)
if ( ! q.empty() ) {
std::copy( q.begin(), q.end(), std::back_inserter( v ) );
}
- zypp_emit_packages_in_list (backend, &v, filters);
+ zypp_emit_filtered_packages_in_list (backend, &v);
pk_backend_finished (backend);
return TRUE;
@@ -1366,11 +1404,9 @@ backend_search_group_thread (PkBackend *backend)
{
gchar **values;
const gchar *group;
- PkBitfield filters;
values = pk_backend_get_strv (backend, "search");
group = values[0]; //Fixme - add support for possible multiple values.
- filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
if (group == NULL) {
pk_backend_error_code (backend, PK_ERROR_ENUM_GROUP_NOT_FOUND, "Group is invalid.");
@@ -1385,7 +1421,7 @@ backend_search_group_thread (PkBackend *backend)
pk_backend_set_percentage (backend, 30);
- std::vector<zypp::sat::Solvable> *v = new std::vector<zypp::sat::Solvable> ();
+ std::vector<zypp::sat::Solvable> v;
PkGroupEnum pkGroup = pk_group_enum_from_string (group);
zypp::sat::LookupAttr look (zypp::sat::SolvAttr::group);
@@ -1393,13 +1429,12 @@ backend_search_group_thread (PkBackend *backend)
for (zypp::sat::LookupAttr::iterator it = look.begin (); it != look.end (); it++) {
PkGroupEnum rpmGroup = get_enum_group (it.asString ());
if (pkGroup == rpmGroup)
- v->push_back (it.inSolvable ());
+ v.push_back (it.inSolvable ());
}
pk_backend_set_percentage (backend, 70);
- zypp_emit_packages_in_list (backend ,v, filters);
- delete (v);
+ zypp_emit_filtered_packages_in_list (backend, &v);
pk_backend_set_percentage (backend, 100);
pk_backend_finished (backend);
@@ -1576,22 +1611,18 @@ backend_get_files(PkBackend *backend, gchar **package_ids)
static gboolean
backend_get_packages_thread (PkBackend *backend)
{
- PkBitfield filters;
- filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
-
pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
- std::vector<zypp::sat::Solvable> *v = new std::vector<zypp::sat::Solvable>;
+ std::vector<zypp::sat::Solvable> v;
zypp_build_pool (TRUE);
zypp::ResPool pool = zypp::ResPool::instance ();
for (zypp::ResPool::byKind_iterator it = pool.byKindBegin (zypp::ResKind::package); it != pool.byKindEnd (zypp::ResKind::package); it++) {
- v->push_back (it->satSolvable ());
+ v.push_back (it->satSolvable ());
}
- zypp_emit_packages_in_list (backend, v, filters);
+ zypp_emit_filtered_packages_in_list (backend, &v);
- delete (v);
pk_backend_finished (backend);
return TRUE;
}
@@ -1787,8 +1818,7 @@ backend_what_provides_thread (PkBackend *backend)
gchar **values = pk_backend_get_strv (backend, "search");
const gchar *search = values[0]; //Fixme - support possible multiple search values (logical OR)
PkProvidesEnum provides = (PkProvidesEnum) pk_backend_get_uint (backend, "provides");
- PkBitfield filters_field = (PkBitfield) pk_backend_get_uint (backend, "filters");
- gchar *filters = pk_filter_bitfield_to_string(filters_field);
+ PkBitfield _filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
zypp::Capability cap (search);
zypp::sat::WhatProvides prov (cap);
@@ -1804,7 +1834,6 @@ backend_what_provides_thread (PkBackend *backend)
egg_warning("Solver problem (This should never happen): '%s'", (*it)->description ().c_str ());
}
solver.setIgnoreAlreadyRecommended (FALSE);
- g_free (filters);
pk_backend_error_code (backend, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, "Resolution failed");
pk_backend_finished (backend);
return FALSE;
@@ -1822,10 +1851,7 @@ backend_what_provides_thread (PkBackend *backend)
hit = TRUE;
}
- if (hit) {
- if (g_strrstr(filters, "~installed") != NULL)
- continue;
-
+ if (hit && !zypp_filter_solvable (_filters, it->resolvable()->satSolvable())) {
gchar *package_id;
package_id = pk_package_id_build ( it->resolvable ()->name ().c_str(),
it->resolvable ()->edition ().asString ().c_str(),
@@ -1841,22 +1867,16 @@ backend_what_provides_thread (PkBackend *backend)
solver.setIgnoreAlreadyRecommended (FALSE);
}else{
for(zypp::sat::WhatProvides::const_iterator it = prov.begin (); it != prov.end (); it++) {
- gchar *package_id = zypp_build_package_id_from_resolvable (*it);
- PkInfoEnum info = PK_INFO_ENUM_AVAILABLE;
- if( it->isSystem ()){
- info = PK_INFO_ENUM_INSTALLED;
- if (g_strrstr (filters, "~installed") != NULL)
- continue;
- }else{
- if (g_strrstr (filters, "~installed") == NULL)
- continue;
- }
+ if (zypp_filter_solvable (_filters, *it))
+ continue;
+
+ gchar *package_id = zypp_build_package_id_from_resolvable (*it);
+ PkInfoEnum info = it->isSystem () ? PK_INFO_ENUM_INSTALLED : PK_INFO_ENUM_AVAILABLE;
pk_backend_package (backend, info, package_id, it->lookupStrAttribute (zypp::sat::SolvAttr::summary).c_str ());
}
}
- g_free (filters);
pk_backend_finished (backend);
return TRUE;
}
diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index ee478d5..34cc164 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -535,46 +535,56 @@ system_and_package_are_x86 (zypp::sat::Solvable item)
!strcmp (zypp::ZConfig::defaultSystemArchitecture ().asString().c_str(), "i686"));
}
+/* should we filter out this package ? */
+gboolean
+zypp_filter_solvable (PkBitfield filters, const zypp::sat::Solvable &item)
+{
+ // iterate through the given filters
+ if (!filters)
+ return FALSE;
+
+ for (guint i = 0; i < PK_FILTER_ENUM_LAST; i++) {
+ if ((filters & pk_bitfield_value (i)) == 0)
+ continue;
+ if (i == PK_FILTER_ENUM_INSTALLED && !(item.isSystem ()))
+ return TRUE;
+ if (i == PK_FILTER_ENUM_NOT_INSTALLED && item.isSystem ())
+ return TRUE;
+ if (i == PK_FILTER_ENUM_ARCH) {
+ if (item.arch () != zypp::ZConfig::defaultSystemArchitecture () &&
+ item.arch () != zypp::Arch_noarch &&
+ ! system_and_package_are_x86 (item))
+ return TRUE;
+ }
+ if (i == PK_FILTER_ENUM_NOT_ARCH) {
+ if (item.arch () == zypp::ZConfig::defaultSystemArchitecture () ||
+ system_and_package_are_x86 (item))
+ return TRUE;
+ }
+ if (i == PK_FILTER_ENUM_SOURCE && !(zypp::isKind<zypp::SrcPackage>(item))) {
+ return TRUE;
+ }
+ if (i == PK_FILTER_ENUM_NOT_SOURCE && zypp::isKind<zypp::SrcPackage>(item)) {
+ return TRUE;
+ }
+ //const gchar * myarch = zypp::ZConfig::defaultSystemArchitecture().asString().c_str();
+ //egg_debug ("my default arch is %s", myarch);
+ }
+
+ return FALSE;
+}
+
void
-zypp_emit_packages_in_list (PkBackend *backend, std::vector<zypp::sat::Solvable> *v, PkBitfield filters)
+zypp_emit_filtered_packages_in_list (PkBackend *backend, std::vector<zypp::sat::Solvable> *v)
{
+ PkBitfield filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
+
for (std::vector<zypp::sat::Solvable>::iterator it = v->begin ();
it != v->end (); it++) {
gchar *package_id = zypp_build_package_id_from_resolvable (*it);
- // iterate through the given filters
- if (filters != 0){
- gboolean print = TRUE;
- for (guint i = 0; i < PK_FILTER_ENUM_LAST; i++) {
- if ((filters & pk_bitfield_value (i)) == 0)
- continue;
- if (i == PK_FILTER_ENUM_INSTALLED && !(it->isSystem ()))
- print = FALSE;
- if (i == PK_FILTER_ENUM_NOT_INSTALLED && it->isSystem ())
- print = FALSE;;
- if (i == PK_FILTER_ENUM_ARCH) {
- if (it->arch () != zypp::ZConfig::defaultSystemArchitecture () &&
- it->arch () != zypp::Arch_noarch &&
- ! system_and_package_are_x86 (*it))
- print = FALSE;
- }
- if (i == PK_FILTER_ENUM_NOT_ARCH) {
- if (it->arch () == zypp::ZConfig::defaultSystemArchitecture () ||
- system_and_package_are_x86 (*it))
- print = FALSE;
- }
- if (i == PK_FILTER_ENUM_SOURCE && !(zypp::isKind<zypp::SrcPackage>(*it))) {
- print = FALSE;
- }
- if (i == PK_FILTER_ENUM_NOT_SOURCE && zypp::isKind<zypp::SrcPackage>(*it)) {
- print = FALSE;
- }
- //const gchar * myarch = zypp::ZConfig::defaultSystemArchitecture().asString().c_str();
- //egg_debug ("my default arch is %s", myarch);
- }
- if (!print)
- continue;
- }
+ if (zypp_filter_solvable (filters, *it))
+ continue;
pk_backend_package (backend,
it->isSystem() == true ?
@@ -777,8 +787,9 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
// Perform the installation
zypp::ZYppCommitPolicy policy;
- policy.restrictToMedia (0); // 0 - install all packages regardless to media
- policy.downloadMode (zypp::DownloadInHeaps);
+ policy.restrictToMedia (0); // 0 == install all packages regardless to media
+ policy.downloadMode (zypp::DownloadInHeaps);
+ policy.syncPoolAfterCommit (true);
zypp::ZYppCommitResult result = zypp->commit (policy);
diff --git a/backends/zypp/zypp-utils.h b/backends/zypp/zypp-utils.h
index ea75c57..ec38ab9 100644
--- a/backends/zypp/zypp-utils.h
+++ b/backends/zypp/zypp-utils.h
@@ -182,7 +182,15 @@ gboolean zypp_get_restart (PkRestartEnum &restart, zypp::Patch::constPtr patch);
*/
gboolean zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force);
-void zypp_emit_packages_in_list (PkBackend *backend, std::vector<zypp::sat::Solvable> *v, PkBitfield filters);
+/**
+ * should we omit a solvable from a result because of filtering ?
+ */
+gboolean zypp_filter_solvable (PkBitfield filters, const zypp::sat::Solvable &item);
+
+/**
+ * apply filters to a list.
+ */
+void zypp_emit_filtered_packages_in_list (PkBackend *backend, std::vector<zypp::sat::Solvable> *v);
/**
* convert a std::set<zypp::sat::Solvable to gchar ** array
commit ee4a1d13df5b6ca3faaf0c6a2e14a11caa98517e
Author: Fabio Erculiani <lxnay at sabayon.org>
Date: Mon May 3 18:24:35 2010 +0200
entropy: catch DependenciesNotRemovable exception during reverse dependencies calculation
diff --git a/backends/entropy/entropyBackend.py b/backends/entropy/entropyBackend.py
index a89e2ea..b81e440 100755
--- a/backends/entropy/entropyBackend.py
+++ b/backends/entropy/entropyBackend.py
@@ -60,6 +60,10 @@ from entropy.client.interfaces import Client
from entropy.core.settings.base import SystemSettings
from entropy.misc import LogFile
from entropy.exceptions import SystemDatabaseError
+try:
+ from entropy.exceptions import DependenciesNotRemovable
+except ImportError:
+ DependenciesNotRemovable = Exception
from entropy.fetchers import UrlFetcher
import entropy.tools
@@ -416,7 +420,17 @@ class PackageKitEntropyMixin(object):
matches = [pkg_id for pkg_id, c_repo, pk_pkg in pkgs]
# calculate deps
- run_queue = self._entropy.get_removal_queue(matches)
+ try:
+ run_queue = self._entropy.get_removal_queue(matches)
+ except DependenciesNotRemovable as err:
+ c_repo = self._entropy.installed_repository()
+ vpkgs = getattr(err, 'value', set())
+ vit_pkgs = ', '.join(sorted([c_repo.retrieveAtom(x[0]) for x in vpkgs],
+ key = lambda x: c_repo.retrieveAtom(x)))
+ self.error(ERROR_DEP_RESOLUTION_FAILED,
+ "Could not perform remove operation, these packages are vital: %s" % (vit_pkgs,))
+ return
+
added_pkgs = [x for x in run_queue if x not in matches]
# if there are required packages, allowdep must be on
commit 6bf9b8676548acdeb4657a751a9e761f8a00dc88
Author: ruigo <ruigo at fedoraproject.org>
Date: Fri Apr 30 17:15:09 2010 +0000
l10n: Updates to Portuguese (pt) translation
Transmitted-via: Transifex (translate.fedoraproject.org)
diff --git a/po/pt.po b/po/pt.po
index 7bc9d15..ee87497 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -3,10 +3,10 @@ msgid ""
msgstr ""
"Project-Id-Version: packagekit\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-14 19:46+0000\n"
-"PO-Revision-Date: 2010-04-14 22:07+0100\n"
+"POT-Creation-Date: 2010-04-30 14:41+0000\n"
+"PO-Revision-Date: 2010-04-30 18:14+0100\n"
"Last-Translator: Rui Gouveia <rui.gouveia at gmail.com>\n"
-"Language-Team: trans-pt at fedoraproject.org\n"
+"Language-Team: fedora-trans-pt at redhat.com\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -383,160 +383,170 @@ msgstr ""
"Não foi possÃvel obter a hora da última vez que esta acção foi concluÃda"
#. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:1267 ../client/pk-monitor.c:326
+#: ../client/pk-console.c:1268 ../client/pk-monitor.c:326
msgid "Show the program version and exit"
msgstr "Mostrar a versão da aplicação e terminar"
#. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1270
+#: ../client/pk-console.c:1271
msgid "Set the filter, e.g. installed"
msgstr "Configurar o filtro, exemplo, instalado"
+#. TRANSLATORS: command line argument, use a non-standard install prefix
+#: ../client/pk-console.c:1274
+msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
+msgstr "Defina a raiz da instalação, por exemplo, '/' ou '/mnt/ltsp'"
+
#. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1273
+#: ../client/pk-console.c:1277
msgid "Exit without waiting for actions to complete"
msgstr "Sair sem esperar que as acções completem"
#. command line argument, do we ask questions
-#: ../client/pk-console.c:1276
+#: ../client/pk-console.c:1280
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:527
msgid "Install the packages without asking for confirmation"
msgstr "Instalar os pacotes sem pedir por confirmação"
#. TRANSLATORS: command line argument, this command is not a priority
-#: ../client/pk-console.c:1279
+#: ../client/pk-console.c:1283
msgid "Run the command using idle network bandwidth and also using less power"
msgstr ""
"Executar o comando utilizando perÃodos de inactividade da rede e também "
"utilizando menos energia"
#. TRANSLATORS: command line argument, just output without fancy formatting
-#: ../client/pk-console.c:1282
+#: ../client/pk-console.c:1286
msgid ""
"Print to screen a machine readable output, rather than using animated widgets"
msgstr ""
"Escrever no ecrã o resultado legÃvel, ao invés de utilizar objectos animados"
#. TRANSLATORS: we failed to contact the daemon
-#: ../client/pk-console.c:1304
+#: ../client/pk-console.c:1308
msgid "Failed to contact PackageKit"
msgstr "Falhou o contacto com o PackageKit"
#. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1365
+#: ../client/pk-console.c:1369
msgid "The proxy could not be set"
msgstr "Não foi possÃvel definir o proxy"
#. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1377
+#: ../client/pk-console.c:1381
+msgid "The install root could not be set"
+msgstr "Não foi possÃvel definir a raiz da instalação"
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1393
msgid "The filter specified was invalid"
msgstr "O filtro especificado era inválido"
#. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1396
+#: ../client/pk-console.c:1412
msgid "A search type is required, e.g. name"
msgstr "Um tipo de pesquisa é necessário. Por exemplo, nome"
#. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1403 ../client/pk-console.c:1415
-#: ../client/pk-console.c:1427 ../client/pk-console.c:1439
+#: ../client/pk-console.c:1419 ../client/pk-console.c:1431
+#: ../client/pk-console.c:1443 ../client/pk-console.c:1455
msgid "A search term is required"
msgstr "Um termo de pesquisa é necessário"
#. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1449
+#: ../client/pk-console.c:1465
msgid "Invalid search type"
msgstr "Tipo de pesquisa inválida"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1455
+#: ../client/pk-console.c:1471
msgid "A package name to install is required"
msgstr "à necessário indicar um nome de pacote a instalar"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1464
+#: ../client/pk-console.c:1480
msgid "A filename to install is required"
msgstr "à necessário um nome de ficheiro a instalar"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1476
+#: ../client/pk-console.c:1492
msgid "A type, key_id and package_id are required"
msgstr "São necessários um tipo, id de chave e id de pacote"
#. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:1487
+#: ../client/pk-console.c:1503
msgid "A package name to remove is required"
msgstr "à necessário um nome de pacote para remover"
#. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:1496
+#: ../client/pk-console.c:1512
msgid "A destination directory and the package names to download are required"
msgstr ""
"São necessários uma directoria de destino assim como os nomes dos pacotes a "
"transferir"
#. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:1503
+#: ../client/pk-console.c:1519
msgid "Directory not found"
msgstr "Directório não encontrado"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1512
+#: ../client/pk-console.c:1528
msgid "A licence identifier (eula-id) is required"
msgstr "à necessário um identificador de licença (eula-id)"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1523
+#: ../client/pk-console.c:1539
msgid "A transaction identifier (tid) is required"
msgstr "à necessário um identificador de transacção (tid)"
#. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:1544
+#: ../client/pk-console.c:1560
msgid "A package name to resolve is required"
msgstr "à necessário indicar um nome de pacote"
#. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:1555 ../client/pk-console.c:1566
+#: ../client/pk-console.c:1571 ../client/pk-console.c:1582
msgid "A repository name is required"
msgstr "à obrigatório um nome de repositório"
#. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:1577
+#: ../client/pk-console.c:1593
msgid "A repo name, parameter and value are required"
msgstr "à necessário indicar um repositório, parâmetro e valor"
#. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:1594
+#: ../client/pk-console.c:1610
msgid "An action, e.g. 'update-system' is required"
msgstr "à necessária uma acção, por exemplo 'update-system'"
#. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:1601
+#: ../client/pk-console.c:1617
msgid "A correct role is required"
msgstr "à necessária uma função correcta"
#. TRANSLATORS: The user did not provide a package name
#. TRANSLATORS: This is when the user fails to supply the package name
-#: ../client/pk-console.c:1611 ../client/pk-console.c:1626
-#: ../client/pk-console.c:1635 ../client/pk-console.c:1655
-#: ../client/pk-console.c:1664 ../client/pk-generate-pack.c:316
+#: ../client/pk-console.c:1627 ../client/pk-console.c:1642
+#: ../client/pk-console.c:1651 ../client/pk-console.c:1671
+#: ../client/pk-console.c:1680 ../client/pk-generate-pack.c:316
msgid "A package name is required"
msgstr "à obrigatório um nome de pacote"
#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:1644
+#: ../client/pk-console.c:1660
msgid "A package provide string is required"
msgstr ""
"à necessário especificar a string que define o que o pacote disponibiliza"
#. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:1724
+#: ../client/pk-console.c:1740
#, c-format
msgid "Option '%s' is not supported"
msgstr "A opção '%s' não é suportada"
#. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:1734
+#: ../client/pk-console.c:1750
msgid "Command failed"
msgstr "Comando falhou"
@@ -1735,39 +1745,47 @@ msgstr "Autenticação é necessária para alterar parâmetros do código fonte"
#: ../policy/org.freedesktop.packagekit.policy.in.h:11
msgid ""
+"Authentication is required to change the location used to decompress "
+"packages"
+msgstr ""
+"A autenticação é necessária para alterar a localização utilizada para "
+"descomprimir pacotes"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:12
+msgid ""
"Authentication is required to consider a key used for signing packages as "
"trusted"
msgstr ""
"Autenticação é necessária para considerar segura uma chave utilizada para "
"assinar pacotes"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:12
+#: ../policy/org.freedesktop.packagekit.policy.in.h:13
msgid "Authentication is required to install a signed package"
msgstr "Autenticação é necessária para instalar um pacote assinado"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:13
+#: ../policy/org.freedesktop.packagekit.policy.in.h:14
msgid "Authentication is required to install an untrusted package"
msgstr "Autenticação é necessária para instalar um pacote não confiável"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:14
+#: ../policy/org.freedesktop.packagekit.policy.in.h:15
msgid "Authentication is required to refresh the system sources"
msgstr "Autenticação é necessária para actualizar as fontes do sistema"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:15
+#: ../policy/org.freedesktop.packagekit.policy.in.h:16
msgid "Authentication is required to reload the device with a new driver"
msgstr ""
"Autenticação é necessária para recarregar o dispositivo com o novo "
"controlador"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:16
+#: ../policy/org.freedesktop.packagekit.policy.in.h:17
msgid "Authentication is required to remove packages"
msgstr "Autenticação é necessária para remover pacotes"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:17
+#: ../policy/org.freedesktop.packagekit.policy.in.h:18
msgid "Authentication is required to rollback a transaction"
msgstr "Autenticação é necessária para voltar atrás uma transacção"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:18
+#: ../policy/org.freedesktop.packagekit.policy.in.h:19
msgid ""
"Authentication is required to set the network proxy used for downloading "
"packages"
@@ -1775,7 +1793,7 @@ msgstr ""
"Autenticação é necessária para configurar o proxy de rede utilizado para "
"transferir pacotes"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:19
+#: ../policy/org.freedesktop.packagekit.policy.in.h:20
msgid "Authentication is required to update packages"
msgstr "Autenticação é necessária para actualizar pacotes"
@@ -1784,16 +1802,26 @@ msgstr "Autenticação é necessária para actualizar pacotes"
#. authentication, but a different user id needs the admin password
#. to cancel another users task.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:25
+#: ../policy/org.freedesktop.packagekit.policy.in.h:26
msgid "Cancel foreign task"
msgstr "Cancelar tarefa externa"
#. SECURITY:
+#. - This is used when users want to install to a different prefix, for
+#. instance to a LTSP image or a virtual machine.
+#. - This could be used to overwrite files not owned by the user using
+#. a carefully created package file.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:33
+msgid "Change location that packages are installed"
+msgstr "Mudar a localização onde os pacotes são instalados"
+
+#. SECURITY:
#. - Normal users require admin authentication to enable or disable
#. software sources as this can be used to enable new updates or
#. install different versions of software.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:31
+#: ../policy/org.freedesktop.packagekit.policy.in.h:39
msgid "Change software source parameters"
msgstr "Alterar parâmetros do código fonte"
@@ -1803,7 +1831,7 @@ msgstr "Alterar parâmetros do código fonte"
#. - Paranoid users (or parents!) can change this to 'auth_admin' or
#. 'auth_admin_keep'.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:38
+#: ../policy/org.freedesktop.packagekit.policy.in.h:46
msgid "Install signed package"
msgstr "Instalar pacote assinado"
@@ -1813,7 +1841,7 @@ msgstr "Instalar pacote assinado"
#. password would be a massive security hole.
#. - This is not retained as each package should be authenticated.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:45
+#: ../policy/org.freedesktop.packagekit.policy.in.h:53
msgid "Install untrusted local file"
msgstr "Instalar ficheiro local não confiável"
@@ -1821,7 +1849,7 @@ msgstr "Instalar ficheiro local não confiável"
#. - Normal users do not require admin authentication to refresh the
#. cache, as this doesn't actually install or remove software.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:50
+#: ../policy/org.freedesktop.packagekit.policy.in.h:58
msgid "Refresh system sources"
msgstr "Actualizar fontes do sistema"
@@ -1832,7 +1860,7 @@ msgstr "Actualizar fontes do sistema"
#. try to rebind drivers in use, for instance security authentication
#. devices.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:58
+#: ../policy/org.freedesktop.packagekit.policy.in.h:66
msgid "Reload a device"
msgstr "Recarregar dispositivo"
@@ -1845,7 +1873,7 @@ msgstr "Recarregar dispositivo"
#. be removed. If this is not possible, change this authentication to
#. 'auth_admin'.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:68
+#: ../policy/org.freedesktop.packagekit.policy.in.h:76
msgid "Remove package"
msgstr "Remover pacote"
@@ -1854,7 +1882,7 @@ msgstr "Remover pacote"
#. as this will change a large number of packages, and could expose the
#. system to previously patched security vulnerabilities.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:74
+#: ../policy/org.freedesktop.packagekit.policy.in.h:82
msgid "Rollback to a previous transaction"
msgstr "Voltar a uma transacção anterior"
@@ -1862,7 +1890,7 @@ msgstr "Voltar a uma transacção anterior"
#. - Normal users do not require admin authentication to set the proxy
#. used for downloading packages.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:79
+#: ../policy/org.freedesktop.packagekit.policy.in.h:87
msgid "Set network proxy"
msgstr "Configurar o proxy da rede"
@@ -1872,7 +1900,7 @@ msgstr "Configurar o proxy da rede"
#. without a secure authentication.
#. - This is not kept as each package should be authenticated.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:86
+#: ../policy/org.freedesktop.packagekit.policy.in.h:94
msgid "Trust a key used for signing packages"
msgstr "Confiar numa chave utilizada para assinar pacotes"
@@ -1883,7 +1911,7 @@ msgstr "Confiar numa chave utilizada para assinar pacotes"
#. - Changing this to anything other than 'yes' will break unattended
#. updates.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:94
+#: ../policy/org.freedesktop.packagekit.policy.in.h:102
msgid "Update packages"
msgstr "Actualizar pacotes"
commit c25e4244c72ca73ea9c2beee31ed4b5b562c2e81
Author: warrink <warrink at fedoraproject.org>
Date: Fri Apr 30 10:45:26 2010 +0000
l10n: Updates to Dutch (Flemish) (nl) translation
Transmitted-via: Transifex (translate.fedoraproject.org)
diff --git a/po/nl.po b/po/nl.po
index 4e823bd..29df075 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: packagekit.master\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-04 08:18+0000\n"
-"PO-Revision-Date: 2010-04-04 12:13+0200\n"
+"POT-Creation-Date: 2010-04-30 09:50+0000\n"
+"PO-Revision-Date: 2010-04-30 12:45+0200\n"
"Last-Translator: Geert Warrink <geert.warrink at onsnet.nu>\n"
"Language-Team: nl <fedora-trans-list at redhat.com>\n"
"MIME-Version: 1.0\n"
@@ -381,35 +381,40 @@ msgstr ""
"Verkrijgen van de tijd tussen laatste actie en deze actie is niet gelukt"
#. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:1267 ../client/pk-monitor.c:326
+#: ../client/pk-console.c:1268 ../client/pk-monitor.c:326
msgid "Show the program version and exit"
msgstr "Programmaversie tonen en sluiten"
#. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1270
+#: ../client/pk-console.c:1271
msgid "Set the filter, e.g. installed"
msgstr "Filter instellen, bijvoorbeeld geïnstalleerd"
+#. TRANSLATORS: command line argument, use a non-standard install prefix
+#: ../client/pk-console.c:1274
+msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
+msgstr "Stel de installeer root in, b.v. '/' of '/mnt/ltsp'"
+
#. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1273
+#: ../client/pk-console.c:1277
msgid "Exit without waiting for actions to complete"
msgstr "Afsluiten zonder te wachten tot de transacties zijn afgerond"
#. command line argument, do we ask questions
-#: ../client/pk-console.c:1276
+#: ../client/pk-console.c:1280
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:527
msgid "Install the packages without asking for confirmation"
msgstr "Installeer het pakket zonder goedkeuring te vragen"
#. TRANSLATORS: command line argument, this command is not a priority
-#: ../client/pk-console.c:1279
+#: ../client/pk-console.c:1283
msgid "Run the command using idle network bandwidth and also using less power"
msgstr ""
"Voer het commando uit met gebruik van onbenutte netwerk bandbreedte en ook "
"om minder vermogen te gebruiken"
#. TRANSLATORS: command line argument, just output without fancy formatting
-#: ../client/pk-console.c:1282
+#: ../client/pk-console.c:1286
msgid ""
"Print to screen a machine readable output, rather than using animated widgets"
msgstr ""
@@ -417,122 +422,127 @@ msgstr ""
"widgets te gebruiken"
#. TRANSLATORS: we failed to contact the daemon
-#: ../client/pk-console.c:1304
+#: ../client/pk-console.c:1308
msgid "Failed to contact PackageKit"
msgstr "Contact met PackageKit krijgen mislukte."
#. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1365
+#: ../client/pk-console.c:1369
msgid "The proxy could not be set"
msgstr "De proxy kon niet ingesteld worden"
#. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1377
+#: ../client/pk-console.c:1381
+msgid "The install root could not be set"
+msgstr "De installeer root kon niet ingesteld worden"
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1393
msgid "The filter specified was invalid"
msgstr "De opgegeven filter was ongeldig"
#. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1396
+#: ../client/pk-console.c:1412
msgid "A search type is required, e.g. name"
msgstr "Een zoektype is verplicht, b.v. naam"
#. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1403 ../client/pk-console.c:1415
-#: ../client/pk-console.c:1427 ../client/pk-console.c:1439
+#: ../client/pk-console.c:1419 ../client/pk-console.c:1431
+#: ../client/pk-console.c:1443 ../client/pk-console.c:1455
msgid "A search term is required"
msgstr "Een zoekterm is vereist"
#. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1449
+#: ../client/pk-console.c:1465
msgid "Invalid search type"
msgstr "Ongeldig zoektype"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1455
+#: ../client/pk-console.c:1471
msgid "A package name to install is required"
msgstr "Een pakketnaam om te installeren is vereist"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1464
+#: ../client/pk-console.c:1480
msgid "A filename to install is required"
msgstr "Een bestandsnaam om te installeren is vereist"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1476
+#: ../client/pk-console.c:1492
msgid "A type, key_id and package_id are required"
msgstr "Er moet een type worden opgegeven, key_id of package_id"
#. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:1487
+#: ../client/pk-console.c:1503
msgid "A package name to remove is required"
msgstr "Een te verwijderen pakketnaam is vereist"
#. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:1496
+#: ../client/pk-console.c:1512
msgid "A destination directory and the package names to download are required"
msgstr "Een doelmap en dan de namen van te downloaden pakketten zijn vereist"
#. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:1503
+#: ../client/pk-console.c:1519
msgid "Directory not found"
msgstr "Map niet gevonden"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1512
+#: ../client/pk-console.c:1528
msgid "A licence identifier (eula-id) is required"
msgstr "Een licentie indentificatie (eula-id) is vereis"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1523
+#: ../client/pk-console.c:1539
msgid "A transaction identifier (tid) is required"
msgstr "Een transactie indentificatie (tid) is vereist"
#. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:1544
+#: ../client/pk-console.c:1560
msgid "A package name to resolve is required"
msgstr "Een pakketnaam om te gebruiken is vereist"
#. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:1555 ../client/pk-console.c:1566
+#: ../client/pk-console.c:1571 ../client/pk-console.c:1582
msgid "A repository name is required"
msgstr "Een naam van een repository is vereist"
#. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:1577
+#: ../client/pk-console.c:1593
msgid "A repo name, parameter and value are required"
msgstr "Een repo naam, parameter en waarde zijn vereist"
#. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:1594
+#: ../client/pk-console.c:1610
msgid "An action, e.g. 'update-system' is required"
msgstr "Een actie, b.v. 'update-system' is vereist"
#. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:1601
+#: ../client/pk-console.c:1617
msgid "A correct role is required"
msgstr "Een correcte rol is vereist"
#. TRANSLATORS: The user did not provide a package name
#. TRANSLATORS: This is when the user fails to supply the package name
-#: ../client/pk-console.c:1611 ../client/pk-console.c:1626
-#: ../client/pk-console.c:1635 ../client/pk-console.c:1655
-#: ../client/pk-console.c:1664 ../client/pk-generate-pack.c:316
+#: ../client/pk-console.c:1627 ../client/pk-console.c:1642
+#: ../client/pk-console.c:1651 ../client/pk-console.c:1671
+#: ../client/pk-console.c:1680 ../client/pk-generate-pack.c:316
msgid "A package name is required"
msgstr "Een pakketnaam is vereist"
#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:1644
+#: ../client/pk-console.c:1660
msgid "A package provide string is required"
msgstr "Een pakket geleverde string is vereist"
#. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:1724
+#: ../client/pk-console.c:1740
#, c-format
msgid "Option '%s' is not supported"
msgstr "Optie '%s' wordt niet ondersteund"
#. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:1734
+#: ../client/pk-console.c:1750
msgid "Command failed"
msgstr "Opdracht mislukt"
@@ -1731,38 +1741,45 @@ msgstr ""
#: ../policy/org.freedesktop.packagekit.policy.in.h:11
msgid ""
+"Authentication is required to change the location used to decompress packages"
+msgstr ""
+"Authenticatie is vereist om de om de locatie waar pakketten gedecomprimeerd "
+"worden te veranderen"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:12
+msgid ""
"Authentication is required to consider a key used for signing packages as "
"trusted"
msgstr ""
"Authenticatie is vereist om de sleutel te overleggen die gebruikt wordt om "
"een pakket als vertrouwt te tekenen "
-#: ../policy/org.freedesktop.packagekit.policy.in.h:12
+#: ../policy/org.freedesktop.packagekit.policy.in.h:13
msgid "Authentication is required to install a signed package"
msgstr "Authenticatie is vereist om een getekend pakket te installeren"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:13
+#: ../policy/org.freedesktop.packagekit.policy.in.h:14
msgid "Authentication is required to install an untrusted package"
msgstr "Authenticatie is vereist om een untrused pakket te installeren"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:14
+#: ../policy/org.freedesktop.packagekit.policy.in.h:15
msgid "Authentication is required to refresh the system sources"
msgstr "Authenticatie is vereist om de systeembronnen te vernieuwen"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:15
+#: ../policy/org.freedesktop.packagekit.policy.in.h:16
msgid "Authentication is required to reload the device with a new driver"
msgstr ""
"Authenticatie is vereist om het device te herladen met een nieuwe driver"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:16
+#: ../policy/org.freedesktop.packagekit.policy.in.h:17
msgid "Authentication is required to remove packages"
msgstr "Authenticatie is vereist om pakketen te verwijderen"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:17
+#: ../policy/org.freedesktop.packagekit.policy.in.h:18
msgid "Authentication is required to rollback a transaction"
msgstr "Authenticatie is vereist om een transactie terug te draaien"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:18
+#: ../policy/org.freedesktop.packagekit.policy.in.h:19
msgid ""
"Authentication is required to set the network proxy used for downloading "
"packages"
@@ -1770,7 +1787,7 @@ msgstr ""
"Authenticatie is vereist om de netwerkproxy die gebruikt wordt om pakketten "
"te installeren in te stellen "
-#: ../policy/org.freedesktop.packagekit.policy.in.h:19
+#: ../policy/org.freedesktop.packagekit.policy.in.h:20
msgid "Authentication is required to update packages"
msgstr "Authenticatie is vereist om pakketen bij te werken"
@@ -1779,16 +1796,26 @@ msgstr "Authenticatie is vereist om pakketen bij te werken"
#. authentication, but a different user id needs the admin password
#. to cancel another users task.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:25
+#: ../policy/org.freedesktop.packagekit.policy.in.h:26
msgid "Cancel foreign task"
msgstr "Breek uitheemse taak af"
#. SECURITY:
+#. - This is used when users want to install to a different prefix, for
+#. instance to a LTSP image or a virtual machine.
+#. - This could be used to overwrite files not owned by the user using
+#. a carefully created package file.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:33
+msgid "Change location that packages are installed"
+msgstr "Verander de locatie waar pakketten geïnstalleerd worden"
+
+#. SECURITY:
#. - Normal users require admin authentication to enable or disable
#. software sources as this can be used to enable new updates or
#. install different versions of software.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:31
+#: ../policy/org.freedesktop.packagekit.policy.in.h:39
msgid "Change software source parameters"
msgstr "Parameters van de softwarebronnen wijzigen"
@@ -1798,7 +1825,7 @@ msgstr "Parameters van de softwarebronnen wijzigen"
#. - Paranoid users (or parents!) can change this to 'auth_admin' or
#. 'auth_admin_keep'.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:38
+#: ../policy/org.freedesktop.packagekit.policy.in.h:46
msgid "Install signed package"
msgstr "Getekend pakket installeren"
@@ -1808,7 +1835,7 @@ msgstr "Getekend pakket installeren"
#. password would be a massive security hole.
#. - This is not retained as each package should be authenticated.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:45
+#: ../policy/org.freedesktop.packagekit.policy.in.h:53
msgid "Install untrusted local file"
msgstr "Lokaal untrusted bestand installeren"
@@ -1816,7 +1843,7 @@ msgstr "Lokaal untrusted bestand installeren"
#. - Normal users do not require admin authentication to refresh the
#. cache, as this doesn't actually install or remove software.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:50
+#: ../policy/org.freedesktop.packagekit.policy.in.h:58
msgid "Refresh system sources"
msgstr "Herlaad systeembronnen"
@@ -1827,7 +1854,7 @@ msgstr "Herlaad systeembronnen"
#. try to rebind drivers in use, for instance security authentication
#. devices.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:58
+#: ../policy/org.freedesktop.packagekit.policy.in.h:66
msgid "Reload a device"
msgstr "Herlaad een device"
@@ -1840,7 +1867,7 @@ msgstr "Herlaad een device"
#. be removed. If this is not possible, change this authentication to
#. 'auth_admin'.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:68
+#: ../policy/org.freedesktop.packagekit.policy.in.h:76
msgid "Remove package"
msgstr "Pakket verwijderen"
@@ -1849,7 +1876,7 @@ msgstr "Pakket verwijderen"
#. as this will change a large number of packages, and could expose the
#. system to previously patched security vulnerabilities.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:74
+#: ../policy/org.freedesktop.packagekit.policy.in.h:82
msgid "Rollback to a previous transaction"
msgstr "Terugdraaien tot een voorgaande transactie"
@@ -1857,7 +1884,7 @@ msgstr "Terugdraaien tot een voorgaande transactie"
#. - Normal users do not require admin authentication to set the proxy
#. used for downloading packages.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:79
+#: ../policy/org.freedesktop.packagekit.policy.in.h:87
msgid "Set network proxy"
msgstr "Stel netwerkproxy in"
@@ -1867,7 +1894,7 @@ msgstr "Stel netwerkproxy in"
#. without a secure authentication.
#. - This is not kept as each package should be authenticated.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:86
+#: ../policy/org.freedesktop.packagekit.policy.in.h:94
msgid "Trust a key used for signing packages"
msgstr "Vertrouw een sleutel die gebruikt wordt voor het tekenen van pakketten"
@@ -1878,7 +1905,7 @@ msgstr "Vertrouw een sleutel die gebruikt wordt voor het tekenen van pakketten"
#. - Changing this to anything other than 'yes' will break unattended
#. updates.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:94
+#: ../policy/org.freedesktop.packagekit.policy.in.h:102
msgid "Update packages"
msgstr "Pakketten bijwerken"
commit ee5669cbdd1cf9d4116cf71a063fd77036ee78a1
Author: kmilos <kmilos at fedoraproject.org>
Date: Thu Apr 29 20:26:52 2010 +0000
l10n: Updates to Serbian (Latin) (sr at latin) translation
Transmitted-via: Transifex (translate.fedoraproject.org)
diff --git a/po/sr at latin.po b/po/sr at latin.po
index 49b7a5d..c8fb0be 100644
--- a/po/sr at latin.po
+++ b/po/sr at latin.po
@@ -7,12 +7,13 @@
#
# Igor Miletic (Igor MiletiÄ) <grejigl-gnomeprevod at yahoo.ca>, 2009.
# MiloÅ¡ KomarÄeviÄ <kmilos at gmail.com>, 2009.
+#
msgid ""
msgstr ""
"Project-Id-Version: PackageKit\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-07 19:20+0000\n"
-"PO-Revision-Date: 2010-04-07 23:02-0000\n"
+"POT-Creation-Date: 2010-04-29 19:54+0000\n"
+"PO-Revision-Date: 2010-04-29 21:19+0100\n"
"Last-Translator: MiloÅ¡ KomarÄeviÄ <kmilos at gmail.com>\n"
"Language-Team: Serbian <trans-sr at lists.fedoraproject.org>\n"
"MIME-Version: 1.0\n"
@@ -387,157 +388,167 @@ msgid "Failed to get the time since this action was last completed"
msgstr "Datum poslednjeg izvrÅ¡avanja ove radnje nije pronaÄen"
#. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:1267 ../client/pk-monitor.c:326
+#: ../client/pk-console.c:1268 ../client/pk-monitor.c:326
msgid "Show the program version and exit"
msgstr "Prikaži verziju programa i završi rad"
#. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1270
+#: ../client/pk-console.c:1271
msgid "Set the filter, e.g. installed"
msgstr "Namesti filter, npr. instalirani"
+#. TRANSLATORS: command line argument, use a non-standard install prefix
+#: ../client/pk-console.c:1274
+msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
+msgstr "Postavi koren instalacije, npr. â/â ili â/mnt/ltspâ"
+
#. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1273
+#: ../client/pk-console.c:1277
msgid "Exit without waiting for actions to complete"
msgstr "ZavrÅ¡i rad bez Äekanja da se poslovi zavrÅ¡e"
#. command line argument, do we ask questions
-#: ../client/pk-console.c:1276
+#: ../client/pk-console.c:1280
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:527
msgid "Install the packages without asking for confirmation"
msgstr "Instaliraj pakete bez pitanja za potvrdu"
#. TRANSLATORS: command line argument, this command is not a priority
-#: ../client/pk-console.c:1279
+#: ../client/pk-console.c:1283
msgid "Run the command using idle network bandwidth and also using less power"
msgstr ""
"IzvrÅ¡i naredbu koristeÄi neiskoriÅ¡Äeni mrežni opseg i takoÄe troÅ¡eÄi manje "
"energije"
#. TRANSLATORS: command line argument, just output without fancy formatting
-#: ../client/pk-console.c:1282
+#: ../client/pk-console.c:1286
msgid ""
"Print to screen a machine readable output, rather than using animated widgets"
msgstr ""
"Å tampaj izlaz Äitljiv maÅ¡ini na ekranu, umesto upotrebe animiranih vidžeta"
#. TRANSLATORS: we failed to contact the daemon
-#: ../client/pk-console.c:1304
+#: ../client/pk-console.c:1308
msgid "Failed to contact PackageKit"
msgstr "Neuspešno kontaktiranje PaketKita."
#. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1365
+#: ../client/pk-console.c:1369
msgid "The proxy could not be set"
msgstr "Proksi nije mogao da bude postavljen"
#. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1377
+#: ../client/pk-console.c:1381
+msgid "The install root could not be set"
+msgstr "Koren instalacije nije mogao da bude postavljen"
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1393
msgid "The filter specified was invalid"
msgstr "Navedeni filter nije ispravan"
#. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1396
+#: ../client/pk-console.c:1412
msgid "A search type is required, e.g. name"
msgstr "Morate navesti vrstu pretrage, npr. po imenu"
#. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1403 ../client/pk-console.c:1415
-#: ../client/pk-console.c:1427 ../client/pk-console.c:1439
+#: ../client/pk-console.c:1419 ../client/pk-console.c:1431
+#: ../client/pk-console.c:1443 ../client/pk-console.c:1455
msgid "A search term is required"
msgstr "Morate navesti termin za pretragu"
#. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1449
+#: ../client/pk-console.c:1465
msgid "Invalid search type"
msgstr "Neispravna vrsta pretrage"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1455
+#: ../client/pk-console.c:1471
msgid "A package name to install is required"
msgstr "Neophodno je ime paketa za instalaciju"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1464
+#: ../client/pk-console.c:1480
msgid "A filename to install is required"
msgstr "Neophodno je ime datoteke za instalaciju"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1476
+#: ../client/pk-console.c:1492
msgid "A type, key_id and package_id are required"
msgstr "Morate navesti vrstu, IB kljuÄa i IB paketa (key_id i package_id)"
#. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:1487
+#: ../client/pk-console.c:1503
msgid "A package name to remove is required"
msgstr "Morate navesti naziv paketa za uklanjanje"
#. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:1496
+#: ../client/pk-console.c:1512
msgid "A destination directory and the package names to download are required"
msgstr "Neophodni su odredišni direktorijum i imena paketa za preuzimanje"
#. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:1503
+#: ../client/pk-console.c:1519
msgid "Directory not found"
msgstr "Direktorijum nije naÄen"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1512
+#: ../client/pk-console.c:1528
msgid "A licence identifier (eula-id) is required"
msgstr "Morete navesti identifikator licence (eula-id)"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1523
+#: ../client/pk-console.c:1539
msgid "A transaction identifier (tid) is required"
msgstr "Morate navesti identifikator transakcije (tid)"
#. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:1544
+#: ../client/pk-console.c:1560
msgid "A package name to resolve is required"
msgstr "Morate navesti ime paketa za razrešavanje"
#. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:1555 ../client/pk-console.c:1566
+#: ../client/pk-console.c:1571 ../client/pk-console.c:1582
msgid "A repository name is required"
msgstr "Morate navesti ime riznice"
#. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:1577
+#: ../client/pk-console.c:1593
msgid "A repo name, parameter and value are required"
msgstr "Morate navesti ime, parametar i vrednost riznice"
#. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:1594
+#: ../client/pk-console.c:1610
msgid "An action, e.g. 'update-system' is required"
msgstr "Morate navesti radnju, npr. âupdate-systemâ (ažuriranje sistema)"
#. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:1601
+#: ../client/pk-console.c:1617
msgid "A correct role is required"
msgstr "Morate navesti važeÄu radnju"
#. TRANSLATORS: The user did not provide a package name
#. TRANSLATORS: This is when the user fails to supply the package name
-#: ../client/pk-console.c:1611 ../client/pk-console.c:1626
-#: ../client/pk-console.c:1635 ../client/pk-console.c:1655
-#: ../client/pk-console.c:1664 ../client/pk-generate-pack.c:316
+#: ../client/pk-console.c:1627 ../client/pk-console.c:1642
+#: ../client/pk-console.c:1651 ../client/pk-console.c:1671
+#: ../client/pk-console.c:1680 ../client/pk-generate-pack.c:316
msgid "A package name is required"
msgstr "Morate navesti ime paketa"
#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:1644
+#: ../client/pk-console.c:1660
msgid "A package provide string is required"
msgstr "Morate navesti âprovideâ niz (Å¡ta paket pruža)"
#. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:1724
+#: ../client/pk-console.c:1740
#, c-format
msgid "Option '%s' is not supported"
msgstr "Opcija â%sâ nije podržana"
#. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:1734
+#: ../client/pk-console.c:1750
msgid "Command failed"
msgstr "Naredba nije uspela"
@@ -1732,48 +1743,55 @@ msgstr "Neophodna je autentifikacija za izmenu parametara izvora softvera"
#: ../policy/org.freedesktop.packagekit.policy.in.h:11
msgid ""
+"Authentication is required to change the location used to decompress packages"
+msgstr ""
+"Neophodna je autentifikacija za izmenu lokacije upotrebljene za raspakivanje "
+"paketa"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:12
+msgid ""
"Authentication is required to consider a key used for signing packages as "
"trusted"
msgstr ""
"Neophodna je autentifikacija da bi se kljuÄ koriÅ¡Äen za potpisivanje paketa "
"smatrao poverljivim"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:12
+#: ../policy/org.freedesktop.packagekit.policy.in.h:13
msgid "Authentication is required to install a signed package"
msgstr "Neophodna je autentifikacija za instalaciju potpisanog paketa"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:13
+#: ../policy/org.freedesktop.packagekit.policy.in.h:14
msgid "Authentication is required to install an untrusted package"
msgstr ""
"Neophodna je autentifikacija za instalaciju paketa iz nepoverljivog izvora"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:14
+#: ../policy/org.freedesktop.packagekit.policy.in.h:15
msgid "Authentication is required to refresh the system sources"
msgstr "Neophodna je autentifikacija za osvežavanje sistemskih riznica"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:15
+#: ../policy/org.freedesktop.packagekit.policy.in.h:16
msgid "Authentication is required to reload the device with a new driver"
msgstr ""
"Neophodna je autentifikacija za ponovno uÄitavanje ureÄaja sa novim "
"upravljaÄkim programom"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:16
+#: ../policy/org.freedesktop.packagekit.policy.in.h:17
msgid "Authentication is required to remove packages"
msgstr "Neophodna je autentifikacija za uklanjanje paketa"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:17
+#: ../policy/org.freedesktop.packagekit.policy.in.h:18
msgid "Authentication is required to rollback a transaction"
msgstr "Neophodna je autentifikacija za poništavanje sve-ili-ništa promena"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:18
+#: ../policy/org.freedesktop.packagekit.policy.in.h:19
msgid ""
"Authentication is required to set the network proxy used for downloading "
"packages"
msgstr ""
-"Neophodna je autentifikacija kako bise namestio mrežni posrednik koriÅ¡Äen "
+"Neophodna je autentifikacija kako bi se namestio mrežni posrednik koriÅ¡Äen "
"za preuzimanje paketa"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:19
+#: ../policy/org.freedesktop.packagekit.policy.in.h:20
msgid "Authentication is required to update packages"
msgstr "Neophodna je autentifikacija za ažuriranje paketa"
@@ -1782,16 +1800,26 @@ msgstr "Neophodna je autentifikacija za ažuriranje paketa"
#. authentication, but a different user id needs the admin password
#. to cancel another users task.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:25
+#: ../policy/org.freedesktop.packagekit.policy.in.h:26
msgid "Cancel foreign task"
msgstr "Otkaži strani posao"
#. SECURITY:
+#. - This is used when users want to install to a different prefix, for
+#. instance to a LTSP image or a virtual machine.
+#. - This could be used to overwrite files not owned by the user using
+#. a carefully created package file.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:33
+msgid "Change location that packages are installed"
+msgstr "Izmeni lokaciju instalacije paketa"
+
+#. SECURITY:
#. - Normal users require admin authentication to enable or disable
#. software sources as this can be used to enable new updates or
#. install different versions of software.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:31
+#: ../policy/org.freedesktop.packagekit.policy.in.h:39
msgid "Change software source parameters"
msgstr "Izmeni parametre izvora softvera"
@@ -1801,7 +1829,7 @@ msgstr "Izmeni parametre izvora softvera"
#. - Paranoid users (or parents!) can change this to 'auth_admin' or
#. 'auth_admin_keep'.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:38
+#: ../policy/org.freedesktop.packagekit.policy.in.h:46
msgid "Install signed package"
msgstr "Instaliraj potpisani paket"
@@ -1811,7 +1839,7 @@ msgstr "Instaliraj potpisani paket"
#. password would be a massive security hole.
#. - This is not retained as each package should be authenticated.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:45
+#: ../policy/org.freedesktop.packagekit.policy.in.h:53
msgid "Install untrusted local file"
msgstr "Instaliraj nepoverljivu lokalnu datoteku"
@@ -1819,7 +1847,7 @@ msgstr "Instaliraj nepoverljivu lokalnu datoteku"
#. - Normal users do not require admin authentication to refresh the
#. cache, as this doesn't actually install or remove software.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:50
+#: ../policy/org.freedesktop.packagekit.policy.in.h:58
msgid "Refresh system sources"
msgstr "Osveži sistemske riznice"
@@ -1830,7 +1858,7 @@ msgstr "Osveži sistemske riznice"
#. try to rebind drivers in use, for instance security authentication
#. devices.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:58
+#: ../policy/org.freedesktop.packagekit.policy.in.h:66
msgid "Reload a device"
msgstr "Ponovo uÄitaj ureÄaj"
@@ -1843,7 +1871,7 @@ msgstr "Ponovo uÄitaj ureÄaj"
#. be removed. If this is not possible, change this authentication to
#. 'auth_admin'.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:68
+#: ../policy/org.freedesktop.packagekit.policy.in.h:76
msgid "Remove package"
msgstr "Ukloni paket"
@@ -1852,7 +1880,7 @@ msgstr "Ukloni paket"
#. as this will change a large number of packages, and could expose the
#. system to previously patched security vulnerabilities.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:74
+#: ../policy/org.freedesktop.packagekit.policy.in.h:82
msgid "Rollback to a previous transaction"
msgstr "Vrati se na stanje prethodne promene"
@@ -1860,7 +1888,7 @@ msgstr "Vrati se na stanje prethodne promene"
#. - Normal users do not require admin authentication to set the proxy
#. used for downloading packages.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:79
+#: ../policy/org.freedesktop.packagekit.policy.in.h:87
msgid "Set network proxy"
msgstr "Postavi mrežnog posrednika"
@@ -1870,7 +1898,7 @@ msgstr "Postavi mrežnog posrednika"
#. without a secure authentication.
#. - This is not kept as each package should be authenticated.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:86
+#: ../policy/org.freedesktop.packagekit.policy.in.h:94
msgid "Trust a key used for signing packages"
msgstr "Veruj kljuÄu koriÅ¡Äenom za potpisivanje paketa"
@@ -1881,7 +1909,7 @@ msgstr "Veruj kljuÄu koriÅ¡Äenom za potpisivanje paketa"
#. - Changing this to anything other than 'yes' will break unattended
#. updates.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:94
+#: ../policy/org.freedesktop.packagekit.policy.in.h:102
msgid "Update packages"
msgstr "Ažuriraj pakete"
commit e918b92acf38d307a4c79b1efd2f262f242ad5a8
Author: kmilos <kmilos at fedoraproject.org>
Date: Thu Apr 29 20:26:20 2010 +0000
l10n: Updates to Serbian (sr) translation
Transmitted-via: Transifex (translate.fedoraproject.org)
diff --git a/po/sr.po b/po/sr.po
index 84b1876..02a494d 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -7,12 +7,13 @@
#
# Igor Miletic (ÐÐ³Ð¾Ñ ÐилеÑиÑ) <grejigl-gnomeprevod at yahoo.ca>, 2009.
# MiloÅ¡ KomarÄeviÄ <kmilos at gmail.com>, 2009.
+#
msgid ""
msgstr ""
"Project-Id-Version: PackageKit\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-07 19:20+0000\n"
-"PO-Revision-Date: 2010-04-07 23:02-0000\n"
+"POT-Creation-Date: 2010-04-29 19:54+0000\n"
+"PO-Revision-Date: 2010-04-29 21:19+0100\n"
"Last-Translator: MiloÅ¡ KomarÄeviÄ <kmilos at gmail.com>\n"
"Language-Team: Serbian <trans-sr at lists.fedoraproject.org>\n"
"MIME-Version: 1.0\n"
@@ -386,157 +387,167 @@ msgid "Failed to get the time since this action was last completed"
msgstr "ÐаÑÑм поÑледÑег извÑÑаваÑа ове ÑадÑе ниÑе пÑонаÑен"
#. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:1267 ../client/pk-monitor.c:326
+#: ../client/pk-console.c:1268 ../client/pk-monitor.c:326
msgid "Show the program version and exit"
msgstr "ÐÑикажи веÑзиÑÑ Ð¿ÑогÑама и завÑÑи Ñад"
#. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1270
+#: ../client/pk-console.c:1271
msgid "Set the filter, e.g. installed"
msgstr "ÐамеÑÑи ÑилÑеÑ, нпÑ. инÑÑалиÑани"
+#. TRANSLATORS: command line argument, use a non-standard install prefix
+#: ../client/pk-console.c:1274
+msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
+msgstr "ÐоÑÑави коÑен инÑÑалаÑиÑе, нпÑ. â/â или â/mnt/ltspâ"
+
#. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1273
+#: ../client/pk-console.c:1277
msgid "Exit without waiting for actions to complete"
msgstr "ÐавÑÑи Ñад без ÑекаÑа да Ñе поÑлови завÑÑе"
#. command line argument, do we ask questions
-#: ../client/pk-console.c:1276
+#: ../client/pk-console.c:1280
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:527
msgid "Install the packages without asking for confirmation"
msgstr "ÐнÑÑалиÑÐ°Ñ Ð¿Ð°ÐºÐµÑе без пиÑаÑа за поÑвÑдÑ"
#. TRANSLATORS: command line argument, this command is not a priority
-#: ../client/pk-console.c:1279
+#: ../client/pk-console.c:1283
msgid "Run the command using idle network bandwidth and also using less power"
msgstr ""
"ÐзвÑÑи наÑÐµÐ´Ð±Ñ ÐºÐ¾ÑиÑÑеÑи неиÑкоÑиÑÑени мÑежни опÑег и ÑакоÑе ÑÑоÑеÑи маÑе "
"енеÑгиÑе"
#. TRANSLATORS: command line argument, just output without fancy formatting
-#: ../client/pk-console.c:1282
+#: ../client/pk-console.c:1286
msgid ""
"Print to screen a machine readable output, rather than using animated widgets"
msgstr ""
"ШÑÐ°Ð¼Ð¿Ð°Ñ Ð¸Ð·Ð»Ð°Ð· ÑиÑÑив маÑини на екÑанÑ, ÑмеÑÑо ÑпоÑÑебе анимиÑаниÑ
виÑеÑа"
#. TRANSLATORS: we failed to contact the daemon
-#: ../client/pk-console.c:1304
+#: ../client/pk-console.c:1308
msgid "Failed to contact PackageKit"
msgstr "ÐеÑÑпеÑно конÑакÑиÑаÑе ÐакеÑÐиÑа."
#. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1365
+#: ../client/pk-console.c:1369
msgid "The proxy could not be set"
msgstr "ÐÑокÑи ниÑе могао да бÑде поÑÑавÑен"
#. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1377
+#: ../client/pk-console.c:1381
+msgid "The install root could not be set"
+msgstr "ÐоÑен инÑÑалаÑиÑе ниÑе могао да бÑде поÑÑавÑен"
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1393
msgid "The filter specified was invalid"
msgstr "Ðаведени ÑилÑÐµÑ Ð½Ð¸Ñе иÑпÑаван"
#. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1396
+#: ../client/pk-console.c:1412
msgid "A search type is required, e.g. name"
msgstr "ÐоÑаÑе навеÑÑи вÑÑÑÑ Ð¿ÑеÑÑаге, нпÑ. по именÑ"
#. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1403 ../client/pk-console.c:1415
-#: ../client/pk-console.c:1427 ../client/pk-console.c:1439
+#: ../client/pk-console.c:1419 ../client/pk-console.c:1431
+#: ../client/pk-console.c:1443 ../client/pk-console.c:1455
msgid "A search term is required"
msgstr "ÐоÑаÑе навеÑÑи ÑеÑмин за пÑеÑÑагÑ"
#. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1449
+#: ../client/pk-console.c:1465
msgid "Invalid search type"
msgstr "ÐеиÑпÑавна вÑÑÑа пÑеÑÑаге"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1455
+#: ../client/pk-console.c:1471
msgid "A package name to install is required"
msgstr "ÐеопÑ
одно Ñе име пакеÑа за инÑÑалаÑиÑÑ"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1464
+#: ../client/pk-console.c:1480
msgid "A filename to install is required"
msgstr "ÐеопÑ
одно Ñе име даÑоÑеке за инÑÑалаÑиÑÑ"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1476
+#: ../client/pk-console.c:1492
msgid "A type, key_id and package_id are required"
msgstr "ÐоÑаÑе навеÑÑи вÑÑÑÑ, ÐРкÑÑÑа и ÐРпакеÑа (key_id и package_id)"
#. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:1487
+#: ../client/pk-console.c:1503
msgid "A package name to remove is required"
msgstr "ÐоÑаÑе навеÑÑи назив пакеÑа за ÑклаÑаÑе"
#. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:1496
+#: ../client/pk-console.c:1512
msgid "A destination directory and the package names to download are required"
msgstr "ÐеопÑ
одни ÑÑ Ð¾Ð´ÑедиÑни диÑекÑоÑиÑÑм и имена пакеÑа за пÑеÑзимаÑе"
#. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:1503
+#: ../client/pk-console.c:1519
msgid "Directory not found"
msgstr "ÐиÑекÑоÑиÑÑм ниÑе наÑен"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1512
+#: ../client/pk-console.c:1528
msgid "A licence identifier (eula-id) is required"
msgstr "ÐоÑеÑе навеÑÑи иденÑиÑикаÑÐ¾Ñ Ð»Ð¸ÑенÑе (eula-id)"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1523
+#: ../client/pk-console.c:1539
msgid "A transaction identifier (tid) is required"
msgstr "ÐоÑаÑе навеÑÑи иденÑиÑикаÑÐ¾Ñ ÑÑанÑакÑиÑе (tid)"
#. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:1544
+#: ../client/pk-console.c:1560
msgid "A package name to resolve is required"
msgstr "ÐоÑаÑе навеÑÑи име пакеÑа за ÑазÑеÑаваÑе"
#. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:1555 ../client/pk-console.c:1566
+#: ../client/pk-console.c:1571 ../client/pk-console.c:1582
msgid "A repository name is required"
msgstr "ÐоÑаÑе навеÑÑи име ÑизниÑе"
#. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:1577
+#: ../client/pk-console.c:1593
msgid "A repo name, parameter and value are required"
msgstr "ÐоÑаÑе навеÑÑи име, паÑамеÑÐ°Ñ Ð¸ вÑедноÑÑ ÑизниÑе"
#. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:1594
+#: ../client/pk-console.c:1610
msgid "An action, e.g. 'update-system' is required"
msgstr "ÐоÑаÑе навеÑÑи ÑадÑÑ, нпÑ. âupdate-systemâ (ажÑÑиÑаÑе ÑиÑÑема)"
#. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:1601
+#: ../client/pk-console.c:1617
msgid "A correct role is required"
msgstr "ÐоÑаÑе навеÑÑи важеÑÑ ÑадÑÑ"
#. TRANSLATORS: The user did not provide a package name
#. TRANSLATORS: This is when the user fails to supply the package name
-#: ../client/pk-console.c:1611 ../client/pk-console.c:1626
-#: ../client/pk-console.c:1635 ../client/pk-console.c:1655
-#: ../client/pk-console.c:1664 ../client/pk-generate-pack.c:316
+#: ../client/pk-console.c:1627 ../client/pk-console.c:1642
+#: ../client/pk-console.c:1651 ../client/pk-console.c:1671
+#: ../client/pk-console.c:1680 ../client/pk-generate-pack.c:316
msgid "A package name is required"
msgstr "ÐоÑаÑе навеÑÑи име пакеÑа"
#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:1644
+#: ../client/pk-console.c:1660
msgid "A package provide string is required"
msgstr "ÐоÑаÑе навеÑÑи âprovideâ низ (ÑÑа Ð¿Ð°ÐºÐµÑ Ð¿ÑÑжа)"
#. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:1724
+#: ../client/pk-console.c:1740
#, c-format
msgid "Option '%s' is not supported"
msgstr "ÐпÑиÑа â%sâ ниÑе подÑжана"
#. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:1734
+#: ../client/pk-console.c:1750
msgid "Command failed"
msgstr "ÐаÑедба ниÑе ÑÑпела"
@@ -1731,48 +1742,55 @@ msgstr "ÐеопÑ
одна Ñе аÑÑенÑиÑикаÑиÑа за изменÑ
#: ../policy/org.freedesktop.packagekit.policy.in.h:11
msgid ""
+"Authentication is required to change the location used to decompress packages"
+msgstr ""
+"ÐеопÑ
одна Ñе аÑÑенÑиÑикаÑиÑа за Ð¸Ð·Ð¼ÐµÐ½Ñ Ð»Ð¾ÐºÐ°ÑиÑе ÑпоÑÑебÑене за ÑаÑпакиваÑе "
+"пакеÑа"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:12
+msgid ""
"Authentication is required to consider a key used for signing packages as "
"trusted"
msgstr ""
"ÐеопÑ
одна Ñе аÑÑенÑиÑикаÑиÑа да би Ñе кÑÑÑ ÐºÐ¾ÑиÑÑен за поÑпиÑиваÑе пакеÑа "
"ÑмаÑÑао повеÑÑивим"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:12
+#: ../policy/org.freedesktop.packagekit.policy.in.h:13
msgid "Authentication is required to install a signed package"
msgstr "ÐеопÑ
одна Ñе аÑÑенÑиÑикаÑиÑа за инÑÑалаÑиÑÑ Ð¿Ð¾ÑпиÑаног пакеÑа"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:13
+#: ../policy/org.freedesktop.packagekit.policy.in.h:14
msgid "Authentication is required to install an untrusted package"
msgstr ""
"ÐеопÑ
одна Ñе аÑÑенÑиÑикаÑиÑа за инÑÑалаÑиÑÑ Ð¿Ð°ÐºÐµÑа из неповеÑÑивог извоÑа"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:14
+#: ../policy/org.freedesktop.packagekit.policy.in.h:15
msgid "Authentication is required to refresh the system sources"
msgstr "ÐеопÑ
одна Ñе аÑÑенÑиÑикаÑиÑа за оÑвежаваÑе ÑиÑÑемÑкиÑ
ÑизниÑа"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:15
+#: ../policy/org.freedesktop.packagekit.policy.in.h:16
msgid "Authentication is required to reload the device with a new driver"
msgstr ""
"ÐеопÑ
одна Ñе аÑÑенÑиÑикаÑиÑа за поновно ÑÑиÑаваÑе ÑÑеÑаÑа Ñа новим "
"ÑпÑавÑаÑким пÑогÑамом"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:16
+#: ../policy/org.freedesktop.packagekit.policy.in.h:17
msgid "Authentication is required to remove packages"
msgstr "ÐеопÑ
одна Ñе аÑÑенÑиÑикаÑиÑа за ÑклаÑаÑе пакеÑа"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:17
+#: ../policy/org.freedesktop.packagekit.policy.in.h:18
msgid "Authentication is required to rollback a transaction"
msgstr "ÐеопÑ
одна Ñе аÑÑенÑиÑикаÑиÑа за пониÑÑаваÑе Ñве-или-ниÑÑа пÑомена"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:18
+#: ../policy/org.freedesktop.packagekit.policy.in.h:19
msgid ""
"Authentication is required to set the network proxy used for downloading "
"packages"
msgstr ""
-"ÐеопÑ
одна Ñе аÑÑенÑиÑикаÑиÑа како биÑе намеÑÑио мÑежни поÑÑедник коÑиÑÑен "
+"ÐеопÑ
одна Ñе аÑÑенÑиÑикаÑиÑа како би Ñе намеÑÑио мÑежни поÑÑедник коÑиÑÑен "
"за пÑеÑзимаÑе пакеÑа"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:19
+#: ../policy/org.freedesktop.packagekit.policy.in.h:20
msgid "Authentication is required to update packages"
msgstr "ÐеопÑ
одна Ñе аÑÑенÑиÑикаÑиÑа за ажÑÑиÑаÑе пакеÑа"
@@ -1781,16 +1799,26 @@ msgstr "ÐеопÑ
одна Ñе аÑÑенÑиÑикаÑиÑа за ажÑÑиÑ
#. authentication, but a different user id needs the admin password
#. to cancel another users task.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:25
+#: ../policy/org.freedesktop.packagekit.policy.in.h:26
msgid "Cancel foreign task"
msgstr "ÐÑкажи ÑÑÑани поÑао"
#. SECURITY:
+#. - This is used when users want to install to a different prefix, for
+#. instance to a LTSP image or a virtual machine.
+#. - This could be used to overwrite files not owned by the user using
+#. a carefully created package file.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:33
+msgid "Change location that packages are installed"
+msgstr "Ðзмени локаÑиÑÑ Ð¸Ð½ÑÑалаÑиÑе пакеÑа"
+
+#. SECURITY:
#. - Normal users require admin authentication to enable or disable
#. software sources as this can be used to enable new updates or
#. install different versions of software.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:31
+#: ../policy/org.freedesktop.packagekit.policy.in.h:39
msgid "Change software source parameters"
msgstr "Ðзмени паÑамеÑÑе извоÑа ÑоÑÑвеÑа"
@@ -1800,7 +1828,7 @@ msgstr "Ðзмени паÑамеÑÑе извоÑа ÑоÑÑвеÑа"
#. - Paranoid users (or parents!) can change this to 'auth_admin' or
#. 'auth_admin_keep'.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:38
+#: ../policy/org.freedesktop.packagekit.policy.in.h:46
msgid "Install signed package"
msgstr "ÐнÑÑалиÑÐ°Ñ Ð¿Ð¾ÑпиÑани пакеÑ"
@@ -1810,7 +1838,7 @@ msgstr "ÐнÑÑалиÑÐ°Ñ Ð¿Ð¾ÑпиÑани пакеÑ"
#. password would be a massive security hole.
#. - This is not retained as each package should be authenticated.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:45
+#: ../policy/org.freedesktop.packagekit.policy.in.h:53
msgid "Install untrusted local file"
msgstr "ÐнÑÑалиÑÐ°Ñ Ð½ÐµÐ¿Ð¾Ð²ÐµÑÑÐ¸Ð²Ñ Ð»Ð¾ÐºÐ°Ð»Ð½Ñ Ð´Ð°ÑоÑекÑ"
@@ -1818,7 +1846,7 @@ msgstr "ÐнÑÑалиÑÐ°Ñ Ð½ÐµÐ¿Ð¾Ð²ÐµÑÑÐ¸Ð²Ñ Ð»Ð¾ÐºÐ°Ð»Ð½Ñ Ð´Ð°ÑоÑе
#. - Normal users do not require admin authentication to refresh the
#. cache, as this doesn't actually install or remove software.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:50
+#: ../policy/org.freedesktop.packagekit.policy.in.h:58
msgid "Refresh system sources"
msgstr "ÐÑвежи ÑиÑÑемÑке ÑизниÑе"
@@ -1829,7 +1857,7 @@ msgstr "ÐÑвежи ÑиÑÑемÑке ÑизниÑе"
#. try to rebind drivers in use, for instance security authentication
#. devices.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:58
+#: ../policy/org.freedesktop.packagekit.policy.in.h:66
msgid "Reload a device"
msgstr "Ðоново ÑÑиÑÐ°Ñ ÑÑеÑаÑ"
@@ -1842,7 +1870,7 @@ msgstr "Ðоново ÑÑиÑÐ°Ñ ÑÑеÑаÑ"
#. be removed. If this is not possible, change this authentication to
#. 'auth_admin'.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:68
+#: ../policy/org.freedesktop.packagekit.policy.in.h:76
msgid "Remove package"
msgstr "Уклони пакеÑ"
@@ -1851,7 +1879,7 @@ msgstr "Уклони пакеÑ"
#. as this will change a large number of packages, and could expose the
#. system to previously patched security vulnerabilities.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:74
+#: ../policy/org.freedesktop.packagekit.policy.in.h:82
msgid "Rollback to a previous transaction"
msgstr "ÐÑаÑи Ñе на ÑÑаÑе пÑеÑÑ
одне пÑомене"
@@ -1859,7 +1887,7 @@ msgstr "ÐÑаÑи Ñе на ÑÑаÑе пÑеÑÑ
одне пÑомене"
#. - Normal users do not require admin authentication to set the proxy
#. used for downloading packages.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:79
+#: ../policy/org.freedesktop.packagekit.policy.in.h:87
msgid "Set network proxy"
msgstr "ÐоÑÑави мÑежног поÑÑедника"
@@ -1869,7 +1897,7 @@ msgstr "ÐоÑÑави мÑежног поÑÑедника"
#. without a secure authentication.
#. - This is not kept as each package should be authenticated.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:86
+#: ../policy/org.freedesktop.packagekit.policy.in.h:94
msgid "Trust a key used for signing packages"
msgstr "ÐеÑÑÑ ÐºÑÑÑÑ ÐºÐ¾ÑиÑÑеном за поÑпиÑиваÑе пакеÑа"
@@ -1880,7 +1908,7 @@ msgstr "ÐеÑÑÑ ÐºÑÑÑÑ ÐºÐ¾ÑиÑÑеном за поÑпиÑиваÑе
#. - Changing this to anything other than 'yes' will break unattended
#. updates.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:94
+#: ../policy/org.freedesktop.packagekit.policy.in.h:102
msgid "Update packages"
msgstr "ÐжÑÑиÑÐ°Ñ Ð¿Ð°ÐºÐµÑе"
commit 5610fe964e537d16f49b9cc45f999a2bb90a6659
Author: raven <raven at fedoraproject.org>
Date: Thu Apr 29 20:08:45 2010 +0000
l10n: Updates to Polish (pl) translation
Transmitted-via: Transifex (translate.fedoraproject.org)
diff --git a/po/pl.po b/po/pl.po
index f8d6c60..bd46ce8 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -5,8 +5,8 @@ msgid ""
msgstr ""
"Project-Id-Version: pl\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-03 11:30+0000\n"
-"PO-Revision-Date: 2010-04-03 13:35+0200\n"
+"POT-Creation-Date: 2010-04-29 19:54+0000\n"
+"PO-Revision-Date: 2010-04-29 22:08+0200\n"
"Last-Translator: Piotr DrÄ
g <piotrdrag at gmail.com>\n"
"Language-Team: Polish <trans-pl at lists.fedoraproject.org>\n"
"MIME-Version: 1.0\n"
@@ -381,35 +381,40 @@ msgstr ""
"Uzyskanie czasu od ostatniego zakoÅczenia tego dziaÅania nie powiodÅo siÄ"
#. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:1267 ../client/pk-monitor.c:326
+#: ../client/pk-console.c:1268 ../client/pk-monitor.c:326
msgid "Show the program version and exit"
msgstr "WyÅwietla wersjÄ programu i wyÅÄ
cza"
#. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1270
+#: ../client/pk-console.c:1271
msgid "Set the filter, e.g. installed"
msgstr "Ustawia filtr, np. zainstalowane"
+#. TRANSLATORS: command line argument, use a non-standard install prefix
+#: ../client/pk-console.c:1274
+msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
+msgstr "Ustawia gÅówny katalog instalacji, np. \"/\" lub \"/mnt/ltsp\""
+
#. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1273
+#: ../client/pk-console.c:1277
msgid "Exit without waiting for actions to complete"
msgstr "WyÅÄ
cza bez oczekiwania na zakoÅczenie dziaÅaÅ"
#. command line argument, do we ask questions
-#: ../client/pk-console.c:1276
+#: ../client/pk-console.c:1280
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:527
msgid "Install the packages without asking for confirmation"
msgstr "Instaluje pakiety bez proÅby o potwierdzenie"
#. TRANSLATORS: command line argument, this command is not a priority
-#: ../client/pk-console.c:1279
+#: ../client/pk-console.c:1283
msgid "Run the command using idle network bandwidth and also using less power"
msgstr ""
"Wykonuje polecenie używajÄ
c bezczynnego poÅÄ
czenia sieciowego, a także "
"zużywajÄ
c mniej energii"
#. TRANSLATORS: command line argument, just output without fancy formatting
-#: ../client/pk-console.c:1282
+#: ../client/pk-console.c:1286
msgid ""
"Print to screen a machine readable output, rather than using animated widgets"
msgstr ""
@@ -417,122 +422,127 @@ msgstr ""
"widgetów"
#. TRANSLATORS: we failed to contact the daemon
-#: ../client/pk-console.c:1304
+#: ../client/pk-console.c:1308
msgid "Failed to contact PackageKit"
msgstr "Skontaktowanie siÄ z usÅugÄ
PackageKit nie powiodÅo siÄ"
#. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1365
+#: ../client/pk-console.c:1369
msgid "The proxy could not be set"
msgstr "Nie można ustawiÄ poÅrednika"
#. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1377
+#: ../client/pk-console.c:1381
+msgid "The install root could not be set"
+msgstr "Nie można ustawiÄ gÅównego katalogu instalacji"
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1393
msgid "The filter specified was invalid"
msgstr "Podany filtr jest nieprawidÅowy"
#. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1396
+#: ../client/pk-console.c:1412
msgid "A search type is required, e.g. name"
msgstr "Wymagany jest typ wyszukiwania, np. nazwa"
#. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1403 ../client/pk-console.c:1415
-#: ../client/pk-console.c:1427 ../client/pk-console.c:1439
+#: ../client/pk-console.c:1419 ../client/pk-console.c:1431
+#: ../client/pk-console.c:1443 ../client/pk-console.c:1455
msgid "A search term is required"
msgstr "Wymagany jest wyszukiwany termin"
#. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1449
+#: ../client/pk-console.c:1465
msgid "Invalid search type"
msgstr "NieprawidÅowy typ wyszukiwania"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1455
+#: ../client/pk-console.c:1471
msgid "A package name to install is required"
msgstr "Wymagana jest nazwa pakietu do zainstalowania"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1464
+#: ../client/pk-console.c:1480
msgid "A filename to install is required"
msgstr "Wymagana jest nazwa pliku do zainstalowania"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1476
+#: ../client/pk-console.c:1492
msgid "A type, key_id and package_id are required"
msgstr "Wymagany jest typ, key_id i package_id"
#. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:1487
+#: ../client/pk-console.c:1503
msgid "A package name to remove is required"
msgstr "Wymagana jest nazwa pakietu do usuniÄcia"
#. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:1496
+#: ../client/pk-console.c:1512
msgid "A destination directory and the package names to download are required"
msgstr "Wymagany jest katalog docelowy i nazwy pakietów do pobrania"
#. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:1503
+#: ../client/pk-console.c:1519
msgid "Directory not found"
msgstr "Nie odnaleziono katalogu"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1512
+#: ../client/pk-console.c:1528
msgid "A licence identifier (eula-id) is required"
msgstr "Wymagany jest identyfikator licencji (eula-id)"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1523
+#: ../client/pk-console.c:1539
msgid "A transaction identifier (tid) is required"
msgstr "Wymagany jest identyfikator transakcji (tid)"
#. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:1544
+#: ../client/pk-console.c:1560
msgid "A package name to resolve is required"
msgstr "Wymagana jest nazwa pakietu do rozwiÄ
zania"
#. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:1555 ../client/pk-console.c:1566
+#: ../client/pk-console.c:1571 ../client/pk-console.c:1582
msgid "A repository name is required"
msgstr "Wymagana jest nazwa repozytorium"
#. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:1577
+#: ../client/pk-console.c:1593
msgid "A repo name, parameter and value are required"
msgstr "Wymagana jest nazwa, parametr i wartoÅÄ repozytorium"
#. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:1594
+#: ../client/pk-console.c:1610
msgid "An action, e.g. 'update-system' is required"
msgstr "Wymagane jest dziaÅanie, np. \"update-system\""
#. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:1601
+#: ../client/pk-console.c:1617
msgid "A correct role is required"
msgstr "Wymagana jest bieżÄ
ca rola"
#. TRANSLATORS: The user did not provide a package name
#. TRANSLATORS: This is when the user fails to supply the package name
-#: ../client/pk-console.c:1611 ../client/pk-console.c:1626
-#: ../client/pk-console.c:1635 ../client/pk-console.c:1655
-#: ../client/pk-console.c:1664 ../client/pk-generate-pack.c:316
+#: ../client/pk-console.c:1627 ../client/pk-console.c:1642
+#: ../client/pk-console.c:1651 ../client/pk-console.c:1671
+#: ../client/pk-console.c:1680 ../client/pk-generate-pack.c:316
msgid "A package name is required"
msgstr "Wymagana jest nazwa pakietu"
#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:1644
+#: ../client/pk-console.c:1660
msgid "A package provide string is required"
msgstr "Wymagany jest ÅaÅcuch dostarczania pakietu"
#. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:1724
+#: ../client/pk-console.c:1740
#, c-format
msgid "Option '%s' is not supported"
msgstr "Opcja \"%s\" nie jest obsÅugiwana"
#. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:1734
+#: ../client/pk-console.c:1750
msgid "Command failed"
msgstr "Polecenie nie powiodÅo siÄ"
@@ -1729,39 +1739,46 @@ msgstr ""
#: ../policy/org.freedesktop.packagekit.policy.in.h:11
msgid ""
+"Authentication is required to change the location used to decompress packages"
+msgstr ""
+"Wymagane jest uwierzytelnienie, aby ustawiÄ poÅożenie używane do "
+"dekompresowania pakietów"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:12
+msgid ""
"Authentication is required to consider a key used for signing packages as "
"trusted"
msgstr ""
"Wymagane jest uwierzytelnienie, aby oznaczyÄ klucz używany do podpisywania "
"pakietów jako zaufany"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:12
+#: ../policy/org.freedesktop.packagekit.policy.in.h:13
msgid "Authentication is required to install a signed package"
msgstr "Wymagane jest uwierzytelnienie, aby zainstalowaÄ podpisany pakiet"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:13
+#: ../policy/org.freedesktop.packagekit.policy.in.h:14
msgid "Authentication is required to install an untrusted package"
msgstr "Wymagane jest uwierzytelnienie, aby zainstalowaÄ niezaufany pakiet"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:14
+#: ../policy/org.freedesktop.packagekit.policy.in.h:15
msgid "Authentication is required to refresh the system sources"
msgstr "Wymagane jest uwierzytelnienie, aby odÅwieżyÄ ÅºródÅa systemu"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:15
+#: ../policy/org.freedesktop.packagekit.policy.in.h:16
msgid "Authentication is required to reload the device with a new driver"
msgstr ""
"Wymagane jest uwierzytelnienie, aby ponownie wczytaÄ urzÄ
dzenie za pomocÄ
"
"nowego sterownika"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:16
+#: ../policy/org.freedesktop.packagekit.policy.in.h:17
msgid "Authentication is required to remove packages"
msgstr "Wymagane jest uwierzytelnienie, aby usunÄ
Ä pakiety"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:17
+#: ../policy/org.freedesktop.packagekit.policy.in.h:18
msgid "Authentication is required to rollback a transaction"
msgstr "Wymagane jest uwierzytelnienie, aby przywróciÄ transakcjÄ"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:18
+#: ../policy/org.freedesktop.packagekit.policy.in.h:19
msgid ""
"Authentication is required to set the network proxy used for downloading "
"packages"
@@ -1769,7 +1786,7 @@ msgstr ""
"Wymagane jest uwierzytelnienie, aby ustawiÄ poÅrednika sieciowego używanego "
"do pobierania pakietów"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:19
+#: ../policy/org.freedesktop.packagekit.policy.in.h:20
msgid "Authentication is required to update packages"
msgstr "Wymagane jest uwierzytelnienie, aby zaktualizowaÄ pakiety"
@@ -1778,16 +1795,26 @@ msgstr "Wymagane jest uwierzytelnienie, aby zaktualizowaÄ pakiety"
#. authentication, but a different user id needs the admin password
#. to cancel another users task.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:25
+#: ../policy/org.freedesktop.packagekit.policy.in.h:26
msgid "Cancel foreign task"
msgstr "Anulowanie obcego zadania"
#. SECURITY:
+#. - This is used when users want to install to a different prefix, for
+#. instance to a LTSP image or a virtual machine.
+#. - This could be used to overwrite files not owned by the user using
+#. a carefully created package file.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:33
+msgid "Change location that packages are installed"
+msgstr "Zmiana poÅożenia, w którym sÄ
instalowane pakiety"
+
+#. SECURITY:
#. - Normal users require admin authentication to enable or disable
#. software sources as this can be used to enable new updates or
#. install different versions of software.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:31
+#: ../policy/org.freedesktop.packagekit.policy.in.h:39
msgid "Change software source parameters"
msgstr "Zmiana parametrów źródÅa oprogramowania"
@@ -1797,7 +1824,7 @@ msgstr "Zmiana parametrów źródÅa oprogramowania"
#. - Paranoid users (or parents!) can change this to 'auth_admin' or
#. 'auth_admin_keep'.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:38
+#: ../policy/org.freedesktop.packagekit.policy.in.h:46
msgid "Install signed package"
msgstr "Instalacja podpisanego pakietu"
@@ -1807,7 +1834,7 @@ msgstr "Instalacja podpisanego pakietu"
#. password would be a massive security hole.
#. - This is not retained as each package should be authenticated.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:45
+#: ../policy/org.freedesktop.packagekit.policy.in.h:53
msgid "Install untrusted local file"
msgstr "Instalacja niezaufanego lokalnego pliku"
@@ -1815,7 +1842,7 @@ msgstr "Instalacja niezaufanego lokalnego pliku"
#. - Normal users do not require admin authentication to refresh the
#. cache, as this doesn't actually install or remove software.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:50
+#: ../policy/org.freedesktop.packagekit.policy.in.h:58
msgid "Refresh system sources"
msgstr "OdÅwieżenie źródeÅ systemu"
@@ -1826,7 +1853,7 @@ msgstr "OdÅwieżenie źródeÅ systemu"
#. try to rebind drivers in use, for instance security authentication
#. devices.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:58
+#: ../policy/org.freedesktop.packagekit.policy.in.h:66
msgid "Reload a device"
msgstr "Ponowne wczytanie urzÄ
dzenia"
@@ -1839,7 +1866,7 @@ msgstr "Ponowne wczytanie urzÄ
dzenia"
#. be removed. If this is not possible, change this authentication to
#. 'auth_admin'.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:68
+#: ../policy/org.freedesktop.packagekit.policy.in.h:76
msgid "Remove package"
msgstr "UsuniÄcie pakietu"
@@ -1848,7 +1875,7 @@ msgstr "UsuniÄcie pakietu"
#. as this will change a large number of packages, and could expose the
#. system to previously patched security vulnerabilities.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:74
+#: ../policy/org.freedesktop.packagekit.policy.in.h:82
msgid "Rollback to a previous transaction"
msgstr "Przywrócenie poprzedniej transakcji"
@@ -1856,7 +1883,7 @@ msgstr "Przywrócenie poprzedniej transakcji"
#. - Normal users do not require admin authentication to set the proxy
#. used for downloading packages.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:79
+#: ../policy/org.freedesktop.packagekit.policy.in.h:87
msgid "Set network proxy"
msgstr "Ustawienie poÅrednika sieciowego"
@@ -1866,7 +1893,7 @@ msgstr "Ustawienie poÅrednika sieciowego"
#. without a secure authentication.
#. - This is not kept as each package should be authenticated.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:86
+#: ../policy/org.freedesktop.packagekit.policy.in.h:94
msgid "Trust a key used for signing packages"
msgstr "Oznaczenie klucza używanego do podpisywania pakietów jako zaufanego"
@@ -1877,7 +1904,7 @@ msgstr "Oznaczenie klucza używanego do podpisywania pakietów jako zaufanego"
#. - Changing this to anything other than 'yes' will break unattended
#. updates.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:94
+#: ../policy/org.freedesktop.packagekit.policy.in.h:102
msgid "Update packages"
msgstr "Aktualizacja pakietów"
commit e58b15064059fca2bd8a43366814463ed582b0b4
Author: Richard Hughes <richard at hughsie.com>
Date: Thu Apr 29 09:18:28 2010 +0100
Ensure we send MESSAGE_OTHER_UPDATES_HELD_BACK when we hold packages back
diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index 3891589..29b6d8f 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -2555,13 +2555,13 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
infra_packages = ['PackageKit', 'yum', 'rpm']
if pkg.name in infra_packages or pkg.name.partition('-')[0] in infra_packages:
infra_pkgs.append(pkg)
- if len(infra_pkgs) > len(pkgs):
- self.message(MESSAGE_OTHER_UPDATES_HELD_BACK, "Infrastructure packages take priority")
if len(infra_pkgs) > 0:
- msg = []
- for pkg in infra_pkgs:
- msg.append(pkg.name)
- self.message(MESSAGE_BACKEND_ERROR, "The packages '%s' will be updated before other packages" % msg)
+ if len(infra_pkgs) < len(pkgs):
+ msg = []
+ for pkg in infra_pkgs:
+ msg.append(pkg.name)
+ self.message(MESSAGE_OTHER_UPDATES_HELD_BACK, "Infrastructure packages take priority. " \
+ "The packages '%s' will be updated before other packages" % msg)
pkgs = infra_pkgs
# get the list of installed updates as this is needed for get_applicable_notices()
commit 87399341e4f122b8bd81dcb98c0f1127dd92e958
Author: yurchor <yurchor at fedoraproject.org>
Date: Thu Apr 29 16:10:17 2010 +0000
l10n: Updates to Ukrainian (uk) translation
Transmitted-via: Transifex (translate.fedoraproject.org)
diff --git a/po/uk.po b/po/uk.po
index f7a3967..84bc8c7 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: packagekit.master\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-03 04:18+0000\n"
-"PO-Revision-Date: 2010-04-03 08:56+0300\n"
+"POT-Creation-Date: 2010-04-29 08:42+0000\n"
+"PO-Revision-Date: 2010-04-29 19:09+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor at ukr.net>\n"
"Language-Team: Ukrainian <translation at linux.org.ua>\n"
"MIME-Version: 1.0\n"
@@ -382,35 +382,41 @@ msgid "Failed to get the time since this action was last completed"
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°ÑиÑи ÑаÑ, коли ÑÑ Ð´ÑÑ Ð±Ñло виконано воÑÑаннÑ"
#. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:1267 ../client/pk-monitor.c:326
+#: ../client/pk-console.c:1268 ../client/pk-monitor.c:326
msgid "Show the program version and exit"
msgstr "ÐоказаÑи веÑÑÑÑ Ð¿ÑогÑами Ñ Ð·Ð°Ð²ÐµÑÑиÑи ÑобоÑÑ"
#. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1270
+#: ../client/pk-console.c:1271
msgid "Set the filter, e.g. installed"
msgstr "ÐÑÑановиÑи ÑÑлÑÑÑ, напÑиклад, вÑÑановленÑ"
+#. TRANSLATORS: command line argument, use a non-standard install prefix
+#: ../client/pk-console.c:1274
+msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
+msgstr ""
+"ÐÑÑановиÑи коÑеневий каÑалог вÑÑановленнÑ, напÑиклад, '/' або '/mnt/ltsp'"
+
#. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1273
+#: ../client/pk-console.c:1277
msgid "Exit without waiting for actions to complete"
msgstr "ÐавеÑÑиÑи ÑобоÑÑ, не ÑекаÑÑи на завеÑÑÐµÐ½Ð½Ñ Ð´ÑÑ"
#. command line argument, do we ask questions
-#: ../client/pk-console.c:1276
+#: ../client/pk-console.c:1280
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:527
msgid "Install the packages without asking for confirmation"
msgstr "ÐÑÑановиÑи пакÑнки без запиÑÑ Ñодо пÑдÑвеÑдженнÑ"
#. TRANSLATORS: command line argument, this command is not a priority
-#: ../client/pk-console.c:1279
+#: ../client/pk-console.c:1283
msgid "Run the command using idle network bandwidth and also using less power"
msgstr ""
"ÐиконаÑи ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð· мÑнÑмалÑним викоÑиÑÑаннÑм меÑежевого ÐºÐ°Ð½Ð°Ð»Ñ Ñ Ð¼ÐµÐ½ÑÐ¾Ñ "
"виÑÑаÑÐ¾Ñ ÑеÑÑÑÑÑв ÑиÑÑеми"
#. TRANSLATORS: command line argument, just output without fancy formatting
-#: ../client/pk-console.c:1282
+#: ../client/pk-console.c:1286
msgid ""
"Print to screen a machine readable output, rather than using animated widgets"
msgstr ""
@@ -418,123 +424,128 @@ msgstr ""
"анÑмованиÑ
вÑджеÑÑв"
#. TRANSLATORS: we failed to contact the daemon
-#: ../client/pk-console.c:1304
+#: ../client/pk-console.c:1308
msgid "Failed to contact PackageKit"
msgstr "Ðе вдалоÑÑ Ð·Ð²âÑзаÑиÑÑ Ð· PackageKit"
#. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1365
+#: ../client/pk-console.c:1369
msgid "The proxy could not be set"
msgstr "Ðе вдалоÑÑ Ð²ÑÑановиÑи паÑамеÑÑи пÑокÑÑ-ÑеÑвеÑа"
#. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1377
+#: ../client/pk-console.c:1381
+msgid "The install root could not be set"
+msgstr "Ðе вдалоÑÑ Ð¿ÑизнаÑиÑи коÑеневий каÑалог вÑÑановленнÑ"
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1393
msgid "The filter specified was invalid"
msgstr "Ðказано некоÑекÑний ÑÑлÑÑÑ"
#. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1396
+#: ../client/pk-console.c:1412
msgid "A search type is required, e.g. name"
msgstr "Тип поÑÑкÑ, ÑкÑо Ñакий поÑÑÑбен, напÑиклад, назва"
#. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1403 ../client/pk-console.c:1415
-#: ../client/pk-console.c:1427 ../client/pk-console.c:1439
+#: ../client/pk-console.c:1419 ../client/pk-console.c:1431
+#: ../client/pk-console.c:1443 ../client/pk-console.c:1455
msgid "A search term is required"
msgstr "ÐоÑÑÑбен клÑÑ Ð¿Ð¾ÑÑкÑ"
#. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1449
+#: ../client/pk-console.c:1465
msgid "Invalid search type"
msgstr "ÐекоÑекÑний Ñип поÑÑкÑ"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1455
+#: ../client/pk-console.c:1471
msgid "A package name to install is required"
msgstr "СлÑд вказаÑи Ð½Ð°Ð·Ð²Ñ Ð¿Ð°ÐºÑнка, Ñкий ÑлÑд вÑÑановиÑи"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1464
+#: ../client/pk-console.c:1480
msgid "A filename to install is required"
msgstr "СлÑд вказаÑи Ð½Ð°Ð·Ð²Ñ Ñайла, Ñкий ÑлÑд вÑÑановиÑи"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1476
+#: ../client/pk-console.c:1492
msgid "A type, key_id and package_id are required"
msgstr "СлÑд вказаÑи Ñип, ÑденÑиÑÑкаÑÐ¾Ñ ÐºÐ»ÑÑа Ñ ÑденÑиÑÑкаÑÐ¾Ñ Ð¿Ð°ÐºÑнка"
#. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:1487
+#: ../client/pk-console.c:1503
msgid "A package name to remove is required"
msgstr "СлÑд вказаÑи Ð½Ð°Ð·Ð²Ñ Ð¿Ð°ÐºÑнка, Ñкий поÑÑÑбно вилÑÑиÑи"
#. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:1496
+#: ../client/pk-console.c:1512
msgid "A destination directory and the package names to download are required"
msgstr ""
"СлÑд вказаÑи каÑалог пÑизнаÑÐµÐ½Ð½Ñ Ñ Ð½Ð°Ð·Ð²Ð¸ пакÑнкÑв, ÑÐºÑ Ð¿Ð¾ÑÑÑбно званÑажиÑи"
#. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:1503
+#: ../client/pk-console.c:1519
msgid "Directory not found"
msgstr "ÐаÑалог не знайдено"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1512
+#: ../client/pk-console.c:1528
msgid "A licence identifier (eula-id) is required"
msgstr "СлÑд вказаÑи ÑденÑиÑÑкаÑÐ¾Ñ Ð»ÑÑензÑÑ (eula-id)"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1523
+#: ../client/pk-console.c:1539
msgid "A transaction identifier (tid) is required"
msgstr "СлÑд вказаÑи ÑденÑиÑÑкаÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑÑÑ (tid)"
#. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:1544
+#: ../client/pk-console.c:1560
msgid "A package name to resolve is required"
msgstr "СлÑд вказаÑи Ð½Ð°Ð·Ð²Ñ Ð¿Ð°ÐºÑнка Ð´Ð»Ñ ÑозвâÑÐ·Ð°Ð½Ð½Ñ ÐºÐ¾Ð½ÑлÑкÑÑ"
#. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:1555 ../client/pk-console.c:1566
+#: ../client/pk-console.c:1571 ../client/pk-console.c:1582
msgid "A repository name is required"
msgstr "СлÑд вказаÑи Ð½Ð°Ð·Ð²Ñ ÑÑ
овиÑа"
#. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:1577
+#: ../client/pk-console.c:1593
msgid "A repo name, parameter and value are required"
msgstr "СлÑд вказаÑи Ð½Ð°Ð·Ð²Ñ ÑÑ
овиÑа, паÑамеÑÑ Ñ Ð·Ð½Ð°ÑеннÑ"
#. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:1594
+#: ../client/pk-console.c:1610
msgid "An action, e.g. 'update-system' is required"
msgstr "СлÑд вказаÑи дÑÑ, напÑиклад «update-system»"
#. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:1601
+#: ../client/pk-console.c:1617
msgid "A correct role is required"
msgstr "СлÑд вказаÑи Ð½Ð°Ð»ÐµÐ¶Ð½Ñ ÑолÑ"
#. TRANSLATORS: The user did not provide a package name
#. TRANSLATORS: This is when the user fails to supply the package name
-#: ../client/pk-console.c:1611 ../client/pk-console.c:1626
-#: ../client/pk-console.c:1635 ../client/pk-console.c:1655
-#: ../client/pk-console.c:1664 ../client/pk-generate-pack.c:316
+#: ../client/pk-console.c:1627 ../client/pk-console.c:1642
+#: ../client/pk-console.c:1651 ../client/pk-console.c:1671
+#: ../client/pk-console.c:1680 ../client/pk-generate-pack.c:316
msgid "A package name is required"
msgstr "СлÑд вказаÑи Ð½Ð°Ð·Ð²Ñ Ð¿Ð°ÐºÑнка"
#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:1644
+#: ../client/pk-console.c:1660
msgid "A package provide string is required"
msgstr "СлÑд вказаÑи ÑÑдок вмÑÑÑÑ"
#. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:1724
+#: ../client/pk-console.c:1740
#, c-format
msgid "Option '%s' is not supported"
msgstr "ÐÑдÑÑимки паÑамеÑÑа «%s» не пеÑедбаÑено"
#. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:1734
+#: ../client/pk-console.c:1750
msgid "Command failed"
msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ зазнала невдаÑÑ"
@@ -1721,74 +1732,91 @@ msgstr "ÐÐ»Ñ Ð¿ÑдÑвеÑÐ´Ð¶ÐµÐ½Ð½Ñ EULA ÑлÑд виконаÑи Ñоз
#: ../policy/org.freedesktop.packagekit.policy.in.h:9
msgid ""
"Authentication is required to cancel a task that was not started by yourself"
-msgstr "ÐÐ»Ñ ÑкаÑÑÐ²Ð°Ð½Ð½Ñ Ð´ÑÑ, запоÑаÑÐºÐ¾Ð²Ð°Ð½Ð¾Ñ Ð½Ðµ вами, ÑлÑд пÑойÑи авÑенÑиÑÑкаÑÑÑ"
+msgstr "ÐÐ»Ñ ÑкаÑÑÐ²Ð°Ð½Ð½Ñ Ð´ÑÑ, запоÑаÑÐºÐ¾Ð²Ð°Ð½Ð¾Ñ Ð½Ðµ вами, ÑлÑд пÑойÑи ÑозпÑзнаваннÑ"
#: ../policy/org.freedesktop.packagekit.policy.in.h:10
msgid "Authentication is required to change software source parameters"
msgstr ""
"ÐÐ»Ñ Ð·Ð¼Ñни паÑамеÑÑÑв джеÑел пÑогÑамного забезпеÑÐµÐ½Ð½Ñ ÑлÑд пÑойÑи "
-"авÑенÑиÑÑкаÑÑÑ"
+"ÑозпÑзнаваннÑ"
#: ../policy/org.freedesktop.packagekit.policy.in.h:11
msgid ""
+"Authentication is required to change the location used to decompress packages"
+msgstr ""
+"ÐÐ»Ñ Ð²Ð¸Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð°Ð´ÑеÑи каÑалогÑ, кÑди бÑде видобÑÑо вмÑÑÑ Ð¿Ð°ÐºÑнкÑв, ÑлÑд "
+"пÑойÑи ÑозпÑзнаваннÑ"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:12
+msgid ""
"Authentication is required to consider a key used for signing packages as "
"trusted"
msgstr ""
"ÐÐ»Ñ Ð²Ð¸Ð·Ð½Ð°Ð½Ð½Ñ ÐºÐ»ÑÑа, викоÑиÑÑаного Ð´Ð»Ñ Ð¿ÑдпиÑÑÐ²Ð°Ð½Ð½Ñ Ð¿Ð°ÐºÑнкÑв, Ñк надÑйного "
-"ÑлÑд пÑойÑи авÑенÑиÑÑкаÑÑÑ"
+"ÑлÑд пÑойÑи ÑозпÑзнаваннÑ"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:12
+#: ../policy/org.freedesktop.packagekit.policy.in.h:13
msgid "Authentication is required to install a signed package"
-msgstr "ÐÐ»Ñ Ð²ÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿ÑдпиÑаного пакÑнка ÑлÑд пÑойÑи авÑенÑиÑÑкаÑÑÑ"
+msgstr "ÐÐ»Ñ Ð²ÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿ÑдпиÑаного пакÑнка ÑлÑд пÑойÑи ÑозпÑзнаваннÑ"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:13
+#: ../policy/org.freedesktop.packagekit.policy.in.h:14
msgid "Authentication is required to install an untrusted package"
-msgstr "ÐÐ»Ñ Ð²ÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½ÐµÐ½Ð°Ð´Ñйного пакÑнка ÑлÑд пÑойÑи авÑенÑиÑÑкаÑÑÑ"
+msgstr "ÐÐ»Ñ Ð²ÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½ÐµÐ½Ð°Ð´Ñйного пакÑнка ÑлÑд пÑойÑи ÑозпÑзнаваннÑ"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:14
+#: ../policy/org.freedesktop.packagekit.policy.in.h:15
msgid "Authentication is required to refresh the system sources"
-msgstr "ÐÐ»Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑпиÑÐºÑ Ð´Ð¶ÐµÑел ÑиÑÑеми ÑлÑд пÑойÑи авÑенÑиÑÑкаÑÑÑ"
+msgstr "ÐÐ»Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑпиÑÐºÑ Ð´Ð¶ÐµÑел ÑиÑÑеми ÑлÑд пÑойÑи ÑозпÑзнаваннÑ"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:15
+#: ../policy/org.freedesktop.packagekit.policy.in.h:16
msgid "Authentication is required to reload the device with a new driver"
msgstr ""
-"ÐÐ»Ñ Ð¿ÐµÑезаванÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð¿ÑиÑÑÑÐ¾Ñ Ð· новим дÑайвеÑом ÑлÑд пÑойÑи авÑенÑиÑÑкаÑÑÑ"
+"ÐÐ»Ñ Ð¿ÐµÑезаванÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð¿ÑиÑÑÑÐ¾Ñ Ð· новим дÑайвеÑом ÑлÑд пÑойÑи ÑозпÑзнаваннÑ"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:16
+#: ../policy/org.freedesktop.packagekit.policy.in.h:17
msgid "Authentication is required to remove packages"
-msgstr "ÐÐ»Ñ Ð²Ð¸Ð»ÑÑÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑнкÑв ÑлÑд пÑойÑи авÑенÑиÑÑкаÑÑÑ"
+msgstr "ÐÐ»Ñ Ð²Ð¸Ð»ÑÑÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑнкÑв ÑлÑд пÑойÑи ÑозпÑзнаваннÑ"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:17
+#: ../policy/org.freedesktop.packagekit.policy.in.h:18
msgid "Authentication is required to rollback a transaction"
-msgstr "ÐÐ»Ñ ÑкаÑÑÐ²Ð°Ð½Ð½Ñ Ð´ÑÑ ÑлÑд пÑойÑи авÑенÑиÑÑкаÑÑÑ"
+msgstr "ÐÐ»Ñ ÑкаÑÑÐ²Ð°Ð½Ð½Ñ Ð´ÑÑ ÑлÑд пÑойÑи ÑозпÑзнаваннÑ"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:18
+#: ../policy/org.freedesktop.packagekit.policy.in.h:19
msgid ""
"Authentication is required to set the network proxy used for downloading "
"packages"
msgstr ""
"ÐÐ»Ñ Ð²Ð¸Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð¿ÑокÑÑ-ÑеÑвеÑа, Ñкий бÑде викоÑиÑÑано Ð´Ð»Ñ Ð·Ð²Ð°Ð½ÑÐ°Ð¶ÐµÐ½Ð½Ñ "
-"пакÑнкÑв, ÑлÑд пÑойÑи авÑенÑиÑÑкаÑÑÑ"
+"пакÑнкÑв, ÑлÑд пÑойÑи ÑозпÑзнаваннÑ"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:19
+#: ../policy/org.freedesktop.packagekit.policy.in.h:20
msgid "Authentication is required to update packages"
-msgstr "ÐÐ»Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑнкÑв ÑлÑд пÑойÑи авÑенÑиÑÑкаÑÑÑ"
+msgstr "ÐÐ»Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑнкÑв ÑлÑд пÑойÑи ÑозпÑзнаваннÑ"
#. SECURITY:
#. - Normal users are allowed to cancel their own task without
#. authentication, but a different user id needs the admin password
#. to cancel another users task.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:25
+#: ../policy/org.freedesktop.packagekit.policy.in.h:26
msgid "Cancel foreign task"
msgstr "СкаÑÑÐ²Ð°Ð½Ð½Ñ ÑÑоÑоннÑÑ
завданÑ"
#. SECURITY:
+#. - This is used when users want to install to a different prefix, for
+#. instance to a LTSP image or a virtual machine.
+#. - This could be used to overwrite files not owned by the user using
+#. a carefully created package file.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:33
+msgid "Change location that packages are installed"
+msgstr "ÐмÑниÑи каÑалог, кÑди вÑÑановлÑваÑимÑÑÑÑÑ Ð¿Ð°ÐºÑнки"
+
+#. SECURITY:
#. - Normal users require admin authentication to enable or disable
#. software sources as this can be used to enable new updates or
#. install different versions of software.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:31
+#: ../policy/org.freedesktop.packagekit.policy.in.h:39
msgid "Change software source parameters"
msgstr "ÐмÑна паÑамеÑÑÑв джеÑела пÑогÑам"
@@ -1798,7 +1826,7 @@ msgstr "ÐмÑна паÑамеÑÑÑв джеÑела пÑогÑам"
#. - Paranoid users (or parents!) can change this to 'auth_admin' or
#. 'auth_admin_keep'.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:38
+#: ../policy/org.freedesktop.packagekit.policy.in.h:46
msgid "Install signed package"
msgstr "ÐÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿ÑдпиÑаного пакÑнка"
@@ -1808,7 +1836,7 @@ msgstr "ÐÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿ÑдпиÑаного пакÑнка"
#. password would be a massive security hole.
#. - This is not retained as each package should be authenticated.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:45
+#: ../policy/org.freedesktop.packagekit.policy.in.h:53
msgid "Install untrusted local file"
msgstr "ÐÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½ÐµÐ½Ð°Ð´Ñйного локалÑного Ñайла"
@@ -1816,7 +1844,7 @@ msgstr "ÐÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½ÐµÐ½Ð°Ð´Ñйного локалÑного Ñ
#. - Normal users do not require admin authentication to refresh the
#. cache, as this doesn't actually install or remove software.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:50
+#: ../policy/org.freedesktop.packagekit.policy.in.h:58
msgid "Refresh system sources"
msgstr "ÐÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑпиÑкÑв джеÑел ÑиÑÑеми"
@@ -1827,7 +1855,7 @@ msgstr "ÐÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑпиÑкÑв джеÑел ÑиÑÑеми"
#. try to rebind drivers in use, for instance security authentication
#. devices.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:58
+#: ../policy/org.freedesktop.packagekit.policy.in.h:66
msgid "Reload a device"
msgstr "ÐеÑезаванÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð¿ÑиÑÑÑоÑ"
@@ -1840,7 +1868,7 @@ msgstr "ÐеÑезаванÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð¿ÑиÑÑÑоÑ"
#. be removed. If this is not possible, change this authentication to
#. 'auth_admin'.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:68
+#: ../policy/org.freedesktop.packagekit.policy.in.h:76
msgid "Remove package"
msgstr "ÐилÑÑÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑнка"
@@ -1849,7 +1877,7 @@ msgstr "ÐилÑÑÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑнка"
#. as this will change a large number of packages, and could expose the
#. system to previously patched security vulnerabilities.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:74
+#: ../policy/org.freedesktop.packagekit.policy.in.h:82
msgid "Rollback to a previous transaction"
msgstr "ÐовеÑÐ½ÐµÐ½Ð½Ñ Ð´Ð¾ попеÑеднÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑÑÑ"
@@ -1857,7 +1885,7 @@ msgstr "ÐовеÑÐ½ÐµÐ½Ð½Ñ Ð´Ð¾ попеÑеднÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑÑÑ"
#. - Normal users do not require admin authentication to set the proxy
#. used for downloading packages.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:79
+#: ../policy/org.freedesktop.packagekit.policy.in.h:87
msgid "Set network proxy"
msgstr "ÐÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿ÑокÑÑ-ÑеÑвеÑ"
@@ -1867,7 +1895,7 @@ msgstr "ÐÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿ÑокÑÑ-ÑеÑвеÑ"
#. without a secure authentication.
#. - This is not kept as each package should be authenticated.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:86
+#: ../policy/org.freedesktop.packagekit.policy.in.h:94
msgid "Trust a key used for signing packages"
msgstr "ÐизнаÑÐµÐ½Ð½Ñ Ð½Ð°Ð´ÑйноÑÑÑ ÐºÐ»ÑÑа, Ñким пÑдпиÑано пакÑнки"
@@ -1878,7 +1906,7 @@ msgstr "ÐизнаÑÐµÐ½Ð½Ñ Ð½Ð°Ð´ÑйноÑÑÑ ÐºÐ»ÑÑа, Ñким пÑдп
#. - Changing this to anything other than 'yes' will break unattended
#. updates.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:94
+#: ../policy/org.freedesktop.packagekit.policy.in.h:102
msgid "Update packages"
msgstr "ÐÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°ÐºÑнкÑв"
commit c4d199e1183458149491ffbc537b9a9d78b3ddf3
Author: logan <logan at fedoraproject.org>
Date: Thu Apr 29 13:05:30 2010 +0000
l10n: Updates to Spanish (Castilian) (es) translation
Transmitted-via: Transifex (translate.fedoraproject.org)
diff --git a/po/es.po b/po/es.po
index 94b6c9e..798fe54 100644
--- a/po/es.po
+++ b/po/es.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: packagekit\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-03 16:16+0000\n"
-"PO-Revision-Date: 2010-04-03 14:43-0300\n"
+"POT-Creation-Date: 2010-04-29 08:42+0000\n"
+"PO-Revision-Date: 2010-04-29 10:04-0300\n"
"Last-Translator: Héctor Daniel Cabrera <logan at fedoraproject.org>\n"
"Language-Team: Fedora Spanish <trans-es at lists.fedoraproject.org>\n"
"MIME-Version: 1.0\n"
@@ -383,160 +383,170 @@ msgid "Failed to get the time since this action was last completed"
msgstr "Falló al obtener la hora de la última vez que se completó esta acción"
#. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:1267
+#: ../client/pk-console.c:1268
#: ../client/pk-monitor.c:326
msgid "Show the program version and exit"
msgstr "Mostrar la versión del programa y salir"
#. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1270
+#: ../client/pk-console.c:1271
msgid "Set the filter, e.g. installed"
msgstr "Establecer el filtro, p. ej. instalado"
+#. TRANSLATORS: command line argument, use a non-standard install prefix
+#: ../client/pk-console.c:1274
+msgid "Set the install root, e.g. '/' or '/mnt/ltsp'"
+msgstr "Establecer la raÃz de instalación, p. ej., '/', o '/mnt/ltsp'"
+
#. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1273
+#: ../client/pk-console.c:1277
msgid "Exit without waiting for actions to complete"
msgstr "Salir sin esperar que las acciones se completen"
#. command line argument, do we ask questions
-#: ../client/pk-console.c:1276
+#: ../client/pk-console.c:1280
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:527
msgid "Install the packages without asking for confirmation"
msgstr "Instalar los paquetes sin confirmación"
#. TRANSLATORS: command line argument, this command is not a priority
-#: ../client/pk-console.c:1279
+#: ../client/pk-console.c:1283
msgid "Run the command using idle network bandwidth and also using less power"
msgstr "Ejecuta el comando utilizando menos potencia, y el ancho de bando libre"
#. TRANSLATORS: command line argument, just output without fancy formatting
-#: ../client/pk-console.c:1282
+#: ../client/pk-console.c:1286
msgid "Print to screen a machine readable output, rather than using animated widgets"
msgstr "Imprime en la pantalla una salida legible por una máquina, en lugar de utilizar widgets animados"
#. TRANSLATORS: we failed to contact the daemon
-#: ../client/pk-console.c:1304
+#: ../client/pk-console.c:1308
msgid "Failed to contact PackageKit"
msgstr "Falló al contactar con PackageKit"
#. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1365
+#: ../client/pk-console.c:1369
msgid "The proxy could not be set"
msgstr "No se pudo definir el proxy"
#. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1377
+#: ../client/pk-console.c:1381
+msgid "The install root could not be set"
+msgstr "La raÃz de instalación no pudo ser definida"
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1393
msgid "The filter specified was invalid"
msgstr "El filtro especificado fue inválido"
#. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1396
+#: ../client/pk-console.c:1412
msgid "A search type is required, e.g. name"
msgstr "Se necesita un tipo de búsqueda, por ejemplo, nombre"
#. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1403
-#: ../client/pk-console.c:1415
-#: ../client/pk-console.c:1427
-#: ../client/pk-console.c:1439
+#: ../client/pk-console.c:1419
+#: ../client/pk-console.c:1431
+#: ../client/pk-console.c:1443
+#: ../client/pk-console.c:1455
msgid "A search term is required"
msgstr "Se necesita un término de búsqueda"
#. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1449
+#: ../client/pk-console.c:1465
msgid "Invalid search type"
msgstr "Tipo de búsqueda inválido"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1455
+#: ../client/pk-console.c:1471
msgid "A package name to install is required"
msgstr "Se necesita un nombre de paquete a instalar"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1464
+#: ../client/pk-console.c:1480
msgid "A filename to install is required"
msgstr "Se requiere un nombre de archivo a instalar"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1476
+#: ../client/pk-console.c:1492
msgid "A type, key_id and package_id are required"
msgstr "Se necesita un tipo, key_id y package_id"
#. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:1487
+#: ../client/pk-console.c:1503
msgid "A package name to remove is required"
msgstr "Necesita un nombre de paquete para eliminar"
#. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:1496
+#: ../client/pk-console.c:1512
msgid "A destination directory and the package names to download are required"
msgstr "Se necesita un directorio de destino y los nombres de los paquetes a descargar"
#. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:1503
+#: ../client/pk-console.c:1519
msgid "Directory not found"
msgstr "Directorio no encontrado"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1512
+#: ../client/pk-console.c:1528
msgid "A licence identifier (eula-id) is required"
msgstr "Se necesita un identificador de licencia (eula-id)"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1523
+#: ../client/pk-console.c:1539
msgid "A transaction identifier (tid) is required"
msgstr "Se necesita un identificador de transacción (tid)"
#. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:1544
+#: ../client/pk-console.c:1560
msgid "A package name to resolve is required"
msgstr "Se necesita un nombre de paquete para resolver"
#. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:1555
-#: ../client/pk-console.c:1566
+#: ../client/pk-console.c:1571
+#: ../client/pk-console.c:1582
msgid "A repository name is required"
msgstr "Se necesita un nombre de repositorio"
#. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:1577
+#: ../client/pk-console.c:1593
msgid "A repo name, parameter and value are required"
msgstr "Debe especificar un nombre de repositorio, parámetro y valor"
#. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:1594
+#: ../client/pk-console.c:1610
msgid "An action, e.g. 'update-system' is required"
msgstr "Debe especificar una acción, por ejemplo, «update-system»"
#. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:1601
+#: ../client/pk-console.c:1617
msgid "A correct role is required"
msgstr "Se necesita un rol correcto"
#. TRANSLATORS: The user did not provide a package name
#. TRANSLATORS: This is when the user fails to supply the package name
-#: ../client/pk-console.c:1611
-#: ../client/pk-console.c:1626
-#: ../client/pk-console.c:1635
-#: ../client/pk-console.c:1655
-#: ../client/pk-console.c:1664
+#: ../client/pk-console.c:1627
+#: ../client/pk-console.c:1642
+#: ../client/pk-console.c:1651
+#: ../client/pk-console.c:1671
+#: ../client/pk-console.c:1680
#: ../client/pk-generate-pack.c:316
msgid "A package name is required"
msgstr "Se necesita un nombre de paquete"
#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:1644
+#: ../client/pk-console.c:1660
msgid "A package provide string is required"
msgstr "Se necesita la cadena de lo que proporciona el paquete"
#. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:1724
+#: ../client/pk-console.c:1740
#, c-format
msgid "Option '%s' is not supported"
msgstr "La opción '%s' no está soportada"
#. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:1734
+#: ../client/pk-console.c:1750
msgid "Command failed"
msgstr "Falló el comando"
@@ -1721,38 +1731,42 @@ msgid "Authentication is required to change software source parameters"
msgstr "Es necesario autenticarse para modificar parámetros de una fuente de software"
#: ../policy/org.freedesktop.packagekit.policy.in.h:11
+msgid "Authentication is required to change the location used to decompress packages"
+msgstr "Es necesario autenticarse para modificar la ubicación utilizada para descomprimir paquetes"
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:12
msgid "Authentication is required to consider a key used for signing packages as trusted"
msgstr "Es necesario autenticarse para considerar confiable a una clave utilizada para identificar paquetes"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:12
+#: ../policy/org.freedesktop.packagekit.policy.in.h:13
msgid "Authentication is required to install a signed package"
msgstr "Es necesario autenticarse para instalar un paquete firmado"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:13
+#: ../policy/org.freedesktop.packagekit.policy.in.h:14
msgid "Authentication is required to install an untrusted package"
msgstr "Es necesario autenticarse para instalar un paquete no confiable"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:14
+#: ../policy/org.freedesktop.packagekit.policy.in.h:15
msgid "Authentication is required to refresh the system sources"
msgstr "Es necesario autenticarse para actualizar las fuentes del sistema"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:15
+#: ../policy/org.freedesktop.packagekit.policy.in.h:16
msgid "Authentication is required to reload the device with a new driver"
msgstr "Es necesario autenticarse para recargar el dispositivo con un controlador nuevo"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:16
+#: ../policy/org.freedesktop.packagekit.policy.in.h:17
msgid "Authentication is required to remove packages"
msgstr "Es necesario autenticarse para eliminar paquetes"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:17
+#: ../policy/org.freedesktop.packagekit.policy.in.h:18
msgid "Authentication is required to rollback a transaction"
msgstr "Es necesario autenticarse para deshacer una transacción"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:18
+#: ../policy/org.freedesktop.packagekit.policy.in.h:19
msgid "Authentication is required to set the network proxy used for downloading packages"
msgstr "Es necesario autenticarse para modificar el proxy de red utilizado para descargar paquetes"
-#: ../policy/org.freedesktop.packagekit.policy.in.h:19
+#: ../policy/org.freedesktop.packagekit.policy.in.h:20
msgid "Authentication is required to update packages"
msgstr "Es necesario autenticarse para actualizar paquetes"
@@ -1761,16 +1775,26 @@ msgstr "Es necesario autenticarse para actualizar paquetes"
#. authentication, but a different user id needs the admin password
#. to cancel another users task.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:25
+#: ../policy/org.freedesktop.packagekit.policy.in.h:26
msgid "Cancel foreign task"
msgstr "Cancelar tarea externa"
#. SECURITY:
+#. - This is used when users want to install to a different prefix, for
+#. instance to a LTSP image or a virtual machine.
+#. - This could be used to overwrite files not owned by the user using
+#. a carefully created package file.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:33
+msgid "Change location that packages are installed"
+msgstr "Modificar la ubicación en donde instalar los paquetes"
+
+#. SECURITY:
#. - Normal users require admin authentication to enable or disable
#. software sources as this can be used to enable new updates or
#. install different versions of software.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:31
+#: ../policy/org.freedesktop.packagekit.policy.in.h:39
msgid "Change software source parameters"
msgstr "Modificar los parámetros de fuente de software"
@@ -1780,7 +1804,7 @@ msgstr "Modificar los parámetros de fuente de software"
#. - Paranoid users (or parents!) can change this to 'auth_admin' or
#. 'auth_admin_keep'.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:38
+#: ../policy/org.freedesktop.packagekit.policy.in.h:46
msgid "Install signed package"
msgstr "Instalar paquete firmado"
@@ -1790,7 +1814,7 @@ msgstr "Instalar paquete firmado"
#. password would be a massive security hole.
#. - This is not retained as each package should be authenticated.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:45
+#: ../policy/org.freedesktop.packagekit.policy.in.h:53
msgid "Install untrusted local file"
msgstr "Instalar archivo local no-confiable"
@@ -1798,7 +1822,7 @@ msgstr "Instalar archivo local no-confiable"
#. - Normal users do not require admin authentication to refresh the
#. cache, as this doesn't actually install or remove software.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:50
+#: ../policy/org.freedesktop.packagekit.policy.in.h:58
msgid "Refresh system sources"
msgstr "Actualizar las fuentes del sistema"
@@ -1809,7 +1833,7 @@ msgstr "Actualizar las fuentes del sistema"
#. try to rebind drivers in use, for instance security authentication
#. devices.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:58
+#: ../policy/org.freedesktop.packagekit.policy.in.h:66
msgid "Reload a device"
msgstr "Recargar un dispositivo"
@@ -1822,7 +1846,7 @@ msgstr "Recargar un dispositivo"
#. be removed. If this is not possible, change this authentication to
#. 'auth_admin'.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:68
+#: ../policy/org.freedesktop.packagekit.policy.in.h:76
msgid "Remove package"
msgstr "Eliminar paquete"
@@ -1831,7 +1855,7 @@ msgstr "Eliminar paquete"
#. as this will change a large number of packages, and could expose the
#. system to previously patched security vulnerabilities.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:74
+#: ../policy/org.freedesktop.packagekit.policy.in.h:82
msgid "Rollback to a previous transaction"
msgstr "Deshacer hasta una transacción anterior"
@@ -1839,7 +1863,7 @@ msgstr "Deshacer hasta una transacción anterior"
#. - Normal users do not require admin authentication to set the proxy
#. used for downloading packages.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:79
+#: ../policy/org.freedesktop.packagekit.policy.in.h:87
msgid "Set network proxy"
msgstr "Establecer el proxy de la red"
@@ -1849,7 +1873,7 @@ msgstr "Establecer el proxy de la red"
#. without a secure authentication.
#. - This is not kept as each package should be authenticated.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:86
+#: ../policy/org.freedesktop.packagekit.policy.in.h:94
msgid "Trust a key used for signing packages"
msgstr "Confiar en una llave utilizada para firmar paquetes"
@@ -1860,7 +1884,7 @@ msgstr "Confiar en una llave utilizada para firmar paquetes"
#. - Changing this to anything other than 'yes' will break unattended
#. updates.
#.
-#: ../policy/org.freedesktop.packagekit.policy.in.h:94
+#: ../policy/org.freedesktop.packagekit.policy.in.h:102
msgid "Update packages"
msgstr "Actualizar paquetes"
@@ -1997,316 +2021,226 @@ msgstr "Mostrar información extra de depuración"
#~ msgstr ""
#~ "Un software considerado maligno puede provocar diferentes clases de daño, "
#~ "por ejemplo, podrÃa dañar su computadora. "
-
#~ msgid "Transaction failed with no error"
#~ msgstr "La transacción fallida sin error"
-
#~ msgid "Failed to get transaction list"
#~ msgstr "Falló al obtener la lista de transacciones"
-
#~ msgid "Please restart the application as it is being used."
#~ msgstr "Reinicie la aplicación que está usando."
-
#~ msgid "The package %s is already installed"
#~ msgstr "El paquete %s ya está instalado"
-
#~ msgid "The package %s could not be installed: %s"
#~ msgstr "No se pudo instalar el paquete %s: %s"
-
#~ msgid "The package install was canceled!"
#~ msgstr "¡Se canceló la instalación del paquete!"
-
#~ msgid "This tool could not install the packages: %s"
#~ msgstr "Esta herramienta no pudo instalar los paquetes: %s"
-
#~ msgid "This tool could not install the files: %s"
#~ msgstr "Esta herramienta no pudo instalar los archivos: %s"
-
#~ msgid "This tool could not remove %s: %s"
#~ msgstr "Esta herramienta no pudo eliminar %s: %s"
-
#~ msgid "This tool could not remove the packages: %s"
#~ msgstr "Esta herramienta no pudo eliminar los paquetes: %s"
-
#~ msgid "Proceed with additional packages?"
#~ msgstr "¿Proceder con los paquetes adicionales?"
-
#~ msgid "The package removal was canceled!"
#~ msgstr "Se canceló la eliminación de paquetes"
-
#~ msgid "This tool could not download the package %s as it could not be found"
#~ msgstr ""
#~ "Esta herramienta no pudo descargar el paquete %s debido a que no se "
#~ "encontró"
-
#~ msgid "This tool could not download the packages: %s"
#~ msgstr "Esta herramienta no pudo descargar los paquetes: %s"
-
#~ msgid "This tool could not update %s: %s"
#~ msgstr "Esta herramienta no pudo actualizar %s: %s"
-
#~ msgid "The package update was canceled!"
#~ msgstr "¡Se canceló la actualización del paquete!"
-
#~ msgid "This tool could not get the requirements for %s: %s"
#~ msgstr "Esta herramienta no pudo obtener los requerimientos de %s: %s"
-
#~ msgid "This tool could not get the dependencies for %s: %s"
#~ msgstr "Esta herramienta no pudo obtener las dependencias de %s: %s"
-
#~ msgid "This tool could not get package details for %s: %s"
#~ msgstr "Esta herramienta no pudo obtener los detalles del paquete %s: %s"
-
#~ msgid "This tool could not find the files for %s: %s"
#~ msgstr "Esta herramienta no pudo encontrar los archivos de %s: %s"
-
#~ msgid "This tool could not get the file list for %s: %s"
#~ msgstr "Esta herramienta no pudo obtener la lista de archivos de %s: %s"
-
#~ msgid "File already exists: %s"
#~ msgstr "El archivo ya existe: %s"
-
#~ msgid "This tool could not get package list: %s"
#~ msgstr "Esta herramienta no pudo obtener la lista de paquetes: %s"
-
#~ msgid "Failed to save to disk"
#~ msgstr "Falló al guardar en el disco"
-
#~ msgid "File does not exist: %s"
#~ msgstr "El archivo no existe: %s"
-
#~ msgid "Packages to add"
#~ msgstr "Paquetes para añadir"
-
#~ msgid "Packages to remove"
#~ msgstr "Paquetes para eliminar"
-
#~ msgid "No new packages need to be installed"
#~ msgstr "No hay paquetes nuevos para instalar"
-
#~ msgid "not found."
#~ msgstr "no encontrado."
-
#~ msgid "No packages can be found to install"
#~ msgstr "No se encontró ningún paquete para instalar"
-
#~ msgid "This tool could not find the update details for %s: %s"
#~ msgstr ""
#~ "Esta herramienta no pudo encontrar los detalles de actualización de %s: %s"
-
#~ msgid "This tool could not get the update details for %s: %s"
#~ msgstr ""
#~ "Esta herramienta no pudo obtener los detalles de actualización de %s: %s"
-
#~ msgid "Error:"
#~ msgstr "Error:"
-
#~ msgid "Repository signature required"
#~ msgstr "Se requiere la firma del repositorio"
-
#~ msgid "End user license agreement required"
#~ msgstr "Se requiere un acuerdo de licencia de usuario final"
-
#~ msgid "Do you agree to this license?"
#~ msgstr "¿Está de acuerdo con esta licencia?"
-
#~ msgid "The license was refused."
#~ msgstr "Se rechazó la licencia."
-
#~ msgid "This tool could not connect to system DBUS."
#~ msgstr "Esta herramienta no se pudo conectar al DBUS del sistema."
-
#~ msgid "A package name or filename to install is required"
#~ msgstr "Se requiere un nombre de paquete o nombre de archivo para instalar"
-
#~ msgid "A list file name to create is required"
#~ msgstr "Se necesita un nombre de archivo de la lista"
-
#~ msgid "A list file to open is required"
#~ msgstr "Se necesita un archivo de lista para abrir"
-
#~ msgid "Incorrect privileges for this operation"
#~ msgstr "Privilegios incorrectos para esta operación"
-
#~ msgid "Cannot show the list of transactions"
#~ msgstr "No es posible mostrar la lista de transacciones"
-
#~ msgid "EULA ID"
#~ msgstr "ID del acuerdo de licencia de usuario final (EULA) "
-
#~ msgid "Media ID"
#~ msgstr "ID de medio"
-
#~ msgid "Main cache file to use (if not specififed, default is used)"
#~ msgstr ""
#~ "Archivo caché principal a usar (si no se especifica, se usará el "
#~ "predeterminado)"
-
#~ msgid "Source cache file to add to the main database"
#~ msgstr "Archivo caché fuente para agregar a la base de datos principal"
-
#~ msgid "Icon directory"
#~ msgstr "Directorio de Iconos"
-
#~ msgid "Name of the remote repo"
#~ msgstr "Nombre del repo remoto"
-
#~ msgid "PackageKit Application Database Installer"
#~ msgstr "Instalador de la Base de Datos de Aplicaciones de PackageKit"
-
#~ msgid "Main database file to use (if not specififed, default is used)"
#~ msgstr ""
#~ "Base de datos principal a usar (si no se especifica se usará el "
#~ "predeterminado)"
-
#~ msgid "You need to specify a search type, e.g. name"
#~ msgstr "Debe especificar el tipo de búsqueda, por ejemplo, nombre"
-
#~ msgid "You need to specify a search term"
#~ msgstr "Debe especificar un término de búsqueda"
-
#~ msgid "You need to specify a package to remove"
#~ msgstr "Debe especificar un paquete a eliminar"
-
#~ msgid "You need to specify a package name to resolve"
#~ msgstr "Debe especificar un nombre de paquete a resolver"
-
#~ msgid "You need to specify a repository name"
#~ msgstr "Debe especificar un nombre de repositorio"
-
#~ msgid "You need to specify a correct role"
#~ msgstr "Debe especificar un rol correcto"
-
#~ msgid "You need to specify a package to find the details for"
#~ msgstr "Debe especificar un paquete para el que buscar la descripción"
-
#~ msgid "You need to specify a package to find the files for"
#~ msgstr "Debe especificar un paquete para el que buscar los archivos"
-
#~ msgid "You need to specify a list file to open"
#~ msgstr "Debe especificar un archivo de lista a abrir"
-
#~ msgid "This tool could not remove the packages: '%s'"
#~ msgstr "Esta herramienta no pudo eliminar los paquetes: '%s'"
-
#~ msgid "Install local file"
#~ msgstr "Instalar archivo local"
-
#~ msgid "Okay to import key?"
#~ msgstr "¿De acuerto con importer la clave?"
-
#~ msgid "Did not import key"
#~ msgstr "No se importó la clave"
-
#~ msgid "Do you agree?"
#~ msgstr "¿Está de acuerdo?"
-
#~ msgid "Could not find package to remove"
#~ msgstr "No se pudo encontrar el paquete a eliminar"
-
#~ msgid "Could not find package to update"
#~ msgstr "No se pudo encontrar el paquete a actualizar"
-
#~ msgid "Could not find what packages require"
#~ msgstr "No se pudo encontrar cuales paquetes requiere este paquete"
-
#~ msgid "Could not find details for"
#~ msgstr "No se pudieron obtener los detalles de "
#, fuzzy
#~ msgid "Could not set database readonly"
#~ msgstr "No se pudo abrir la base de datos: %s"
-
#~ msgid "Could not open database: %s"
#~ msgstr "No se pudo abrir la base de datos: %s"
-
#~ msgid "You probably need to run this program as the root user"
#~ msgstr "Probablemente necesita ejecutar este programa como el usuario root"
-
#~ msgid "<span color='#%06x' underline='single' size='larger'>Run %s</span>"
#~ msgstr ""
#~ "<span color='#%06x' underline='single' size='larger'>Ejecutar %s</span>"
-
#~ msgid "<big>%s</big>"
#~ msgstr "<big>%s</big>"
-
#~ msgid ""
#~ "\n"
#~ "<span color='#%06x' underline='single'>Run version %s now</span>"
#~ msgstr ""
#~ "\n"
#~ "<span color='#%06x' underline='single'>Ejecutar versión %s ahora</span>"
-
#~ msgid ""
#~ "\n"
#~ "<span color='#%06x' underline='single'>Run now</span>"
#~ msgstr ""
#~ "\n"
#~ "<span color='#%06x' underline='single'>Ejecutar ahora</span>"
-
#~ msgid ""
#~ "\n"
#~ "<span color='#%06x' underline='single'>Upgrade to version %s</span>"
#~ msgstr ""
#~ "\n"
#~ "<span color='#%06x' underline='single'>Actualizar a la versión %s</span>"
-
#~ msgid ""
#~ "<span color='#%06x' underline='single' size='larger'>Install %s Now</span>"
#~ msgstr ""
#~ "<span color='#%06x' underline='single' size='larger'>Instalar %s Ahora</"
#~ "span>"
-
#~ msgid ""
#~ "\n"
#~ "<small>Version: %s</small>"
#~ msgstr ""
#~ "\n"
#~ "<small>Versión: %s</small>"
-
#~ msgid "failed to download: invalid package_id and/or directory"
#~ msgstr "falló la descarga: id de paquete inválido y/o directorio"
-
#~ msgid "Could not find a valid metadata file"
#~ msgstr "No se pudo encontrar un archivo de metadatos válido"
-
#~ msgid "Okay to download the additional packages"
#~ msgstr "Listo para descargar los paquetes adicionales"
-
#~ msgid "You need to specify the pack name and packages to be packed\n"
#~ msgstr "Debe especificar el nombre de grupo y los paquetes a agrupar\n"
-
#~ msgid ""
#~ "Invalid name for the service pack, Specify a name with .servicepack "
#~ "extension\n"
#~ msgstr ""
#~ "Nombre inválido para el paquete de servicio. Especifique un nombre con la "
#~ "extensión .servicepack\n"
-
#~ msgid "Authentication is required to install a local file"
#~ msgstr "Se requiere autenticación para instalar un archivo local"
-
#~ msgid "Authentication is required to install a security signature"
#~ msgstr "Se requiere autenticación para instalar una firma de seguridad"
-
#~ msgid "Authentication is required to update all packages"
#~ msgstr "Se requiere autenticación para actualizar todos los paquetes"
-
#~ msgid "Update all packages"
#~ msgstr "Actualizar todos los paquetes"
-
#~ msgid ""
#~ "Could not find a package with that name to install, or package already "
#~ "installed"
#~ msgstr ""
#~ "No se pudo encontrar un paquete con ese nombre para instalar, o el "
#~ "paquete ya está instalado"
-
#~ msgid "Could not find a package with that name to update"
#~ msgstr "No se pudo encontrar un paquete con ese nombre para actualizar"
-
#~ msgid "Could not find a description for this package"
#~ msgstr "No se pudo encontrar una descripcion para este paquete"
-
#~ msgid "You need to specify a package to find the description for"
#~ msgstr "Debe especificar un paquete para el que buscar la descripción"
+
commit b5d70ba0c4b77e1e181edb5d185de84b5cda396d
Author: Richard Hughes <richard at hughsie.com>
Date: Wed Apr 28 16:38:55 2010 +0100
Allow clients to request a relocatable root, but only with admin authority
diff --git a/backends/yum/pk-backend-yum.c b/backends/yum/pk-backend-yum.c
index b6862f0..4070dae 100644
--- a/backends/yum/pk-backend-yum.c
+++ b/backends/yum/pk-backend-yum.c
@@ -573,10 +573,11 @@ static void
backend_initialize (PkBackend *backend)
{
gboolean ret;
- GFile *file;
+ GFile *file = NULL;
GError *error = NULL;
GKeyFile *key_file = NULL;
gchar *config_file = NULL;
+ const gchar *root;
/* create private area */
priv = g_new0 (PkBackendYumPrivate, 1);
@@ -588,6 +589,13 @@ backend_initialize (PkBackend *backend)
pk_backend_spawn_set_name (priv->spawn, "yum");
pk_backend_spawn_set_allow_sigkill (priv->spawn, FALSE);
+ /* this backend does not support a relocatable root */
+ root = pk_backend_get_root (backend);
+ if (g_strcmp0 (root, "/") != 0) {
+ pk_backend_error_code (backend, PK_ERROR_ENUM_INSTALL_ROOT_INVALID, "backend does not support this root: '%s'", root);
+ goto out;
+ }
+
/* setup a file monitor on the repos directory */
file = g_file_new_for_path (YUM_REPOS_DIRECTORY);
priv->monitor = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, NULL, &error);
@@ -651,7 +659,7 @@ backend_initialize (PkBackend *backend)
/* ZifStoreLocal */
priv->store_local = zif_store_local_new ();
- ret = zif_store_local_set_prefix (priv->store_local, "/", &error);
+ ret = zif_store_local_set_prefix (priv->store_local, root, &error);
if (!ret) {
pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "failed to set prefix: %s", error->message);
g_error_free (error);
@@ -686,8 +694,10 @@ backend_initialize (PkBackend *backend)
backend_profile ("read groups");
out:
g_free (config_file);
- g_key_file_free (key_file);
- g_object_unref (file);
+ if (key_file != NULL)
+ g_key_file_free (key_file);
+ if (file != NULL)
+ g_object_unref (file);
}
/**
diff --git a/client/pk-console.c b/client/pk-console.c
index 24a4402..34e4132 100644
--- a/client/pk-console.c
+++ b/client/pk-console.c
@@ -1250,6 +1250,7 @@ main (int argc, char *argv[])
GOptionContext *context;
gchar *options_help;
gchar *filter = NULL;
+ gchar *root = NULL;
gchar *summary = NULL;
const gchar *mode;
const gchar *http_proxy;
@@ -1268,6 +1269,9 @@ main (int argc, char *argv[])
{ "filter", '\0', 0, G_OPTION_ARG_STRING, &filter,
/* TRANSLATORS: command line argument, use a filter to narrow down results */
_("Set the filter, e.g. installed"), NULL},
+ { "root", '\0', 0, G_OPTION_ARG_STRING, &root,
+ /* TRANSLATORS: command line argument, use a non-standard install prefix */
+ _("Set the install root, e.g. '/' or '/mnt/ltsp'"), NULL},
{ "nowait", 'n', 0, G_OPTION_ARG_NONE, &nowait,
/* TRANSLATORS: command line argument, work asynchronously */
_("Exit without waiting for actions to complete"), NULL},
@@ -1369,6 +1373,18 @@ main (int argc, char *argv[])
}
}
+ /* set the install root if set */
+ if (root != NULL) {
+ ret = pk_control_set_root (control, root, NULL, &error_local);
+ if (!ret) {
+ /* TRANSLATORS: The user specified an incorrect filter */
+ error = g_error_new (1, 0, "%s: %s", _("The install root could not be set"), error_local->message);
+ g_error_free (error_local);
+ retval = PK_EXIT_CODE_CANNOT_SETUP;
+ goto out;
+ }
+ }
+
/* check filter */
if (filter != NULL) {
filters = pk_filter_bitfield_from_string (filter);
@@ -1738,6 +1754,7 @@ out:
g_free (options_help);
g_free (filter);
+ g_free (root);
g_free (summary);
g_object_unref (progressbar);
g_object_unref (control);
diff --git a/etc/PackageKit.conf.in b/etc/PackageKit.conf.in
index 054c659..c814e47 100644
--- a/etc/PackageKit.conf.in
+++ b/etc/PackageKit.conf.in
@@ -279,3 +279,17 @@ NoUpdateProcessList=/usr/lib/*/firefox
#
# default=true
UseThreadsInBackend=true
+
+# If a custom root should be used when installing packages
+#
+# A custom route can be used to install to a LTSP instance or a virtual machine
+# image, typically using chroot or by mounting an image using virt-inspector.
+#
+# Additional authentication is required to change the root from the default.
+#
+# Most users do not need to change this value, as you need to have setup a
+# native package database (e.g. the rpmdb) on the new root.
+#
+# default=/
+UseRoot=/
+
diff --git a/lib/packagekit-glib2/pk-control-sync.c b/lib/packagekit-glib2/pk-control-sync.c
index e7410c4..8da2ec0 100644
--- a/lib/packagekit-glib2/pk-control-sync.c
+++ b/lib/packagekit-glib2/pk-control-sync.c
@@ -197,6 +197,59 @@ pk_control_suggest_daemon_quit (PkControl *control, GCancellable *cancellable, G
}
/**
+ * pk_control_set_root_cb:
+ **/
+static void
+pk_control_set_root_cb (PkControl *control, GAsyncResult *res, PkControlHelper *helper)
+{
+ /* get the result */
+ helper->ret = pk_control_set_root_finish (control, res, helper->error);
+ g_main_loop_quit (helper->loop);
+}
+
+/**
+ * pk_control_set_root:
+ * @control: a valid #PkControl instance
+ * @root: the install root, e.g. '/'
+ * @cancellable: a #GCancellable or %NULL
+ * @error: A #GError or %NULL
+ *
+ * Sets the install root to use in the daemon.
+ * Warning: this function is synchronous, and may block. Do not use it in GUI
+ * applications.
+ *
+ * Return value: %TRUE if the root was set correctly
+ *
+ * Since: 0.6.4
+ **/
+gboolean
+pk_control_set_root (PkControl *control, const gchar *root, GCancellable *cancellable, GError **error)
+{
+ gboolean ret;
+ PkControlHelper *helper;
+
+ g_return_val_if_fail (PK_IS_CONTROL (control), FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ /* create temp object */
+ helper = g_new0 (PkControlHelper, 1);
+ helper->loop = g_main_loop_new (NULL, FALSE);
+ helper->error = error;
+
+ /* run async method */
+ pk_control_set_root_async (control, root, cancellable, (GAsyncReadyCallback) pk_control_set_root_cb, helper);
+ g_main_loop_run (helper->loop);
+
+ ret = helper->ret;
+
+ /* free temp object */
+ g_main_loop_unref (helper->loop);
+ g_free (helper);
+
+ return ret;
+}
+
+/**
* pk_control_set_proxy_cb:
**/
static void
diff --git a/lib/packagekit-glib2/pk-control-sync.h b/lib/packagekit-glib2/pk-control-sync.h
index 74be972..c25f536 100644
--- a/lib/packagekit-glib2/pk-control-sync.h
+++ b/lib/packagekit-glib2/pk-control-sync.h
@@ -36,6 +36,10 @@ gchar **pk_control_get_transaction_list (PkControl *control,
gboolean pk_control_suggest_daemon_quit (PkControl *control,
GCancellable *cancellable,
GError **error);
+gboolean pk_control_set_root (PkControl *control,
+ const gchar *root,
+ GCancellable *cancellable,
+ GError **error);
gboolean pk_control_set_proxy (PkControl *control,
const gchar *proxy_http,
const gchar *proxy_ftp,
diff --git a/lib/packagekit-glib2/pk-control.c b/lib/packagekit-glib2/pk-control.c
index 682d9c7..4982036 100644
--- a/lib/packagekit-glib2/pk-control.c
+++ b/lib/packagekit-glib2/pk-control.c
@@ -783,6 +783,154 @@ pk_control_set_proxy_finish (PkControl *control, GAsyncResult *res, GError **err
/***************************************************************************************************/
/**
+ * pk_control_set_root_state_finish:
+ **/
+static void
+pk_control_set_root_state_finish (PkControlState *state, const GError *error)
+{
+ /* get result */
+ if (state->ret) {
+ g_simple_async_result_set_op_res_gboolean (state->res, state->ret);
+ } else {
+ g_simple_async_result_set_from_error (state->res, error);
+ }
+
+ /* remove from list */
+ g_ptr_array_remove (state->control->priv->calls, state);
+ if (state->call != NULL)
+ egg_warning ("state array remove %p (%p)", state, state->call);
+ else
+ egg_debug ("state array remove %p", state);
+
+ /* complete */
+ g_simple_async_result_complete_in_idle (state->res);
+
+ /* deallocate */
+ if (state->cancellable != NULL) {
+ g_cancellable_disconnect (state->cancellable, state->cancellable_id);
+ g_object_unref (state->cancellable);
+ }
+ g_object_unref (state->res);
+ g_object_unref (state->control);
+ g_slice_free (PkControlState, state);
+}
+
+/**
+ * pk_control_set_root_cb:
+ **/
+static void
+pk_control_set_root_cb (DBusGProxy *root, DBusGProxyCall *call, PkControlState *state)
+{
+ GError *error = NULL;
+ gchar *tid = NULL;
+ gboolean ret;
+
+ /* finished this call */
+ state->call = NULL;
+
+ /* get the result */
+ ret = dbus_g_proxy_end_call (root, call, &error,
+ G_TYPE_INVALID);
+ if (!ret) {
+ egg_warning ("failed to set root: %s", error->message);
+ pk_control_set_root_state_finish (state, error);
+ g_error_free (error);
+ goto out;
+ }
+
+ /* save data */
+ state->ret = TRUE;
+
+ /* we're done */
+ pk_control_set_root_state_finish (state, NULL);
+out:
+ g_free (tid);
+}
+
+/**
+ * pk_control_set_root_async:
+ * @control: a valid #PkControl instance
+ * @root: an install root string such as "/mnt/ltsp"
+ * @cancellable: a #GCancellable or %NULL
+ * @callback: the function to run on completion
+ * @user_data: the data to pass to @callback
+ *
+ * Set the install root for the backend used by PackageKit
+ *
+ * Since: 0.6.4
+ **/
+void
+pk_control_set_root_async (PkControl *control, const gchar *root, GCancellable *cancellable,
+ GAsyncReadyCallback callback, gpointer user_data)
+{
+ GSimpleAsyncResult *res;
+ PkControlState *state;
+
+ g_return_if_fail (PK_IS_CONTROL (control));
+ g_return_if_fail (callback != NULL);
+
+ res = g_simple_async_result_new (G_OBJECT (control), callback, user_data, pk_control_set_root_async);
+
+ /* save state */
+ state = g_slice_new0 (PkControlState);
+ state->res = g_object_ref (res);
+ state->control = g_object_ref (control);
+ if (cancellable != NULL) {
+ state->cancellable = g_object_ref (cancellable);
+ state->cancellable_id = g_cancellable_connect (cancellable, G_CALLBACK (pk_control_cancellable_cancel_cb), state, NULL);
+ }
+
+ /* call D-Bus set_root async */
+ state->call = dbus_g_proxy_begin_call (control->priv->proxy, "SetRoot",
+ (DBusGProxyCallNotify) pk_control_set_root_cb, state, NULL,
+ G_TYPE_STRING, root,
+ G_TYPE_INVALID);
+ if (state->call == NULL)
+ egg_error ("failed to setup call, maybe OOM or no connection");
+
+ /* track state */
+ g_ptr_array_add (control->priv->calls, state);
+ egg_debug ("state array add %p (%p)", state, state->call);
+
+ g_object_unref (res);
+}
+
+/**
+ * pk_control_set_root_finish:
+ * @control: a valid #PkControl instance
+ * @res: the #GAsyncResult
+ * @error: A #GError or %NULL
+ *
+ * Gets the result from the asynchronous function.
+ *
+ * Return value: %TRUE if we set the root successfully
+ *
+ * Since: 0.6.4
+ **/
+gboolean
+pk_control_set_root_finish (PkControl *control, GAsyncResult *res, GError **error)
+{
+ GSimpleAsyncResult *simple;
+ gpointer source_tag;
+
+ g_return_val_if_fail (PK_IS_CONTROL (control), FALSE);
+ g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (res), FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ simple = G_SIMPLE_ASYNC_RESULT (res);
+ source_tag = g_simple_async_result_get_source_tag (simple);
+
+ g_return_val_if_fail (source_tag == pk_control_set_root_async, FALSE);
+
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+
+ return g_simple_async_result_get_op_res_gboolean (simple);
+}
+
+/***************************************************************************************************/
+
+/**
* pk_control_get_transaction_list_state_finish:
**/
static void
diff --git a/lib/packagekit-glib2/pk-control.h b/lib/packagekit-glib2/pk-control.h
index d3d14d1..7292cda 100644
--- a/lib/packagekit-glib2/pk-control.h
+++ b/lib/packagekit-glib2/pk-control.h
@@ -122,6 +122,14 @@ void pk_control_set_proxy_async (PkControl *control,
gboolean pk_control_set_proxy_finish (PkControl *control,
GAsyncResult *res,
GError **error);
+void pk_control_set_root_async (PkControl *control,
+ const gchar *root,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean pk_control_set_root_finish (PkControl *control,
+ GAsyncResult *res,
+ GError **error);
void pk_control_get_network_state_async (PkControl *control,
GCancellable *cancellable,
GAsyncReadyCallback callback,
diff --git a/lib/packagekit-glib2/pk-enum.c b/lib/packagekit-glib2/pk-enum.c
index 488eb65..a8de42f 100644
--- a/lib/packagekit-glib2/pk-enum.c
+++ b/lib/packagekit-glib2/pk-enum.c
@@ -194,6 +194,7 @@ static const PkEnumMatch enum_error[] = {
{PK_ERROR_ENUM_UPDATE_FAILED_DUE_TO_RUNNING_PROCESS, "failed-due-to-running-process"},
{PK_ERROR_ENUM_PACKAGE_DATABASE_CHANGED, "package-database-changed"},
{PK_ERROR_ENUM_PROVIDE_TYPE_NOT_SUPPORTED, "provide-type-not-supported"},
+ {PK_ERROR_ENUM_INSTALL_ROOT_INVALID, "install-root-invalid"},
{0, NULL}
};
diff --git a/lib/packagekit-glib2/pk-enum.h b/lib/packagekit-glib2/pk-enum.h
index 96e9974..2b121b7 100644
--- a/lib/packagekit-glib2/pk-enum.h
+++ b/lib/packagekit-glib2/pk-enum.h
@@ -361,6 +361,7 @@ typedef enum {
PK_ERROR_ENUM_UPDATE_FAILED_DUE_TO_RUNNING_PROCESS,
PK_ERROR_ENUM_PACKAGE_DATABASE_CHANGED,
PK_ERROR_ENUM_PROVIDE_TYPE_NOT_SUPPORTED,
+ PK_ERROR_ENUM_INSTALL_ROOT_INVALID,
PK_ERROR_ENUM_LAST
} PkErrorEnum;
diff --git a/policy/org.freedesktop.packagekit.policy.in b/policy/org.freedesktop.packagekit.policy.in
index b514a71..7d59fb3 100644
--- a/policy/org.freedesktop.packagekit.policy.in
+++ b/policy/org.freedesktop.packagekit.policy.in
@@ -197,6 +197,23 @@
</defaults>
</action>
+ <action id="org.freedesktop.packagekit.system-change-install-root">
+ <!-- SECURITY:
+ - This is used when users want to install to a different prefix, for
+ instance to a LTSP image or a virtual machine.
+ - This could be used to overwrite files not owned by the user using
+ a carefully created package file.
+ -->
+ <_description>Change location that packages are installed</_description>
+ <_message>Authentication is required to change the location used to decompress packages</_message>
+ <icon_name>security-high</icon_name>
+ <defaults>
+ <allow_any>no</allow_any>
+ <allow_inactive>no</allow_inactive>
+ <allow_active>auth_admin_keep</allow_active>
+ </defaults>
+ </action>
+
<action id="org.freedesktop.packagekit.device-rebind">
<!-- SECURITY:
- Normal users require admin authentication to rebind a driver
diff --git a/src/org.freedesktop.PackageKit.xml b/src/org.freedesktop.PackageKit.xml
index 3df51b1..9dfb832 100644
--- a/src/org.freedesktop.PackageKit.xml
+++ b/src/org.freedesktop.PackageKit.xml
@@ -352,6 +352,27 @@
</arg>
</method>
+ <!--*****************************************************************************************-->
+ <method name="SetRoot">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Sets the root used by the dameon backend.
+ </doc:para>
+ </doc:description>
+ <doc:permission>Callers need the org.freedesktop.packagekit.system-change-install-root</doc:permission>
+ </doc:doc>
+ <arg type="s" name="root" direction="in">
+ <doc:doc>
+ <doc:summary>
+ <doc:para>
+ The install root, e.g. <doc:tt>/</doc:tt> or <doc:tt>/mnt/ltsp</doc:tt>.
+ </doc:para>
+ </doc:summary>
+ </doc:doc>
+ </arg>
+ </method>
<!--*****************************************************************************************-->
<signal name="TransactionListChanged">
diff --git a/src/pk-backend-internal.h b/src/pk-backend-internal.h
index d7d4e0a..0628f71 100644
--- a/src/pk-backend-internal.h
+++ b/src/pk-backend-internal.h
@@ -64,6 +64,8 @@ gboolean pk_backend_set_name (PkBackend *backend,
gboolean pk_backend_set_proxy (PkBackend *backend,
const gchar *proxy_http,
const gchar *proxy_ftp);
+gboolean pk_backend_set_root (PkBackend *backend,
+ const gchar *root);
gchar *pk_backend_get_name (PkBackend *backend)
G_GNUC_WARN_UNUSED_RESULT;
gchar *pk_backend_get_description (PkBackend *backend)
diff --git a/src/pk-backend-spawn.c b/src/pk-backend-spawn.c
index 8fee5fd..6856337 100644
--- a/src/pk-backend-spawn.c
+++ b/src/pk-backend-spawn.c
@@ -675,6 +675,7 @@ pk_backend_spawn_get_envp (PkBackendSpawn *backend_spawn)
gchar *uri;
gchar *eulas;
gchar *transaction_id = NULL;
+ const gchar *value;
guint i;
GPtrArray *array;
gboolean ret;
@@ -725,6 +726,13 @@ pk_backend_spawn_get_envp (PkBackendSpawn *backend_spawn)
g_ptr_array_add (array, line);
}
+ /* ROOT */
+ value = pk_backend_get_root (priv->backend);
+ if (!egg_strzero (value)) {
+ line = g_strdup_printf ("%s=%s", "ROOT", value);
+ g_ptr_array_add (array, line);
+ }
+
/* NETWORK */
ret = pk_backend_is_online (priv->backend);
line = g_strdup_printf ("%s=%s", "NETWORK", ret ? "TRUE" : "FALSE");
diff --git a/src/pk-backend.c b/src/pk-backend.c
index 3b2b670..168d63e 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -97,6 +97,7 @@ struct _PkBackendPrivate
gchar *name;
gchar *proxy_ftp;
gchar *proxy_http;
+ gchar *root;
gpointer file_changed_data;
guint download_files;
guint last_percentage;
@@ -566,6 +567,36 @@ pk_backend_get_proxy_ftp (PkBackend *backend)
}
/**
+ * pk_backend_set_root:
+ **/
+gboolean
+pk_backend_set_root (PkBackend *backend, const gchar *root)
+{
+ g_return_val_if_fail (PK_IS_BACKEND (backend), FALSE);
+
+ /* NULL is actually the default, which is '/' */
+ if (root == NULL)
+ root = "/";
+
+ g_free (backend->priv->root);
+ backend->priv->root = g_strdup (root);
+ egg_debug ("install root now %s", backend->priv->root);
+ return TRUE;
+}
+
+/**
+ * pk_backend_get_root:
+ *
+ * Return value: root to use for installing, or %NULL
+ **/
+const gchar *
+pk_backend_get_root (PkBackend *backend)
+{
+ g_return_val_if_fail (PK_IS_BACKEND (backend), NULL);
+ return backend->priv->root;
+}
+
+/**
* pk_backend_lock:
*
* Responsible for initialising the external backend object.
@@ -2446,6 +2477,7 @@ pk_backend_finalize (GObject *object)
pk_backend_reset (backend);
g_free (backend->priv->proxy_http);
g_free (backend->priv->proxy_ftp);
+ g_free (backend->priv->root);
g_free (backend->priv->name);
g_free (backend->priv->locale);
g_free (backend->priv->frontend_socket);
@@ -3093,6 +3125,7 @@ pk_backend_init (PkBackend *backend)
backend->priv->transaction_id = NULL;
backend->priv->proxy_http = NULL;
backend->priv->proxy_ftp = NULL;
+ backend->priv->root = NULL;
backend->priv->file_changed_func = NULL;
backend->priv->file_changed_data = NULL;
backend->priv->last_package = NULL;
diff --git a/src/pk-backend.h b/src/pk-backend.h
index 48d083e..7f805f3 100644
--- a/src/pk-backend.h
+++ b/src/pk-backend.h
@@ -85,6 +85,7 @@ gboolean pk_backend_get_progress (PkBackend *backend,
guint pk_backend_get_runtime (PkBackend *backend);
gchar *pk_backend_get_proxy_ftp (PkBackend *backend);
gchar *pk_backend_get_proxy_http (PkBackend *backend);
+const gchar *pk_backend_get_root (PkBackend *backend);
gchar *pk_backend_get_locale (PkBackend *backend);
gchar *pk_backend_get_frontend_socket (PkBackend *backend);
diff --git a/src/pk-engine.c b/src/pk-engine.c
index 912e6aa..142ed16 100644
--- a/src/pk-engine.c
+++ b/src/pk-engine.c
@@ -98,8 +98,6 @@ struct PkEnginePrivate
#ifdef USE_SECURITY_POLKIT
PolkitAuthority *authority;
#endif
- gchar *proxy_http;
- gchar *proxy_ftp;
gchar *sender;
gboolean locked;
PkNetworkEnum network_state;
@@ -168,6 +166,7 @@ pk_engine_error_get_type (void)
ENUM_ENTRY (PK_ENGINE_ERROR_INVALID_STATE, "InvalidState"),
ENUM_ENTRY (PK_ENGINE_ERROR_REFUSED_BY_POLICY, "RefusedByPolicy"),
ENUM_ENTRY (PK_ENGINE_ERROR_CANNOT_SET_PROXY, "CannotSetProxy"),
+ ENUM_ENTRY (PK_ENGINE_ERROR_CANNOT_SET_ROOT, "CannotSetRoot"),
ENUM_ENTRY (PK_ENGINE_ERROR_NOT_SUPPORTED, "NotSupported"),
ENUM_ENTRY (PK_ENGINE_ERROR_CANNOT_ALLOCATE_TID, "CannotAllocateTid"),
ENUM_ENTRY (PK_ENGINE_ERROR_CANNOT_CHECK_AUTH, "CannotCheckAuth"),
@@ -691,14 +690,14 @@ pk_engine_suggest_daemon_quit (PkEngine *engine, GError **error)
* pk_engine_set_proxy_internal:
**/
static gboolean
-pk_engine_set_proxy_internal (PkEngine *engine, const gchar *sender)
+pk_engine_set_proxy_internal (PkEngine *engine, const gchar *sender, const gchar *proxy_http, const gchar *proxy_ftp)
{
gboolean ret;
guint uid;
gchar *session = NULL;
/* try to set the new proxy */
- ret = pk_backend_set_proxy (engine->priv->backend, engine->priv->proxy_http, engine->priv->proxy_ftp);
+ ret = pk_backend_set_proxy (engine->priv->backend, proxy_http, proxy_ftp);
if (!ret) {
egg_warning ("setting the proxy failed");
goto out;
@@ -719,8 +718,7 @@ pk_engine_set_proxy_internal (PkEngine *engine, const gchar *sender)
}
/* save to database */
- ret = pk_transaction_db_set_proxy (engine->priv->transaction_db, uid, session,
- engine->priv->proxy_http, engine->priv->proxy_ftp);
+ ret = pk_transaction_db_set_proxy (engine->priv->transaction_db, uid, session, proxy_http, proxy_ftp);
if (!ret) {
egg_warning ("failed to save the proxy in the database");
goto out;
@@ -735,6 +733,8 @@ typedef struct {
DBusGMethodInvocation *context;
PkEngine *engine;
gchar *sender;
+ gchar *value1;
+ gchar *value2;
} PkEngineDbusState;
#endif
@@ -743,15 +743,16 @@ typedef struct {
* pk_engine_action_obtain_authorization:
**/
static void
-pk_engine_action_obtain_authorization_finished_cb (GObject *source_object, GAsyncResult *res, PkEngineDbusState *state)
+pk_engine_action_obtain_proxy_authorization_finished_cb (PolkitAuthority *authority, GAsyncResult *res, PkEngineDbusState *state)
{
PolkitAuthorizationResult *result;
GError *error_local = NULL;
GError *error;
gboolean ret;
+ PkEnginePrivate *priv = state->engine->priv;
/* finish the call */
- result = polkit_authority_check_authorization_finish (state->engine->priv->authority, res, &error_local);
+ result = polkit_authority_check_authorization_finish (priv->authority, res, &error_local);
/* failed */
if (result == NULL) {
@@ -771,7 +772,7 @@ pk_engine_action_obtain_authorization_finished_cb (GObject *source_object, GAsyn
}
/* try to set the new proxy and save to database */
- ret = pk_engine_set_proxy_internal (state->engine, state->sender);
+ ret = pk_engine_set_proxy_internal (state->engine, state->sender, state->value1, state->value2);
if (!ret) {
error = g_error_new_literal (PK_ENGINE_ERROR, PK_ENGINE_ERROR_CANNOT_SET_PROXY,
"setting the proxy failed");
@@ -779,6 +780,10 @@ pk_engine_action_obtain_authorization_finished_cb (GObject *source_object, GAsyn
goto out;
}
+ /* only set after the auth success */
+ egg_debug ("changing http proxy to %s for %s", state->value1, state->sender);
+ egg_debug ("changing ftp proxy to %s for %s", state->value2, state->sender);
+
/* all okay */
dbus_g_method_return (state->context);
out:
@@ -788,6 +793,8 @@ out:
/* unref state, we're done */
g_object_unref (state->engine);
g_free (state->sender);
+ g_free (state->value1);
+ g_free (state->value2);
g_free (state);
}
#endif
@@ -886,14 +893,6 @@ pk_engine_set_proxy (PkEngine *engine, const gchar *proxy_http, const gchar *pro
goto out;
}
- /* save these so we can set them after the auth success */
- g_free (engine->priv->proxy_http);
- g_free (engine->priv->proxy_ftp);
- engine->priv->proxy_http = g_strdup (proxy_http);
- engine->priv->proxy_ftp = g_strdup (proxy_ftp);
- egg_debug ("changing http proxy to %s for %s", proxy_http, sender);
- egg_debug ("changing ftp proxy to %s for %s", proxy_ftp, sender);
-
#ifdef USE_SECURITY_POLKIT
/* check subject */
subject = polkit_system_bus_name_new (sender);
@@ -907,6 +906,8 @@ pk_engine_set_proxy (PkEngine *engine, const gchar *proxy_http, const gchar *pro
state->context = context;
state->engine = g_object_ref (engine);
state->sender = g_strdup (sender);
+ state->value1 = g_strdup (proxy_http);
+ state->value2 = g_strdup (proxy_ftp);
/* do authorization async */
polkit_authority_check_authorization (engine->priv->authority, subject,
@@ -914,7 +915,7 @@ pk_engine_set_proxy (PkEngine *engine, const gchar *proxy_http, const gchar *pro
details,
POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION,
NULL,
- (GAsyncReadyCallback) pk_engine_action_obtain_authorization_finished_cb,
+ (GAsyncReadyCallback) pk_engine_action_obtain_proxy_authorization_finished_cb,
state);
/* check_authorization ref's this */
@@ -945,6 +946,248 @@ out:
}
/**
+ * pk_engine_set_root_internal:
+ **/
+static gboolean
+pk_engine_set_root_internal (PkEngine *engine, const gchar *root)
+{
+ gboolean ret;
+ guint uid;
+ gchar *session = NULL;
+
+ /* try to set the new root */
+ ret = pk_backend_set_root (engine->priv->backend, root);
+ if (!ret) {
+ egg_warning ("setting the root failed");
+ goto out;
+ }
+
+ /* get uid */
+ uid = pk_dbus_get_uid (engine->priv->dbus, engine->priv->sender);
+ if (uid == G_MAXUINT) {
+ egg_warning ("failed to get the uid");
+ goto out;
+ }
+
+ /* get session */
+ session = pk_dbus_get_session (engine->priv->dbus, engine->priv->sender);
+ if (session == NULL) {
+ egg_warning ("failed to get the session");
+ goto out;
+ }
+
+ /* save to database */
+ ret = pk_transaction_db_set_root (engine->priv->transaction_db, uid, session, root);
+ if (!ret) {
+ egg_warning ("failed to save the root in the database");
+ goto out;
+ }
+out:
+ g_free (session);
+ return ret;
+}
+
+#ifdef USE_SECURITY_POLKIT
+/**
+ * pk_engine_action_obtain_authorization:
+ **/
+static void
+pk_engine_action_obtain_root_authorization_finished_cb (PolkitAuthority *authority, GAsyncResult *res, PkEngineDbusState *state)
+{
+ PolkitAuthorizationResult *result;
+ GError *error_local = NULL;
+ GError *error;
+ gboolean ret;
+ PkEnginePrivate *priv = state->engine->priv;
+
+ /* finish the call */
+ result = polkit_authority_check_authorization_finish (priv->authority, res, &error_local);
+
+ /* failed */
+ if (result == NULL) {
+ error = g_error_new (PK_ENGINE_ERROR, PK_ENGINE_ERROR_CANNOT_SET_PROXY,
+ "could not check for auth: %s", error_local->message);
+ dbus_g_method_return_error (state->context, error);
+ g_error_free (error_local);
+ goto out;
+ }
+
+ /* did not auth */
+ if (!polkit_authorization_result_get_is_authorized (result)) {
+ error = g_error_new_literal (PK_ENGINE_ERROR, PK_ENGINE_ERROR_CANNOT_SET_PROXY,
+ "failed to obtain auth");
+ dbus_g_method_return_error (state->context, error);
+ goto out;
+ }
+
+ /* try to set the new root and save to database */
+ ret = pk_engine_set_root_internal (state->engine, state->value1);
+ if (!ret) {
+ error = g_error_new_literal (PK_ENGINE_ERROR, PK_ENGINE_ERROR_CANNOT_SET_PROXY,
+ "setting the root failed");
+ dbus_g_method_return_error (state->context, error);
+ goto out;
+ }
+
+ /* save these so we can set them after the auth success */
+ egg_debug ("changing root to %s for %s", state->value1, state->sender);
+
+ /* all okay */
+ dbus_g_method_return (state->context);
+out:
+ if (result != NULL)
+ g_object_unref (result);
+
+ /* unref state, we're done */
+ g_object_unref (state->engine);
+ g_free (state->sender);
+ g_free (state->value1);
+ g_free (state->value2);
+ g_free (state);
+}
+#endif
+
+/**
+ * pk_engine_is_root_unchanged:
+ **/
+static gboolean
+pk_engine_is_root_unchanged (PkEngine *engine, const gchar *sender, const gchar *root)
+{
+ guint uid;
+ gboolean ret = FALSE;
+ gchar *session = NULL;
+ gchar *root_tmp = NULL;
+
+ /* get uid */
+ uid = pk_dbus_get_uid (engine->priv->dbus, sender);
+ if (uid == G_MAXUINT) {
+ egg_warning ("failed to get the uid for %s", sender);
+ goto out;
+ }
+
+ /* get session */
+ session = pk_dbus_get_session (engine->priv->dbus, sender);
+ if (session == NULL) {
+ egg_warning ("failed to get the session for %s", sender);
+ goto out;
+ }
+
+ /* find out if they are the same as what we tried to set before */
+ ret = pk_transaction_db_get_root (engine->priv->transaction_db, uid, session, &root_tmp);
+ if (!ret)
+ goto out;
+
+ /* are different? */
+ if (g_strcmp0 (root_tmp, root) != 0)
+ ret = FALSE;
+out:
+ g_free (session);
+ g_free (root_tmp);
+ return ret;
+}
+
+/**
+ * pk_engine_set_root:
+ **/
+void
+pk_engine_set_root (PkEngine *engine, const gchar *root, DBusGMethodInvocation *context)
+{
+ guint len;
+ GError *error = NULL;
+ gboolean ret;
+ gchar *sender = NULL;
+#ifdef USE_SECURITY_POLKIT
+ PolkitSubject *subject;
+ PolkitDetails *details;
+ PkEngineDbusState *state;
+#endif
+ g_return_if_fail (PK_IS_ENGINE (engine));
+
+ /* blank is default */
+ if (root == NULL ||
+ root[0] == '\0')
+ root = "/";
+
+ egg_debug ("SetRoot method called: %s", root);
+
+ /* check length of root */
+ len = egg_strlen (root, 1024);
+ if (len == 1024) {
+ error = g_error_new (PK_ENGINE_ERROR, PK_ENGINE_ERROR_CANNOT_SET_ROOT, "root was too long: %s", root);
+ dbus_g_method_return_error (context, error);
+ goto out;
+ }
+
+ /* check prefix of root */
+ if (root[0] != '/') {
+ error = g_error_new (PK_ENGINE_ERROR, PK_ENGINE_ERROR_CANNOT_SET_ROOT, "root is not absolute: %s", root);
+ dbus_g_method_return_error (context, error);
+ goto out;
+ }
+
+ /* save sender */
+ sender = dbus_g_method_get_sender (context);
+
+ /* is exactly the same root? */
+ ret = pk_engine_is_root_unchanged (engine, sender, root);
+ if (ret) {
+ egg_debug ("not changing root as the same as before");
+ dbus_g_method_return (context);
+ goto out;
+ }
+
+#ifdef USE_SECURITY_POLKIT
+ /* check subject */
+ subject = polkit_system_bus_name_new (engine->priv->sender);
+
+ /* insert details about the authorization */
+ details = polkit_details_new ();
+ polkit_details_insert (details, "role", pk_role_enum_to_string (PK_ROLE_ENUM_UNKNOWN));
+
+ /* cache state */
+ state = g_new0 (PkEngineDbusState, 1);
+ state->context = context;
+ state->engine = g_object_ref (engine);
+ state->sender = g_strdup (sender);
+ state->value1 = g_strdup (root);
+
+ /* do authorization async */
+ polkit_authority_check_authorization (engine->priv->authority, subject,
+ "org.freedesktop.packagekit.system-change-install-root",
+ details,
+ POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION,
+ NULL,
+ (GAsyncReadyCallback) pk_engine_action_obtain_root_authorization_finished_cb,
+ state);
+
+ /* check_authorization ref's this */
+ g_object_unref (details);
+#else
+ egg_warning ("*** THERE IS NO SECURITY MODEL BEING USED!!! ***");
+
+ /* try to set the new root and save to database */
+ ret = pk_engine_set_root_internal (engine, root);
+ if (!ret) {
+ error = g_error_new (PK_ENGINE_ERROR, PK_ENGINE_ERROR_CANNOT_SET_ROOT, "%s", "setting the root failed");
+ dbus_g_method_return_error (context, error);
+ goto out;
+ }
+
+ /* all okay, TODO: return only when done the polkit auth */
+ dbus_g_method_return (context);
+#endif
+
+ /* reset the timer */
+ pk_engine_reset_timer (engine);
+
+#ifdef USE_SECURITY_POLKIT
+ g_object_unref (subject);
+#endif
+out:
+ g_free (sender);
+}
+
+/**
* pk_engine_can_authorize:
**/
static PkAuthorizeEnum
@@ -1309,6 +1552,9 @@ pk_engine_init (PkEngine *engine)
DBusGConnection *connection;
gboolean ret;
gchar *filename;
+ gchar *root;
+ gchar *proxy_http;
+ gchar *proxy_ftp;
engine->priv = PK_ENGINE_GET_PRIVATE (engine);
engine->priv->notify_clients_of_upgrade = FALSE;
@@ -1409,9 +1655,16 @@ pk_engine_init (PkEngine *engine)
G_CALLBACK (pk_engine_binary_file_changed_cb), engine);
/* set the default proxy */
- engine->priv->proxy_http = pk_conf_get_string (engine->priv->conf, "ProxyHTTP");
- engine->priv->proxy_ftp = pk_conf_get_string (engine->priv->conf, "ProxyFTP");
- pk_backend_set_proxy (engine->priv->backend, engine->priv->proxy_http, engine->priv->proxy_ftp);
+ proxy_http = pk_conf_get_string (engine->priv->conf, "ProxyHTTP");
+ proxy_ftp = pk_conf_get_string (engine->priv->conf, "ProxyFTP");
+ pk_backend_set_proxy (engine->priv->backend, proxy_http, proxy_ftp);
+ g_free (proxy_http);
+ g_free (proxy_ftp);
+
+ /* set the default root */
+ root = pk_conf_get_string (engine->priv->conf, "UseRoot");
+ pk_backend_set_root (engine->priv->backend, root);
+ g_free (root);
/* get the StateHasChanged timeouts */
engine->priv->timeout_priority = (guint) pk_conf_get_int (engine->priv->conf, "StateChangedTimeoutPriority");
@@ -1478,8 +1731,6 @@ pk_engine_finalize (GObject *object)
g_object_unref (engine->priv->conf);
g_object_unref (engine->priv->dbus);
g_free (engine->priv->mime_types);
- g_free (engine->priv->proxy_http);
- g_free (engine->priv->proxy_ftp);
g_free (engine->priv->backend_name);
g_free (engine->priv->backend_description);
g_free (engine->priv->backend_author);
diff --git a/src/pk-engine.h b/src/pk-engine.h
index 9f5fa6f..a057419 100644
--- a/src/pk-engine.h
+++ b/src/pk-engine.h
@@ -59,6 +59,7 @@ typedef enum
PK_ENGINE_ERROR_INVALID_STATE,
PK_ENGINE_ERROR_REFUSED_BY_POLICY,
PK_ENGINE_ERROR_CANNOT_SET_PROXY,
+ PK_ENGINE_ERROR_CANNOT_SET_ROOT,
PK_ENGINE_ERROR_NOT_SUPPORTED,
PK_ENGINE_ERROR_CANNOT_ALLOCATE_TID,
PK_ENGINE_ERROR_CANNOT_CHECK_AUTH,
@@ -96,6 +97,9 @@ void pk_engine_set_proxy (PkEngine *engine,
const gchar *proxy_http,
const gchar *proxy_ftp,
DBusGMethodInvocation *context);
+void pk_engine_set_root (PkEngine *engine,
+ const gchar *root,
+ DBusGMethodInvocation *context);
void pk_engine_can_authorize (PkEngine *engine,
const gchar *action_id,
DBusGMethodInvocation *context);
diff --git a/src/pk-transaction-db.c b/src/pk-transaction-db.c
index 4fa41e9..ede1d5c 100644
--- a/src/pk-transaction-db.c
+++ b/src/pk-transaction-db.c
@@ -880,6 +880,169 @@ pk_transaction_db_init (PkTransactionDb *tdb)
statement = "CREATE TABLE proxy (created TEXT, proxy_http TEXT, proxy_ftp TEXT, uid INTEGER, session TEXT);";
sqlite3_exec (tdb->priv->db, statement, NULL, NULL, NULL);
}
+
+ /* transaction root (since 0.6.4) */
+ rc = sqlite3_exec (tdb->priv->db, "SELECT * FROM root LIMIT 1", NULL, NULL, &error_msg);
+ if (rc != SQLITE_OK) {
+ egg_debug ("adding table root: %s", error_msg);
+ statement = "CREATE TABLE root (created TEXT, root TEXT, uid INTEGER, session TEXT);";
+ sqlite3_exec (tdb->priv->db, statement, NULL, NULL, NULL);
+ }
+}
+
+/**
+ * pk_transaction_sqlite_root_cb:
+ **/
+static gint
+pk_transaction_sqlite_root_cb (void *data, gint argc, gchar **argv, gchar **col_name)
+{
+ gchar **root = (gchar **) data;
+ gint i;
+
+ g_return_val_if_fail (root != NULL, 0);
+
+ for (i=0; i<argc; i++) {
+ if (g_strcmp0 (col_name[i], "root") == 0) {
+ *root = g_strdup (argv[i]);
+ } else {
+ egg_warning ("%s = %s\n", col_name[i], argv[i]);
+ }
+ }
+ return 0;
+}
+
+/**
+ * pk_transaction_db_get_root:
+ * @tdb: the #PkTransactionDb instance
+ * @uid: the user ID of the user
+ * @session: the ConsoleKit session
+ * @root: the install root
+ *
+ * Retrieves the root information from the database.
+ *
+ * Return value: %TRUE if we matched a root
+ **/
+gboolean
+pk_transaction_db_get_root (PkTransactionDb *tdb, guint uid, const gchar *session,
+ gchar **root)
+{
+ gchar *error_msg = NULL;
+ gchar *statement;
+ gboolean ret = FALSE;
+ gint rc;
+
+ g_return_val_if_fail (PK_IS_TRANSACTION_DB (tdb), FALSE);
+ g_return_val_if_fail (uid != G_MAXUINT, FALSE);
+ g_return_val_if_fail (root != NULL, FALSE);
+
+ /* get existing data */
+ statement = g_strdup_printf ("SELECT root FROM root WHERE uid = '%i' AND session = '%s' LIMIT 1",
+ uid, session);
+ rc = sqlite3_exec (tdb->priv->db, statement, pk_transaction_sqlite_root_cb, root, &error_msg);
+ if (rc != SQLITE_OK) {
+ egg_warning ("SQL error: %s\n", error_msg);
+ sqlite3_free (error_msg);
+ goto out;
+ }
+
+ /* nothing matched */
+ if (*root == NULL) {
+ egg_debug ("no data");
+ goto out;
+ }
+
+ /* success, even if we got no data */
+ ret = TRUE;
+out:
+ g_free (statement);
+ return ret;
+}
+
+/**
+ * pk_transaction_db_set_root:
+ * @tdb: the #PkTransactionDb instance
+ * @uid: the user ID of the user
+ * @session: the ConsoleKit session
+ * @root: the HTTP root
+ *
+ * Saves the root install prefix to the database.
+ *
+ * Return value: %TRUE for success
+ **/
+gboolean
+pk_transaction_db_set_root (PkTransactionDb *tdb, guint uid, const gchar *session,
+ const gchar *root)
+{
+ gchar *timespec = NULL;
+ gchar *root_tmp = NULL;
+ gboolean ret = FALSE;
+ gint rc;
+ sqlite3_stmt *statement = NULL;
+
+ g_return_val_if_fail (PK_IS_TRANSACTION_DB (tdb), FALSE);
+ g_return_val_if_fail (uid != G_MAXUINT, FALSE);
+
+ /* check for previous entries */
+ ret = pk_transaction_db_get_root (tdb, uid, session, &root_tmp);
+ if (ret) {
+ egg_debug ("updated root %s for uid:%i and session:%s", root, uid, session);
+
+ /* prepare statement */
+ rc = sqlite3_prepare_v2 (tdb->priv->db,
+ "UPDATE root SET root = ? WHERE uid = ? AND session = ?",
+ -1, &statement, NULL);
+ if (rc != SQLITE_OK) {
+ egg_warning ("failed to prepare statement: %s", sqlite3_errmsg (tdb->priv->db));
+ goto out;
+ }
+
+ /* bind data, so that the freeform root text cannot be used to inject SQL */
+ sqlite3_bind_text (statement, 1, root, -1, SQLITE_STATIC);
+ sqlite3_bind_int (statement, 2, uid);
+ sqlite3_bind_text (statement, 3, session, -1, SQLITE_STATIC);
+
+ /* execute statement */
+ rc = sqlite3_step (statement);
+ if (rc != SQLITE_DONE) {
+ egg_warning ("failed to execute statement: %s", sqlite3_errmsg (tdb->priv->db));
+ goto out;
+ }
+ goto out;
+ }
+
+ /* insert new entry */
+ timespec = pk_iso8601_present ();
+ egg_debug ("set root %s for uid:%i and session:%s", root, uid, session);
+
+ /* prepare statement */
+ rc = sqlite3_prepare_v2 (tdb->priv->db,
+ "INSERT INTO root (created, uid, session, root) VALUES (?, ?, ?, ?)",
+ -1, &statement, NULL);
+ if (rc != SQLITE_OK) {
+ egg_warning ("failed to prepare statement: %s", sqlite3_errmsg (tdb->priv->db));
+ goto out;
+ }
+
+ /* bind data, so that the freeform root text cannot be used to inject SQL */
+ sqlite3_bind_text (statement, 1, timespec, -1, SQLITE_STATIC);
+ sqlite3_bind_int (statement, 2, uid);
+ sqlite3_bind_text (statement, 3, session, -1, SQLITE_STATIC);
+ sqlite3_bind_text (statement, 4, root, -1, SQLITE_STATIC);
+
+ /* execute statement */
+ rc = sqlite3_step (statement);
+ if (rc != SQLITE_DONE) {
+ egg_warning ("failed to execute statement: %s", sqlite3_errmsg (tdb->priv->db));
+ goto out;
+ }
+
+ ret = TRUE;
+out:
+ if (statement != NULL)
+ sqlite3_finalize (statement);
+ g_free (timespec);
+ g_free (root_tmp);
+ return ret;
}
/**
@@ -936,6 +1099,7 @@ pk_transaction_db_test (EggTest *test)
guint ms;
gchar *proxy_http = NULL;
gchar *proxy_ftp = NULL;
+ gchar *root = NULL;
guint seconds;
if (!egg_test_start (test, "PkTransactionDb"))
@@ -1066,6 +1230,35 @@ pk_transaction_db_test (EggTest *test)
else
egg_test_failed (test, "failed to get correct proxies, %s and %s", proxy_http, proxy_ftp);
+ /************************************************************
+ **************** ROOT ******************
+ ************************************************************/
+ egg_test_title (test, "can we set the root");
+ ret = pk_transaction_db_set_root (db, 500, "session1", "/mnt/chroot");
+ egg_test_assert (test, ret);
+
+ /************************************************************/
+ egg_test_title (test, "can we set the root (overwrite)");
+ ret = pk_transaction_db_set_root (db, 500, "session1", "/mnt/chroot2");
+ egg_test_assert (test, ret);
+
+ /************************************************************/
+ egg_test_title (test, "can we get the root (non-existant user)");
+ ret = pk_transaction_db_get_root (db, 501, "session1", &root);
+ if (root == NULL)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to get correct root: %s", root);
+
+ /************************************************************/
+ egg_test_title (test, "can we get the root (match)");
+ ret = pk_transaction_db_get_root (db, 500, "session1", &root);
+ if (g_strcmp0 (root, "/mnt/chroot2") == 0)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to get correct root: %s", root);
+
+ g_free (root);
g_free (proxy_http);
g_free (proxy_ftp);
g_object_unref (db);
diff --git a/src/pk-transaction-db.h b/src/pk-transaction-db.h
index 78d2998..05eef5a 100644
--- a/src/pk-transaction-db.h
+++ b/src/pk-transaction-db.h
@@ -87,6 +87,14 @@ gboolean pk_transaction_db_set_proxy (PkTransactionDb *tdb,
const gchar *session,
const gchar *proxy_http,
const gchar *proxy_ftp);
+gboolean pk_transaction_db_get_root (PkTransactionDb *tdb,
+ guint uid,
+ const gchar *session,
+ gchar **root);
+gboolean pk_transaction_db_set_root (PkTransactionDb *tdb,
+ guint uid,
+ const gchar *session,
+ const gchar *root);
G_END_DECLS
diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index a0e9d33..d4da443 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -1544,15 +1544,16 @@ out:
}
/**
- * pk_transaction_set_proxy:
+ * pk_transaction_set_session_state:
*/
static gboolean
-pk_transaction_set_proxy (PkTransaction *transaction, GError **error)
+pk_transaction_set_session_state (PkTransaction *transaction, GError **error)
{
gboolean ret = FALSE;
gchar *session = NULL;
gchar *proxy_http = NULL;
gchar *proxy_ftp = NULL;
+ gchar *root = NULL;
/* get session */
session = pk_dbus_get_session (transaction->priv->dbus, transaction->priv->sender);
@@ -1574,7 +1575,22 @@ pk_transaction_set_proxy (PkTransaction *transaction, GError **error)
g_set_error_literal (error, 1, 0, "failed to set the proxy");
goto out;
}
- egg_debug ("using http_proxy=%s, ftp_proxy=%s for %i:%s", proxy_http, proxy_ftp, transaction->priv->uid, session);
+
+ /* get from database */
+ ret = pk_transaction_db_get_root (transaction->priv->transaction_db, transaction->priv->uid, session, &root);
+ if (!ret) {
+ g_set_error_literal (error, 1, 0, "failed to get the root from the database");
+ goto out;
+ }
+
+ /* try to set the new proxy */
+ ret = pk_backend_set_root (transaction->priv->backend, root);
+ if (!ret) {
+ g_set_error_literal (error, 1, 0, "failed to set the root");
+ goto out;
+ }
+ egg_debug ("using http_proxy=%s, ftp_proxy=%s, root=%s for %i:%s",
+ proxy_http, proxy_ftp, root, transaction->priv->uid, session);
out:
g_free (proxy_http);
g_free (proxy_ftp);
@@ -1637,9 +1653,9 @@ pk_transaction_set_running (PkTransaction *transaction)
egg_debug ("setting role for %s to %s", priv->tid, pk_role_enum_to_string (priv->role));
/* set proxy */
- ret = pk_transaction_set_proxy (transaction, &error);
+ ret = pk_transaction_set_session_state (transaction, &error);
if (!ret) {
- egg_warning ("failed to set the proxy: %s", error->message);
+ egg_warning ("failed to set the session state: %s", error->message);
g_error_free (error);
}
commit 59d5111dd620a3978cd02946a94ecc7d9bc6e3cf
Author: Michael Andres <ma at suse.de>
Date: Wed Apr 28 15:05:37 2010 +0200
zypp: let libzypp determine whether a patch is needed.
- with libzypp-6(>= 6.32) or libzypp-7(>=7.3) locked patches are no longer
classified as being needed. Thus locking unwanted patches should prevent
them from being shown.
diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index 4fbfee4..ee478d5 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -655,7 +655,7 @@ zypp_get_patches ()
for (zypp::ResPoolProxy::const_iterator it = zypp->poolProxy ().byKindBegin<zypp::Patch>();
it != zypp->poolProxy ().byKindEnd<zypp::Patch>(); it ++) {
// check if patch is needed
- if((*it)->candidateObj ().isRelevant() && !((*it)->candidateObj ().isSatisfied())) {
+ if((*it)->isNeeded()) {
zypp::Patch::constPtr patch = zypp::asKind<zypp::Patch>((*it)->candidateObj ().resolvable ());
if (_updating_self) {
if (patch->restartSuggested ())
commit 3a26c7c8515df9dac1c60052213d721cd2fecf83
Author: Michael Andres <ma at suse.de>
Date: Wed Apr 21 18:19:29 2010 +0200
zypp: attempt to improve backend_find_packages
diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp
index 4486f25..8b54132 100644
--- a/backends/zypp/pk-backend-zypp.cpp
+++ b/backends/zypp/pk-backend-zypp.cpp
@@ -1293,26 +1293,49 @@ backend_find_packages_thread (PkBackend *backend)
pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
- std::vector<zypp::sat::Solvable> *v = 0;
- std::vector<zypp::sat::Solvable> *v2 = 0;
+ std::vector<zypp::sat::Solvable> v;
+
+ zypp::PoolQuery q;
+ q.addString( search ); // may be called multiple times (OR'ed)
+ q.setCaseSensitive( true );
+ q.setMatchSubstring();
switch (mode) {
case SEARCH_TYPE_NAME:
- v = zypp_get_packages_by_name (search, zypp::ResKind::package, TRUE);
- v2 = zypp_get_packages_by_name (search, zypp::ResKind::srcpackage, TRUE);
- v->insert (v->end (), v2->begin (), v2->end ());
+ zypp_build_pool (TRUE); // seems to be necessary?
+ q.addKind( zypp::ResKind::package );
+ q.addKind( zypp::ResKind::srcpackage );
+ q.addAttribute( zypp::sat::SolvAttr::name );
+ // Note: The query result is NOT sorted packages first, then srcpackage.
+ // If that's necessary you need to sort the vector accordongly or use
+ // two separate queries.
break;
case SEARCH_TYPE_DETAILS:
- v = zypp_get_packages_by_details (search, TRUE);
+ zypp_build_pool (TRUE); // seems to be necessary?
+ q.addKind( zypp::ResKind::package );
+ //q.addKind( zypp::ResKind::srcpackage );
+ q.addAttribute( zypp::sat::SolvAttr::name );
+ q.addAttribute( zypp::sat::SolvAttr::description );
+ // Note: Don't know if zypp_get_packages_by_details intentionally
+ // did not search in srcpackages.
break;
case SEARCH_TYPE_FILE:
- v = zypp_get_packages_by_file (search);
+ {
+ // zypp_build_pool (TRUE); called by zypp_get_packages_by_file
+ std::vector<zypp::sat::Solvable> * r = zypp_get_packages_by_file (search);
+ v.swap( *r );
+ delete r;
+ // zypp_get_packages_by_file does strange things :)
+ // Maybe it would be sufficient to simply query
+ // zypp::sat::SolvAttr::filelist instead?
+ }
break;
};
- zypp_emit_packages_in_list (backend, v, filters);
- delete (v);
- delete (v2);
+ if ( ! q.empty() ) {
+ std::copy( q.begin(), q.end(), std::back_inserter( v ) );
+ }
+ zypp_emit_packages_in_list (backend, &v, filters);
pk_backend_finished (backend);
return TRUE;
diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index d17a5af..4fbfee4 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -90,7 +90,7 @@ get_zypp ()
try {
zypp = zypp::ZYppFactory::instance ().getZYpp ();
-
+
// TODO: Make this threadsafe
if (initialized == FALSE) {
zypp::filesystem::Pathname pathname("/");
@@ -195,25 +195,25 @@ zypp_build_pool (gboolean include_local)
return zypp->pool ();
}
-void
-warn_outdated_repos(PkBackend *backend, const zypp::ResPool & pool)
-{
- zypp::Repository repoobj;
- zypp::ResPool::repository_iterator it;
- for ( it = pool.knownRepositoriesBegin();
- it != pool.knownRepositoriesEnd();
- ++it )
- {
- zypp::Repository repo(*it);
- if ( repo.maybeOutdated() )
- {
- // warn the user
+void
+warn_outdated_repos(PkBackend *backend, const zypp::ResPool & pool)
+{
+ zypp::Repository repoobj;
+ zypp::ResPool::repository_iterator it;
+ for ( it = pool.knownRepositoriesBegin();
+ it != pool.knownRepositoriesEnd();
+ ++it )
+ {
+ zypp::Repository repo(*it);
+ if ( repo.maybeOutdated() )
+ {
+ // warn the user
pk_backend_message (backend,
PK_MESSAGE_ENUM_BROKEN_MIRROR,
zypp::str::form("The repository %s seems to be outdated. You may want to try another mirror.",
repo.alias().c_str()).c_str() );
- }
- }
+ }
+ }
}
zypp::ResPool
@@ -227,7 +227,7 @@ zypp_build_local_pool ()
if (! it->isSystemRepo ())
pool.reposErase(it->alias ());
}
-
+
if (zypp::sat::Pool::instance().reposFind( zypp::sat::Pool::systemRepoAlias() ).solvablesEmpty ())
{
// Add local resolvables
@@ -255,7 +255,7 @@ zypp_get_rpmHeader (std::string name, zypp::Edition edition)
return result;
}
-
+
std::string
zypp_get_group (zypp::sat::Solvable item)
@@ -277,7 +277,7 @@ zypp_get_group (zypp::sat::Solvable item)
PkGroupEnum
get_enum_group (std::string group)
{
-
+
// TODO Look for a faster and nice way to do this conversion
std::transform(group.begin(), group.end(), group.begin(), tolower);
@@ -287,7 +287,7 @@ get_enum_group (std::string group)
return PK_GROUP_ENUM_PROGRAMMING;
} else if (group.find ("hardware") != std::string::npos) {
return PK_GROUP_ENUM_SYSTEM;
- } else if (group.find ("archiving") != std::string::npos
+ } else if (group.find ("archiving") != std::string::npos
|| group.find("clustering") != std::string::npos
|| group.find("system/monitoring") != std::string::npos
|| group.find("databases") != std::string::npos
@@ -299,7 +299,7 @@ get_enum_group (std::string group)
return PK_GROUP_ENUM_MULTIMEDIA;
} else if (group.find ("network") != std::string::npos) {
return PK_GROUP_ENUM_NETWORK;
- } else if (group.find ("office") != std::string::npos
+ } else if (group.find ("office") != std::string::npos
|| group.find("text") != std::string::npos
|| group.find("editors") != std::string::npos) {
return PK_GROUP_ENUM_OFFICE;
@@ -344,23 +344,6 @@ zypp_get_packages_by_name (const gchar *package_name, const zypp::ResKind kind,
}
std::vector<zypp::sat::Solvable> *
-zypp_get_packages_by_details (const gchar *search_term, gboolean include_local)
-{
- std::vector<zypp::sat::Solvable> *v = new std::vector<zypp::sat::Solvable> ();
-
- zypp::ResPool pool = zypp_build_pool (include_local);
-
- std::string term (search_term);
- for (zypp::ResPool::byKind_iterator it = pool.byKindBegin (zypp::ResKind::package);
- it != pool.byKindEnd (zypp::ResKind::package); it++) {
- if ((*it)->name ().find (term) != std::string::npos || (*it)->description ().find (term) != std::string::npos )
- v->push_back ((*it)->satSolvable ());
- }
-
- return v;
-}
-
-std::vector<zypp::sat::Solvable> *
zypp_get_packages_by_file (const gchar *search_file)
{
std::vector<zypp::sat::Solvable> *v = new std::vector<zypp::sat::Solvable> ();
@@ -404,7 +387,7 @@ zypp_get_package_by_id (const gchar *package_id)
std::vector<zypp::sat::Solvable> *v2 = zypp_get_packages_by_name (id_parts[PK_PACKAGE_ID_NAME], zypp::ResKind::patch, TRUE);
v->insert (v->end (), v2->begin (), v2->end ());
-
+
if (v == NULL)
return zypp::sat::Solvable::noSolvable;
@@ -432,7 +415,7 @@ gchar *
zypp_build_package_id_from_resolvable (zypp::sat::Solvable resolvable)
{
gchar *package_id;
-
+
package_id = pk_package_id_build (resolvable.name ().c_str (),
resolvable.edition ().asString ().c_str (),
resolvable.arch ().asString ().c_str (),
@@ -490,14 +473,14 @@ gboolean
zypp_signature_required (PkBackend *backend, const std::string &file, const std::string &id)
{
gboolean ok = FALSE;
-
+
if (std::find (_signatures[backend]->begin (), _signatures[backend]->end (), id) == _signatures[backend]->end ()) {
zypp::RepoInfo info = zypp_get_Repository (backend, _repoName);
if (info.type () == zypp::repo::RepoType::NONE) {
pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "Repository unknown");
return FALSE;
}
-
+
pk_backend_repo_signature_required (backend,
"dummy;0.0.1;i386;data",
_repoName,
@@ -526,7 +509,7 @@ zypp_signature_required (PkBackend *backend, const std::string &file)
pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "Repository unknown");
return FALSE;
}
-
+
pk_backend_repo_signature_required (backend,
"dummy;0.0.1;i386;data",
_repoName,
@@ -590,7 +573,7 @@ zypp_emit_packages_in_list (PkBackend *backend, std::vector<zypp::sat::Solvable>
//egg_debug ("my default arch is %s", myarch);
}
if (!print)
- continue;
+ continue;
}
pk_backend_package (backend,
@@ -636,7 +619,7 @@ zypp_get_updates (std::string repo)
{
std::set<zypp::PoolItem> *pks = new std::set<zypp::PoolItem> ();
zypp::ResPool pool = zypp::ResPool::instance ();
-
+
zypp::ResObject::Kind kind = zypp::ResTraits<zypp::Package>::kind;
zypp::ResPool::byKind_iterator it = pool.byKindBegin (kind);
zypp::ResPool::byKind_iterator e = pool.byKindEnd (kind);
@@ -671,7 +654,7 @@ zypp_get_patches ()
for (zypp::ResPoolProxy::const_iterator it = zypp->poolProxy ().byKindBegin<zypp::Patch>();
it != zypp->poolProxy ().byKindEnd<zypp::Patch>(); it ++) {
- // check if patch is needed
+ // check if patch is needed
if((*it)->candidateObj ().isRelevant() && !((*it)->candidateObj ().isSatisfied())) {
zypp::Patch::constPtr patch = zypp::asKind<zypp::Patch>((*it)->candidateObj ().resolvable ());
if (_updating_self) {
@@ -719,8 +702,8 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
if (force)
zypp->resolver ()->setForceResolve (force);
if (type == UPDATE) {
- //zypp->resolver ()->setOnlyRequires (TRUE);
- zypp->resolver ()->setIgnoreAlreadyRecommended (TRUE);
+ //zypp->resolver ()->setOnlyRequires (TRUE);
+ zypp->resolver ()->setIgnoreAlreadyRecommended (TRUE);
}
// Gather up any dependencies
@@ -756,7 +739,7 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
zypp->resolver ()->setForceResolve (FALSE);
return FALSE;
}
-
+
switch (type) {
case INSTALL:
pk_backend_set_status (backend, PK_STATUS_ENUM_INSTALL);
@@ -782,7 +765,7 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
eula_id,
package_id,
(*it)->vendor ().c_str (),
- it->satSolvable ().lookupStrAttribute (zypp::sat::SolvAttr::eula).c_str ());
+ it->satSolvable ().lookupStrAttribute (zypp::sat::SolvAttr::eula).c_str ());
pk_backend_error_code (backend, PK_ERROR_ENUM_NO_LICENSE_AGREEMENT, "You've to agree/decline a license");
g_free (package_id);
g_free (eula_id);
@@ -800,7 +783,7 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
zypp::ZYppCommitResult result = zypp->commit (policy);
if(!result._errors.empty () || !result._remaining.empty () || !result._srcremaining.empty ()){
-
+
zypp::ZYppCommitResult::PoolItemList errors = result._errors;
gchar *emsg = NULL, *tmpmsg = NULL;
@@ -813,7 +796,7 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
g_free (tmpmsg);
}
}
-
+
zypp::ZYppCommitResult::PoolItemList remaining = result._remaining;
for (zypp::ZYppCommitResult::PoolItemList::iterator it = remaining.begin (); it != remaining.end (); it++){
if (emsg == NULL) {
@@ -824,7 +807,7 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
g_free (tmpmsg);
}
}
-
+
zypp::ZYppCommitResult::PoolItemList srcremaining = result._srcremaining;
for (zypp::ZYppCommitResult::PoolItemList::iterator it = srcremaining.begin (); it != srcremaining.end (); it++){
if (emsg == NULL) {
@@ -847,7 +830,7 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
zypp->resolver ()->setForceResolve (FALSE);
if (type == UPDATE) {
- zypp->resolver ()->setIgnoreAlreadyRecommended (FALSE);
+ zypp->resolver ()->setIgnoreAlreadyRecommended (FALSE);
}
} catch (const zypp::repo::RepoNotFoundException &ex) {
@@ -859,8 +842,8 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
} catch (const zypp::Exception &ex) {
pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString().c_str() );
return FALSE;
- }
-
+ }
+
return TRUE;
}
@@ -890,7 +873,7 @@ zypp_build_package_id_capabilities (zypp::Capabilities caps)
for (zypp::sat::WhatProvides::const_iterator it = provs.begin (); it != provs.end (); it++) {
gchar *package_id = zypp_build_package_id_from_resolvable (*it);
//package_ids = g_strconcat (package_ids, package_id, PK_PACKAGE_IDS_DELIM, (gchar *)NULL);
- if (strlen (package_ids) == 0) {
+ if (strlen (package_ids) == 0) {
package_ids = g_strdup (package_id);
} else {
package_ids = g_strconcat (package_ids, PK_PACKAGE_IDS_DELIM, package_id, (gchar *)NULL);
@@ -955,9 +938,9 @@ zypp_refresh_cache (PkBackend *backend, gboolean force)
zypp::RepoManager::BuildIfNeeded);
} catch (const zypp::Exception &ex) {
if (repo_messages == NULL) {
- repo_messages = g_strdup_printf ("%s: %s%s", repo.alias ().c_str (), ex.asUserString ().c_str (), "\n");
+ repo_messages = g_strdup_printf ("%s: %s%s", repo.alias ().c_str (), ex.asUserString ().c_str (), "\n");
}else{
- repo_messages = g_strdup_printf ("%s%s: %s%s", repo_messages, repo.alias ().c_str (), ex.asUserString ().c_str (), "\n");
+ repo_messages = g_strdup_printf ("%s%s: %s%s", repo_messages, repo.alias ().c_str (), ex.asUserString ().c_str (), "\n");
}
if (repo_messages == NULL || !g_utf8_validate (repo_messages, -1, NULL))
repo_messages = g_strdup ("A repository could not be refreshed");
diff --git a/backends/zypp/zypp-utils.h b/backends/zypp/zypp-utils.h
index 450be80..ea75c57 100644
--- a/backends/zypp/zypp-utils.h
+++ b/backends/zypp/zypp-utils.h
@@ -34,8 +34,10 @@
#include <zypp/media/MediaManager.h>
#include <zypp/Resolvable.h>
#include <zypp/ResPool.h>
+#include <zypp/PoolQuery.h>
#include <zypp/ResFilters.h>
+#include <iterator>
#include <list>
#include <set>
@@ -119,11 +121,6 @@ PkGroupEnum get_enum_group (std::string group);
std::vector<zypp::sat::Solvable> * zypp_get_packages_by_name (const gchar *package_name, const zypp::ResKind kind, gboolean include_local);
/**
- * Returns a list of packages that match the specified term in its name or description.
- */
-std::vector<zypp::sat::Solvable> * zypp_get_packages_by_details (const gchar *search_term, gboolean include_local);
-
-/**
* Returns a list of packages that owns the specified file.
*/
std::vector<zypp::sat::Solvable> * zypp_get_packages_by_file (const gchar *search_file);
commit 7f48336a852e584c43a1c34154ceb15b995f7e3d
Author: Michael Andres <ma at suse.de>
Date: Wed Apr 21 17:35:57 2010 +0200
zypp: fix memeory leaks
diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp
index a6b00b3..4486f25 100644
--- a/backends/zypp/pk-backend-zypp.cpp
+++ b/backends/zypp/pk-backend-zypp.cpp
@@ -796,7 +796,7 @@ backend_install_files_thread (PkBackend *backend)
zypp::target::rpm::RpmHeader::constPtr rpmHeader = zypp::target::rpm::RpmHeader::readPackage (rpmPath, zypp::target::rpm::RpmHeader::NOSIGNATURE);
// look for the packages and set them to toBeInstalled
- std::vector<zypp::sat::Solvable> *solvables = new std::vector<zypp::sat::Solvable>;
+ std::vector<zypp::sat::Solvable> *solvables = 0;
solvables = zypp_get_packages_by_name (rpmHeader->tag_name ().c_str (), zypp::ResKind::package, FALSE);
zypp::PoolItem *item = NULL;
gboolean found = FALSE;
@@ -1033,7 +1033,7 @@ backend_install_packages_thread (PkBackend *backend)
for (guint i = 0; i < g_strv_length (package_ids); i++) {
gchar **id_parts = pk_package_id_split (package_ids[i]);
-
+
// Iterate over the selectables and mark the one with the right name
zypp::ui::Selectable::Ptr selectable;
for (zypp::ResPoolProxy::const_iterator it = zypp->poolProxy().byKindBegin <zypp::Package>();
@@ -1293,13 +1293,14 @@ backend_find_packages_thread (PkBackend *backend)
pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
- std::vector<zypp::sat::Solvable> *v = new std::vector<zypp::sat::Solvable>;
- std::vector<zypp::sat::Solvable> *v2 = new std::vector<zypp::sat::Solvable>;
+ std::vector<zypp::sat::Solvable> *v = 0;
+ std::vector<zypp::sat::Solvable> *v2 = 0;
switch (mode) {
case SEARCH_TYPE_NAME:
v = zypp_get_packages_by_name (search, zypp::ResKind::package, TRUE);
v2 = zypp_get_packages_by_name (search, zypp::ResKind::srcpackage, TRUE);
+ v->insert (v->end (), v2->begin (), v2->end ());
break;
case SEARCH_TYPE_DETAILS:
v = zypp_get_packages_by_details (search, TRUE);
@@ -1309,8 +1310,6 @@ backend_find_packages_thread (PkBackend *backend)
break;
};
- v->insert (v->end (), v2->begin (), v2->end ());
-
zypp_emit_packages_in_list (backend, v, filters);
delete (v);
delete (v2);
@@ -1591,7 +1590,7 @@ backend_update_packages_thread (PkBackend *backend)
package_ids = pk_backend_get_strv (backend, "package_ids");
PkRestartEnum restart = PK_RESTART_ENUM_NONE;
- zypp_get_patches (); // make sure _updating_self is set
+ delete zypp_get_patches (); // make sure _updating_self is set
if (_updating_self) {
egg_debug ("updating self and setting restart");
commit 90c0aee993691e698d414cbf450284dd8f8db0ab
Author: Richard Hughes <richard at hughsie.com>
Date: Sun Apr 25 22:03:58 2010 +0100
yum: Ensure the lock failure message is proper unicode. Fixes rh#585620
diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index 67111a2..3891589 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -343,7 +343,7 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
# give up, and print process information
if retries > 100:
msg = "The other process has the command line '%s' (PID %i)" % (cmdline, e.pid)
- self.error(ERROR_CANNOT_GET_LOCK, "Yum is locked by another application. %s" % msg)
+ self.error(ERROR_CANNOT_GET_LOCK, "Yum is locked by another application. %s" % _to_unicode(msg))
def unLock(self):
''' Unlock Yum'''
commit 8e884eca6153a6be2a1099d65a239b9dc79c4420
Author: Richard Hughes <richard at hughsie.com>
Date: Tue Apr 20 18:53:10 2010 +0100
yum: fix up two runtime critical warnings when using the zif accellerator
diff --git a/backends/yum/libzif/zif-md-filelists-xml.c b/backends/yum/libzif/zif-md-filelists-xml.c
index 1eec0c9..00269ad 100644
--- a/backends/yum/libzif/zif-md-filelists-xml.c
+++ b/backends/yum/libzif/zif-md-filelists-xml.c
@@ -434,12 +434,20 @@ zif_md_filelists_xml_search_file (ZifMd *md, gchar **search,
zif_completion_done (completion);
}
+ /* create results array */
+ array = g_ptr_array_new_with_free_func (g_free);
+
+ /* no entries, so shortcut */
+ if (md_filelists->priv->array->len == 0) {
+ zif_completion_done (completion);
+ goto out;
+ }
+
/* setup steps */
completion_local = zif_completion_get_child (completion);
zif_completion_set_number_steps (completion_local, md_filelists->priv->array->len);
/* search array */
- array = g_ptr_array_new_with_free_func (g_free);
packages = md_filelists->priv->array;
for (i=0; i<packages->len; i++) {
package = g_ptr_array_index (packages, i);
diff --git a/backends/yum/libzif/zif-md-primary-sql.c b/backends/yum/libzif/zif-md-primary-sql.c
index 7b8cb9b..3a32786 100644
--- a/backends/yum/libzif/zif-md-primary-sql.c
+++ b/backends/yum/libzif/zif-md-primary-sql.c
@@ -177,7 +177,7 @@ zif_md_primary_sql_search (ZifMdPrimarySql *md, const gchar *statement,
rc = sqlite3_exec (md->priv->db, statement, zif_md_primary_sql_sqlite_create_package_cb, data, &error_msg);
if (rc != SQLITE_OK) {
g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
- "SQL error: %s\n", error_msg);
+ "SQL error, failed to execute '%s': %s\n", statement, error_msg);
sqlite3_free (error_msg);
g_ptr_array_unref (data->packages);
goto out;
@@ -229,7 +229,9 @@ zif_md_primary_sql_get_statement_for_pred (const gchar *pred, gchar **search)
g_string_append (statement, " OR ");
g_free (temp);
}
- if (i % max_items != max_items - 1) {
+
+ /* remove trailing OR entry */
+ if (g_str_has_suffix (statement->str, " OR ")) {
g_string_set_size (statement, statement->len - 4);
g_string_append (statement, ";\n");
}
commit 491af515effdd4683222fd8d0c17ea4abe149126
Author: Richard Hughes <richard at hughsie.com>
Date: Tue Apr 20 13:21:25 2010 +0100
yum: Fix a crash when there are no updates and the user is using zif
diff --git a/backends/yum/pk-backend-yum.c b/backends/yum/pk-backend-yum.c
index 24c35a1..b6862f0 100644
--- a/backends/yum/pk-backend-yum.c
+++ b/backends/yum/pk-backend-yum.c
@@ -1529,7 +1529,8 @@ backend_get_updates_thread (PkBackend *backend)
/* setup steps on updatinfo completion */
completion_local = zif_completion_get_child (priv->completion);
- zif_completion_set_number_steps (completion_local, array->len);
+ if (array->len > 0)
+ zif_completion_set_number_steps (completion_local, array->len);
/* get update info */
for (i=0; i<array->len; i++) {
commit c61e9664ed7d33084b7d00b9c664c521004d74dc
Author: Richard Hughes <richard at hughsie.com>
Date: Tue Apr 20 11:35:22 2010 +0100
yum: Ship a standalone version of licenses.txt for future code
diff --git a/backends/yum/Makefile.am b/backends/yum/Makefile.am
index 95293d7..a0af1a4 100644
--- a/backends/yum/Makefile.am
+++ b/backends/yum/Makefile.am
@@ -1,6 +1,7 @@
helperdir = $(datadir)/PackageKit/helpers/yum
dist_helper_DATA = \
yum-comps-groups.conf \
+ licenses.txt \
yumBackend.py \
yumComps.py \
yumMediaManager.py \
diff --git a/backends/yum/licenses.txt b/backends/yum/licenses.txt
new file mode 100644
index 0000000..6a6232c
--- /dev/null
+++ b/backends/yum/licenses.txt
@@ -0,0 +1,187 @@
+AAL
+Adobe
+ADSL
+AFL
+AGPLv1
+AMDPLPA
+AML
+AMPAS BSD
+APSL 2.0
+ARL
+Arphic
+Artistic 2.0
+Artistic clarified
+ASL 1.0
+ASL 1.1
+ASL 2.0
+Baekmuk
+BitTorrent
+Boost
+BSD
+BSD Protection
+BSD with advertising
+CATOSL
+CC0
+CC-BY
+CC-BY-SA
+CDDL
+CDL
+CeCILL
+CeCILL-B
+CeCILL-C
+CNRI
+Condor
+Copyright only
+CPAL
+CPL
+Crystal Stacker
+DOC
+DSL
+dvipdfm
+ECL 1.0
+ECL 2.0
+eCos
+EFL 2.0
+Entessa
+EPL
+ERPL
+EUPL 1.1
+Eurosym
+EU Datagrid
+Fair
+FBSDDL
+Free Art
+FTL
+GeoGratis
+GFDL
+Giftware
+GL2PS
+Glide
+gnuplot
+GPLv1
+GPLv2
+GPLv2 or Artistic
+GPLv2+
+GPLv2+ or Artistic
+GPLv2+ with exceptions
+GPLv2 with exceptions
+GPLv3
+GPLv3+
+GPLv3+ with exceptions
+GPLv3 with exceptions
+GPL+
+GPL+ or Artistic
+GPL+ with exceptions
+IBM
+IEEE
+IJG
+ImageMagick
+iMatix
+Imlib2
+Intel ACPI
+Interbase
+IPA
+ISC
+Jabber
+JasPer
+JPython
+Knuth
+LBNL BSD
+LGPLv2
+LGPLv2+
+LGPLv2+ or Artistic
+LGPLv2+ with exceptions
+LGPLv2 with exceptions
+LGPLv3
+LGPLv3+
+LGPLv3+ with exceptions
+LGPLv3 with exceptions
+Liberation
+libtiff
+LLGPL
+Logica
+LPL
+LPPL
+mecab-ipadic
+MirOS
+MIT
+MIT with advertising
+mod_macro
+Motosoto
+mplus
+MPLv1.0
+MPLv1.1
+MS-PL
+MS-RL
+Naumen
+NCSA
+NetCDF
+Netscape
+Newmat
+NGPL
+Nokia
+NOSL
+Noweb
+OAL
+OFL
+OFSFDL
+OpenLDAP
+OpenPBS
+OpenSSL
+OReilly
+OSL 1.0
+OSL 1.1
+OSL 2.0
+OSL 2.1
+OSL 3.0
+Phorum
+PHP
+Plexus
+PostgreSQL
+psutils
+PTFL
+Public Domain
+Public Use
+Python
+Qhull
+QPL
+Rdisc
+RiceBSD
+Romio
+RPSL
+Ruby
+Saxpath
+SCEA
+SCRIP
+Sendmail
+SISSL
+Sleepycat
+SLIB
+SNIA
+SPL
+STIX
+TCL
+TMate
+TOSL
+TPL
+UCD
+Vim
+VNLSL
+VOSTROM
+VSL
+W3C
+Wadalab
+Webmin
+WTFPL
+wxWidgets
+XANO
+Xerox
+xinetd
+XSkat
+YPLv1.1
+Zend
+zlib
+zlib with acknowledgement
+ZPLv1.0
+ZPLv2.0
+ZPLv2.1
diff --git a/tools/pk-refresh-licenses.c b/tools/pk-refresh-licenses.c
index f5d2e5c..969e415 100644
--- a/tools/pk-refresh-licenses.c
+++ b/tools/pk-refresh-licenses.c
@@ -126,6 +126,7 @@ main (int argc, char *argv[])
gboolean is_col;
GString *string_h = NULL;
GString *string_c = NULL;
+ GString *string_txt = NULL;
PkRefreshLicenseItem *item;
PkRefreshLicenseItem *item_tmp;
const gchar *locations[] = {
@@ -263,8 +264,9 @@ skip:
g_ptr_array_sort (data, pk_refresh_licenses_compare_func);
/* process data, and output to header file */
- string_h = g_string_new ("automatically geneated, do not edit\n\n");
- string_c = g_string_new ("automatically geneated, do not edit\n\n");
+ string_h = g_string_new ("automatically geneated, do not edit\n\n");
+ string_c = g_string_new ("automatically geneated, do not edit\n\n");
+ string_txt = g_string_new (NULL);
for (i=0; i<data->len; i++) {
gchar *tabs;
guint len;
@@ -284,6 +286,7 @@ skip:
/* need to tab properly */
g_string_append_printf (string_c, "\t{%s,%s\"%s\"},\n", item->enum_name, tabs, item->full_name);
+ g_string_append_printf (string_txt, "%s\n", item->full_name);
g_free (tabs);
}
g_string_append (string_c, "\n");
@@ -305,12 +308,22 @@ skip:
goto out;
}
+ /* set c contents */
+ ret = g_file_set_contents ("./licenses.txt", string_txt->str, -1, &error);
+ if (!ret) {
+ g_warning ("failed to set contents: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
+
retval = EXIT_SUCCESS;
out:
if (string_h != NULL)
g_string_free (string_h, TRUE);
if (string_c != NULL)
g_string_free (string_c, TRUE);
+ if (string_txt != NULL)
+ g_string_free (string_txt, TRUE);
if (data != NULL)
g_ptr_array_unref (data);
g_string_free (contents, TRUE);
commit 06c0dd3bf417387de36fbd2b9290ec768b4c7458
Author: Richard Hughes <richard at hughsie.com>
Date: Mon Apr 19 14:29:14 2010 +0100
yum: update to a newer version of libzif that supports getting the file lists for a remote package
diff --git a/backends/yum/libzif/zif-completion.c b/backends/yum/libzif/zif-completion.c
index f96dd8f..e057e32 100644
--- a/backends/yum/libzif/zif-completion.c
+++ b/backends/yum/libzif/zif-completion.c
@@ -91,8 +91,10 @@ struct _ZifCompletionPrivate
guint current;
guint last_percentage;
ZifCompletion *child;
+ ZifCompletion *parent;
gulong percentage_child_id;
gulong subpercentage_child_id;
+ gchar *id;
};
enum {
@@ -205,7 +207,6 @@ zif_completion_child_percentage_changed_cb (ZifCompletion *child, guint percenta
/* did we call done on a completion that did not have a size set? */
if (completion->priv->steps == 0) {
egg_warning ("done on a completion %p that did not have a size set!", completion);
- zif_debug_crash ();
return;
}
@@ -316,6 +317,7 @@ zif_completion_get_child (ZifCompletion *completion)
/* connect up signals */
child = zif_completion_new ();
completion->priv->child = g_object_ref (child);
+ completion->priv->child->priv->parent = g_object_ref (completion);
completion->priv->percentage_child_id =
g_signal_connect (child, "percentage-changed", G_CALLBACK (zif_completion_child_percentage_changed_cb), completion);
completion->priv->subpercentage_child_id =
@@ -341,18 +343,21 @@ zif_completion_get_child (ZifCompletion *completion)
* Since: 0.0.1
**/
gboolean
-zif_completion_set_number_steps (ZifCompletion *completion, guint steps)
+zif_completion_set_number_steps_real (ZifCompletion *completion, guint steps, const gchar *function_name, gint function_line)
{
g_return_val_if_fail (ZIF_IS_COMPLETION (completion), FALSE);
g_return_val_if_fail (steps != 0, FALSE);
/* did we call done on a completion that did not have a size set? */
if (completion->priv->steps != 0) {
- egg_warning ("steps already set (%i)!", completion->priv->steps);
- zif_debug_crash ();
+ egg_warning ("steps already set (%i)! [%s:%i]",
+ completion->priv->steps, function_name, function_line);
return FALSE;
}
+ /* set id */
+ completion->priv->id = g_strdup_printf ("%s:%i", function_name, function_line);
+
/* imply reset */
zif_completion_reset (completion);
@@ -363,6 +368,18 @@ zif_completion_set_number_steps (ZifCompletion *completion, guint steps)
}
/**
+ * zif_completion_print_parent_chain:
+ **/
+static void
+zif_completion_print_parent_chain (ZifCompletion *completion, guint level)
+{
+ if (completion->priv->parent != NULL)
+ zif_completion_print_parent_chain (completion->priv->parent, level + 1);
+ g_print ("%i) %s (%i/%i)\n",
+ level, completion->priv->id, completion->priv->current, completion->priv->steps);
+}
+
+/**
* zif_completion_done:
* @completion: the #ZifCompletion object
*
@@ -373,23 +390,40 @@ zif_completion_set_number_steps (ZifCompletion *completion, guint steps)
* Since: 0.0.1
**/
gboolean
-zif_completion_done (ZifCompletion *completion)
+zif_completion_done_real (ZifCompletion *completion, const gchar *function_name, gint function_line)
{
+ gboolean ret = TRUE;
gfloat percentage;
g_return_val_if_fail (ZIF_IS_COMPLETION (completion), FALSE);
/* did we call done on a completion that did not have a size set? */
if (completion->priv->steps == 0) {
- egg_warning ("done on a completion %p that did not have a size set!", completion);
- zif_debug_crash ();
- return FALSE;
+ egg_warning ("done on a completion %p that did not have a size set! [%s:%i]",
+ completion, function_name, function_line);
+ zif_completion_print_parent_chain (completion, 0);
+ ret = FALSE;
+ goto out;
}
/* is already at 100%? */
if (completion->priv->current == completion->priv->steps) {
- egg_warning ("already at 100%% completion");
- return FALSE;
+ egg_warning ("already at 100%% completion [%s:%i]", function_name, function_line);
+ zif_completion_print_parent_chain (completion, 0);
+ ret = FALSE;
+ goto out;
+ }
+
+ /* is child not at 100%? */
+ if (completion->priv->child != NULL) {
+ ZifCompletionPrivate *child_priv = completion->priv->child->priv;
+ if (child_priv->current != child_priv->steps) {
+ egg_warning ("child is at %i/%i steps and parent done [%s:%i]",
+ child_priv->current, child_priv->steps, function_name, function_line);
+ zif_completion_print_parent_chain (completion->priv->child, 0);
+ ret = FALSE;
+ /* do not abort, as we want to clean this up */
+ }
}
/* another */
@@ -402,6 +436,43 @@ zif_completion_done (ZifCompletion *completion)
/* reset child if it exists */
if (completion->priv->child != NULL)
zif_completion_reset (completion->priv->child);
+out:
+ return ret;
+}
+
+/**
+ * zif_completion_finished:
+ * @completion: the #ZifCompletion object
+ *
+ * Called when the current sub-task wants to finish early and still complete.
+ *
+ * Return value: %TRUE for success, %FALSE for failure
+ *
+ * Since: 0.0.1
+ **/
+gboolean
+zif_completion_finished_real (ZifCompletion *completion, const gchar *function_name, gint function_line)
+{
+ g_return_val_if_fail (ZIF_IS_COMPLETION (completion), FALSE);
+
+ /* did we call done on a completion that did not have a size set? */
+ if (completion->priv->steps == 0) {
+ egg_warning ("finished on a completion %p that did not have a size set! [%s:%i]",
+ completion, function_name, function_line);
+ return FALSE;
+ }
+
+ /* is already at 100%? */
+ if (completion->priv->current == completion->priv->steps) {
+ egg_warning ("already at 100%% completion [%s:%i]", function_name, function_line);
+ return FALSE;
+ }
+
+ /* all done */
+ completion->priv->current = completion->priv->steps;
+
+ /* set new percentage */
+ zif_completion_set_percentage (completion, 100);
return TRUE;
}
@@ -420,6 +491,8 @@ zif_completion_finalize (GObject *object)
/* unref child too */
zif_completion_reset (completion);
+ if (completion->priv->parent != NULL)
+ g_object_unref (completion->priv->parent);
G_OBJECT_CLASS (zif_completion_parent_class)->finalize (object);
}
@@ -458,6 +531,7 @@ zif_completion_init (ZifCompletion *completion)
{
completion->priv = ZIF_COMPLETION_GET_PRIVATE (completion);
completion->priv->child = NULL;
+ completion->priv->parent = NULL;
completion->priv->steps = 0;
completion->priv->current = 0;
completion->priv->last_percentage = 0;
diff --git a/backends/yum/libzif/zif-completion.h b/backends/yum/libzif/zif-completion.h
index 33a2598..1429172 100644
--- a/backends/yum/libzif/zif-completion.h
+++ b/backends/yum/libzif/zif-completion.h
@@ -62,15 +62,36 @@ struct _ZifCompletionClass
void (*_zif_reserved4) (void);
};
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#define zif_completion_done(completion) zif_completion_done_real (completion, __func__, __LINE__)
+#define zif_completion_finished(completion) zif_completion_finished_real (completion, __func__, __LINE__)
+#define zif_completion_set_number_steps(completion, steps) zif_completion_set_number_steps_real (completion, steps, __func__, __LINE__)
+#elif defined(__GNUC__) && __GNUC__ >= 3
+#define zif_completion_done(completion) zif_completion_done_real (completion, __FUNCTION__, __LINE__)
+#define zif_completion_finished(completion) zif_completion_finished_real (completion, __FUNCTION__, __LINE__)
+#define zif_completion_set_number_steps(completion, steps) zif_completion_set_number_steps_real (completion, steps, __FUNCTION__, __LINE__)
+#else
+#define zif_completion_done(completion)
+#define zif_completion_finished(completion)
+#define zif_completion_set_number_steps(completion, steps)
+#endif
+
GType zif_completion_get_type (void);
ZifCompletion *zif_completion_new (void);
ZifCompletion *zif_completion_get_child (ZifCompletion *completion);
-gboolean zif_completion_set_number_steps (ZifCompletion *completion,
- guint steps);
+gboolean zif_completion_set_number_steps_real (ZifCompletion *completion,
+ guint steps,
+ const gchar *function_name,
+ gint function_line);
gboolean zif_completion_set_percentage (ZifCompletion *completion,
guint percentage);
guint zif_completion_get_percentage (ZifCompletion *completion);
-gboolean zif_completion_done (ZifCompletion *completion);
+gboolean zif_completion_done_real (ZifCompletion *completion,
+ const gchar *function_name,
+ gint function_line);
+gboolean zif_completion_finished_real (ZifCompletion *completion,
+ const gchar *function_name,
+ gint function_line);
gboolean zif_completion_reset (ZifCompletion *completion);
G_END_DECLS
diff --git a/backends/yum/libzif/zif-config.c b/backends/yum/libzif/zif-config.c
index 1fba6cb..f904bb1 100644
--- a/backends/yum/libzif/zif-config.c
+++ b/backends/yum/libzif/zif-config.c
@@ -412,6 +412,22 @@ zif_config_get_basearch_array (ZifConfig *config)
}
/**
+ * zif_config_get_release_filename:
+ **/
+static const gchar *
+zif_config_get_release_filename (ZifConfig *config)
+{
+ const gchar *filename;
+ filename = "/etc/fedora-release";
+ if (g_file_test (filename, G_FILE_TEST_EXISTS))
+ return filename;
+ filename = "/etc/redhat-release";
+ if (g_file_test (filename, G_FILE_TEST_EXISTS))
+ return filename;
+ return NULL;
+}
+
+/**
* zif_config_set_filename:
* @config: the #ZifConfig object
* @filename: the system wide config file, e.g. "/etc/yum.conf"
@@ -430,6 +446,7 @@ zif_config_set_filename (ZifConfig *config, const gchar *filename, GError **erro
GError *error_local = NULL;
gchar *basearch = NULL;
gchar *releasever = NULL;
+ const gchar *release_filename;
const gchar *text;
GPtrArray *array;
guint i;
@@ -471,8 +488,18 @@ zif_config_set_filename (ZifConfig *config, const gchar *filename, GError **erro
/* calculate the release version if not specified in the config file */
releasever = zif_config_get_string (config, "releasever", NULL);
if (releasever == NULL) {
+
+ /* get correct file */
+ release_filename = zif_config_get_release_filename (config);
+ if (release_filename == NULL) {
+ ret = FALSE;
+ g_set_error_literal (error, ZIF_CONFIG_ERROR, ZIF_CONFIG_ERROR_FAILED,
+ "could not get a correct release filename");
+ goto out;
+ }
+
/* get distro constants from fedora-release */
- ret = g_file_get_contents ("/etc/fedora-release", &releasever, NULL, &error_local);
+ ret = g_file_get_contents (release_filename, &releasever, NULL, &error_local);
if (!ret) {
g_set_error (error, ZIF_CONFIG_ERROR, ZIF_CONFIG_ERROR_FAILED,
"failed to get distro release version: %s", error_local->message);
diff --git a/backends/yum/libzif/zif-download.c b/backends/yum/libzif/zif-download.c
index a389484..d896615 100644
--- a/backends/yum/libzif/zif-download.c
+++ b/backends/yum/libzif/zif-download.c
@@ -255,6 +255,10 @@ zif_download_set_proxy (ZifDownload *download, const gchar *http_proxy, GError *
connection_timeout = 5;
/* setup the session */
+ if (http_proxy != NULL) {
+ egg_debug ("using proxy %s", http_proxy);
+ proxy = soup_uri_new (http_proxy);
+ }
download->priv->session = soup_session_sync_new_with_options (SOUP_SESSION_PROXY_URI, proxy,
SOUP_SESSION_USER_AGENT, "zif",
SOUP_SESSION_TIMEOUT, connection_timeout,
@@ -266,6 +270,8 @@ zif_download_set_proxy (ZifDownload *download, const gchar *http_proxy, GError *
}
ret = TRUE;
out:
+ if (proxy != NULL)
+ soup_uri_free (proxy);
return ret;
}
@@ -419,7 +425,7 @@ zif_download_test (EggTest *test)
egg_test_failed (test, "got %i updates", _updates);
/* setup cancel */
- g_thread_create (zif_download_cancel_thread_cb, cancellable, FALSE, NULL);
+ g_thread_create ((GThreadFunc) zif_download_cancel_thread_cb, cancellable, FALSE, NULL);
/************************************************************/
egg_test_title (test, "download second file (should be cancelled)");
diff --git a/backends/yum/libzif/zif-md-filelists-sql.c b/backends/yum/libzif/zif-md-filelists-sql.c
index 4ee6a55..200c5cd 100644
--- a/backends/yum/libzif/zif-md-filelists-sql.c
+++ b/backends/yum/libzif/zif-md-filelists-sql.c
@@ -39,6 +39,7 @@
#include "zif-md.h"
#include "zif-md-filelists-sql.h"
+#include "zif-package-remote.h"
#include "egg-debug.h"
@@ -114,7 +115,7 @@ out:
}
/**
- * zif_store_remote_sqlite_get_id_cb:
+ * zif_md_filelists_sql_sqlite_get_id_cb:
**/
static gint
zif_md_filelists_sql_sqlite_get_id_cb (void *data, gint argc, gchar **argv, gchar **col_name)
@@ -125,10 +126,10 @@ zif_md_filelists_sql_sqlite_get_id_cb (void *data, gint argc, gchar **argv, gcha
}
/**
- * zif_md_filelists_sql_sqlite_get_files_cb:
+ * zif_md_filelists_sql_sqlite_get_pkgkey_cb:
**/
static gint
-zif_md_filelists_sql_sqlite_get_files_cb (void *data, gint argc, gchar **argv, gchar **col_name)
+zif_md_filelists_sql_sqlite_get_pkgkey_cb (void *data, gint argc, gchar **argv, gchar **col_name)
{
gint i;
gchar **filenames = NULL;
@@ -165,6 +166,104 @@ out:
}
/**
+ * zif_md_filelists_sql_sqlite_get_files_cb:
+ **/
+static gint
+zif_md_filelists_sql_sqlite_get_files_cb (void *data, gint argc, gchar **argv, gchar **col_name)
+{
+ gint i;
+ gchar **filename = NULL;
+ gchar **dirname = NULL;
+ GPtrArray **array = (GPtrArray **) data;
+
+ /* get pointers to the arguments */
+ for (i=0;i<argc;i++) {
+ if (g_strcmp0 (col_name[i], "filenames") == 0)
+ filename = &argv[i];
+ else if (g_strcmp0 (col_name[i], "dirname") == 0)
+ dirname = &argv[i];
+ }
+
+ /* check for invalid entries */
+ if (filename == NULL || dirname == NULL) {
+ egg_warning ("failed on %p, %p", filename, dirname);
+ return 0;
+ }
+
+ /* add complete path */
+ g_ptr_array_add (*array, g_strdup (g_build_filename (*dirname, *filename, NULL)));
+ return 0;
+}
+
+/**
+ * zif_md_filelists_sql_get_files:
+ **/
+static GPtrArray *
+zif_md_filelists_sql_get_files (ZifMd *md, ZifPackage *package,
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gchar *statement = NULL;
+ gint rc;
+ gboolean ret;
+ const gchar *pkgid;
+ gchar *pkgkey = NULL;
+ GError *error_local = NULL;
+ gchar *error_msg = NULL;
+ GPtrArray *array = NULL;
+ GPtrArray *files = NULL;
+ ZifMdFilelistsSql *md_filelists_sql = ZIF_MD_FILELISTS_SQL (md);
+
+ /* if not already loaded, load */
+ if (!md_filelists_sql->priv->loaded) {
+ ret = zif_md_load (md, cancellable, completion, &error_local);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED_TO_LOAD,
+ "failed to load store file: %s", error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+ }
+
+ /* get pkgkey from pkgid */
+ pkgid = zif_package_remote_get_pkgid (ZIF_PACKAGE_REMOTE (package));
+ statement = g_strdup_printf ("SELECT pkgKey FROM packages WHERE pkgId = '%s' LIMIT 1", pkgid);
+ rc = sqlite3_exec (md_filelists_sql->priv->db, statement, zif_md_filelists_sql_sqlite_get_id_cb, &pkgkey, &error_msg);
+ g_free (statement);
+ if (rc != SQLITE_OK) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
+ "SQL error (failed to get packages): %s", error_msg);
+ sqlite3_free (error_msg);
+ goto out;
+ }
+
+ /* failed */
+ if (pkgkey == NULL) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
+ "failed to get pkgkey for %s", pkgid);
+ goto out;
+ }
+
+ /* get files for pkgkey */
+ files = g_ptr_array_new_with_free_func (g_free);
+ statement = g_strdup_printf ("SELECT dirname, filenames FROM filelist WHERE pkgKey = '%s'", pkgkey);
+ rc = sqlite3_exec (md_filelists_sql->priv->db, statement, zif_md_filelists_sql_sqlite_get_files_cb, &files, &error_msg);
+ g_free (statement);
+ if (rc != SQLITE_OK) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
+ "SQL error (failed to get packages): %s", error_msg);
+ sqlite3_free (error_msg);
+ goto out;
+ }
+
+ /* success */
+ array = g_ptr_array_ref (files);
+out:
+ if (files != NULL)
+ g_ptr_array_unref (files);
+ return array;
+}
+
+/**
* zif_md_filelists_sql_search_file:
**/
static GPtrArray *
@@ -209,7 +308,7 @@ zif_md_filelists_sql_search_file (ZifMd *md, gchar **search,
/* populate _array with guint pkgKey */
statement = g_strdup_printf ("SELECT filenames, pkgKey FROM filelist WHERE dirname = '%s'", dirname);
- rc = sqlite3_exec (md_filelists_sql->priv->db, statement, zif_md_filelists_sql_sqlite_get_files_cb, data, &error_msg);
+ rc = sqlite3_exec (md_filelists_sql->priv->db, statement, zif_md_filelists_sql_sqlite_get_pkgkey_cb, data, &error_msg);
g_free (statement);
if (rc != SQLITE_OK) {
g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
@@ -288,6 +387,7 @@ zif_md_filelists_sql_class_init (ZifMdFilelistsSqlClass *klass)
md_class->load = zif_md_filelists_sql_load;
md_class->unload = zif_md_filelists_sql_unload;
md_class->search_file = zif_md_filelists_sql_search_file;
+ md_class->get_files = zif_md_filelists_sql_get_files;
g_type_class_add_private (klass, sizeof (ZifMdFilelistsSqlPrivate));
}
@@ -413,7 +513,7 @@ zif_md_filelists_sql_test (EggTest *test)
/************************************************************/
egg_test_title (test, "search for files");
- array = zif_md_filelists_sql_search_file (md, data, cancellable, completion, &error);
+ array = zif_md_filelists_sql_search_file (ZIF_MD (md), (gchar**)data, cancellable, completion, &error);
if (array != NULL)
egg_test_success (test, NULL);
else
diff --git a/backends/yum/libzif/zif-md-filelists-xml.c b/backends/yum/libzif/zif-md-filelists-xml.c
index 07cee6c..1eec0c9 100644
--- a/backends/yum/libzif/zif-md-filelists-xml.c
+++ b/backends/yum/libzif/zif-md-filelists-xml.c
@@ -54,6 +54,7 @@ typedef enum {
#include "zif-md.h"
#include "zif-md-filelists-xml.h"
+#include "zif-package-remote.h"
#include "egg-debug.h"
@@ -120,12 +121,12 @@ zif_md_filelists_xml_parser_start_element (GMarkupParseContext *context, const g
if (g_strcmp0 (element_name, "package") == 0) {
filelists_xml->priv->section_list = ZIF_MD_FILELISTS_XML_SECTION_LIST_PACKAGE;
- filelists_xml->priv->package_temp = zif_package_new ();
+ filelists_xml->priv->package_temp = ZIF_PACKAGE (zif_package_remote_new ());
filelists_xml->priv->array_temp = g_ptr_array_new_with_free_func (g_free);
for (i=0; attribute_names[i] != NULL; i++) {
if (g_strcmp0 (attribute_names[i], "pkgid") == 0) {
- g_object_set_data_full (G_OBJECT (filelists_xml->priv->package_temp),
- "pkgid", g_strdup (attribute_values[i]), g_free);
+ zif_package_remote_set_pkgid (ZIF_PACKAGE_REMOTE (filelists_xml->priv->package_temp),
+ attribute_values[i]);
}
}
goto out;
@@ -321,6 +322,75 @@ out:
}
/**
+ * zif_md_filelists_xml_get_files:
+ **/
+static GPtrArray *
+zif_md_filelists_xml_get_files (ZifMd *md, ZifPackage *package,
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ GPtrArray *array = NULL;
+ GPtrArray *packages;
+ ZifPackage *package_tmp;
+ guint i;
+ gboolean ret;
+ const gchar *pkgid;
+ const gchar *pkgid_tmp;
+ GError *error_local = NULL;
+ ZifCompletion *completion_local;
+ ZifCompletion *completion_loop;
+ ZifMdFilelistsXml *md_filelists = ZIF_MD_FILELISTS_XML (md);
+
+ g_return_val_if_fail (ZIF_IS_MD_FILELISTS_XML (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* setup completion */
+ if (md_filelists->priv->loaded)
+ zif_completion_set_number_steps (completion, 1);
+ else
+ zif_completion_set_number_steps (completion, 2);
+
+ /* if not already loaded, load */
+ if (!md_filelists->priv->loaded) {
+ completion_local = zif_completion_get_child (completion);
+ ret = zif_md_load (ZIF_MD (md), cancellable, completion_local, &error_local);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED_TO_LOAD,
+ "failed to load md_filelists_xml file: %s", error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+
+ /* this section done */
+ zif_completion_done (completion);
+ }
+
+ /* setup steps */
+ completion_local = zif_completion_get_child (completion);
+ zif_completion_set_number_steps (completion_local, md_filelists->priv->array->len);
+
+ /* search array */
+ pkgid = zif_package_remote_get_pkgid (ZIF_PACKAGE_REMOTE (package));
+ packages = md_filelists->priv->array;
+ for (i=0; i<packages->len; i++) {
+ package_tmp = g_ptr_array_index (packages, i);
+ pkgid_tmp = zif_package_remote_get_pkgid (ZIF_PACKAGE_REMOTE (package_tmp));
+ if (g_strcmp0 (pkgid, pkgid_tmp) == 0) {
+ completion_loop = zif_completion_get_child (completion_local);
+ array = zif_package_get_files (package_tmp, cancellable, completion_loop, NULL);
+ break;
+ }
+
+ /* this section done */
+ zif_completion_done (completion_local);
+ }
+
+ /* this section done */
+ zif_completion_done (completion);
+out:
+ return array;
+}
+
+/**
* zif_md_filelists_xml_search_file:
**/
static GPtrArray *
@@ -337,6 +407,7 @@ zif_md_filelists_xml_search_file (ZifMd *md, gchar **search,
const gchar *pkgid;
GError *error_local = NULL;
ZifCompletion *completion_local;
+ ZifCompletion *completion_loop;
ZifMdFilelistsXml *md_filelists = ZIF_MD_FILELISTS_XML (md);
g_return_val_if_fail (ZIF_IS_MD_FILELISTS_XML (md), NULL);
@@ -363,13 +434,18 @@ zif_md_filelists_xml_search_file (ZifMd *md, gchar **search,
zif_completion_done (completion);
}
+ /* setup steps */
+ completion_local = zif_completion_get_child (completion);
+ zif_completion_set_number_steps (completion_local, md_filelists->priv->array->len);
+
/* search array */
array = g_ptr_array_new_with_free_func (g_free);
packages = md_filelists->priv->array;
for (i=0; i<packages->len; i++) {
package = g_ptr_array_index (packages, i);
- pkgid = g_object_get_data (G_OBJECT (package), "pkgid");
- files = zif_package_get_files (package, NULL);
+ pkgid = zif_package_remote_get_pkgid (ZIF_PACKAGE_REMOTE (package));
+ completion_loop = zif_completion_get_child (completion_local);
+ files = zif_package_get_files (package, cancellable, completion_loop, NULL);
for (k=0; k<files->len; k++) {
filename = g_ptr_array_index (files, k);
for (j=0; search[j] != NULL; j++) {
@@ -379,6 +455,9 @@ zif_md_filelists_xml_search_file (ZifMd *md, gchar **search,
}
}
}
+
+ /* this section done */
+ zif_completion_done (completion_local);
}
/* this section done */
@@ -420,6 +499,7 @@ zif_md_filelists_xml_class_init (ZifMdFilelistsXmlClass *klass)
md_class->load = zif_md_filelists_xml_load;
md_class->unload = zif_md_filelists_xml_unload;
md_class->search_file = zif_md_filelists_xml_search_file;
+ md_class->get_files = zif_md_filelists_xml_get_files;
g_type_class_add_private (klass, sizeof (ZifMdFilelistsXmlPrivate));
}
@@ -569,7 +649,9 @@ zif_md_filelists_xml_test (EggTest *test)
/************************************************************/
egg_test_title (test, "correct value");
pkgid = g_ptr_array_index (array, 0);
- if (pkgid[0] != '\0' && strlen (pkgid) == 64)
+ if (pkgid == NULL)
+ egg_test_failed (test, "failed to get a pkgId");
+ else if (pkgid[0] != '\0' && strlen (pkgid) == 64)
egg_test_success (test, NULL);
else
egg_test_failed (test, "failed to get a correct pkgId '%s' (%i)", pkgid, strlen (pkgid));
diff --git a/backends/yum/libzif/zif-md-other-sql.c b/backends/yum/libzif/zif-md-other-sql.c
index f5ccba8..9ff6bde 100644
--- a/backends/yum/libzif/zif-md-other-sql.c
+++ b/backends/yum/libzif/zif-md-other-sql.c
@@ -145,7 +145,7 @@ zif_md_other_sql_sqlite_create_changelog_cb (void *data, gint argc, gchar **argv
changeset = zif_changeset_new ();
zif_changeset_set_date (changeset, date);
zif_changeset_set_description (changeset, changelog);
- ret = zif_changeset_parse_header (changeset, author, NULL);
+ ret = zif_changeset_parse_header (changeset, author, &error);
if (!ret) {
egg_warning ("failed to parse header: %s", error->message);
g_error_free (error);
@@ -299,6 +299,9 @@ zif_md_other_sql_get_changelog (ZifMd *md, const gchar *pkgid,
/* clear array */
g_ptr_array_unref (array_tmp);
+
+ /* this section done */
+ zif_completion_done (completion_local);
}
/* this section done */
@@ -467,7 +470,7 @@ zif_md_other_sql_test (EggTest *test)
/************************************************************/
egg_test_title (test, "search for files");
zif_completion_reset (completion);
- array = zif_md_other_sql_get_changelog (ZIF_MD_OTHER_SQL (md),
+ array = zif_md_other_sql_get_changelog (ZIF_MD (md),
"42b8d71b303b19c2fcc2b06bb9c764f2902dd72b9376525025ee9ba4a41c38e9",
cancellable, completion, &error);
if (array != NULL)
diff --git a/backends/yum/libzif/zif-md-primary-sql.c b/backends/yum/libzif/zif-md-primary-sql.c
index bec2495..7b8cb9b 100644
--- a/backends/yum/libzif/zif-md-primary-sql.c
+++ b/backends/yum/libzif/zif-md-primary-sql.c
@@ -59,6 +59,7 @@ struct _ZifMdPrimarySqlPrivate
typedef struct {
const gchar *id;
GPtrArray *packages;
+ ZifMdPrimarySql *md;
} ZifMdPrimarySqlData;
G_DEFINE_TYPE (ZifMdPrimarySql, zif_md_primary_sql, ZIF_TYPE_MD)
@@ -123,8 +124,16 @@ zif_md_primary_sql_sqlite_create_package_cb (void *data, gint argc, gchar **argv
{
ZifMdPrimarySqlData *fldata = (ZifMdPrimarySqlData *) data;
ZifPackageRemote *package;
+ ZifStoreRemote *store_remote;
package = zif_package_remote_new ();
+ store_remote = zif_md_get_store_remote (ZIF_MD (fldata->md));
+ if (store_remote != NULL) {
+ /* this is not set in a test harness */
+ zif_package_remote_set_store_remote (package, store_remote);
+ } else {
+ egg_warning ("no remote store for %s", argv[1]);
+ }
zif_package_remote_set_from_repo (package, argc, col_name, argv, fldata->id, NULL);
g_ptr_array_add (fldata->packages, package);
@@ -162,6 +171,7 @@ zif_md_primary_sql_search (ZifMdPrimarySql *md, const gchar *statement,
/* create data struct we can pass to the callback */
data = g_new0 (ZifMdPrimarySqlData, 1);
+ data->md = md;
data->id = zif_md_get_id (ZIF_MD (md));
data->packages = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
rc = sqlite3_exec (md->priv->db, statement, zif_md_primary_sql_sqlite_create_package_cb, data, &error_msg);
@@ -449,7 +459,7 @@ zif_md_primary_sql_what_provides (ZifMd *md, gchar **search,
/* get packages for pkgKey */
completion_loop = zif_completion_get_child (completion_local);
- array_tmp = zif_md_primary_sql_search_pkgkey (md, pkgkey, cancellable, completion, error);
+ array_tmp = zif_md_primary_sql_search_pkgkey (md, pkgkey, cancellable, completion_loop, error);
if (array_tmp == NULL) {
g_ptr_array_unref (array);
array = NULL;
@@ -468,6 +478,9 @@ zif_md_primary_sql_what_provides (ZifMd *md, gchar **search,
/* clear array */
g_ptr_array_unref (array_tmp);
+
+ /* this section done */
+ zif_completion_done (completion_local);
}
/* this section done */
@@ -602,7 +615,7 @@ zif_md_primary_sql_test (EggTest *test)
GError *error = NULL;
GPtrArray *array;
ZifPackage *package;
- ZifString *summary;
+ const gchar *summary;
GCancellable *cancellable;
ZifCompletion *completion;
gchar *data[] = { "gnome-power-manager", "gnome-color-manager", NULL };
@@ -685,7 +698,7 @@ zif_md_primary_sql_test (EggTest *test)
/************************************************************/
egg_test_title (test, "resolve");
- array = zif_md_primary_sql_resolve (md, data, cancellable, completion, &error);
+ array = zif_md_primary_sql_resolve (ZIF_MD (md), data, cancellable, completion, &error);
if (array != NULL)
egg_test_success (test, NULL);
else
@@ -698,12 +711,12 @@ zif_md_primary_sql_test (EggTest *test)
/************************************************************/
egg_test_title (test, "correct value");
package = g_ptr_array_index (array, 0);
- summary = zif_package_get_summary (package, NULL);
- if (g_strcmp0 (zif_string_get_value (summary), "GNOME Power Manager") == 0)
+ zif_completion_reset (completion);
+ summary = zif_package_get_summary (package, NULL, completion, NULL);
+ if (g_strcmp0 (summary, "GNOME Power Manager") == 0)
egg_test_success (test, NULL);
else
- egg_test_failed (test, "failed to get correct summary '%s'", zif_string_get_value (summary));
- zif_string_unref (summary);
+ egg_test_failed (test, "failed to get correct summary '%s'", summary);
g_ptr_array_unref (array);
g_object_unref (cancellable);
diff --git a/backends/yum/libzif/zif-md-primary-xml.c b/backends/yum/libzif/zif-md-primary-xml.c
index c1d3564..6e3454b 100644
--- a/backends/yum/libzif/zif-md-primary-xml.c
+++ b/backends/yum/libzif/zif-md-primary-xml.c
@@ -124,7 +124,7 @@ zif_md_primary_xml_parser_start_element (GMarkupParseContext *context, const gch
/* start of update */
if (g_strcmp0 (element_name, "package") == 0) {
primary_xml->priv->section = ZIF_MD_PRIMARY_XML_SECTION_PACKAGE;
- primary_xml->priv->package_temp = zif_package_new ();
+ primary_xml->priv->package_temp = ZIF_PACKAGE (zif_package_remote_new ());
goto out;
}
@@ -376,8 +376,7 @@ zif_md_primary_xml_parser_text (GMarkupParseContext *context, const gchar *text,
goto out;
}
if (primary_xml->priv->section_package == ZIF_MD_PRIMARY_XML_SECTION_PACKAGE_CHECKSUM) {
- /* TODO: put in to the zif API? */
- g_object_set_data_full (G_OBJECT(primary_xml->priv->package_temp), "pkgid", g_strdup (text), g_free);
+ zif_package_remote_set_pkgid (ZIF_PACKAGE_REMOTE (primary_xml->priv->package_temp), text);
goto out;
}
egg_warning ("not saving: %s", text);
@@ -468,9 +467,9 @@ zif_md_primary_xml_filter (ZifMd *md, ZifPackageFilterFunc filter_func, gpointer
/* setup completion */
if (md_primary->priv->loaded)
- zif_completion_set_number_steps (completion, 2);
+ zif_completion_set_number_steps (completion, 1);
else
- zif_completion_set_number_steps (completion, 3);
+ zif_completion_set_number_steps (completion, 2);
/* if not already loaded, load */
if (!md_primary->priv->loaded) {
@@ -565,29 +564,42 @@ zif_md_primary_xml_search_details_cb (ZifPackage *package, gpointer user_data)
guint i;
gboolean ret = FALSE;
const gchar *name;
- ZifString *summary;
- ZifString *description;
+ const gchar *summary;
+ const gchar *description;
+ ZifCompletion *completion_tmp;
+ GError *error = NULL;
gchar **search = (gchar **) user_data;
+ completion_tmp = zif_completion_new ();
name = zif_package_get_name (package);
- summary = zif_package_get_summary (package, NULL);
- description = zif_package_get_description (package, NULL);
+ summary = zif_package_get_summary (package, NULL, completion_tmp, &error);
+ if (summary == NULL) {
+ egg_warning ("failed to get summary: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
+ description = zif_package_get_description (package, NULL, completion_tmp, &error);
+ if (description == NULL) {
+ egg_warning ("failed to get description: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
for (i=0; search[i] != NULL; i++) {
if (g_strstr_len (name, -1, search[i]) != NULL) {
ret = TRUE;
break;
}
- if (g_strstr_len (zif_string_get_value (summary), -1, search[i]) != NULL) {
+ if (g_strstr_len (summary, -1, search[i]) != NULL) {
ret = TRUE;
break;
}
- if (g_strstr_len (zif_string_get_value (description), -1, search[i]) != NULL) {
+ if (g_strstr_len (description, -1, search[i]) != NULL) {
ret = TRUE;
break;
}
}
- zif_string_unref (summary);
- zif_string_unref (description);
+out:
+ g_object_unref (completion_tmp);
return ret;
}
@@ -608,17 +620,27 @@ static gboolean
zif_md_primary_xml_search_group_cb (ZifPackage *package, gpointer user_data)
{
guint i;
- gboolean ret;
- ZifString *value;
+ gboolean ret = FALSE;
+ const gchar *value;
+ ZifCompletion *completion_tmp;
+ GError *error = NULL;
gchar **search = (gchar **) user_data;
- value = zif_package_get_category (package, NULL);
+
+ completion_tmp = zif_completion_new ();
+ value = zif_package_get_category (package, NULL, completion_tmp, &error);
+ if (value == NULL) {
+ egg_warning ("failed to get category: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
for (i=0; search[i] != NULL; i++) {
- if (g_strstr_len (zif_string_get_value (value), -1, search[i]) != NULL) {
+ if (g_strstr_len (value, -1, search[i]) != NULL) {
ret = TRUE;
- break;
+ goto out;
}
}
- zif_string_unref (value);
+out:
+ g_object_unref (completion_tmp);
return ret;
}
@@ -639,11 +661,11 @@ static gboolean
zif_md_primary_xml_search_pkgid_cb (ZifPackage *package, gpointer user_data)
{
guint i;
- const gchar *value;
+ const gchar *pkgid;
gchar **search = (gchar **) user_data;
- value = (const gchar *) g_object_get_data (G_OBJECT (package), "pkgid");
+ pkgid = zif_package_remote_get_pkgid (ZIF_PACKAGE_REMOTE (package));
for (i=0; search[i] != NULL; i++) {
- if (g_strcmp0 (value, search[i]) == 0)
+ if (g_strcmp0 (pkgid, search[i]) == 0)
return TRUE;
}
return FALSE;
@@ -667,12 +689,24 @@ zif_md_primary_xml_what_provides_cb (ZifPackage *package, gpointer user_data)
{
// guint i;
gboolean ret;
- GPtrArray *array;
+ GPtrArray *array = NULL;
+ ZifCompletion *completion_tmp;
+ GError *error = NULL;
// gchar **search = (gchar **) user_data;
- array = zif_package_get_provides (package, NULL);
+
+ completion_tmp = zif_completion_new ();
+ array = zif_package_get_provides (package, NULL, completion_tmp, &error);
+ if (array == NULL) {
+ egg_warning ("failed to get provides: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
/* TODO: do something with the ZifDepend objects */
ret = FALSE;
- g_ptr_array_unref (array);
+ g_object_unref (completion_tmp);
+out:
+ if (array != NULL)
+ g_ptr_array_unref (array);
return ret;
}
@@ -804,7 +838,7 @@ zif_md_primary_xml_test (EggTest *test)
GError *error = NULL;
GPtrArray *array;
ZifPackage *package;
- ZifString *summary;
+ const gchar *summary;
GCancellable *cancellable;
ZifCompletion *completion;
gchar *data[] = { "gnome-power-manager", NULL };
@@ -888,7 +922,7 @@ zif_md_primary_xml_test (EggTest *test)
/************************************************************/
egg_test_title (test, "search for files");
zif_completion_reset (completion);
- array = zif_md_primary_xml_resolve (md, data, cancellable, completion, &error);
+ array = zif_md_primary_xml_resolve (ZIF_MD (md), data, cancellable, completion, &error);
if (array != NULL)
egg_test_success (test, NULL);
else
@@ -901,12 +935,12 @@ zif_md_primary_xml_test (EggTest *test)
/************************************************************/
egg_test_title (test, "correct value");
package = g_ptr_array_index (array, 0);
- summary = zif_package_get_summary (package, NULL);
- if (g_strcmp0 (zif_string_get_value (summary), "GNOME power management service") == 0)
+ zif_completion_reset (completion);
+ summary = zif_package_get_summary (package, NULL, completion, NULL);
+ if (g_strcmp0 (summary, "GNOME power management service") == 0)
egg_test_success (test, NULL);
else
- egg_test_failed (test, "failed to get correct summary '%s'", zif_string_get_value (summary));
- zif_string_unref (summary);
+ egg_test_failed (test, "failed to get correct summary '%s'", summary);
g_ptr_array_unref (array);
g_object_unref (cancellable);
diff --git a/backends/yum/libzif/zif-md.c b/backends/yum/libzif/zif-md.c
index 7bdea8d..9ba1e9d 100644
--- a/backends/yum/libzif/zif-md.c
+++ b/backends/yum/libzif/zif-md.c
@@ -379,11 +379,11 @@ zif_md_set_id (ZifMd *md, const gchar *id)
}
/**
- * zif_md_set_id:
+ * zif_md_set_store_remote:
* @md: the #ZifMd object
- * @id: the repository id, e.g. "fedora"
+ * @remote: the #ZifStoreRemote that created this metadata object
*
- * Sets the repository ID for this metadata.
+ * Sets the remote store for this metadata.
*
* Return value: %TRUE for success, %FALSE for failure
*
@@ -402,6 +402,23 @@ zif_md_set_store_remote (ZifMd *md, ZifStoreRemote *remote)
}
/**
+ * zif_md_get_store_remote:
+ * @md: the #ZifMd object
+ *
+ * Gets the remote store for this metadata.
+ *
+ * Return value: A #ZifStoreRemote or %NULL for unset
+ *
+ * Since: 0.0.1
+ **/
+ZifStoreRemote *
+zif_md_get_store_remote (ZifMd *md)
+{
+ g_return_val_if_fail (ZIF_IS_MD (md), NULL);
+ return md->priv->remote;
+}
+
+/**
* zif_md_delete_file:
**/
static gboolean
@@ -943,6 +960,42 @@ out:
}
/**
+ * zif_md_get_files:
+ * @md: the #ZifMd object
+ * @package: the %ZifPackage
+ * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
+ * @completion: a #ZifCompletion to use for progress reporting
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Gets the file list for a specific package.
+ *
+ * Return value: an array of strings, free with g_ptr_array_unref()
+ *
+ * Since: 0.0.1
+ **/
+GPtrArray *
+zif_md_get_files (ZifMd *md, ZifPackage *package, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ GPtrArray *array = NULL;
+ ZifMdClass *klass = ZIF_MD_GET_CLASS (md);
+
+ g_return_val_if_fail (ZIF_IS_MD (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* no support */
+ if (klass->get_files == NULL) {
+ g_set_error_literal (error, ZIF_MD_ERROR, ZIF_MD_ERROR_NO_SUPPORT,
+ "operation cannot be performed on this md");
+ goto out;
+ }
+
+ /* do subclassed action */
+ array = klass->get_files (md, package, cancellable, completion, error);
+out:
+ return array;
+}
+
+/**
* zif_md_get_packages:
* @md: the #ZifMd object
* @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
diff --git a/backends/yum/libzif/zif-md.h b/backends/yum/libzif/zif-md.h
index a0e93b5..dd9c7a8 100644
--- a/backends/yum/libzif/zif-md.h
+++ b/backends/yum/libzif/zif-md.h
@@ -114,6 +114,11 @@ struct _ZifMdClass
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
+ GPtrArray *(*get_files) (ZifMd *md,
+ ZifPackage *package,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
};
/* types of metadata */
@@ -152,6 +157,7 @@ gboolean zif_md_set_mdtype (ZifMd *md,
ZifMdType type);
gboolean zif_md_set_store_remote (ZifMd *md,
ZifStoreRemote *remote);
+ZifStoreRemote *zif_md_get_store_remote (ZifMd *md);
gboolean zif_md_set_id (ZifMd *md,
const gchar *id);
gboolean zif_md_set_filename (ZifMd *md,
@@ -240,6 +246,11 @@ GPtrArray *zif_md_get_changelog (ZifMd *md,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
+GPtrArray *zif_md_get_files (ZifMd *md,
+ ZifPackage *package,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
G_END_DECLS
diff --git a/backends/yum/libzif/zif-package-local.c b/backends/yum/libzif/zif-package-local.c
index d0a5cde..4a6cf5b 100644
--- a/backends/yum/libzif/zif-package-local.c
+++ b/backends/yum/libzif/zif-package-local.c
@@ -253,7 +253,7 @@ zif_package_local_get_depends_from_name_flags_version (GPtrArray *names, GPtrArr
* zif_package_local_ensure_data:
*/
static gboolean
-zif_package_local_ensure_data (ZifPackage *pkg, ZifPackageEnsureType type, GError **error)
+zif_package_local_ensure_data (ZifPackage *pkg, ZifPackageEnsureType type, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
GPtrArray *files;
GPtrArray *dirnames;
@@ -263,6 +263,7 @@ zif_package_local_ensure_data (ZifPackage *pkg, ZifPackageEnsureType type, GErro
gchar *filename;
guint size;
ZifString *tmp;
+ const gchar *text;
PkGroupEnum group;
// GPtrArray *tmparray;
GPtrArray *depends;
@@ -374,13 +375,12 @@ zif_package_local_ensure_data (ZifPackage *pkg, ZifPackageEnsureType type, GErro
} else if (type == ZIF_PACKAGE_ENSURE_TYPE_GROUP) {
/* group */
- tmp = zif_package_get_category (pkg, error);
- if (tmp == NULL)
+ text = zif_package_get_category (pkg, cancellable, completion, error);
+ if (text == NULL)
goto out;
- group = zif_groups_get_group_for_cat (ZIF_PACKAGE_LOCAL (pkg)->priv->groups, zif_string_get_value (tmp), NULL);
+ group = zif_groups_get_group_for_cat (ZIF_PACKAGE_LOCAL (pkg)->priv->groups, text, NULL);
if (group != PK_GROUP_ENUM_UNKNOWN)
zif_package_set_group (pkg, group);
- zif_string_unref (tmp);
} else if (type == ZIF_PACKAGE_ENSURE_TYPE_REQUIRES) {
/* requires */
diff --git a/backends/yum/libzif/zif-package-remote.c b/backends/yum/libzif/zif-package-remote.c
index fb74008..6c552ad 100644
--- a/backends/yum/libzif/zif-package-remote.c
+++ b/backends/yum/libzif/zif-package-remote.c
@@ -40,6 +40,7 @@
#include "zif-package-remote.h"
#include "zif-groups.h"
#include "zif-string.h"
+#include "zif-store-remote.h"
#define ZIF_PACKAGE_REMOTE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_PACKAGE_REMOTE, ZifPackageRemotePrivate))
@@ -51,6 +52,7 @@
struct _ZifPackageRemotePrivate
{
ZifGroups *groups;
+ ZifStoreRemote *store_remote;
gchar *pkgid;
};
@@ -161,6 +163,80 @@ zif_package_remote_get_pkgid (ZifPackageRemote *pkg)
}
/**
+ * zif_package_remote_set_pkgid:
+ * @pkg: the #ZifPackageRemote object
+ * @pkgid: the pkgid hash.
+ *
+ * Sets the pkgid used internally to track the package item.
+ *
+ * Return value: the pkgid hash.
+ *
+ * Since: 0.0.1
+ **/
+void
+zif_package_remote_set_pkgid (ZifPackageRemote *pkg, const gchar *pkgid)
+{
+ g_return_if_fail (ZIF_IS_PACKAGE_REMOTE (pkg));
+ g_return_if_fail (pkgid != NULL);
+ g_return_if_fail (pkg->priv->pkgid == NULL);
+ pkg->priv->pkgid = g_strdup (pkgid);
+}
+
+/**
+ * zif_package_remote_set_store_remote:
+ * @pkg: the #ZifPackageRemote object
+ * @store: the #ZifStoreRemote that created this package
+ *
+ * Sets the store used to create this package, which we may need of we ever
+ * need to ensure() data at runtime.
+ *
+ * Return value: the pkgid hash.
+ *
+ * Since: 0.0.1
+ **/
+void
+zif_package_remote_set_store_remote (ZifPackageRemote *pkg, ZifStoreRemote *store)
+{
+ g_return_if_fail (ZIF_IS_PACKAGE_REMOTE (pkg));
+ g_return_if_fail (ZIF_IS_STORE_REMOTE (store));
+ g_return_if_fail (pkg->priv->store_remote == NULL);
+ pkg->priv->store_remote = g_object_ref (store);
+}
+
+/*
+ * zif_package_remote_ensure_data:
+ */
+static gboolean
+zif_package_remote_ensure_data (ZifPackage *pkg, ZifPackageEnsureType type, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gboolean ret = TRUE;
+ GPtrArray *array = NULL;
+ ZifPackageRemote *pkg_remote = ZIF_PACKAGE_REMOTE (pkg);
+
+ if (type == ZIF_PACKAGE_ENSURE_TYPE_FILES) {
+
+ /* get the file list for this package */
+ array = zif_store_remote_get_files (pkg_remote->priv->store_remote, pkg, cancellable, completion, error);
+ if (array == NULL) {
+ ret = FALSE;
+ goto out;
+ }
+
+ /* set for this package */
+ zif_package_set_files (pkg, array);
+ } else {
+ g_set_error (error, 1, 0,
+ "Getting ensure type '%s' not supported on a ZifPackageRemote",
+ zif_package_ensure_type_to_string (type));
+ ret = FALSE;
+ }
+out:
+ if (array != NULL)
+ g_ptr_array_unref (array);
+ return ret;
+}
+
+/**
* zif_package_remote_finalize:
**/
static void
@@ -174,6 +250,8 @@ zif_package_remote_finalize (GObject *object)
g_free (pkg->priv->pkgid);
g_object_unref (pkg->priv->groups);
+ if (pkg->priv->store_remote != NULL)
+ g_object_unref (pkg->priv->store_remote);
G_OBJECT_CLASS (zif_package_remote_parent_class)->finalize (object);
}
@@ -185,7 +263,9 @@ static void
zif_package_remote_class_init (ZifPackageRemoteClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ ZifPackageClass *package_class = ZIF_PACKAGE_CLASS (klass);
object_class->finalize = zif_package_remote_finalize;
+ package_class->ensure_data = zif_package_remote_ensure_data;
g_type_class_add_private (klass, sizeof (ZifPackageRemotePrivate));
}
@@ -197,6 +277,7 @@ zif_package_remote_init (ZifPackageRemote *pkg)
{
pkg->priv = ZIF_PACKAGE_REMOTE_GET_PRIVATE (pkg);
pkg->priv->pkgid = NULL;
+ pkg->priv->store_remote = NULL;
pkg->priv->groups = zif_groups_new ();
}
diff --git a/backends/yum/libzif/zif-package-remote.h b/backends/yum/libzif/zif-package-remote.h
index d29de69..02fab89 100644
--- a/backends/yum/libzif/zif-package-remote.h
+++ b/backends/yum/libzif/zif-package-remote.h
@@ -29,6 +29,7 @@
#include <glib-object.h>
#include "zif-package.h"
+#include "zif-store-remote.h"
G_BEGIN_DECLS
@@ -63,6 +64,10 @@ gboolean zif_package_remote_set_from_repo (ZifPackageRemote *pkg,
const gchar *repo_id,
GError **error);
const gchar *zif_package_remote_get_pkgid (ZifPackageRemote *pkg);
+void zif_package_remote_set_pkgid (ZifPackageRemote *pkg,
+ const gchar *pkgid);
+void zif_package_remote_set_store_remote (ZifPackageRemote *pkg,
+ ZifStoreRemote *store);
G_END_DECLS
diff --git a/backends/yum/libzif/zif-package.c b/backends/yum/libzif/zif-package.c
index 5621a1a..d0795ec 100644
--- a/backends/yum/libzif/zif-package.c
+++ b/backends/yum/libzif/zif-package.c
@@ -466,27 +466,32 @@ zif_package_is_devel (ZifPackage *package)
gboolean
zif_package_is_gui (ZifPackage *package)
{
+ gboolean ret = FALSE;
guint i;
const ZifDepend *depend;
GPtrArray *array;
+ ZifCompletion *completion_tmp;
g_return_val_if_fail (ZIF_IS_PACKAGE (package), FALSE);
g_return_val_if_fail (package->priv->package_id_split != NULL, FALSE);
/* get list of requires */
- array = zif_package_get_requires (package, NULL);
+ completion_tmp = zif_completion_new ();
+ array = zif_package_get_requires (package, NULL, completion_tmp, NULL);
if (array == NULL)
goto out;
for (i=0; i<array->len; i++) {
depend = g_ptr_array_index (array, i);
- if (g_strstr_len (depend->name, -1, "gtk") != NULL)
- return TRUE;
- if (g_strstr_len (depend->name, -1, "kde") != NULL)
- return TRUE;
+ if (g_strstr_len (depend->name, -1, "gtk") != NULL ||
+ g_strstr_len (depend->name, -1, "kde") != NULL) {
+ ret = TRUE;
+ break;
+ }
}
g_ptr_array_unref (array);
out:
- return FALSE;
+ g_object_unref (completion_tmp);
+ return ret;
}
/**
@@ -686,7 +691,7 @@ zif_package_get_package_id (ZifPackage *package)
*
* Return value: The #ZifPackageEnsureType represented as a string
**/
-static const gchar *
+const gchar *
zif_package_ensure_type_to_string (ZifPackageEnsureType type)
{
if (type == ZIF_PACKAGE_ENSURE_TYPE_FILES)
@@ -718,7 +723,8 @@ zif_package_ensure_type_to_string (ZifPackageEnsureType type)
* zif_package_ensure_data:
**/
static gboolean
-zif_package_ensure_data (ZifPackage *package, ZifPackageEnsureType type, GError **error)
+zif_package_ensure_data (ZifPackage *package, ZifPackageEnsureType type,
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
gboolean ret = FALSE;
ZifPackageClass *klass = ZIF_PACKAGE_GET_CLASS (package);
@@ -733,7 +739,7 @@ zif_package_ensure_data (ZifPackage *package, ZifPackageEnsureType type, GError
goto out;
}
- ret = klass->ensure_data (package, type, error);
+ ret = klass->ensure_data (package, type, cancellable, completion, error);
out:
return ret;
}
@@ -745,12 +751,12 @@ out:
*
* Gets the package summary.
*
- * Return value: the reference counted #ZifString or %NULL, use zif_string_unref() when done
+ * Return value: the const string or %NULL
*
* Since: 0.0.1
**/
-ZifString *
-zif_package_get_summary (ZifPackage *package, GError **error)
+const gchar *
+zif_package_get_summary (ZifPackage *package, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
gboolean ret;
@@ -760,13 +766,13 @@ zif_package_get_summary (ZifPackage *package, GError **error)
/* not exists */
if (package->priv->summary == NULL) {
- ret = zif_package_ensure_data (package, ZIF_PACKAGE_ENSURE_TYPE_SUMMARY, error);
+ ret = zif_package_ensure_data (package, ZIF_PACKAGE_ENSURE_TYPE_SUMMARY, cancellable, completion, error);
if (!ret)
return NULL;
}
- /* return refcounted */
- return zif_string_ref (package->priv->summary);
+ /* return const string */
+ return zif_string_get_value (package->priv->summary);
}
/**
@@ -776,12 +782,12 @@ zif_package_get_summary (ZifPackage *package, GError **error)
*
* Gets the package description.
*
- * Return value: the reference counted #ZifString or %NULL, use zif_string_unref() when done
+ * Return value: the const string or %NULL
*
* Since: 0.0.1
**/
-ZifString *
-zif_package_get_description (ZifPackage *package, GError **error)
+const gchar *
+zif_package_get_description (ZifPackage *package, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
gboolean ret;
@@ -791,13 +797,13 @@ zif_package_get_description (ZifPackage *package, GError **error)
/* not exists */
if (package->priv->description == NULL) {
- ret = zif_package_ensure_data (package, ZIF_PACKAGE_ENSURE_TYPE_DESCRIPTION, error);
+ ret = zif_package_ensure_data (package, ZIF_PACKAGE_ENSURE_TYPE_DESCRIPTION, cancellable, completion, error);
if (!ret)
return NULL;
}
- /* return refcounted */
- return zif_string_ref (package->priv->description);
+ /* return const string */
+ return zif_string_get_value (package->priv->description);
}
/**
@@ -807,12 +813,12 @@ zif_package_get_description (ZifPackage *package, GError **error)
*
* Gets the package licence.
*
- * Return value: the reference counted #ZifString or %NULL, use zif_string_unref() when done
+ * Return value: the const string or %NULL
*
* Since: 0.0.1
**/
-ZifString *
-zif_package_get_license (ZifPackage *package, GError **error)
+const gchar *
+zif_package_get_license (ZifPackage *package, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
gboolean ret;
@@ -822,13 +828,13 @@ zif_package_get_license (ZifPackage *package, GError **error)
/* not exists */
if (package->priv->license == NULL) {
- ret = zif_package_ensure_data (package, ZIF_PACKAGE_ENSURE_TYPE_LICENCE, error);
+ ret = zif_package_ensure_data (package, ZIF_PACKAGE_ENSURE_TYPE_LICENCE, cancellable, completion, error);
if (!ret)
return NULL;
}
- /* return refcounted */
- return zif_string_ref (package->priv->license);
+ /* return const string */
+ return zif_string_get_value (package->priv->license);
}
/**
@@ -838,12 +844,12 @@ zif_package_get_license (ZifPackage *package, GError **error)
*
* Gets the homepage URL for the package.
*
- * Return value: the reference counted #ZifString or %NULL, use zif_string_unref() when done
+ * Return value: the const string or %NULL
*
* Since: 0.0.1
**/
-ZifString *
-zif_package_get_url (ZifPackage *package, GError **error)
+const gchar *
+zif_package_get_url (ZifPackage *package, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
gboolean ret;
@@ -853,13 +859,13 @@ zif_package_get_url (ZifPackage *package, GError **error)
/* not exists */
if (package->priv->url == NULL) {
- ret = zif_package_ensure_data (package, ZIF_PACKAGE_ENSURE_TYPE_URL, error);
+ ret = zif_package_ensure_data (package, ZIF_PACKAGE_ENSURE_TYPE_URL, cancellable, completion, error);
if (!ret)
return NULL;
}
- /* return refcounted */
- return zif_string_ref (package->priv->url);
+ /* return const string */
+ return zif_string_get_value (package->priv->url);
}
/**
@@ -869,12 +875,12 @@ zif_package_get_url (ZifPackage *package, GError **error)
*
* Gets the remote filename for the package, e.g. Packages/net-snmp-5.4.2-3.fc10.i386.rpm
*
- * Return value: the reference counted #ZifString or %NULL, use zif_string_unref() when done
+ * Return value: the const string or %NULL
*
* Since: 0.0.1
**/
-ZifString *
-zif_package_get_filename (ZifPackage *package, GError **error)
+const gchar *
+zif_package_get_filename (ZifPackage *package, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
g_return_val_if_fail (ZIF_IS_PACKAGE (package), NULL);
g_return_val_if_fail (package->priv->package_id_split != NULL, NULL);
@@ -894,8 +900,8 @@ zif_package_get_filename (ZifPackage *package, GError **error)
return NULL;
}
- /* return refcounted */
- return zif_string_ref (package->priv->location_href);
+ /* return const string */
+ return zif_string_get_value (package->priv->location_href);
}
/**
@@ -905,12 +911,12 @@ zif_package_get_filename (ZifPackage *package, GError **error)
*
* Gets the category the packag is in.
*
- * Return value: the reference counted #ZifString or %NULL, use zif_string_unref() when done
+ * Return value: the const string or %NULL
*
* Since: 0.0.1
**/
-ZifString *
-zif_package_get_category (ZifPackage *package, GError **error)
+const gchar *
+zif_package_get_category (ZifPackage *package, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
gboolean ret;
@@ -920,13 +926,13 @@ zif_package_get_category (ZifPackage *package, GError **error)
/* not exists */
if (package->priv->category == NULL) {
- ret = zif_package_ensure_data (package, ZIF_PACKAGE_ENSURE_TYPE_CATEGORY, error);
+ ret = zif_package_ensure_data (package, ZIF_PACKAGE_ENSURE_TYPE_CATEGORY, cancellable, completion, error);
if (!ret)
return NULL;
}
- /* return refcounted */
- return zif_string_ref (package->priv->category);
+ /* return const string */
+ return zif_string_get_value (package->priv->category);
}
/**
@@ -941,7 +947,7 @@ zif_package_get_category (ZifPackage *package, GError **error)
* Since: 0.0.1
**/
PkGroupEnum
-zif_package_get_group (ZifPackage *package, GError **error)
+zif_package_get_group (ZifPackage *package, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
gboolean ret;
@@ -950,7 +956,7 @@ zif_package_get_group (ZifPackage *package, GError **error)
/* not exists */
if (package->priv->group == PK_GROUP_ENUM_UNKNOWN) {
- ret = zif_package_ensure_data (package, ZIF_PACKAGE_ENSURE_TYPE_GROUP, error);
+ ret = zif_package_ensure_data (package, ZIF_PACKAGE_ENSURE_TYPE_GROUP, cancellable, completion, error);
if (!ret)
return PK_GROUP_ENUM_UNKNOWN;
}
@@ -974,7 +980,7 @@ zif_package_get_group (ZifPackage *package, GError **error)
* Since: 0.0.1
**/
guint64
-zif_package_get_size (ZifPackage *package, GError **error)
+zif_package_get_size (ZifPackage *package, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
gboolean ret;
@@ -982,7 +988,7 @@ zif_package_get_size (ZifPackage *package, GError **error)
g_return_val_if_fail (error == NULL || *error == NULL, 0);
if (package->priv->size == 0) {
- ret = zif_package_ensure_data (package, ZIF_PACKAGE_ENSURE_TYPE_SIZE, error);
+ ret = zif_package_ensure_data (package, ZIF_PACKAGE_ENSURE_TYPE_SIZE, cancellable, completion, error);
if (!ret)
return 0;
}
@@ -1004,7 +1010,7 @@ zif_package_get_size (ZifPackage *package, GError **error)
* Since: 0.0.1
**/
GPtrArray *
-zif_package_get_files (ZifPackage *package, GError **error)
+zif_package_get_files (ZifPackage *package, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
gboolean ret;
@@ -1013,7 +1019,7 @@ zif_package_get_files (ZifPackage *package, GError **error)
/* not exists */
if (package->priv->files == NULL) {
- ret = zif_package_ensure_data (package, ZIF_PACKAGE_ENSURE_TYPE_FILES, error);
+ ret = zif_package_ensure_data (package, ZIF_PACKAGE_ENSURE_TYPE_FILES, cancellable, completion, error);
if (!ret)
return NULL;
}
@@ -1034,7 +1040,7 @@ zif_package_get_files (ZifPackage *package, GError **error)
* Since: 0.0.1
**/
GPtrArray *
-zif_package_get_requires (ZifPackage *package, GError **error)
+zif_package_get_requires (ZifPackage *package, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
gboolean ret;
@@ -1044,7 +1050,7 @@ zif_package_get_requires (ZifPackage *package, GError **error)
/* not exists */
if (package->priv->requires == NULL) {
- ret = zif_package_ensure_data (package, ZIF_PACKAGE_ENSURE_TYPE_REQUIRES, error);
+ ret = zif_package_ensure_data (package, ZIF_PACKAGE_ENSURE_TYPE_REQUIRES, cancellable, completion, error);
if (!ret)
return NULL;
}
@@ -1065,7 +1071,7 @@ zif_package_get_requires (ZifPackage *package, GError **error)
* Since: 0.0.1
**/
GPtrArray *
-zif_package_get_provides (ZifPackage *package, GError **error)
+zif_package_get_provides (ZifPackage *package, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
gboolean ret;
@@ -1075,7 +1081,7 @@ zif_package_get_provides (ZifPackage *package, GError **error)
/* not exists */
if (package->priv->provides == NULL) {
- ret = zif_package_ensure_data (package, ZIF_PACKAGE_ENSURE_TYPE_PROVIDES, error);
+ ret = zif_package_ensure_data (package, ZIF_PACKAGE_ENSURE_TYPE_PROVIDES, cancellable, completion, error);
if (!ret)
return NULL;
}
diff --git a/backends/yum/libzif/zif-package.h b/backends/yum/libzif/zif-package.h
index c958365..bd5ef2f 100644
--- a/backends/yum/libzif/zif-package.h
+++ b/backends/yum/libzif/zif-package.h
@@ -78,6 +78,8 @@ struct _ZifPackageClass
/* vtable */
gboolean (*ensure_data) (ZifPackage *package,
ZifPackageEnsureType type,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
GError **error);
};
@@ -93,27 +95,49 @@ ZifPackage *zif_package_new (void);
/* public getters */
const gchar *zif_package_get_id (ZifPackage *package);
const gchar *zif_package_get_name (ZifPackage *package);
-ZifString *zif_package_get_summary (ZifPackage *package,
+const gchar *zif_package_get_summary (ZifPackage *package,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
GError **error);
-ZifString *zif_package_get_description (ZifPackage *package,
+const gchar *zif_package_get_description (ZifPackage *package,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
GError **error);
-ZifString *zif_package_get_license (ZifPackage *package,
+const gchar *zif_package_get_license (ZifPackage *package,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
GError **error);
-ZifString *zif_package_get_url (ZifPackage *package,
+const gchar *zif_package_get_url (ZifPackage *package,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
GError **error);
-ZifString *zif_package_get_filename (ZifPackage *package,
+const gchar *zif_package_get_filename (ZifPackage *package,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
GError **error);
-ZifString *zif_package_get_category (ZifPackage *package,
+const gchar *zif_package_get_category (ZifPackage *package,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
GError **error);
PkGroupEnum zif_package_get_group (ZifPackage *package,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
GError **error);
guint64 zif_package_get_size (ZifPackage *package,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
GError **error);
GPtrArray *zif_package_get_files (ZifPackage *package,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
GError **error);
GPtrArray *zif_package_get_requires (ZifPackage *package,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
GError **error);
GPtrArray *zif_package_get_provides (ZifPackage *package,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
GError **error);
/* internal setters: TODO, in seporate -internal header file */
@@ -165,6 +189,7 @@ gint zif_package_compare (ZifPackage *a,
ZifPackage *zif_package_array_get_newest (GPtrArray *array,
GError **error);
gboolean zif_package_array_filter_newest (GPtrArray *packages);
+const gchar *zif_package_ensure_type_to_string (ZifPackageEnsureType type);
G_END_DECLS
diff --git a/backends/yum/libzif/zif-store-array.c b/backends/yum/libzif/zif-store-array.c
index d3867fd..6542b91 100644
--- a/backends/yum/libzif/zif-store-array.c
+++ b/backends/yum/libzif/zif-store-array.c
@@ -275,6 +275,7 @@ zif_store_array_repos_search (GPtrArray *store_array, PkRoleEnum role, gchar **s
/* do we need to skip this error */
if (error_cb != NULL && error_cb (store_array, error_local, user_data)) {
g_clear_error (&error_local);
+ zif_completion_finished (completion_local);
goto skip_error;
}
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
@@ -318,6 +319,7 @@ zif_store_array_find_package (GPtrArray *store_array, const gchar *package_id, G
guint i;
ZifStore *store;
ZifPackage *package = NULL;
+ GError *error_local = NULL;
ZifCompletion *completion_local = NULL;
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
@@ -337,9 +339,23 @@ zif_store_array_find_package (GPtrArray *store_array, const gchar *package_id, G
store = g_ptr_array_index (store_array, i);
completion_local = zif_completion_get_child (completion);
- package = zif_store_find_package (store, package_id, cancellable, completion_local, NULL);
- if (package != NULL)
+ package = zif_store_find_package (store, package_id, cancellable, completion_local, &error_local);
+
+ /* get results */
+ if (package == NULL) {
+ if (error_local->code == ZIF_STORE_ERROR_FAILED_TO_FIND) {
+ /* do not abort */
+ g_clear_error (&error_local);
+ zif_completion_finished (completion_local);
+ } else {
+ g_set_error (error, 1, 0, "failed to find package: %s", error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+ } else {
+ zif_completion_finished (completion);
break;
+ }
/* this section done */
zif_completion_done (completion);
@@ -404,6 +420,7 @@ zif_store_array_clean (GPtrArray *store_array,
if (error_cb != NULL && error_cb (store_array, error_local, user_data)) {
ret = TRUE;
g_clear_error (&error_local);
+ zif_completion_finished (completion_local);
goto skip_error;
}
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
@@ -469,6 +486,7 @@ zif_store_array_refresh (GPtrArray *store_array, gboolean force,
if (error_cb != NULL && error_cb (store_array, error_local, user_data)) {
ret = TRUE;
g_clear_error (&error_local);
+ zif_completion_finished (completion_local);
goto skip_error;
}
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
diff --git a/backends/yum/libzif/zif-store-local.c b/backends/yum/libzif/zif-store-local.c
index 0c830c0..4dbc3a5 100644
--- a/backends/yum/libzif/zif-store-local.c
+++ b/backends/yum/libzif/zif-store-local.c
@@ -284,10 +284,11 @@ zif_store_local_search_category (ZifStore *store, gchar **search, GCancellable *
guint i, j;
GPtrArray *array = NULL;
ZifPackage *package;
- ZifString *category;
+ const gchar *category;
GError *error_local = NULL;
gboolean ret;
ZifCompletion *completion_local = NULL;
+ ZifCompletion *completion_loop = NULL;
ZifStoreLocal *local = ZIF_STORE_LOCAL (store);
g_return_val_if_fail (ZIF_IS_STORE_LOCAL (store), NULL);
@@ -338,14 +339,14 @@ zif_store_local_search_category (ZifStore *store, gchar **search, GCancellable *
array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
for (i=0;i<local->priv->packages->len;i++) {
package = g_ptr_array_index (local->priv->packages, i);
- category = zif_package_get_category (package, NULL);
+ completion_loop = zif_completion_get_child (completion_local);
+ category = zif_package_get_category (package, cancellable, completion_loop, NULL);
for (j=0; search[j] != NULL; j++) {
- if (g_strcmp0 (zif_string_get_value (category), search[j]) == 0) {
+ if (g_strcmp0 (category, search[j]) == 0) {
g_ptr_array_add (array, g_object_ref (package));
break;
}
}
- zif_string_unref (category);
/* this section done */
zif_completion_done (completion_local);
@@ -367,11 +368,12 @@ zif_store_local_search_details (ZifStore *store, gchar **search, GCancellable *c
GPtrArray *array = NULL;
ZifPackage *package;
const gchar *package_id;
- ZifString *description;
+ const gchar *description;
gchar **split;
GError *error_local = NULL;
gboolean ret;
ZifCompletion *completion_local = NULL;
+ ZifCompletion *completion_loop = NULL;
ZifStoreLocal *local = ZIF_STORE_LOCAL (store);
g_return_val_if_fail (ZIF_IS_STORE_LOCAL (store), NULL);
@@ -423,18 +425,18 @@ zif_store_local_search_details (ZifStore *store, gchar **search, GCancellable *c
for (i=0;i<local->priv->packages->len;i++) {
package = g_ptr_array_index (local->priv->packages, i);
package_id = zif_package_get_id (package);
- description = zif_package_get_description (package, NULL);
+ completion_loop = zif_completion_get_child (completion_local);
+ description = zif_package_get_description (package, cancellable, completion_loop, NULL);
split = pk_package_id_split (package_id);
for (j=0; search[j] != NULL; j++) {
if (strcasestr (split[PK_PACKAGE_ID_NAME], search[j]) != NULL) {
g_ptr_array_add (array, g_object_ref (package));
break;
- } else if (strcasestr (zif_string_get_value (description), search[j]) != NULL) {
+ } else if (strcasestr (description, search[j]) != NULL) {
g_ptr_array_add (array, g_object_ref (package));
break;
}
}
- zif_string_unref (description);
g_strfreev (split);
/* this section done */
@@ -461,6 +463,7 @@ zif_store_local_search_group (ZifStore *store, gchar **search, GCancellable *can
gboolean ret;
PkGroupEnum group;
ZifCompletion *completion_local = NULL;
+ ZifCompletion *completion_loop = NULL;
ZifStoreLocal *local = ZIF_STORE_LOCAL (store);
g_return_val_if_fail (ZIF_IS_STORE_LOCAL (store), NULL);
@@ -512,7 +515,8 @@ zif_store_local_search_group (ZifStore *store, gchar **search, GCancellable *can
package = g_ptr_array_index (local->priv->packages, i);
for (j=0; search[j] != NULL; j++) {
group = pk_group_enum_from_text (search[j]);
- group_tmp = zif_package_get_group (package, NULL);
+ completion_loop = zif_completion_get_child (completion_local);
+ group_tmp = zif_package_get_group (package, cancellable, completion_loop, NULL);
if (group == group_tmp) {
g_ptr_array_add (array, g_object_ref (package));
break;
@@ -543,6 +547,7 @@ zif_store_local_search_file (ZifStore *store, gchar **search, GCancellable *canc
const gchar *filename;
gboolean ret;
ZifCompletion *completion_local = NULL;
+ ZifCompletion *completion_loop = NULL;
ZifStoreLocal *local = ZIF_STORE_LOCAL (store);
g_return_val_if_fail (ZIF_IS_STORE_LOCAL (store), NULL);
@@ -592,7 +597,8 @@ zif_store_local_search_file (ZifStore *store, gchar **search, GCancellable *canc
array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
for (i=0;i<local->priv->packages->len;i++) {
package = g_ptr_array_index (local->priv->packages, i);
- files = zif_package_get_files (package, &error_local);
+ completion_loop = zif_completion_get_child (completion_local);
+ files = zif_package_get_files (package, cancellable, completion_loop, &error_local);
if (files == NULL) {
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
"failed to get file lists: %s", error_local->message);
@@ -718,6 +724,7 @@ zif_store_local_what_provides (ZifStore *store, gchar **search, GCancellable *ca
gboolean ret;
const ZifDepend *provide;
ZifCompletion *completion_local = NULL;
+ ZifCompletion *completion_loop = NULL;
ZifStoreLocal *local = ZIF_STORE_LOCAL (store);
g_return_val_if_fail (ZIF_IS_STORE_LOCAL (store), NULL);
@@ -768,7 +775,8 @@ zif_store_local_what_provides (ZifStore *store, gchar **search, GCancellable *ca
array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
for (i=0;i<local->priv->packages->len;i++) {
package = g_ptr_array_index (local->priv->packages, i);
- provides = zif_package_get_provides (package, NULL);
+ completion_loop = zif_completion_get_child (completion_local);
+ provides = zif_package_get_provides (package, cancellable, completion_loop, NULL);
for (j=0; j<provides->len; j++) {
provide = g_ptr_array_index (provides, j);
for (k=0; search[k] != NULL; k++) {
@@ -874,7 +882,6 @@ zif_store_local_find_package (ZifStore *store, const gchar *package_id, GCancell
ZifPackage *package_tmp = NULL;
GError *error_local = NULL;
gboolean ret;
- guint jump;
const gchar *package_id_tmp;
ZifCompletion *completion_local = NULL;
ZifStoreLocal *local = ZIF_STORE_LOCAL (store);
@@ -921,10 +928,8 @@ zif_store_local_find_package (ZifStore *store, const gchar *package_id, GCancell
/* setup completion with the correct number of steps */
completion_local = zif_completion_get_child (completion);
- /* we only do a few jumps as there could be thousands of packages, and
- * this makes up an inner loop of possibly deep notifications */
- jump = local->priv->packages->len / 10;
- zif_completion_set_number_steps (completion_local, jump);
+ /* setup completion */
+ zif_completion_set_number_steps (completion_local, local->priv->packages->len);
/* iterate list */
array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
@@ -935,8 +940,7 @@ zif_store_local_find_package (ZifStore *store, const gchar *package_id, GCancell
g_ptr_array_add (array, g_object_ref (package_tmp));
/* this section done */
- if (i % jump == 0)
- zif_completion_done (completion_local);
+ zif_completion_done (completion_local);
}
/* nothing */
@@ -1111,9 +1115,10 @@ zif_store_local_test (EggTest *test)
GError *error = NULL;
guint elapsed;
const gchar *text;
- ZifString *string;
+ const gchar *string;
const gchar *package_id;
gchar **split;
+ const gchar *to_array[] = { NULL, NULL };
if (!egg_test_start (test, "ZifStoreLocal"))
return;
@@ -1190,7 +1195,8 @@ zif_store_local_test (EggTest *test)
/************************************************************/
egg_test_title (test, "resolve");
zif_completion_reset (completion);
- array = zif_store_local_resolve (ZIF_STORE (store), "kernel", NULL, completion, NULL);
+ to_array[0] = "kernel";
+ array = zif_store_local_resolve (ZIF_STORE (store), (gchar**)to_array, NULL, completion, NULL);
elapsed = egg_test_elapsed (test);
if (array->len >= 1)
egg_test_success (test, NULL);
@@ -1208,7 +1214,8 @@ zif_store_local_test (EggTest *test)
/************************************************************/
egg_test_title (test, "search name");
zif_completion_reset (completion);
- array = zif_store_local_search_name (ZIF_STORE (store), "gnome-p", NULL, completion, NULL);
+ to_array[0] = "gnome-p";
+ array = zif_store_local_search_name (ZIF_STORE (store), (gchar**)to_array, NULL, completion, NULL);
if (array->len > 10)
egg_test_success (test, NULL);
else
@@ -1218,7 +1225,8 @@ zif_store_local_test (EggTest *test)
/************************************************************/
egg_test_title (test, "search details");
zif_completion_reset (completion);
- array = zif_store_local_search_details (ZIF_STORE (store), "manage packages", NULL, completion, NULL);
+ to_array[0] = "manage packages";
+ array = zif_store_local_search_details (ZIF_STORE (store), (gchar**)to_array, NULL, completion, NULL);
if (array->len == 1)
egg_test_success (test, NULL);
else
@@ -1228,7 +1236,8 @@ zif_store_local_test (EggTest *test)
/************************************************************/
egg_test_title (test, "what-provides");
zif_completion_reset (completion);
- array = zif_store_local_what_provides (ZIF_STORE (store), "config(PackageKit)", NULL, completion, NULL);
+ to_array[0] = "config(PackageKit)";
+ array = zif_store_local_what_provides (ZIF_STORE (store), (gchar**)to_array, NULL, completion, NULL);
if (array->len == 1)
egg_test_success (test, NULL);
else
@@ -1257,30 +1266,30 @@ zif_store_local_test (EggTest *test)
/************************************************************/
egg_test_title (test, "get summary");
- string = zif_package_get_summary (package, NULL);
- if (g_strcmp0 (zif_string_get_value(string), "Package management service") == 0)
+ zif_completion_reset (completion);
+ string = zif_package_get_summary (package, NULL, completion, NULL);
+ if (g_strcmp0 (string, "Package management service") == 0)
egg_test_success (test, NULL);
else
- egg_test_failed (test, "incorrect summary: %s", zif_string_get_value (string));
- zif_string_unref (string);
+ egg_test_failed (test, "incorrect summary: %s", string);
/************************************************************/
egg_test_title (test, "get license");
- string = zif_package_get_license (package, NULL);
- if (g_strcmp0 (zif_string_get_value(string), "GPLv2+") == 0)
+ zif_completion_reset (completion);
+ string = zif_package_get_license (package, NULL, completion, NULL);
+ if (g_strcmp0 (string, "GPLv2+") == 0)
egg_test_success (test, NULL);
else
- egg_test_failed (test, "incorrect license: %s", zif_string_get_value (string));
- zif_string_unref (string);
+ egg_test_failed (test, "incorrect license: %s", string);
/************************************************************/
egg_test_title (test, "get category");
- string = zif_package_get_category (package, NULL);
- if (g_strcmp0 (zif_string_get_value(string), "System Environment/Libraries") == 0)
+ zif_completion_reset (completion);
+ string = zif_package_get_category (package, NULL, completion, NULL);
+ if (g_strcmp0 (string, "System Environment/Libraries") == 0)
egg_test_success (test, NULL);
else
- egg_test_failed (test, "incorrect category: %s", zif_string_get_value (string));
- zif_string_unref (string);
+ egg_test_failed (test, "incorrect category: %s", string);
/************************************************************/
egg_test_title (test, "is devel");
@@ -1290,7 +1299,7 @@ zif_store_local_test (EggTest *test)
/************************************************************/
egg_test_title (test, "is gui");
ret = zif_package_is_gui (package);
- egg_test_assert (test, ret);
+ egg_test_assert (test, !ret);
/************************************************************/
egg_test_title (test, "is installed");
diff --git a/backends/yum/libzif/zif-store-remote.c b/backends/yum/libzif/zif-store-remote.c
index ba60afa..313573d 100644
--- a/backends/yum/libzif/zif-store-remote.c
+++ b/backends/yum/libzif/zif-store-remote.c
@@ -1563,7 +1563,14 @@ zif_store_remote_set_enabled (ZifStoreRemote *store, gboolean enabled, GError **
g_key_file_set_boolean (file, store->priv->id, "enabled", store->priv->enabled);
/* save new data to file */
- data = g_key_file_to_data (file, NULL, NULL);
+ data = g_key_file_to_data (file, NULL, &error_local);
+ if (data == NULL) {
+ ret = FALSE;
+ g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
+ "failed to get save data: %s", error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
ret = g_file_set_contents (store->priv->repo_filename, data, -1, &error_local);
if (!ret) {
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
@@ -1888,6 +1895,7 @@ zif_store_remote_search_category (ZifStore *store, gchar **group_id, GCancellabl
if (location == NULL) {
/* empty array, as we want success */
array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+ zif_completion_finished (completion);
goto out;
}
@@ -1900,6 +1908,7 @@ zif_store_remote_search_category (ZifStore *store, gchar **group_id, GCancellabl
if (g_str_has_prefix (error_local->message, "could not find group")) {
array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
g_error_free (error_local);
+ zif_completion_finished (completion);
goto out;
}
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
@@ -2717,6 +2726,22 @@ out:
}
/**
+ * zif_store_remote_get_files:
+ **/
+GPtrArray *
+zif_store_remote_get_files (ZifStoreRemote *store, ZifPackage *package,
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ ZifMd *filelists;
+
+ g_return_val_if_fail (ZIF_IS_STORE_REMOTE (store), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ filelists = zif_store_remote_get_filelists (store);
+ return zif_md_get_files (filelists, package, cancellable, completion, error);
+}
+
+/**
* zif_store_remote_file_monitor_cb:
**/
static void
@@ -3179,7 +3204,8 @@ zif_store_remote_test (EggTest *test)
/************************************************************/
egg_test_title (test, "search category");
zif_completion_reset (completion);
- array = zif_store_remote_search_category (ZIF_STORE (store), "admin-tools", NULL, completion, &error);
+ in_array[0] = "admin-tools";
+ array = zif_store_remote_search_category (ZIF_STORE (store), (gchar**)in_array, NULL, completion, &error);
if (array == NULL)
egg_test_failed (test, "no data: %s", error->message);
else if (array->len > 0)
diff --git a/backends/yum/libzif/zif-store-remote.h b/backends/yum/libzif/zif-store-remote.h
index e6d95de..67ad327 100644
--- a/backends/yum/libzif/zif-store-remote.h
+++ b/backends/yum/libzif/zif-store-remote.h
@@ -73,6 +73,11 @@ const gchar *zif_store_remote_get_name (ZifStoreRemote *store,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
+GPtrArray *zif_store_remote_get_files (ZifStoreRemote *store,
+ ZifPackage *package,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
gboolean zif_store_remote_get_enabled (ZifStoreRemote *store,
GCancellable *cancellable,
ZifCompletion *completion,
diff --git a/backends/yum/pk-backend-yum.c b/backends/yum/pk-backend-yum.c
index 7cd488c..24c35a1 100644
--- a/backends/yum/pk-backend-yum.c
+++ b/backends/yum/pk-backend-yum.c
@@ -349,14 +349,14 @@ backend_filter_package_array (GPtrArray *array, PkBitfield filters)
* backend_emit_package_array:
**/
static gboolean
-backend_emit_package_array (PkBackend *backend, GPtrArray *array)
+backend_emit_package_array (PkBackend *backend, GPtrArray *array, ZifCompletion *completion)
{
guint i;
gboolean installed;
PkInfoEnum info;
const gchar *info_hint;
const gchar *package_id;
- ZifString *summary;
+ const gchar *summary;
ZifPackage *package;
g_return_val_if_fail (array != NULL, FALSE);
@@ -365,7 +365,10 @@ backend_emit_package_array (PkBackend *backend, GPtrArray *array)
package = g_ptr_array_index (array, i);
installed = zif_package_is_installed (package);
package_id = zif_package_get_package_id (package);
- summary = zif_package_get_summary (package, NULL);
+
+ /* FIXME: should be okay as shouldn't be doing any action */
+ zif_completion_reset (completion);
+ summary = zif_package_get_summary (package, priv->cancellable, completion, NULL);
/* if we set a hint, use that, otherwise just get the installed status correct */
info_hint = (const gchar *)g_object_get_data (G_OBJECT(package), "kind");
@@ -375,8 +378,7 @@ backend_emit_package_array (PkBackend *backend, GPtrArray *array)
info = pk_info_enum_from_string (info_hint);
}
- pk_backend_package (backend, info, package_id, zif_string_get_value (summary));
- zif_string_unref (summary);
+ pk_backend_package (backend, info, package_id, summary);
}
return TRUE;
}
@@ -462,7 +464,7 @@ backend_search_thread (PkBackend *backend)
/* setup completion */
zif_completion_reset (priv->completion);
- zif_completion_set_number_steps (priv->completion, 3);
+ zif_completion_set_number_steps (priv->completion, 4);
/* get default store_array */
completion_local = zif_completion_get_child (priv->completion);
@@ -548,7 +550,11 @@ backend_search_thread (PkBackend *backend)
pk_backend_set_percentage (backend, 100);
/* emit */
- backend_emit_package_array (backend, result);
+ completion_local = zif_completion_get_child (priv->completion);
+ backend_emit_package_array (backend, result, completion_local);
+
+ /* this section done */
+ zif_completion_done (priv->completion);
out:
if (store_array != NULL)
g_ptr_array_unref (store_array);
@@ -870,7 +876,7 @@ backend_download_packages_thread (PkBackend *backend)
guint len;
gboolean ret;
GError *error = NULL;
- ZifString *filename;
+ const gchar *filename;
gchar *basename;
gchar *path;
@@ -887,7 +893,7 @@ backend_download_packages_thread (PkBackend *backend)
/* setup completion */
zif_completion_reset (priv->completion);
len = g_strv_length (package_ids);
- zif_completion_set_number_steps (priv->completion, (len * 2) + 1);
+ zif_completion_set_number_steps (priv->completion, (len * 4) + 1);
/* find all the packages */
packages = g_ptr_array_new ();
@@ -920,13 +926,17 @@ backend_download_packages_thread (PkBackend *backend)
g_object_unref (package);
}
+ /* this section done */
+ zif_completion_done (priv->completion);
+
/* download list */
pk_backend_set_status (backend, PK_STATUS_ENUM_DOWNLOAD);
for (i=0; i<packages->len; i++) {
package = g_ptr_array_index (packages, i);
/* get filename */
- filename = zif_package_get_filename (package, &error);
+ completion_local = zif_completion_get_child (priv->completion);
+ filename = zif_package_get_filename (package, priv->cancellable, completion_local, &error);
if (filename == NULL) {
pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED,
"failed to get filename for %s: %s", zif_package_get_id (package), error->message);
@@ -934,20 +944,23 @@ backend_download_packages_thread (PkBackend *backend)
goto out;
}
+ /* this section done */
+ zif_completion_done (priv->completion);
+
+ /* download */
+ completion_local = zif_completion_get_child (priv->completion);
ret = zif_package_download (package, directory, priv->cancellable, completion_local, &error);
if (!ret) {
pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED,
- "failed to download %s: %s", zif_string_get_value (filename), error->message);
- zif_string_unref (filename);
+ "failed to download %s: %s", filename, error->message);
g_error_free (error);
goto out;
}
/* send a signal for the daemon so the file is copied */
- basename = g_path_get_basename (zif_string_get_value (filename));
+ basename = g_path_get_basename (filename);
path = g_build_filename (directory, basename, NULL);
pk_backend_files (backend, zif_package_get_id (package), path);
- zif_string_unref (filename);
g_free (basename);
g_free (path);
@@ -1009,13 +1022,14 @@ backend_get_details_thread (PkBackend *backend)
GPtrArray *store_array = NULL;
ZifPackage *package;
ZifCompletion *completion_local;
+ ZifCompletion *completion_loop;
const gchar *id;
guint i;
guint len;
GError *error = NULL;
- ZifString *license;
- ZifString *description;
- ZifString *url;
+ const gchar *license;
+ const gchar *description;
+ const gchar *url;
PkGroupEnum group;
guint64 size;
PkBitfield filters = PK_FILTER_ENUM_UNKNOWN;
@@ -1053,37 +1067,71 @@ backend_get_details_thread (PkBackend *backend)
pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
for (i=0; package_ids[i] != NULL; i++) {
id = package_ids[i];
+
+ /* set up completion */
completion_local = zif_completion_get_child (priv->completion);
- package = zif_store_array_find_package (store_array, id, priv->cancellable, completion_local, &error);
+ zif_completion_set_number_steps (completion_local, 6);
+
+ /* find package */
+ completion_loop = zif_completion_get_child (completion_local);
+ package = zif_store_array_find_package (store_array, id, priv->cancellable, completion_loop, &error);
if (package == NULL) {
pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND, "failed to find %s: %s", package_ids[i], error->message);
g_error_free (error);
goto out;
}
- /* get data */
- license = zif_package_get_license (package, NULL);
- group = zif_package_get_group (package, NULL);
- description = zif_package_get_description (package, NULL);
- url = zif_package_get_url (package, NULL);
- size = zif_package_get_size (package, NULL);
+ /* this section done */
+ zif_completion_done (completion_local);
+
+ /* get license */
+ completion_loop = zif_completion_get_child (completion_local);
+ license = zif_package_get_license (package, priv->cancellable, completion_loop, NULL);
+
+ /* this section done */
+ zif_completion_done (completion_local);
+
+ /* get group */
+ completion_loop = zif_completion_get_child (completion_local);
+ group = zif_package_get_group (package, priv->cancellable, completion_loop, NULL);
+
+ /* this section done */
+ zif_completion_done (completion_local);
+
+ /* get description */
+ completion_loop = zif_completion_get_child (completion_local);
+ description = zif_package_get_description (package, priv->cancellable, completion_loop, NULL);
+
+ /* this section done */
+ zif_completion_done (completion_local);
+
+ /* get url */
+ completion_loop = zif_completion_get_child (completion_local);
+ url = zif_package_get_url (package, priv->cancellable, completion_loop, NULL);
+
+ /* this section done */
+ zif_completion_done (completion_local);
+
+ /* get size */
+ completion_loop = zif_completion_get_child (completion_local);
+ size = zif_package_get_size (package, priv->cancellable, completion_loop, NULL);
+
+ /* this section done */
+ zif_completion_done (completion_local);
/* emit */
pk_backend_details (backend,
package_ids[i],
- zif_string_get_value (license),
+ license,
group,
- zif_string_get_value (description),
- zif_string_get_value (url),
+ description,
+ url,
(gulong) size);
/* this section done */
zif_completion_done (priv->completion);
/* free */
- zif_string_unref (license);
- zif_string_unref (description);
- zif_string_unref (url);
g_object_unref (package);
}
out:
@@ -1272,7 +1320,7 @@ backend_get_files_thread (PkBackend *backend)
/* setup completion */
zif_completion_reset (priv->completion);
- zif_completion_set_number_steps (priv->completion, len + 1);
+ zif_completion_set_number_steps (priv->completion, (len * 2) + 1);
/* find all the packages */
completion_local = zif_completion_get_child (priv->completion);
@@ -1305,7 +1353,12 @@ backend_get_files_thread (PkBackend *backend)
/* profile */
backend_profile ("find package");
- files = zif_package_get_files (package, &error);
+ /* this section done */
+ zif_completion_done (priv->completion);
+
+ /* get files */
+ completion_local = zif_completion_get_child (priv->completion);
+ files = zif_package_get_files (package, priv->cancellable, completion_local, &error);
if (files == NULL) {
pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "no files for %s: %s", package_ids[i], error->message);
g_error_free (error);
@@ -1486,6 +1539,7 @@ backend_get_updates_thread (PkBackend *backend)
if (update == NULL) {
egg_debug ("failed to get updateinfo for %s", zif_package_get_id (package));
g_clear_error (&error);
+ zif_completion_finished (completion_loop);
info = PK_INFO_ENUM_NORMAL;
} else {
info = zif_update_get_kind (update);
@@ -1512,7 +1566,8 @@ backend_get_updates_thread (PkBackend *backend)
pk_backend_set_percentage (backend, 100);
/* emit */
- backend_emit_package_array (backend, result);
+ completion_local = zif_completion_get_child (priv->completion);
+ backend_emit_package_array (backend, result, completion_local);
/* profile */
backend_profile ("filter and emit");
commit 76e2ca1a89e490e52ce1e4e2da96ccfb8243061a
Author: Richard Hughes <richard at hughsie.com>
Date: Mon Apr 19 14:28:08 2010 +0100
trivial: don't print a scary error message when there is simply no process running
diff --git a/src/pk-spawn.c b/src/pk-spawn.c
index 8a11eec..7091b60 100644
--- a/src/pk-spawn.c
+++ b/src/pk-spawn.c
@@ -407,6 +407,13 @@ pk_spawn_send_stdin (PkSpawn *spawn, const gchar *command)
goto out;
}
+ /* is there a process running? */
+ if (spawn->priv->child_pid == -1) {
+ egg_debug ("no child pid");
+ ret = FALSE;
+ goto out;
+ }
+
/* buffer always has to have trailing newline */
egg_debug ("sending '%s'", command);
buffer = g_strdup_printf ("%s\n", command);
commit 7da52e55abed1b650cf5b262ecf025986afaccd9
Author: Richard Hughes <richard at hughsie.com>
Date: Mon Apr 19 14:27:35 2010 +0100
trivial: update the fedora spec file
diff --git a/contrib/PackageKit.spec.in b/contrib/PackageKit.spec.in
index ffcfb53..a6c1356 100644
--- a/contrib/PackageKit.spec.in
+++ b/contrib/PackageKit.spec.in
@@ -11,7 +11,6 @@ Name: PackageKit
Version: #VERSION#
Release: 0.#BUILD#%{?alphatag}%{?dist}
License: GPLv2+
-Group: System Environment/Libraries
URL: http://www.packagekit.org
Source0: http://www.packagekit.org/releases/%{name}-%{version}.tar.gz
@@ -53,8 +52,6 @@ BuildRequires: pango-devel
BuildRequires: pm-utils-devel
BuildRequires: fontconfig-devel
BuildRequires: gobject-introspection-devel
-#BuildRequires: gtk-sharp2-devel
-#BuildRequires: mono-core
# for the fancy new yum accelerator
BuildRequires: rpm-devel
@@ -278,9 +275,6 @@ popd > /dev/null
%find_lang %name
-%clean
-rm -rf $RPM_BUILD_ROOT
-
%post
update-mime-database %{_datadir}/mime &> /dev/null || :
commit 8a8c92949f385fa7ac8f953531910d96e3cf13f2
Author: Richard Hughes <richard at hughsie.com>
Date: Mon Apr 19 12:51:33 2010 +0100
yum: Ensure we create /var/cache/PackageKit if the user nukes it and then tries to re-create the comps cache
diff --git a/backends/yum/yumComps.py b/backends/yum/yumComps.py
index 2c918bf..cb80688 100644
--- a/backends/yum/yumComps.py
+++ b/backends/yum/yumComps.py
@@ -34,6 +34,11 @@ class yumComps:
db = '/var/cache/PackageKit/groups.sqlite'
self.db = db
+ # ensure the directory exists
+ dirname = os.path.dirname(db)
+ if not os.path.isdir(dirname):
+ os.makedirs(dirname)
+
# load the group map
self.groupMap = {}
mapping = open('/usr/share/PackageKit/helpers/yum/yum-comps-groups.conf', 'r')
commit 1622a0c5dba6cf8e6294fab5609478a6d4cdd4e8
Author: dichi <dichi at fedoraproject.org>
Date: Mon Apr 19 15:59:31 2010 +0000
l10n: Updates to Indonesian (id) translation
Transmitted-via: Transifex (translate.fedoraproject.org)
diff --git a/po/id.po b/po/id.po
index 7420bf8..be6a568 100644
--- a/po/id.po
+++ b/po/id.po
@@ -6,15 +6,15 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-02-10 20:56+0000\n"
-"PO-Revision-Date: 2010-02-12 09:54+0700\n"
+"PO-Revision-Date: 2010-04-19 22:58+0700\n"
"Last-Translator: Dichi Al Faridi <dichi at alfaridi.info>\n"
-"Language-Team: American English <>\n"
+"Language-Team: Fedora-id\n"
"Language: id\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Lokalize 1.0\n"
+"X-Generator: Virtaal 0.5.2\n"
#. TRANSLATORS: this is an atomic transaction
#. TRANSLATORS: the role is the point of the transaction, e.g. update-system
@@ -322,24 +322,26 @@ msgid ""
"Extected package name, actually got file. Try using 'pkcon install-local %s' "
"instead."
msgstr ""
+"Dibutuhkan nama paket, benar-benar mendapatkan file. Coba gunakan 'pkcon "
+"install-lokal% s' sebagai gantinya."
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
#: ../client/pk-console.c:857
#, c-format
msgid "This tool could not find any available package: %s"
-msgstr ""
+msgstr "Alat ini tidak dapat menemukan paket yang tersedia: %s"
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
#: ../client/pk-console.c:885
#, c-format
msgid "This tool could not find the installed package: %s"
-msgstr ""
+msgstr "Alat ini tidak dapat menemukan paket yang tersedia: %s"
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
#: ../client/pk-console.c:913 ../client/pk-console.c:941
#, c-format
msgid "This tool could not find the package: %s"
-msgstr ""
+msgstr "Alat ini tidak bisa menemukan paket: %s"
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
#. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
@@ -350,150 +352,156 @@ msgstr ""
#: ../client/pk-console.c:1081
#, c-format
msgid "This tool could not find all the packages: %s"
-msgstr ""
+msgstr "Alat ini tidak bisa menemukan semua paket: %s"
#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
#: ../client/pk-console.c:1110
msgid "The daemon crashed mid-transaction!"
-msgstr ""
+msgstr "Daemon crash pada pertengahan transaksi!"
#. TRANSLATORS: This is the header to the --help menu
#: ../client/pk-console.c:1144
msgid "PackageKit Console Interface"
-msgstr ""
+msgstr "Konsol Antarmuka PackageKit"
#. these are commands we can use with pkcon
#: ../client/pk-console.c:1146
msgid "Subcommands:"
-msgstr ""
+msgstr "Subcommands:"
#. TRANSLATORS: we keep a database updated with the time that an action was last executed
#: ../client/pk-console.c:1225
msgid "Failed to get the time since this action was last completed"
-msgstr ""
+msgstr "Gagal mendapatkan waktu sejak tindakan ini terakhir selesai"
#. TRANSLATORS: command line argument, just show the version string
#: ../client/pk-console.c:1261 ../client/pk-monitor.c:306
msgid "Show the program version and exit"
-msgstr ""
+msgstr "Tampilkan versi program dan keluar"
#. TRANSLATORS: command line argument, use a filter to narrow down results
#: ../client/pk-console.c:1264
msgid "Set the filter, e.g. installed"
-msgstr ""
+msgstr "Set filter, misalnya diinstal"
#. TRANSLATORS: command line argument, work asynchronously
#: ../client/pk-console.c:1267
msgid "Exit without waiting for actions to complete"
-msgstr ""
+msgstr "Keluar tanpa menunggu tindakan untuk selesai"
#. command line argument, do we ask questions
#: ../client/pk-console.c:1270
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:527
msgid "Install the packages without asking for confirmation"
-msgstr ""
+msgstr "Instal paket tanpa meminta konfirmasi"
#. TRANSLATORS: command line argument, this command is not a priority
#: ../client/pk-console.c:1273
msgid "Run the command using idle network bandwidth and also using less power"
msgstr ""
+"Jalankan perintah menggunakan bandwidth menganggur jaringan dan juga "
+"menggunakan daya yang lebih kecil"
#. TRANSLATORS: command line argument, just output without fancy formatting
#: ../client/pk-console.c:1276
msgid ""
-"Print to screen a machine readable output, rather than using animated widgets"
+"Print to screen a machine readable output, rather than using animated "
+"widgets"
msgstr ""
+"Cetak ke layar output mesin yang dapat dibaca, daripada menggunakan widget "
+"animasi"
#. TRANSLATORS: we failed to contact the daemon
#: ../client/pk-console.c:1298
msgid "Failed to contact PackageKit"
-msgstr ""
+msgstr "Gagal untuk menghubungi PackageKit"
#. TRANSLATORS: The user specified an incorrect filter
#: ../client/pk-console.c:1356
msgid "The filter specified was invalid"
-msgstr ""
+msgstr "Filter ditentukan tidak valid"
#. TRANSLATORS: a search type can be name, details, file, etc
#: ../client/pk-console.c:1375
msgid "A search type is required, e.g. name"
-msgstr ""
+msgstr "Sebuah jenis pencarian diperlukan, misalnya nama"
#. TRANSLATORS: the user needs to provide a search term
#: ../client/pk-console.c:1382 ../client/pk-console.c:1394
#: ../client/pk-console.c:1406 ../client/pk-console.c:1418
msgid "A search term is required"
-msgstr ""
+msgstr "Sebuah istilah pencarian diperlukan"
#. TRANSLATORS: the search type was provided, but invalid
#: ../client/pk-console.c:1428
msgid "Invalid search type"
-msgstr ""
+msgstr "Jenis pencarian tidak valid"
#. TRANSLATORS: the user did not specify what they wanted to install
#: ../client/pk-console.c:1434
msgid "A package name to install is required"
-msgstr ""
+msgstr "Sebuah nama paket diperlukan untuk menginstal"
#. TRANSLATORS: the user did not specify what they wanted to install
#: ../client/pk-console.c:1443
msgid "A filename to install is required"
-msgstr ""
+msgstr "Sebuah nama file untuk menginstal diperlukan"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
#: ../client/pk-console.c:1455
msgid "A type, key_id and package_id are required"
-msgstr ""
+msgstr "Tipe A, key_id dan package_id diperlukan"
#. TRANSLATORS: the user did not specify what they wanted to remove
#: ../client/pk-console.c:1466
msgid "A package name to remove is required"
-msgstr ""
+msgstr "Diperlukan nama sebuah paket yang akan dihapus"
#. TRANSLATORS: the user did not specify anything about what to download or where
#: ../client/pk-console.c:1475
msgid "A destination directory and the package names to download are required"
msgstr ""
+"Sebuah direktori tujuan dan nama paket yang dibutuhkan untuk men-download"
#. TRANSLATORS: the directory does not exist, so we can't continue
#: ../client/pk-console.c:1482
msgid "Directory not found"
-msgstr ""
+msgstr "Direktori tidak ditemukan"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
#: ../client/pk-console.c:1491
msgid "A licence identifier (eula-id) is required"
-msgstr ""
+msgstr "Sebuah pengenal lisensi (EULA-id) diperlukan"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
#: ../client/pk-console.c:1502
msgid "A transaction identifier (tid) is required"
-msgstr ""
+msgstr "Suatu pengenal transaksi (tid) diperlukan"
#. TRANSLATORS: The user did not specify a package name
#: ../client/pk-console.c:1523
msgid "A package name to resolve is required"
-msgstr ""
+msgstr "Sebuah nama paket yang dibutuhkan untuk menyelesaikan"
#. TRANSLATORS: The user did not specify a repository (software source) name
#: ../client/pk-console.c:1534 ../client/pk-console.c:1545
msgid "A repository name is required"
-msgstr ""
+msgstr "Sebuah nama repositori diperlukan"
#. TRANSLATORS: The user didn't provide any data
#: ../client/pk-console.c:1556
msgid "A repo name, parameter and value are required"
-msgstr ""
+msgstr "Nama repo, parameter dan nilai yang diperlukan"
#. TRANSLATORS: The user didn't specify what action to use
#: ../client/pk-console.c:1573
msgid "An action, e.g. 'update-system' is required"
-msgstr ""
+msgstr "Sebuah tindakan, misalnya 'update-sistem' diperlukan"
#. TRANSLATORS: The user specified an invalid action
#: ../client/pk-console.c:1580
msgid "A correct role is required"
-msgstr ""
+msgstr "Peran yang benar diperlukan"
#. TRANSLATORS: The user did not provide a package name
#. TRANSLATORS: This is when the user fails to supply the package name
@@ -501,23 +509,23 @@ msgstr ""
#: ../client/pk-console.c:1614 ../client/pk-console.c:1634
#: ../client/pk-console.c:1643 ../client/pk-generate-pack.c:316
msgid "A package name is required"
-msgstr ""
+msgstr "Sebuah nama paket yang dibutuhkan"
#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
#: ../client/pk-console.c:1623
msgid "A package provide string is required"
-msgstr ""
+msgstr "Sebuah paket memberikan string itu dibutuhkan"
#. TRANSLATORS: The user tried to use an unsupported option on the command line
#: ../client/pk-console.c:1703
#, c-format
msgid "Option '%s' is not supported"
-msgstr ""
+msgstr "Opsi '%s' tidak didukung"
#. TRANSLATORS: Generic failure of what they asked to do
#: ../client/pk-console.c:1713
msgid "Command failed"
-msgstr ""
+msgstr "Perintah gagal"
#. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll exist on the target
#: ../client/pk-generate-pack.c:255
@@ -1980,4 +1988,3 @@ msgstr ""
#: ../src/egg-debug.c:469
msgid "Show debugging options"
msgstr ""
-
commit c3046c09dd4f7395e0c844c8c50d8e19c4718047
Author: kristho <kristho at fedoraproject.org>
Date: Mon Apr 19 08:17:41 2010 +0000
l10n: Updates to Danish (da) translation
Transmitted-via: Transifex (translate.fedoraproject.org)
diff --git a/po/da.po b/po/da.po
index da38724..117fee9 100644
--- a/po/da.po
+++ b/po/da.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: packagekit\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-10 20:48+0000\n"
-"PO-Revision-Date: 2010-03-10 22:08+0100\n"
+"POT-Creation-Date: 2010-04-19 02:38+0000\n"
+"PO-Revision-Date: 2010-04-19 10:17+0200\n"
"Last-Translator: Kris Thomsen <lakristho at gmail.com>\n"
"Language-Team: Danish <dansk at dansk-gruppen.dk>\n"
"MIME-Version: 1.0\n"
@@ -18,115 +18,115 @@ msgstr ""
#. TRANSLATORS: this is an atomic transaction
#. TRANSLATORS: the role is the point of the transaction, e.g. update-system
-#: ../client/pk-console.c:175 ../client/pk-console.c:597
+#: ../client/pk-console.c:176 ../client/pk-console.c:598
msgid "Transaction"
msgstr "Overførsel"
#. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:177
+#: ../client/pk-console.c:178
msgid "System time"
msgstr "Systemtid"
#. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "Succeeded"
msgstr "Gennemført"
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "True"
msgstr "Sandt"
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "False"
msgstr "Falskt"
#. TRANSLATORS: this is the transactions role, e.g. "update-system"
#. TRANSLATORS: the trasaction role, e.g. update-system
-#: ../client/pk-console.c:181 ../src/pk-polkit-action-lookup.c:332
+#: ../client/pk-console.c:182 ../src/pk-polkit-action-lookup.c:332
msgid "Role"
msgstr "Rolle"
#. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:186
+#: ../client/pk-console.c:187
msgid "Duration"
msgstr "Varighed"
-#: ../client/pk-console.c:186
+#: ../client/pk-console.c:187
msgid "(seconds)"
msgstr "(sekunder)"
#. TRANSLATORS: this is The command line used to do the action
#. TRANSLATORS: the command line of the thing that wants the authentication
-#: ../client/pk-console.c:190 ../src/pk-polkit-action-lookup.c:346
+#: ../client/pk-console.c:191 ../src/pk-polkit-action-lookup.c:346
msgid "Command line"
msgstr "Kommandolinje"
#. TRANSLATORS: this is the user ID of the user that started the action
-#: ../client/pk-console.c:192
+#: ../client/pk-console.c:193
msgid "User ID"
msgstr "Bruger-id"
#. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:199
+#: ../client/pk-console.c:200
msgid "Username"
msgstr "Brugernavn"
#. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:203
+#: ../client/pk-console.c:204
msgid "Real name"
msgstr "Rigtige navn"
-#: ../client/pk-console.c:211
+#: ../client/pk-console.c:212
msgid "Affected packages:"
msgstr "Berørte pakker:"
-#: ../client/pk-console.c:213
+#: ../client/pk-console.c:214
msgid "Affected packages: None"
msgstr "Berørte pakker: Ingen"
#. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:248
+#: ../client/pk-console.c:249
msgid "Distribution"
msgstr "Distribution"
#. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:250
+#: ../client/pk-console.c:251
msgid "Type"
msgstr "Type"
#. TRANSLATORS: this is any summary text describing the upgrade
#. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:252 ../client/pk-console.c:291
+#: ../client/pk-console.c:253 ../client/pk-console.c:292
msgid "Summary"
msgstr "Resumé"
#. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:280
+#: ../client/pk-console.c:281
msgid "Category"
msgstr "Kategori"
#. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:282
+#: ../client/pk-console.c:283
msgid "ID"
msgstr "Id"
#. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:285
+#: ../client/pk-console.c:286
msgid "Parent"
msgstr "Overliggende"
#. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:288
+#: ../client/pk-console.c:289
msgid "Name"
msgstr "Navn"
#. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:294
+#: ../client/pk-console.c:295
msgid "Icon"
msgstr "Ikon"
#. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:340
+#: ../client/pk-console.c:341
msgid "Details about the update:"
msgstr "Detaljer om opdateringen:"
@@ -135,7 +135,7 @@ msgstr "Detaljer om opdateringen:"
#. TRANSLATORS: the package that is not signed by a known key
#. TRANSLATORS: the package name that was trying to be installed
#. TRANSLATORS: title, the names of the packages that the method is processing
-#: ../client/pk-console.c:346 ../client/pk-console.c:616
+#: ../client/pk-console.c:347 ../client/pk-console.c:617
#: ../lib/packagekit-glib2/pk-task-text.c:126
#: ../lib/packagekit-glib2/pk-task-text.c:208
#: ../src/pk-polkit-action-lookup.c:357
@@ -145,165 +145,165 @@ msgstr[0] "Pakke"
msgstr[1] "Pakker"
#. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:349
+#: ../client/pk-console.c:350
msgid "Updates"
msgstr "Opdateringer"
#. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:353
+#: ../client/pk-console.c:354
msgid "Obsoletes"
msgstr "Forældede"
#. TRANSLATORS: details about the update, the vendor URLs
#. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
-#: ../client/pk-console.c:357 ../lib/packagekit-glib2/pk-task-text.c:211
+#: ../client/pk-console.c:358 ../lib/packagekit-glib2/pk-task-text.c:211
msgid "Vendor"
msgstr "Leverandør"
#. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:361
+#: ../client/pk-console.c:362
msgid "Bugzilla"
msgstr "Bugzilla"
#. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:365
+#: ../client/pk-console.c:366
msgid "CVE"
msgstr "CVE"
#. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:369
+#: ../client/pk-console.c:370
msgid "Restart"
msgstr "Genstart"
#. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:373
+#: ../client/pk-console.c:374
msgid "Update text"
msgstr "Opdateringstekst"
#. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:377
+#: ../client/pk-console.c:378
msgid "Changes"
msgstr "Ãndringer"
#. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:381
+#: ../client/pk-console.c:382
msgid "State"
msgstr "Status"
#. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:385
+#: ../client/pk-console.c:386
msgid "Issued"
msgstr "Udgivet"
#. TRANSLATORS: details about the update, date the update was updated
#. TRANSLATORS: The action of the package, in past tense
-#: ../client/pk-console.c:389 ../lib/packagekit-glib2/pk-console-shared.c:510
+#: ../client/pk-console.c:390 ../lib/packagekit-glib2/pk-console-shared.c:511
msgid "Updated"
msgstr "Opdateret"
#. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:425
+#: ../client/pk-console.c:426
msgid "Enabled"
msgstr "Aktiveret"
#. TRANSLATORS: if the repo is disabled
-#: ../client/pk-console.c:428
+#: ../client/pk-console.c:429
msgid "Disabled"
msgstr "Deaktiveret"
#. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:460
+#: ../client/pk-console.c:461
msgid "System restart required by:"
msgstr "Systemgenstart kræves af:"
#. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:463
+#: ../client/pk-console.c:464
msgid "Session restart required:"
msgstr "Sessionsgenstart kræves:"
#. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:466
+#: ../client/pk-console.c:467
msgid "System restart (security) required by:"
msgstr "Systemgenstart (sikkerhed) kræves af:"
#. TRANSLATORS: a package requires the session to be restarted due to a security update
-#: ../client/pk-console.c:469
+#: ../client/pk-console.c:470
msgid "Session restart (security) required:"
msgstr "Sessionsgenstart (sikkerhed) kræves:"
#. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:472
+#: ../client/pk-console.c:473
msgid "Application restart required by:"
msgstr "Programgenstart kræves af:"
#. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:507
+#: ../client/pk-console.c:508
msgid "Package description"
msgstr "Pakkebeskrivelse"
#. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:538
+#: ../client/pk-console.c:539
msgid "Message:"
msgstr "Besked:"
#. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:559
+#: ../client/pk-console.c:560
msgid "No files"
msgstr "Ingen filer"
#. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:564
+#: ../client/pk-console.c:565
msgid "Package files"
msgstr "Pakkefiler"
#. TRANSLATORS: the percentage complete of the transaction
-#: ../client/pk-console.c:632
+#: ../client/pk-console.c:633
msgid "Percentage"
msgstr "Procent"
#. TRANSLATORS: the status of the transaction (e.g. downloading)
-#: ../client/pk-console.c:650
+#: ../client/pk-console.c:651
msgid "Status"
msgstr "Status"
#. TRANSLATORS: the results from the transaction
-#: ../client/pk-console.c:679
+#: ../client/pk-console.c:680
msgid "Results:"
msgstr "Resultater:"
#. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
-#: ../client/pk-console.c:686
+#: ../client/pk-console.c:687
msgid "Fatal error"
msgstr "Fatal fejl"
#. TRANSLATORS: the transaction failed in a way we could not expect
-#: ../client/pk-console.c:695
-#: ../contrib/command-not-found/pk-command-not-found.c:432
-#: ../contrib/command-not-found/pk-command-not-found.c:603
+#: ../client/pk-console.c:696
+#: ../contrib/command-not-found/pk-command-not-found.c:433
+#: ../contrib/command-not-found/pk-command-not-found.c:606
msgid "The transaction failed"
msgstr "Overførslen kunne ikke gennemføres"
#. TRANSLATORS: print a message when there are no updates
-#: ../client/pk-console.c:726
+#: ../client/pk-console.c:727
msgid "There are no updates available at this time."
msgstr "Der er ingen tilgængelige opdateringer i øjeblikket."
-#: ../client/pk-console.c:749
+#: ../client/pk-console.c:750
msgid "There are no upgrades available at this time."
msgstr "Der er ingen tilgængelige opgraderinger i øjeblikket."
#. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:816
+#: ../client/pk-console.c:817
msgid "Please restart the computer to complete the update."
msgstr "Genstart venligst computeren for at fuldføre opdateringen."
#. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:819
+#: ../client/pk-console.c:820
msgid "Please logout and login to complete the update."
msgstr "Log venligst ud og ind igen for at fuldføre opdateringen."
#. TRANSLATORS: a package needs to restart their system (due to security)
-#: ../client/pk-console.c:822
+#: ../client/pk-console.c:823
msgid ""
"Please restart the computer to complete the update as important security "
"updates have been installed."
@@ -312,7 +312,7 @@ msgstr ""
"sikkerhedsopdateringer er blevet installeret."
#. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:825
+#: ../client/pk-console.c:826
msgid ""
"Please logout and login to complete the update as important security updates "
"have been installed."
@@ -321,29 +321,29 @@ msgstr ""
"sikkerhedsopdateringer er blevet installeret."
#. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon install-local dave.rpm'
-#: ../client/pk-console.c:851
+#: ../client/pk-console.c:852
#, c-format
msgid ""
-"Extected package name, actually got file. Try using 'pkcon install-local %s' "
+"Expected package name, actually got file. Try using 'pkcon install-local %s' "
"instead."
msgstr ""
"Forventet pakkenavn fik faktisk fil. Prøv at bruge \"pkcon install-local %s"
"\" istedet."
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:859
+#: ../client/pk-console.c:860
#, c-format
msgid "This tool could not find any available package: %s"
msgstr "Dette værktøj kunne ikke finde nogen tilgængelig pakke: %s"
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:887
+#: ../client/pk-console.c:888
#, c-format
msgid "This tool could not find the installed package: %s"
msgstr "Dette værktøj kunne ikke finde den installerede pakke: %s"
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:915 ../client/pk-console.c:943
+#: ../client/pk-console.c:916 ../client/pk-console.c:944
#, c-format
msgid "This tool could not find the package: %s"
msgstr "Dette værktøj kunne ikke finde pakken: %s"
@@ -352,63 +352,63 @@ msgstr "Dette værktøj kunne ikke finde pakken: %s"
#. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
#. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
#. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:971 ../client/pk-console.c:999
-#: ../client/pk-console.c:1027 ../client/pk-console.c:1055
-#: ../client/pk-console.c:1083
+#: ../client/pk-console.c:972 ../client/pk-console.c:1000
+#: ../client/pk-console.c:1028 ../client/pk-console.c:1056
+#: ../client/pk-console.c:1084
#, c-format
msgid "This tool could not find all the packages: %s"
msgstr "Dette værktøj kunne ikke finde alle pakkerne: %s"
#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
-#: ../client/pk-console.c:1112
+#: ../client/pk-console.c:1113
msgid "The daemon crashed mid-transaction!"
msgstr "Dæmonen brød sammen under overførslen!"
#. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1146
+#: ../client/pk-console.c:1147
msgid "PackageKit Console Interface"
msgstr "PackageKit konsolgrænseflade"
#. these are commands we can use with pkcon
-#: ../client/pk-console.c:1148
+#: ../client/pk-console.c:1149
msgid "Subcommands:"
msgstr "Underkommandoer:"
#. TRANSLATORS: we keep a database updated with the time that an action was last executed
-#: ../client/pk-console.c:1227
+#: ../client/pk-console.c:1228
msgid "Failed to get the time since this action was last completed"
msgstr "Kunne ikke hente tid siden denne handling sidst blev gennemført"
#. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:1263 ../client/pk-monitor.c:306
+#: ../client/pk-console.c:1267 ../client/pk-monitor.c:326
msgid "Show the program version and exit"
msgstr "Vis programversionen og afslut"
#. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1266
+#: ../client/pk-console.c:1270
msgid "Set the filter, e.g. installed"
msgstr "Sæt filteret, f.eks. installeret"
#. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1269
+#: ../client/pk-console.c:1273
msgid "Exit without waiting for actions to complete"
msgstr "Afslut uden at vente på at handlingerne færdiggøres"
#. command line argument, do we ask questions
-#: ../client/pk-console.c:1272
+#: ../client/pk-console.c:1276
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:527
msgid "Install the packages without asking for confirmation"
msgstr "Installér pakkerne uden at spørge efter bekræftelse"
#. TRANSLATORS: command line argument, this command is not a priority
-#: ../client/pk-console.c:1275
+#: ../client/pk-console.c:1279
msgid "Run the command using idle network bandwidth and also using less power"
msgstr ""
"Kør kommandoen ved at bruge lav netværksbåndbredde, hvilket bruger mindre "
"strøm"
#. TRANSLATORS: command line argument, just output without fancy formatting
-#: ../client/pk-console.c:1278
+#: ../client/pk-console.c:1282
msgid ""
"Print to screen a machine readable output, rather than using animated widgets"
msgstr ""
@@ -416,117 +416,122 @@ msgstr ""
"widgets"
#. TRANSLATORS: we failed to contact the daemon
-#: ../client/pk-console.c:1300
+#: ../client/pk-console.c:1304
msgid "Failed to contact PackageKit"
msgstr "Kunne ikke kontakte PackageKit"
#. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1358
+#: ../client/pk-console.c:1365
+msgid "The proxy could not be set"
+msgstr "Denne proxy kunne ikke blive sat"
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1377
msgid "The filter specified was invalid"
msgstr "Filteret det blev angivet er ugyldigt"
#. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1377
+#: ../client/pk-console.c:1396
msgid "A search type is required, e.g. name"
msgstr "En søgetype kræves, f.eks. navn"
#. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1384 ../client/pk-console.c:1396
-#: ../client/pk-console.c:1408 ../client/pk-console.c:1420
+#: ../client/pk-console.c:1403 ../client/pk-console.c:1415
+#: ../client/pk-console.c:1427 ../client/pk-console.c:1439
msgid "A search term is required"
msgstr "En søgeterm kræves"
#. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1430
+#: ../client/pk-console.c:1449
msgid "Invalid search type"
msgstr "Ugyldig søgetype"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1436
+#: ../client/pk-console.c:1455
msgid "A package name to install is required"
msgstr "Et pakkenavn til installation er påkrævet"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1445
+#: ../client/pk-console.c:1464
msgid "A filename to install is required"
msgstr "Et filnavn til installation er påkrævet"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1457
+#: ../client/pk-console.c:1476
msgid "A type, key_id and package_id are required"
msgstr "En type, nøgle_id og pakke_id kræves"
#. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:1468
+#: ../client/pk-console.c:1487
msgid "A package name to remove is required"
msgstr "Et pakkenavn til fjernelse kræves"
#. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:1477
+#: ../client/pk-console.c:1496
msgid "A destination directory and the package names to download are required"
msgstr "En destinationsmappe og pakkenavnene kræves for at blive hentet"
#. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:1484
+#: ../client/pk-console.c:1503
msgid "Directory not found"
msgstr "Mappe ikke fundet"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1493
+#: ../client/pk-console.c:1512
msgid "A licence identifier (eula-id) is required"
msgstr "En licensgenkender (eula-id) kræves"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1504
+#: ../client/pk-console.c:1523
msgid "A transaction identifier (tid) is required"
msgstr "En overførselsgenkender (tid) kræves"
#. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:1525
+#: ../client/pk-console.c:1544
msgid "A package name to resolve is required"
msgstr "Et pakkenavn til at løse kræves"
#. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:1536 ../client/pk-console.c:1547
+#: ../client/pk-console.c:1555 ../client/pk-console.c:1566
msgid "A repository name is required"
msgstr "Et pakkearkivnavn kræves"
#. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:1558
+#: ../client/pk-console.c:1577
msgid "A repo name, parameter and value are required"
msgstr "Et pakkearkivnavn, parameter og værdi kræves"
#. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:1575
+#: ../client/pk-console.c:1594
msgid "An action, e.g. 'update-system' is required"
msgstr "En handling, f.eks. \"update-system\" kræves"
#. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:1582
+#: ../client/pk-console.c:1601
msgid "A correct role is required"
msgstr "En korrekt rolle kræves"
#. TRANSLATORS: The user did not provide a package name
#. TRANSLATORS: This is when the user fails to supply the package name
-#: ../client/pk-console.c:1592 ../client/pk-console.c:1607
-#: ../client/pk-console.c:1616 ../client/pk-console.c:1636
-#: ../client/pk-console.c:1645 ../client/pk-generate-pack.c:316
+#: ../client/pk-console.c:1611 ../client/pk-console.c:1626
+#: ../client/pk-console.c:1635 ../client/pk-console.c:1655
+#: ../client/pk-console.c:1664 ../client/pk-generate-pack.c:316
msgid "A package name is required"
msgstr "Et pakkenavn kræves"
#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:1625
+#: ../client/pk-console.c:1644
msgid "A package provide string is required"
msgstr "En pakke udbydningsstreng kræves"
#. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:1705
+#: ../client/pk-console.c:1724
#, c-format
msgid "Option '%s' is not supported"
msgstr "Indstilling \"%s\" er ikke understøttet"
#. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:1715
+#: ../client/pk-console.c:1734
msgid "Command failed"
msgstr "Kommando fejlede"
@@ -537,10 +542,8 @@ msgstr "Angiv filnavnet på afhængigheder der skal ekskluderes"
#. TRANSLATORS: the output location
#: ../client/pk-generate-pack.c:258
-msgid ""
-"The output file or directory (the current directory is used if ommitted)"
-msgstr ""
-"Uddatafilen eller -mappen (den nuværende mappe bliver brugt hvis undladt)"
+msgid "The output file or directory (the current directory is used if omitted)"
+msgstr "Outputfilen eller -mappen (den nuværende mappe bliver brugt hvis undladt)"
#. TRANSLATORS: put a list of packages in the pack
#: ../client/pk-generate-pack.c:261
@@ -565,11 +568,11 @@ msgstr "Begge tilvalg valgt."
#. TRANSLATORS: This is when the user fails to supply the output
#: ../client/pk-generate-pack.c:324
msgid "A output directory or file name is required"
-msgstr "En uddatamappe eller filnavn kræves"
+msgstr "En outputmappe eller filnavn kræves"
-#. TRANSLATORS: This is when the dameon is not-installed/broken and fails to startup
+#. TRANSLATORS: This is when the daemon is not-installed/broken and fails to startup
#: ../client/pk-generate-pack.c:342
-msgid "The dameon failed to startup"
+msgid "The daemon failed to startup"
msgstr "Dæmonen kunne ikke startes"
#. TRANSLATORS: This is when the backend doesn't have the capability to get-depends
@@ -640,12 +643,12 @@ msgstr "Servicepakke oprettet \"%s\""
msgid "Failed to create '%s': %s"
msgstr "Kunne ikke oprette \"%s\": %s"
-#: ../client/pk-monitor.c:236
+#: ../client/pk-monitor.c:256
msgid "Failed to get daemon state"
msgstr "Kunne ikke hente status for dæmon"
#. TRANSLATORS: this is a program that monitors PackageKit
-#: ../client/pk-monitor.c:322
+#: ../client/pk-monitor.c:342
msgid "PackageKit Monitor"
msgstr "PackageKit overvåger"
@@ -704,42 +707,42 @@ msgid "Installing..."
msgstr "Installerer..."
#. TRANSLATORS: downloading repo data so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:365
+#: ../contrib/command-not-found/pk-command-not-found.c:366
msgid "Downloading details about the software sources."
msgstr "Henter detaljer om softwarekilderne."
#. TRANSLATORS: downloading file lists so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:369
+#: ../contrib/command-not-found/pk-command-not-found.c:370
msgid "Downloading filelists (this may take some time to complete)."
msgstr "Henter fillister (dette kan tage noget tid at udføre)."
#. TRANSLATORS: waiting for native lock
-#: ../contrib/command-not-found/pk-command-not-found.c:373
+#: ../contrib/command-not-found/pk-command-not-found.c:374
msgid "Waiting for package manager lock."
msgstr "Venter på at pakkehåndteringsprogrammet låser."
#. TRANSLATORS: loading package cache so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:377
+#: ../contrib/command-not-found/pk-command-not-found.c:378
msgid "Loading list of packages."
msgstr "Indlæser liste over pakker."
#. TRANSLATORS: we failed to find the package, this shouldn't happen
-#: ../contrib/command-not-found/pk-command-not-found.c:423
+#: ../contrib/command-not-found/pk-command-not-found.c:424
msgid "Failed to search for file"
msgstr "Kunne ikke søge efter fil"
#. TRANSLATORS: we failed to launch the executable, the error follows
-#: ../contrib/command-not-found/pk-command-not-found.c:566
+#: ../contrib/command-not-found/pk-command-not-found.c:569
msgid "Failed to launch:"
msgstr "Kunne ikke starte:"
#. TRANSLATORS: we failed to install the package
-#: ../contrib/command-not-found/pk-command-not-found.c:594
+#: ../contrib/command-not-found/pk-command-not-found.c:597
msgid "Failed to install packages"
msgstr "Kunne ikke installere pakker"
#. TRANSLATORS: tool that gets called when the command is not found
-#: ../contrib/command-not-found/pk-command-not-found.c:670
+#: ../contrib/command-not-found/pk-command-not-found.c:673
msgid "PackageKit Command Not Found"
msgstr "PackageKit-kommando ikke fundet"
@@ -749,51 +752,51 @@ msgid "Command not found."
msgstr "Kommando ikke fundet."
#. TRANSLATORS: tell the user what we think the command is
-#: ../contrib/command-not-found/pk-command-not-found.c:706
+#: ../contrib/command-not-found/pk-command-not-found.c:717
msgid "Similar command is:"
msgstr "Lignende kommando er:"
#. TRANSLATORS: Ask the user if we should run the similar command
-#: ../contrib/command-not-found/pk-command-not-found.c:716
+#: ../contrib/command-not-found/pk-command-not-found.c:727
msgid "Run similar command:"
msgstr "Kør lignende kommando:"
#. TRANSLATORS: show the user a list of commands that they could have meant
#. TRANSLATORS: show the user a list of commands we could run
-#: ../contrib/command-not-found/pk-command-not-found.c:730
-#: ../contrib/command-not-found/pk-command-not-found.c:739
+#: ../contrib/command-not-found/pk-command-not-found.c:741
+#: ../contrib/command-not-found/pk-command-not-found.c:750
msgid "Similar commands are:"
msgstr "Lignende kommandoer er:"
#. TRANSLATORS: ask the user to choose a file to run
-#: ../contrib/command-not-found/pk-command-not-found.c:746
+#: ../contrib/command-not-found/pk-command-not-found.c:757
msgid "Please choose a command to run"
msgstr "Vælg venligst en kommando at køre"
#. TRANSLATORS: tell the user what package provides the command
-#: ../contrib/command-not-found/pk-command-not-found.c:764
+#: ../contrib/command-not-found/pk-command-not-found.c:775
msgid "The package providing this file is:"
msgstr "Pakken der udbyder denne fil er:"
#. TRANSLATORS: as the user if we want to install a package to provide the command
-#: ../contrib/command-not-found/pk-command-not-found.c:769
+#: ../contrib/command-not-found/pk-command-not-found.c:780
#, c-format
msgid "Install package '%s' to provide command '%s'?"
msgstr "Installér pakke \"%s\" for at udbyde kommando \"%s\"?"
#. TRANSLATORS: Show the user a list of packages that provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:793
+#: ../contrib/command-not-found/pk-command-not-found.c:804
msgid "Packages providing this file are:"
msgstr "Pakker der udbyder denne fil er:"
#. TRANSLATORS: Show the user a list of packages that they can install to provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:803
+#: ../contrib/command-not-found/pk-command-not-found.c:814
msgid "Suitable packages are:"
msgstr "Passende pakker er:"
#. get selection
#. TRANSLATORS: ask the user to choose a file to install
-#: ../contrib/command-not-found/pk-command-not-found.c:812
+#: ../contrib/command-not-found/pk-command-not-found.c:823
msgid "Please choose a package to install"
msgstr "Vælg venligst en pakke at installere"
@@ -962,7 +965,7 @@ msgstr "Installerer ikke pakker i simuleringstilstand"
#. TRANSLATORS: we are now installing the debuginfo packages we found earlier
#. TRANSLATORS: transaction state, installing packages
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:862
-#: ../lib/packagekit-glib2/pk-console-shared.c:282
+#: ../lib/packagekit-glib2/pk-console-shared.c:283
#, c-format
msgid "Installing packages"
msgstr "Installerer pakker"
@@ -1099,7 +1102,7 @@ msgid "Please enter a number from 1 to %i: "
msgstr "Indtast et nummer fra 1 til %i: "
#. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:183
+#: ../lib/packagekit-glib2/pk-console-shared.c:185
msgid "More than one package matches:"
msgstr "Mere end én pakke passede:"
@@ -1109,448 +1112,448 @@ msgid "Please choose the correct package: "
msgstr "Vælg venligst den rigtige pakke: "
#. TRANSLATORS: This is when the transaction status is not known
-#: ../lib/packagekit-glib2/pk-console-shared.c:250
+#: ../lib/packagekit-glib2/pk-console-shared.c:251
msgid "Unknown state"
msgstr "Ukendt status"
#. TRANSLATORS: transaction state, the daemon is in the process of starting
-#: ../lib/packagekit-glib2/pk-console-shared.c:254
+#: ../lib/packagekit-glib2/pk-console-shared.c:255
msgid "Starting"
msgstr "Starter"
#. TRANSLATORS: transaction state, the transaction is waiting for another to complete
-#: ../lib/packagekit-glib2/pk-console-shared.c:258
+#: ../lib/packagekit-glib2/pk-console-shared.c:259
msgid "Waiting in queue"
msgstr "Venter i kø"
#. TRANSLATORS: transaction state, just started
-#: ../lib/packagekit-glib2/pk-console-shared.c:262
+#: ../lib/packagekit-glib2/pk-console-shared.c:263
msgid "Running"
msgstr "Kører"
#. TRANSLATORS: transaction state, is querying data
-#: ../lib/packagekit-glib2/pk-console-shared.c:266
+#: ../lib/packagekit-glib2/pk-console-shared.c:267
msgid "Querying"
msgstr "Forespørger"
#. TRANSLATORS: transaction state, getting data from a server
-#: ../lib/packagekit-glib2/pk-console-shared.c:270
+#: ../lib/packagekit-glib2/pk-console-shared.c:271
msgid "Getting information"
msgstr "Henter information"
#. TRANSLATORS: transaction state, removing packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:274
+#: ../lib/packagekit-glib2/pk-console-shared.c:275
msgid "Removing packages"
msgstr "Fjerner pakker"
#. TRANSLATORS: transaction state, downloading package files
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:278
-#: ../lib/packagekit-glib2/pk-console-shared.c:656
+#: ../lib/packagekit-glib2/pk-console-shared.c:279
+#: ../lib/packagekit-glib2/pk-console-shared.c:657
msgid "Downloading packages"
msgstr "Henter pakker"
#. TRANSLATORS: transaction state, refreshing internal lists
-#: ../lib/packagekit-glib2/pk-console-shared.c:286
+#: ../lib/packagekit-glib2/pk-console-shared.c:287
msgid "Refreshing software list"
msgstr "Genopfrisker liste over pakkearkiver"
#. TRANSLATORS: transaction state, installing updates
-#: ../lib/packagekit-glib2/pk-console-shared.c:290
+#: ../lib/packagekit-glib2/pk-console-shared.c:291
msgid "Installing updates"
msgstr "Installerer opdateringer"
#. TRANSLATORS: transaction state, removing old packages, and cleaning config files
-#: ../lib/packagekit-glib2/pk-console-shared.c:294
+#: ../lib/packagekit-glib2/pk-console-shared.c:295
msgid "Cleaning up packages"
msgstr "Rydder op i pakker"
#. TRANSLATORS: transaction state, obsoleting old packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:298
+#: ../lib/packagekit-glib2/pk-console-shared.c:299
msgid "Obsoleting packages"
msgstr "Overflødigører pakker"
#. TRANSLATORS: transaction state, checking the transaction before we do it
-#: ../lib/packagekit-glib2/pk-console-shared.c:302
+#: ../lib/packagekit-glib2/pk-console-shared.c:303
msgid "Resolving dependencies"
msgstr "Løser afhængigheder"
#. TRANSLATORS: transaction state, checking if we have all the security keys for the operation
-#: ../lib/packagekit-glib2/pk-console-shared.c:306
+#: ../lib/packagekit-glib2/pk-console-shared.c:307
msgid "Checking signatures"
msgstr "Kontrollerer signaturer"
#. TRANSLATORS: transaction state, when we return to a previous system state
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:310
-#: ../lib/packagekit-glib2/pk-console-shared.c:616
+#: ../lib/packagekit-glib2/pk-console-shared.c:311
+#: ../lib/packagekit-glib2/pk-console-shared.c:617
msgid "Rolling back"
msgstr "Ruller tilbage"
#. TRANSLATORS: transaction state, when we're doing a test transaction
-#: ../lib/packagekit-glib2/pk-console-shared.c:314
+#: ../lib/packagekit-glib2/pk-console-shared.c:315
msgid "Testing changes"
msgstr "Tester ændringer"
#. TRANSLATORS: transaction state, when we're writing to the system package database
-#: ../lib/packagekit-glib2/pk-console-shared.c:318
+#: ../lib/packagekit-glib2/pk-console-shared.c:319
msgid "Committing changes"
msgstr "Indsender ændringer"
#. TRANSLATORS: transaction state, requesting data from a server
-#: ../lib/packagekit-glib2/pk-console-shared.c:322
+#: ../lib/packagekit-glib2/pk-console-shared.c:323
msgid "Requesting data"
msgstr "Forespørger data"
#. TRANSLATORS: transaction state, all done!
-#: ../lib/packagekit-glib2/pk-console-shared.c:326
+#: ../lib/packagekit-glib2/pk-console-shared.c:327
msgid "Finished"
msgstr "Afsluttet"
#. TRANSLATORS: transaction state, in the process of cancelling
-#: ../lib/packagekit-glib2/pk-console-shared.c:330
+#: ../lib/packagekit-glib2/pk-console-shared.c:331
msgid "Cancelling"
msgstr "Annullerer"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:334
+#: ../lib/packagekit-glib2/pk-console-shared.c:335
msgid "Downloading repository information"
msgstr "Henter information om pakkearkiv"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:338
+#: ../lib/packagekit-glib2/pk-console-shared.c:339
msgid "Downloading list of packages"
msgstr "Henter liste over pakker"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:342
+#: ../lib/packagekit-glib2/pk-console-shared.c:343
msgid "Downloading file lists"
msgstr "Henter fillister"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:346
+#: ../lib/packagekit-glib2/pk-console-shared.c:347
msgid "Downloading lists of changes"
msgstr "Henter liste over ændringer"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:350
+#: ../lib/packagekit-glib2/pk-console-shared.c:351
msgid "Downloading groups"
msgstr "Henter grupper"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:354
+#: ../lib/packagekit-glib2/pk-console-shared.c:355
msgid "Downloading update information"
msgstr "Henter opdateringsinformation"
#. TRANSLATORS: transaction state, repackaging delta files
-#: ../lib/packagekit-glib2/pk-console-shared.c:358
+#: ../lib/packagekit-glib2/pk-console-shared.c:359
msgid "Repackaging files"
msgstr "Genpakker filer"
#. TRANSLATORS: transaction state, loading databases
-#: ../lib/packagekit-glib2/pk-console-shared.c:362
+#: ../lib/packagekit-glib2/pk-console-shared.c:363
msgid "Loading cache"
msgstr "Indlæser cache"
#. TRANSLATORS: transaction state, scanning for running processes
-#: ../lib/packagekit-glib2/pk-console-shared.c:366
+#: ../lib/packagekit-glib2/pk-console-shared.c:367
msgid "Scanning applications"
msgstr "Skanner programmer"
#. TRANSLATORS: transaction state, generating a list of packages installed on the system
-#: ../lib/packagekit-glib2/pk-console-shared.c:370
+#: ../lib/packagekit-glib2/pk-console-shared.c:371
msgid "Generating package lists"
msgstr "Genererer pakkelister"
#. TRANSLATORS: transaction state, when we're waiting for the native tools to exit
-#: ../lib/packagekit-glib2/pk-console-shared.c:374
+#: ../lib/packagekit-glib2/pk-console-shared.c:375
msgid "Waiting for package manager lock"
msgstr "Venter på at pakkehåndteringen låser"
#. TRANSLATORS: transaction state, waiting for user to type in a password
-#: ../lib/packagekit-glib2/pk-console-shared.c:378
+#: ../lib/packagekit-glib2/pk-console-shared.c:379
msgid "Waiting for authentication"
msgstr "Venter på godkendelse"
#. TRANSLATORS: transaction state, we are updating the list of processes
-#: ../lib/packagekit-glib2/pk-console-shared.c:382
+#: ../lib/packagekit-glib2/pk-console-shared.c:383
msgid "Updating running applications"
msgstr "Opdaterer kørende programmer"
#. TRANSLATORS: transaction state, we are checking executable files currently in use
-#: ../lib/packagekit-glib2/pk-console-shared.c:386
+#: ../lib/packagekit-glib2/pk-console-shared.c:387
msgid "Checking applications in use"
msgstr "Kontrollerer programmer som er i brug"
#. TRANSLATORS: transaction state, we are checking for libraries currently in use
-#: ../lib/packagekit-glib2/pk-console-shared.c:390
+#: ../lib/packagekit-glib2/pk-console-shared.c:391
msgid "Checking libraries in use"
msgstr "Kontrollerer biblioteker som er i brug"
#. TRANSLATORS: transaction state, we are copying package files before or after the transaction
-#: ../lib/packagekit-glib2/pk-console-shared.c:394
+#: ../lib/packagekit-glib2/pk-console-shared.c:395
msgid "Copying files"
msgstr "Kopierer filer"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:412
+#: ../lib/packagekit-glib2/pk-console-shared.c:413
msgid "Trivial"
msgstr "Triviel"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:416
+#: ../lib/packagekit-glib2/pk-console-shared.c:417
msgid "Normal"
msgstr "Normal"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:420
+#: ../lib/packagekit-glib2/pk-console-shared.c:421
msgid "Important"
msgstr "Vigtig"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:424
+#: ../lib/packagekit-glib2/pk-console-shared.c:425
msgid "Security"
msgstr "Sikkerhed"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:428
+#: ../lib/packagekit-glib2/pk-console-shared.c:429
msgid "Bug fix "
msgstr "Fejlrettelse "
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:432
+#: ../lib/packagekit-glib2/pk-console-shared.c:433
msgid "Enhancement"
msgstr "Forbedring"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:436
+#: ../lib/packagekit-glib2/pk-console-shared.c:437
msgid "Blocked"
msgstr "Blokeret"
#. TRANSLATORS: The state of a package
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:441
-#: ../lib/packagekit-glib2/pk-console-shared.c:514
+#: ../lib/packagekit-glib2/pk-console-shared.c:442
+#: ../lib/packagekit-glib2/pk-console-shared.c:515
msgid "Installed"
msgstr "Installeret"
#. TRANSLATORS: The state of a package, i.e. not installed
-#: ../lib/packagekit-glib2/pk-console-shared.c:446
+#: ../lib/packagekit-glib2/pk-console-shared.c:447
msgid "Available"
msgstr "Tilgængelig"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:464
+#: ../lib/packagekit-glib2/pk-console-shared.c:465
msgid "Downloading"
msgstr "Hentning"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:468
+#: ../lib/packagekit-glib2/pk-console-shared.c:469
msgid "Updating"
msgstr "Opdaterer"
#. TRANSLATORS: The action of the package, in present tense
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:472
-#: ../lib/packagekit-glib2/pk-console-shared.c:592
+#: ../lib/packagekit-glib2/pk-console-shared.c:473
+#: ../lib/packagekit-glib2/pk-console-shared.c:593
msgid "Installing"
msgstr "Installerer"
#. TRANSLATORS: The action of the package, in present tense
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:476
-#: ../lib/packagekit-glib2/pk-console-shared.c:588
+#: ../lib/packagekit-glib2/pk-console-shared.c:477
+#: ../lib/packagekit-glib2/pk-console-shared.c:589
msgid "Removing"
msgstr "Fjerner"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:480
+#: ../lib/packagekit-glib2/pk-console-shared.c:481
msgid "Cleaning up"
msgstr "Rydder op"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:484
+#: ../lib/packagekit-glib2/pk-console-shared.c:485
msgid "Obsoleting"
msgstr "Forælder"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:488
+#: ../lib/packagekit-glib2/pk-console-shared.c:489
msgid "Reinstalling"
msgstr "Geninstallerer"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:506
+#: ../lib/packagekit-glib2/pk-console-shared.c:507
msgid "Downloaded"
msgstr "Hentede"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:518
+#: ../lib/packagekit-glib2/pk-console-shared.c:519
msgid "Removed"
msgstr "Fjernede"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:522
+#: ../lib/packagekit-glib2/pk-console-shared.c:523
msgid "Cleaned up"
msgstr "Ryddede op"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:526
+#: ../lib/packagekit-glib2/pk-console-shared.c:527
msgid "Obsoleted"
msgstr "Forældede"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:530
+#: ../lib/packagekit-glib2/pk-console-shared.c:531
msgid "Reinstalled"
msgstr "Geninstallerede"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:548
+#: ../lib/packagekit-glib2/pk-console-shared.c:549
msgid "Unknown role type"
msgstr "Ukendt rolletype"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:552
+#: ../lib/packagekit-glib2/pk-console-shared.c:553
msgid "Getting dependencies"
msgstr "Henter afhængigheder"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:556
+#: ../lib/packagekit-glib2/pk-console-shared.c:557
msgid "Getting update details"
msgstr "Henter opdateringsdetaljer"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:560
+#: ../lib/packagekit-glib2/pk-console-shared.c:561
msgid "Getting details"
msgstr "Henter detaljer"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:564
+#: ../lib/packagekit-glib2/pk-console-shared.c:565
msgid "Getting requires"
msgstr "Henter afhængigheder"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:568
+#: ../lib/packagekit-glib2/pk-console-shared.c:569
msgid "Getting updates"
msgstr "Henter opdateringer"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:572
+#: ../lib/packagekit-glib2/pk-console-shared.c:573
msgid "Searching by details"
msgstr "Søger efter detaljer"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:576
+#: ../lib/packagekit-glib2/pk-console-shared.c:577
msgid "Searching by file"
msgstr "Søger efter fil"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:580
+#: ../lib/packagekit-glib2/pk-console-shared.c:581
msgid "Searching groups"
msgstr "Søger efter grupper"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:584
+#: ../lib/packagekit-glib2/pk-console-shared.c:585
msgid "Searching by name"
msgstr "Søger efter navn"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:596
+#: ../lib/packagekit-glib2/pk-console-shared.c:597
msgid "Installing files"
msgstr "Installerer filer"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:600
+#: ../lib/packagekit-glib2/pk-console-shared.c:601
msgid "Refreshing cache"
msgstr "Genopfrisker cache"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:604
+#: ../lib/packagekit-glib2/pk-console-shared.c:605
msgid "Updating packages"
msgstr "Opdaterer pakker"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:608
+#: ../lib/packagekit-glib2/pk-console-shared.c:609
msgid "Updating system"
msgstr "Opdaterer system"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:612
+#: ../lib/packagekit-glib2/pk-console-shared.c:613
msgid "Canceling"
msgstr "Annullerer"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:620
+#: ../lib/packagekit-glib2/pk-console-shared.c:621
msgid "Getting repositories"
msgstr "Henter pakkearkiver"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:624
+#: ../lib/packagekit-glib2/pk-console-shared.c:625
msgid "Enabling repository"
msgstr "Aktiverer pakkearkiv"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:628
+#: ../lib/packagekit-glib2/pk-console-shared.c:629
msgid "Setting data"
msgstr "Indstiller data"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:632
+#: ../lib/packagekit-glib2/pk-console-shared.c:633
msgid "Resolving"
msgstr "Løser"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:636
+#: ../lib/packagekit-glib2/pk-console-shared.c:637
msgid "Getting file list"
msgstr "Henter filliste"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:640
+#: ../lib/packagekit-glib2/pk-console-shared.c:641
msgid "Getting provides"
msgstr "Henter udbydere"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:644
+#: ../lib/packagekit-glib2/pk-console-shared.c:645
msgid "Installing signature"
msgstr "Installerer signatur"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:648
+#: ../lib/packagekit-glib2/pk-console-shared.c:649
msgid "Getting packages"
msgstr "Henter pakker"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:652
+#: ../lib/packagekit-glib2/pk-console-shared.c:653
msgid "Accepting EULA"
msgstr "Accepterer EULA"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:660
+#: ../lib/packagekit-glib2/pk-console-shared.c:661
msgid "Getting upgrades"
msgstr "Henter opgraderinger"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:664
+#: ../lib/packagekit-glib2/pk-console-shared.c:665
msgid "Getting categories"
msgstr "Henter kategorier"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:668
+#: ../lib/packagekit-glib2/pk-console-shared.c:669
msgid "Getting transactions"
msgstr "Henter overførsler"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:672
-#: ../lib/packagekit-glib2/pk-console-shared.c:676
+#: ../lib/packagekit-glib2/pk-console-shared.c:673
+#: ../lib/packagekit-glib2/pk-console-shared.c:677
msgid "Simulating install"
msgstr "Simulerer installation"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:680
+#: ../lib/packagekit-glib2/pk-console-shared.c:681
msgid "Simulating remove"
msgstr "Simulerer fjernelse"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:684
+#: ../lib/packagekit-glib2/pk-console-shared.c:685
msgid "Simulating update"
msgstr "Simulerer opdatering"
@@ -1984,25 +1987,25 @@ msgid "Show debugging information for all files"
msgstr "Vis fejlsøgningsinformation for alle filer"
#. TRANSLATORS: a list of modules to debug
-#: ../src/egg-debug.c:459
+#: ../src/egg-debug.c:458
msgid "Debug these specific modules"
msgstr "Fejlsøg disse specifikke moduler"
#. TRANSLATORS: a list of functions to debug
-#: ../src/egg-debug.c:462
+#: ../src/egg-debug.c:461
msgid "Debug these specific functions"
msgstr "Fejlsøg disse specifikke funktioner"
#. TRANSLATORS: save to a log
-#: ../src/egg-debug.c:465
+#: ../src/egg-debug.c:464
msgid "Log debugging data to a file"
msgstr "Log fejlsøgningsdata til en fil"
-#: ../src/egg-debug.c:469
+#: ../src/egg-debug.c:468
msgid "Debugging Options"
msgstr "Fejlsøgningsindstillinger"
-#: ../src/egg-debug.c:469
+#: ../src/egg-debug.c:468
msgid "Show debugging options"
msgstr "Vis fejlsøgningsindstillinger"
@@ -2015,9 +2018,6 @@ msgstr "Vis fejlsøgningsindstillinger"
#~ msgid "This tool could not install the files: %s"
#~ msgstr "Dette værktøj kunne ikke installere filerne: %s"
-#~ msgid "This tool could not remove %s: %s"
-#~ msgstr "Dette værktøj kunne ikke fjerne %s: %s"
-
#~ msgid "This tool could not remove the packages: %s"
#~ msgstr "Dette værktøj kunne ikke fjerne pakkerne: %s"
commit 48a464074c00acf4213690cba28dae48a577fb8c
Author: aalam <aalam at fedoraproject.org>
Date: Mon Apr 19 02:40:56 2010 +0000
l10n: Updates to Panjabi (Punjabi) (pa) translation
Transmitted-via: Transifex (translate.fedoraproject.org)
diff --git a/po/pa.po b/po/pa.po
index a50c3c3..44650d4 100644
--- a/po/pa.po
+++ b/po/pa.po
@@ -3,15 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Amanpreet Singh Alam <aalam at users.sf.net>, 2008, 2009.
-# A S Alam <aalam at users.sf.net>, 2009.
+# A S Alam <aalam at users.sf.net>, 2009, 2010.
# Jaswinder Singh <jsingh at redhat.com>, 2009.
msgid ""
msgstr ""
"Project-Id-Version: packagekit.master.pa\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-08 08:21+0000\n"
-"PO-Revision-Date: 2009-12-08 14:45+0530\n"
-"Last-Translator: Jaswinder Singh <jsingh at redhat.com>\n"
+"POT-Creation-Date: 2010-04-18 19:48+0000\n"
+"PO-Revision-Date: 2010-04-19 07:57+0530\n"
+"Last-Translator: A S Alam <aalam at users.sf.net>\n"
"Language-Team: Punjabi/Panjabi <kde-i18n-doc at kde.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,115 +21,115 @@ msgstr ""
#. TRANSLATORS: this is an atomic transaction
#. TRANSLATORS: the role is the point of the transaction, e.g. update-system
-#: ../client/pk-console.c:175 ../client/pk-console.c:597
+#: ../client/pk-console.c:176 ../client/pk-console.c:598
msgid "Transaction"
msgstr "à¨à¨°à¨¾à¨à¨¸à©à¨à¨¸à¨¼à¨¨"
#. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:177
+#: ../client/pk-console.c:178
msgid "System time"
msgstr "ਸਿਸà¨à¨® ਸਮਾà¨"
#. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "Succeeded"
msgstr "ਸਫ਼ਲ"
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "True"
msgstr "ਸਹà©à¨"
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "False"
msgstr "à¨à¨²à¨¤"
#. TRANSLATORS: this is the transactions role, e.g. "update-system"
#. TRANSLATORS: the trasaction role, e.g. update-system
-#: ../client/pk-console.c:181 ../src/pk-polkit-action-lookup.c:332
+#: ../client/pk-console.c:182 ../src/pk-polkit-action-lookup.c:332
msgid "Role"
msgstr "ਰà©à¨²"
#. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:186
+#: ../client/pk-console.c:187
msgid "Duration"
msgstr "à¨
ੰਤਰਾਲ"
-#: ../client/pk-console.c:186
+#: ../client/pk-console.c:187
msgid "(seconds)"
msgstr "(ਸà¨à¨¿à©°à¨)"
#. TRANSLATORS: this is The command line used to do the action
#. TRANSLATORS: the command line of the thing that wants the authentication
-#: ../client/pk-console.c:190 ../src/pk-polkit-action-lookup.c:346
+#: ../client/pk-console.c:191 ../src/pk-polkit-action-lookup.c:346
msgid "Command line"
msgstr "à¨à¨®à¨¾à¨à¨¡ ਲਾà¨à¨¨"
#. TRANSLATORS: this is the user ID of the user that started the action
-#: ../client/pk-console.c:192
+#: ../client/pk-console.c:193
msgid "User ID"
msgstr "ਯà©à¨à¨¼à¨° ID"
#. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:199
+#: ../client/pk-console.c:200
msgid "Username"
msgstr "ਯà©à¨à¨¼à¨° ਨਾà¨"
#. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:203
+#: ../client/pk-console.c:204
msgid "Real name"
msgstr "à¨
ਸਲ੠ਨਾà¨"
-#: ../client/pk-console.c:211
+#: ../client/pk-console.c:212
msgid "Affected packages:"
msgstr "ਪà©à¨°à¨à¨¾à¨µà¨¿à¨¤ ਪà©à¨à©à¨:"
-#: ../client/pk-console.c:213
+#: ../client/pk-console.c:214
msgid "Affected packages: None"
msgstr "ਪà©à¨°à¨à¨¾à¨µà¨¿à¨¤ ਪà©à¨à©à¨: à¨à©à¨ ਨਹà©à¨"
#. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:248
+#: ../client/pk-console.c:249
msgid "Distribution"
msgstr "ਡਿਸà¨à¨°à©à¨¬à¨¿à¨à¨¸à¨¼à¨¨"
#. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:250
+#: ../client/pk-console.c:251
msgid "Type"
msgstr "à¨à¨¾à¨à¨ª"
#. TRANSLATORS: this is any summary text describing the upgrade
#. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:252 ../client/pk-console.c:291
+#: ../client/pk-console.c:253 ../client/pk-console.c:292
msgid "Summary"
msgstr "ਸੰà¨à©à¨ª"
#. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:280
+#: ../client/pk-console.c:281
msgid "Category"
msgstr "à¨à©à¨à¨¾à¨à¨°à©"
#. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:282
+#: ../client/pk-console.c:283
msgid "ID"
msgstr "ID"
#. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:285
+#: ../client/pk-console.c:286
msgid "Parent"
msgstr "ਮà©à¨¢à©"
#. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:288
+#: ../client/pk-console.c:289
msgid "Name"
msgstr "ਨਾà¨"
#. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:294
+#: ../client/pk-console.c:295
msgid "Icon"
msgstr "à¨à¨à¨à¨¾à¨¨"
#. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:340
+#: ../client/pk-console.c:341
msgid "Details about the update:"
msgstr "à¨
ੱਪਡà©à¨ ਬਾਰ੠ਵà©à¨°à¨µà¨¾:"
@@ -138,7 +138,7 @@ msgstr "à¨
ੱਪਡà©à¨ ਬਾਰ੠ਵà©à¨°à¨µà¨¾:"
#. TRANSLATORS: the package that is not signed by a known key
#. TRANSLATORS: the package name that was trying to be installed
#. TRANSLATORS: title, the names of the packages that the method is processing
-#: ../client/pk-console.c:346 ../client/pk-console.c:616
+#: ../client/pk-console.c:347 ../client/pk-console.c:617
#: ../lib/packagekit-glib2/pk-task-text.c:126
#: ../lib/packagekit-glib2/pk-task-text.c:208
#: ../src/pk-polkit-action-lookup.c:357
@@ -148,188 +148,200 @@ msgstr[0] "ਪà©à¨à©à¨"
msgstr[1] "ਪà©à¨à©à¨"
#. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:349
+#: ../client/pk-console.c:350
msgid "Updates"
msgstr "à¨
ੱਪਡà©à¨"
#. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:353
+#: ../client/pk-console.c:354
msgid "Obsoletes"
msgstr "ਬਰਤਰਫ਼"
#. TRANSLATORS: details about the update, the vendor URLs
#. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
-#: ../client/pk-console.c:357 ../lib/packagekit-glib2/pk-task-text.c:211
+#: ../client/pk-console.c:358 ../lib/packagekit-glib2/pk-task-text.c:211
msgid "Vendor"
msgstr "ਵà©à¨à¨¡à¨°"
#. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:361
+#: ../client/pk-console.c:362
msgid "Bugzilla"
msgstr "ਬੱà¨à¨à¨¼à©à¨²à¨¾"
#. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:365
+#: ../client/pk-console.c:366
msgid "CVE"
msgstr "CVE"
#. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:369
+#: ../client/pk-console.c:370
msgid "Restart"
msgstr "ਮà©à©-à¨à¨¾à¨²à©"
#. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:373
+#: ../client/pk-console.c:374
msgid "Update text"
msgstr "à¨
ੱਪਡà©à¨ à¨à©à¨à¨¸à¨"
#. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:377
+#: ../client/pk-console.c:378
msgid "Changes"
msgstr "ਬਦਲਾà¨
"
#. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:381
+#: ../client/pk-console.c:382
msgid "State"
msgstr "ਹਾਲਤ"
#. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:385
+#: ../client/pk-console.c:386
msgid "Issued"
msgstr "à¨à¨¾à¨°à© à¨à©à¨¤à¨¾"
#. TRANSLATORS: details about the update, date the update was updated
#. TRANSLATORS: The action of the package, in past tense
-#: ../client/pk-console.c:389 ../lib/packagekit-glib2/pk-console-shared.c:510
+#: ../client/pk-console.c:390 ../lib/packagekit-glib2/pk-console-shared.c:511
msgid "Updated"
msgstr "à¨
ੱਪਡà©à¨ à¨à©à¨¤à©"
#. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:425
+#: ../client/pk-console.c:426
msgid "Enabled"
-msgstr "ਯà©à¨"
+msgstr "à¨à¨¾à¨²à© ਹà©"
#. TRANSLATORS: if the repo is disabled
-#: ../client/pk-console.c:428
+#: ../client/pk-console.c:429
msgid "Disabled"
-msgstr "à¨
ਯà©à¨"
+msgstr "ਬੰਦ ਹà©"
#. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:460
+#: ../client/pk-console.c:461
msgid "System restart required by:"
msgstr "ਸਿਸà¨à¨® ਮà©à©-à¨à¨¾à¨²à© à¨à¨°à¨¨ ਦ੠ਲà©à© ਹà©:"
#. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:463
+#: ../client/pk-console.c:464
msgid "Session restart required:"
msgstr "ਸਿਸà¨à¨® ਮà©à©-à¨à¨¾à¨²à© à¨à¨°à¨¨ ਦ੠ਲà©à©:"
#. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:466
+#: ../client/pk-console.c:467
msgid "System restart (security) required by:"
msgstr "ਸਿਸà¨à¨® ਮà©à©-à¨à¨¾à¨²à© (ਸà©à¨°à©±à¨à¨¿à¨) à¨à¨°à¨¨ ਦ੠ਲà©à© ਹà©:"
#. TRANSLATORS: a package requires the session to be restarted due to a security update
-#: ../client/pk-console.c:469
+#: ../client/pk-console.c:470
msgid "Session restart (security) required:"
msgstr "ਸਿਸà¨à¨® ਮà©à©-à¨à¨¾à¨²à© (ਸà©à¨°à©±à¨à¨¿à¨) à¨à¨°à¨¨ ਦ੠ਲà©à©:"
#. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:472
+#: ../client/pk-console.c:473
msgid "Application restart required by:"
msgstr "à¨à¨ªà¨²à©à¨à©à¨¸à¨¼à¨¨ ਮà©à©-à¨à¨¾à¨²à© à¨à¨°à¨¨ ਦ੠ਲà©à© ਹà©:"
#. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:507
+#: ../client/pk-console.c:508
msgid "Package description"
msgstr "ਪà©à¨à©à¨ ਵà©à¨°à¨µà¨¾"
#. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:538
+#: ../client/pk-console.c:539
msgid "Message:"
msgstr "ਸà©à¨¨à©à¨¹à¨¾:"
#. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:559
+#: ../client/pk-console.c:560
msgid "No files"
msgstr "à¨à©à¨ ਫਾà¨à¨² ਨਹà©à¨"
#. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:564
+#: ../client/pk-console.c:565
msgid "Package files"
msgstr "ਪà©à¨à©à¨ ਫਾà¨à¨²à¨¾à¨"
#. TRANSLATORS: the percentage complete of the transaction
-#: ../client/pk-console.c:632
+#: ../client/pk-console.c:633
msgid "Percentage"
-msgstr "ਪà©à¨°à¨¤à©à¨¶à¨¤à¨¤à¨¾"
+msgstr "ਫà©à¨¸à¨¦à©"
#. TRANSLATORS: the status of the transaction (e.g. downloading)
-#: ../client/pk-console.c:650
+#: ../client/pk-console.c:651
msgid "Status"
msgstr "ਹਾਲਤ"
#. TRANSLATORS: the results from the transaction
-#: ../client/pk-console.c:678
+#: ../client/pk-console.c:680
msgid "Results:"
msgstr "ਨਤà©à¨à¨¾:"
#. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
-#: ../client/pk-console.c:685
+#: ../client/pk-console.c:687
msgid "Fatal error"
msgstr "à¨à¨¾à¨¤à¨ à¨à¨²à¨¤à©"
#. TRANSLATORS: the transaction failed in a way we could not expect
-#: ../client/pk-console.c:694
-#: ../contrib/command-not-found/pk-command-not-found.c:432
-#: ../contrib/command-not-found/pk-command-not-found.c:603
+#: ../client/pk-console.c:696
+#: ../contrib/command-not-found/pk-command-not-found.c:433
+#: ../contrib/command-not-found/pk-command-not-found.c:606
msgid "The transaction failed"
-msgstr "à¨à¨°à¨¾à¨à¨¸à©à¨à¨¸à¨¼à¨¨ ਫà©à¨² ਹà©à¨"
+msgstr "à¨à¨°à¨¾à¨à¨¸à©à¨à¨¸à¨¼à¨¨ ਫà©à¨²à©à¨¹ ਹà©à¨"
#. TRANSLATORS: print a message when there are no updates
-#: ../client/pk-console.c:721
+#: ../client/pk-console.c:727
msgid "There are no updates available at this time."
msgstr "à¨à¨¸ ਸਮà©à¨ à¨à©à¨ à¨
ੱਪਡà©à¨ à¨à¨ªà¨²à©±à¨¬à¨§ ਨਹà©à¨ ਹà©à¥¤"
+#: ../client/pk-console.c:750
+msgid "There are no upgrades available at this time."
+msgstr "à¨à¨¸ ਸਮà©à¨ à¨à©à¨ à¨
ੱਪਡà©à¨ à¨à¨ªà¨²à©±à¨¬à¨§ ਨਹà©à¨ ਹà©à¥¤"
+
#. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:808
+#: ../client/pk-console.c:817
msgid "Please restart the computer to complete the update."
msgstr "à¨
ੱਪਡà©à¨ ਨà©à©° ਪà©à¨°à¨¾ à¨à¨°à¨¨ ਵਾਸਤ੠à¨à©°à¨ªà¨¿à¨à¨à¨° ਮà©à©-à¨à¨¾à¨²à© à¨à¨°à© à¨à©à¥¤"
#. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:811
+#: ../client/pk-console.c:820
msgid "Please logout and login to complete the update."
msgstr "à¨
ੱਪਡà©à¨ ਨà©à©° ਪà©à¨°à¨¾ à¨à¨°à¨¨ ਵਾਸਤ੠ਲਾà¨à¨à¨à¨ à¨à¨°à¨à© ਲਾà¨à¨à¨¨ à¨à¨°à© à¨à©à¥¤"
#. TRANSLATORS: a package needs to restart their system (due to security)
-#: ../client/pk-console.c:814
+#: ../client/pk-console.c:823
msgid ""
"Please restart the computer to complete the update as important security "
"updates have been installed."
msgstr "à¨
ੱਪਡà©à¨ ਨà©à©° ਪà©à¨°à¨¾ à¨à¨°à¨¨ ਵਾਸਤ੠à¨à©°à¨ªà¨¿à¨à¨à¨° ਮà©à©-à¨à¨¾à¨²à© à¨à¨°à© à¨à©, à¨à¨¿à¨à¨à¨à¨¿ ਸà©à¨°à©±à¨à¨¿à¨ à¨
ੱਪਡà©à¨ à¨à©°à¨¸à¨à¨¾à¨² ਹà©à¨ ਹਨ।"
#. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:817
+#: ../client/pk-console.c:826
msgid ""
"Please logout and login to complete the update as important security updates "
"have been installed."
msgstr ""
"à¨
ੱਪਡà©à¨ ਨà©à©° ਪà©à¨°à¨¾ à¨à¨°à¨¨ ਵਾਸਤ੠ਲਾà¨à¨à¨à¨ à¨à¨°à¨à© ਲਾà¨à¨à¨¨ à¨à¨°à© à¨à©, à¨à¨¿à¨à¨à¨à¨¿ ਸà©à¨°à©±à¨à¨¿à¨ à¨
ੱਪਡà©à¨ à¨à©°à¨¸à¨à¨¾à¨² à¨à©à¨¤à© ਹਨ।"
+#. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon install-local dave.rpm'
+#: ../client/pk-console.c:852
+#, c-format
+msgid ""
+"Expected package name, actually got file. Try using 'pkcon install-local %s' "
+"instead."
+msgstr "à¨à¨¾à¨¹à©à¨¦à¨¾ ਪà©à¨à©à¨ ਨਾà¨, à¨
ਸਲ 'ਠਫਾà¨à¨² ਮਿਲà©à¥¤ 'pkcon install-local %s' ਵਰਤ੠à¨à© ਵà©à¨à©à¥¤"
+
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:840
+#: ../client/pk-console.c:860
#, c-format
msgid "This tool could not find any available package: %s"
msgstr "à¨à¨¹ à¨à©à¨² à¨à¨ªà¨²à©±à¨¬à¨§ ਪà©à¨à©à¨ ਨਹà©à¨ ਲੱਠਸà¨à¨¿à¨: %s"
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:868
+#: ../client/pk-console.c:888
#, c-format
msgid "This tool could not find the installed package: %s"
msgstr "à¨à¨¹ à¨à©à¨² à¨à©°à¨¸à¨à¨¾à¨² à¨à©à¨¤à© ਪà©à¨à©à¨ ਨਹà©à¨ ਲੱਠਸà¨à¨¿à¨: %s"
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:896 ../client/pk-console.c:924
+#: ../client/pk-console.c:916 ../client/pk-console.c:944
#, c-format
msgid "This tool could not find the package: %s"
msgstr "à¨à¨¹ à¨à©à¨² ਪà©à¨à©à¨ ਨਹà©à¨ ਲੱਠਸà¨à¨¿à¨: %s"
@@ -338,227 +350,232 @@ msgstr "à¨à¨¹ à¨à©à¨² ਪà©à¨à©à¨ ਨਹà©à¨ ਲੱਠਸà¨à¨¿à¨: %s
#. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
#. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
#. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:952 ../client/pk-console.c:980
-#: ../client/pk-console.c:1008 ../client/pk-console.c:1036
-#: ../client/pk-console.c:1064
+#: ../client/pk-console.c:972 ../client/pk-console.c:1000
+#: ../client/pk-console.c:1028 ../client/pk-console.c:1056
+#: ../client/pk-console.c:1084
#, c-format
msgid "This tool could not find all the packages: %s"
msgstr "à¨à¨¹ à¨à©à¨² ਸਠਪà©à¨à©à¨ ਨਹà©à¨ ਲੱਠਸà¨à¨¿à¨: %s"
#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
-#: ../client/pk-console.c:1093
+#: ../client/pk-console.c:1113
msgid "The daemon crashed mid-transaction!"
msgstr "ਡà©à¨®à¨¨ à¨
ਧà©à¨°à© à¨à¨°à¨¾à¨à¨¸à©à¨à¨¸à¨¼à¨¨ à¨à¨°à©à¨¸à¨¼ ਹ੠à¨à¨!"
#. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1127
+#: ../client/pk-console.c:1147
msgid "PackageKit Console Interface"
msgstr "ਪà©à¨à©à¨à¨à¨¿à©±à¨ à¨à¨¨à¨¸à©à¨² à¨à©°à¨à¨°à¨«à©à¨¸"
#. these are commands we can use with pkcon
-#: ../client/pk-console.c:1129
+#: ../client/pk-console.c:1149
msgid "Subcommands:"
msgstr "ਸਬ-à¨à¨®à¨¾à¨à¨¡:"
#. TRANSLATORS: we keep a database updated with the time that an action was last executed
-#: ../client/pk-console.c:1208
+#: ../client/pk-console.c:1228
msgid "Failed to get the time since this action was last completed"
msgstr "à¨à¨¸ à¨à¨¾à¨°à¨µà¨¾à¨ ਦ੠à¨à¨à¨°à© ਵਾਰ ਪà©à¨°à© ਹà©à¨£ ਤà©à¨ ਬਾà¨
ਦ ਸਮਾਠਲà©à¨£ ਲਠਫà©à¨²à©à¨¹ ਹà©"
#. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:1244 ../client/pk-monitor.c:280
+#: ../client/pk-console.c:1267 ../client/pk-monitor.c:326
msgid "Show the program version and exit"
msgstr "ਪਰà©à¨à¨°à¨¾à¨® ਵਰà¨à¨¨ ਵà©à¨à© à¨
ਤ੠ਬੰਦ à¨à¨°à©"
#. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1247
+#: ../client/pk-console.c:1270
msgid "Set the filter, e.g. installed"
msgstr "ਫਿਲà¨à¨° ਸà©à©±à¨ à¨à¨°à©, à¨à¨¿à¨µà©à¨ à¨à¨¿ à¨à©°à¨¸à¨à¨¾à¨²"
#. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1250
+#: ../client/pk-console.c:1273
msgid "Exit without waiting for actions to complete"
msgstr "ਪà©à¨°à© ਹà©à¨£ ਵਾਲ੠à¨à¨à¨¸à¨¼à¨¨ ਦ੠à¨à¨¡à©à¨ à¨à©à¨¤à© ਬਿਨਾਠਬੰਦ à¨à¨°à©"
#. command line argument, do we ask questions
-#: ../client/pk-console.c:1253
+#: ../client/pk-console.c:1276
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:527
msgid "Install the packages without asking for confirmation"
msgstr "ਪà©à¨¸à¨¼à¨à© à¨à©à¨¤à© ਬਿਨਾਠਹ੠ਪà©à¨à©à¨ à¨à©°à¨¸à¨à¨¾à¨² à¨à¨°à©"
#. TRANSLATORS: command line argument, this command is not a priority
-#: ../client/pk-console.c:1256
+#: ../client/pk-console.c:1279
msgid "Run the command using idle network bandwidth and also using less power"
-msgstr "à¨à¨®à¨¾à¨à¨¡ ਨà©à©° ਵà©à¨¹à¨²à© ਨà©à©±à¨à¨µà¨°à¨ ਬà©à¨à¨¡à¨µà¨¿à¨¦à¨¥ ਦà©à¨°à¨¾à¨¨ à¨à¨²à¨¾à¨ à¨
ਤ੠à¨à©±à¨ à¨à¨°à¨à¨¾ ਦ੠ਵਰਤà©à¨ à¨à¨°à¨à© ਵà©"
+msgstr "à¨à¨®à¨¾à¨à¨¡ ਨà©à©° ਵà©à¨¹à¨²à© ਨà©à©±à¨à¨µà¨°à¨ ਬà©à¨à¨¡à¨µà¨¿à¨¥ ਦà©à¨°à¨¾à¨¨ à¨à¨²à¨¾à¨ à¨
ਤ੠à¨à©±à¨ à¨à¨°à¨à¨¾ ਦ੠ਵਰਤà©à¨ à¨à¨°à¨à© ਵà©"
#. TRANSLATORS: command line argument, just output without fancy formatting
-#: ../client/pk-console.c:1259
+#: ../client/pk-console.c:1282
msgid "Print to screen a machine readable output, rather than using animated widgets"
-msgstr "à¨à¨¨à©à¨®à©à¨à¨¡ ਵਿਡà¨à¨¿à¨ ਵਰਤਣ ਦ੠ਬà¨à¨¾à¨, ਮਸ਼à©à¨¨ ਦ੠ਪà©à¨¨ ਯà©à¨ à¨à¨¾à¨£à¨à¨¾à¨°à© ਸà¨à¨°à©à¨¨ ਤ੠ਪà©à¨°à¨¿à©°à¨ à¨à¨°à©"
+msgstr "à¨à¨¨à©à¨®à©à¨à¨¡ ਵਿਡà¨à©à©±à¨ ਵਰਤਣ ਦ੠ਬà¨à¨¾à¨, ਮਸ਼à©à¨¨ ਦ੠ਪà©à©à¨¹à¨¨ ਯà©à¨ à¨à¨¾à¨£à¨à¨¾à¨°à© ਸà¨à¨°à©à¨¨ ਤ੠ਪਰਿੰਠà¨à¨°à©"
#. TRANSLATORS: we failed to contact the daemon
-#: ../client/pk-console.c:1281
+#: ../client/pk-console.c:1304
msgid "Failed to contact PackageKit"
msgstr "ਪà©à¨à©à¨à¨à¨¿à©±à¨ ਨਾਲ ਸੰਪਰਠਲਠਫà©à¨²à©à¨¹ ਹà©"
#. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1339
+#: ../client/pk-console.c:1365
+msgid "The proxy could not be set"
+msgstr "ਪਰਾà¨à¨¸à© ਸà©à©±à¨ ਨਹà©à¨ à¨à©à¨¤à¨¾ à¨à¨¾ ਸà¨à¨¿à¨"
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1377
msgid "The filter specified was invalid"
msgstr "ਦਿੱਤਾ ਫਿਲà¨à¨° à¨
ਢà©à©±à¨à¨µà¨¾à¨ ਹà©à¥¤"
#. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1358
+#: ../client/pk-console.c:1396
msgid "A search type is required, e.g. name"
msgstr "à¨à©à¨ à¨à¨¿à¨¸à¨® à¨à¨¾à¨¹à©à¨¦à© ਹà©, à¨à¨¿à¨µà©à¨ ਨਾà¨"
#. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1365 ../client/pk-console.c:1377
-#: ../client/pk-console.c:1389 ../client/pk-console.c:1401
+#: ../client/pk-console.c:1403 ../client/pk-console.c:1415
+#: ../client/pk-console.c:1427 ../client/pk-console.c:1439
msgid "A search term is required"
msgstr "à¨à©à¨ ਸ਼ਬਦ ਦ੠ਲà©à© ਹà©"
#. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1411
+#: ../client/pk-console.c:1449
msgid "Invalid search type"
msgstr "à¨à¨²à¨¤ à¨à©à¨ à¨à¨¾à¨à¨ª"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1417
+#: ../client/pk-console.c:1455
msgid "A package name to install is required"
msgstr "à¨à©°à¨¸à¨à¨¾à¨² à¨à¨°à¨¨ ਲਠਪà©à¨à©à¨ ਨਾਠਲਾà¨à¨¼à¨®à© ਹà©"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1426
+#: ../client/pk-console.c:1464
msgid "A filename to install is required"
msgstr "à¨à©°à¨¸à¨à¨¾à¨² à¨à¨°à¨¨ ਲਠà¨à©±à¨ ਫਾà¨à¨² ਨਾਠਦ੠ਲà©à© ਹà©"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1438
+#: ../client/pk-console.c:1476
msgid "A type, key_id and package_id are required"
msgstr "à¨à¨¾à¨à¨ª, key_id à¨à¨¾à¨ package_id ਦà©à¨£ ਦ੠ਲà©à© ਹà©"
#. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:1449
+#: ../client/pk-console.c:1487
msgid "A package name to remove is required"
msgstr "ਹà¨à¨¾à¨à¨£ ਵਾਸਤ੠ਪà©à¨à©à¨ ਨਾਠà¨à¨¾à¨¹à©à¨¦à¨¾ ਹà©"
#. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:1458
+#: ../client/pk-console.c:1496
msgid "A destination directory and the package names to download are required"
msgstr "ਡਾà¨à¨¨à¨²à©à¨¡ à¨à¨°à¨¨ ਵਾਸਤ੠à¨à¨¿à¨à¨¾à¨£à¨¾ ਡਾà¨à¨°à©à¨à¨à¨°à© à¨
ਤ੠ਪà©à¨à©à¨ ਨਾਠਲਾà¨à¨¼à¨®à© ਹà©"
#. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:1465
+#: ../client/pk-console.c:1503
msgid "Directory not found"
msgstr "ਡਾà¨à¨°à©à¨à¨à¨°à© ਨਹà©à¨ ਲੱà¨à©"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1474
+#: ../client/pk-console.c:1512
msgid "A licence identifier (eula-id) is required"
msgstr "à¨à©±à¨ ਲਾà¨à¨¸à©à¨à¨¸ ਪà¨à¨¾à¨£à¨à¨°à¨¤à¨¾ (eula-id) ਲਾà¨à¨¼à¨®à© ਹà©"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1485
+#: ../client/pk-console.c:1523
msgid "A transaction identifier (tid) is required"
msgstr "à¨à¨°à¨¾à¨à¨¸à©à¨à¨¸à¨¼à¨¨ ਪà¨à¨¾à¨£ (tid) ਲà©à©à©à¨¦à¨¾ ਹà©"
#. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:1506
+#: ../client/pk-console.c:1544
msgid "A package name to resolve is required"
msgstr "ਹੱਲ à¨à¨°à¨¨ ਲਠਪà©à¨à©à¨ ਨਾਠਲਾà¨à¨¼à¨®à© ਹà©"
#. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:1517 ../client/pk-console.c:1528
+#: ../client/pk-console.c:1555 ../client/pk-console.c:1566
msgid "A repository name is required"
msgstr "ਰਿਪà©à¨à¨¼à¨à¨°à© ਨਾਠਲà©à©à©à¨¦à¨¾ ਹà©"
#. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:1539
+#: ../client/pk-console.c:1577
msgid "A repo name, parameter and value are required"
msgstr "ਰà©à¨ªà© ਨਾà¨, ਪà©à¨°à¨¾à¨®à©à¨à¨° à¨
ਤ੠ਮà©à©±à¨² ਲà©à©à©à¨¦à¨¾ ਹà©"
#. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:1556
+#: ../client/pk-console.c:1594
msgid "An action, e.g. 'update-system' is required"
msgstr "à¨à¨¾à¨°à¨µà¨¾à¨, à¨à¨¿à¨µà©à¨ 'à¨
ੱਪਡà©à¨-ਸਿਸà¨à¨®' ਲà©à©à©à¨¦à¨¾ ਹà©"
#. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:1563
+#: ../client/pk-console.c:1601
msgid "A correct role is required"
msgstr "ਠà©à¨ ਰà©à¨² ਲà©à©à©à¨¦à¨¾ ਹà©"
#. TRANSLATORS: The user did not provide a package name
#. TRANSLATORS: This is when the user fails to supply the package name
-#: ../client/pk-console.c:1573 ../client/pk-console.c:1588
-#: ../client/pk-console.c:1597 ../client/pk-console.c:1617
-#: ../client/pk-console.c:1626 ../client/pk-generate-pack.c:298
+#: ../client/pk-console.c:1611 ../client/pk-console.c:1626
+#: ../client/pk-console.c:1635 ../client/pk-console.c:1655
+#: ../client/pk-console.c:1664 ../client/pk-generate-pack.c:316
msgid "A package name is required"
msgstr "ਪà©à¨à©à¨ ਨਾਠਲà©à©à©à¨¦à¨¾ ਹà©"
#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:1606
+#: ../client/pk-console.c:1644
msgid "A package provide string is required"
msgstr "ਪà©à¨à©à¨ ਦà©à¨£ ਵਾਲ੠ਸਤਰ ਲà©à©à©à¨¦à© ਹà©"
#. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:1686
+#: ../client/pk-console.c:1724
#, c-format
msgid "Option '%s' is not supported"
msgstr "à¨à©à¨£ '%s' ਸਹਾà¨à¨ ਨਹà©à¨ ਹà©"
#. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:1696
+#: ../client/pk-console.c:1734
msgid "Command failed"
msgstr "à¨à¨®à¨¾à¨à¨¡ ਫà©à¨²à©à¨¹ ਹà©"
#. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll exist on the target
-#: ../client/pk-generate-pack.c:237
+#: ../client/pk-generate-pack.c:255
msgid "Set the file name of dependencies to be excluded"
msgstr "ਨਿਰà¨à¨°à¨¤à¨¾ ਲਠਫਾà¨à¨² ਨਾਠਦਿà¨, à¨à¨¿à¨¸ ਨà©à©° ਵੱਠਰੱà¨à¨¿à¨ à¨à¨¾à¨µà©"
#. TRANSLATORS: the output location
-#: ../client/pk-generate-pack.c:240
-msgid "The output file or directory (the current directory is used if ommitted)"
+#: ../client/pk-generate-pack.c:258
+msgid "The output file or directory (the current directory is used if omitted)"
msgstr "à¨à¨à¨à¨ªà©à©±à¨ ਫਾà¨à¨² à¨à¨¾à¨ ਡਾà¨à¨°à©à¨à¨à¨°à© (ਮà©à¨à©à¨¦à¨¾ ਡਾà¨à¨°à©à¨à¨à¨°à© ਵਰਤ੠à¨à¨¾à¨µà©à¨à©, à¨à© ਨਾ ਦਿੱਤà©)"
#. TRANSLATORS: put a list of packages in the pack
-#: ../client/pk-generate-pack.c:243
+#: ../client/pk-generate-pack.c:261
msgid "The package to be put into the service pack"
msgstr "ਸਰਵਿਸ ਪà©à¨ ਵਿੱਠਰੱà¨à¨£ ਵਾਸਤ੠ਪà©à¨à©à¨"
#. TRANSLATORS: put all pending updates in the pack
-#: ../client/pk-generate-pack.c:246
+#: ../client/pk-generate-pack.c:264
msgid "Put all updates available in the service pack"
msgstr "ਸਰਵਿਸ ਪà©à¨ ਵਿੱਠਸਠà¨à¨ªà¨²à©±à¨¬à¨§ à¨
ੱਪਡà©à¨ ਰੱà¨à©"
#. TRANSLATORS: This is when the user fails to supply the correct arguments
-#: ../client/pk-generate-pack.c:282
+#: ../client/pk-generate-pack.c:300
msgid "Neither --package or --updates option selected."
msgstr "ਨਾ ਤਾਠ--package à¨à©à¨£ à¨à©à¨¤à© à¨à¨ à¨
ਤ੠ਨਾ ਹ੠--updates"
#. TRANSLATORS: This is when the user fails to supply just one argument
-#: ../client/pk-generate-pack.c:290
+#: ../client/pk-generate-pack.c:308
msgid "Both options selected."
msgstr "ਦà©à¨µà©à¨ à¨à©à¨£à¨¾à¨ à¨à©à¨¤à©à¨à¨à¥¤"
#. TRANSLATORS: This is when the user fails to supply the output
-#: ../client/pk-generate-pack.c:306
+#: ../client/pk-generate-pack.c:324
msgid "A output directory or file name is required"
msgstr "à¨à¨à¨à¨ªà©à©±à¨ ਡਾà¨à¨°à©à¨à¨à¨°à© à¨
ਤ੠ਫਾà¨à¨² ਨਾਠਲà©à©à©à¨¦à¨¾ ਹà©"
-#. TRANSLATORS: This is when the dameon is not-installed/broken and fails to startup
-#: ../client/pk-generate-pack.c:324
-msgid "The dameon failed to startup"
-msgstr "ਡà©à¨®à¨¨ à¨à¨¾à¨²à© ਹà©à¨£ ਤà©à¨ ਫà©à¨²"
+#. TRANSLATORS: This is when the daemon is not-installed/broken and fails to startup
+#: ../client/pk-generate-pack.c:342
+msgid "The daemon failed to startup"
+msgstr "ਡà©à¨®à¨¨ à¨à¨¾à¨²à© ਹà©à¨£ ਤà©à¨ ਫà©à¨²à©à¨¹"
#. TRANSLATORS: This is when the backend doesn't have the capability to get-depends
#. TRANSLATORS: This is when the backend doesn't have the capability to download
-#: ../client/pk-generate-pack.c:335 ../client/pk-generate-pack.c:341
+#: ../client/pk-generate-pack.c:353 ../client/pk-generate-pack.c:359
msgid "The package manager cannot perform this type of operation."
msgstr "ਪà©à¨à©à¨ ਮà©à¨¨à©à¨à¨° à¨à¨¸ à¨à¨¿à¨¸à¨® ਦ੠à¨à¨¾à¨°à¨µà¨¾à¨ ਨਹà©à¨ à¨à¨° ਸà¨à¨¦à¨¾ ਹà©à¥¤"
#. TRANSLATORS: This is when the distro didn't include libarchive support into PK
-#: ../client/pk-generate-pack.c:348
+#: ../client/pk-generate-pack.c:366
msgid ""
"Service packs cannot be created as PackageKit was not built with libarchive "
"support."
@@ -567,64 +584,64 @@ msgstr ""
"à¨à¨¿à¨ ਹà©à¥¤"
#. TRANSLATORS: the user specified an absolute path, but didn't get the extension correct
-#: ../client/pk-generate-pack.c:359
+#: ../client/pk-generate-pack.c:377
msgid "If specifying a file, the service pack name must end with"
msgstr "à¨à© ਫਾà¨à¨² ਦਿੱਤ੠ਤਾਠਸਰਵਿਸ ਪà©à¨ ਨਾਠà¨à¨¤à¨® ਹà©à¨£à¨¾ à¨à¨¾à¨¹à©à¨¦à¨¾ ਹà©"
#. TRANSLATORS: This is when file already exists
-#: ../client/pk-generate-pack.c:375
+#: ../client/pk-generate-pack.c:393
msgid "A pack with the same name already exists, do you want to overwrite it?"
msgstr "à¨à¨¸ ਨਾਠਨਾਲ ਪà©à¨ ਪਹਿਲਾਠਹ੠ਮà©à¨à©à¨¦ ਹà©, à¨à© à¨à¨¸ à¨à©±à¨¤à© ਲਿà¨à¨£à¨¾ ਹà©?"
#. TRANSLATORS: This is when the pack was not overwritten
-#: ../client/pk-generate-pack.c:378
+#: ../client/pk-generate-pack.c:396
msgid "The pack was not overwritten."
msgstr "ਪà©à¨ à¨à©±à¨¤à© ਨਹà©à¨ ਲਿà¨à¨¿à¨ à¨à¨¾à¨µà©à¨à¨¾à¥¤"
#. TRANSLATORS: This is when the temporary directory cannot be created, the directory name follows
-#: ../client/pk-generate-pack.c:391
+#: ../client/pk-generate-pack.c:409
msgid "Failed to create directory:"
msgstr "ਡਾà¨à¨°à©à¨à¨à¨°à© ਬਣਾà¨à¨£ ਲਠਫà©à¨²à©à¨¹ ਹà©:"
#. TRANSLATORS: This is when the list of packages from the remote computer cannot be opened
-#: ../client/pk-generate-pack.c:403
+#: ../client/pk-generate-pack.c:421
msgid "Failed to open package list."
msgstr "ਪà©à¨à©à¨ ਲਿਸਠà¨à©à¨²à©à¨¹à¨£ ਲਠਫà©à¨²à©à¨¹ ਹà©à¥¤"
#. TRANSLATORS: The package name is being matched up to available packages
-#: ../client/pk-generate-pack.c:412
+#: ../client/pk-generate-pack.c:430
msgid "Finding package name."
msgstr "ਪà©à¨à©à¨ ਨਾਠਲੱà¨à¨¿à¨ à¨à¨¾ ਰਿਹਾ ਹà©à¥¤"
#. TRANSLATORS: This is when the package cannot be found in any software source. The detailed error follows
-#: ../client/pk-generate-pack.c:416
+#: ../client/pk-generate-pack.c:434
#, c-format
msgid "Failed to find package '%s': %s"
msgstr "'%s' ਪà©à¨à©à¨ à¨à©à¨à¨£ ਲਠਫà©à¨²à©à¨¹ ਹà©: %s"
#. TRANSLATORS: This is telling the user we are in the process of making the pack
-#: ../client/pk-generate-pack.c:424
+#: ../client/pk-generate-pack.c:442
msgid "Creating service pack..."
msgstr "ਸਰਵਿਸ ਪà©à¨ ਬਣਾà¨à¨ à¨à¨¾ ਰਿਹਾ ਹà©..."
#. TRANSLATORS: we succeeded in making the file
-#: ../client/pk-generate-pack.c:439
+#: ../client/pk-generate-pack.c:457
#, c-format
msgid "Service pack created '%s'"
msgstr "ਸਰਵਿਸ ਪà©à¨ ਬਣਾà¨à¨ '%s'"
#. TRANSLATORS: we failed to make te file
-#: ../client/pk-generate-pack.c:444
+#: ../client/pk-generate-pack.c:462
#, c-format
msgid "Failed to create '%s': %s"
msgstr "'%s' ਬਣਾà¨à¨£ ਲਠਫà©à¨²à©à¨¹: %s"
-#: ../client/pk-monitor.c:210
+#: ../client/pk-monitor.c:256
msgid "Failed to get daemon state"
msgstr "ਡà©à¨®à¨¨ ਹਾਲਤ ਪਤਾ à¨à¨°à¨¨ ਲਠਫà©à¨²à©à¨¹ ਹà©à¥¤"
#. TRANSLATORS: this is a program that monitors PackageKit
-#: ../client/pk-monitor.c:296
+#: ../client/pk-monitor.c:342
msgid "PackageKit Monitor"
msgstr "ਪà©à¨à©à¨à¨à¨¿à©±à¨ ਮਾਨà©à¨à¨°"
@@ -683,42 +700,42 @@ msgid "Installing..."
msgstr "à¨à©°à¨¸à¨à¨¾à¨² à¨à©à¨¤à¨¾ à¨à¨¾ ਰਿਹਾ ਹà©..."
#. TRANSLATORS: downloading repo data so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:365
+#: ../contrib/command-not-found/pk-command-not-found.c:366
msgid "Downloading details about the software sources."
msgstr "ਸਾਫà¨à¨µà©à¨
ਰ ਸਰà©à¨¤à¨¾à¨ ਬਾਰ੠ਵà©à¨°à¨µà¨¾ ਡਾà¨à¨¨à¨²à©à¨¡ à¨à¨° ਰਿਹਾ ਹà©à¥¤"
#. TRANSLATORS: downloading file lists so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:369
+#: ../contrib/command-not-found/pk-command-not-found.c:370
msgid "Downloading filelists (this may take some time to complete)."
-msgstr "ਫਾà¨à¨²-ਲਿਸਠਡਾà¨à¨¨à¨²à©à¨¡ à¨à¨° ਰਿਹਾ ਹ੠(à¨à¨¹ ਮà©à¨à©°à¨®à¨² ਹà©à¨£ ਲਠà¨à©à¨ ਸਮਾਠਲ੠ਸà¨à¨¦à¨¾ ਹà©)।"
+msgstr "ਫਾà¨à¨²-ਲਿਸਠਡਾà¨à¨¨à¨²à©à¨¡ à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹ੠(à¨à¨¹ ਪà©à¨°à¨¾ ਹà©à¨£ ਲਠà¨à©à¨ ਸਮਾਠਲ੠ਸà¨à¨¦à¨¾ ਹà©)।"
#. TRANSLATORS: waiting for native lock
-#: ../contrib/command-not-found/pk-command-not-found.c:373
+#: ../contrib/command-not-found/pk-command-not-found.c:374
msgid "Waiting for package manager lock."
-msgstr "ਪà©à¨à©à¨ ਮà©à¨¨à©à¨à¨° ਲਾਠਦ੠à¨à¨¡à©à¨ à¨à¨° ਰਿਹਾ ਹà©à¥¤"
+msgstr "ਪà©à¨à©à¨ ਮà©à¨¨à©à¨à¨° ਲਾਠà¨à¨¡à©à¨à¨¿à¨ à¨à¨¾ ਰਿਹਾ ਹà©à¥¤"
#. TRANSLATORS: loading package cache so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:377
+#: ../contrib/command-not-found/pk-command-not-found.c:378
msgid "Loading list of packages."
msgstr "ਪà©à¨à©à¨ ਲਿਸਠਲà©à¨¡ à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹà©à¥¤"
#. TRANSLATORS: we failed to find the package, this shouldn't happen
-#: ../contrib/command-not-found/pk-command-not-found.c:423
+#: ../contrib/command-not-found/pk-command-not-found.c:424
msgid "Failed to search for file"
msgstr "ਫਾà¨à¨² ਲਠà¨à©à¨ ਫà©à¨²à©à¨¹ ਹà©"
#. TRANSLATORS: we failed to launch the executable, the error follows
-#: ../contrib/command-not-found/pk-command-not-found.c:566
+#: ../contrib/command-not-found/pk-command-not-found.c:569
msgid "Failed to launch:"
msgstr "à¨à¨²à¨¾à¨à¨£ ਲਠਫà©à¨²à©à¨¹:"
#. TRANSLATORS: we failed to install the package
-#: ../contrib/command-not-found/pk-command-not-found.c:594
+#: ../contrib/command-not-found/pk-command-not-found.c:597
msgid "Failed to install packages"
msgstr "ਪà©à¨à©à¨ à¨à©°à¨¸à¨à¨¾à¨² à¨à¨°à¨¨ ਲਠਫà©à¨²à©à¨¹"
#. TRANSLATORS: tool that gets called when the command is not found
-#: ../contrib/command-not-found/pk-command-not-found.c:670
+#: ../contrib/command-not-found/pk-command-not-found.c:673
msgid "PackageKit Command Not Found"
msgstr "ਪà©à¨à©à¨à¨à¨¿à©±à¨ à¨à¨®à¨¾à¨à¨¡ ਨਹà©à¨ ਲੱà¨à©"
@@ -728,51 +745,51 @@ msgid "Command not found."
msgstr "à¨à¨®à¨¾à¨à¨¡ ਨਹà©à¨ ਲੱà¨à©à¥¤"
#. TRANSLATORS: tell the user what we think the command is
-#: ../contrib/command-not-found/pk-command-not-found.c:706
+#: ../contrib/command-not-found/pk-command-not-found.c:717
msgid "Similar command is:"
msgstr "ਰਲਦ੠à¨à¨®à¨¾à¨à¨¡ ਹà©:"
#. TRANSLATORS: Ask the user if we should run the similar command
-#: ../contrib/command-not-found/pk-command-not-found.c:716
+#: ../contrib/command-not-found/pk-command-not-found.c:727
msgid "Run similar command:"
msgstr "ਰਲਦ੠à¨à¨®à¨¾à¨à¨¡ à¨à¨²à¨¾à¨:"
#. TRANSLATORS: show the user a list of commands that they could have meant
#. TRANSLATORS: show the user a list of commands we could run
-#: ../contrib/command-not-found/pk-command-not-found.c:730
-#: ../contrib/command-not-found/pk-command-not-found.c:739
+#: ../contrib/command-not-found/pk-command-not-found.c:741
+#: ../contrib/command-not-found/pk-command-not-found.c:750
msgid "Similar commands are:"
msgstr "ਰਲਦà©à¨à¨ à¨à¨®à¨¾à¨à¨¡à¨¾à¨ ਹਨ:"
#. TRANSLATORS: ask the user to choose a file to run
-#: ../contrib/command-not-found/pk-command-not-found.c:746
+#: ../contrib/command-not-found/pk-command-not-found.c:757
msgid "Please choose a command to run"
msgstr "à¨à¨²à¨¾à¨à¨£ ਲਠà¨à¨®à¨¾à¨à¨¡ ਦ੠à¨à©à¨£ à¨à¨°à© à¨à©"
#. TRANSLATORS: tell the user what package provides the command
-#: ../contrib/command-not-found/pk-command-not-found.c:766
+#: ../contrib/command-not-found/pk-command-not-found.c:775
msgid "The package providing this file is:"
msgstr "ਪà©à¨à©à¨ à¨à¨¹ ਫਾà¨à¨² ਦਿੰਦਾ ਹà©:"
#. TRANSLATORS: as the user if we want to install a package to provide the command
-#: ../contrib/command-not-found/pk-command-not-found.c:771
+#: ../contrib/command-not-found/pk-command-not-found.c:780
#, c-format
msgid "Install package '%s' to provide command '%s'?"
msgstr "à¨à¨®à¨¾à¨à¨¡ '%2$s' ਦà©à¨£ ਲਠਪà©à¨à©à¨ '%1$s' à¨à©°à¨¸à¨à¨¾à¨² à¨à¨°à¨¨à¨¾ ਹà©?"
#. TRANSLATORS: Show the user a list of packages that provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:795
+#: ../contrib/command-not-found/pk-command-not-found.c:804
msgid "Packages providing this file are:"
msgstr "ਪà©à¨à©à¨ à¨à¨¹ ਫਾà¨à¨² ਦਿੰਦਾ ਹà©:"
#. TRANSLATORS: Show the user a list of packages that they can install to provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:805
+#: ../contrib/command-not-found/pk-command-not-found.c:814
msgid "Suitable packages are:"
msgstr "ਢà©à©±à¨à¨µà©à¨ ਪà©à¨à©à¨ ਹਨ:"
#. get selection
#. TRANSLATORS: ask the user to choose a file to install
-#: ../contrib/command-not-found/pk-command-not-found.c:814
+#: ../contrib/command-not-found/pk-command-not-found.c:823
msgid "Please choose a package to install"
msgstr "à¨à©°à¨¸à¨à¨¾à¨² à¨à¨°à¨¨ ਲਠਪà©à¨à©à¨ à¨à©à¨£à© à¨à©"
@@ -785,7 +802,7 @@ msgstr "à¨à©°à¨¸à¨à¨¾à¨² à¨à©à¨¤à¨¾ à¨à¨¾ ਰਿਹਾ ਹà©"
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:409
#, c-format
msgid "Failed to find the package %s, or already installed: %s"
-msgstr "ਪà©à¨à©à¨ %s ਲੱà¨à¨£ ਵਿੱਠਫà©à¨², à¨à¨¾à¨ ਪਹਿਲਾਠਹ੠à¨à©°à¨¸à¨à¨¾à¨² ਹà©: %s"
+msgstr "ਪà©à¨à©à¨ %s ਲੱà¨à¨£ ਵਿੱਠਫà©à¨²à©à¨¹, à¨à¨¾à¨ ਪਹਿਲਾਠਹ੠à¨à©°à¨¸à¨à¨¾à¨² ਹà©: %s"
#. command line argument, simulate what would be done, but don't actually do it
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:518
@@ -851,31 +868,31 @@ msgstr "%i ਯà©à¨ à¨
ਤ੠%i à¨
ਯà©à¨ ਸਰà©à¨¤ ਲੱà¨à© ਹਨ
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:627
#, c-format
msgid "Finding debugging sources"
-msgstr "ਡà©à¨¬à©±à¨à¨¿à©°à¨ ਸਰà©à¨¤ ਲੱਠਰਿਹਾ ਹà©"
+msgstr "ਡà©à¨¬à©±à¨ ਸਰà©à¨¤ ਲੱà¨à© à¨à¨¾ ਰਹ੠ਹਨ"
#. TRANSLATORS: tell the user what we found
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:660
#, c-format
msgid "Found %i disabled debuginfo repos."
-msgstr "%i à¨
ਯà©à¨ debuginfo ਰਿਪ੠ਲੱà¨à©à¨à¨ ਹਨ।"
+msgstr "%i à¨à¨¯à©à¨ debuginfo ਰਿਪ੠ਲੱà¨à©à¨à¨ ਹਨ।"
#. TRANSLATORS: we're now enabling all the debug sources we found
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:667
#, c-format
msgid "Enabling debugging sources"
-msgstr "ਡà©à¨¬à©±à¨à¨¿à©°à¨ ਸਰà©à¨¤ ਯà©à¨ à¨à¨° ਰਿਹਾ ਹà©"
+msgstr "ਡà©à¨¬à©±à¨à¨¿ ਸਰà©à¨¤ ਯà©à¨ à¨à©à¨¤à¨¾ à¨à¨¾ ਰਿਹਾ ਹà©"
#. TRANSLATORS: tell the user how many we enabled
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:695
#, c-format
msgid "Enabled %i debugging sources."
-msgstr "%i ਡà©à¨¬à©±à¨à¨¿à©°à¨ ਸਰà©à¨¤ ਯà©à¨ à¨à©à¨¤à¨¾ ਹà©à¥¤"
+msgstr "%i ਡà©à¨¬à©±à¨ ਸਰà©à¨¤ ਯà©à¨ à¨à©à¨¤à¨¾ ਹà©à¥¤"
#. TRANSLATORS: we're now finding packages that match in all the repos
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:702
#, c-format
msgid "Finding debugging packages"
-msgstr "ਡà©à¨¬à©±à¨à¨¿à©°à¨ ਪà©à¨à©à¨ ਲੱà¨à¨¿à¨ à¨à¨¾ ਰਿਹਾ ਹà©à¥¤"
+msgstr "ਡà©à¨¬à©±à¨ ਪà©à¨à©à¨ ਲੱà¨à© à¨à¨¾ ਰਹ੠ਹਨ।"
#. TRANSLATORS: we couldn't find the package name, non-fatal
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:714
@@ -899,13 +916,13 @@ msgstr "à¨à©°à¨¸à¨à¨¾à¨² à¨à¨°à¨¨ ਲਠà¨à©à¨ ਨਵਾਠਪà©à¨à©
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:779
#, c-format
msgid "Found %i packages:"
-msgstr "%i ਪà©à¨à©à¨ ਲੱà¨à¨¿à¨:"
+msgstr "%i ਪà©à¨à©à¨ ਲੱà¨à©:"
#. TRANSLATORS: tell the user we are searching for deps
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:795
#, c-format
msgid "Finding packages that depend on these packages"
-msgstr "ਪà©à¨à©à¨ ਲੱਠਰਿਹਾ à¨à© à¨à¨¹à¨¨à¨¾à¨ ਪà©à¨à©à¨à¨¾à¨ ਤ੠ਨਿਰà¨à¨° à¨à¨°à¨¦à© ਹਨ"
+msgstr "ਪà©à¨à©à¨ ਲੱà¨à© à¨à¨¾ ਰਹ੠ਹਨ, à¨à© à¨à¨¹à¨¨à¨¾à¨ ਪà©à¨à©à¨à¨¾à¨ ਤ੠ਨਿਰà¨à¨° à¨à¨°à¨¦à© ਹਨ"
#. TRANSLATORS: could not install, detailed error follows
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:808
@@ -940,7 +957,7 @@ msgstr "ਸਿਮà©à¨²à©à¨ ਮà©à¨¡ ਵਿੱਠਪà©à¨à©à¨ à¨à©°à¨¸
#. TRANSLATORS: we are now installing the debuginfo packages we found earlier
#. TRANSLATORS: transaction state, installing packages
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:862
-#: ../lib/packagekit-glib2/pk-console-shared.c:282
+#: ../lib/packagekit-glib2/pk-console-shared.c:283
#, c-format
msgid "Installing packages"
msgstr "ਪà©à¨à©à¨ à¨à©°à¨¸à¨à¨¾à¨² à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹਨ"
@@ -949,113 +966,113 @@ msgstr "ਪà©à¨à©à¨ à¨à©°à¨¸à¨à¨¾à¨² à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹਨ"
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:875
#, c-format
msgid "Could not install packages: %s"
-msgstr "ਪà©à¨à©à¨ à¨à©°à¨¸à¨à¨¾à¨² ਨਹà©à¨ à¨à¨° ਸà¨à¨¿à¨: %s"
+msgstr "ਪà©à¨à©à¨ à¨à©°à¨¸à¨à¨¾à¨² ਨਹà©à¨ à¨à©à¨¤à© à¨à¨¾ ਸà¨à©: %s"
#. TRANSLATORS: we are now disabling all debuginfo repos we previously enabled
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:907
#, c-format
msgid "Disabling sources previously enabled"
-msgstr "ਪਹਿਲਾਠਯà©à¨ à¨à©à¨¤à© ਸਰà©à¨¤ à¨
ਯà©à¨ à¨à¨° ਰਿਹਾ"
+msgstr "ਪਹਿਲਾਠਯà©à¨ à¨à©à¨¤à© ਸਰà©à¨¤ à¨à¨¯à©à¨ à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹਨ"
#. TRANSLATORS: no debuginfo packages could be found to be installed, detailed error follows
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:919
#, c-format
msgid "Could not disable the debugging sources: %s"
-msgstr "ਡà©à¨¬à©±à¨à¨¿à©°à¨ ਸਰà©à¨¤ ਨà©à©° à¨
ਯà©à¨ ਨਹà©à¨ à¨à¨° ਸà¨à¨¿à¨: %s"
+msgstr "ਡà©à¨¬à©±à¨ ਸਰà©à¨¤ ਨà©à©° à¨
ਯà©à¨ ਨਹà©à¨ à¨à©à¨¤à¨¾ à¨à¨¾ ਸà¨à¨¿à¨: %s"
#. TRANSLATORS: we disabled all the debugging repos that we enabled before
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:934
#, c-format
msgid "Disabled %i debugging sources."
-msgstr "%i ਡà©à¨¬à©±à¨à¨¿à©°à¨ ਸਰà©à¨¤ à¨
ਯà©à¨ à¨à©à¨¤à© ਹਨ।"
+msgstr "%i ਡà©à¨¬à©±à¨ ਸਰà©à¨¤ à¨
ਯà©à¨ à¨à©à¨¤à© à¨à¨à¥¤"
#. TRANSLATORS: couldn't open device to write
-#: ../contrib/device-rebind/pk-device-rebind.c:61
+#: ../contrib/device-rebind/pk-device-rebind.c:62
msgid "Failed to open file"
msgstr "ਫਾà¨à¨² à¨à©à¨²à¨£ ਲਠਫà©à¨²à©à¨¹"
#. TRANSLATORS: could not write to the device
-#: ../contrib/device-rebind/pk-device-rebind.c:70
+#: ../contrib/device-rebind/pk-device-rebind.c:71
msgid "Failed to write to the file"
msgstr "ਫਾà¨à¨² ਵਿੱਠਲਿà¨à¨£ ਤà©à¨ ਫà©à¨²à©à¨¹ ਹà©"
#. TRANSLATORS: we failed to release the current driver
-#: ../contrib/device-rebind/pk-device-rebind.c:110
-#: ../contrib/device-rebind/pk-device-rebind.c:147
+#: ../contrib/device-rebind/pk-device-rebind.c:111
+#: ../contrib/device-rebind/pk-device-rebind.c:148
msgid "Failed to write to device"
msgstr "à¨à©°à¨¤à¨° ਤ੠ਲਿà¨à¨£ ਲਠਫà©à¨²à©à¨¹ ਹà©"
#. TRANSLATORS: the device could not be found in sysfs
-#: ../contrib/device-rebind/pk-device-rebind.c:175
+#: ../contrib/device-rebind/pk-device-rebind.c:176
msgid "Device could not be found"
msgstr "à¨à©°à¨¤à¨° ਨਹà©à¨ ਲੱà¨à¨¿à¨ à¨à¨¾ ਸà¨à¨¿à¨"
#. TRANSLATORS: we failed to release the current driver
-#: ../contrib/device-rebind/pk-device-rebind.c:202
+#: ../contrib/device-rebind/pk-device-rebind.c:203
msgid "Failed to unregister driver"
msgstr "ਡਰਾà¨à¨µà¨° à¨
ਣ-ਰà¨à¨¿à¨¸à¨à¨° à¨à¨°à¨¨ ਵਿੱਠਫà©à¨²à©à¨¹"
#. TRANSLATORS: we failed to bind the old driver
-#: ../contrib/device-rebind/pk-device-rebind.c:211
+#: ../contrib/device-rebind/pk-device-rebind.c:212
msgid "Failed to register driver"
msgstr "ਡਰਾà¨à¨µ ਰà¨à¨¿à¨¸à¨à¨° à¨à¨°à¨¨ ਲਠਫà©à¨²à©à¨¹"
#. TRANSLATORS: user did not specify a device sysfs path that exists
-#: ../contrib/device-rebind/pk-device-rebind.c:260
+#: ../contrib/device-rebind/pk-device-rebind.c:261
msgid "Device path not found"
msgstr "à¨à©°à¨¤à¨° à¨à¨¿à¨à¨¾à¨£à¨¾ ਨਹà©à¨ ਲੱà¨à¨¿à¨"
#. TRANSLATORS: user did not specify a valid device sysfs path
-#: ../contrib/device-rebind/pk-device-rebind.c:268
+#: ../contrib/device-rebind/pk-device-rebind.c:269
msgid "Incorrect device path specified"
msgstr "à¨à¨²à¨¤ à¨à©°à¨¤à¨° à¨à¨¿à¨à¨¾à¨£à¨¾ ਦਿੱਤਾ ਹà©"
-#: ../contrib/device-rebind/pk-device-rebind.c:293
+#: ../contrib/device-rebind/pk-device-rebind.c:294
msgid "Show extra debugging information"
msgstr "ਹà©à¨° ਡà©à¨¬à©±à¨ à¨à¨¾à¨£à¨à¨¾à¨°à© ਵà©à¨à©"
#. command line argument, simulate what would be done, but don't actually do it
-#: ../contrib/device-rebind/pk-device-rebind.c:296
+#: ../contrib/device-rebind/pk-device-rebind.c:297
msgid "Don't actually touch the hardware, only simulate what would be done"
msgstr "ਹਾਰਡਵà©à¨
ਰ ਨà©à©° à¨à©à©à© ਨਾ, ਸਿਰਫ à¨à© à¨à¨°à¨¨à¨¾ ਹà©, à¨à¨¸ ਦ੠ਨà¨à¨² à¨à¨°à©"
#. TRANSLATORS: command line option: a list of files to install
-#: ../contrib/device-rebind/pk-device-rebind.c:299
+#: ../contrib/device-rebind/pk-device-rebind.c:300
msgid "Device paths"
msgstr "à¨à©°à¨¤à¨° à¨à¨¿à¨à¨¾à¨£à¨¾"
#. TRANSLATORS: tool that gets called when the device needs reloading after installing firmware
-#: ../contrib/device-rebind/pk-device-rebind.c:314
+#: ../contrib/device-rebind/pk-device-rebind.c:315
msgid "PackageKit Device Reloader"
msgstr "ਪà©à¨à©à¨à¨à¨¿à©±à¨ à¨à©°à¨¤à¨° ਰà©à¨²à©à¨¡à¨°"
#. TRANSLATORS: user did not specify a valid device sysfs path
-#: ../contrib/device-rebind/pk-device-rebind.c:322
+#: ../contrib/device-rebind/pk-device-rebind.c:323
msgid "You need to specify at least one valid device path"
msgstr "ਤà©à¨¹à¨¾à¨¨à©à©° à¨à©±à¨à©-à¨à©±à¨ à¨à©±à¨ ਯà©à¨ à¨à©°à¨¤à¨° à¨à¨¿à¨à¨¾à¨£à¨¾ ਦà©à¨£ ਦ੠ਲà©à© ਹà©"
#. TRANSLATORS: user did not specify a valid device sysfs path
-#: ../contrib/device-rebind/pk-device-rebind.c:332
+#: ../contrib/device-rebind/pk-device-rebind.c:333
msgid "This script can only be used by the root user"
-msgstr "à¨à¨¹ ਸà¨à¨°à¨¿à¨ªà¨ à¨à©à¨µà¨² ਰà©à¨ ਯà©à¨à¨¼à¨° ਵਲà©à¨ ਹ੠ਵਰਤ੠à¨à¨¾ ਸà¨à¨¦à© ਹà©"
+msgstr "à¨à¨¹ ਸà¨à©à¨°à¨¿à¨ªà¨ à¨à©à¨µà¨² ਰà©à¨ ਯà©à¨à¨¼à¨° ਵਲà©à¨ ਹ੠ਵਰਤ੠à¨à¨¾ ਸà¨à¨¦à© ਹà©"
#. TRANSLATORS: we're going to verify the path first
-#: ../contrib/device-rebind/pk-device-rebind.c:341
+#: ../contrib/device-rebind/pk-device-rebind.c:342
msgid "Verifying device path"
msgstr "à¨à©°à¨¤à¨° à¨à¨¿à¨à¨¾à¨£à© ਦ੠à¨à¨¾à¨à¨ ਹ੠ਰਹ੠ਹà©"
#. TRANSLATORS: user did not specify a device sysfs path that exists
-#: ../contrib/device-rebind/pk-device-rebind.c:346
+#: ../contrib/device-rebind/pk-device-rebind.c:347
msgid "Failed to verify device path"
msgstr "à¨à©°à¨¤à¨° à¨à¨¿à¨à¨¾à¨£à¨¾ à¨à¨¾à¨à¨ ਲਠਫà©à¨²à©à¨¹ ਹà©"
#. TRANSLATORS: we're going to try
-#: ../contrib/device-rebind/pk-device-rebind.c:360
+#: ../contrib/device-rebind/pk-device-rebind.c:361
msgid "Attempting to rebind device"
msgstr "à¨à©°à¨¤à¨° ਰà©à¨¬à¨¾à¨à¨à¨¡ à¨à¨°à¨¨ ਦ੠à¨à©à¨¸à¨¼à¨¿à¨¸à¨¼ à¨à¨¾à¨°à©"
#. TRANSLATORS: we failed to release the current driver
-#: ../contrib/device-rebind/pk-device-rebind.c:365
+#: ../contrib/device-rebind/pk-device-rebind.c:366
msgid "Failed to rebind device"
msgstr "à¨à©°à¨¤à¨° ਰà©à¨¬à¨¾à¨à¨à¨¡ à¨à¨°à¨¨ ਲਠਫà©à¨²à©à¨¹ ਹà©"
@@ -1077,7 +1094,7 @@ msgid "Please enter a number from 1 to %i: "
msgstr "੧ ਤà©à¨ %i ਤੱਠਨੰਬਰ ਦਿਠà¨à©:"
#. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:183
+#: ../lib/packagekit-glib2/pk-console-shared.c:185
msgid "More than one package matches:"
msgstr "à¨à©±à¨ ਤà©à¨ ਵੱਧ ਰਲਦ੠ਪà©à¨à©à¨ ਲੱà¨à©:"
@@ -1087,448 +1104,448 @@ msgid "Please choose the correct package: "
msgstr "ਠà©à¨ ਪà©à¨à©à¨ à¨à©à¨£à© à¨à©:"
#. TRANSLATORS: This is when the transaction status is not known
-#: ../lib/packagekit-glib2/pk-console-shared.c:250
+#: ../lib/packagekit-glib2/pk-console-shared.c:251
msgid "Unknown state"
msgstr "à¨
ਣà¨à¨¾à¨£ ਹਾਲਤ"
#. TRANSLATORS: transaction state, the daemon is in the process of starting
-#: ../lib/packagekit-glib2/pk-console-shared.c:254
+#: ../lib/packagekit-glib2/pk-console-shared.c:255
msgid "Starting"
msgstr "ਸ਼à©à¨°à© ਹ੠ਰਿਹਾ ਹà©"
#. TRANSLATORS: transaction state, the transaction is waiting for another to complete
-#: ../lib/packagekit-glib2/pk-console-shared.c:258
+#: ../lib/packagekit-glib2/pk-console-shared.c:259
msgid "Waiting in queue"
msgstr "à¨à¨¤à¨¾à¨° ਵਿੱਠà¨à¨¡à©à¨ à¨à¨¾à¨°à©"
#. TRANSLATORS: transaction state, just started
-#: ../lib/packagekit-glib2/pk-console-shared.c:262
+#: ../lib/packagekit-glib2/pk-console-shared.c:263
msgid "Running"
msgstr "à¨à©±à¨² ਰਿਹਾ ਹà©"
#. TRANSLATORS: transaction state, is querying data
-#: ../lib/packagekit-glib2/pk-console-shared.c:266
+#: ../lib/packagekit-glib2/pk-console-shared.c:267
msgid "Querying"
msgstr "à¨à¨¿à¨à¨°à© à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹà©"
#. TRANSLATORS: transaction state, getting data from a server
-#: ../lib/packagekit-glib2/pk-console-shared.c:270
+#: ../lib/packagekit-glib2/pk-console-shared.c:271
msgid "Getting information"
msgstr "à¨à¨¾à¨£à¨à¨¾à¨°à© ਲਠà¨à¨¾ ਰਹ੠ਹà©"
#. TRANSLATORS: transaction state, removing packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:274
+#: ../lib/packagekit-glib2/pk-console-shared.c:275
msgid "Removing packages"
msgstr "ਪà©à¨à©à¨ ਹà¨à¨¾à¨ à¨à¨¾ ਰਹ੠ਹਨ"
#. TRANSLATORS: transaction state, downloading package files
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:278
-#: ../lib/packagekit-glib2/pk-console-shared.c:656
+#: ../lib/packagekit-glib2/pk-console-shared.c:279
+#: ../lib/packagekit-glib2/pk-console-shared.c:657
msgid "Downloading packages"
msgstr "ਪà©à¨à©à¨ ਡਾà¨à¨¨à¨²à©à¨¡ à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹਨ"
#. TRANSLATORS: transaction state, refreshing internal lists
-#: ../lib/packagekit-glib2/pk-console-shared.c:286
+#: ../lib/packagekit-glib2/pk-console-shared.c:287
msgid "Refreshing software list"
msgstr "ਸਾਫà¨à¨µà©à¨
ਰ ਲਿਸਠਤਾà¨à¨¼à¨¾ à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹà©"
#. TRANSLATORS: transaction state, installing updates
-#: ../lib/packagekit-glib2/pk-console-shared.c:290
+#: ../lib/packagekit-glib2/pk-console-shared.c:291
msgid "Installing updates"
msgstr "à¨
ੱਪਡà©à¨ à¨à©°à¨¸à¨à¨¾à¨² à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹਨ"
#. TRANSLATORS: transaction state, removing old packages, and cleaning config files
-#: ../lib/packagekit-glib2/pk-console-shared.c:294
+#: ../lib/packagekit-glib2/pk-console-shared.c:295
msgid "Cleaning up packages"
msgstr "ਪà©à¨à©à¨ ਸਾਫ਼ à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹਨ"
#. TRANSLATORS: transaction state, obsoleting old packages
-#: ../lib/packagekit-glib2/pk-console-shared.c:298
+#: ../lib/packagekit-glib2/pk-console-shared.c:299
msgid "Obsoleting packages"
msgstr "ਪà©à¨à©à¨ ਬਰਤਰਫ਼ à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹਨ"
#. TRANSLATORS: transaction state, checking the transaction before we do it
-#: ../lib/packagekit-glib2/pk-console-shared.c:302
+#: ../lib/packagekit-glib2/pk-console-shared.c:303
msgid "Resolving dependencies"
msgstr "ਨਿਰà¨à¨°à¨¤à¨¾ ਹੱਲ à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹà©"
#. TRANSLATORS: transaction state, checking if we have all the security keys for the operation
-#: ../lib/packagekit-glib2/pk-console-shared.c:306
+#: ../lib/packagekit-glib2/pk-console-shared.c:307
msgid "Checking signatures"
msgstr "ਦਸਤà¨à¨¤ à¨à©à©±à¨ à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹਨ"
#. TRANSLATORS: transaction state, when we return to a previous system state
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:310
-#: ../lib/packagekit-glib2/pk-console-shared.c:616
+#: ../lib/packagekit-glib2/pk-console-shared.c:311
+#: ../lib/packagekit-glib2/pk-console-shared.c:617
msgid "Rolling back"
msgstr "ਰà©à¨² ਬà©à¨ à¨à©à¨¤à¨¾ à¨à¨¾ ਰਿਹਾ ਹà©"
#. TRANSLATORS: transaction state, when we're doing a test transaction
-#: ../lib/packagekit-glib2/pk-console-shared.c:314
+#: ../lib/packagekit-glib2/pk-console-shared.c:315
msgid "Testing changes"
-msgstr "ਤਬਦà©à¨²à©à¨à¨ ਦ੠à¨à¨¾à¨à¨ ਹ੠ਰਹ੠ਹà©"
+msgstr "ਬਦਲਾà¨
ਦ੠à¨à¨¾à¨à¨ à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹà©"
#. TRANSLATORS: transaction state, when we're writing to the system package database
-#: ../lib/packagekit-glib2/pk-console-shared.c:318
+#: ../lib/packagekit-glib2/pk-console-shared.c:319
msgid "Committing changes"
-msgstr "ਤਬਦà©à¨²à©à¨à¨ à¨à¨®à¨¿à©±à¨ à¨à¨° ਰਿਹਾ ਹà©"
+msgstr "ਬਦਲਾà¨
à¨à¨®à¨¿à¨ à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹਨ"
#. TRANSLATORS: transaction state, requesting data from a server
-#: ../lib/packagekit-glib2/pk-console-shared.c:322
+#: ../lib/packagekit-glib2/pk-console-shared.c:323
msgid "Requesting data"
msgstr "ਡਾà¨à¨¾ ਮੰà¨à¨¿à¨ à¨à¨¾ ਰਿਹਾ ਹà©"
#. TRANSLATORS: transaction state, all done!
-#: ../lib/packagekit-glib2/pk-console-shared.c:326
+#: ../lib/packagekit-glib2/pk-console-shared.c:327
msgid "Finished"
-msgstr "ਮà©à¨à©°à¨®à¨² à¨à¨° ਰਿਹਾ ਹà©"
+msgstr "ਮà©à¨à©°à¨®à¨² à¨à©à¨¤à¨¾ à¨à¨¾ ਰਿਹਾ ਹà©"
#. TRANSLATORS: transaction state, in the process of cancelling
-#: ../lib/packagekit-glib2/pk-console-shared.c:330
+#: ../lib/packagekit-glib2/pk-console-shared.c:331
msgid "Cancelling"
-msgstr "ਰੱਦ à¨à¨° ਰਿਹਾ ਹà©"
+msgstr "ਰੱਦ à¨à©à¨¤à¨¾ à¨à¨¾ ਰਿਹਾ ਹà©"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:334
+#: ../lib/packagekit-glib2/pk-console-shared.c:335
msgid "Downloading repository information"
msgstr "ਰਿਪà©à©à¨à¨°à© à¨à¨¾à¨£à¨à¨¾à¨°à© ਡਾà¨à¨¨à¨²à©à¨¡ à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹà©"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:338
+#: ../lib/packagekit-glib2/pk-console-shared.c:339
msgid "Downloading list of packages"
msgstr "ਪà©à¨à©à¨ ਲਿਸਠਡਾà¨à¨¨à¨²à©à¨¡ à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹà©"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:342
+#: ../lib/packagekit-glib2/pk-console-shared.c:343
msgid "Downloading file lists"
msgstr "ਫਾà¨à¨² ਲਿਸà¨à¨¾à¨ ਡਾà¨à¨¨à¨²à©à¨¡ à¨à©à¨¤à©à¨à¨ à¨à¨¾ ਰਹà©à¨à¨ ਹਨ"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:346
+#: ../lib/packagekit-glib2/pk-console-shared.c:347
msgid "Downloading lists of changes"
msgstr "ਬਦਲਾà¨
ਲਠਲਿਸਠਡਾà¨à¨¨à¨²à©à¨¡ à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹà©"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:350
+#: ../lib/packagekit-glib2/pk-console-shared.c:351
msgid "Downloading groups"
msgstr "à¨à¨°à©à©±à¨¡ ਡਾà¨à¨¨à¨²à©à¨¡ à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹਨ"
#. TRANSLATORS: transaction state, downloading metadata
-#: ../lib/packagekit-glib2/pk-console-shared.c:354
+#: ../lib/packagekit-glib2/pk-console-shared.c:355
msgid "Downloading update information"
msgstr "à¨
ੱਪਡà©à¨ à¨à¨¾à¨£à¨à¨¾à¨°à© ਡਾà¨à¨¨à¨²à©à¨¡ à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹà©"
#. TRANSLATORS: transaction state, repackaging delta files
-#: ../lib/packagekit-glib2/pk-console-shared.c:358
+#: ../lib/packagekit-glib2/pk-console-shared.c:359
msgid "Repackaging files"
msgstr "ਫਾà¨à¨²à¨¾à¨ ਮà©à©-ਪà©à¨ à¨à©à¨¤à©à¨à¨ à¨à¨¾ ਰਹà©à¨à¨ ਹਨ"
#. TRANSLATORS: transaction state, loading databases
-#: ../lib/packagekit-glib2/pk-console-shared.c:362
+#: ../lib/packagekit-glib2/pk-console-shared.c:363
msgid "Loading cache"
msgstr "à¨à©à¨¸ ਲà©à¨¡ à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹà©"
#. TRANSLATORS: transaction state, scanning for running processes
-#: ../lib/packagekit-glib2/pk-console-shared.c:366
+#: ../lib/packagekit-glib2/pk-console-shared.c:367
msgid "Scanning applications"
msgstr "à¨à¨ªà¨²à©à¨à©à¨¶à¨¨à¨¾à¨ ਸà¨à©à¨¨ à¨à©à¨¤à©à¨à¨ à¨à¨¾ ਰਹà©à¨à¨ ਹਨ"
#. TRANSLATORS: transaction state, generating a list of packages installed on the system
-#: ../lib/packagekit-glib2/pk-console-shared.c:370
+#: ../lib/packagekit-glib2/pk-console-shared.c:371
msgid "Generating package lists"
msgstr "ਪà©à¨à©à¨ ਲਿਸਠਬਣਾਠà¨à¨¾ ਰਹ੠ਹà©"
#. TRANSLATORS: transaction state, when we're waiting for the native tools to exit
-#: ../lib/packagekit-glib2/pk-console-shared.c:374
+#: ../lib/packagekit-glib2/pk-console-shared.c:375
msgid "Waiting for package manager lock"
msgstr "ਪà©à¨à©à¨ ਮà©à¨¨à©à¨à¨° ਲਾਠਦ੠à¨à¨¡à©à¨ à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹà©"
#. TRANSLATORS: transaction state, waiting for user to type in a password
-#: ../lib/packagekit-glib2/pk-console-shared.c:378
+#: ../lib/packagekit-glib2/pk-console-shared.c:379
msgid "Waiting for authentication"
msgstr "ਪà©à¨°à¨®à¨¾à¨£à¨¿à¨à¨¤à¨¾ ਲਠà¨à¨¡à©à¨ à¨à¨¾à¨°à©"
#. TRANSLATORS: transaction state, we are updating the list of processes
-#: ../lib/packagekit-glib2/pk-console-shared.c:382
+#: ../lib/packagekit-glib2/pk-console-shared.c:383
msgid "Updating running applications"
msgstr "à¨à©±à¨²à¨¦à© à¨à¨ªà¨²à©à¨à©à¨¸à¨¼à¨¨ à¨
ੱਪਡà©à¨ à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹà©"
#. TRANSLATORS: transaction state, we are checking executable files currently in use
-#: ../lib/packagekit-glib2/pk-console-shared.c:386
+#: ../lib/packagekit-glib2/pk-console-shared.c:387
msgid "Checking applications in use"
msgstr "ਵਰਤà©à¨ à¨
ਧà©à¨¨ à¨à¨ªà¨²à©à¨à©à¨¶à¨¨à¨¾à¨ ਦ੠à¨à¨¾à¨à¨ ਹ੠ਰਹ੠ਹà©"
#. TRANSLATORS: transaction state, we are checking for libraries currently in use
-#: ../lib/packagekit-glib2/pk-console-shared.c:390
+#: ../lib/packagekit-glib2/pk-console-shared.c:391
msgid "Checking libraries in use"
msgstr "ਵਰਤà©à¨ à¨
ਧà©à¨¨ ਲਾà¨à¨¬à¨°à©à¨°à©à¨à¨ ਦ੠à¨à¨¾à¨à¨ ਹ੠ਰਹ੠ਹà©"
#. TRANSLATORS: transaction state, we are copying package files before or after the transaction
-#: ../lib/packagekit-glib2/pk-console-shared.c:394
+#: ../lib/packagekit-glib2/pk-console-shared.c:395
msgid "Copying files"
msgstr "ਫਾà¨à¨²à¨¾à¨ à¨à¨¾à¨ªà© à¨à©à¨¤à©à¨à¨ à¨à¨¾ ਰਹà©à¨à¨ ਹਨ"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:412
+#: ../lib/packagekit-glib2/pk-console-shared.c:413
msgid "Trivial"
-msgstr "ਥà©à©à¨¾"
+msgstr "à¨à©à¨à¨¾"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:416
+#: ../lib/packagekit-glib2/pk-console-shared.c:417
msgid "Normal"
msgstr "ਸਧਾਰਨ"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:420
+#: ../lib/packagekit-glib2/pk-console-shared.c:421
msgid "Important"
msgstr "à¨à¨¼à¨°à©à¨°à©"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:424
+#: ../lib/packagekit-glib2/pk-console-shared.c:425
msgid "Security"
msgstr "ਸà©à¨°à©±à¨à¨¿à¨"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:428
+#: ../lib/packagekit-glib2/pk-console-shared.c:429
msgid "Bug fix "
msgstr "ਬੱਠਫਿà¨à¨¸ "
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:432
+#: ../lib/packagekit-glib2/pk-console-shared.c:433
msgid "Enhancement"
msgstr "ਸà©à¨§"
#. TRANSLATORS: The type of update
-#: ../lib/packagekit-glib2/pk-console-shared.c:436
+#: ../lib/packagekit-glib2/pk-console-shared.c:437
msgid "Blocked"
msgstr "ਬਲਾਠà¨à©à¨¤à©"
#. TRANSLATORS: The state of a package
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:441
-#: ../lib/packagekit-glib2/pk-console-shared.c:514
+#: ../lib/packagekit-glib2/pk-console-shared.c:442
+#: ../lib/packagekit-glib2/pk-console-shared.c:515
msgid "Installed"
msgstr "à¨à©°à¨¸à¨à¨¾à¨² à¨à©à¨¤à©"
#. TRANSLATORS: The state of a package, i.e. not installed
-#: ../lib/packagekit-glib2/pk-console-shared.c:446
+#: ../lib/packagekit-glib2/pk-console-shared.c:447
msgid "Available"
msgstr "à¨à¨ªà¨²à©±à¨¬à¨§"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:464
+#: ../lib/packagekit-glib2/pk-console-shared.c:465
msgid "Downloading"
msgstr "ਡਾà¨à¨¨à¨²à©à¨¡ à¨à¨¾à¨°à©"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:468
+#: ../lib/packagekit-glib2/pk-console-shared.c:469
msgid "Updating"
msgstr "à¨
ੱਪਡà©à¨ à¨à¨¾à¨°à©"
#. TRANSLATORS: The action of the package, in present tense
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:472
-#: ../lib/packagekit-glib2/pk-console-shared.c:592
+#: ../lib/packagekit-glib2/pk-console-shared.c:473
+#: ../lib/packagekit-glib2/pk-console-shared.c:593
msgid "Installing"
msgstr "à¨à©°à¨¸à¨à¨¾à¨² à¨à¨°à¨¨à¨¾ à¨à¨¾à¨°à©"
#. TRANSLATORS: The action of the package, in present tense
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:476
-#: ../lib/packagekit-glib2/pk-console-shared.c:588
+#: ../lib/packagekit-glib2/pk-console-shared.c:477
+#: ../lib/packagekit-glib2/pk-console-shared.c:589
msgid "Removing"
msgstr "ਹà¨à¨¾à¨à¨ à¨à¨¾ ਰਿਹਾ ਹà©"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:480
+#: ../lib/packagekit-glib2/pk-console-shared.c:481
msgid "Cleaning up"
msgstr "ਸਾਫ਼ à¨à¨°à¨¨à¨¾ à¨à¨¾à¨°à©"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:484
+#: ../lib/packagekit-glib2/pk-console-shared.c:485
msgid "Obsoleting"
msgstr "ਬਰਤਰ਼ਫ à¨à¨¾à¨°à©"
#. TRANSLATORS: The action of the package, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:488
+#: ../lib/packagekit-glib2/pk-console-shared.c:489
msgid "Reinstalling"
msgstr "ਮà©à©-à¨à©°à¨¸à¨à¨¾à¨² à¨à¨°à¨¨à¨¾ à¨à¨¾à¨°à©"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:506
+#: ../lib/packagekit-glib2/pk-console-shared.c:507
msgid "Downloaded"
msgstr "ਡਾà¨à¨¨à¨²à©à¨¡ à¨à©à¨¤à©"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:518
+#: ../lib/packagekit-glib2/pk-console-shared.c:519
msgid "Removed"
msgstr "ਹà¨à¨¾à¨ à¨à¨ ਹਨ"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:522
+#: ../lib/packagekit-glib2/pk-console-shared.c:523
msgid "Cleaned up"
msgstr "ਸਾਫ਼ à¨à©à¨¤à©"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:526
+#: ../lib/packagekit-glib2/pk-console-shared.c:527
msgid "Obsoleted"
msgstr "ਬਰਤਰਫ਼ à¨à©à¨¤à©"
#. TRANSLATORS: The action of the package, in past tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:530
+#: ../lib/packagekit-glib2/pk-console-shared.c:531
msgid "Reinstalled"
msgstr "ਮà©à©-à¨à©°à¨¸à¨à¨¾à¨² à¨à©à¨¤à©"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:548
+#: ../lib/packagekit-glib2/pk-console-shared.c:549
msgid "Unknown role type"
msgstr "à¨
ਣà¨à¨¾à¨£ ਰà©à¨² à¨à¨¿à¨¸à¨®"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:552
+#: ../lib/packagekit-glib2/pk-console-shared.c:553
msgid "Getting dependencies"
-msgstr "ਨਿਰà¨à¨°à¨¤à¨¾ ਲ੠ਰਿਹਾ ਹà©"
+msgstr "ਨਿਰà¨à¨°à¨¤à¨¾ ਲਠà¨à¨¾ ਰਹ੠ਹà©"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:556
+#: ../lib/packagekit-glib2/pk-console-shared.c:557
msgid "Getting update details"
msgstr "à¨
ੱਪਡà©à¨ à¨à¨¾à¨£à¨à¨¾à¨°à© ਲਠà¨à¨¾ ਰਹ੠ਹà©"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:560
+#: ../lib/packagekit-glib2/pk-console-shared.c:561
msgid "Getting details"
msgstr "ਵà©à¨°à¨µà¨¾ ਲਿਠà¨à¨¾ ਰਿਹਾ ਹà©"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:564
+#: ../lib/packagekit-glib2/pk-console-shared.c:565
msgid "Getting requires"
msgstr "ਲà©à©à©à¨¦à© ਪà©à¨à©à¨ ਲਠà¨à¨¾ ਰਹ੠ਹਨ"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:568
+#: ../lib/packagekit-glib2/pk-console-shared.c:569
msgid "Getting updates"
msgstr "à¨
ੱਪਡà©à¨ ਲਠà¨à¨¾ ਰਹ੠ਹਨ"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:572
+#: ../lib/packagekit-glib2/pk-console-shared.c:573
msgid "Searching by details"
msgstr "ਵà©à¨°à¨µà© ਮà©à¨¤à¨¾à¨¬à¨ à¨à©à¨ à¨à¨¾à¨°à©"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:576
+#: ../lib/packagekit-glib2/pk-console-shared.c:577
msgid "Searching by file"
msgstr "ਫਾà¨à¨² ਮà©à¨¤à¨¾à¨¬à¨ à¨à©à¨ à¨à¨¾à¨°à©"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:580
+#: ../lib/packagekit-glib2/pk-console-shared.c:581
msgid "Searching groups"
msgstr "à¨à¨°à©à©±à¨ª ਮà©à¨¤à¨¾à¨¬à¨ à¨à©à¨ à¨à¨¾à¨°à©"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:584
+#: ../lib/packagekit-glib2/pk-console-shared.c:585
msgid "Searching by name"
msgstr "ਨਾਠਮà©à¨¤à¨¾à¨¬à¨ à¨à©à¨ à¨à¨¾à¨°à©"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:596
+#: ../lib/packagekit-glib2/pk-console-shared.c:597
msgid "Installing files"
msgstr "ਫਾà¨à¨²à¨¾à¨ à¨à©°à¨¸à¨à¨¾à¨² à¨à©à¨¤à©à¨à¨ à¨à¨¾ ਰਹà©à¨à¨ ਹਨ"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:600
+#: ../lib/packagekit-glib2/pk-console-shared.c:601
msgid "Refreshing cache"
msgstr "à¨à©à¨¸à¨¼ ਮà©à©-ਤਾà¨à¨¼à¨¾ à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹà©"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:604
+#: ../lib/packagekit-glib2/pk-console-shared.c:605
msgid "Updating packages"
msgstr "ਪà©à¨à©à¨ à¨
ੱਪਡà©à¨ à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹਨ"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:608
+#: ../lib/packagekit-glib2/pk-console-shared.c:609
msgid "Updating system"
msgstr "ਸਿਸà¨à¨® à¨
ੱਪਡà©à¨ à¨à©à¨¤à¨¾ à¨à¨¾ ਰਿਹਾ ਹà©"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:612
+#: ../lib/packagekit-glib2/pk-console-shared.c:613
msgid "Canceling"
-msgstr "ਰੱਦ à¨à¨° ਰਿਹਾ ਹà©"
+msgstr "ਰੱਦ à¨à©à¨¤à¨¾ à¨à¨¾ ਰਿਹਾ ਹà©"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:620
+#: ../lib/packagekit-glib2/pk-console-shared.c:621
msgid "Getting repositories"
msgstr "ਰਿਪà©à©à¨à¨°à© ਲਠà¨à¨¾ ਰਹ੠ਹà©"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:624
+#: ../lib/packagekit-glib2/pk-console-shared.c:625
msgid "Enabling repository"
msgstr "ਰਿਪà©à©à¨à¨°à© à¨à¨¾à¨²à© à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹà©"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:628
+#: ../lib/packagekit-glib2/pk-console-shared.c:629
msgid "Setting data"
msgstr "ਡਾà¨à¨¾ ਸà©à©±à¨ à¨à©à¨¤à¨¾ à¨à¨¾ ਰਿਹਾ ਹà©"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:632
+#: ../lib/packagekit-glib2/pk-console-shared.c:633
msgid "Resolving"
msgstr "ਹੱਲ਼ à¨à©à¨¤à¨¾ à¨à¨¾ ਰਿਹਾ ਹà©"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:636
+#: ../lib/packagekit-glib2/pk-console-shared.c:637
msgid "Getting file list"
msgstr "ਫਾà¨à¨² ਲਿਸਠਲਠà¨à¨¾ ਰਹ੠ਹà©"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:640
+#: ../lib/packagekit-glib2/pk-console-shared.c:641
msgid "Getting provides"
msgstr "ਦà©à¨£ ਵਾਲ੠ਪà©à¨à©à¨ ਲਠà¨à¨¾ ਰਹ੠ਹਨ"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:644
+#: ../lib/packagekit-glib2/pk-console-shared.c:645
msgid "Installing signature"
msgstr "ਦਸਤà¨à¨¤ à¨à©°à¨¸à¨à¨¾à¨² à¨à©à¨¤à© à¨à¨¾ ਰਹ੠ਹਨ"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:648
+#: ../lib/packagekit-glib2/pk-console-shared.c:649
msgid "Getting packages"
msgstr "ਪà©à¨à©à¨ ਲਠà¨à¨¾ ਰਹ੠ਹਨ"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:652
+#: ../lib/packagekit-glib2/pk-console-shared.c:653
msgid "Accepting EULA"
msgstr "EULA ਮਨà¨à¨¼à©à¨° à¨à©à¨¤à¨¾ à¨à¨¾ ਰਿਹਾ ਹà©"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:660
+#: ../lib/packagekit-glib2/pk-console-shared.c:661
msgid "Getting upgrades"
msgstr "à¨
ੱਪà¨à¨°à©à¨¡ à¨à©à¨¤à¨¾ à¨à¨¾ ਰਿਹਾ ਹà©"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:664
+#: ../lib/packagekit-glib2/pk-console-shared.c:665
msgid "Getting categories"
msgstr "à¨à©à¨à¨¾à¨à¨°à©à¨à¨ ਲà¨à¨à¨ à¨à¨¾ ਰਹà©à¨à¨ ਹਨ"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:668
+#: ../lib/packagekit-glib2/pk-console-shared.c:669
msgid "Getting transactions"
-msgstr "à¨à¨°à¨¾à¨à¨¸à©à¨à¨¸à¨¼à¨¨ ਲਠà¨à¨¾ ਰਹ੠ਹਨ"
+msgstr "à¨à¨°à¨¾à¨à¨¸à©à¨à¨¸à¨¼à¨¨à¨¾à¨ ਲਠà¨à¨¾ ਰਹà©à¨à¨ ਹਨ"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:672
-#: ../lib/packagekit-glib2/pk-console-shared.c:676
+#: ../lib/packagekit-glib2/pk-console-shared.c:673
+#: ../lib/packagekit-glib2/pk-console-shared.c:677
msgid "Simulating install"
msgstr "à¨à©°à¨¸à¨à¨¾à¨² à¨à¨°à¨¨ ਦ੠ਨà¨à¨² à¨à¨¾à¨°à©"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:680
+#: ../lib/packagekit-glib2/pk-console-shared.c:681
msgid "Simulating remove"
msgstr "ਹà¨à¨¾à¨à¨£ ਦ੠ਨà¨à¨² à¨à¨¾à¨°à©"
#. TRANSLATORS: The role of the transaction, in present tense
-#: ../lib/packagekit-glib2/pk-console-shared.c:684
+#: ../lib/packagekit-glib2/pk-console-shared.c:685
msgid "Simulating update"
msgstr "à¨
ੱਪਡà©à¨ ਦ੠ਨà¨à¨² à¨à¨¾à¨°à©"
@@ -1575,7 +1592,7 @@ msgstr "à¨à©à©°à¨à© ਫਿੰà¨à¨°à¨ªà¨°à¨¿à©°à¨"
#. TRANSLATORS: the timestamp (a bit like a machine readable time)
#: ../lib/packagekit-glib2/pk-task-text.c:144
msgid "Key Timestamp"
-msgstr "à¨à©à©°à¨à© à¨à¨¾à¨à¨®à¨¸à¨à©à¨à¨ª"
+msgstr "à¨à©à©°à¨à© à¨à¨¾à¨à¨®-ਸà¨à©à¨à¨ª"
#. TRANSLATORS: ask the user if they want to import
#: ../lib/packagekit-glib2/pk-task-text.c:157
@@ -1684,7 +1701,7 @@ msgstr "EULA ਮਨà¨à¨¼à©à¨°"
#: ../policy/org.freedesktop.packagekit.policy.in.h:8
msgid "Authentication is required to accept a EULA"
-msgstr "EULA ਮਨà¨à¨¼à©à¨° à¨à¨°à¨¨ ਲਠਪਰਮਾਣà¨à¨¿à¨¤à¨¾ ਦ੠ਲà©à© ਹà©"
+msgstr "EULA ਮਨà¨à¨¼à©à¨° à¨à¨°à¨¨ ਲਠਪਰਮਾਣà¨à¨¿à¨¤à¨¾ ਦ੠ਲà©à© ਹà©"
#: ../policy/org.freedesktop.packagekit.policy.in.h:9
msgid "Authentication is required to cancel a task that was not started by yourself"
@@ -1911,7 +1928,7 @@ msgstr "ਸ਼à©à¨°à© à¨à¨°à¨¨ ਲਠà¨à¨²à¨¤à©:"
#: ../src/pk-polkit-action-lookup.c:150
msgid "To install debugging packages, extra sources need to be enabled"
-msgstr "ਡà©à¨¬à©±à¨à¨¿à©°à¨ ਪà©à¨à©à¨ à¨à©°à¨¸à¨à¨¾à¨² à¨à¨°à¨¨ ਲà¨, ਵਾਧ੠ਸਰà©à¨¤ ਯà©à¨ à¨à¨°à¨¨ ਦ੠ਲà©à© ਹà©"
+msgstr "ਡà©à¨¬à©±à¨ ਪà©à¨à©à¨ à¨à©°à¨¸à¨à¨¾à¨² à¨à¨°à¨¨ ਲà¨, ਵਾਧ੠ਸਰà©à¨¤ ਯà©à¨ à¨à¨°à¨¨ ਦ੠ਲà©à© ਹà©"
#. TRANSLATORS: is not GPG signed
#: ../src/pk-polkit-action-lookup.c:171 ../src/pk-polkit-action-lookup.c:190
@@ -1920,24 +1937,24 @@ msgstr "ਸਾਫà¨à¨µà©à¨
ਰ à¨à©±à¨ à¨à¨°à©à¨¸à©à¨¯à©à¨ ਸਰà©à¨¤
#: ../src/pk-polkit-action-lookup.c:176
msgid "Do not update this package unless you are sure it is safe to do so."
-msgstr "à¨à¨¸ ਪà©à¨à©à¨ ਨà©à©° à¨
ੱਪਡà©à¨ ਨਾ à¨à¨°à© à¨à¨¦à©à¨ ਤੱਠਤà©à¨¹à¨¾à¨¨à©à©° à¨à¨¸ ਬਾਰ੠ਪਤਾ ਨਹà©à¨à¥¤"
+msgstr "à¨à¨¸ ਪà©à¨à©à¨ ਨà©à©° à¨
ੱਪਡà©à¨ ਨਾ à¨à¨°à©, à¨à¨¦à©à¨ ਤੱਠਤà©à¨¹à¨¾à¨¨à©à©° à¨à¨¸ ਬਾਰ੠ਪਤਾ ਨਹà©à¨à¥¤"
#: ../src/pk-polkit-action-lookup.c:177
msgid "Do not update these packages unless you are sure it is safe to do so."
-msgstr "à¨à¨¹à¨¨à¨¾à¨ ਪà©à¨à©à¨à¨¾à¨ ਨà©à©° à¨
ੱਪਡà©à¨ ਨਾ à¨à¨°à© à¨à¨¦à©à¨ ਤੱਠਤà©à¨¹à¨¾à¨¨à©à©° à¨à¨¸ ਬਾਰ੠ਪਤਾ ਨਹà©à¨à¥¤"
+msgstr "à¨à¨¹à¨¨à¨¾à¨ ਪà©à¨à©à¨à¨¾à¨ ਨà©à©° à¨
ੱਪਡà©à¨ ਨਾ à¨à¨°à©, à¨à¨¦à©à¨ ਤੱਠਤà©à¨¹à¨¾à¨¨à©à©° à¨à¨¸ ਬਾਰ੠ਪਤਾ ਨਹà©à¨à¥¤"
#: ../src/pk-polkit-action-lookup.c:195
msgid "Do not install this package unless you are sure it is safe to do so."
-msgstr "à¨à¨¸ ਪà©à¨à©à¨ ਨà©à©° à¨à©°à¨¸à¨à¨¾à¨² ਨਾ à¨à¨°à© à¨à¨¦à©à¨ ਤੱਠਤà©à¨¹à¨¾à¨¨à©à©° à¨à¨¸ ਬਾਰ੠ਪਤਾ ਨਹà©à¨à¥¤"
+msgstr "à¨à¨¸ ਪà©à¨à©à¨ ਨà©à©° à¨à©°à¨¸à¨à¨¾à¨² ਨਾ à¨à¨°à©, à¨à¨¦à©à¨ ਤੱਠਤà©à¨¹à¨¾à¨¨à©à©° à¨à¨¸ ਬਾਰ੠ਪਤਾ ਨਹà©à¨à¥¤"
#: ../src/pk-polkit-action-lookup.c:196
msgid "Do not install these packages unless you are sure it is safe to do so."
-msgstr "à¨à¨¹à¨¨à¨¾à¨ ਪà©à¨à©à¨à¨¾à¨ ਨà©à©° à¨à©°à¨¸à¨à¨¾à¨² ਨਾ à¨à¨°à© à¨à¨¦à©à¨ ਤੱਠਤà©à¨¹à¨¾à¨¨à©à©° à¨à¨¸ ਬਾਰ੠ਪਤਾ ਨਹà©à¨à¥¤"
+msgstr "à¨à¨¹à¨¨à¨¾à¨ ਪà©à¨à©à¨à¨¾à¨ ਨà©à©° à¨à©°à¨¸à¨à¨¾à¨² ਨਾ à¨à¨°à©, à¨à¨¦à©à¨ ਤੱਠਤà©à¨¹à¨¾à¨¨à©à©° à¨à¨¸ ਬਾਰ੠ਪਤਾ ਨਹà©à¨à¥¤"
#. TRANSLATORS: too many packages to list each one
#: ../src/pk-polkit-action-lookup.c:273
msgid "Many packages"
-msgstr "ਬਹà©à¨¤à© ਪà©à¨à©à¨"
+msgstr "à¨à¨ ਪà©à¨à©à¨"
#. TRANSLATORS: if the transaction is forced to install only trusted packages
#: ../src/pk-polkit-action-lookup.c:339
@@ -1947,33 +1964,33 @@ msgstr "ਸਿਰਫ à¨à¨°à©à¨¸à©à¨¯à©à¨"
#. TRANSLATORS: turn on all debugging
#: ../src/egg-debug.c:388
msgid "Show debugging information for all files"
-msgstr "ਸਠਫਾà¨à¨²à¨¾à¨ ਲਠਡà©à¨¬à©±à¨à¨¿à©°à¨ à¨à¨¾à¨£à¨à¨¾à¨°à© ਵà©à¨à¨¾à¨"
+msgstr "ਸਠਫਾà¨à¨²à¨¾à¨ ਲਠਡà©à¨¬à©±à¨ à¨à¨¾à¨£à¨à¨¾à¨°à© ਵà©à¨à©"
#. TRANSLATORS: a list of modules to debug
-#: ../src/egg-debug.c:459
+#: ../src/egg-debug.c:458
msgid "Debug these specific modules"
msgstr "à¨à¨¹à¨¨à¨¾à¨ à¨à¨¾à¨¸ ਮà©à¨¡à¨¿à¨à¨²à¨¾à¨ ਨà©à©° ਡà©à¨¬à©±à¨ à¨à¨°à©"
#. TRANSLATORS: a list of functions to debug
-#: ../src/egg-debug.c:462
+#: ../src/egg-debug.c:461
msgid "Debug these specific functions"
msgstr "à¨à¨¹à¨¨à¨¾à¨ à¨à¨¾à¨¸ ਫੰà¨à¨¶à¨¨à¨¾à¨ ਨà©à©° ਡà©à¨¬à©±à¨ à¨à¨°à©"
#. TRANSLATORS: save to a log
-#: ../src/egg-debug.c:465
+#: ../src/egg-debug.c:464
msgid "Log debugging data to a file"
-msgstr "ਡà©à¨¬à©±à¨à¨¿à©°à¨ ਡਾà¨à© ਨà©à©° à¨à©±à¨ ਫਾà¨à¨² ਵਿੱਠਰੱà¨à©"
+msgstr "ਡà©à¨¬à©±à¨ ਡਾà¨à© ਨà©à©° à¨à©±à¨ ਫਾà¨à¨² ਵਿੱਠਰੱà¨à©"
-#: ../src/egg-debug.c:469
+#: ../src/egg-debug.c:468
msgid "Debugging Options"
msgstr "ਡà©à¨¬à©±à¨à¨¿à©°à¨ à¨à©à¨£à¨¾à¨"
-#: ../src/egg-debug.c:469
+#: ../src/egg-debug.c:468
msgid "Show debugging options"
-msgstr "ਡà©à¨¬à©±à¨à¨¿à©°à¨ à¨à©à¨£à¨¾à¨ ਵà©à¨à¨¾à¨"
+msgstr "ਡà©à¨¬à©±à¨à¨¿à©°à¨ à¨à©à¨£à¨¾à¨ ਵà©à¨à©"
#~ msgid "Malicious software can damage your computer or cause other harm."
#~ msgstr "à¨à¨²à¨¤ ਸਾਫà¨à¨µà©à¨
ਰ ਤà©à¨¹à¨¾à¨¡à© à¨à©°à¨ªà¨¿à¨à¨à¨° ਨà©à©° à¨à¨°à¨¾à¨¬ à¨à¨¾à¨ ਹà©à¨° ਨà©à¨à¨¸à¨¾à¨¨ à¨à¨° ਸà¨à¨¦à¨¾ ਹà©à¥¤"
#~ msgid "Transaction failed with no error"
-#~ msgstr "ਬਿਨਾਠà¨à¨¿à¨¸à© à¨à¨²à¨¤à© à¨à¨°à¨¾à¨à¨¸à©à¨à¨¸à¨¼à¨¨ ਫà©à¨² ਹà©à¨"
+#~ msgstr "ਬਿਨਾਠà¨à¨¿à¨¸à© à¨à¨²à¨¤à© à¨à¨°à¨¾à¨à¨¸à©à¨à¨¸à¨¼à¨¨ ਫà©à¨²à©à¨¹ ਹà©à¨"
commit 2d546c059b47fa9bd77a81fe4935f7e47cd1b441
Author: Richard Hughes <richard at hughsie.com>
Date: Thu Apr 15 18:29:48 2010 +0100
yum: Sync with libzif upstream which offers a pretty stellar performance increase
diff --git a/backends/yum/Makefile.am b/backends/yum/Makefile.am
index 241a8a7..95293d7 100644
--- a/backends/yum/Makefile.am
+++ b/backends/yum/Makefile.am
@@ -29,8 +29,6 @@ libpk_backend_yum_la_CFLAGS = $(PK_PLUGIN_CFLAGS) $(WARNINGFLAGS_C)
libpk_backend_yum_la_SOURCES += \
libzif/egg-debug.c \
libzif/egg-debug.h \
- libzif/egg-string.c \
- libzif/egg-string.h \
libzif/zif.h \
libzif/zif-lock.c \
libzif/zif-lock.h \
@@ -54,8 +52,10 @@ libpk_backend_yum_la_SOURCES += \
libzif/zif-store-remote.h \
libzif/zif-md.c \
libzif/zif-md.h \
- libzif/zif-md-filelists.c \
- libzif/zif-md-filelists.h \
+ libzif/zif-md-filelists-sql.c \
+ libzif/zif-md-filelists-sql.h \
+ libzif/zif-md-filelists-xml.c \
+ libzif/zif-md-filelists-xml.h \
libzif/zif-md-primary-sql.c \
libzif/zif-md-primary-sql.h \
libzif/zif-md-other-sql.c \
diff --git a/backends/yum/libzif/egg-string.c b/backends/yum/libzif/egg-string.c
deleted file mode 120000
index 2f33770..0000000
--- a/backends/yum/libzif/egg-string.c
+++ /dev/null
@@ -1 +0,0 @@
-../../../src/egg-string.c
\ No newline at end of file
diff --git a/backends/yum/libzif/egg-string.h b/backends/yum/libzif/egg-string.h
deleted file mode 120000
index 1440094..0000000
--- a/backends/yum/libzif/egg-string.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../src/egg-string.h
\ No newline at end of file
diff --git a/backends/yum/libzif/zif-changeset.c b/backends/yum/libzif/zif-changeset.c
index fc6d4f7..9d78c67 100644
--- a/backends/yum/libzif/zif-changeset.c
+++ b/backends/yum/libzif/zif-changeset.c
@@ -220,7 +220,7 @@ zif_changeset_parse_header (ZifChangeset *changeset, const gchar *header, GError
/* check if there is a version field */
len = strlen (header);
if (header[len-1] == '>') {
- zif_changeset_set_author (changeset, temp);
+ zif_changeset_set_author (changeset, header);
ret = TRUE;
goto out;
}
diff --git a/backends/yum/libzif/zif-config.c b/backends/yum/libzif/zif-config.c
index 54e631e..1fba6cb 100644
--- a/backends/yum/libzif/zif-config.c
+++ b/backends/yum/libzif/zif-config.c
@@ -49,7 +49,6 @@
#include "zif-monitor.h"
#include "egg-debug.h"
-#include "egg-string.h"
#define ZIF_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_CONFIG, ZifConfigPrivate))
@@ -216,8 +215,8 @@ guint
zif_config_get_uint (ZifConfig *config, const gchar *key, GError **error)
{
gchar *value;
- gboolean ret;
guint retval = G_MAXUINT;
+ gchar *endptr = NULL;
g_return_val_if_fail (ZIF_IS_CONFIG (config), G_MAXUINT);
g_return_val_if_fail (key != NULL, G_MAXUINT);
@@ -229,8 +228,8 @@ zif_config_get_uint (ZifConfig *config, const gchar *key, GError **error)
goto out;
/* convert to int */
- ret = egg_strtouint (value, &retval);
- if (!ret) {
+ retval = g_ascii_strtoull (value, &endptr, 10);
+ if (value == endptr) {
g_set_error (error, ZIF_CONFIG_ERROR, ZIF_CONFIG_ERROR_FAILED,
"failed to convert '%s' to unsigned integer", value);
goto out;
@@ -252,16 +251,16 @@ out:
static guint
zif_config_string_to_time (const gchar *value)
{
- gboolean ret;
guint len;
guint timeval = 0;
gchar suffix;
gchar *value_copy = NULL;
+ gchar *endptr = NULL;
g_return_val_if_fail (value != NULL, FALSE);
/* long enough */
- len = egg_strlen (value, 10);
+ len = strlen (value);
if (len < 2)
goto out;
@@ -273,8 +272,8 @@ zif_config_string_to_time (const gchar *value)
value_copy[len-1] = '\0';
/* convert to number */
- ret = egg_strtouint (value_copy, &timeval);
- if (!ret) {
+ timeval = g_ascii_strtoull (value_copy, &endptr, 10);
+ if (value_copy == endptr) {
egg_warning ("failed to convert %s", value_copy);
goto out;
}
@@ -332,6 +331,27 @@ out:
}
/**
+ * zif_config_strreplace:
+ **/
+static gchar *
+zif_config_strreplace (const gchar *text, const gchar *find, const gchar *replace)
+{
+ gchar **array;
+ gchar *retval;
+
+ /* common case, not found */
+ if (g_strstr_len (text, -1, find) == NULL) {
+ return g_strdup (text);
+ }
+
+ /* split apart and rejoin with new delimiter */
+ array = g_strsplit (text, find, 0);
+ retval = g_strjoinv (replace, array);
+ g_strfreev (array);
+ return retval;
+}
+
+/**
* zif_config_expand_substitutions:
* @config: the #ZifConfig object
* @text: string to scan, e.g. "http://fedora/$releasever/$basearch/moo.rpm"
@@ -364,8 +384,8 @@ zif_config_expand_substitutions (ZifConfig *config, const gchar *text, GError **
goto out;
/* do the replacements */
- name1 = egg_strreplace (text, "$releasever", releasever);
- name2 = egg_strreplace (name1, "$basearch", basearch);
+ name1 = zif_config_strreplace (text, "$releasever", releasever);
+ name2 = zif_config_strreplace (name1, "$basearch", basearch);
out:
g_free (basearch);
@@ -673,7 +693,7 @@ zif_config_test (EggTest *test)
/************************************************************/
egg_test_title (test, "get cachedir");
value = zif_config_get_string (config, "cachedir", NULL);
- if (egg_strequal (value, "../test/cache"))
+ if (g_strcmp0 (value, "../test/cache") == 0)
egg_test_success (test, NULL);
else
egg_test_failed (test, "invalid value '%s'", value);
@@ -706,7 +726,7 @@ zif_config_test (EggTest *test)
/************************************************************/
egg_test_title (test, "get cachedir");
value = zif_config_get_string (config, "cachedir", NULL);
- if (egg_strequal (value, "/tmp/cache"))
+ if (g_strcmp0 (value, "/tmp/cache") == 0)
egg_test_success (test, NULL);
else
egg_test_failed (test, "invalid value '%s'", value);
@@ -720,7 +740,7 @@ zif_config_test (EggTest *test)
/************************************************************/
egg_test_title (test, "get cachedir");
value = zif_config_get_string (config, "cachedir", NULL);
- if (egg_strequal (value, "../test/cache"))
+ if (g_strcmp0 (value, "../test/cache") == 0)
egg_test_success (test, NULL);
else
egg_test_failed (test, "invalid value '%s'", value);
@@ -729,7 +749,7 @@ zif_config_test (EggTest *test)
/************************************************************/
egg_test_title (test, "do substitutions (none)");
value = zif_config_expand_substitutions (config, "http://fedora/4/6/moo.rpm", NULL);
- if (egg_strequal (value, "http://fedora/4/6/moo.rpm"))
+ if (g_strcmp0 (value, "http://fedora/4/6/moo.rpm") == 0)
egg_test_success (test, NULL);
else
egg_test_failed (test, "invalid value '%s'", value);
@@ -738,7 +758,7 @@ zif_config_test (EggTest *test)
/************************************************************/
egg_test_title (test, "do substitutions (both)");
value = zif_config_expand_substitutions (config, "http://fedora/$releasever/$basearch/moo.rpm", NULL);
- if (egg_strequal (value, "http://fedora/11/i386/moo.rpm"))
+ if (g_strcmp0 (value, "http://fedora/11/i386/moo.rpm") == 0)
egg_test_success (test, NULL);
else
egg_test_failed (test, "invalid value '%s'", value);
@@ -755,7 +775,7 @@ zif_config_test (EggTest *test)
/************************************************************/
egg_test_title (test, "get basearch array value");
- if (egg_strequal (array[0], "i386"))
+ if (g_strcmp0 (array[0], "i386") == 0)
egg_test_success (test, NULL);
else
egg_test_failed (test, "invalid value '%s'", array[0]);
@@ -776,11 +796,6 @@ zif_config_test (EggTest *test)
egg_test_assert (test, (time == 0));
/************************************************************/
- egg_test_title (test, "convert time (mixture)");
- time = zif_config_string_to_time ("10d10s");
- egg_test_assert (test, (time == 0));
-
- /************************************************************/
egg_test_title (test, "convert time (seconds)");
time = zif_config_string_to_time ("10s");
egg_test_assert (test, (time == 10));
diff --git a/backends/yum/libzif/zif-groups.c b/backends/yum/libzif/zif-groups.c
index e674cb9..9974d02 100644
--- a/backends/yum/libzif/zif-groups.c
+++ b/backends/yum/libzif/zif-groups.c
@@ -41,7 +41,6 @@
#include "zif-monitor.h"
#include "egg-debug.h"
-#include "egg-string.h"
#define ZIF_GROUPS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_GROUPS, ZifGroupsPrivate))
@@ -440,10 +439,10 @@ zif_groups_test (EggTest *test)
egg_test_title (test, "get groups");
groups_bit = zif_groups_get_groups (groups, NULL);
text = pk_group_bitfield_to_string (groups_bit);
- if (egg_strequal (text, "admin-tools;desktop-gnome;desktop-kde;desktop-other;"
- "education;fonts;games;graphics;internet;"
- "legacy;localization;multimedia;office;other;programming;"
- "publishing;servers;system;virtualization"))
+ if (g_strcmp0 (text, "admin-tools;desktop-gnome;desktop-kde;desktop-other;"
+ "education;fonts;games;graphics;internet;"
+ "legacy;localization;multimedia;office;other;programming;"
+ "publishing;servers;system;virtualization") == 0)
egg_test_success (test, NULL);
else
egg_test_failed (test, "invalid groups '%s'", text);
@@ -461,7 +460,7 @@ zif_groups_test (EggTest *test)
/************************************************************/
egg_test_title (test, "get group for cat");
group = zif_groups_get_group_for_cat (groups, "language-support;kashubian-support", NULL);
- if (egg_strequal (pk_group_enum_to_text (group), "localization"))
+ if (g_strcmp0 (pk_group_enum_to_text(group), "localization") == 0)
egg_test_success (test, NULL);
else
egg_test_failed (test, "invalid groups '%s'", pk_group_enum_to_text (group));
diff --git a/backends/yum/libzif/zif-lock.c b/backends/yum/libzif/zif-lock.c
index cb80eb9..e5c8f14 100644
--- a/backends/yum/libzif/zif-lock.c
+++ b/backends/yum/libzif/zif-lock.c
@@ -406,7 +406,7 @@ zif_lock_test (EggTest *test)
/************************************************************/
egg_test_title (test, "get pidfile");
pidfile = zif_config_get_string (config, "pidfile", NULL);
- if (egg_strequal (pidfile, "../test/run/zif.lock"))
+ if (g_strcmp0 (pidfile, "../test/run/zif.lock") == 0)
egg_test_success (test, NULL);
else
egg_test_failed (test, "invalid value '%s'", pidfile);
diff --git a/backends/yum/libzif/zif-md-comps.c b/backends/yum/libzif/zif-md-comps.c
index 29803ff..3d0b966 100644
--- a/backends/yum/libzif/zif-md-comps.c
+++ b/backends/yum/libzif/zif-md-comps.c
@@ -38,7 +38,6 @@
#include "zif-md-comps.h"
#include "egg-debug.h"
-#include "egg-string.h"
#define ZIF_MD_COMPS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_MD_COMPS, ZifMdCompsPrivate))
diff --git a/backends/yum/libzif/zif-md-filelists-sql.c b/backends/yum/libzif/zif-md-filelists-sql.c
new file mode 100644
index 0000000..4ee6a55
--- /dev/null
+++ b/backends/yum/libzif/zif-md-filelists-sql.c
@@ -0,0 +1,442 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/**
+ * SECTION:zif-md-filelists-sql
+ * @short_description: File list metadata functionality
+ *
+ * Provide access to the file list metadata.
+ * This object is a subclass of #ZifMd
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <glib.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sqlite3.h>
+#include <gio/gio.h>
+
+#include "zif-md.h"
+#include "zif-md-filelists-sql.h"
+
+#include "egg-debug.h"
+
+#define ZIF_MD_FILELISTS_SQL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_MD_FILELISTS_SQL, ZifMdFilelistsSqlPrivate))
+
+/**
+ * ZifMdFilelistsSqlPrivate:
+ *
+ * Private #ZifMdFilelistsSql data
+ **/
+struct _ZifMdFilelistsSqlPrivate
+{
+ gboolean loaded;
+ sqlite3 *db;
+};
+
+typedef struct {
+ gchar *filename;
+ GPtrArray *array;
+} ZifMdFilelistsSqlData;
+
+G_DEFINE_TYPE (ZifMdFilelistsSql, zif_md_filelists_sql, ZIF_TYPE_MD)
+
+/**
+ * zif_md_filelists_sql_unload:
+ **/
+static gboolean
+zif_md_filelists_sql_unload (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gboolean ret = FALSE;
+ return ret;
+}
+
+/**
+ * zif_md_filelists_sql_load:
+ **/
+static gboolean
+zif_md_filelists_sql_load (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ const gchar *filename;
+ gint rc;
+ ZifMdFilelistsSql *filelists = ZIF_MD_FILELISTS_SQL (md);
+
+ g_return_val_if_fail (ZIF_IS_MD_FILELISTS_SQL (md), FALSE);
+
+ /* already loaded */
+ if (filelists->priv->loaded)
+ goto out;
+
+ /* get filename */
+ filename = zif_md_get_filename_uncompressed (md);
+ if (filename == NULL) {
+ g_set_error_literal (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "failed to get filename for filelists");
+ goto out;
+ }
+
+ /* open database */
+ egg_debug ("filename = %s", filename);
+ rc = sqlite3_open (filename, &filelists->priv->db);
+ if (rc != 0) {
+ egg_warning ("Can't open database: %s\n", sqlite3_errmsg (filelists->priv->db));
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
+ "can't open database: %s", sqlite3_errmsg (filelists->priv->db));
+ goto out;
+ }
+
+ /* we don't need to keep syncing */
+ sqlite3_exec (filelists->priv->db, "PRAGMA synchronous=OFF", NULL, NULL, NULL);
+ filelists->priv->loaded = TRUE;
+out:
+ return filelists->priv->loaded;
+}
+
+/**
+ * zif_store_remote_sqlite_get_id_cb:
+ **/
+static gint
+zif_md_filelists_sql_sqlite_get_id_cb (void *data, gint argc, gchar **argv, gchar **col_name)
+{
+ gchar **pkgid = (gchar **) data;
+ *pkgid = g_strdup (argv[0]);
+ return 0;
+}
+
+/**
+ * zif_md_filelists_sql_sqlite_get_files_cb:
+ **/
+static gint
+zif_md_filelists_sql_sqlite_get_files_cb (void *data, gint argc, gchar **argv, gchar **col_name)
+{
+ gint i;
+ gchar **filenames = NULL;
+ gchar **filenames_r = NULL;
+ gchar **id_r = NULL;
+ ZifMdFilelistsSqlData *fldata = (ZifMdFilelistsSqlData *) data;
+
+ /* get pointers to the arguments */
+ for (i=0;i<argc;i++) {
+ if (g_strcmp0 (col_name[i], "pkgKey") == 0)
+ id_r = &argv[i];
+ else if (g_strcmp0 (col_name[i], "filenames") == 0)
+ filenames_r = &argv[i];
+ }
+
+ /* either is undereferencable */
+ if (filenames_r == NULL || id_r == NULL) {
+ egg_warning ("no file data");
+ goto out;
+ }
+
+ /* split the filenames */
+ filenames = g_strsplit (*filenames_r, "/", -1);
+ for (i=0; filenames[i] != NULL ;i++) {
+ /* do we match */
+ if (g_strcmp0 (fldata->filename, filenames[i]) == 0) {
+ egg_debug ("found %s for %s", filenames[i], *id_r);
+ g_ptr_array_add (fldata->array, GUINT_TO_POINTER (atoi (*id_r)));
+ }
+ }
+out:
+ g_strfreev (filenames);
+ return 0;
+}
+
+/**
+ * zif_md_filelists_sql_search_file:
+ **/
+static GPtrArray *
+zif_md_filelists_sql_search_file (ZifMd *md, gchar **search,
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ GPtrArray *array = NULL;
+ gchar *statement = NULL;
+ gchar *error_msg = NULL;
+ gint rc;
+ gboolean ret;
+ guint i;
+ GError *error_local = NULL;
+ gchar *filename = NULL;
+ gchar *dirname = NULL;
+ ZifMdFilelistsSql *md_filelists_sql = ZIF_MD_FILELISTS_SQL (md);
+ ZifMdFilelistsSqlData *data = NULL;
+
+ g_return_val_if_fail (ZIF_IS_MD_FILELISTS_SQL (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* if not already loaded, load */
+ if (!md_filelists_sql->priv->loaded) {
+ ret = zif_md_load (md, cancellable, completion, &error_local);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED_TO_LOAD,
+ "failed to load store file: %s", error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+ }
+
+ /* split the search term into directory and filename */
+ dirname = g_path_get_dirname (search[0]);
+ filename = g_path_get_basename (search[0]);
+ egg_debug ("dirname=%s, filename=%s", dirname, filename);
+
+ /* create data struct we can pass to the callback */
+ data = g_new0 (ZifMdFilelistsSqlData, 1);
+ data->filename = g_path_get_basename (search[0]);
+ data->array = g_ptr_array_new ();
+
+ /* populate _array with guint pkgKey */
+ statement = g_strdup_printf ("SELECT filenames, pkgKey FROM filelist WHERE dirname = '%s'", dirname);
+ rc = sqlite3_exec (md_filelists_sql->priv->db, statement, zif_md_filelists_sql_sqlite_get_files_cb, data, &error_msg);
+ g_free (statement);
+ if (rc != SQLITE_OK) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
+ "SQL error (failed to get keys): %s\n", error_msg);
+ sqlite3_free (error_msg);
+ goto out;
+ }
+
+ /* convert each pkgKey */
+ array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_free);
+ for (i=0; i<data->array->len; i++) {
+ guint key;
+ gchar *pkgid = NULL;
+
+ /* convert the pkgKey to a pkgId */
+ key = GPOINTER_TO_UINT (g_ptr_array_index (data->array, i));
+ statement = g_strdup_printf ("SELECT pkgId FROM packages WHERE pkgKey = %i LIMIT 1", key);
+ rc = sqlite3_exec (md_filelists_sql->priv->db, statement, zif_md_filelists_sql_sqlite_get_id_cb, &pkgid, &error_msg);
+ g_free (statement);
+ if (rc != SQLITE_OK) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
+ "SQL error (failed to get packages): %s", error_msg);
+ sqlite3_free (error_msg);
+ goto out;
+ }
+
+ /* we failed to get any results */
+ if (pkgid == NULL) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
+ "failed to resolve pkgKey: %i", key);
+ goto out;
+ }
+
+ /* added to tracked array, so no need to free pkgid */
+ g_ptr_array_add (array, pkgid);
+ }
+out:
+ if (data != NULL) {
+ g_free (data->filename);
+ g_ptr_array_unref (data->array);
+ g_free (data);
+ }
+ g_free (dirname);
+ g_free (filename);
+ return array;
+}
+
+/**
+ * zif_md_filelists_sql_finalize:
+ **/
+static void
+zif_md_filelists_sql_finalize (GObject *object)
+{
+ ZifMdFilelistsSql *md;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (ZIF_IS_MD_FILELISTS_SQL (object));
+ md = ZIF_MD_FILELISTS_SQL (object);
+
+ sqlite3_close (md->priv->db);
+
+ G_OBJECT_CLASS (zif_md_filelists_sql_parent_class)->finalize (object);
+}
+
+/**
+ * zif_md_filelists_sql_class_init:
+ **/
+static void
+zif_md_filelists_sql_class_init (ZifMdFilelistsSqlClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ ZifMdClass *md_class = ZIF_MD_CLASS (klass);
+ object_class->finalize = zif_md_filelists_sql_finalize;
+
+ /* map */
+ md_class->load = zif_md_filelists_sql_load;
+ md_class->unload = zif_md_filelists_sql_unload;
+ md_class->search_file = zif_md_filelists_sql_search_file;
+ g_type_class_add_private (klass, sizeof (ZifMdFilelistsSqlPrivate));
+}
+
+/**
+ * zif_md_filelists_sql_init:
+ **/
+static void
+zif_md_filelists_sql_init (ZifMdFilelistsSql *md)
+{
+ md->priv = ZIF_MD_FILELISTS_SQL_GET_PRIVATE (md);
+ md->priv->loaded = FALSE;
+ md->priv->db = NULL;
+}
+
+/**
+ * zif_md_filelists_sql_new:
+ *
+ * Return value: A new #ZifMdFilelistsSql class instance.
+ *
+ * Since: 0.0.1
+ **/
+ZifMdFilelistsSql *
+zif_md_filelists_sql_new (void)
+{
+ ZifMdFilelistsSql *md;
+ md = g_object_new (ZIF_TYPE_MD_FILELISTS_SQL, NULL);
+ return ZIF_MD_FILELISTS_SQL (md);
+}
+
+/***************************************************************************
+ *** MAKE CHECK TESTS ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+void
+zif_md_filelists_sql_test (EggTest *test)
+{
+ ZifMdFilelistsSql *md;
+ gboolean ret;
+ GError *error = NULL;
+ GPtrArray *array;
+ const gchar *pkgid;
+ GCancellable *cancellable;
+ ZifCompletion *completion;
+ const gchar *data[] = { "/usr/bin/gnome-power-manager", NULL };
+
+ if (!egg_test_start (test, "ZifMdFilelistsSql"))
+ return;
+
+ /* use */
+ cancellable = g_cancellable_new ();
+ completion = zif_completion_new ();
+
+ /************************************************************/
+ egg_test_title (test, "get store_remote md");
+ md = zif_md_filelists_sql_new ();
+ egg_test_assert (test, md != NULL);
+
+ /************************************************************/
+ egg_test_title (test, "loaded");
+ egg_test_assert (test, !md->priv->loaded);
+
+ /************************************************************/
+ egg_test_title (test, "set id");
+ ret = zif_md_set_id (ZIF_MD (md), "fedora");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set type");
+ ret = zif_md_set_mdtype (ZIF_MD (md), ZIF_MD_TYPE_FILELISTS_SQL);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set checksum type");
+ ret = zif_md_set_checksum_type (ZIF_MD (md), G_CHECKSUM_SHA256);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set checksum compressed");
+ ret = zif_md_set_checksum (ZIF_MD (md), "e00e88a8b6eee3798544764b6fe31ef8c9d071a824177c7cdc4fe749289198a9");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set checksum uncompressed");
+ ret = zif_md_set_checksum_uncompressed (ZIF_MD (md), "2b4336cb43e75610662bc0b3a362ca4cb7ba874528735a27c0d55148c3901792");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set filename");
+ ret = zif_md_set_filename (ZIF_MD (md), "../test/cache/fedora/e00e88a8b6eee3798544764b6fe31ef8c9d071a824177c7cdc4fe749289198a9-filelists.sqlite.bz2");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "load");
+ ret = zif_md_load (ZIF_MD (md), cancellable, completion, &error);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to load '%s'", error->message);
+
+ /************************************************************/
+ egg_test_title (test, "loaded");
+ egg_test_assert (test, md->priv->loaded);
+
+ /************************************************************/
+ egg_test_title (test, "search for files");
+ array = zif_md_filelists_sql_search_file (md, data, cancellable, completion, &error);
+ if (array != NULL)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to search '%s'", error->message);
+
+ /************************************************************/
+ egg_test_title (test, "correct number");
+ egg_test_assert (test, array->len == 1);
+
+ /************************************************************/
+ egg_test_title (test, "correct value");
+ pkgid = g_ptr_array_index (array, 0);
+ if (pkgid[0] != '\0' && strlen (pkgid) == 64)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to get a correct pkgId '%s' (%i)", pkgid, strlen (pkgid));
+ g_ptr_array_unref (array);
+
+ g_object_unref (md);
+ g_object_unref (cancellable);
+ g_object_unref (completion);
+
+ egg_test_end (test);
+}
+#endif
+
diff --git a/backends/yum/libzif/zif-md-filelists-sql.h b/backends/yum/libzif/zif-md-filelists-sql.h
new file mode 100644
index 0000000..ce406bd
--- /dev/null
+++ b/backends/yum/libzif/zif-md-filelists-sql.h
@@ -0,0 +1,63 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#if !defined (__ZIF_H_INSIDE__) && !defined (ZIF_COMPILATION)
+#error "Only <zif.h> can be included directly."
+#endif
+
+#ifndef __ZIF_MD_FILELISTS_SQL_H
+#define __ZIF_MD_FILELISTS_SQL_H
+
+#include <glib-object.h>
+
+#include "zif-md.h"
+
+G_BEGIN_DECLS
+
+#define ZIF_TYPE_MD_FILELISTS_SQL (zif_md_filelists_sql_get_type ())
+#define ZIF_MD_FILELISTS_SQL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ZIF_TYPE_MD_FILELISTS_SQL, ZifMdFilelistsSql))
+#define ZIF_MD_FILELISTS_SQL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), ZIF_TYPE_MD_FILELISTS_SQL, ZifMdFilelistsSqlClass))
+#define ZIF_IS_MD_FILELISTS_SQL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ZIF_TYPE_MD_FILELISTS_SQL))
+#define ZIF_IS_MD_FILELISTS_SQL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), ZIF_TYPE_MD_FILELISTS_SQL))
+#define ZIF_MD_FILELISTS_SQL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ZIF_TYPE_MD_FILELISTS_SQL, ZifMdFilelistsSqlClass))
+
+typedef struct _ZifMdFilelistsSql ZifMdFilelistsSql;
+typedef struct _ZifMdFilelistsSqlPrivate ZifMdFilelistsSqlPrivate;
+typedef struct _ZifMdFilelistsSqlClass ZifMdFilelistsSqlClass;
+
+struct _ZifMdFilelistsSql
+{
+ ZifMd parent;
+ ZifMdFilelistsSqlPrivate *priv;
+};
+
+struct _ZifMdFilelistsSqlClass
+{
+ ZifMdClass parent_class;
+};
+
+GType zif_md_filelists_sql_get_type (void);
+ZifMdFilelistsSql *zif_md_filelists_sql_new (void);
+
+G_END_DECLS
+
+#endif /* __ZIF_MD_FILELISTS_SQL_H */
+
diff --git a/backends/yum/libzif/zif-md-filelists-xml.c b/backends/yum/libzif/zif-md-filelists-xml.c
new file mode 100644
index 0000000..07cee6c
--- /dev/null
+++ b/backends/yum/libzif/zif-md-filelists-xml.c
@@ -0,0 +1,585 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2010 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/**
+ * SECTION:zif-md-filelists-xml
+ * @short_description: FilelistsXml metadata functionality
+ *
+ * Provide access to the filelists_xml repo metadata.
+ * This object is a subclass of #ZifMd
+ */
+
+typedef enum {
+ ZIF_MD_FILELISTS_XML_SECTION_LIST,
+ ZIF_MD_FILELISTS_XML_SECTION_UNKNOWN
+} ZifMdFilelistsXmlSection;
+
+typedef enum {
+ ZIF_MD_FILELISTS_XML_SECTION_LIST_PACKAGE,
+ ZIF_MD_FILELISTS_XML_SECTION_LIST_UNKNOWN
+} ZifMdFilelistsXmlSectionList;
+
+typedef enum {
+ ZIF_MD_FILELISTS_XML_SECTION_LIST_PACKAGE_FILE,
+ ZIF_MD_FILELISTS_XML_SECTION_LIST_PACKAGE_UNKNOWN
+} ZifMdFilelistsXmlSectionListPackage;
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <glib.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sqlite3.h>
+#include <gio/gio.h>
+
+#include "zif-md.h"
+#include "zif-md-filelists-xml.h"
+
+#include "egg-debug.h"
+
+#define ZIF_MD_FILELISTS_XML_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_MD_FILELISTS_XML, ZifMdFilelistsXmlPrivate))
+
+/**
+ * ZifMdFilelistsXmlPrivate:
+ *
+ * Private #ZifMdFilelistsXml data
+ **/
+struct _ZifMdFilelistsXmlPrivate
+{
+ gboolean loaded;
+ ZifMdFilelistsXmlSection section;
+ ZifMdFilelistsXmlSectionList section_list;
+ ZifMdFilelistsXmlSectionListPackage section_list_package;
+ ZifPackage *package_temp;
+ GPtrArray *array;
+ GPtrArray *array_temp;
+};
+
+G_DEFINE_TYPE (ZifMdFilelistsXml, zif_md_filelists_xml, ZIF_TYPE_MD)
+
+/**
+ * zif_md_filelists_xml_unload:
+ **/
+static gboolean
+zif_md_filelists_xml_unload (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gboolean ret = FALSE;
+ return ret;
+}
+
+/**
+ * zif_md_filelists_xml_parser_start_element:
+ **/
+static void
+zif_md_filelists_xml_parser_start_element (GMarkupParseContext *context, const gchar *element_name,
+ const gchar **attribute_names, const gchar **attribute_values,
+ gpointer user_data, GError **error)
+{
+ guint i;
+ ZifMdFilelistsXml *filelists_xml = user_data;
+
+ g_return_if_fail (ZIF_IS_MD_FILELISTS_XML (filelists_xml));
+
+ /* group element */
+ if (filelists_xml->priv->section == ZIF_MD_FILELISTS_XML_SECTION_UNKNOWN) {
+
+ /* start of update */
+ if (g_strcmp0 (element_name, "filelists") == 0) {
+ filelists_xml->priv->section = ZIF_MD_FILELISTS_XML_SECTION_LIST;
+ goto out;
+ }
+
+ egg_warning ("unhandled element: %s", element_name);
+ goto out;
+ }
+
+ /* update element */
+ if (filelists_xml->priv->section == ZIF_MD_FILELISTS_XML_SECTION_LIST) {
+
+ if (filelists_xml->priv->section_list == ZIF_MD_FILELISTS_XML_SECTION_LIST_UNKNOWN) {
+
+ if (g_strcmp0 (element_name, "package") == 0) {
+ filelists_xml->priv->section_list = ZIF_MD_FILELISTS_XML_SECTION_LIST_PACKAGE;
+ filelists_xml->priv->package_temp = zif_package_new ();
+ filelists_xml->priv->array_temp = g_ptr_array_new_with_free_func (g_free);
+ for (i=0; attribute_names[i] != NULL; i++) {
+ if (g_strcmp0 (attribute_names[i], "pkgid") == 0) {
+ g_object_set_data_full (G_OBJECT (filelists_xml->priv->package_temp),
+ "pkgid", g_strdup (attribute_values[i]), g_free);
+ }
+ }
+ goto out;
+ }
+
+ egg_warning ("unhandled update list tag: %s", element_name);
+ goto out;
+
+ }
+ if (filelists_xml->priv->section_list == ZIF_MD_FILELISTS_XML_SECTION_LIST_PACKAGE) {
+
+ if (g_strcmp0 (element_name, "version") == 0) {
+ filelists_xml->priv->section_list_package = ZIF_MD_FILELISTS_XML_SECTION_LIST_UNKNOWN;
+ goto out;
+ }
+
+ if (g_strcmp0 (element_name, "file") == 0) {
+ filelists_xml->priv->section_list_package = ZIF_MD_FILELISTS_XML_SECTION_LIST_PACKAGE_FILE;
+ goto out;
+ }
+ egg_warning ("unhandled update package tag: %s", element_name);
+ goto out;
+ }
+ egg_warning ("unhandled package tag: %s", element_name);
+ }
+
+ egg_warning ("unhandled base tag: %s", element_name);
+
+out:
+ return;
+}
+
+/**
+ * zif_md_filelists_xml_parser_end_element:
+ **/
+static void
+zif_md_filelists_xml_parser_end_element (GMarkupParseContext *context, const gchar *element_name,
+ gpointer user_data, GError **error)
+{
+ ZifMdFilelistsXml *filelists_xml = user_data;
+
+ /* no element */
+ if (filelists_xml->priv->section == ZIF_MD_FILELISTS_XML_SECTION_UNKNOWN) {
+ egg_warning ("unhandled base end tag: %s", element_name);
+ goto out;
+ }
+
+ /* update element */
+ if (filelists_xml->priv->section == ZIF_MD_FILELISTS_XML_SECTION_LIST) {
+
+ /* update element */
+ if (filelists_xml->priv->section_list == ZIF_MD_FILELISTS_XML_SECTION_LIST_UNKNOWN) {
+
+ /* end of list */
+ if (g_strcmp0 (element_name, "filelists") == 0) {
+ filelists_xml->priv->section = ZIF_MD_FILELISTS_XML_SECTION_UNKNOWN;
+ goto out;
+ }
+ egg_warning ("unhandled outside tag: %s", element_name);
+ goto out;
+ }
+
+ /* update element */
+ if (filelists_xml->priv->section_list == ZIF_MD_FILELISTS_XML_SECTION_LIST_PACKAGE) {
+
+ if (filelists_xml->priv->section_list_package == ZIF_MD_FILELISTS_XML_SECTION_LIST_PACKAGE_UNKNOWN) {
+
+ if (g_strcmp0 (element_name, "version") == 0)
+ goto out;
+
+ /* end of list */
+ if (g_strcmp0 (element_name, "package") == 0) {
+ zif_package_set_files (filelists_xml->priv->package_temp, filelists_xml->priv->array_temp);
+ g_ptr_array_add (filelists_xml->priv->array, filelists_xml->priv->package_temp);
+ filelists_xml->priv->package_temp = NULL;
+ filelists_xml->priv->array_temp = NULL;
+ filelists_xml->priv->section_list = ZIF_MD_FILELISTS_XML_SECTION_LIST_UNKNOWN;
+ goto out;
+ }
+ egg_warning ("unhandled package tag: %s", element_name);
+ goto out;
+ }
+
+ if (filelists_xml->priv->section_list_package == ZIF_MD_FILELISTS_XML_SECTION_LIST_PACKAGE_FILE) {
+ if (g_strcmp0 (element_name, "file") == 0) {
+ filelists_xml->priv->section_list_package = ZIF_MD_FILELISTS_XML_SECTION_LIST_PACKAGE_UNKNOWN;
+ goto out;
+ }
+ egg_warning ("unhandled end of file tag: %s", element_name);
+ goto out;
+ }
+ egg_warning ("unhandled end of package tag: %s", element_name);
+ goto out;
+ }
+
+ egg_warning ("unhandled update end tag: %s", element_name);
+ goto out;
+ }
+
+ egg_warning ("unhandled end tag: %s", element_name);
+out:
+ return;
+}
+
+/**
+ * zif_md_filelists_xml_parser_text:
+ **/
+static void
+zif_md_filelists_xml_parser_text (GMarkupParseContext *context, const gchar *text, gsize text_len,
+ gpointer user_data, GError **error)
+
+{
+ ZifMdFilelistsXml *filelists_xml = user_data;
+
+ /* skip whitespace */
+ if (text_len < 1 || text[0] == ' ' || text[0] == '\t' || text[0] == '\n')
+ goto out;
+
+ /* group section */
+ if (filelists_xml->priv->section == ZIF_MD_FILELISTS_XML_SECTION_LIST) {
+ if (filelists_xml->priv->section_list == ZIF_MD_FILELISTS_XML_SECTION_LIST_UNKNOWN) {
+ egg_warning ("not saving: %s", text);
+ goto out;
+ }
+ if (filelists_xml->priv->section_list == ZIF_MD_FILELISTS_XML_SECTION_LIST_PACKAGE) {
+ if (filelists_xml->priv->section_list == ZIF_MD_FILELISTS_XML_SECTION_LIST_PACKAGE_FILE) {
+ g_ptr_array_add (filelists_xml->priv->array_temp, g_strdup (text));
+ goto out;
+ };
+ egg_warning ("not saving: %s", text);
+ goto out;
+ }
+ egg_warning ("not saving: %s", text);
+ goto out;
+ }
+out:
+ return;
+}
+
+/**
+ * zif_md_filelists_xml_load:
+ **/
+static gboolean
+zif_md_filelists_xml_load (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ const gchar *filename;
+ gboolean ret;
+ gchar *contents = NULL;
+ gsize size;
+ ZifMdFilelistsXml *filelists_xml = ZIF_MD_FILELISTS_XML (md);
+ GMarkupParseContext *context = NULL;
+ const GMarkupParser gpk_md_filelists_xml_markup_parser = {
+ zif_md_filelists_xml_parser_start_element,
+ zif_md_filelists_xml_parser_end_element,
+ zif_md_filelists_xml_parser_text,
+ NULL, /* passthrough */
+ NULL /* error */
+ };
+
+ g_return_val_if_fail (ZIF_IS_MD_FILELISTS_XML (md), FALSE);
+
+ /* already loaded */
+ if (filelists_xml->priv->loaded)
+ goto out;
+
+ /* get filename */
+ filename = zif_md_get_filename_uncompressed (md);
+ if (filename == NULL) {
+ g_set_error_literal (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "failed to get filename for filelists_xml");
+ goto out;
+ }
+
+ /* open database */
+ egg_debug ("filename = %s", filename);
+ ret = g_file_get_contents (filename, &contents, &size, error);
+ if (!ret)
+ goto out;
+
+ /* create parser */
+ context = g_markup_parse_context_new (&gpk_md_filelists_xml_markup_parser, G_MARKUP_PREFIX_ERROR_POSITION, filelists_xml, NULL);
+
+ /* parse data */
+ ret = g_markup_parse_context_parse (context, contents, (gssize) size, error);
+ if (!ret)
+ goto out;
+
+ /* we don't need to keep syncing */
+ filelists_xml->priv->loaded = TRUE;
+out:
+ g_free (contents);
+ return filelists_xml->priv->loaded;
+}
+
+/**
+ * zif_md_filelists_xml_search_file:
+ **/
+static GPtrArray *
+zif_md_filelists_xml_search_file (ZifMd *md, gchar **search,
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ GPtrArray *array = NULL;
+ GPtrArray *packages;
+ ZifPackage *package;
+ GPtrArray *files = NULL;
+ const gchar *filename;
+ guint i, j, k;
+ gboolean ret;
+ const gchar *pkgid;
+ GError *error_local = NULL;
+ ZifCompletion *completion_local;
+ ZifMdFilelistsXml *md_filelists = ZIF_MD_FILELISTS_XML (md);
+
+ g_return_val_if_fail (ZIF_IS_MD_FILELISTS_XML (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* setup completion */
+ if (md_filelists->priv->loaded)
+ zif_completion_set_number_steps (completion, 1);
+ else
+ zif_completion_set_number_steps (completion, 2);
+
+ /* if not already loaded, load */
+ if (!md_filelists->priv->loaded) {
+ completion_local = zif_completion_get_child (completion);
+ ret = zif_md_load (ZIF_MD (md), cancellable, completion_local, &error_local);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED_TO_LOAD,
+ "failed to load md_filelists_xml file: %s", error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+
+ /* this section done */
+ zif_completion_done (completion);
+ }
+
+ /* search array */
+ array = g_ptr_array_new_with_free_func (g_free);
+ packages = md_filelists->priv->array;
+ for (i=0; i<packages->len; i++) {
+ package = g_ptr_array_index (packages, i);
+ pkgid = g_object_get_data (G_OBJECT (package), "pkgid");
+ files = zif_package_get_files (package, NULL);
+ for (k=0; k<files->len; k++) {
+ filename = g_ptr_array_index (files, k);
+ for (j=0; search[j] != NULL; j++) {
+ if (g_strcmp0 (filename, search[j]) == 0) {
+ g_ptr_array_add (array, g_strdup (pkgid));
+ break;
+ }
+ }
+ }
+ }
+
+ /* this section done */
+ zif_completion_done (completion);
+out:
+ if (files != NULL)
+ g_ptr_array_unref (files);
+ return array;
+}
+
+/**
+ * zif_md_filelists_xml_finalize:
+ **/
+static void
+zif_md_filelists_xml_finalize (GObject *object)
+{
+ ZifMdFilelistsXml *md;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (ZIF_IS_MD_FILELISTS_XML (object));
+ md = ZIF_MD_FILELISTS_XML (object);
+
+ g_ptr_array_unref (md->priv->array);
+
+ G_OBJECT_CLASS (zif_md_filelists_xml_parent_class)->finalize (object);
+}
+
+/**
+ * zif_md_filelists_xml_class_init:
+ **/
+static void
+zif_md_filelists_xml_class_init (ZifMdFilelistsXmlClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ ZifMdClass *md_class = ZIF_MD_CLASS (klass);
+ object_class->finalize = zif_md_filelists_xml_finalize;
+
+ /* map */
+ md_class->load = zif_md_filelists_xml_load;
+ md_class->unload = zif_md_filelists_xml_unload;
+ md_class->search_file = zif_md_filelists_xml_search_file;
+
+ g_type_class_add_private (klass, sizeof (ZifMdFilelistsXmlPrivate));
+}
+
+/**
+ * zif_md_filelists_xml_init:
+ **/
+static void
+zif_md_filelists_xml_init (ZifMdFilelistsXml *md)
+{
+ md->priv = ZIF_MD_FILELISTS_XML_GET_PRIVATE (md);
+ md->priv->array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+ md->priv->loaded = FALSE;
+ md->priv->section = ZIF_MD_FILELISTS_XML_SECTION_UNKNOWN;
+ md->priv->section_list = ZIF_MD_FILELISTS_XML_SECTION_LIST_UNKNOWN;
+ md->priv->section_list_package = ZIF_MD_FILELISTS_XML_SECTION_LIST_PACKAGE_UNKNOWN;
+ md->priv->package_temp = NULL;
+ md->priv->array_temp = NULL;
+}
+
+/**
+ * zif_md_filelists_xml_new:
+ *
+ * Return value: A new #ZifMdFilelistsXml class instance.
+ *
+ * Since: 0.0.1
+ **/
+ZifMdFilelistsXml *
+zif_md_filelists_xml_new (void)
+{
+ ZifMdFilelistsXml *md;
+ md = g_object_new (ZIF_TYPE_MD_FILELISTS_XML, NULL);
+ return ZIF_MD_FILELISTS_XML (md);
+}
+
+/***************************************************************************
+ *** MAKE CHECK TESTS ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+void
+zif_md_filelists_xml_test (EggTest *test)
+{
+ ZifMdFilelistsXml *md;
+ gboolean ret;
+ GError *error = NULL;
+ GPtrArray *array;
+ ZifPackage *package;
+ ZifString *summary;
+ GCancellable *cancellable;
+ ZifCompletion *completion;
+ gchar *pkgid;
+ gchar *data[] = { "/usr/lib/debug/usr/bin/gpk-prefs.debug", NULL };
+
+ if (!egg_test_start (test, "ZifMdFilelistsXml"))
+ return;
+
+ /* use */
+ cancellable = g_cancellable_new ();
+ completion = zif_completion_new ();
+
+ /************************************************************/
+ egg_test_title (test, "get md_filelists_xml md");
+ md = zif_md_filelists_xml_new ();
+ egg_test_assert (test, md != NULL);
+
+ /************************************************************/
+ egg_test_title (test, "loaded");
+ egg_test_assert (test, !md->priv->loaded);
+
+ /************************************************************/
+ egg_test_title (test, "set id");
+ ret = zif_md_set_id (ZIF_MD (md), "fedora");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set type");
+ ret = zif_md_set_mdtype (ZIF_MD (md), ZIF_MD_TYPE_FILELISTS_XML);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set checksum type");
+ ret = zif_md_set_checksum_type (ZIF_MD (md), G_CHECKSUM_SHA256);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set checksum compressed");
+ ret = zif_md_set_checksum (ZIF_MD (md), "cadb324b10d395058ed22c9d984038927a3ea4ff9e0e798116be44b0233eaa49");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set checksum uncompressed");
+ ret = zif_md_set_checksum_uncompressed (ZIF_MD (md), "8018e177379ada1d380b4ebf800e7caa95ff8cf90fdd6899528266719bbfdeab");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set filename");
+ ret = zif_md_set_filename (ZIF_MD (md), "../test/cache/fedora/filelists.xml.gz");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "load");
+ ret = zif_md_load (ZIF_MD (md), cancellable, completion, &error);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to load '%s'", error->message);
+
+ /************************************************************/
+ egg_test_title (test, "loaded");
+ egg_test_assert (test, md->priv->loaded);
+
+ /************************************************************/
+ egg_test_title (test, "search for files");
+ zif_completion_reset (completion);
+ array = zif_md_filelists_xml_search_file (ZIF_MD (md), (gchar**)data, cancellable, completion, &error);
+ if (array != NULL)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to search '%s'", error->message);
+
+ /************************************************************/
+ egg_test_title (test, "correct number");
+ if (array->len != 1)
+ egg_test_failed (test, "got %i", array->len);
+ egg_test_success (test, NULL);
+
+ /************************************************************/
+ egg_test_title (test, "correct value");
+ pkgid = g_ptr_array_index (array, 0);
+ if (pkgid[0] != '\0' && strlen (pkgid) == 64)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to get a correct pkgId '%s' (%i)", pkgid, strlen (pkgid));
+ g_ptr_array_unref (array);
+
+ g_object_unref (cancellable);
+ g_object_unref (completion);
+ g_object_unref (md);
+
+ egg_test_end (test);
+}
+#endif
+
diff --git a/backends/yum/libzif/zif-md-filelists-xml.h b/backends/yum/libzif/zif-md-filelists-xml.h
new file mode 100644
index 0000000..02f7622
--- /dev/null
+++ b/backends/yum/libzif/zif-md-filelists-xml.h
@@ -0,0 +1,63 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2010 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#if !defined (__ZIF_H_INSIDE__) && !defined (ZIF_COMPILATION)
+#error "Only <zif.h> can be included directly."
+#endif
+
+#ifndef __ZIF_MD_FILELISTS_XML_H
+#define __ZIF_MD_FILELISTS_XML_H
+
+#include <glib-object.h>
+
+#include "zif-md.h"
+
+G_BEGIN_DECLS
+
+#define ZIF_TYPE_MD_FILELISTS_XML (zif_md_filelists_xml_get_type ())
+#define ZIF_MD_FILELISTS_XML(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ZIF_TYPE_MD_FILELISTS_XML, ZifMdFilelistsXml))
+#define ZIF_MD_FILELISTS_XML_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), ZIF_TYPE_MD_FILELISTS_XML, ZifMdFilelistsXmlClass))
+#define ZIF_IS_MD_FILELISTS_XML(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ZIF_TYPE_MD_FILELISTS_XML))
+#define ZIF_IS_MD_FILELISTS_XML_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), ZIF_TYPE_MD_FILELISTS_XML))
+#define ZIF_MD_FILELISTS_XML_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ZIF_TYPE_MD_FILELISTS_XML, ZifMdFilelistsXmlClass))
+
+typedef struct _ZifMdFilelistsXml ZifMdFilelistsXml;
+typedef struct _ZifMdFilelistsXmlPrivate ZifMdFilelistsXmlPrivate;
+typedef struct _ZifMdFilelistsXmlClass ZifMdFilelistsXmlClass;
+
+struct _ZifMdFilelistsXml
+{
+ ZifMd parent;
+ ZifMdFilelistsXmlPrivate *priv;
+};
+
+struct _ZifMdFilelistsXmlClass
+{
+ ZifMdClass parent_class;
+};
+
+GType zif_md_filelists_xml_get_type (void);
+ZifMdFilelistsXml *zif_md_filelists_xml_new (void);
+
+G_END_DECLS
+
+#endif /* __ZIF_MD_FILELISTS_XML_H */
+
diff --git a/backends/yum/libzif/zif-md-filelists.c b/backends/yum/libzif/zif-md-filelists.c
deleted file mode 100644
index 46140df..0000000
--- a/backends/yum/libzif/zif-md-filelists.c
+++ /dev/null
@@ -1,450 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
- *
- * Licensed under the GNU General Public License Version 2
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-/**
- * SECTION:zif-md-filelists
- * @short_description: File list metadata functionality
- *
- * Provide access to the file list metadata.
- * This object is a subclass of #ZifMd
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <glib.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sqlite3.h>
-#include <gio/gio.h>
-
-#include "zif-md.h"
-#include "zif-md-filelists.h"
-
-#include "egg-debug.h"
-#include "egg-string.h"
-
-#define ZIF_MD_FILELISTS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_MD_FILELISTS, ZifMdFilelistsPrivate))
-
-/**
- * ZifMdFilelistsPrivate:
- *
- * Private #ZifMdFilelists data
- **/
-struct _ZifMdFilelistsPrivate
-{
- gboolean loaded;
- sqlite3 *db;
-};
-
-typedef struct {
- gchar *filename;
- GPtrArray *array;
-} ZifMdFilelistsData;
-
-G_DEFINE_TYPE (ZifMdFilelists, zif_md_filelists, ZIF_TYPE_MD)
-
-/**
- * zif_md_filelists_unload:
- **/
-static gboolean
-zif_md_filelists_unload (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- gboolean ret = FALSE;
- return ret;
-}
-
-/**
- * zif_md_filelists_load:
- **/
-static gboolean
-zif_md_filelists_load (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- const gchar *filename;
- gint rc;
- ZifMdFilelists *filelists = ZIF_MD_FILELISTS (md);
-
- g_return_val_if_fail (ZIF_IS_MD_FILELISTS (md), FALSE);
-
- /* already loaded */
- if (filelists->priv->loaded)
- goto out;
-
- /* get filename */
- filename = zif_md_get_filename_uncompressed (md);
- if (filename == NULL) {
- g_set_error_literal (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
- "failed to get filename for filelists");
- goto out;
- }
-
- /* open database */
- egg_debug ("filename = %s", filename);
- rc = sqlite3_open (filename, &filelists->priv->db);
- if (rc != 0) {
- egg_warning ("Can't open database: %s\n", sqlite3_errmsg (filelists->priv->db));
- g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
- "can't open database: %s", sqlite3_errmsg (filelists->priv->db));
- goto out;
- }
-
- /* we don't need to keep syncing */
- sqlite3_exec (filelists->priv->db, "PRAGMA synchronous=OFF", NULL, NULL, NULL);
- filelists->priv->loaded = TRUE;
-out:
- return filelists->priv->loaded;
-}
-
-/**
- * zif_store_remote_sqlite_get_id_cb:
- **/
-static gint
-zif_md_filelists_sqlite_get_id_cb (void *data, gint argc, gchar **argv, gchar **col_name)
-{
- gchar **pkgid = (gchar **) data;
- *pkgid = g_strdup (argv[0]);
- return 0;
-}
-
-/**
- * zif_md_filelists_sqlite_get_files_cb:
- **/
-static gint
-zif_md_filelists_sqlite_get_files_cb (void *data, gint argc, gchar **argv, gchar **col_name)
-{
- gint i;
- gchar **filenames = NULL;
- gchar **filenames_r = NULL;
- gchar **id_r = NULL;
- ZifMdFilelistsData *fldata = (ZifMdFilelistsData *) data;
-
- /* get pointers to the arguments */
- for (i=0;i<argc;i++) {
- if (g_strcmp0 (col_name[i], "pkgKey") == 0)
- id_r = &argv[i];
- else if (g_strcmp0 (col_name[i], "filenames") == 0)
- filenames_r = &argv[i];
- }
-
- /* either is undereferencable */
- if (filenames_r == NULL || id_r == NULL) {
- egg_warning ("no file data");
- goto out;
- }
-
- /* split the filenames */
- filenames = g_strsplit (*filenames_r, "/", -1);
- for (i=0; filenames[i] != NULL ;i++) {
- /* do we match */
- if (g_strcmp0 (fldata->filename, filenames[i]) == 0) {
- egg_debug ("found %s for %s", filenames[i], *id_r);
- g_ptr_array_add (fldata->array, GUINT_TO_POINTER (atoi (*id_r)));
- }
- }
-out:
- g_strfreev (filenames);
- return 0;
-}
-
-/**
- * zif_md_filelists_search_file:
- * @md: the #ZifMdFilelists object
- * @search: the full path that should be searched for
- * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
- * @completion: a #ZifCompletion to use for progress reporting
- * @error: a #GError which is used on failure, or %NULL
- *
- * Gets a list of all packages that contain the file.
- * Results are pkgId's descriptors, i.e. 64 bit hashes as test.
- *
- * Return value: a string list of pkgId's
- **/
-GPtrArray *
-zif_md_filelists_search_file (ZifMdFilelists *md, const gchar *search,
- GCancellable *cancellable, ZifCompletion *completion, GError **error)
-{
- GPtrArray *array = NULL;
- gchar *statement = NULL;
- gchar *error_msg = NULL;
- gint rc;
- gboolean ret;
- guint i;
- GError *error_local = NULL;
- gchar *filename = NULL;
- gchar *dirname = NULL;
- ZifMdFilelistsData *data = NULL;
-
- g_return_val_if_fail (ZIF_IS_MD_FILELISTS (md), NULL);
- g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-
- /* if not already loaded, load */
- if (!md->priv->loaded) {
- ret = zif_md_load (ZIF_MD (md), cancellable, completion, &error_local);
- if (!ret) {
- g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED_TO_LOAD,
- "failed to load store file: %s", error_local->message);
- g_error_free (error_local);
- goto out;
- }
- }
-
- /* split the search term into directory and filename */
- dirname = g_path_get_dirname (search);
- filename = g_path_get_basename (search);
- egg_debug ("dirname=%s, filename=%s", dirname, filename);
-
- /* create data struct we can pass to the callback */
- data = g_new0 (ZifMdFilelistsData, 1);
- data->filename = g_path_get_basename (search);
- data->array = g_ptr_array_new ();
-
- /* populate _array with guint pkgKey */
- statement = g_strdup_printf ("SELECT filenames, pkgKey FROM filelist WHERE dirname = '%s'", dirname);
- rc = sqlite3_exec (md->priv->db, statement, zif_md_filelists_sqlite_get_files_cb, data, &error_msg);
- g_free (statement);
- if (rc != SQLITE_OK) {
- g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
- "SQL error (failed to get keys): %s\n", error_msg);
- sqlite3_free (error_msg);
- goto out;
- }
-
- /* convert each pkgKey */
- array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_free);
- for (i=0; i<data->array->len; i++) {
- guint key;
- gchar *pkgid = NULL;
-
- /* convert the pkgKey to a pkgId */
- key = GPOINTER_TO_UINT (g_ptr_array_index (data->array, i));
- statement = g_strdup_printf ("SELECT pkgId FROM packages WHERE pkgKey = %i LIMIT 1", key);
- rc = sqlite3_exec (md->priv->db, statement, zif_md_filelists_sqlite_get_id_cb, &pkgid, &error_msg);
- g_free (statement);
- if (rc != SQLITE_OK) {
- g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
- "SQL error (failed to get packages): %s", error_msg);
- sqlite3_free (error_msg);
- goto out;
- }
-
- /* we failed to get any results */
- if (pkgid == NULL) {
- g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
- "failed to resolve pkgKey: %i", key);
- goto out;
- }
-
- /* added to tracked array, so no need to free pkgid */
- g_ptr_array_add (array, pkgid);
- }
-out:
- if (data != NULL) {
- g_free (data->filename);
- g_ptr_array_unref (data->array);
- g_free (data);
- }
- g_free (dirname);
- g_free (filename);
- return array;
-}
-
-/**
- * zif_md_filelists_finalize:
- **/
-static void
-zif_md_filelists_finalize (GObject *object)
-{
- ZifMdFilelists *md;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (ZIF_IS_MD_FILELISTS (object));
- md = ZIF_MD_FILELISTS (object);
-
- sqlite3_close (md->priv->db);
-
- G_OBJECT_CLASS (zif_md_filelists_parent_class)->finalize (object);
-}
-
-/**
- * zif_md_filelists_class_init:
- **/
-static void
-zif_md_filelists_class_init (ZifMdFilelistsClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- ZifMdClass *md_class = ZIF_MD_CLASS (klass);
- object_class->finalize = zif_md_filelists_finalize;
-
- /* map */
- md_class->load = zif_md_filelists_load;
- md_class->unload = zif_md_filelists_unload;
- g_type_class_add_private (klass, sizeof (ZifMdFilelistsPrivate));
-}
-
-/**
- * zif_md_filelists_init:
- **/
-static void
-zif_md_filelists_init (ZifMdFilelists *md)
-{
- md->priv = ZIF_MD_FILELISTS_GET_PRIVATE (md);
- md->priv->loaded = FALSE;
- md->priv->db = NULL;
-}
-
-/**
- * zif_md_filelists_new:
- *
- * Return value: A new #ZifMdFilelists class instance.
- *
- * Since: 0.0.1
- **/
-ZifMdFilelists *
-zif_md_filelists_new (void)
-{
- ZifMdFilelists *md;
- md = g_object_new (ZIF_TYPE_MD_FILELISTS, NULL);
- return ZIF_MD_FILELISTS (md);
-}
-
-/***************************************************************************
- *** MAKE CHECK TESTS ***
- ***************************************************************************/
-#ifdef EGG_TEST
-#include "egg-test.h"
-
-void
-zif_md_filelists_test (EggTest *test)
-{
- ZifMdFilelists *md;
- gboolean ret;
- GError *error = NULL;
- GPtrArray *array;
- const gchar *pkgid;
- GCancellable *cancellable;
- ZifCompletion *completion;
-
- if (!egg_test_start (test, "ZifMdFilelists"))
- return;
-
- /* use */
- cancellable = g_cancellable_new ();
- completion = zif_completion_new ();
-
- /************************************************************/
- egg_test_title (test, "get store_remote md");
- md = zif_md_filelists_new ();
- egg_test_assert (test, md != NULL);
-
- /************************************************************/
- egg_test_title (test, "loaded");
- egg_test_assert (test, !md->priv->loaded);
-
- /************************************************************/
- egg_test_title (test, "set id");
- ret = zif_md_set_id (ZIF_MD (md), "fedora");
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "set type");
- ret = zif_md_set_mdtype (ZIF_MD (md), ZIF_MD_TYPE_FILELISTS_SQL);
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "set checksum type");
- ret = zif_md_set_checksum_type (ZIF_MD (md), G_CHECKSUM_SHA256);
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "set checksum compressed");
- ret = zif_md_set_checksum (ZIF_MD (md), "e00e88a8b6eee3798544764b6fe31ef8c9d071a824177c7cdc4fe749289198a9");
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "set checksum uncompressed");
- ret = zif_md_set_checksum_uncompressed (ZIF_MD (md), "2b4336cb43e75610662bc0b3a362ca4cb7ba874528735a27c0d55148c3901792");
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "set filename");
- ret = zif_md_set_filename (ZIF_MD (md), "../test/cache/fedora/e00e88a8b6eee3798544764b6fe31ef8c9d071a824177c7cdc4fe749289198a9-filelists.sqlite.bz2");
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to set");
-
- /************************************************************/
- egg_test_title (test, "load");
- ret = zif_md_load (ZIF_MD (md), cancellable, completion, &error);
- if (ret)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to load '%s'", error->message);
-
- /************************************************************/
- egg_test_title (test, "loaded");
- egg_test_assert (test, md->priv->loaded);
-
- /************************************************************/
- egg_test_title (test, "search for files");
- array = zif_md_filelists_search_file (md, "/usr/bin/gnome-power-manager", cancellable, completion, &error);
- if (array != NULL)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to search '%s'", error->message);
-
- /************************************************************/
- egg_test_title (test, "correct number");
- egg_test_assert (test, array->len == 1);
-
- /************************************************************/
- egg_test_title (test, "correct value");
- pkgid = g_ptr_array_index (array, 0);
- if (pkgid[0] != '\0' && strlen (pkgid) == 64)
- egg_test_success (test, NULL);
- else
- egg_test_failed (test, "failed to get a correct pkgId '%s' (%i)", pkgid, strlen (pkgid));
- g_ptr_array_unref (array);
-
- g_object_unref (md);
- g_object_unref (cancellable);
- g_object_unref (completion);
-
- egg_test_end (test);
-}
-#endif
-
diff --git a/backends/yum/libzif/zif-md-filelists.h b/backends/yum/libzif/zif-md-filelists.h
deleted file mode 100644
index d270479..0000000
--- a/backends/yum/libzif/zif-md-filelists.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2009 Richard Hughes <richard at hughsie.com>
- *
- * Licensed under the GNU General Public License Version 2
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#if !defined (__ZIF_H_INSIDE__) && !defined (ZIF_COMPILATION)
-#error "Only <zif.h> can be included directly."
-#endif
-
-#ifndef __ZIF_MD_FILELISTS_H
-#define __ZIF_MD_FILELISTS_H
-
-#include <glib-object.h>
-
-#include "zif-md.h"
-
-G_BEGIN_DECLS
-
-#define ZIF_TYPE_MD_FILELISTS (zif_md_filelists_get_type ())
-#define ZIF_MD_FILELISTS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ZIF_TYPE_MD_FILELISTS, ZifMdFilelists))
-#define ZIF_MD_FILELISTS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), ZIF_TYPE_MD_FILELISTS, ZifMdFilelistsClass))
-#define ZIF_IS_MD_FILELISTS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ZIF_TYPE_MD_FILELISTS))
-#define ZIF_IS_MD_FILELISTS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), ZIF_TYPE_MD_FILELISTS))
-#define ZIF_MD_FILELISTS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ZIF_TYPE_MD_FILELISTS, ZifMdFilelistsClass))
-
-typedef struct _ZifMdFilelists ZifMdFilelists;
-typedef struct _ZifMdFilelistsPrivate ZifMdFilelistsPrivate;
-typedef struct _ZifMdFilelistsClass ZifMdFilelistsClass;
-
-struct _ZifMdFilelists
-{
- ZifMd parent;
- ZifMdFilelistsPrivate *priv;
-};
-
-struct _ZifMdFilelistsClass
-{
- ZifMdClass parent_class;
-};
-
-GType zif_md_filelists_get_type (void);
-ZifMdFilelists *zif_md_filelists_new (void);
-GPtrArray *zif_md_filelists_search_file (ZifMdFilelists *md,
- const gchar *search,
- GCancellable *cancellable,
- ZifCompletion *completion,
- GError **error);
-
-G_END_DECLS
-
-#endif /* __ZIF_MD_FILELISTS_H */
-
diff --git a/backends/yum/libzif/zif-md-metalink.c b/backends/yum/libzif/zif-md-metalink.c
index 91f5cec..936f2af 100644
--- a/backends/yum/libzif/zif-md-metalink.c
+++ b/backends/yum/libzif/zif-md-metalink.c
@@ -40,7 +40,6 @@
#include "zif-config.h"
#include "egg-debug.h"
-#include "egg-string.h"
#define ZIF_MD_METALINK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_MD_METALINK, ZifMdMetalinkPrivate))
diff --git a/backends/yum/libzif/zif-md-mirrorlist.c b/backends/yum/libzif/zif-md-mirrorlist.c
index 80fdce6..28a2547 100644
--- a/backends/yum/libzif/zif-md-mirrorlist.c
+++ b/backends/yum/libzif/zif-md-mirrorlist.c
@@ -39,7 +39,6 @@
#include "zif-config.h"
#include "egg-debug.h"
-#include "egg-string.h"
#define ZIF_MD_MIRRORLIST_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_MD_MIRRORLIST, ZifMdMirrorlistPrivate))
diff --git a/backends/yum/libzif/zif-md-other-sql.c b/backends/yum/libzif/zif-md-other-sql.c
index 0866a2b..f5ccba8 100644
--- a/backends/yum/libzif/zif-md-other-sql.c
+++ b/backends/yum/libzif/zif-md-other-sql.c
@@ -43,7 +43,6 @@
#include "zif-package-remote.h"
#include "egg-debug.h"
-#include "egg-string.h"
#define ZIF_MD_OTHER_SQL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_MD_OTHER_SQL, ZifMdOtherSqlPrivate))
@@ -120,18 +119,19 @@ zif_md_other_sql_sqlite_create_changelog_cb (void *data, gint argc, gchar **argv
GPtrArray *array = (GPtrArray *) data;
ZifChangeset *changeset;
gint i;
- guint date = 0;
+ guint64 date = 0;
const gchar *author = NULL;
const gchar *changelog = NULL;
gboolean ret;
GError *error = NULL;
+ gchar *endptr = NULL;
/* get the ID */
for (i=0; i<argc; i++) {
if (g_strcmp0 (col_name[i], "date") == 0) {
- ret = egg_strtouint (argv[i], &date);
- if (!ret)
- egg_warning ("could not parse date '%s'", argv[i]);
+ date = g_ascii_strtoull (argv[i], &endptr, 10);
+ if (argv[i] == endptr)
+ egg_warning ("failed to parse date %s", argv[i]);
} else if (g_strcmp0 (col_name[i], "author") == 0) {
author = argv[i];
} else if (g_strcmp0 (col_name[i], "changelog") == 0) {
@@ -172,7 +172,7 @@ zif_md_other_sql_search_pkgkey (ZifMdOtherSql *md, guint pkgkey,
GPtrArray *array = NULL;
array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
- statement = g_strdup_printf ("SELECT author, date, changelog FROM changelog WHERE pkgKey = '%i' ORDER BY date", pkgkey);
+ statement = g_strdup_printf ("SELECT author, date, changelog FROM changelog WHERE pkgKey = '%i' ORDER BY date DESC", pkgkey);
rc = sqlite3_exec (md->priv->db, statement, zif_md_other_sql_sqlite_create_changelog_cb, array, &error_msg);
if (rc != SQLITE_OK) {
g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
@@ -195,17 +195,17 @@ zif_md_other_sql_sqlite_pkgkey_cb (void *data, gint argc, gchar **argv, gchar **
{
gint i;
guint pkgkey;
- gboolean ret;
+ gchar *endptr = NULL;
GPtrArray *array = (GPtrArray *) data;
/* get the ID */
for (i=0; i<argc; i++) {
if (g_strcmp0 (col_name[i], "pkgKey") == 0) {
- ret = egg_strtouint (argv[i], &pkgkey);
- if (ret)
- g_ptr_array_add (array, GUINT_TO_POINTER (pkgkey));
- else
+ pkgkey = g_ascii_strtoull (argv[i], &endptr, 10);
+ if (argv[i] == endptr)
egg_warning ("could not parse pkgKey '%s'", argv[i]);
+ else
+ g_ptr_array_add (array, GUINT_TO_POINTER (pkgkey));
} else {
egg_warning ("unrecognized: %s=%s", col_name[i], argv[i]);
}
@@ -383,7 +383,7 @@ zif_md_other_sql_test (EggTest *test)
gboolean ret;
GError *error = NULL;
GPtrArray *array;
- ZifPackage *changeset;
+ ZifChangeset *changeset;
GCancellable *cancellable;
ZifCompletion *completion;
const gchar *text;
@@ -467,7 +467,8 @@ zif_md_other_sql_test (EggTest *test)
/************************************************************/
egg_test_title (test, "search for files");
zif_completion_reset (completion);
- array = zif_md_other_sql_get_changelog (md, "42b8d71b303b19c2fcc2b06bb9c764f2902dd72b9376525025ee9ba4a41c38e9",
+ array = zif_md_other_sql_get_changelog (ZIF_MD_OTHER_SQL (md),
+ "42b8d71b303b19c2fcc2b06bb9c764f2902dd72b9376525025ee9ba4a41c38e9",
cancellable, completion, &error);
if (array != NULL)
egg_test_success (test, NULL);
@@ -486,7 +487,7 @@ zif_md_other_sql_test (EggTest *test)
/************************************************************/
egg_test_title (test, "correct version");
text = zif_changeset_get_version (changeset);
- if (g_strcmp0 (text, "0.9.95-8") == 0)
+ if (g_strcmp0 (text, "1.2-3") == 0)
egg_test_success (test, NULL);
else
egg_test_failed (test, "failed to get correct value '%s'", text);
@@ -494,7 +495,7 @@ zif_md_other_sql_test (EggTest *test)
/************************************************************/
egg_test_title (test, "correct author");
text = zif_changeset_get_author (changeset);
- if (g_strcmp0 (text, "Rex Dieter <rdieter[AT]fedoraproject.org>") == 0)
+ if (g_strcmp0 (text, "Rex Dieter <rdieter at fedoraproject.org>") == 0)
egg_test_success (test, NULL);
else
egg_test_failed (test, "failed to get correct value '%s'", text);
@@ -502,7 +503,7 @@ zif_md_other_sql_test (EggTest *test)
/************************************************************/
egg_test_title (test, "correct description");
text = zif_changeset_get_description (changeset);
- if (g_strcmp0 (text, "- ExcludeArch: ppc64 (#253847)") == 0)
+ if (g_strcmp0 (text, "- BR: libfac-devel,factory-devel >= 3.1\n- restore ExcludeArch: ppc64 (#253847)") == 0)
egg_test_success (test, NULL);
else
egg_test_failed (test, "failed to get correct value '%s'", text);
diff --git a/backends/yum/libzif/zif-md-primary-sql.c b/backends/yum/libzif/zif-md-primary-sql.c
index d9bcd7f..bec2495 100644
--- a/backends/yum/libzif/zif-md-primary-sql.c
+++ b/backends/yum/libzif/zif-md-primary-sql.c
@@ -42,7 +42,6 @@
#include "zif-package-remote.h"
#include "egg-debug.h"
-#include "egg-string.h"
#define ZIF_MD_PRIMARY_SQL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_MD_PRIMARY_SQL, ZifMdPrimarySqlPrivate))
@@ -109,7 +108,8 @@ zif_md_primary_sql_load (ZifMd *md, GCancellable *cancellable, ZifCompletion *co
}
/* we don't need to keep syncing */
- sqlite3_exec (primary_sql->priv->db, "PRAGMA synchronous=OFF", NULL, NULL, NULL);
+ sqlite3_exec (primary_sql->priv->db, "PRAGMA synchronous=OFF;", NULL, NULL, NULL);
+
primary_sql->priv->loaded = TRUE;
out:
return primary_sql->priv->loaded;
@@ -131,14 +131,17 @@ zif_md_primary_sql_sqlite_create_package_cb (void *data, gint argc, gchar **argv
return 0;
}
+#define ZIF_MD_PRIMARY_SQL_HEADER "SELECT pkgId, name, arch, version, " \
+ "epoch, release, summary, description, url, " \
+ "rpm_license, rpm_group, size_package, location_href FROM packages"
+
/**
* zif_md_primary_sql_search:
**/
static GPtrArray *
-zif_md_primary_sql_search (ZifMdPrimarySql *md, const gchar *pred,
+zif_md_primary_sql_search (ZifMdPrimarySql *md, const gchar *statement,
GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
- gchar *statement = NULL;
gchar *error_msg = NULL;
gint rc;
gboolean ret;
@@ -161,10 +164,6 @@ zif_md_primary_sql_search (ZifMdPrimarySql *md, const gchar *pred,
data = g_new0 (ZifMdPrimarySqlData, 1);
data->id = zif_md_get_id (ZIF_MD (md));
data->packages = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
-
- statement = g_strdup_printf ("SELECT pkgId, name, arch, version, "
- "epoch, release, summary, description, url, "
- "rpm_license, rpm_group, size_package, location_href FROM packages %s", pred);
rc = sqlite3_exec (md->priv->db, statement, zif_md_primary_sql_sqlite_create_package_cb, data, &error_msg);
if (rc != SQLITE_OK) {
g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
@@ -177,28 +176,74 @@ zif_md_primary_sql_search (ZifMdPrimarySql *md, const gchar *pred,
array = data->packages;
out:
g_free (data);
- g_free (statement);
return array;
}
/**
+ * zif_md_primary_sql_strreplace:
+ **/
+static gchar *
+zif_md_primary_sql_strreplace (const gchar *text, const gchar *find, const gchar *replace)
+{
+ gchar **array;
+ gchar *retval;
+
+ /* split apart and rejoin with new delimiter */
+ array = g_strsplit (text, find, 0);
+ retval = g_strjoinv (replace, array);
+ g_strfreev (array);
+ return retval;
+}
+
+/**
+ * zif_md_primary_sql_get_statement_for_pred:
+ **/
+static gchar *
+zif_md_primary_sql_get_statement_for_pred (const gchar *pred, gchar **search)
+{
+ guint i;
+ const guint max_items = 20;
+ GString *statement;
+ gchar *temp;
+
+ /* search with predicate */
+ statement = g_string_new ("BEGIN;\n");
+ for (i=0; search[i] != NULL; i++) {
+ if (i % max_items == 0)
+ g_string_append (statement, ZIF_MD_PRIMARY_SQL_HEADER " WHERE ");
+ temp = zif_md_primary_sql_strreplace (pred, "###", search[i]);
+ g_string_append (statement, temp);
+ if (i % max_items == max_items - 1)
+ g_string_append (statement, ";\n");
+ else
+ g_string_append (statement, " OR ");
+ g_free (temp);
+ }
+ if (i % max_items != max_items - 1) {
+ g_string_set_size (statement, statement->len - 4);
+ g_string_append (statement, ";\n");
+ }
+ g_string_append (statement, "END;");
+ return g_string_free (statement, FALSE);
+}
+
+/**
* zif_md_primary_sql_resolve:
**/
static GPtrArray *
-zif_md_primary_sql_resolve (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_md_primary_sql_resolve (ZifMd *md, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
- gchar *pred;
+ gchar *statement;
GPtrArray *array;
ZifMdPrimarySql *md_primary_sql = ZIF_MD_PRIMARY_SQL (md);
g_return_val_if_fail (ZIF_IS_MD_PRIMARY_SQL (md), NULL);
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
- /* search with predicate */
- pred = g_strdup_printf ("WHERE name = '%s'", search);
- array = zif_md_primary_sql_search (md_primary_sql, pred, cancellable, completion, error);
- g_free (pred);
-
+ /* simple name match */
+ statement = zif_md_primary_sql_get_statement_for_pred ("name = '###'", search);
+ array = zif_md_primary_sql_search (md_primary_sql, statement, cancellable, completion, error);
+ g_free (statement);
return array;
}
@@ -206,19 +251,19 @@ zif_md_primary_sql_resolve (ZifMd *md, const gchar *search, GCancellable *cancel
* zif_md_primary_sql_search_name:
**/
static GPtrArray *
-zif_md_primary_sql_search_name (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_md_primary_sql_search_name (ZifMd *md, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
- gchar *pred;
+ gchar *statement;
GPtrArray *array;
ZifMdPrimarySql *md_primary_sql = ZIF_MD_PRIMARY_SQL (md);
g_return_val_if_fail (ZIF_IS_MD_PRIMARY_SQL (md), NULL);
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
- /* search with predicate */
- pred = g_strdup_printf ("WHERE name LIKE '%%%s%%'", search);
- array = zif_md_primary_sql_search (md_primary_sql, pred, cancellable, completion, error);
- g_free (pred);
+ /* fuzzy name match */
+ statement = zif_md_primary_sql_get_statement_for_pred ("name LIKE '%%###%%'", search);
+ array = zif_md_primary_sql_search (md_primary_sql, statement, cancellable, completion, error);
+ g_free (statement);
return array;
}
@@ -227,19 +272,21 @@ zif_md_primary_sql_search_name (ZifMd *md, const gchar *search, GCancellable *ca
* zif_md_primary_sql_search_details:
**/
static GPtrArray *
-zif_md_primary_sql_search_details (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_md_primary_sql_search_details (ZifMd *md, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
- gchar *pred;
+ gchar *statement;
GPtrArray *array;
ZifMdPrimarySql *md_primary_sql = ZIF_MD_PRIMARY_SQL (md);
g_return_val_if_fail (ZIF_IS_MD_PRIMARY_SQL (md), NULL);
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
- /* search with predicate */
- pred = g_strdup_printf ("WHERE name LIKE '%%%s%%' OR summary LIKE '%%%s%%' OR description LIKE '%%%s%%'", search, search, search);
- array = zif_md_primary_sql_search (md_primary_sql, pred, cancellable, completion, error);
- g_free (pred);
+ /* fuzzy details match */
+ statement = zif_md_primary_sql_get_statement_for_pred ("name LIKE '%%###%%' OR "
+ "summary LIKE '%%###%%' OR "
+ "description LIKE '%%###%%'", search);
+ array = zif_md_primary_sql_search (md_primary_sql, statement, cancellable, completion, error);
+ g_free (statement);
return array;
}
@@ -248,19 +295,19 @@ zif_md_primary_sql_search_details (ZifMd *md, const gchar *search, GCancellable
* zif_md_primary_sql_search_group:
**/
static GPtrArray *
-zif_md_primary_sql_search_group (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_md_primary_sql_search_group (ZifMd *md, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
- gchar *pred;
+ gchar *statement;
GPtrArray *array;
ZifMdPrimarySql *md_primary_sql = ZIF_MD_PRIMARY_SQL (md);
g_return_val_if_fail (ZIF_IS_MD_PRIMARY_SQL (md), NULL);
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
- /* search with predicate */
- pred = g_strdup_printf ("WHERE rpm_group = '%s'", search);
- array = zif_md_primary_sql_search (md_primary_sql, pred, cancellable, completion, error);
- g_free (pred);
+ /* simple group match */
+ statement = zif_md_primary_sql_get_statement_for_pred ("rpm_group = '###'", search);
+ array = zif_md_primary_sql_search (md_primary_sql, statement, cancellable, completion, error);
+ g_free (statement);
return array;
}
@@ -269,19 +316,19 @@ zif_md_primary_sql_search_group (ZifMd *md, const gchar *search, GCancellable *c
* zif_md_primary_sql_search_pkgid:
**/
static GPtrArray *
-zif_md_primary_sql_search_pkgid (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_md_primary_sql_search_pkgid (ZifMd *md, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
- gchar *pred;
+ gchar *statement;
GPtrArray *array;
ZifMdPrimarySql *md_primary_sql = ZIF_MD_PRIMARY_SQL (md);
g_return_val_if_fail (ZIF_IS_MD_PRIMARY_SQL (md), NULL);
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
- /* search with predicate */
- pred = g_strdup_printf ("WHERE pkgid = '%s'", search);
- array = zif_md_primary_sql_search (md_primary_sql, pred, cancellable, completion, error);
- g_free (pred);
+ /* simple pkgid match */
+ statement = zif_md_primary_sql_get_statement_for_pred ("pkgid = '###'", search);
+ array = zif_md_primary_sql_search (md_primary_sql, statement, cancellable, completion, error);
+ g_free (statement);
return array;
}
@@ -291,9 +338,9 @@ zif_md_primary_sql_search_pkgid (ZifMd *md, const gchar *search, GCancellable *c
**/
static GPtrArray *
zif_md_primary_sql_search_pkgkey (ZifMd *md, guint pkgkey,
- GCancellable *cancellable, ZifCompletion *completion, GError **error)
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
- gchar *pred;
+ gchar *statement;
GPtrArray *array;
ZifMdPrimarySql *md_primary_sql = ZIF_MD_PRIMARY_SQL (md);
@@ -301,10 +348,9 @@ zif_md_primary_sql_search_pkgkey (ZifMd *md, guint pkgkey,
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
/* search with predicate */
- pred = g_strdup_printf ("WHERE pkgKey = '%i'", pkgkey);
- array = zif_md_primary_sql_search (md_primary_sql, pred, cancellable, completion, error);
- g_free (pred);
-
+ statement = g_strdup_printf (ZIF_MD_PRIMARY_SQL_HEADER " WHERE pkgKey = '%i'", pkgkey);
+ array = zif_md_primary_sql_search (md_primary_sql, statement, cancellable, completion, error);
+ g_free (statement);
return array;
}
@@ -316,17 +362,17 @@ zif_md_primary_sql_sqlite_pkgkey_cb (void *data, gint argc, gchar **argv, gchar
{
gint i;
guint pkgkey;
- gboolean ret;
+ gchar *endptr = NULL;
GPtrArray *array = (GPtrArray *) data;
/* get the ID */
for (i=0; i<argc; i++) {
if (g_strcmp0 (col_name[i], "pkgKey") == 0) {
- ret = egg_strtouint (argv[i], &pkgkey);
- if (ret)
- g_ptr_array_add (array, GUINT_TO_POINTER (pkgkey));
+ pkgkey = g_ascii_strtoull (argv[i], &endptr, 10);
+ if (argv[i] == endptr)
+ egg_warning ("failed to parse pkgKey %s", argv[i]);
else
- egg_warning ("could not parse pkgKey '%s'", argv[i]);
+ g_ptr_array_add (array, GUINT_TO_POINTER (pkgkey));
} else {
egg_warning ("unrecognized: %s=%s", col_name[i], argv[i]);
}
@@ -338,8 +384,8 @@ zif_md_primary_sql_sqlite_pkgkey_cb (void *data, gint argc, gchar **argv, gchar
* zif_md_primary_sql_what_provides:
**/
static GPtrArray *
-zif_md_primary_sql_what_provides (ZifMd *md, const gchar *search,
- GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_md_primary_sql_what_provides (ZifMd *md, gchar **search,
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
gchar *statement = NULL;
gchar *error_msg = NULL;
@@ -379,7 +425,7 @@ zif_md_primary_sql_what_provides (ZifMd *md, const gchar *search,
/* create data struct we can pass to the callback */
pkgkey_array = g_ptr_array_new ();
- statement = g_strdup_printf ("SELECT pkgKey FROM provides WHERE name = '%s'", search);
+ statement = g_strdup_printf ("SELECT pkgKey FROM provides WHERE name = '%s'", search[0]);
rc = sqlite3_exec (md_primary_sql->priv->db, statement, zif_md_primary_sql_sqlite_pkgkey_cb, pkgkey_array, &error_msg);
if (rc != SQLITE_OK) {
g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
@@ -439,7 +485,7 @@ out:
static GPtrArray *
zif_md_primary_sql_find_package (ZifMd *md, const gchar *package_id, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
- gchar *pred;
+ gchar *statement;
GPtrArray *array;
gchar **split;
ZifMdPrimarySql *md_primary_sql = ZIF_MD_PRIMARY_SQL (md);
@@ -449,9 +495,10 @@ zif_md_primary_sql_find_package (ZifMd *md, const gchar *package_id, GCancellabl
/* search with predicate, TODO: search version (epoch+release) */
split = pk_package_id_split (package_id);
- pred = g_strdup_printf ("WHERE name = '%s' AND arch = '%s'", split[PK_PACKAGE_ID_NAME], split[PK_PACKAGE_ID_ARCH]);
- array = zif_md_primary_sql_search (md_primary_sql, pred, cancellable, completion, error);
- g_free (pred);
+ statement = g_strdup_printf (ZIF_MD_PRIMARY_SQL_HEADER " WHERE name = '%s' AND arch = '%s'",
+ split[PK_PACKAGE_ID_NAME], split[PK_PACKAGE_ID_ARCH]);
+ array = zif_md_primary_sql_search (md_primary_sql, statement, cancellable, completion, error);
+ g_free (statement);
g_strfreev (split);
return array;
@@ -470,7 +517,7 @@ zif_md_primary_sql_get_packages (ZifMd *md, GCancellable *cancellable, ZifComple
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
/* search with predicate */
- array = zif_md_primary_sql_search (md_primary_sql, "", cancellable, completion, error);
+ array = zif_md_primary_sql_search (md_primary_sql, ZIF_MD_PRIMARY_SQL_HEADER, cancellable, completion, error);
return array;
}
@@ -558,6 +605,7 @@ zif_md_primary_sql_test (EggTest *test)
ZifString *summary;
GCancellable *cancellable;
ZifCompletion *completion;
+ gchar *data[] = { "gnome-power-manager", "gnome-color-manager", NULL };
if (!egg_test_start (test, "ZifMdPrimarySql"))
return;
@@ -636,8 +684,8 @@ zif_md_primary_sql_test (EggTest *test)
egg_test_assert (test, md->priv->loaded);
/************************************************************/
- egg_test_title (test, "search for files");
- array = zif_md_primary_sql_resolve (md, "gnome-power-manager", cancellable, completion, &error);
+ egg_test_title (test, "resolve");
+ array = zif_md_primary_sql_resolve (md, data, cancellable, completion, &error);
if (array != NULL)
egg_test_success (test, NULL);
else
diff --git a/backends/yum/libzif/zif-md-primary-xml.c b/backends/yum/libzif/zif-md-primary-xml.c
index 1ad8c66..c1d3564 100644
--- a/backends/yum/libzif/zif-md-primary-xml.c
+++ b/backends/yum/libzif/zif-md-primary-xml.c
@@ -66,7 +66,6 @@ typedef enum {
#include "zif-package-remote.h"
#include "egg-debug.h"
-#include "egg-string.h"
#define ZIF_MD_PRIMARY_XML_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_MD_PRIMARY_XML, ZifMdPrimaryXmlPrivate))
@@ -381,7 +380,7 @@ zif_md_primary_xml_parser_text (GMarkupParseContext *context, const gchar *text,
g_object_set_data_full (G_OBJECT(primary_xml->priv->package_temp), "pkgid", g_strdup (text), g_free);
goto out;
}
- egg_error ("not saving: %s", text);
+ egg_warning ("not saving: %s", text);
goto out;
}
out:
@@ -509,17 +508,22 @@ out:
static gboolean
zif_md_primary_xml_resolve_cb (ZifPackage *package, gpointer user_data)
{
+ guint i;
const gchar *value;
- const gchar *search = (const gchar *) user_data;
+ gchar **search = (gchar **) user_data;
value = zif_package_get_name (package);
- return (g_strcmp0 (value, search) == 0);
+ for (i=0; search[i] != NULL; i++) {
+ if (g_strcmp0 (value, search[i]) == 0)
+ return TRUE;
+ }
+ return FALSE;
}
/**
* zif_md_primary_xml_resolve:
**/
static GPtrArray *
-zif_md_primary_xml_resolve (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_md_primary_xml_resolve (ZifMd *md, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
return zif_md_primary_xml_filter (md, zif_md_primary_xml_resolve_cb, (gpointer) search,
cancellable, completion, error);
@@ -531,17 +535,22 @@ zif_md_primary_xml_resolve (ZifMd *md, const gchar *search, GCancellable *cancel
static gboolean
zif_md_primary_xml_search_name_cb (ZifPackage *package, gpointer user_data)
{
+ guint i;
const gchar *value;
- const gchar *search = (const gchar *) user_data;
+ gchar **search = (gchar **) user_data;
value = zif_package_get_name (package);
- return (g_strstr_len (value, -1, search) != NULL);
+ for (i=0; search[i] != NULL; i++) {
+ if (g_strstr_len (value, -1, search[i]) != NULL)
+ return TRUE;
+ }
+ return FALSE;
}
/**
* zif_md_primary_xml_search_name:
**/
static GPtrArray *
-zif_md_primary_xml_search_name (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_md_primary_xml_search_name (ZifMd *md, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
return zif_md_primary_xml_filter (md, zif_md_primary_xml_search_name_cb, (gpointer) search,
cancellable, completion, error);
@@ -553,25 +562,32 @@ zif_md_primary_xml_search_name (ZifMd *md, const gchar *search, GCancellable *ca
static gboolean
zif_md_primary_xml_search_details_cb (ZifPackage *package, gpointer user_data)
{
- gboolean ret;
- const gchar *value;
- ZifString *string;
- const gchar *search = (const gchar *) user_data;
- value = zif_package_get_name (package);
- ret = (g_strstr_len (value, -1, search) != NULL);
- if (ret)
- goto out;
- string = zif_package_get_summary (package, NULL);
- ret = (g_strstr_len (zif_string_get_value (string), -1, search) != NULL);
- zif_string_unref (string);
- if (ret)
- goto out;
- string = zif_package_get_description (package, NULL);
- ret = (g_strstr_len (zif_string_get_value (string), -1, search) != NULL);
- zif_string_unref (string);
- if (ret)
- goto out;
-out:
+ guint i;
+ gboolean ret = FALSE;
+ const gchar *name;
+ ZifString *summary;
+ ZifString *description;
+ gchar **search = (gchar **) user_data;
+
+ name = zif_package_get_name (package);
+ summary = zif_package_get_summary (package, NULL);
+ description = zif_package_get_description (package, NULL);
+ for (i=0; search[i] != NULL; i++) {
+ if (g_strstr_len (name, -1, search[i]) != NULL) {
+ ret = TRUE;
+ break;
+ }
+ if (g_strstr_len (zif_string_get_value (summary), -1, search[i]) != NULL) {
+ ret = TRUE;
+ break;
+ }
+ if (g_strstr_len (zif_string_get_value (description), -1, search[i]) != NULL) {
+ ret = TRUE;
+ break;
+ }
+ }
+ zif_string_unref (summary);
+ zif_string_unref (description);
return ret;
}
@@ -579,7 +595,7 @@ out:
* zif_md_primary_xml_search_details:
**/
static GPtrArray *
-zif_md_primary_xml_search_details (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_md_primary_xml_search_details (ZifMd *md, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
return zif_md_primary_xml_filter (md, zif_md_primary_xml_search_details_cb, (gpointer) search,
cancellable, completion, error);
@@ -591,11 +607,17 @@ zif_md_primary_xml_search_details (ZifMd *md, const gchar *search, GCancellable
static gboolean
zif_md_primary_xml_search_group_cb (ZifPackage *package, gpointer user_data)
{
+ guint i;
gboolean ret;
ZifString *value;
- const gchar *search = (const gchar *) user_data;
+ gchar **search = (gchar **) user_data;
value = zif_package_get_category (package, NULL);
- ret = (g_strstr_len (zif_string_get_value (value), -1, search) != NULL);
+ for (i=0; search[i] != NULL; i++) {
+ if (g_strstr_len (zif_string_get_value (value), -1, search[i]) != NULL) {
+ ret = TRUE;
+ break;
+ }
+ }
zif_string_unref (value);
return ret;
}
@@ -604,7 +626,7 @@ zif_md_primary_xml_search_group_cb (ZifPackage *package, gpointer user_data)
* zif_md_primary_xml_search_group:
**/
static GPtrArray *
-zif_md_primary_xml_search_group (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_md_primary_xml_search_group (ZifMd *md, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
return zif_md_primary_xml_filter (md, zif_md_primary_xml_search_group_cb, (gpointer) search,
cancellable, completion, error);
@@ -616,17 +638,22 @@ zif_md_primary_xml_search_group (ZifMd *md, const gchar *search, GCancellable *c
static gboolean
zif_md_primary_xml_search_pkgid_cb (ZifPackage *package, gpointer user_data)
{
+ guint i;
const gchar *value;
- const gchar *search = (const gchar *) user_data;
+ gchar **search = (gchar **) user_data;
value = (const gchar *) g_object_get_data (G_OBJECT (package), "pkgid");
- return (g_strcmp0 (value, search) == 0);
+ for (i=0; search[i] != NULL; i++) {
+ if (g_strcmp0 (value, search[i]) == 0)
+ return TRUE;
+ }
+ return FALSE;
}
/**
* zif_md_primary_xml_search_pkgid:
**/
static GPtrArray *
-zif_md_primary_xml_search_pkgid (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_md_primary_xml_search_pkgid (ZifMd *md, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
return zif_md_primary_xml_filter (md, zif_md_primary_xml_search_pkgid_cb, (gpointer) search,
cancellable, completion, error);
@@ -638,9 +665,10 @@ zif_md_primary_xml_search_pkgid (ZifMd *md, const gchar *search, GCancellable *c
static gboolean
zif_md_primary_xml_what_provides_cb (ZifPackage *package, gpointer user_data)
{
+// guint i;
gboolean ret;
GPtrArray *array;
-// const gchar *search = (const gchar *) user_data;
+// gchar **search = (gchar **) user_data;
array = zif_package_get_provides (package, NULL);
/* TODO: do something with the ZifDepend objects */
ret = FALSE;
@@ -652,7 +680,7 @@ zif_md_primary_xml_what_provides_cb (ZifPackage *package, gpointer user_data)
* zif_md_primary_xml_what_provides:
**/
static GPtrArray *
-zif_md_primary_xml_what_provides (ZifMd *md, const gchar *search,
+zif_md_primary_xml_what_provides (ZifMd *md, gchar **search,
GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
return zif_md_primary_xml_filter (md, zif_md_primary_xml_what_provides_cb, (gpointer) search,
@@ -779,6 +807,7 @@ zif_md_primary_xml_test (EggTest *test)
ZifString *summary;
GCancellable *cancellable;
ZifCompletion *completion;
+ gchar *data[] = { "gnome-power-manager", NULL };
if (!egg_test_start (test, "ZifMdPrimaryXml"))
return;
@@ -859,7 +888,7 @@ zif_md_primary_xml_test (EggTest *test)
/************************************************************/
egg_test_title (test, "search for files");
zif_completion_reset (completion);
- array = zif_md_primary_xml_resolve (md, "gnome-power-manager", cancellable, completion, &error);
+ array = zif_md_primary_xml_resolve (md, data, cancellable, completion, &error);
if (array != NULL)
egg_test_success (test, NULL);
else
diff --git a/backends/yum/libzif/zif-md-updateinfo.c b/backends/yum/libzif/zif-md-updateinfo.c
index 8e9c3ee..98fe2a4 100644
--- a/backends/yum/libzif/zif-md-updateinfo.c
+++ b/backends/yum/libzif/zif-md-updateinfo.c
@@ -41,7 +41,6 @@
#include "zif-utils.h"
#include "egg-debug.h"
-#include "egg-string.h"
#define ZIF_MD_UPDATEINFO_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_MD_UPDATEINFO, ZifMdUpdateinfoPrivate))
@@ -55,6 +54,7 @@ typedef enum {
ZIF_MD_UPDATEINFO_SECTION_UPDATE_TITLE,
ZIF_MD_UPDATEINFO_SECTION_UPDATE_DESCRIPTION,
ZIF_MD_UPDATEINFO_SECTION_UPDATE_ISSUED,
+ ZIF_MD_UPDATEINFO_SECTION_UPDATE_REBOOT,
ZIF_MD_UPDATEINFO_SECTION_UPDATE_REFERENCES,
ZIF_MD_UPDATEINFO_SECTION_UPDATE_PKGLIST,
ZIF_MD_UPDATEINFO_SECTION_UPDATE_UNKNOWN
@@ -148,6 +148,10 @@ zif_md_updateinfo_parser_start_element (GMarkupParseContext *context, const gcha
updateinfo->priv->section_group = ZIF_MD_UPDATEINFO_SECTION_UPDATE_DESCRIPTION;
goto out;
}
+ if (g_strcmp0 (element_name, "reboot_suggested") == 0) {
+ updateinfo->priv->section_group = ZIF_MD_UPDATEINFO_SECTION_UPDATE_REBOOT;
+ goto out;
+ }
if (g_strcmp0 (element_name, "issued") == 0) {
updateinfo->priv->section_group = ZIF_MD_UPDATEINFO_SECTION_UPDATE_ISSUED;
@@ -201,6 +205,8 @@ zif_md_updateinfo_parser_start_element (GMarkupParseContext *context, const gcha
goto out;
if (g_strcmp0 (element_name, "name") == 0)
goto out;
+ if (g_strcmp0 (element_name, "reboot_suggested") == 0)
+ goto out;
//TODO: is this better than src?
if (g_strcmp0 (element_name, "filename") == 0)
goto out;
@@ -298,6 +304,18 @@ zif_md_updateinfo_parser_end_element (GMarkupParseContext *context, const gchar
goto out;
}
+ if (updateinfo->priv->section_group == ZIF_MD_UPDATEINFO_SECTION_UPDATE_REBOOT) {
+
+ /* add property */
+ if (g_strcmp0 (element_name, "reboot_suggested") == 0) {
+ zif_update_set_reboot (updateinfo->priv->update_temp, TRUE);
+ updateinfo->priv->section_group = ZIF_MD_UPDATEINFO_SECTION_UPDATE_UNKNOWN;
+ goto out;
+ }
+ egg_warning ("unhandled reboot_suggested end tag: %s", element_name);
+ goto out;
+ }
+
if (updateinfo->priv->section_group == ZIF_MD_UPDATEINFO_SECTION_UPDATE_REFERENCES) {
if (g_strcmp0 (element_name, "references") == 0) {
@@ -329,6 +347,8 @@ zif_md_updateinfo_parser_end_element (GMarkupParseContext *context, const gchar
goto out;
if (g_strcmp0 (element_name, "collection") == 0)
goto out;
+ if (g_strcmp0 (element_name, "reboot_suggested") == 0)
+ goto out;
/* add to the update */
if (g_strcmp0 (element_name, "package") == 0) {
@@ -564,7 +584,7 @@ zif_md_updateinfo_get_detail_for_package (ZifMdUpdateinfo *md, const gchar *pack
/* nothing found */
if (array == NULL) {
g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
- "could not find package: %s", package_id);
+ "could not find package (%i in sack): %s", len, package_id);
}
out:
return array;
diff --git a/backends/yum/libzif/zif-md.c b/backends/yum/libzif/zif-md.c
index 75f9e05..7bdea8d 100644
--- a/backends/yum/libzif/zif-md.c
+++ b/backends/yum/libzif/zif-md.c
@@ -24,7 +24,7 @@
* @short_description: Metadata file common functionality
*
* This provides an abstract metadata class.
- * It is implemented by #ZifMdFilelists, #ZifMdMaster and #ZifMdPrimary.
+ * It is implemented by #ZifMdFilelistsSql, #ZifMdMaster and #ZifMdPrimary.
*/
#ifdef HAVE_CONFIG_H
@@ -41,7 +41,6 @@
#include "zif-config.h"
#include "egg-debug.h"
-#include "egg-string.h"
#define ZIF_MD_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_MD, ZifMdPrivate))
@@ -632,7 +631,7 @@ zif_md_unload (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion,
* Since: 0.0.1
**/
GPtrArray *
-zif_md_resolve (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_md_resolve (ZifMd *md, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
GPtrArray *array = NULL;
ZifMdClass *klass = ZIF_MD_GET_CLASS (md);
@@ -654,6 +653,43 @@ out:
}
/**
+ * zif_md_search_file:
+ * @md: the #ZifMd object
+ * @search: the search term, e.g. "/usr/bin/powertop"
+ * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
+ * @completion: a #ZifCompletion to use for progress reporting
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Gets a list of all packages that contain the file.
+ * Results are pkgId's descriptors, i.e. 64 bit hashes as test.
+ *
+ * Return value: a string list of pkgId's
+ *
+ * Since: 0.0.1
+ **/
+GPtrArray *
+zif_md_search_file (ZifMd *md, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ GPtrArray *array = NULL;
+ ZifMdClass *klass = ZIF_MD_GET_CLASS (md);
+
+ g_return_val_if_fail (ZIF_IS_MD (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* no support */
+ if (klass->search_file == NULL) {
+ g_set_error_literal (error, ZIF_MD_ERROR, ZIF_MD_ERROR_NO_SUPPORT,
+ "operation cannot be performed on this md");
+ goto out;
+ }
+
+ /* do subclassed action */
+ array = klass->search_file (md, search, cancellable, completion, error);
+out:
+ return array;
+}
+
+/**
* zif_md_search_name:
* @md: the #ZifMd object
* @search: the search term, e.g. "power"
@@ -668,7 +704,7 @@ out:
* Since: 0.0.1
**/
GPtrArray *
-zif_md_search_name (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_md_search_name (ZifMd *md, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
GPtrArray *array = NULL;
ZifMdClass *klass = ZIF_MD_GET_CLASS (md);
@@ -704,7 +740,7 @@ out:
* Since: 0.0.1
**/
GPtrArray *
-zif_md_search_details (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_md_search_details (ZifMd *md, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
GPtrArray *array = NULL;
ZifMdClass *klass = ZIF_MD_GET_CLASS (md);
@@ -740,7 +776,7 @@ out:
* Since: 0.0.1
**/
GPtrArray *
-zif_md_search_group (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_md_search_group (ZifMd *md, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
GPtrArray *array = NULL;
ZifMdClass *klass = ZIF_MD_GET_CLASS (md);
@@ -776,7 +812,7 @@ out:
* Since: 0.0.1
**/
GPtrArray *
-zif_md_search_pkgid (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_md_search_pkgid (ZifMd *md, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
GPtrArray *array = NULL;
ZifMdClass *klass = ZIF_MD_GET_CLASS (md);
@@ -812,7 +848,7 @@ out:
* Since: 0.0.1
**/
GPtrArray *
-zif_md_what_provides (ZifMd *md, const gchar *search,
+zif_md_what_provides (ZifMd *md, gchar **search,
GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
GPtrArray *array = NULL;
diff --git a/backends/yum/libzif/zif-md.h b/backends/yum/libzif/zif-md.h
index 6db2400..a0e93b5 100644
--- a/backends/yum/libzif/zif-md.h
+++ b/backends/yum/libzif/zif-md.h
@@ -66,37 +66,37 @@ struct _ZifMdClass
ZifCompletion *completion,
GError **error);
GPtrArray *(*search_file) (ZifMd *md,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *(*search_name) (ZifMd *md,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *(*search_details) (ZifMd *md,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *(*search_group) (ZifMd *md,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *(*search_pkgid) (ZifMd *md,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *(*what_provides) (ZifMd *md,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *(*resolve) (ZifMd *md,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
@@ -192,37 +192,37 @@ gboolean zif_md_file_check (ZifMd *md,
gboolean use_uncompressed,
GError **error);
GPtrArray *zif_md_search_file (ZifMd *md,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *zif_md_search_name (ZifMd *md,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *zif_md_search_details (ZifMd *md,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *zif_md_search_group (ZifMd *md,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *zif_md_search_pkgid (ZifMd *md,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *zif_md_what_provides (ZifMd *md,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *zif_md_resolve (ZifMd *md,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
diff --git a/backends/yum/libzif/zif-monitor.c b/backends/yum/libzif/zif-monitor.c
index b87867b..547064a 100644
--- a/backends/yum/libzif/zif-monitor.c
+++ b/backends/yum/libzif/zif-monitor.c
@@ -40,7 +40,6 @@
#include "zif-monitor.h"
#include "egg-debug.h"
-#include "egg-string.h"
#define ZIF_MONITOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_MONITOR, ZifMonitorPrivate))
diff --git a/backends/yum/libzif/zif-package-remote.c b/backends/yum/libzif/zif-package-remote.c
index 63813ba..fb74008 100644
--- a/backends/yum/libzif/zif-package-remote.c
+++ b/backends/yum/libzif/zif-package-remote.c
@@ -35,7 +35,6 @@
#include <stdlib.h>
#include "egg-debug.h"
-#include "egg-string.h"
#include "zif-utils.h"
#include "zif-package-remote.h"
@@ -52,7 +51,7 @@
struct _ZifPackageRemotePrivate
{
ZifGroups *groups;
- gchar *sql_id;
+ gchar *pkgid;
};
G_DEFINE_TYPE (ZifPackageRemote, zif_package_remote, ZIF_TYPE_PACKAGE)
@@ -83,7 +82,7 @@ zif_package_remote_set_from_repo (ZifPackageRemote *pkg, guint length, gchar **t
const gchar *arch = NULL;
gchar *package_id;
ZifString *string;
- gboolean ret;
+ gchar *endptr = NULL;
g_return_val_if_fail (ZIF_IS_PACKAGE_REMOTE (pkg), FALSE);
g_return_val_if_fail (type != NULL, FALSE);
@@ -95,8 +94,8 @@ zif_package_remote_set_from_repo (ZifPackageRemote *pkg, guint length, gchar **t
if (g_strcmp0 (type[i], "name") == 0) {
name = data[i];
} else if (g_strcmp0 (type[i], "epoch") == 0) {
- ret = egg_strtouint (data[i], &epoch);
- if (!ret)
+ epoch = g_ascii_strtoull (data[i], &endptr, 10);
+ if (data[i] == endptr)
egg_warning ("failed to parse epoch %s", data[i]);
} else if (g_strcmp0 (type[i], "version") == 0) {
version = data[i];
@@ -127,7 +126,7 @@ zif_package_remote_set_from_repo (ZifPackageRemote *pkg, guint length, gchar **t
} else if (g_strcmp0 (type[i], "size_package") == 0) {
zif_package_set_size (ZIF_PACKAGE (pkg), atoi (data[i]));
} else if (g_strcmp0 (type[i], "pkgId") == 0) {
- pkg->priv->sql_id = g_strdup (data[i]);
+ pkg->priv->pkgid = g_strdup (data[i]);
} else if (g_strcmp0 (type[i], "location_href") == 0) {
string = zif_string_new (data[i]);
zif_package_set_location_href (ZIF_PACKAGE (pkg), string);
@@ -145,6 +144,23 @@ zif_package_remote_set_from_repo (ZifPackageRemote *pkg, guint length, gchar **t
}
/**
+ * zif_package_remote_get_pkgid:
+ * @pkg: the #ZifPackageRemote object
+ *
+ * Gets the pkgid used internally to track the package item.
+ *
+ * Return value: the pkgid hash.
+ *
+ * Since: 0.0.1
+ **/
+const gchar *
+zif_package_remote_get_pkgid (ZifPackageRemote *pkg)
+{
+ g_return_val_if_fail (ZIF_IS_PACKAGE_REMOTE (pkg), NULL);
+ return pkg->priv->pkgid;
+}
+
+/**
* zif_package_remote_finalize:
**/
static void
@@ -156,7 +172,7 @@ zif_package_remote_finalize (GObject *object)
g_return_if_fail (ZIF_IS_PACKAGE_REMOTE (object));
pkg = ZIF_PACKAGE_REMOTE (object);
- g_free (pkg->priv->sql_id);
+ g_free (pkg->priv->pkgid);
g_object_unref (pkg->priv->groups);
G_OBJECT_CLASS (zif_package_remote_parent_class)->finalize (object);
@@ -180,7 +196,7 @@ static void
zif_package_remote_init (ZifPackageRemote *pkg)
{
pkg->priv = ZIF_PACKAGE_REMOTE_GET_PRIVATE (pkg);
- pkg->priv->sql_id = NULL;
+ pkg->priv->pkgid = NULL;
pkg->priv->groups = zif_groups_new ();
}
diff --git a/backends/yum/libzif/zif-package-remote.h b/backends/yum/libzif/zif-package-remote.h
index 09277ed..d29de69 100644
--- a/backends/yum/libzif/zif-package-remote.h
+++ b/backends/yum/libzif/zif-package-remote.h
@@ -62,6 +62,7 @@ gboolean zif_package_remote_set_from_repo (ZifPackageRemote *pkg,
gchar **data,
const gchar *repo_id,
GError **error);
+const gchar *zif_package_remote_get_pkgid (ZifPackageRemote *pkg);
G_END_DECLS
diff --git a/backends/yum/libzif/zif-package.c b/backends/yum/libzif/zif-package.c
index 4d6890a..5621a1a 100644
--- a/backends/yum/libzif/zif-package.c
+++ b/backends/yum/libzif/zif-package.c
@@ -93,33 +93,27 @@ zif_package_error_quark (void)
*
* Compares one package versions against each other.
*
- * Return value: 1 for a>b, 0 for a==b, -1 for b>a
+ * Return value: 1 for a>b, 0 for a==b, -1 for b>a, or G_MAXINT for error
*
* Since: 0.0.1
**/
gint
zif_package_compare (ZifPackage *a, ZifPackage *b)
{
- const gchar *package_ida;
- const gchar *package_idb;
gchar **splita;
gchar **splitb;
- gint val = 0;
+ gint val = G_MAXINT;
- g_return_val_if_fail (ZIF_IS_PACKAGE (a), 0);
- g_return_val_if_fail (ZIF_IS_PACKAGE (b), 0);
+ g_return_val_if_fail (ZIF_IS_PACKAGE (a), G_MAXINT);
+ g_return_val_if_fail (ZIF_IS_PACKAGE (b), G_MAXINT);
- /* shallow copy */
- package_ida = zif_package_get_id (a);
- package_idb = zif_package_get_id (b);
- splita = pk_package_id_split (package_ida);
- splitb = pk_package_id_split (package_idb);
+ /* no-copy */
+ splita = a->priv->package_id_split;
+ splitb = b->priv->package_id_split;
/* check name the same */
- if (g_strcmp0 (splita[PK_PACKAGE_ID_NAME], splitb[PK_PACKAGE_ID_NAME]) != 0) {
- egg_warning ("comparing between %s and %s", package_ida, package_idb);
+ if (g_strcmp0 (splita[PK_PACKAGE_ID_NAME], splitb[PK_PACKAGE_ID_NAME]) != 0)
goto out;
- }
/* do a version compare */
val = zif_compare_evr (splita[PK_PACKAGE_ID_VERSION], splitb[PK_PACKAGE_ID_VERSION]);
@@ -128,8 +122,6 @@ zif_package_compare (ZifPackage *a, ZifPackage *b)
if (val == 0)
val = g_strcmp0 (splitb[PK_PACKAGE_ID_ARCH], splita[PK_PACKAGE_ID_ARCH]);
out:
- g_strfreev (splita);
- g_strfreev (splitb);
return val;
}
@@ -140,7 +132,7 @@ out:
*
* Returns the newest package from a list.
*
- * Return value: a single %ZifPackage, or %NULL in the case of an error
+ * Return value: a single %ZifPackage, or %NULL in the case of an error. Use g_object_unref() when done.
*
* Since: 0.0.1
**/
@@ -1017,7 +1009,6 @@ zif_package_get_files (ZifPackage *package, GError **error)
gboolean ret;
g_return_val_if_fail (ZIF_IS_PACKAGE (package), NULL);
- g_return_val_if_fail (package->priv->package_id_split != NULL, NULL);
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
/* not exists */
diff --git a/backends/yum/libzif/zif-repos.c b/backends/yum/libzif/zif-repos.c
index 1ce63b2..ea8cc67 100644
--- a/backends/yum/libzif/zif-repos.c
+++ b/backends/yum/libzif/zif-repos.c
@@ -42,7 +42,6 @@
#include "zif-monitor.h"
#include "egg-debug.h"
-#include "egg-string.h"
#define ZIF_REPOS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_REPOS, ZifReposPrivate))
@@ -620,7 +619,7 @@ zif_repos_test (EggTest *test)
/************************************************************/
egg_test_title (test, "get name");
value = zif_store_remote_get_name (store, NULL, completion, NULL);
- if (egg_strequal (value, "Fedora 11 - i386"))
+ if (g_strcmp0 (value, "Fedora 11 - i386") == 0)
egg_test_success (test, NULL);
else
egg_test_failed (test, "invalid name '%s'", value);
diff --git a/backends/yum/libzif/zif-store-array.c b/backends/yum/libzif/zif-store-array.c
index 467a1fd..d3867fd 100644
--- a/backends/yum/libzif/zif-store-array.c
+++ b/backends/yum/libzif/zif-store-array.c
@@ -47,7 +47,6 @@
#include "zif-repos.h"
#include "egg-debug.h"
-#include "egg-string.h"
/* in PackageKit we split categories from groups using a special @ prefix (bodge) */
#define PK_ROLE_ENUM_SEARCH_CATEGORY (PK_ROLE_ENUM_UNKNOWN + 1)
@@ -214,7 +213,7 @@ out:
* zif_store_array_repos_search:
**/
static GPtrArray *
-zif_store_array_repos_search (GPtrArray *store_array, PkRoleEnum role, const gchar *search,
+zif_store_array_repos_search (GPtrArray *store_array, PkRoleEnum role, gchar **search,
ZifStoreArrayErrorCb error_cb, gpointer user_data,
GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
@@ -502,7 +501,7 @@ out:
* Since: 0.0.1
**/
GPtrArray *
-zif_store_array_resolve (GPtrArray *store_array, const gchar *search,
+zif_store_array_resolve (GPtrArray *store_array, gchar **search,
ZifStoreArrayErrorCb error_cb, gpointer user_data,
GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
@@ -528,7 +527,7 @@ zif_store_array_resolve (GPtrArray *store_array, const gchar *search,
* Since: 0.0.1
**/
GPtrArray *
-zif_store_array_search_name (GPtrArray *store_array, const gchar *search,
+zif_store_array_search_name (GPtrArray *store_array, gchar **search,
ZifStoreArrayErrorCb error_cb, gpointer user_data,
GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
@@ -554,7 +553,7 @@ zif_store_array_search_name (GPtrArray *store_array, const gchar *search,
* Since: 0.0.1
**/
GPtrArray *
-zif_store_array_search_details (GPtrArray *store_array, const gchar *search,
+zif_store_array_search_details (GPtrArray *store_array, gchar **search,
ZifStoreArrayErrorCb error_cb, gpointer user_data,
GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
@@ -580,7 +579,7 @@ zif_store_array_search_details (GPtrArray *store_array, const gchar *search,
* Since: 0.0.1
**/
GPtrArray *
-zif_store_array_search_group (GPtrArray *store_array, const gchar *group_enum,
+zif_store_array_search_group (GPtrArray *store_array, gchar **group_enum,
ZifStoreArrayErrorCb error_cb, gpointer user_data,
GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
@@ -606,7 +605,7 @@ zif_store_array_search_group (GPtrArray *store_array, const gchar *group_enum,
* Since: 0.0.1
**/
GPtrArray *
-zif_store_array_search_category (GPtrArray *store_array, const gchar *group_id,
+zif_store_array_search_category (GPtrArray *store_array, gchar **group_id,
ZifStoreArrayErrorCb error_cb, gpointer user_data,
GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
@@ -663,7 +662,7 @@ out:
* Since: 0.0.1
**/
GPtrArray *
-zif_store_array_search_file (GPtrArray *store_array, const gchar *search,
+zif_store_array_search_file (GPtrArray *store_array, gchar **search,
ZifStoreArrayErrorCb error_cb, gpointer user_data,
GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
@@ -718,7 +717,7 @@ zif_store_array_get_updates (GPtrArray *store_array, GPtrArray *packages,
GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
- return zif_store_array_repos_search (store_array, PK_ROLE_ENUM_GET_UPDATES, (gchar *) packages,
+ return zif_store_array_repos_search (store_array, PK_ROLE_ENUM_GET_UPDATES, (gchar **) packages,
error_cb, user_data, cancellable, completion, error);
}
@@ -739,14 +738,14 @@ zif_store_array_get_updates (GPtrArray *store_array, GPtrArray *packages,
* Since: 0.0.1
**/
GPtrArray *
-zif_store_array_what_provides (GPtrArray *store_array, const gchar *search,
+zif_store_array_what_provides (GPtrArray *store_array, gchar **search,
ZifStoreArrayErrorCb error_cb, gpointer user_data,
GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
/* if this is a path, then we use the file list and treat like a SearchFile */
- if (g_str_has_prefix (search, "/")) {
+ if (g_str_has_prefix (search[0], "/")) {
return zif_store_array_repos_search (store_array, PK_ROLE_ENUM_SEARCH_FILE, search,
error_cb, user_data, cancellable, completion, error);
}
diff --git a/backends/yum/libzif/zif-store-array.h b/backends/yum/libzif/zif-store-array.h
index 23eeed3..a214cc3 100644
--- a/backends/yum/libzif/zif-store-array.h
+++ b/backends/yum/libzif/zif-store-array.h
@@ -73,49 +73,49 @@ gboolean zif_store_array_refresh (GPtrArray *store_array,
ZifCompletion *completion,
GError **error);
GPtrArray *zif_store_array_resolve (GPtrArray *store_array,
- const gchar *search,
+ gchar **search,
ZifStoreArrayErrorCb error_cb,
gpointer user_data,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *zif_store_array_search_name (GPtrArray *store_array,
- const gchar *search,
+ gchar **search,
ZifStoreArrayErrorCb error_cb,
gpointer user_data,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *zif_store_array_search_details (GPtrArray *store_array,
- const gchar *search,
+ gchar **search,
ZifStoreArrayErrorCb error_cb,
gpointer user_data,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *zif_store_array_search_group (GPtrArray *store_array,
- const gchar *group_enum,
+ gchar **group_enum,
ZifStoreArrayErrorCb error_cb,
gpointer user_data,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *zif_store_array_search_category (GPtrArray *store_array,
- const gchar *group_id,
+ gchar **group_id,
ZifStoreArrayErrorCb error_cb,
gpointer user_data,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *zif_store_array_search_file (GPtrArray *store_array,
- const gchar *search,
+ gchar **search,
ZifStoreArrayErrorCb error_cb,
gpointer user_data,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *zif_store_array_what_provides (GPtrArray *store_array,
- const gchar *search,
+ gchar **search,
ZifStoreArrayErrorCb error_cb,
gpointer user_data,
GCancellable *cancellable,
diff --git a/backends/yum/libzif/zif-store-local.c b/backends/yum/libzif/zif-store-local.c
index 6b45237..0c830c0 100644
--- a/backends/yum/libzif/zif-store-local.c
+++ b/backends/yum/libzif/zif-store-local.c
@@ -49,7 +49,6 @@
#include "zif-lock.h"
#include "egg-debug.h"
-#include "egg-string.h"
#define ZIF_STORE_LOCAL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_STORE_LOCAL, ZifStoreLocalPrivate))
@@ -196,9 +195,9 @@ out:
* zif_store_local_search_name:
**/
static GPtrArray *
-zif_store_local_search_name (ZifStore *store, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_store_local_search_name (ZifStore *store, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
- guint i;
+ guint i, j;
GPtrArray *array = NULL;
ZifPackage *package;
const gchar *package_id;
@@ -258,8 +257,12 @@ zif_store_local_search_name (ZifStore *store, const gchar *search, GCancellable
package = g_ptr_array_index (local->priv->packages, i);
package_id = zif_package_get_id (package);
split = pk_package_id_split (package_id);
- if (strcasestr (split[PK_PACKAGE_ID_NAME], search) != NULL)
- g_ptr_array_add (array, g_object_ref (package));
+ for (j=0; search[j] != NULL; j++) {
+ if (strcasestr (split[PK_PACKAGE_ID_NAME], search[j]) != NULL) {
+ g_ptr_array_add (array, g_object_ref (package));
+ break;
+ }
+ }
g_strfreev (split);
/* this section done */
@@ -276,9 +279,9 @@ out:
* zif_store_local_search_category:
**/
static GPtrArray *
-zif_store_local_search_category (ZifStore *store, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_store_local_search_category (ZifStore *store, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
- guint i;
+ guint i, j;
GPtrArray *array = NULL;
ZifPackage *package;
ZifString *category;
@@ -336,8 +339,12 @@ zif_store_local_search_category (ZifStore *store, const gchar *search, GCancella
for (i=0;i<local->priv->packages->len;i++) {
package = g_ptr_array_index (local->priv->packages, i);
category = zif_package_get_category (package, NULL);
- if (strcmp (zif_string_get_value (category), search) == 0)
- g_ptr_array_add (array, g_object_ref (package));
+ for (j=0; search[j] != NULL; j++) {
+ if (g_strcmp0 (zif_string_get_value (category), search[j]) == 0) {
+ g_ptr_array_add (array, g_object_ref (package));
+ break;
+ }
+ }
zif_string_unref (category);
/* this section done */
@@ -354,9 +361,9 @@ out:
* zif_store_local_earch_details:
**/
static GPtrArray *
-zif_store_local_search_details (ZifStore *store, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_store_local_search_details (ZifStore *store, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
- guint i;
+ guint i, j;
GPtrArray *array = NULL;
ZifPackage *package;
const gchar *package_id;
@@ -418,10 +425,15 @@ zif_store_local_search_details (ZifStore *store, const gchar *search, GCancellab
package_id = zif_package_get_id (package);
description = zif_package_get_description (package, NULL);
split = pk_package_id_split (package_id);
- if (strcasestr (split[PK_PACKAGE_ID_NAME], search) != NULL)
- g_ptr_array_add (array, g_object_ref (package));
- else if (strcasestr (zif_string_get_value (description), search) != NULL)
- g_ptr_array_add (array, g_object_ref (package));
+ for (j=0; search[j] != NULL; j++) {
+ if (strcasestr (split[PK_PACKAGE_ID_NAME], search[j]) != NULL) {
+ g_ptr_array_add (array, g_object_ref (package));
+ break;
+ } else if (strcasestr (zif_string_get_value (description), search[j]) != NULL) {
+ g_ptr_array_add (array, g_object_ref (package));
+ break;
+ }
+ }
zif_string_unref (description);
g_strfreev (split);
@@ -439,9 +451,9 @@ out:
* zif_store_local_search_group:
**/
static GPtrArray *
-zif_store_local_search_group (ZifStore *store, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_store_local_search_group (ZifStore *store, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
- guint i;
+ guint i, j;
GPtrArray *array = NULL;
ZifPackage *package;
PkGroupEnum group_tmp;
@@ -495,13 +507,17 @@ zif_store_local_search_group (ZifStore *store, const gchar *search, GCancellable
zif_completion_set_number_steps (completion_local, local->priv->packages->len);
/* iterate list */
- group = pk_group_enum_from_text (search);
array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
for (i=0;i<local->priv->packages->len;i++) {
package = g_ptr_array_index (local->priv->packages, i);
- group_tmp = zif_package_get_group (package, NULL);
- if (group == group_tmp)
- g_ptr_array_add (array, g_object_ref (package));
+ for (j=0; search[j] != NULL; j++) {
+ group = pk_group_enum_from_text (search[j]);
+ group_tmp = zif_package_get_group (package, NULL);
+ if (group == group_tmp) {
+ g_ptr_array_add (array, g_object_ref (package));
+ break;
+ }
+ }
/* this section done */
zif_completion_done (completion_local);
@@ -517,9 +533,9 @@ out:
* zif_store_local_search_file:
**/
static GPtrArray *
-zif_store_local_search_file (ZifStore *store, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_store_local_search_file (ZifStore *store, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
- guint i, j;
+ guint i, j, l;
GPtrArray *array = NULL;
ZifPackage *package;
GPtrArray *files;
@@ -587,8 +603,12 @@ zif_store_local_search_file (ZifStore *store, const gchar *search, GCancellable
}
for (j=0; j<files->len; j++) {
filename = g_ptr_array_index (files, j);
- if (g_strcmp0 (search, filename) == 0)
- g_ptr_array_add (array, g_object_ref (package));
+ for (l=0; search[l] != NULL; l++) {
+ if (g_strcmp0 (search[l], filename) == 0) {
+ g_ptr_array_add (array, g_object_ref (package));
+ break;
+ }
+ }
}
g_ptr_array_unref (files);
@@ -603,9 +623,9 @@ out:
* zif_store_local_resolve:
**/
static GPtrArray *
-zif_store_local_resolve (ZifStore *store, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_store_local_resolve (ZifStore *store, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
- guint i;
+ guint i, j;
GPtrArray *array = NULL;
ZifPackage *package;
const gchar *package_id;
@@ -665,8 +685,12 @@ zif_store_local_resolve (ZifStore *store, const gchar *search, GCancellable *can
package = g_ptr_array_index (local->priv->packages, i);
package_id = zif_package_get_id (package);
split = pk_package_id_split (package_id);
- if (strcmp (split[PK_PACKAGE_ID_NAME], search) == 0)
- g_ptr_array_add (array, g_object_ref (package));
+ for (j=0; search[j] != NULL; j++) {
+ if (strcmp (split[PK_PACKAGE_ID_NAME], search[j]) == 0) {
+ g_ptr_array_add (array, g_object_ref (package));
+ break;
+ }
+ }
g_strfreev (split);
/* this section done */
@@ -683,10 +707,10 @@ out:
* zif_store_local_what_provides:
**/
static GPtrArray *
-zif_store_local_what_provides (ZifStore *store, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_store_local_what_provides (ZifStore *store, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
guint i;
- guint j;
+ guint j, k;
GPtrArray *array = NULL;
ZifPackage *package;
GPtrArray *provides;
@@ -747,9 +771,11 @@ zif_store_local_what_provides (ZifStore *store, const gchar *search, GCancellabl
provides = zif_package_get_provides (package, NULL);
for (j=0; j<provides->len; j++) {
provide = g_ptr_array_index (provides, j);
- if (strcmp (provide->name, search) == 0) {
- g_ptr_array_add (array, g_object_ref (package));
- break;
+ for (k=0; search[k] != NULL; k++) {
+ if (g_strcmp0 (provide->name, search[k]) == 0) {
+ g_ptr_array_add (array, g_object_ref (package));
+ break;
+ }
}
}
@@ -1215,7 +1241,7 @@ zif_store_local_test (EggTest *test)
egg_test_title (test, "get id");
package_id = zif_package_get_id (package);
split = pk_package_id_split (package_id);
- if (egg_strequal (split[PK_PACKAGE_ID_NAME], "PackageKit"))
+ if (g_strcmp0 (split[PK_PACKAGE_ID_NAME], "PackageKit") == 0)
egg_test_success (test, NULL);
else
egg_test_failed (test, "incorrect name: %s", split[PK_PACKAGE_ID_NAME]);
@@ -1232,7 +1258,7 @@ zif_store_local_test (EggTest *test)
/************************************************************/
egg_test_title (test, "get summary");
string = zif_package_get_summary (package, NULL);
- if (egg_strequal (zif_string_get_value (string), "Package management service"))
+ if (g_strcmp0 (zif_string_get_value(string), "Package management service") == 0)
egg_test_success (test, NULL);
else
egg_test_failed (test, "incorrect summary: %s", zif_string_get_value (string));
@@ -1241,7 +1267,7 @@ zif_store_local_test (EggTest *test)
/************************************************************/
egg_test_title (test, "get license");
string = zif_package_get_license (package, NULL);
- if (egg_strequal (zif_string_get_value (string), "GPLv2+"))
+ if (g_strcmp0 (zif_string_get_value(string), "GPLv2+") == 0)
egg_test_success (test, NULL);
else
egg_test_failed (test, "incorrect license: %s", zif_string_get_value (string));
@@ -1250,7 +1276,7 @@ zif_store_local_test (EggTest *test)
/************************************************************/
egg_test_title (test, "get category");
string = zif_package_get_category (package, NULL);
- if (egg_strequal (zif_string_get_value (string), "System Environment/Libraries"))
+ if (g_strcmp0 (zif_string_get_value(string), "System Environment/Libraries") == 0)
egg_test_success (test, NULL);
else
egg_test_failed (test, "incorrect category: %s", zif_string_get_value (string));
diff --git a/backends/yum/libzif/zif-store-remote.c b/backends/yum/libzif/zif-store-remote.c
index 69729d0..ba60afa 100644
--- a/backends/yum/libzif/zif-store-remote.c
+++ b/backends/yum/libzif/zif-store-remote.c
@@ -43,7 +43,8 @@
#include "zif-package-remote.h"
#include "zif-md-comps.h"
#include "zif-md-updateinfo.h"
-#include "zif-md-filelists.h"
+#include "zif-md-filelists-sql.h"
+#include "zif-md-filelists-xml.h"
#include "zif-md-metalink.h"
#include "zif-md-mirrorlist.h"
#include "zif-md-other-sql.h"
@@ -55,7 +56,6 @@
#include "zif-utils.h"
#include "egg-debug.h"
-#include "egg-string.h"
#define ZIF_STORE_REMOTE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_STORE_REMOTE, ZifStoreRemotePrivate))
@@ -81,10 +81,11 @@ struct _ZifStoreRemotePrivate
gboolean enabled;
gboolean loaded;
gboolean loaded_metadata;
- ZifMd *md_other_db;
- ZifMd *md_primary_db;
+ ZifMd *md_other_sql;
+ ZifMd *md_primary_sql;
ZifMd *md_primary_xml;
- ZifMd *md_filelists;
+ ZifMd *md_filelists_sql;
+ ZifMd *md_filelists_xml;
ZifMd *md_metalink;
ZifMd *md_mirrorlist;
ZifMd *md_comps;
@@ -125,8 +126,8 @@ zif_store_remote_get_primary (ZifStoreRemote *store)
{
g_return_val_if_fail (ZIF_IS_STORE_REMOTE (store), NULL);
- if (zif_md_get_location (store->priv->md_primary_db) != NULL)
- return store->priv->md_primary_db;
+ if (zif_md_get_location (store->priv->md_primary_sql) != NULL)
+ return store->priv->md_primary_sql;
if (zif_md_get_location (store->priv->md_primary_xml) != NULL)
return store->priv->md_primary_xml;
@@ -135,6 +136,23 @@ zif_store_remote_get_primary (ZifStoreRemote *store)
}
/**
+ * zif_store_remote_get_filelists:
+ **/
+static ZifMd *
+zif_store_remote_get_filelists (ZifStoreRemote *store)
+{
+ g_return_val_if_fail (ZIF_IS_STORE_REMOTE (store), NULL);
+
+ if (zif_md_get_location (store->priv->md_filelists_sql) != NULL)
+ return store->priv->md_filelists_sql;
+ if (zif_md_get_location (store->priv->md_filelists_xml) != NULL)
+ return store->priv->md_filelists_xml;
+
+ /* this should never happen */
+ return NULL;
+}
+
+/**
* zif_store_remote_get_md_from_type:
**/
static ZifMd *
@@ -144,13 +162,15 @@ zif_store_remote_get_md_from_type (ZifStoreRemote *store, ZifMdType type)
g_return_val_if_fail (type != ZIF_MD_TYPE_UNKNOWN, NULL);
if (type == ZIF_MD_TYPE_FILELISTS_SQL)
- return store->priv->md_filelists;
+ return store->priv->md_filelists_sql;
+ if (type == ZIF_MD_TYPE_FILELISTS_XML)
+ return store->priv->md_filelists_xml;
if (type == ZIF_MD_TYPE_PRIMARY_SQL)
- return store->priv->md_primary_db;
+ return store->priv->md_primary_sql;
if (type == ZIF_MD_TYPE_PRIMARY_XML)
return store->priv->md_primary_xml;
if (type == ZIF_MD_TYPE_OTHER_SQL)
- return store->priv->md_other_db;
+ return store->priv->md_other_sql;
if (type == ZIF_MD_TYPE_COMPS_GZ)
return store->priv->md_comps;
if (type == ZIF_MD_TYPE_UPDATEINFO)
@@ -540,17 +560,30 @@ ZifUpdate *
zif_store_remote_get_update_detail (ZifStoreRemote *store, const gchar *package_id,
GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
- ZifUpdate *update = NULL;
- ZifCompletion *completion_local;
- GPtrArray *array = NULL;
- GError *error_local = NULL;
+ const gchar *pkgid;
gboolean ret;
+ guint i;
+ GError *error_local = NULL;
+ GPtrArray *array = NULL;
+ GPtrArray *array_installed = NULL;
+ GPtrArray *changelog = NULL;
+ GPtrArray *packages = NULL;
+ ZifChangeset *changeset;
+ ZifCompletion *completion_local;
+ ZifMd *md;
+ ZifPackage *package_installed = NULL;
+ ZifUpdate *update = NULL;
+ gchar **split = NULL;
+ gchar **split_installed = NULL;
+ ZifStoreLocal *store_local = NULL;
+ const gchar *version;
+ gchar *to_array[] = { NULL, NULL };
/* setup completion */
if (store->priv->loaded_metadata)
- zif_completion_set_number_steps (completion, 1);
+ zif_completion_set_number_steps (completion, 4);
else
- zif_completion_set_number_steps (completion, 2);
+ zif_completion_set_number_steps (completion, 5);
/* if not already loaded, load */
if (!store->priv->loaded_metadata) {
@@ -572,22 +605,104 @@ zif_store_remote_get_update_detail (ZifStoreRemote *store, const gchar *package_
array = zif_md_updateinfo_get_detail_for_package (ZIF_MD_UPDATEINFO (store->priv->md_updateinfo), package_id,
cancellable, completion_local, &error_local);
if (array == NULL) {
+ /* lets try this again with fresh metadata */
+ g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
+ "failed to find any details in updateinfo (but referenced in primary): %s", error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+ if (array->len != 1) {
+ /* FIXME: is this valid? */
+ g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
+ "invalid number of update entries: %i", array->len);
+ goto out;
+ }
+
+ /* get ZifPackage for package-id */
+ md = zif_store_remote_get_primary (store);
+ packages = zif_md_find_package (md, package_id, cancellable, completion_local, &error_local);
+ if (packages == NULL) {
+ g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
+ "cannot find package in primary repo: %s", error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+ /* FIXME: non-fatal? */
+ if (packages->len == 0) {
+ g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
+ "cannot find package in primary repo: %s", package_id);
+ goto out;
+ }
+
+ /* this section done */
+ zif_completion_done (completion);
+
+ /* get pkgid */
+ pkgid = zif_package_remote_get_pkgid (ZIF_PACKAGE_REMOTE (g_ptr_array_index (packages, 0)));
+
+ /* get changelog and add to ZifUpdate */
+ completion_local = zif_completion_get_child (completion);
+ changelog = zif_md_get_changelog (ZIF_MD (store->priv->md_other_sql), pkgid, cancellable, completion_local, &error_local);
+ if (changelog == NULL) {
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
- "failed to find any details: %s", error_local->message);
+ "failed to get changelog: %s", error_local->message);
g_error_free (error_local);
goto out;
}
- if (array->len == 1) {
- update = g_object_ref (g_ptr_array_index (array, 0));
+
+ /* this section done */
+ zif_completion_done (completion);
+
+ /* get the newest installed package with this name */
+ completion_local = zif_completion_get_child (completion);
+ split = pk_package_id_split (package_id);
+ store_local = zif_store_local_new ();
+ to_array[0] = split[PK_PACKAGE_ID_NAME];
+ array_installed = zif_store_resolve (ZIF_STORE (store_local), to_array, cancellable, completion_local, &error_local);
+ if (array_installed == NULL) {
+ g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
+ "failed to resolve installed package for update: %s", error_local->message);
+ g_error_free (error_local);
goto out;
}
- /* FIXME: is this valid? */
- g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
- "invalid number of update entries: %i", array->len);
+ /* this section done */
+ zif_completion_done (completion);
+
+ /* get newest, ignore error */
+ package_installed = zif_package_array_get_newest (array_installed, NULL);
+ split_installed = pk_package_id_split (zif_package_get_package_id (package_installed));
+
+ /* add the changesets (the changelog) to the update */
+ update = g_object_ref (g_ptr_array_index (array, 0));
+ for (i=0; i<changelog->len; i++) {
+ changeset = g_ptr_array_index (changelog, i);
+ zif_update_add_changeset (update, changeset);
+
+ /* abort when the changeset is older than what we have installed */
+ version = zif_changeset_get_version (changeset);
+ if (version != NULL &&
+ zif_compare_evr (split_installed[PK_PACKAGE_ID_VERSION], version) >= 0)
+ break;
+ }
+
+ /* this section done */
+ zif_completion_done (completion);
out:
+ g_strfreev (split);
+ g_strfreev (split_installed);
+ if (changelog != NULL)
+ g_ptr_array_unref (changelog);
if (array != NULL)
g_ptr_array_unref (array);
+ if (array_installed != NULL)
+ g_ptr_array_unref (array_installed);
+ if (packages != NULL)
+ g_ptr_array_unref (packages);
+ if (package_installed != NULL)
+ g_object_unref (package_installed);
+ if (store_local != NULL)
+ g_object_unref (store_local);
return update;
}
@@ -1210,7 +1325,10 @@ zif_store_remote_load (ZifStore *store, GCancellable *cancellable, ZifCompletion
}
/* we need either a base url or mirror list for an enabled store */
- if (remote->priv->enabled && remote->priv->baseurls->len == 0 && remote->priv->metalink == NULL && remote->priv->mirrorlist == NULL) {
+ if (remote->priv->enabled &&
+ remote->priv->baseurls->len == 0 &&
+ remote->priv->metalink == NULL &&
+ remote->priv->mirrorlist == NULL) {
g_set_error_literal (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
"baseurl, metalink or mirrorlist required");
ret = FALSE;
@@ -1481,7 +1599,7 @@ zif_store_remote_print (ZifStore *store)
* zif_store_remote_resolve:
**/
static GPtrArray *
-zif_store_remote_resolve (ZifStore *store, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_store_remote_resolve (ZifStore *store, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
gboolean ret;
GError *error_local = NULL;
@@ -1536,7 +1654,7 @@ out:
* zif_store_remote_search_name:
**/
static GPtrArray *
-zif_store_remote_search_name (ZifStore *store, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_store_remote_search_name (ZifStore *store, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
gboolean ret;
GError *error_local = NULL;
@@ -1591,7 +1709,7 @@ out:
* zif_store_remote_search_details:
**/
static GPtrArray *
-zif_store_remote_search_details (ZifStore *store, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_store_remote_search_details (ZifStore *store, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
gboolean ret;
GError *error_local = NULL;
@@ -1653,6 +1771,7 @@ zif_store_remote_search_category_resolve (ZifStore *store, const gchar *name, GC
GPtrArray *array = NULL;
ZifPackage *package = NULL;
ZifCompletion *completion_local;
+ const gchar *to_array[] = { NULL, NULL };
store_local = zif_store_local_new ();
@@ -1661,7 +1780,8 @@ zif_store_remote_search_category_resolve (ZifStore *store, const gchar *name, GC
/* is already installed? */
completion_local = zif_completion_get_child (completion);
- array = zif_store_resolve (ZIF_STORE (store_local), name, cancellable, completion_local, &error_local);
+ to_array[0] = name;
+ array = zif_store_resolve (ZIF_STORE (store_local), (gchar**) to_array, cancellable, completion_local, &error_local);
if (array == NULL) {
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
"failed to resolve installed package %s: %s", name, error_local->message);
@@ -1685,7 +1805,8 @@ zif_store_remote_search_category_resolve (ZifStore *store, const gchar *name, GC
/* is available in this repo? */
completion_local = zif_completion_get_child (completion);
- array = zif_store_resolve (ZIF_STORE (store), name, cancellable, completion_local, &error_local);
+ to_array[0] = name;
+ array = zif_store_resolve (ZIF_STORE (store), (gchar**)to_array, cancellable, completion_local, &error_local);
if (array == NULL) {
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
"failed to resolve installed package %s: %s", name, error_local->message);
@@ -1716,7 +1837,7 @@ out:
* zif_store_remote_search_category:
**/
static GPtrArray *
-zif_store_remote_search_category (ZifStore *store, const gchar *group_id, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_store_remote_search_category (ZifStore *store, gchar **group_id, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
gboolean ret;
GError *error_local = NULL;
@@ -1773,7 +1894,7 @@ zif_store_remote_search_category (ZifStore *store, const gchar *group_id, GCance
/* get package names for group */
completion_local = zif_completion_get_child (completion);
array_names = zif_md_comps_get_packages_for_group (ZIF_MD_COMPS (remote->priv->md_comps),
- group_id, cancellable, completion_local, &error_local);
+ group_id[0], cancellable, completion_local, &error_local);
if (array_names == NULL) {
/* ignore when group isn't present, TODO: use GError code */
if (g_str_has_prefix (error_local->message, "could not find group")) {
@@ -1782,7 +1903,7 @@ zif_store_remote_search_category (ZifStore *store, const gchar *group_id, GCance
goto out;
}
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
- "failed to get packages for group %s: %s", group_id, error_local->message);
+ "failed to get packages for group %s: %s", group_id[0], error_local->message);
g_error_free (error_local);
goto out;
}
@@ -1813,7 +1934,7 @@ zif_store_remote_search_category (ZifStore *store, const gchar *group_id, GCance
}
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
- "failed to get resolve %s for %s: %s", name, group_id, error_local->message);
+ "failed to get resolve %s for %s: %s", name, group_id[0], error_local->message);
g_error_free (error_local);
/* undo all our hard work */
@@ -1841,7 +1962,7 @@ out:
* zif_store_remote_search_group:
**/
static GPtrArray *
-zif_store_remote_search_group (ZifStore *store, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_store_remote_search_group (ZifStore *store, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
gboolean ret;
GError *error_local = NULL;
@@ -2044,7 +2165,6 @@ zif_store_remote_get_categories (ZifStore *store, GCancellable *cancellable, Zif
ZifStoreRemote *remote = ZIF_STORE_REMOTE (store);
ZifCompletion *completion_local;
ZifCompletion *completion_loop;
-// PkCategory *comps_category;
PkCategory *group;
PkCategory *category;
PkCategory *category_tmp;
@@ -2166,7 +2286,7 @@ zif_store_remote_get_updates (ZifStore *store, GPtrArray *packages,
GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
gboolean ret;
- GPtrArray *updates;
+ GPtrArray *updates = NULL;
GPtrArray *array = NULL;
ZifPackage *package;
ZifPackage *update;
@@ -2180,6 +2300,7 @@ zif_store_remote_get_updates (ZifStore *store, GPtrArray *packages,
gchar **split;
gchar **split_update;
ZifMd *primary;
+ gchar **resolve_array = NULL;
/* not locked */
ret = zif_lock_is_locked (remote->priv->lock, NULL);
@@ -2216,25 +2337,32 @@ zif_store_remote_get_updates (ZifStore *store, GPtrArray *packages,
/* get primary */
primary = zif_store_remote_get_primary (remote);
- /* find each one in a remote repo */
- egg_debug ("searching with %i packages", packages->len);
+ /* get the array of packages to resolve */
+ resolve_array = g_new0 (gchar *, packages->len + 1);
for (i=0; i<packages->len; i++) {
package = ZIF_PACKAGE (g_ptr_array_index (packages, i));
package_id = zif_package_get_id (package);
-
- /* find package name in repo */
- completion_local = zif_completion_get_child (completion);
split = pk_package_id_split (package_id);
- updates = zif_md_resolve (primary, split[PK_PACKAGE_ID_NAME],
- cancellable, completion_local, NULL);
+ resolve_array[i] = g_strdup (split[PK_PACKAGE_ID_NAME]);
g_strfreev (split);
- if (updates == NULL) {
- egg_debug ("not found %s", package_id);
- continue;
- }
+ }
+
+ /* resolve all of them in one fell swoop */
+ completion_local = zif_completion_get_child (completion);
+ updates = zif_md_resolve (primary, resolve_array,
+ cancellable, completion_local, &error_local);
+ if (updates == NULL) {
+ egg_error ("failed to resolve: %s", error_local->message);
+ g_error_free (error_local);
+ }
- /* some repos contain lots of versions of one package */
- zif_package_array_filter_newest (updates);
+ /* some repos contain lots of versions of one package */
+ zif_package_array_filter_newest (updates);
+
+ /* find each one in a remote repo */
+ for (i=0; i<packages->len; i++) {
+ package = ZIF_PACKAGE (g_ptr_array_index (packages, i));
+ package_id = zif_package_get_id (package);
/* find updates */
for (j=0; j<updates->len; j++) {
@@ -2242,6 +2370,8 @@ zif_store_remote_get_updates (ZifStore *store, GPtrArray *packages,
/* newer? */
val = zif_package_compare (update, package);
+ if (val == G_MAXINT)
+ continue;
if (val > 0) {
package_id_update = zif_package_get_id (update);
split = pk_package_id_split (package_id);
@@ -2255,12 +2385,14 @@ zif_store_remote_get_updates (ZifStore *store, GPtrArray *packages,
g_ptr_array_add (array, g_object_ref (update));
}
}
- g_ptr_array_unref (updates);
}
/* this section done */
zif_completion_done (completion);
out:
+ g_strfreev (resolve_array);
+ if (updates != NULL)
+ g_ptr_array_unref (updates);
return array;
}
@@ -2268,7 +2400,7 @@ out:
* zif_store_remote_what_provides:
**/
static GPtrArray *
-zif_store_remote_what_provides (ZifStore *store, const gchar *search,
+zif_store_remote_what_provides (ZifStore *store, gchar **search,
GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
gboolean ret;
@@ -2323,7 +2455,7 @@ out:
* zif_store_remote_search_file:
**/
static GPtrArray *
-zif_store_remote_search_file (ZifStore *store, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_store_remote_search_file (ZifStore *store, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
gboolean ret;
GError *error_local = NULL;
@@ -2336,6 +2468,8 @@ zif_store_remote_search_file (ZifStore *store, const gchar *search, GCancellable
guint i, j;
ZifStoreRemote *remote = ZIF_STORE_REMOTE (store);
ZifMd *primary;
+ ZifMd *filelists;
+ const gchar *to_array[] = { NULL, NULL };
/* not locked */
ret = zif_lock_is_locked (remote->priv->lock, NULL);
@@ -2368,7 +2502,9 @@ zif_store_remote_search_file (ZifStore *store, const gchar *search, GCancellable
/* gets a list of pkgId's that match this file */
completion_local = zif_completion_get_child (completion);
- pkgids = zif_md_filelists_search_file (ZIF_MD_FILELISTS (remote->priv->md_filelists), search, cancellable, completion_local, &error_local);
+ filelists = zif_store_remote_get_filelists (remote);
+ pkgids = zif_md_search_file (filelists,
+ search, cancellable, completion_local, &error_local);
if (pkgids == NULL) {
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED,
"failed to load get list of pkgids: %s", error_local->message);
@@ -2389,7 +2525,8 @@ zif_store_remote_search_file (ZifStore *store, const gchar *search, GCancellable
/* get the results (should just be one) */
completion_local = zif_completion_get_child (completion);
- tmp = zif_md_search_pkgid (primary, pkgid, cancellable, completion_local, &error_local);
+ to_array[0] = pkgid;
+ tmp = zif_md_search_pkgid (primary, (gchar **) to_array, cancellable, completion_local, &error_local);
if (tmp == NULL) {
g_set_error (error, ZIF_STORE_ERROR, ZIF_STORE_ERROR_FAILED_TO_FIND,
"failed to resolve pkgId to package: %s", error_local->message);
@@ -2629,10 +2766,11 @@ zif_store_remote_finalize (GObject *object)
g_free (store->priv->repomd_filename);
g_free (store->priv->directory);
- g_object_unref (store->priv->md_other_db);
- g_object_unref (store->priv->md_primary_db);
+ g_object_unref (store->priv->md_other_sql);
+ g_object_unref (store->priv->md_primary_sql);
g_object_unref (store->priv->md_primary_xml);
- g_object_unref (store->priv->md_filelists);
+ g_object_unref (store->priv->md_filelists_sql);
+ g_object_unref (store->priv->md_filelists_xml);
g_object_unref (store->priv->md_comps);
g_object_unref (store->priv->md_updateinfo);
g_object_unref (store->priv->md_metalink);
@@ -2703,9 +2841,10 @@ zif_store_remote_init (ZifStoreRemote *store)
store->priv->config = zif_config_new ();
store->priv->monitor = zif_monitor_new ();
store->priv->lock = zif_lock_new ();
- store->priv->md_filelists = ZIF_MD (zif_md_filelists_new ());
- store->priv->md_other_db = ZIF_MD (zif_md_other_sql_new ());
- store->priv->md_primary_db = ZIF_MD (zif_md_primary_sql_new ());
+ store->priv->md_filelists_sql = ZIF_MD (zif_md_filelists_sql_new ());
+ store->priv->md_filelists_xml = ZIF_MD (zif_md_filelists_xml_new ());
+ store->priv->md_other_sql = ZIF_MD (zif_md_other_sql_new ());
+ store->priv->md_primary_sql = ZIF_MD (zif_md_primary_sql_new ());
store->priv->md_primary_xml = ZIF_MD (zif_md_primary_xml_new ());
store->priv->md_metalink = ZIF_MD (zif_md_metalink_new ());
store->priv->md_mirrorlist = ZIF_MD (zif_md_mirrorlist_new ());
@@ -2785,6 +2924,7 @@ zif_store_remote_test (EggTest *test)
const gchar *id;
PkCategory *category;
guint i;
+ const gchar *in_array[] = { NULL, NULL };
if (!egg_test_start (test, "ZifStoreRemote"))
return;
@@ -2857,7 +2997,7 @@ zif_store_remote_test (EggTest *test)
/************************************************************/
egg_test_title (test, "get id");
id = zif_store_get_id (ZIF_STORE (store));
- if (egg_strequal (id, "fedora"))
+ if (g_strcmp0 (id, "fedora") == 0)
egg_test_success (test, NULL);
else
egg_test_failed (test, "invalid id '%s'", id);
@@ -2865,7 +3005,7 @@ zif_store_remote_test (EggTest *test)
/************************************************************/
egg_test_title (test, "get name");
id = zif_store_remote_get_name (store, NULL, completion, NULL);
- if (egg_strequal (id, "Fedora 11 - i386"))
+ if (g_strcmp0 (id, "Fedora 11 - i386") == 0)
egg_test_success (test, NULL);
else
egg_test_failed (test, "invalid name '%s'", id);
@@ -2882,7 +3022,8 @@ zif_store_remote_test (EggTest *test)
/************************************************************/
egg_test_title (test, "resolve");
zif_completion_reset (completion);
- array = zif_store_remote_resolve (ZIF_STORE (store), "kernel", NULL, completion, &error);
+ in_array[0] = "kernel";
+ array = zif_store_remote_resolve (ZIF_STORE (store), (gchar**)in_array, NULL, completion, &error);
if (array != NULL)
egg_test_success (test, NULL);
else
@@ -2900,7 +3041,8 @@ zif_store_remote_test (EggTest *test)
/************************************************************/
egg_test_title (test, "search name");
zif_completion_reset (completion);
- array = zif_store_remote_search_name (ZIF_STORE (store), "power-manager", NULL, completion, &error);
+ in_array[0] = "power-manager";
+ array = zif_store_remote_search_name (ZIF_STORE (store), (gchar**)in_array, NULL, completion, &error);
if (array != NULL)
egg_test_success (test, NULL);
else
@@ -2918,7 +3060,8 @@ zif_store_remote_test (EggTest *test)
/************************************************************/
egg_test_title (test, "search details");
zif_completion_reset (completion);
- array = zif_store_remote_search_details (ZIF_STORE (store), "browser plugin", NULL, completion, &error);
+ in_array[0] = "browser plugin";
+ array = zif_store_remote_search_details (ZIF_STORE (store), (gchar**)in_array, NULL, completion, &error);
if (array != NULL)
egg_test_success (test, NULL);
else
@@ -2936,7 +3079,8 @@ zif_store_remote_test (EggTest *test)
/************************************************************/
egg_test_title (test, "search file");
zif_completion_reset (completion);
- array = zif_store_remote_search_file (ZIF_STORE (store), "/usr/bin/gnome-power-manager", NULL, completion, &error);
+ in_array[0] = "/usr/bin/gnome-power-manager";
+ array = zif_store_remote_search_file (ZIF_STORE (store), (gchar**)in_array, NULL, completion, &error);
if (array != NULL)
egg_test_success (test, NULL);
else
diff --git a/backends/yum/libzif/zif-store.c b/backends/yum/libzif/zif-store.c
index fe8b704..958cfe4 100644
--- a/backends/yum/libzif/zif-store.c
+++ b/backends/yum/libzif/zif-store.c
@@ -37,7 +37,6 @@
#include "zif-package.h"
#include "egg-debug.h"
-#include "egg-string.h"
G_DEFINE_TYPE (ZifStore, zif_store, G_TYPE_OBJECT)
@@ -166,7 +165,7 @@ zif_store_refresh (ZifStore *store, gboolean force, GCancellable *cancellable, Z
* Since: 0.0.1
**/
GPtrArray *
-zif_store_search_name (ZifStore *store, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_store_search_name (ZifStore *store, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
ZifStoreClass *klass = ZIF_STORE_GET_CLASS (store);
@@ -199,7 +198,7 @@ zif_store_search_name (ZifStore *store, const gchar *search, GCancellable *cance
* Since: 0.0.1
**/
GPtrArray *
-zif_store_search_category (ZifStore *store, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_store_search_category (ZifStore *store, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
ZifStoreClass *klass = ZIF_STORE_GET_CLASS (store);
@@ -232,7 +231,7 @@ zif_store_search_category (ZifStore *store, const gchar *search, GCancellable *c
* Since: 0.0.1
**/
GPtrArray *
-zif_store_search_details (ZifStore *store, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_store_search_details (ZifStore *store, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
ZifStoreClass *klass = ZIF_STORE_GET_CLASS (store);
@@ -264,7 +263,7 @@ zif_store_search_details (ZifStore *store, const gchar *search, GCancellable *ca
* Since: 0.0.1
**/
GPtrArray *
-zif_store_search_group (ZifStore *store, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_store_search_group (ZifStore *store, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
ZifStoreClass *klass = ZIF_STORE_GET_CLASS (store);
@@ -297,7 +296,7 @@ zif_store_search_group (ZifStore *store, const gchar *search, GCancellable *canc
* Since: 0.0.1
**/
GPtrArray *
-zif_store_search_file (ZifStore *store, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_store_search_file (ZifStore *store, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
ZifStoreClass *klass = ZIF_STORE_GET_CLASS (store);
@@ -330,7 +329,7 @@ zif_store_search_file (ZifStore *store, const gchar *search, GCancellable *cance
* Since: 0.0.1
**/
GPtrArray *
-zif_store_resolve (ZifStore *store, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_store_resolve (ZifStore *store, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
ZifStoreClass *klass = ZIF_STORE_GET_CLASS (store);
@@ -363,7 +362,7 @@ zif_store_resolve (ZifStore *store, const gchar *search, GCancellable *cancellab
* Since: 0.0.1
**/
GPtrArray *
-zif_store_what_provides (ZifStore *store, const gchar *search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+zif_store_what_provides (ZifStore *store, gchar **search, GCancellable *cancellable, ZifCompletion *completion, GError **error)
{
ZifStoreClass *klass = ZIF_STORE_GET_CLASS (store);
diff --git a/backends/yum/libzif/zif-store.h b/backends/yum/libzif/zif-store.h
index a0bf212..8828227 100644
--- a/backends/yum/libzif/zif-store.h
+++ b/backends/yum/libzif/zif-store.h
@@ -71,37 +71,37 @@ struct _ZifStoreClass
ZifCompletion *completion,
GError **error);
GPtrArray *(*search_name) (ZifStore *store,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *(*search_category) (ZifStore *store,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *(*search_details) (ZifStore *store,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *(*search_group) (ZifStore *store,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *(*search_file) (ZifStore *store,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *(*resolve) (ZifStore *store,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *(*what_provides) (ZifStore *store,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
@@ -156,37 +156,37 @@ gboolean zif_store_refresh (ZifStore *store,
ZifCompletion *completion,
GError **error);
GPtrArray *zif_store_search_name (ZifStore *store,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *zif_store_search_category (ZifStore *store,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *zif_store_search_details (ZifStore *store,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *zif_store_search_group (ZifStore *store,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *zif_store_search_file (ZifStore *store,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *zif_store_resolve (ZifStore *store,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
GPtrArray *zif_store_what_provides (ZifStore *store,
- const gchar *search,
+ gchar **search,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
diff --git a/backends/yum/libzif/zif-update.c b/backends/yum/libzif/zif-update.c
index 3ba9dcf..fadabcf 100644
--- a/backends/yum/libzif/zif-update.c
+++ b/backends/yum/libzif/zif-update.c
@@ -46,8 +46,10 @@ struct _ZifUpdatePrivate
gchar *title;
gchar *description;
gchar *issued;
+ gboolean reboot;
GPtrArray *update_infos;
GPtrArray *packages;
+ GPtrArray *changelog;
};
enum {
@@ -58,6 +60,7 @@ enum {
PROP_TITLE,
PROP_DESCRIPTION,
PROP_ISSUED,
+ PROP_REBOOT,
PROP_LAST
};
@@ -166,6 +169,23 @@ zif_update_get_issued (ZifUpdate *update)
}
/**
+ * zif_update_get_reboot:
+ * @update: the #ZifUpdate object
+ *
+ * Gets if the update requires a reboot.
+ *
+ * Return value: %TRUE for a reboot.
+ *
+ * Since: 0.0.1
+ **/
+gboolean
+zif_update_get_reboot (ZifUpdate *update)
+{
+ g_return_val_if_fail (ZIF_IS_UPDATE (update), FALSE);
+ return update->priv->reboot;
+}
+
+/**
* zif_update_get_update_infos:
* @update: the #ZifUpdate object
*
@@ -200,6 +220,23 @@ zif_update_get_packages (ZifUpdate *update)
}
/**
+ * zif_update_get_changelog:
+ * @update: the #ZifUpdate object
+ *
+ * Gets the changelog for this update.
+ *
+ * Return value: A #GPtrArray of #ZifChangeset's, or %NULL.
+ *
+ * Since: 0.0.1
+ **/
+GPtrArray *
+zif_update_get_changelog (ZifUpdate *update)
+{
+ g_return_val_if_fail (ZIF_IS_UPDATE (update), NULL);
+ return update->priv->changelog;
+}
+
+/**
* zif_update_set_state:
* @update: the #ZifUpdate object
* @state: If the update is state
@@ -308,6 +345,23 @@ zif_update_set_issued (ZifUpdate *update, const gchar *issued)
}
/**
+ * zif_update_set_reboot:
+ * @update: the #ZifUpdate object
+ * @reboot: if the update requires a reboot
+ *
+ * Sets the update reboot status
+ *
+ * Since: 0.0.1
+ **/
+void
+zif_update_set_reboot (ZifUpdate *update, gboolean reboot)
+{
+ g_return_if_fail (ZIF_IS_UPDATE (update));
+
+ update->priv->reboot = reboot;
+}
+
+/**
* zif_update_add_update_info:
* @update: the #ZifUpdate object
* @update_info: the #ZifUpdateInfo
@@ -342,6 +396,23 @@ zif_update_add_package (ZifUpdate *update, ZifPackage *package)
}
/**
+ * zif_update_add_changeset:
+ * @update: the #ZifUpdate object
+ * @package: the #ZifPackage
+ *
+ * Adds a changeset to the update.
+ *
+ * Since: 0.0.1
+ **/
+void
+zif_update_add_changeset (ZifUpdate *update, ZifChangeset *changeset)
+{
+ g_return_if_fail (ZIF_IS_UPDATE (update));
+ g_return_if_fail (changeset != NULL);
+ g_ptr_array_add (update->priv->changelog, g_object_ref (changeset));
+}
+
+/**
* zif_update_get_property:
**/
static void
@@ -369,6 +440,9 @@ zif_update_get_property (GObject *object, guint prop_id, GValue *value, GParamSp
case PROP_ISSUED:
g_value_set_string (value, priv->issued);
break;
+ case PROP_REBOOT:
+ g_value_set_boolean (value, priv->reboot);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -401,6 +475,7 @@ zif_update_finalize (GObject *object)
g_free (update->priv->issued);
g_ptr_array_unref (update->priv->update_infos);
g_ptr_array_unref (update->priv->packages);
+ g_ptr_array_unref (update->priv->changelog);
G_OBJECT_CLASS (zif_update_parent_class)->finalize (object);
}
@@ -477,6 +552,16 @@ zif_update_class_init (ZifUpdateClass *klass)
G_PARAM_READABLE);
g_object_class_install_property (object_class, PROP_ISSUED, pspec);
+ /**
+ * ZifUpdate:reboot:
+ *
+ * Since: 0.0.1
+ */
+ pspec = g_param_spec_boolean ("reboot", NULL, NULL,
+ FALSE,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, PROP_REBOOT, pspec);
+
g_type_class_add_private (klass, sizeof (ZifUpdatePrivate));
}
@@ -493,8 +578,10 @@ zif_update_init (ZifUpdate *update)
update->priv->title = NULL;
update->priv->description = NULL;
update->priv->issued = NULL;
+ update->priv->reboot = FALSE;
update->priv->update_infos = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
update->priv->packages = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+ update->priv->changelog = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
}
/**
diff --git a/backends/yum/libzif/zif-update.h b/backends/yum/libzif/zif-update.h
index 881b0d8..11e6ddd 100644
--- a/backends/yum/libzif/zif-update.h
+++ b/backends/yum/libzif/zif-update.h
@@ -47,6 +47,7 @@ typedef struct _ZifUpdatePrivate ZifUpdatePrivate;
typedef struct _ZifUpdateClass ZifUpdateClass;
#include "zif-package.h"
+#include "zif-changeset.h"
struct _ZifUpdate
{
@@ -69,8 +70,10 @@ const gchar *zif_update_get_id (ZifUpdate *update);
const gchar *zif_update_get_title (ZifUpdate *update);
const gchar *zif_update_get_description (ZifUpdate *update);
const gchar *zif_update_get_issued (ZifUpdate *update);
+gboolean zif_update_get_reboot (ZifUpdate *update);
GPtrArray *zif_update_get_update_infos (ZifUpdate *update);
GPtrArray *zif_update_get_packages (ZifUpdate *update);
+GPtrArray *zif_update_get_changelog (ZifUpdate *update);
/* internal setters: TODO, in seporate -internal header file */
void zif_update_set_state (ZifUpdate *update,
@@ -85,10 +88,14 @@ void zif_update_set_description (ZifUpdate *update,
const gchar *description);
void zif_update_set_issued (ZifUpdate *update,
const gchar *issued);
+void zif_update_set_reboot (ZifUpdate *update,
+ gboolean reboot);
void zif_update_add_update_info (ZifUpdate *update,
ZifUpdateInfo *update_info);
void zif_update_add_package (ZifUpdate *update,
ZifPackage *package);
+void zif_update_add_changeset (ZifUpdate *update,
+ ZifChangeset *changeset);
G_END_DECLS
diff --git a/backends/yum/libzif/zif-utils.c b/backends/yum/libzif/zif-utils.c
index a384cd8..a310674 100644
--- a/backends/yum/libzif/zif-utils.c
+++ b/backends/yum/libzif/zif-utils.c
@@ -40,7 +40,6 @@
#include <packagekit-glib2/packagekit.h>
#include "egg-debug.h"
-#include "egg-string.h"
#include "zif-utils.h"
#include "zif-package.h"
@@ -655,7 +654,7 @@ zif_utils_test (EggTest *test)
************************************************************/
egg_test_title (test, "no epoch");
package_id = zif_package_id_from_nevra ("kernel", 0, "0.0.1", "1", "i386", "fedora");
- if (egg_strequal (package_id, "kernel;0.0.1-1;i386;fedora"))
+ if (g_strcmp0 (package_id, "kernel;0.0.1-1;i386;fedora") == 0)
egg_test_success (test, NULL);
else
egg_test_failed (test, "incorrect package_id '%s'", package_id);
@@ -664,7 +663,7 @@ zif_utils_test (EggTest *test)
/************************************************************/
egg_test_title (test, "epoch value");
package_id = zif_package_id_from_nevra ("kernel", 2, "0.0.1", "1", "i386", "fedora");
- if (egg_strequal (package_id, "kernel;2:0.0.1-1;i386;fedora"))
+ if (g_strcmp0 (package_id, "kernel;2:0.0.1-1;i386;fedora") == 0)
egg_test_success (test, NULL);
else
egg_test_failed (test, "incorrect package_id '%s'", package_id);
@@ -699,7 +698,7 @@ zif_utils_test (EggTest *test)
egg_test_title (test, "convert evr");
evr = g_strdup ("7:1.0.0-6");
zif_package_convert_evr (evr, &e, &v, &r);
- if (egg_strequal (e, "7") && egg_strequal (v, "1.0.0") && egg_strequal (r, "6"))
+ if (g_strcmp0 (e, "7") == 0 && g_strcmp0 (v, "1.0.0") == 0 && g_strcmp0 (r, "6") == 0)
egg_test_success (test, NULL);
else
egg_test_failed (test, "incorrect evr '%s','%s','%s'", e, v, r);
@@ -709,7 +708,7 @@ zif_utils_test (EggTest *test)
egg_test_title (test, "convert evr no epoch");
evr = g_strdup ("1.0.0-6");
zif_package_convert_evr (evr, &e, &v, &r);
- if (e == NULL && egg_strequal (v, "1.0.0") && egg_strequal (r, "6"))
+ if (e == NULL && g_strcmp0 (v, "1.0.0") == 0 && g_strcmp0 (r, "6") == 0)
egg_test_success (test, NULL);
else
egg_test_failed (test, "incorrect evr '%s','%s','%s'", e, v, r);
@@ -719,7 +718,7 @@ zif_utils_test (EggTest *test)
egg_test_title (test, "convert evr no epoch or release");
evr = g_strdup ("1.0.0");
zif_package_convert_evr (evr, &e, &v, &r);
- if (e == NULL && egg_strequal (v, "1.0.0") && r == NULL)
+ if (e == NULL && g_strcmp0 (v, "1.0.0") == 0 && r == NULL)
egg_test_success (test, NULL);
else
egg_test_failed (test, "incorrect evr '%s','%s','%s'", e, v, r);
diff --git a/backends/yum/pk-backend-yum.c b/backends/yum/pk-backend-yum.c
index 32b1846..7cd488c 100644
--- a/backends/yum/pk-backend-yum.c
+++ b/backends/yum/pk-backend-yum.c
@@ -212,23 +212,6 @@ backend_unlock (PkBackend *backend)
return ret;
}
-
-/**
- * backend_add_package_array:
- **/
-static gboolean
-backend_add_package_array (GPtrArray *array, GPtrArray *add)
-{
- guint i;
- ZifPackage *package;
-
- for (i=0;i<add->len;i++) {
- package = g_ptr_array_index (add, i);
- g_ptr_array_add (array, g_object_ref (package));
- }
- return TRUE;
-}
-
/**
* backend_filter_package_array_newest:
*
@@ -410,46 +393,6 @@ backend_error_handler_cb (GPtrArray *store_array, const GError *error, PkBackend
}
/**
- * backend_search_thread_get_array:
- */
-static GPtrArray *
-backend_search_thread_get_array (PkBackend *backend, GPtrArray *store_array, const gchar *search, ZifCompletion *completion, GError **error)
-{
- PkRoleEnum role;
- GPtrArray *array = NULL;
-
- role = pk_backend_get_role (backend);
- if (role == PK_ROLE_ENUM_SEARCH_NAME) {
- array = zif_store_array_search_name (store_array, search,
- (ZifStoreArrayErrorCb) backend_error_handler_cb, backend,
- priv->cancellable, completion, error);
- } else if (role == PK_ROLE_ENUM_SEARCH_DETAILS) {
- array = zif_store_array_search_details (store_array, search,
- (ZifStoreArrayErrorCb) backend_error_handler_cb, backend,
- priv->cancellable, completion, error);
- } else if (role == PK_ROLE_ENUM_SEARCH_GROUP) {
- array = zif_store_array_search_category (store_array, search,
- (ZifStoreArrayErrorCb) backend_error_handler_cb, backend,
- priv->cancellable, completion, error);
- } else if (role == PK_ROLE_ENUM_SEARCH_FILE) {
- array = zif_store_array_search_file (store_array, search,
- (ZifStoreArrayErrorCb) backend_error_handler_cb, backend,
- priv->cancellable, completion, error);
- } else if (role == PK_ROLE_ENUM_RESOLVE) {
- array = zif_store_array_resolve (store_array, search,
- (ZifStoreArrayErrorCb) backend_error_handler_cb, backend,
- priv->cancellable, completion, error);
- } else if (role == PK_ROLE_ENUM_WHAT_PROVIDES) {
- array = zif_store_array_what_provides (store_array, search,
- (ZifStoreArrayErrorCb) backend_error_handler_cb, backend,
- priv->cancellable, completion, error);
- } else {
- g_set_error (error, 1, 0, "does not support: %s", pk_role_enum_to_string (role));
- }
- return array;
-}
-
-/**
* backend_get_default_store_array_for_filter:
*/
static GPtrArray *
@@ -499,11 +442,8 @@ backend_search_thread (PkBackend *backend)
PkBitfield filters;
PkRoleEnum role;
ZifCompletion *completion_local;
- ZifCompletion *completion_loop;
GError *error = NULL;
gchar **search;
- const gchar *search_tmp;
- guint i;
filters = (PkBitfield) pk_backend_get_uint (backend, "filters");
role = pk_backend_get_role (backend);
@@ -556,34 +496,43 @@ backend_search_thread (PkBackend *backend)
}
array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
- completion_local = zif_completion_get_child (priv->completion);
- zif_completion_set_number_steps (completion_local, g_strv_length (search));
-
/* do OR search */
- for (i=0; search[i] != NULL; i++) {
- /* make loop deeper */
- completion_loop = zif_completion_get_child (completion_local);
-
- /* strip off the prefix '@' */
- search_tmp = search[i];
- if (g_str_has_prefix (search_tmp, "@"))
- search_tmp = search_tmp+1;
-
- /* get the results */
- egg_debug ("searching for: %s", search_tmp);
- result = backend_search_thread_get_array (backend, store_array, search_tmp, completion_loop, &error);
- if (result == NULL) {
- pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "failed to search: %s", error->message);
- g_error_free (error);
- goto out;
- }
-
- /* this section done */
- zif_completion_done (completion_local);
-
- backend_add_package_array (array, result);
- g_ptr_array_unref (result);
+ completion_local = zif_completion_get_child (priv->completion);
+ if (role == PK_ROLE_ENUM_SEARCH_NAME) {
+ array = zif_store_array_search_name (store_array, search,
+ (ZifStoreArrayErrorCb) backend_error_handler_cb, backend,
+ priv->cancellable, completion_local, &error);
+ } else if (role == PK_ROLE_ENUM_SEARCH_DETAILS) {
+ array = zif_store_array_search_details (store_array, search,
+ (ZifStoreArrayErrorCb) backend_error_handler_cb, backend,
+ priv->cancellable, completion_local, &error);
+ } else if (role == PK_ROLE_ENUM_SEARCH_GROUP) {
+ array = zif_store_array_search_category (store_array, search,
+ (ZifStoreArrayErrorCb) backend_error_handler_cb, backend,
+ priv->cancellable, completion_local, &error);
+ } else if (role == PK_ROLE_ENUM_SEARCH_FILE) {
+ array = zif_store_array_search_file (store_array, search,
+ (ZifStoreArrayErrorCb) backend_error_handler_cb, backend,
+ priv->cancellable, completion_local, &error);
+ } else if (role == PK_ROLE_ENUM_RESOLVE) {
+ array = zif_store_array_resolve (store_array, search,
+ (ZifStoreArrayErrorCb) backend_error_handler_cb, backend,
+ priv->cancellable, completion_local, &error);
+ } else if (role == PK_ROLE_ENUM_WHAT_PROVIDES) {
+ array = zif_store_array_what_provides (store_array, search,
+ (ZifStoreArrayErrorCb) backend_error_handler_cb, backend,
+ priv->cancellable, completion_local, &error);
}
+ if (array == NULL) {
+ pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, "failed to search: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
+
+// /* strip off the prefix '@' */
+// search_tmp = search[i];
+// if (g_str_has_prefix (search_tmp, "@"))
+// search_tmp = search_tmp+1;
}
/* this section done */
diff --git a/src/egg-string.c b/src/egg-string.c
index 5542e46..f04f94c 100644
--- a/src/egg-string.c
+++ b/src/egg-string.c
@@ -220,7 +220,7 @@ egg_strreplace (const gchar *text, const gchar *find, const gchar *replace)
gchar *retval;
/* common case, not found */
- if (strstr (text, find) == NULL) {
+ if (g_strstr_len (text, -1, find) == NULL) {
return g_strdup (text);
}
commit 91ebf46a4e1b717493a82abf7b3ff76bc47d34e8
Author: ruigo <ruigo at fedoraproject.org>
Date: Wed Apr 14 21:09:18 2010 +0000
l10n: Updates to Portuguese (pt) translation
Transmitted-via: Transifex (translate.fedoraproject.org)
diff --git a/po/pt.po b/po/pt.po
index c378ba8..7bc9d15 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -3,8 +3,8 @@ msgid ""
msgstr ""
"Project-Id-Version: packagekit\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-16 14:09+0000\n"
-"PO-Revision-Date: 2010-03-16 14:16+0100\n"
+"POT-Creation-Date: 2010-04-14 19:46+0000\n"
+"PO-Revision-Date: 2010-04-14 22:07+0100\n"
"Last-Translator: Rui Gouveia <rui.gouveia at gmail.com>\n"
"Language-Team: trans-pt at fedoraproject.org\n"
"Language: pt\n"
@@ -19,115 +19,115 @@ msgstr ""
#. TRANSLATORS: this is an atomic transaction
#. TRANSLATORS: the role is the point of the transaction, e.g. update-system
-#: ../client/pk-console.c:175 ../client/pk-console.c:597
+#: ../client/pk-console.c:176 ../client/pk-console.c:598
msgid "Transaction"
msgstr "Transacção"
#. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:177
+#: ../client/pk-console.c:178
msgid "System time"
msgstr "Hora do sistema"
#. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "Succeeded"
msgstr "Sucesso"
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "True"
msgstr "Verdadeiro"
-#: ../client/pk-console.c:179
+#: ../client/pk-console.c:180
msgid "False"
msgstr "Falso"
#. TRANSLATORS: this is the transactions role, e.g. "update-system"
#. TRANSLATORS: the trasaction role, e.g. update-system
-#: ../client/pk-console.c:181 ../src/pk-polkit-action-lookup.c:332
+#: ../client/pk-console.c:182 ../src/pk-polkit-action-lookup.c:332
msgid "Role"
msgstr "Função"
#. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:186
+#: ../client/pk-console.c:187
msgid "Duration"
msgstr "Duração"
-#: ../client/pk-console.c:186
+#: ../client/pk-console.c:187
msgid "(seconds)"
msgstr "(segundos)"
#. TRANSLATORS: this is The command line used to do the action
#. TRANSLATORS: the command line of the thing that wants the authentication
-#: ../client/pk-console.c:190 ../src/pk-polkit-action-lookup.c:346
+#: ../client/pk-console.c:191 ../src/pk-polkit-action-lookup.c:346
msgid "Command line"
msgstr "Linha de comando"
#. TRANSLATORS: this is the user ID of the user that started the action
-#: ../client/pk-console.c:192
+#: ../client/pk-console.c:193
msgid "User ID"
msgstr "ID de Utilizador"
#. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:199
+#: ../client/pk-console.c:200
msgid "Username"
msgstr "Nome do utilizador"
#. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:203
+#: ../client/pk-console.c:204
msgid "Real name"
msgstr "Nome real"
-#: ../client/pk-console.c:211
+#: ../client/pk-console.c:212
msgid "Affected packages:"
msgstr "Pacotes afectados"
-#: ../client/pk-console.c:213
+#: ../client/pk-console.c:214
msgid "Affected packages: None"
msgstr "Pacotes afectados: Nenhum"
#. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:248
+#: ../client/pk-console.c:249
msgid "Distribution"
msgstr "Distribuição"
#. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:250
+#: ../client/pk-console.c:251
msgid "Type"
msgstr "Tipo"
#. TRANSLATORS: this is any summary text describing the upgrade
#. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:252 ../client/pk-console.c:291
+#: ../client/pk-console.c:253 ../client/pk-console.c:292
msgid "Summary"
msgstr "Sumário"
#. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:280
+#: ../client/pk-console.c:281
msgid "Category"
msgstr "CategoriÂa"
#. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:282
+#: ../client/pk-console.c:283
msgid "ID"
msgstr "ID"
#. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:285
+#: ../client/pk-console.c:286
msgid "Parent"
msgstr "Pai"
#. TRANSLATORS: this is the name of the parent group
-#: ../client/pk-console.c:288
+#: ../client/pk-console.c:289
msgid "Name"
msgstr "Nome"
#. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:294
+#: ../client/pk-console.c:295
msgid "Icon"
msgstr "Ãcone"
#. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:340
+#: ../client/pk-console.c:341
msgid "Details about the update:"
msgstr "Detalhes acerca da actualização:"
@@ -136,7 +136,7 @@ msgstr "Detalhes acerca da actualização:"
#. TRANSLATORS: the package that is not signed by a known key
#. TRANSLATORS: the package name that was trying to be installed
#. TRANSLATORS: title, the names of the packages that the method is processing
-#: ../client/pk-console.c:346 ../client/pk-console.c:616
+#: ../client/pk-console.c:347 ../client/pk-console.c:617
#: ../lib/packagekit-glib2/pk-task-text.c:126
#: ../lib/packagekit-glib2/pk-task-text.c:208
#: ../src/pk-polkit-action-lookup.c:357
@@ -146,166 +146,166 @@ msgstr[0] "Pacote"
msgstr[1] "Pacotes"
#. TRANSLATORS: details about the update, any packages that this update updates
-#: ../client/pk-console.c:349
+#: ../client/pk-console.c:350
msgid "Updates"
msgstr "Actualizações"
#. TRANSLATORS: details about the update, any packages that this update obsoletes
-#: ../client/pk-console.c:353
+#: ../client/pk-console.c:354
msgid "Obsoletes"
msgstr "Torna absoleto"
#. TRANSLATORS: details about the update, the vendor URLs
#. TRANSLATORS: the vendor (e.g. vmware) that is providing the EULA
-#: ../client/pk-console.c:357 ../lib/packagekit-glib2/pk-task-text.c:211
+#: ../client/pk-console.c:358 ../lib/packagekit-glib2/pk-task-text.c:211
msgid "Vendor"
msgstr "Fabricante"
#. TRANSLATORS: details about the update, the bugzilla URLs
-#: ../client/pk-console.c:361
+#: ../client/pk-console.c:362
msgid "Bugzilla"
msgstr "Bugzilla"
#. TRANSLATORS: details about the update, the CVE URLs
-#: ../client/pk-console.c:365
+#: ../client/pk-console.c:366
msgid "CVE"
msgstr "CVE"
#. TRANSLATORS: details about the update, if the package requires a restart
-#: ../client/pk-console.c:369
+#: ../client/pk-console.c:370
msgid "Restart"
msgstr "Reiniciar"
#. TRANSLATORS: details about the update, any description of the update
-#: ../client/pk-console.c:373
+#: ../client/pk-console.c:374
msgid "Update text"
msgstr "Actualizar texto"
#. TRANSLATORS: details about the update, the changelog for the package
-#: ../client/pk-console.c:377
+#: ../client/pk-console.c:378
msgid "Changes"
msgstr "Alterações"
#. TRANSLATORS: details about the update, the ongoing state of the update
-#: ../client/pk-console.c:381
+#: ../client/pk-console.c:382
msgid "State"
msgstr "Estado"
#. TRANSLATORS: details about the update, date the update was issued
-#: ../client/pk-console.c:385
+#: ../client/pk-console.c:386
msgid "Issued"
msgstr "Emitido"
#. TRANSLATORS: details about the update, date the update was updated
#. TRANSLATORS: The action of the package, in past tense
-#: ../client/pk-console.c:389 ../lib/packagekit-glib2/pk-console-shared.c:511
+#: ../client/pk-console.c:390 ../lib/packagekit-glib2/pk-console-shared.c:511
msgid "Updated"
msgstr "Actualizado"
#. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:425
+#: ../client/pk-console.c:426
msgid "Enabled"
msgstr "Activado"
#. TRANSLATORS: if the repo is disabled
-#: ../client/pk-console.c:428
+#: ../client/pk-console.c:429
msgid "Disabled"
msgstr "Inactivo"
#. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:460
+#: ../client/pk-console.c:461
msgid "System restart required by:"
msgstr "Reinicialização do sistema requerida por:"
#. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:463
+#: ../client/pk-console.c:464
msgid "Session restart required:"
msgstr "Reinicialização da sessão requerida:"
#. TRANSLATORS: a package requires the system to be restarted due to a security update
-#: ../client/pk-console.c:466
+#: ../client/pk-console.c:467
msgid "System restart (security) required by:"
msgstr "Reinicialização do sistema (segurança) requerida por:"
#. TRANSLATORS: a package requires the session to be restarted due to a security update
-#: ../client/pk-console.c:469
+#: ../client/pk-console.c:470
msgid "Session restart (security) required:"
msgstr "Reinicialização da sessão (segurança) requerida:"
#. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:472
+#: ../client/pk-console.c:473
msgid "Application restart required by:"
msgstr "Reinicialização da aplicação requerida por:"
#. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:507
+#: ../client/pk-console.c:508
msgid "Package description"
msgstr "Descrição do pacote"
#. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
-#: ../client/pk-console.c:538
+#: ../client/pk-console.c:539
msgid "Message:"
msgstr "Mensagem:"
#. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:559
+#: ../client/pk-console.c:560
msgid "No files"
msgstr "Sem ficheiros"
#. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:564
+#: ../client/pk-console.c:565
msgid "Package files"
msgstr "Ficheiros do pacote"
#. TRANSLATORS: the percentage complete of the transaction
-#: ../client/pk-console.c:632
+#: ../client/pk-console.c:633
msgid "Percentage"
msgstr "Percentagem"
#. TRANSLATORS: the status of the transaction (e.g. downloading)
-#: ../client/pk-console.c:650
+#: ../client/pk-console.c:651
msgid "Status"
msgstr "Estado"
#. TRANSLATORS: the results from the transaction
-#: ../client/pk-console.c:679
+#: ../client/pk-console.c:680
msgid "Results:"
msgstr "Resultados:"
#. TRANSLATORS: we failed to get any results, which is pretty fatal in my book
-#: ../client/pk-console.c:686
+#: ../client/pk-console.c:687
msgid "Fatal error"
msgstr "Erro fatal"
#. TRANSLATORS: the transaction failed in a way we could not expect
-#: ../client/pk-console.c:695
-#: ../contrib/command-not-found/pk-command-not-found.c:432
-#: ../contrib/command-not-found/pk-command-not-found.c:603
+#: ../client/pk-console.c:696
+#: ../contrib/command-not-found/pk-command-not-found.c:433
+#: ../contrib/command-not-found/pk-command-not-found.c:606
msgid "The transaction failed"
msgstr "A transacção falhou"
#. TRANSLATORS: print a message when there are no updates
-#: ../client/pk-console.c:726
+#: ../client/pk-console.c:727
msgid "There are no updates available at this time."
msgstr "Não existem atualizações disponÃveis neste momento."
-#: ../client/pk-console.c:749
+#: ../client/pk-console.c:750
msgid "There are no upgrades available at this time."
msgstr "Não existem atualizações disponÃveis neste momento."
#. TRANSLATORS: a package needs to restart their system
-#: ../client/pk-console.c:816
+#: ../client/pk-console.c:817
msgid "Please restart the computer to complete the update."
msgstr "Por favor, reinicie o computador para completar a actualização."
#. TRANSLATORS: a package needs to restart the session
-#: ../client/pk-console.c:819
+#: ../client/pk-console.c:820
msgid "Please logout and login to complete the update."
msgstr ""
"Por favor, termine e volte a iniciar a sessão para completar a actualização."
#. TRANSLATORS: a package needs to restart their system (due to security)
-#: ../client/pk-console.c:822
+#: ../client/pk-console.c:823
msgid ""
"Please restart the computer to complete the update as important security "
"updates have been installed."
@@ -314,7 +314,7 @@ msgstr ""
"instaladas importantes actualizações de segurança."
#. TRANSLATORS: a package needs to restart the session (due to security)
-#: ../client/pk-console.c:825
+#: ../client/pk-console.c:826
msgid ""
"Please logout and login to complete the update as important security updates "
"have been installed."
@@ -323,29 +323,29 @@ msgstr ""
"pois foram instaladas importantes actualizações de segurança."
#. TRANSLATORS: The user used 'pkcon install dave.rpm' rather than 'pkcon install-local dave.rpm'
-#: ../client/pk-console.c:851
+#: ../client/pk-console.c:852
#, c-format
msgid ""
-"Extected package name, actually got file. Try using 'pkcon install-local %s' "
+"Expected package name, actually got file. Try using 'pkcon install-local %s' "
"instead."
msgstr ""
"Esperado nome de pacote, recebido nome de ficheiro. Alternativamente, tente "
"utilizar 'pkcon install-local %s'."
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:859
+#: ../client/pk-console.c:860
#, c-format
msgid "This tool could not find any available package: %s"
msgstr "Esta ferramenta não conseguiu encontrar nenhum pacote disponÃvel: %s"
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:887
+#: ../client/pk-console.c:888
#, c-format
msgid "This tool could not find the installed package: %s"
msgstr "Esta ferramenta não conseguiu encontrar o pacote instalado: %s"
#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:915 ../client/pk-console.c:943
+#: ../client/pk-console.c:916 ../client/pk-console.c:944
#, c-format
msgid "This tool could not find the package: %s"
msgstr "Esta ferramenta não conseguiu encontrar o pacote: %s"
@@ -354,184 +354,189 @@ msgstr "Esta ferramenta não conseguiu encontrar o pacote: %s"
#. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
#. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
#. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:971 ../client/pk-console.c:999
-#: ../client/pk-console.c:1027 ../client/pk-console.c:1055
-#: ../client/pk-console.c:1083
+#: ../client/pk-console.c:972 ../client/pk-console.c:1000
+#: ../client/pk-console.c:1028 ../client/pk-console.c:1056
+#: ../client/pk-console.c:1084
#, c-format
msgid "This tool could not find all the packages: %s"
msgstr "Esta ferramenta não conseguiu encontrar todos os pacotes: %s"
#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
-#: ../client/pk-console.c:1112
+#: ../client/pk-console.c:1113
msgid "The daemon crashed mid-transaction!"
msgstr "O daemon morreu a meio de uma transacção!"
#. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1146
+#: ../client/pk-console.c:1147
msgid "PackageKit Console Interface"
msgstr "Consola do PackaheKit"
#. these are commands we can use with pkcon
-#: ../client/pk-console.c:1148
+#: ../client/pk-console.c:1149
msgid "Subcommands:"
msgstr "Sub-comandos:"
#. TRANSLATORS: we keep a database updated with the time that an action was last executed
-#: ../client/pk-console.c:1227
+#: ../client/pk-console.c:1228
msgid "Failed to get the time since this action was last completed"
msgstr ""
"Não foi possÃvel obter a hora da última vez que esta acção foi concluÃda"
#. TRANSLATORS: command line argument, just show the version string
-#: ../client/pk-console.c:1263 ../client/pk-monitor.c:306
+#: ../client/pk-console.c:1267 ../client/pk-monitor.c:326
msgid "Show the program version and exit"
msgstr "Mostrar a versão da aplicação e terminar"
#. TRANSLATORS: command line argument, use a filter to narrow down results
-#: ../client/pk-console.c:1266
+#: ../client/pk-console.c:1270
msgid "Set the filter, e.g. installed"
msgstr "Configurar o filtro, exemplo, instalado"
#. TRANSLATORS: command line argument, work asynchronously
-#: ../client/pk-console.c:1269
+#: ../client/pk-console.c:1273
msgid "Exit without waiting for actions to complete"
msgstr "Sair sem esperar que as acções completem"
#. command line argument, do we ask questions
-#: ../client/pk-console.c:1272
+#: ../client/pk-console.c:1276
#: ../contrib/debuginfo-install/pk-debuginfo-install.c:527
msgid "Install the packages without asking for confirmation"
msgstr "Instalar os pacotes sem pedir por confirmação"
#. TRANSLATORS: command line argument, this command is not a priority
-#: ../client/pk-console.c:1275
+#: ../client/pk-console.c:1279
msgid "Run the command using idle network bandwidth and also using less power"
msgstr ""
"Executar o comando utilizando perÃodos de inactividade da rede e também "
"utilizando menos energia"
#. TRANSLATORS: command line argument, just output without fancy formatting
-#: ../client/pk-console.c:1278
+#: ../client/pk-console.c:1282
msgid ""
"Print to screen a machine readable output, rather than using animated widgets"
msgstr ""
"Escrever no ecrã o resultado legÃvel, ao invés de utilizar objectos animados"
#. TRANSLATORS: we failed to contact the daemon
-#: ../client/pk-console.c:1300
+#: ../client/pk-console.c:1304
msgid "Failed to contact PackageKit"
msgstr "Falhou o contacto com o PackageKit"
#. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1358
+#: ../client/pk-console.c:1365
+msgid "The proxy could not be set"
+msgstr "Não foi possÃvel definir o proxy"
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1377
msgid "The filter specified was invalid"
msgstr "O filtro especificado era inválido"
#. TRANSLATORS: a search type can be name, details, file, etc
-#: ../client/pk-console.c:1377
+#: ../client/pk-console.c:1396
msgid "A search type is required, e.g. name"
msgstr "Um tipo de pesquisa é necessário. Por exemplo, nome"
#. TRANSLATORS: the user needs to provide a search term
-#: ../client/pk-console.c:1384 ../client/pk-console.c:1396
-#: ../client/pk-console.c:1408 ../client/pk-console.c:1420
+#: ../client/pk-console.c:1403 ../client/pk-console.c:1415
+#: ../client/pk-console.c:1427 ../client/pk-console.c:1439
msgid "A search term is required"
msgstr "Um termo de pesquisa é necessário"
#. TRANSLATORS: the search type was provided, but invalid
-#: ../client/pk-console.c:1430
+#: ../client/pk-console.c:1449
msgid "Invalid search type"
msgstr "Tipo de pesquisa inválida"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1436
+#: ../client/pk-console.c:1455
msgid "A package name to install is required"
msgstr "à necessário indicar um nome de pacote a instalar"
#. TRANSLATORS: the user did not specify what they wanted to install
-#: ../client/pk-console.c:1445
+#: ../client/pk-console.c:1464
msgid "A filename to install is required"
msgstr "à necessário um nome de ficheiro a instalar"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1457
+#: ../client/pk-console.c:1476
msgid "A type, key_id and package_id are required"
msgstr "São necessários um tipo, id de chave e id de pacote"
#. TRANSLATORS: the user did not specify what they wanted to remove
-#: ../client/pk-console.c:1468
+#: ../client/pk-console.c:1487
msgid "A package name to remove is required"
msgstr "à necessário um nome de pacote para remover"
#. TRANSLATORS: the user did not specify anything about what to download or where
-#: ../client/pk-console.c:1477
+#: ../client/pk-console.c:1496
msgid "A destination directory and the package names to download are required"
msgstr ""
"São necessários uma directoria de destino assim como os nomes dos pacotes a "
"transferir"
#. TRANSLATORS: the directory does not exist, so we can't continue
-#: ../client/pk-console.c:1484
+#: ../client/pk-console.c:1503
msgid "Directory not found"
msgstr "Directório não encontrado"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1493
+#: ../client/pk-console.c:1512
msgid "A licence identifier (eula-id) is required"
msgstr "à necessário um identificador de licença (eula-id)"
#. TRANSLATORS: geeky error, 99.9999% of users won't see this
-#: ../client/pk-console.c:1504
+#: ../client/pk-console.c:1523
msgid "A transaction identifier (tid) is required"
msgstr "à necessário um identificador de transacção (tid)"
#. TRANSLATORS: The user did not specify a package name
-#: ../client/pk-console.c:1525
+#: ../client/pk-console.c:1544
msgid "A package name to resolve is required"
msgstr "à necessário indicar um nome de pacote"
#. TRANSLATORS: The user did not specify a repository (software source) name
-#: ../client/pk-console.c:1536 ../client/pk-console.c:1547
+#: ../client/pk-console.c:1555 ../client/pk-console.c:1566
msgid "A repository name is required"
msgstr "à obrigatório um nome de repositório"
#. TRANSLATORS: The user didn't provide any data
-#: ../client/pk-console.c:1558
+#: ../client/pk-console.c:1577
msgid "A repo name, parameter and value are required"
msgstr "à necessário indicar um repositório, parâmetro e valor"
#. TRANSLATORS: The user didn't specify what action to use
-#: ../client/pk-console.c:1575
+#: ../client/pk-console.c:1594
msgid "An action, e.g. 'update-system' is required"
msgstr "à necessária uma acção, por exemplo 'update-system'"
#. TRANSLATORS: The user specified an invalid action
-#: ../client/pk-console.c:1582
+#: ../client/pk-console.c:1601
msgid "A correct role is required"
msgstr "à necessária uma função correcta"
#. TRANSLATORS: The user did not provide a package name
#. TRANSLATORS: This is when the user fails to supply the package name
-#: ../client/pk-console.c:1592 ../client/pk-console.c:1607
-#: ../client/pk-console.c:1616 ../client/pk-console.c:1636
-#: ../client/pk-console.c:1645 ../client/pk-generate-pack.c:316
+#: ../client/pk-console.c:1611 ../client/pk-console.c:1626
+#: ../client/pk-console.c:1635 ../client/pk-console.c:1655
+#: ../client/pk-console.c:1664 ../client/pk-generate-pack.c:316
msgid "A package name is required"
msgstr "à obrigatório um nome de pacote"
#. TRANSLATORS: each package "provides" certain things, e.g. mime(gstreamer-decoder-mp3), the user didn't specify it
-#: ../client/pk-console.c:1625
+#: ../client/pk-console.c:1644
msgid "A package provide string is required"
msgstr ""
"à necessário especificar a string que define o que o pacote disponibiliza"
#. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:1705
+#: ../client/pk-console.c:1724
#, c-format
msgid "Option '%s' is not supported"
msgstr "A opção '%s' não é suportada"
#. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:1715
+#: ../client/pk-console.c:1734
msgid "Command failed"
msgstr "Comando falhou"
@@ -542,8 +547,7 @@ msgstr "Indique o nome do ficheiro para a lista de dependências a excluir"
#. TRANSLATORS: the output location
#: ../client/pk-generate-pack.c:258
-msgid ""
-"The output file or directory (the current directory is used if ommitted)"
+msgid "The output file or directory (the current directory is used if omitted)"
msgstr ""
"O ficheiro ou directório de destino (se omitido, é utilizado o directório "
"actual)"
@@ -573,9 +577,9 @@ msgstr "Seleccionou ambas as opções"
msgid "A output directory or file name is required"
msgstr "à necessário um directório de destino ou nome de ficheiro"
-#. TRANSLATORS: This is when the dameon is not-installed/broken and fails to startup
+#. TRANSLATORS: This is when the daemon is not-installed/broken and fails to startup
#: ../client/pk-generate-pack.c:342
-msgid "The dameon failed to startup"
+msgid "The daemon failed to startup"
msgstr "O serviço falhou o arranque"
#. TRANSLATORS: This is when the backend doesn't have the capability to get-depends
@@ -647,12 +651,12 @@ msgstr "\"Service pack\" criado '%s'"
msgid "Failed to create '%s': %s"
msgstr "Não foi possÃvel criar '%s': %s"
-#: ../client/pk-monitor.c:236
+#: ../client/pk-monitor.c:256
msgid "Failed to get daemon state"
msgstr "Falha ao obter o estado do serviço"
#. TRANSLATORS: this is a program that monitors PackageKit
-#: ../client/pk-monitor.c:322
+#: ../client/pk-monitor.c:342
msgid "PackageKit Monitor"
msgstr "Monitorizar o PackageKit"
@@ -711,44 +715,44 @@ msgid "Installing..."
msgstr "A instalar..."
#. TRANSLATORS: downloading repo data so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:365
+#: ../contrib/command-not-found/pk-command-not-found.c:366
msgid "Downloading details about the software sources."
msgstr "A descarregar detalhes acerca das fontes do software."
#. TRANSLATORS: downloading file lists so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:369
+#: ../contrib/command-not-found/pk-command-not-found.c:370
msgid "Downloading filelists (this may take some time to complete)."
msgstr ""
"A descarregar lista de ficheiros (isto pode demorar algum tempo para "
"concluir)."
#. TRANSLATORS: waiting for native lock
-#: ../contrib/command-not-found/pk-command-not-found.c:373
+#: ../contrib/command-not-found/pk-command-not-found.c:374
msgid "Waiting for package manager lock."
msgstr "A esperar pelo bloqueio do gestor de pacotes."
#. TRANSLATORS: loading package cache so we can search
-#: ../contrib/command-not-found/pk-command-not-found.c:377
+#: ../contrib/command-not-found/pk-command-not-found.c:378
msgid "Loading list of packages."
msgstr "A carregar lista de pacotes."
#. TRANSLATORS: we failed to find the package, this shouldn't happen
-#: ../contrib/command-not-found/pk-command-not-found.c:423
+#: ../contrib/command-not-found/pk-command-not-found.c:424
msgid "Failed to search for file"
msgstr "Não foi possÃvel encontrar o ficheiro"
#. TRANSLATORS: we failed to launch the executable, the error follows
-#: ../contrib/command-not-found/pk-command-not-found.c:566
+#: ../contrib/command-not-found/pk-command-not-found.c:569
msgid "Failed to launch:"
msgstr "Incapaz de iniciar:"
#. TRANSLATORS: we failed to install the package
-#: ../contrib/command-not-found/pk-command-not-found.c:594
+#: ../contrib/command-not-found/pk-command-not-found.c:597
msgid "Failed to install packages"
msgstr "Falhou a instalação dos pacotes"
#. TRANSLATORS: tool that gets called when the command is not found
-#: ../contrib/command-not-found/pk-command-not-found.c:670
+#: ../contrib/command-not-found/pk-command-not-found.c:673
msgid "PackageKit Command Not Found"
msgstr "Comando PackageKit não encontrado"
@@ -758,51 +762,51 @@ msgid "Command not found."
msgstr "Comando não encontrado."
#. TRANSLATORS: tell the user what we think the command is
-#: ../contrib/command-not-found/pk-command-not-found.c:706
+#: ../contrib/command-not-found/pk-command-not-found.c:717
msgid "Similar command is:"
msgstr "Comando semelhante é:"
#. TRANSLATORS: Ask the user if we should run the similar command
-#: ../contrib/command-not-found/pk-command-not-found.c:716
+#: ../contrib/command-not-found/pk-command-not-found.c:727
msgid "Run similar command:"
msgstr "Executar um comando semelhante:"
#. TRANSLATORS: show the user a list of commands that they could have meant
#. TRANSLATORS: show the user a list of commands we could run
-#: ../contrib/command-not-found/pk-command-not-found.c:730
-#: ../contrib/command-not-found/pk-command-not-found.c:739
+#: ../contrib/command-not-found/pk-command-not-found.c:741
+#: ../contrib/command-not-found/pk-command-not-found.c:750
msgid "Similar commands are:"
msgstr "Comandos semelhantes são:"
#. TRANSLATORS: ask the user to choose a file to run
-#: ../contrib/command-not-found/pk-command-not-found.c:746
+#: ../contrib/command-not-found/pk-command-not-found.c:757
msgid "Please choose a command to run"
msgstr "Por favor, escolha um comando para executar"
#. TRANSLATORS: tell the user what package provides the command
-#: ../contrib/command-not-found/pk-command-not-found.c:764
+#: ../contrib/command-not-found/pk-command-not-found.c:775
msgid "The package providing this file is:"
msgstr "O pacote que fornece este ficheiro é o:"
#. TRANSLATORS: as the user if we want to install a package to provide the command
-#: ../contrib/command-not-found/pk-command-not-found.c:769
+#: ../contrib/command-not-found/pk-command-not-found.c:780
#, c-format
msgid "Install package '%s' to provide command '%s'?"
msgstr "Instalar pacote '%s' para disponibilizar comando '%s'?"
#. TRANSLATORS: Show the user a list of packages that provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:793
+#: ../contrib/command-not-found/pk-command-not-found.c:804
msgid "Packages providing this file are:"
msgstr "Os pacotes que disponibilizam este ficheiro são:"
#. TRANSLATORS: Show the user a list of packages that they can install to provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:803
+#: ../contrib/command-not-found/pk-command-not-found.c:814
msgid "Suitable packages are:"
msgstr "Pacotes adequados são:"
#. get selection
#. TRANSLATORS: ask the user to choose a file to install
-#: ../contrib/command-not-found/pk-command-not-found.c:812
+#: ../contrib/command-not-found/pk-command-not-found.c:823
msgid "Please choose a package to install"
msgstr "Por favor, escolha um pacote para instalar"
@@ -2001,25 +2005,25 @@ msgid "Show debugging information for all files"
msgstr "Mostrar informação de depuração para todos os ficheiros"
#. TRANSLATORS: a list of modules to debug
-#: ../src/egg-debug.c:459
+#: ../src/egg-debug.c:458
msgid "Debug these specific modules"
msgstr "Depurar estes módulos especÃficos"
#. TRANSLATORS: a list of functions to debug
-#: ../src/egg-debug.c:462
+#: ../src/egg-debug.c:461
msgid "Debug these specific functions"
msgstr "Depurar estas funções especÃficas"
#. TRANSLATORS: save to a log
-#: ../src/egg-debug.c:465
+#: ../src/egg-debug.c:464
msgid "Log debugging data to a file"
msgstr "Registar dados de depuração para um ficheiro"
-#: ../src/egg-debug.c:469
+#: ../src/egg-debug.c:468
msgid "Debugging Options"
msgstr "Opções de depuração"
-#: ../src/egg-debug.c:469
+#: ../src/egg-debug.c:468
msgid "Show debugging options"
msgstr "Mostrar opções de depuração"
@@ -2168,6 +2172,3 @@ msgstr "Mostrar opções de depuração"
#~ msgid "Media ID"
#~ msgstr "ID do Suporte:"
-
-#~ msgid "The package could not be found"
-#~ msgstr "O pacote não foi encontrado"
commit 5835debdb751aae682cc8dd922039f5889370cb8
Author: Richard Hughes <richard at hughsie.com>
Date: Wed Apr 14 13:02:34 2010 +0100
yum: get the correct state for each update. Fixes rh#574658
diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index c85b915..67111a2 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -2564,6 +2564,11 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
self.message(MESSAGE_BACKEND_ERROR, "The packages '%s' will be updated before other packages" % msg)
pkgs = infra_pkgs
+ # get the list of installed updates as this is needed for get_applicable_notices()
+ installed_dict = {}
+ for pkgtup_updated, pkgtup_installed in self.yumbase.up.getUpdatesTuples():
+ installed_dict[pkgtup_installed[0]] = pkgtup_installed
+
md = self.updateMetadata
for pkg in unique(pkgs):
if pkgfilter.pre_process(pkg):
@@ -2579,14 +2584,18 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
except Exception, e:
self.error(ERROR_INTERNAL_ERROR, _format_str(traceback.format_exc()))
- # Get info about package in updates info
- notices = md.get_applicable_notices(pkg.pkgtup)
+ # fall back to this if there is no installed update or there is no metadata
status = INFO_NORMAL
- if notices:
- for (pkgtup, notice) in notices:
- status = self._get_status(notice)
- if status == INFO_SECURITY:
- break
+
+ # Get info about package in updates info (using the installed update of this name)
+ if installed_dict.has_key(pkg.name):
+ pkgtup = installed_dict[pkg.name]
+ notices = md.get_applicable_notices(pkgtup)
+ if notices:
+ for (pkgtup, notice) in notices:
+ status = self._get_status(notice)
+ if status == INFO_SECURITY:
+ break
pkgfilter.add_custom(pkg, status)
package_list = pkgfilter.post_process()
commit b65b14f8e232b9bcf09e538583b5c20401b4ca80
Author: Richard Hughes <richard at hughsie.com>
Date: Wed Apr 14 08:57:25 2010 +0100
trivial: sync up with libzif from git master
diff --git a/backends/yum/Makefile.am b/backends/yum/Makefile.am
index 9565231..241a8a7 100644
--- a/backends/yum/Makefile.am
+++ b/backends/yum/Makefile.am
@@ -58,6 +58,8 @@ libpk_backend_yum_la_SOURCES += \
libzif/zif-md-filelists.h \
libzif/zif-md-primary-sql.c \
libzif/zif-md-primary-sql.h \
+ libzif/zif-md-other-sql.c \
+ libzif/zif-md-other-sql.h \
libzif/zif-md-primary-xml.c \
libzif/zif-md-primary-xml.h \
libzif/zif-md-metalink.c \
@@ -72,6 +74,8 @@ libpk_backend_yum_la_SOURCES += \
libzif/zif-store-array.h \
libzif/zif-repos.c \
libzif/zif-repos.h \
+ libzif/zif-changeset.c \
+ libzif/zif-changeset.h \
libzif/zif-utils.c \
libzif/zif-utils.h \
libzif/zif-groups.c \
diff --git a/backends/yum/libzif/zif-changeset.c b/backends/yum/libzif/zif-changeset.c
new file mode 100644
index 0000000..fc6d4f7
--- /dev/null
+++ b/backends/yum/libzif/zif-changeset.c
@@ -0,0 +1,479 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2010 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/**
+ * SECTION:zif-changeset
+ * @short_description: Generic object to represent some information about a changeset.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <glib.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "egg-debug.h"
+
+#include "zif-changeset.h"
+
+#define ZIF_CHANGESET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_CHANGESET, ZifChangesetPrivate))
+
+struct _ZifChangesetPrivate
+{
+ guint64 date;
+ gchar *author;
+ gchar *description;
+ gchar *version;
+};
+
+enum {
+ PROP_0,
+ PROP_DATE,
+ PROP_AUTHOR,
+ PROP_DESCRIPTION,
+ PROP_VERSION,
+ PROP_LAST
+};
+
+G_DEFINE_TYPE (ZifChangeset, zif_changeset, G_TYPE_OBJECT)
+
+/**
+ * zif_changeset_get_date:
+ * @changeset: the #ZifChangeset object
+ *
+ * Gets the date and date of the update.
+ *
+ * Return value: the date of the update, or 0 for unset.
+ *
+ * Since: 0.0.1
+ **/
+guint64
+zif_changeset_get_date (ZifChangeset *changeset)
+{
+ g_return_val_if_fail (ZIF_IS_CHANGESET (changeset), 0);
+ return changeset->priv->date;
+}
+
+/**
+ * zif_changeset_get_author:
+ * @changeset: the #ZifChangeset object
+ *
+ * Gets the author for this changeset.
+ *
+ * Return value: A string value, or %NULL.
+ *
+ * Since: 0.0.1
+ **/
+const gchar *
+zif_changeset_get_author (ZifChangeset *changeset)
+{
+ g_return_val_if_fail (ZIF_IS_CHANGESET (changeset), NULL);
+ return changeset->priv->author;
+}
+
+/**
+ * zif_changeset_get_description:
+ * @changeset: the #ZifChangeset object
+ *
+ * Gets the description for this changeset.
+ *
+ * Return value: A string value, or %NULL.
+ *
+ * Since: 0.0.1
+ **/
+const gchar *
+zif_changeset_get_description (ZifChangeset *changeset)
+{
+ g_return_val_if_fail (ZIF_IS_CHANGESET (changeset), NULL);
+ return changeset->priv->description;
+}
+
+/**
+ * zif_changeset_get_version:
+ * @changeset: the #ZifChangeset object
+ *
+ * Gets the date this changeset was version.
+ *
+ * Return value: A string value, or %NULL.
+ *
+ * Since: 0.0.1
+ **/
+const gchar *
+zif_changeset_get_version (ZifChangeset *changeset)
+{
+ g_return_val_if_fail (ZIF_IS_CHANGESET (changeset), NULL);
+ return changeset->priv->version;
+}
+
+/**
+ * zif_changeset_set_date:
+ * @changeset: the #ZifChangeset object
+ * @date: The date of the changeset
+ *
+ * Sets the changeset date status.
+ *
+ * Since: 0.0.1
+ **/
+void
+zif_changeset_set_date (ZifChangeset *changeset, guint64 date)
+{
+ g_return_if_fail (ZIF_IS_CHANGESET (changeset));
+ changeset->priv->date = date;
+}
+
+/**
+ * zif_changeset_set_author:
+ * @changeset: the #ZifChangeset object
+ * @author: the changeset author
+ *
+ * Sets the changeset author.
+ *
+ * Since: 0.0.1
+ **/
+void
+zif_changeset_set_author (ZifChangeset *changeset, const gchar *author)
+{
+ g_return_if_fail (ZIF_IS_CHANGESET (changeset));
+ g_return_if_fail (author != NULL);
+ g_return_if_fail (changeset->priv->author == NULL);
+
+ changeset->priv->author = g_strdup (author);
+}
+
+/**
+ * zif_changeset_set_description:
+ * @changeset: the #ZifChangeset object
+ * @description: the changeset description
+ *
+ * Sets the changeset description.
+ *
+ * Since: 0.0.1
+ **/
+void
+zif_changeset_set_description (ZifChangeset *changeset, const gchar *description)
+{
+ g_return_if_fail (ZIF_IS_CHANGESET (changeset));
+ g_return_if_fail (description != NULL);
+ g_return_if_fail (changeset->priv->description == NULL);
+
+ changeset->priv->description = g_strdup (description);
+}
+
+/**
+ * zif_changeset_set_version:
+ * @changeset: the #ZifChangeset object
+ * @version: the changeset version date
+ *
+ * Sets the date the changeset was version.
+ *
+ * Since: 0.0.1
+ **/
+void
+zif_changeset_set_version (ZifChangeset *changeset, const gchar *version)
+{
+ g_return_if_fail (ZIF_IS_CHANGESET (changeset));
+ g_return_if_fail (version != NULL);
+ g_return_if_fail (changeset->priv->version == NULL);
+
+ changeset->priv->version = g_strdup (version);
+}
+
+/**
+ * zif_changeset_parse_header:
+ * @changeset: the #ZifChangeset object
+ * @header: the package header, e.g "Ania Hughes <ahughes at redhat.com> - 2.29.91-1.fc13"
+ *
+ * Sets the author and version from the package header.
+ *
+ * Return value: %TRUE if the data was parsed correctly
+ *
+ * Since: 0.0.1
+ **/
+gboolean
+zif_changeset_parse_header (ZifChangeset *changeset, const gchar *header, GError **error)
+{
+ gboolean ret = FALSE;
+ gchar *temp = NULL;
+ gchar *found;
+ guint len;
+
+ /* check if there is a version field */
+ len = strlen (header);
+ if (header[len-1] == '>') {
+ zif_changeset_set_author (changeset, temp);
+ ret = TRUE;
+ goto out;
+ }
+
+ /* operate on copy */
+ temp = g_strdup (header);
+
+ /* get last space */
+ found = g_strrstr (temp, " ");
+ if (found == NULL) {
+ g_set_error (error, 1, 0, "format invalid: %s", header);
+ goto out;
+ }
+
+ /* set version */
+ zif_changeset_set_version (changeset, found + 1);
+
+ /* trim to first non-space or '-' char */
+ for (;found != temp;found--) {
+ if (*found != ' ' && *found != '-')
+ break;
+ }
+
+ /* terminate here */
+ found[1] = '\0';
+
+ /* set author */
+ zif_changeset_set_author (changeset, temp);
+
+ /* success */
+ ret = TRUE;
+out:
+ g_free (temp);
+ return ret;
+}
+
+/**
+ * zif_changeset_get_property:
+ **/
+static void
+zif_changeset_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
+{
+ ZifChangeset *changeset = ZIF_CHANGESET (object);
+ ZifChangesetPrivate *priv = changeset->priv;
+
+ switch (prop_id) {
+ case PROP_DATE:
+ g_value_set_uint64 (value, priv->date);
+ break;
+ case PROP_AUTHOR:
+ g_value_set_string (value, priv->author);
+ break;
+ case PROP_DESCRIPTION:
+ g_value_set_string (value, priv->description);
+ break;
+ case PROP_VERSION:
+ g_value_set_string (value, priv->version);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+/**
+ * zif_changeset_set_property:
+ **/
+static void
+zif_changeset_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
+{
+}
+
+/**
+ * zif_changeset_finalize:
+ **/
+static void
+zif_changeset_finalize (GObject *object)
+{
+ ZifChangeset *changeset;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (ZIF_IS_CHANGESET (object));
+ changeset = ZIF_CHANGESET (object);
+
+ g_free (changeset->priv->author);
+ g_free (changeset->priv->description);
+ g_free (changeset->priv->version);
+
+ G_OBJECT_CLASS (zif_changeset_parent_class)->finalize (object);
+}
+
+/**
+ * zif_changeset_class_init:
+ **/
+static void
+zif_changeset_class_init (ZifChangesetClass *klass)
+{
+ GParamSpec *pspec;
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->finalize = zif_changeset_finalize;
+ object_class->get_property = zif_changeset_get_property;
+ object_class->set_property = zif_changeset_set_property;
+
+ /**
+ * ZifChangeset:date:
+ *
+ * Since: 0.0.1
+ */
+ pspec = g_param_spec_uint64 ("date", NULL, NULL,
+ 0, G_MAXUINT64, 0,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, PROP_DATE, pspec);
+
+ /**
+ * ZifChangeset:author:
+ *
+ * Since: 0.0.1
+ */
+ pspec = g_param_spec_string ("author", NULL, NULL,
+ NULL,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, PROP_AUTHOR, pspec);
+
+ /**
+ * ZifChangeset:description:
+ *
+ * Since: 0.0.1
+ */
+ pspec = g_param_spec_string ("description", NULL, NULL,
+ NULL,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, PROP_DESCRIPTION, pspec);
+
+ /**
+ * ZifChangeset:version:
+ *
+ * Since: 0.0.1
+ */
+ pspec = g_param_spec_string ("version", NULL, NULL,
+ NULL,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, PROP_VERSION, pspec);
+
+ g_type_class_add_private (klass, sizeof (ZifChangesetPrivate));
+}
+
+/**
+ * zif_changeset_init:
+ **/
+static void
+zif_changeset_init (ZifChangeset *changeset)
+{
+ changeset->priv = ZIF_CHANGESET_GET_PRIVATE (changeset);
+ changeset->priv->date = 0;
+ changeset->priv->author = NULL;
+ changeset->priv->description = NULL;
+ changeset->priv->version = NULL;
+}
+
+/**
+ * zif_changeset_new:
+ *
+ * Return value: A new #ZifChangeset class instance.
+ *
+ * Since: 0.0.1
+ **/
+ZifChangeset *
+zif_changeset_new (void)
+{
+ ZifChangeset *changeset;
+ changeset = g_object_new (ZIF_TYPE_CHANGESET, NULL);
+ return ZIF_CHANGESET (changeset);
+}
+
+/***************************************************************************
+ *** MAKE CHECK TESTS ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+void
+zif_changeset_test (EggTest *test)
+{
+ gboolean ret;
+ const gchar *temp;
+ ZifChangeset *changeset;
+
+ if (!egg_test_start (test, "ZifChangeset"))
+ return;
+
+ /************************************************************/
+ egg_test_title (test, "get changeset");
+ changeset = zif_changeset_new ();
+ zif_changeset_set_description (changeset, "Update to latest stable version");
+ egg_test_assert (test, changeset != NULL);
+
+ /************************************************************/
+ egg_test_title (test, "parse header 0 (fail)");
+ ret = zif_changeset_parse_header (changeset, "this-is-an-invalid-header", NULL);
+ egg_test_assert (test, !ret);
+
+ /************************************************************/
+ egg_test_title (test, "parse header 1 (success)");
+ ret = zif_changeset_parse_header (changeset, "Milan Crha <mcrha at redhat.com> - 2.29.91-1.fc13", NULL);
+ egg_test_assert (test, ret);
+
+ /************************************************************/
+ egg_test_title (test, "check description");
+ temp = zif_changeset_get_description (changeset);
+ if (g_strcmp0 (temp, "Update to latest stable version") != 0)
+ egg_test_failed (test, "incorrect value, got: %s", temp);
+ egg_test_success (test, NULL);
+
+ /************************************************************/
+ egg_test_title (test, "check author");
+ temp = zif_changeset_get_author (changeset);
+ if (g_strcmp0 (temp, "Milan Crha <mcrha at redhat.com>") != 0)
+ egg_test_failed (test, "incorrect value, got: %s", temp);
+ egg_test_success (test, NULL);
+
+ /************************************************************/
+ egg_test_title (test, "check version");
+ temp = zif_changeset_get_version (changeset);
+ if (g_strcmp0 (temp, "2.29.91-1.fc13") != 0)
+ egg_test_failed (test, "incorrect value, got: %s", temp);
+ egg_test_success (test, NULL);
+
+ /* reset */
+ g_object_unref (changeset);
+ changeset = zif_changeset_new ();
+
+ /************************************************************/
+ egg_test_title (test, "parse header 2 (success)");
+ ret = zif_changeset_parse_header (changeset, "Milan Crha <mcrha at redhat.com> 2.29.91-1.fc13", NULL);
+ egg_test_assert (test, ret);
+
+ /************************************************************/
+ egg_test_title (test, "check author");
+ temp = zif_changeset_get_author (changeset);
+ if (g_strcmp0 (temp, "Milan Crha <mcrha at redhat.com>") != 0)
+ egg_test_failed (test, "incorrect value, got: %s", temp);
+ egg_test_success (test, NULL);
+
+ /************************************************************/
+ egg_test_title (test, "check version");
+ temp = zif_changeset_get_version (changeset);
+ if (g_strcmp0 (temp, "2.29.91-1.fc13") != 0)
+ egg_test_failed (test, "incorrect value, got: %s", temp);
+ egg_test_success (test, NULL);
+
+ g_object_unref (changeset);
+
+ egg_test_end (test);
+}
+#endif
+
diff --git a/backends/yum/libzif/zif-changeset.h b/backends/yum/libzif/zif-changeset.h
new file mode 100644
index 0000000..fdde41b
--- /dev/null
+++ b/backends/yum/libzif/zif-changeset.h
@@ -0,0 +1,84 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2010 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#if !defined (__ZIF_H_INSIDE__) && !defined (ZIF_COMPILATION)
+#error "Only <zif.h> can be included directly."
+#endif
+
+#ifndef __ZIF_CHANGESET_H
+#define __ZIF_CHANGESET_H
+
+#include <glib-object.h>
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+#define ZIF_TYPE_CHANGESET (zif_changeset_get_type ())
+#define ZIF_CHANGESET(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ZIF_TYPE_CHANGESET, ZifChangeset))
+#define ZIF_CHANGESET_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), ZIF_TYPE_CHANGESET, ZifChangesetClass))
+#define ZIF_IS_CHANGESET(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ZIF_TYPE_CHANGESET))
+#define ZIF_IS_CHANGESET_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), ZIF_TYPE_CHANGESET))
+#define ZIF_CHANGESET_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ZIF_TYPE_CHANGESET, ZifChangesetClass))
+#define ZIF_CHANGESET_ERROR (zif_changeset_error_quark ())
+
+typedef struct _ZifChangeset ZifChangeset;
+typedef struct _ZifChangesetPrivate ZifChangesetPrivate;
+typedef struct _ZifChangesetClass ZifChangesetClass;
+
+#include "zif-package.h"
+
+struct _ZifChangeset
+{
+ GObject parent;
+ ZifChangesetPrivate *priv;
+};
+
+struct _ZifChangesetClass
+{
+ GObjectClass parent_class;
+};
+
+GType zif_changeset_get_type (void);
+ZifChangeset *zif_changeset_new (void);
+
+/* public getters */
+guint64 zif_changeset_get_date (ZifChangeset *changeset);
+const gchar *zif_changeset_get_author (ZifChangeset *changeset);
+const gchar *zif_changeset_get_description (ZifChangeset *changeset);
+const gchar *zif_changeset_get_version (ZifChangeset *changeset);
+
+/* internal setters: TODO, in seporate -internal header file */
+void zif_changeset_set_date (ZifChangeset *changeset,
+ guint64 date);
+void zif_changeset_set_author (ZifChangeset *changeset,
+ const gchar *author);
+void zif_changeset_set_description (ZifChangeset *changeset,
+ const gchar *description);
+void zif_changeset_set_version (ZifChangeset *changeset,
+ const gchar *version);
+gboolean zif_changeset_parse_header (ZifChangeset *changeset,
+ const gchar *header,
+ GError **error);
+
+G_END_DECLS
+
+#endif /* __ZIF_CHANGESET_H */
+
diff --git a/backends/yum/libzif/zif-md-other-sql.c b/backends/yum/libzif/zif-md-other-sql.c
new file mode 100644
index 0000000..0866a2b
--- /dev/null
+++ b/backends/yum/libzif/zif-md-other-sql.c
@@ -0,0 +1,520 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2010 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/**
+ * SECTION:zif-md-other-sql
+ * @short_description: Other metadata functionality
+ *
+ * Provide access to the other repo metadata.
+ * This object is a subclass of #ZifMd
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <glib.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sqlite3.h>
+#include <gio/gio.h>
+
+#include "zif-md.h"
+#include "zif-changeset.h"
+#include "zif-md-other-sql.h"
+#include "zif-package-remote.h"
+
+#include "egg-debug.h"
+#include "egg-string.h"
+
+#define ZIF_MD_OTHER_SQL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ZIF_TYPE_MD_OTHER_SQL, ZifMdOtherSqlPrivate))
+
+/**
+ * ZifMdOtherSqlPrivate:
+ *
+ * Private #ZifMdOtherSql data
+ **/
+struct _ZifMdOtherSqlPrivate
+{
+ gboolean loaded;
+ sqlite3 *db;
+};
+
+G_DEFINE_TYPE (ZifMdOtherSql, zif_md_other_sql, ZIF_TYPE_MD)
+
+/**
+ * zif_md_other_sql_unload:
+ **/
+static gboolean
+zif_md_other_sql_unload (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gboolean ret = FALSE;
+ return ret;
+}
+
+/**
+ * zif_md_other_sql_load:
+ **/
+static gboolean
+zif_md_other_sql_load (ZifMd *md, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ const gchar *filename;
+ gint rc;
+ ZifMdOtherSql *other_sql = ZIF_MD_OTHER_SQL (md);
+
+ g_return_val_if_fail (ZIF_IS_MD_OTHER_SQL (md), FALSE);
+
+ /* already loaded */
+ if (other_sql->priv->loaded)
+ goto out;
+
+ /* get filename */
+ filename = zif_md_get_filename_uncompressed (md);
+ if (filename == NULL) {
+ g_set_error_literal (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED,
+ "failed to get filename for other_sql");
+ goto out;
+ }
+
+ /* open database */
+ egg_debug ("filename = %s", filename);
+ rc = sqlite3_open (filename, &other_sql->priv->db);
+ if (rc != 0) {
+ egg_warning ("Can't open database: %s\n", sqlite3_errmsg (other_sql->priv->db));
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
+ "can't open database: %s", sqlite3_errmsg (other_sql->priv->db));
+ goto out;
+ }
+
+ /* we don't need to keep syncing */
+ sqlite3_exec (other_sql->priv->db, "PRAGMA synchronous=OFF", NULL, NULL, NULL);
+ other_sql->priv->loaded = TRUE;
+out:
+ return other_sql->priv->loaded;
+}
+
+/**
+ * zif_md_other_sql_sqlite_create_changelog_cb:
+ **/
+static gint
+zif_md_other_sql_sqlite_create_changelog_cb (void *data, gint argc, gchar **argv, gchar **col_name)
+{
+ GPtrArray *array = (GPtrArray *) data;
+ ZifChangeset *changeset;
+ gint i;
+ guint date = 0;
+ const gchar *author = NULL;
+ const gchar *changelog = NULL;
+ gboolean ret;
+ GError *error = NULL;
+
+ /* get the ID */
+ for (i=0; i<argc; i++) {
+ if (g_strcmp0 (col_name[i], "date") == 0) {
+ ret = egg_strtouint (argv[i], &date);
+ if (!ret)
+ egg_warning ("could not parse date '%s'", argv[i]);
+ } else if (g_strcmp0 (col_name[i], "author") == 0) {
+ author = argv[i];
+ } else if (g_strcmp0 (col_name[i], "changelog") == 0) {
+ changelog = argv[i];
+ } else {
+ egg_warning ("unrecognized: %s=%s", col_name[i], argv[i]);
+ }
+ }
+
+ /* create new object */
+ changeset = zif_changeset_new ();
+ zif_changeset_set_date (changeset, date);
+ zif_changeset_set_description (changeset, changelog);
+ ret = zif_changeset_parse_header (changeset, author, NULL);
+ if (!ret) {
+ egg_warning ("failed to parse header: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
+
+ /* add to the array */
+ g_ptr_array_add (array, g_object_ref (changeset));
+out:
+ g_object_unref (changeset);
+ return 0;
+}
+
+/**
+ * zif_md_other_sql_search_pkgkey:
+ **/
+static GPtrArray *
+zif_md_other_sql_search_pkgkey (ZifMdOtherSql *md, guint pkgkey,
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gchar *statement = NULL;
+ gchar *error_msg = NULL;
+ gint rc;
+ GPtrArray *array = NULL;
+
+ array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+ statement = g_strdup_printf ("SELECT author, date, changelog FROM changelog WHERE pkgKey = '%i' ORDER BY date", pkgkey);
+ rc = sqlite3_exec (md->priv->db, statement, zif_md_other_sql_sqlite_create_changelog_cb, array, &error_msg);
+ if (rc != SQLITE_OK) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
+ "SQL error: %s\n", error_msg);
+ sqlite3_free (error_msg);
+ g_ptr_array_unref (array);
+ array = NULL;
+ goto out;
+ }
+out:
+ g_free (statement);
+ return array;
+}
+
+/**
+ * zif_md_other_sql_sqlite_pkgkey_cb:
+ **/
+static gint
+zif_md_other_sql_sqlite_pkgkey_cb (void *data, gint argc, gchar **argv, gchar **col_name)
+{
+ gint i;
+ guint pkgkey;
+ gboolean ret;
+ GPtrArray *array = (GPtrArray *) data;
+
+ /* get the ID */
+ for (i=0; i<argc; i++) {
+ if (g_strcmp0 (col_name[i], "pkgKey") == 0) {
+ ret = egg_strtouint (argv[i], &pkgkey);
+ if (ret)
+ g_ptr_array_add (array, GUINT_TO_POINTER (pkgkey));
+ else
+ egg_warning ("could not parse pkgKey '%s'", argv[i]);
+ } else {
+ egg_warning ("unrecognized: %s=%s", col_name[i], argv[i]);
+ }
+ }
+ return 0;
+}
+
+/**
+ * zif_md_other_sql_get_changelog:
+ **/
+static GPtrArray *
+zif_md_other_sql_get_changelog (ZifMd *md, const gchar *pkgid,
+ GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ gchar *statement = NULL;
+ gchar *error_msg = NULL;
+ gint rc;
+ gboolean ret;
+ GError *error_local = NULL;
+ GPtrArray *array = NULL;
+ GPtrArray *array_tmp = NULL;
+ GPtrArray *pkgkey_array = NULL;
+ guint i, j;
+ guint pkgkey;
+ ZifCompletion *completion_local;
+ ZifCompletion *completion_loop;
+ ZifChangeset *changeset;
+ ZifMdOtherSql *md_other_sql = ZIF_MD_OTHER_SQL (md);
+
+ /* setup completion */
+ if (md_other_sql->priv->loaded)
+ zif_completion_set_number_steps (completion, 2);
+ else
+ zif_completion_set_number_steps (completion, 3);
+
+ /* if not already loaded, load */
+ if (!md_other_sql->priv->loaded) {
+ completion_local = zif_completion_get_child (completion);
+ ret = zif_md_load (md, cancellable, completion_local, &error_local);
+ if (!ret) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_FAILED_TO_LOAD,
+ "failed to load md_other_sql file: %s", error_local->message);
+ g_error_free (error_local);
+ goto out;
+ }
+
+ /* this section done */
+ zif_completion_done (completion);
+ }
+
+ /* create data struct we can pass to the callback */
+ pkgkey_array = g_ptr_array_new ();
+ statement = g_strdup_printf ("SELECT pkgKey FROM packages WHERE pkgId = '%s'", pkgid);
+ rc = sqlite3_exec (md_other_sql->priv->db, statement, zif_md_other_sql_sqlite_pkgkey_cb, pkgkey_array, &error_msg);
+ if (rc != SQLITE_OK) {
+ g_set_error (error, ZIF_MD_ERROR, ZIF_MD_ERROR_BAD_SQL,
+ "SQL error: %s\n", error_msg);
+ sqlite3_free (error_msg);
+ goto out;
+ }
+
+ /* this section done */
+ zif_completion_done (completion);
+
+ /* output array */
+ array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+
+ /* resolve each pkgkey to a package */
+ completion_local = zif_completion_get_child (completion);
+ if (pkgkey_array->len > 0)
+ zif_completion_set_number_steps (completion_local, pkgkey_array->len);
+ for (i=0; i<pkgkey_array->len; i++) {
+ pkgkey = GPOINTER_TO_UINT (g_ptr_array_index (pkgkey_array, i));
+
+ /* get changeset for pkgKey */
+ completion_loop = zif_completion_get_child (completion_local);
+ array_tmp = zif_md_other_sql_search_pkgkey (md_other_sql, pkgkey, cancellable, completion_loop, error);
+ if (array_tmp == NULL) {
+ g_ptr_array_unref (array);
+ array = NULL;
+ goto out;
+ }
+
+ /* no results */
+ if (array_tmp->len == 0)
+ egg_warning ("no changelog for pkgKey %i", pkgkey);
+ for (j=0; j<array_tmp->len; j++) {
+ changeset = g_ptr_array_index (array_tmp, j);
+ g_ptr_array_add (array, g_object_ref (changeset));
+ }
+
+ /* clear array */
+ g_ptr_array_unref (array_tmp);
+ }
+
+ /* this section done */
+ zif_completion_done (completion);
+out:
+ g_free (statement);
+ if (pkgkey_array != NULL)
+ g_ptr_array_unref (pkgkey_array);
+ return array;
+}
+
+/**
+ * zif_md_other_sql_finalize:
+ **/
+static void
+zif_md_other_sql_finalize (GObject *object)
+{
+ ZifMdOtherSql *md;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (ZIF_IS_MD_OTHER_SQL (object));
+ md = ZIF_MD_OTHER_SQL (object);
+
+ sqlite3_close (md->priv->db);
+
+ G_OBJECT_CLASS (zif_md_other_sql_parent_class)->finalize (object);
+}
+
+/**
+ * zif_md_other_sql_class_init:
+ **/
+static void
+zif_md_other_sql_class_init (ZifMdOtherSqlClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ ZifMdClass *md_class = ZIF_MD_CLASS (klass);
+ object_class->finalize = zif_md_other_sql_finalize;
+
+ /* map */
+ md_class->load = zif_md_other_sql_load;
+ md_class->unload = zif_md_other_sql_unload;
+ md_class->get_changelog = zif_md_other_sql_get_changelog;
+ g_type_class_add_private (klass, sizeof (ZifMdOtherSqlPrivate));
+}
+
+/**
+ * zif_md_other_sql_init:
+ **/
+static void
+zif_md_other_sql_init (ZifMdOtherSql *md)
+{
+ md->priv = ZIF_MD_OTHER_SQL_GET_PRIVATE (md);
+ md->priv->loaded = FALSE;
+ md->priv->db = NULL;
+}
+
+/**
+ * zif_md_other_sql_new:
+ *
+ * Return value: A new #ZifMdOtherSql class instance.
+ *
+ * Since: 0.0.1
+ **/
+ZifMdOtherSql *
+zif_md_other_sql_new (void)
+{
+ ZifMdOtherSql *md;
+ md = g_object_new (ZIF_TYPE_MD_OTHER_SQL, NULL);
+ return ZIF_MD_OTHER_SQL (md);
+}
+
+/***************************************************************************
+ *** MAKE CHECK TESTS ***
+ ***************************************************************************/
+#ifdef EGG_TEST
+#include "egg-test.h"
+
+void
+zif_md_other_sql_test (EggTest *test)
+{
+ ZifMdOtherSql *md;
+ gboolean ret;
+ GError *error = NULL;
+ GPtrArray *array;
+ ZifPackage *changeset;
+ GCancellable *cancellable;
+ ZifCompletion *completion;
+ const gchar *text;
+
+ if (!egg_test_start (test, "ZifMdOtherSql"))
+ return;
+
+ /* use */
+ cancellable = g_cancellable_new ();
+ completion = zif_completion_new ();
+
+ /************************************************************/
+ egg_test_title (test, "get md_other_sql md");
+ md = zif_md_other_sql_new ();
+ egg_test_assert (test, md != NULL);
+
+ /************************************************************/
+ egg_test_title (test, "loaded");
+ egg_test_assert (test, !md->priv->loaded);
+
+ /************************************************************/
+ egg_test_title (test, "set id");
+ ret = zif_md_set_id (ZIF_MD (md), "fedora");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set type");
+ ret = zif_md_set_mdtype (ZIF_MD (md), ZIF_MD_TYPE_OTHER_SQL);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set checksum type");
+ ret = zif_md_set_checksum_type (ZIF_MD (md), G_CHECKSUM_SHA256);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set checksum compressed");
+ ret = zif_md_set_checksum (ZIF_MD (md), "bc58c56b371a83dc546c86e1796d83b9ff78adbf733873c815c3fe5dd48b0d56");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set checksum uncompressed");
+ ret = zif_md_set_checksum_uncompressed (ZIF_MD (md), "c378618f9764ff9fa271a40b962a0c3569ff274e741ada2342d0fe3554614488");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "set filename");
+ ret = zif_md_set_filename (ZIF_MD (md), "../test/cache/fedora/bc58c56b371a83dc546c86e1796d83b9ff78adbf733873c815c3fe5dd48b0d56-other.sqlite.bz2");
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to set");
+
+ /************************************************************/
+ egg_test_title (test, "load");
+ ret = zif_md_load (ZIF_MD (md), cancellable, completion, &error);
+ if (ret)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to load '%s'", error->message);
+
+ /************************************************************/
+ egg_test_title (test, "loaded");
+ egg_test_assert (test, md->priv->loaded);
+
+ /************************************************************/
+ egg_test_title (test, "search for files");
+ zif_completion_reset (completion);
+ array = zif_md_other_sql_get_changelog (md, "42b8d71b303b19c2fcc2b06bb9c764f2902dd72b9376525025ee9ba4a41c38e9",
+ cancellable, completion, &error);
+ if (array != NULL)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to search '%s'", error->message);
+
+ /************************************************************/
+ egg_test_title (test, "correct number");
+ if (array->len != 10)
+ egg_test_failed (test, "failed to get correct number: %i", array->len);
+ egg_test_success (test, NULL);
+
+ /* get first entry */
+ changeset = g_ptr_array_index (array, 1);
+
+ /************************************************************/
+ egg_test_title (test, "correct version");
+ text = zif_changeset_get_version (changeset);
+ if (g_strcmp0 (text, "0.9.95-8") == 0)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to get correct value '%s'", text);
+
+ /************************************************************/
+ egg_test_title (test, "correct author");
+ text = zif_changeset_get_author (changeset);
+ if (g_strcmp0 (text, "Rex Dieter <rdieter[AT]fedoraproject.org>") == 0)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to get correct value '%s'", text);
+
+ /************************************************************/
+ egg_test_title (test, "correct description");
+ text = zif_changeset_get_description (changeset);
+ if (g_strcmp0 (text, "- ExcludeArch: ppc64 (#253847)") == 0)
+ egg_test_success (test, NULL);
+ else
+ egg_test_failed (test, "failed to get correct value '%s'", text);
+
+ /* remove array */
+ g_ptr_array_unref (array);
+
+ g_object_unref (cancellable);
+ g_object_unref (completion);
+ g_object_unref (md);
+
+ egg_test_end (test);
+}
+#endif
+
diff --git a/backends/yum/libzif/zif-md-other-sql.h b/backends/yum/libzif/zif-md-other-sql.h
new file mode 100644
index 0000000..b07aad7
--- /dev/null
+++ b/backends/yum/libzif/zif-md-other-sql.h
@@ -0,0 +1,63 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2010 Richard Hughes <richard at hughsie.com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#if !defined (__ZIF_H_INSIDE__) && !defined (ZIF_COMPILATION)
+#error "Only <zif.h> can be included directly."
+#endif
+
+#ifndef __ZIF_MD_OTHER_SQL_H
+#define __ZIF_MD_OTHER_SQL_H
+
+#include <glib-object.h>
+
+#include "zif-md.h"
+
+G_BEGIN_DECLS
+
+#define ZIF_TYPE_MD_OTHER_SQL (zif_md_other_sql_get_type ())
+#define ZIF_MD_OTHER_SQL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ZIF_TYPE_MD_OTHER_SQL, ZifMdOtherSql))
+#define ZIF_MD_OTHER_SQL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), ZIF_TYPE_MD_OTHER_SQL, ZifMdOtherSqlClass))
+#define ZIF_IS_MD_OTHER_SQL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ZIF_TYPE_MD_OTHER_SQL))
+#define ZIF_IS_MD_OTHER_SQL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), ZIF_TYPE_MD_OTHER_SQL))
+#define ZIF_MD_OTHER_SQL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ZIF_TYPE_MD_OTHER_SQL, ZifMdOtherSqlClass))
+
+typedef struct _ZifMdOtherSql ZifMdOtherSql;
+typedef struct _ZifMdOtherSqlPrivate ZifMdOtherSqlPrivate;
+typedef struct _ZifMdOtherSqlClass ZifMdOtherSqlClass;
+
+struct _ZifMdOtherSql
+{
+ ZifMd parent;
+ ZifMdOtherSqlPrivate *priv;
+};
+
+struct _ZifMdOtherSqlClass
+{
+ ZifMdClass parent_class;
+};
+
+GType zif_md_other_sql_get_type (void);
+ZifMdOtherSql *zif_md_other_sql_new (void);
+
+G_END_DECLS
+
+#endif /* __ZIF_MD_OTHER_SQL_H */
+
diff --git a/backends/yum/libzif/zif-md.c b/backends/yum/libzif/zif-md.c
index e85f2e0..75f9e05 100644
--- a/backends/yum/libzif/zif-md.c
+++ b/backends/yum/libzif/zif-md.c
@@ -647,7 +647,6 @@ zif_md_resolve (ZifMd *md, const gchar *search, GCancellable *cancellable, ZifCo
goto out;
}
-
/* do subclassed action */
array = klass->resolve (md, search, cancellable, completion, error);
out:
@@ -684,7 +683,6 @@ zif_md_search_name (ZifMd *md, const gchar *search, GCancellable *cancellable, Z
goto out;
}
-
/* do subclassed action */
array = klass->search_name (md, search, cancellable, completion, error);
out:
@@ -721,7 +719,6 @@ zif_md_search_details (ZifMd *md, const gchar *search, GCancellable *cancellable
goto out;
}
-
/* do subclassed action */
array = klass->search_details (md, search, cancellable, completion, error);
out:
@@ -758,7 +755,6 @@ zif_md_search_group (ZifMd *md, const gchar *search, GCancellable *cancellable,
goto out;
}
-
/* do subclassed action */
array = klass->search_group (md, search, cancellable, completion, error);
out:
@@ -795,7 +791,6 @@ zif_md_search_pkgid (ZifMd *md, const gchar *search, GCancellable *cancellable,
goto out;
}
-
/* do subclassed action */
array = klass->search_pkgid (md, search, cancellable, completion, error);
out:
@@ -833,7 +828,6 @@ zif_md_what_provides (ZifMd *md, const gchar *search,
goto out;
}
-
/* do subclassed action */
array = klass->what_provides (md, search, cancellable, completion, error);
out:
@@ -870,7 +864,6 @@ zif_md_find_package (ZifMd *md, const gchar *package_id, GCancellable *cancellab
goto out;
}
-
/* do subclassed action */
array = klass->find_package (md, package_id, cancellable, completion, error);
out:
@@ -878,6 +871,42 @@ out:
}
/**
+ * zif_md_get_changelog:
+ * @md: the #ZifMd object
+ * @pkgid: the internal pkgid to match
+ * @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
+ * @completion: a #ZifCompletion to use for progress reporting
+ * @error: a #GError which is used on failure, or %NULL
+ *
+ * Gets the changelog data for a specific package
+ *
+ * Return value: an array of #ZifChangeset's
+ *
+ * Since: 0.0.1
+ **/
+GPtrArray *
+zif_md_get_changelog (ZifMd *md, const gchar *pkgid, GCancellable *cancellable, ZifCompletion *completion, GError **error)
+{
+ GPtrArray *array = NULL;
+ ZifMdClass *klass = ZIF_MD_GET_CLASS (md);
+
+ g_return_val_if_fail (ZIF_IS_MD (md), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ /* no support */
+ if (klass->get_changelog == NULL) {
+ g_set_error_literal (error, ZIF_MD_ERROR, ZIF_MD_ERROR_NO_SUPPORT,
+ "operation cannot be performed on this md");
+ goto out;
+ }
+
+ /* do subclassed action */
+ array = klass->get_changelog (md, pkgid, cancellable, completion, error);
+out:
+ return array;
+}
+
+/**
* zif_md_get_packages:
* @md: the #ZifMd object
* @cancellable: a #GCancellable which is used to cancel tasks, or %NULL
@@ -906,7 +935,6 @@ zif_md_get_packages (ZifMd *md, GCancellable *cancellable, ZifCompletion *comple
goto out;
}
-
/* do subclassed action */
array = klass->get_packages (md, cancellable, completion, error);
out:
diff --git a/backends/yum/libzif/zif-md.h b/backends/yum/libzif/zif-md.h
index e589a5f..6db2400 100644
--- a/backends/yum/libzif/zif-md.h
+++ b/backends/yum/libzif/zif-md.h
@@ -109,6 +109,11 @@ struct _ZifMdClass
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
+ GPtrArray *(*get_changelog) (ZifMd *md,
+ const gchar *pkgid,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
};
/* types of metadata */
@@ -230,6 +235,11 @@ GPtrArray *zif_md_find_package (ZifMd *md,
GCancellable *cancellable,
ZifCompletion *completion,
GError **error);
+GPtrArray *zif_md_get_changelog (ZifMd *md,
+ const gchar *pkgid,
+ GCancellable *cancellable,
+ ZifCompletion *completion,
+ GError **error);
G_END_DECLS
diff --git a/backends/yum/libzif/zif-self-test.c b/backends/yum/libzif/zif-self-test.c
deleted file mode 100644
index c758000..0000000
--- a/backends/yum/libzif/zif-self-test.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2008 Richard Hughes <richard at hughsie.com>
- * Copyright (C) 2008 Shishir Goel <crazyontheedge at gmail.com>
- *
- * Licensed under the GNU General Public License Version 2
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include "config.h"
-
-#include <glib.h>
-#include <glib-object.h>
-#include "egg-test.h"
-#include "egg-debug.h"
-
-/* prototypes */
-void zif_completion_test (EggTest *test);
-void zif_monitor_test (EggTest *test);
-void zif_config_test (EggTest *test);
-void zif_utils_test (EggTest *test);
-void zif_package_test (EggTest *test);
-void zif_package_local_test (EggTest *test);
-void zif_store_local_test (EggTest *test);
-void zif_groups_test (EggTest *test);
-void zif_store_remote_test (EggTest *test);
-void zif_md_metalink_test (EggTest *test);
-void zif_md_primary_test (EggTest *test);
-void zif_md_filelists_test (EggTest *test);
-void zif_md_comps_test (EggTest *test);
-void zif_repos_test (EggTest *test);
-void zif_download_test (EggTest *test);
-void zif_string_test (EggTest *test);
-void zif_lock_test (EggTest *test);
-void zif_update_info_test (EggTest *test);
-
-int
-main (int argc, char **argv)
-{
- EggTest *test;
-
- g_type_init ();
- g_thread_init (NULL);
- test = egg_test_init ();
- egg_debug_init (TRUE);
- zif_init ();
-
- /* tests go here */
- zif_md_primary_xml_test (test);
- zif_lock_test (test);
- zif_completion_test (test);
- zif_config_test (test);
- zif_string_test (test);
- zif_update_test (test);
- zif_update_info_test (test);
- zif_md_metalink_test (test);
- zif_md_mirrorlist_test (test);
- zif_md_filelists_test (test);
- zif_md_primary_sql_test (test);
- zif_md_comps_test (test);
- zif_md_updateinfo_test (test);
- zif_download_test (test);
- zif_monitor_test (test);
- zif_package_test (test);
- zif_store_local_test (test);
- zif_package_local_test (test);
- zif_groups_test (test);
- zif_store_remote_test (test);
- zif_repos_test (test);
- zif_utils_test (test);
-
- return (egg_test_finish (test));
-}
-
diff --git a/backends/yum/libzif/zif-store-remote.c b/backends/yum/libzif/zif-store-remote.c
index 4ebc3f2..69729d0 100644
--- a/backends/yum/libzif/zif-store-remote.c
+++ b/backends/yum/libzif/zif-store-remote.c
@@ -46,6 +46,7 @@
#include "zif-md-filelists.h"
#include "zif-md-metalink.h"
#include "zif-md-mirrorlist.h"
+#include "zif-md-other-sql.h"
#include "zif-md-primary-sql.h"
#include "zif-md-primary-xml.h"
#include "zif-store.h"
@@ -80,6 +81,7 @@ struct _ZifStoreRemotePrivate
gboolean enabled;
gboolean loaded;
gboolean loaded_metadata;
+ ZifMd *md_other_db;
ZifMd *md_primary_db;
ZifMd *md_primary_xml;
ZifMd *md_filelists;
@@ -148,7 +150,7 @@ zif_store_remote_get_md_from_type (ZifStoreRemote *store, ZifMdType type)
if (type == ZIF_MD_TYPE_PRIMARY_XML)
return store->priv->md_primary_xml;
if (type == ZIF_MD_TYPE_OTHER_SQL)
- return NULL;
+ return store->priv->md_other_db;
if (type == ZIF_MD_TYPE_COMPS_GZ)
return store->priv->md_comps;
if (type == ZIF_MD_TYPE_UPDATEINFO)
@@ -2627,6 +2629,7 @@ zif_store_remote_finalize (GObject *object)
g_free (store->priv->repomd_filename);
g_free (store->priv->directory);
+ g_object_unref (store->priv->md_other_db);
g_object_unref (store->priv->md_primary_db);
g_object_unref (store->priv->md_primary_xml);
g_object_unref (store->priv->md_filelists);
@@ -2701,6 +2704,7 @@ zif_store_remote_init (ZifStoreRemote *store)
store->priv->monitor = zif_monitor_new ();
store->priv->lock = zif_lock_new ();
store->priv->md_filelists = ZIF_MD (zif_md_filelists_new ());
+ store->priv->md_other_db = ZIF_MD (zif_md_other_sql_new ());
store->priv->md_primary_db = ZIF_MD (zif_md_primary_sql_new ());
store->priv->md_primary_xml = ZIF_MD (zif_md_primary_xml_new ());
store->priv->md_metalink = ZIF_MD (zif_md_metalink_new ());
commit f74d519ebca2a0a5415d0c928123276e4e9323dd
Author: Richard Hughes <richard at hughsie.com>
Date: Mon Apr 12 22:34:44 2010 +0100
Remove the ruck client, it's been broken for the last few releases
diff --git a/configure.ac b/configure.ac
index 1a05a94..4b9152b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -492,13 +492,6 @@ else
fi
AM_CONDITIONAL(PK_BUILD_PM_UTILS, test $build_pm_utils = "yes")
-dnl ---------------------------------------------------------------------------
-dnl - Build ruck (a rug-like interface for PackageKit)
-dnl ---------------------------------------------------------------------------
-AC_ARG_ENABLE(ruck, AS_HELP_STRING([--enable-ruck],[Build ruck client]),
- build_ruck=$enableval,build_ruck=yes)
-AM_CONDITIONAL(PK_BUILD_RUCK, test $build_ruck = "yes")
-
# backends
AC_ARG_ENABLE(alpm, AS_HELP_STRING([--enable-alpm],[use the ALPM backend]),enable_alpm=$enableval,enable_alpm=no)
AC_ARG_ENABLE(apt, AS_HELP_STRING([--enable-apt],[use the APT backend]),enable_apt=$enableval,enable_apt=no)
@@ -805,8 +798,6 @@ contrib/cron/Makefile
contrib/debuginfo-install/Makefile
contrib/device-rebind/Makefile
contrib/pm-utils/Makefile
-contrib/ruck/Makefile
-contrib/ruck/src/Makefile
backends/Makefile
backends/alpm/Makefile
backends/apt/Makefile
@@ -878,7 +869,6 @@ echo "
debuginfo-install: ${build_debuginfo_install}
device-rebind: ${build_device_rebind}
pm-utils scripts: ${build_pm_utils}
- RUCK client: ${build_ruck}
QT library: ${build_qt}
Managed bindings: ${build_managed}
diff --git a/contrib/Makefile.am b/contrib/Makefile.am
index 3e8b001..f043b25 100644
--- a/contrib/Makefile.am
+++ b/contrib/Makefile.am
@@ -4,10 +4,6 @@ if BACKEND_TYPE_YUM
SUBDIRS += yum-packagekit
endif
-if PK_BUILD_RUCK
-SUBDIRS += ruck
-endif
-
if PK_BUILD_BROWSER_PLUGIN
SUBDIRS += browser-plugin
endif
diff --git a/contrib/ruck/AUTHORS b/contrib/ruck/AUTHORS
deleted file mode 100644
index c1a9675..0000000
--- a/contrib/ruck/AUTHORS
+++ /dev/null
@@ -1,3 +0,0 @@
-Tambet Ingo <tambet at ximian.com>
-James Willcox <snorp at ximian.com>
-Chris Rivera <cmr at ximian.com>
diff --git a/contrib/ruck/Makefile.am b/contrib/ruck/Makefile.am
deleted file mode 100644
index c2d7878..0000000
--- a/contrib/ruck/Makefile.am
+++ /dev/null
@@ -1,9 +0,0 @@
-SUBDIRS = src
-
-extradir = $(datadir)/ruck
-extra_DATA = \
- AUTHORS \
- README
-
-EXTRA_DIST = $(extra_DATA)
-
diff --git a/contrib/ruck/README b/contrib/ruck/README
deleted file mode 100644
index 4030bf4..0000000
--- a/contrib/ruck/README
+++ /dev/null
@@ -1,20 +0,0 @@
-ruck is a rug-like interface for PackageKit
-('rug' is the command-line interface for rcd, red carpet daemon.)
-
-
-Answers to some Frequently Asked Questions:
--------------------------------------------
-
-* You got to be kidding me, yet another package management tool?
-No, not really. ruck is just an alternative command line interface
-for PackageKit
-
-* What's wrong pkcon?
-The main reason of writing ruck is for a couple of lazy people who
-got used to Red Carpet's cli 'rug' and are unable to learn any
-new tricks.
-
-* Anything else?
-Glad you asked, yes! It's really easy to extend ruck. Just drop the
-implementation of your new commands to $prefix/share/ruck/commands/
-directory and ruck will find them.
diff --git a/contrib/ruck/src/.gitignore b/contrib/ruck/src/.gitignore
deleted file mode 100644
index 8803d3d..0000000
--- a/contrib/ruck/src/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-ruck
-
diff --git a/contrib/ruck/src/Makefile.am b/contrib/ruck/src/Makefile.am
deleted file mode 100644
index 670e969..0000000
--- a/contrib/ruck/src/Makefile.am
+++ /dev/null
@@ -1,31 +0,0 @@
-#ruckexecdir = $(bindir)
-#ruckexec_DATA = ruck
-
-rucksupportdir = $(datadir)/ruck
-rucksupport_DATA = \
- i18n.py \
- ruckcommand.py \
- ruckmain.py \
- ruckformat.py \
- ruckyum.py \
- rucktalk.py
-
-ruckcmdsdir = $(rucksupportdir)/commands
-ruckcmds_DATA = \
- ruckcachecmds.py \
- rucktransactcmds.py \
- ruckpackagecmds.py
-
-ruckexecdir = $(bindir)
-ruckexec_in_files = ruck.in
-ruckexec_DATA = $(ruckexec_in_files:.in=)
-$(ruckexec_DATA): $(ruckexec_in_files) Makefile
- @sed -e "s|\@DDIR\@|$(datadir)|" -e "s|\@VERSION\@|$(VERSION)|" $< > $@
-
-EXTRA_DIST = $(rucksupport_DATA) $(ruckcmds_DATA) $(ruckexec_in_files)
-
-install-exec-hook:
- chmod 0755 $(DESTDIR)$(ruckexecdir)/$(ruckexec_DATA)
-
-DISTCLEANFILES = \
- $(ruckexec_DATA)
diff --git a/contrib/ruck/src/i18n.py b/contrib/ruck/src/i18n.py
deleted file mode 100644
index 859c31f..0000000
--- a/contrib/ruck/src/i18n.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env python
-"""i18n abstraction
-
-License: GPL
-Author: Vladimir Bormotov <bor at vb.dn.ua>
-
-$Id: i18n.py,v 1.3 2004/01/28 07:31:02 skvidal Exp $
-"""
-# $RCSfile: i18n.py,v $
-__version__ = "$Revision: 1.3 $"[11:-2]
-__date__ = "$Date: 2004/01/28 07:31:02 $"[7:-2]
-
-try:
- import gettext
- import sys
- if sys.version_info[0] == 2:
- t = gettext.translation('yum')
- _ = t.gettext
- else:
- gettext.bindtextdomain('yum', '/usr/share/locale')
- gettext.textdomain('yum')
- _ = gettext.gettext
-
-except:
- def _(str):
- """pass given string as-is"""
- return str
-
-if __name__ == '__main__':
- pass
-
-# vim: set ts=4 et :
diff --git a/contrib/ruck/src/ruck.in b/contrib/ruck/src/ruck.in
deleted file mode 100644
index 774473c..0000000
--- a/contrib/ruck/src/ruck.in
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/env /usr/bin/python
-
-###
-### Copyright 2002-2003 Ximian, Inc.
-###
-### This program is free software; you can redistribute it and/or modify
-### it under the terms of the GNU General Public License, version 2,
-### as published by the Free Software Foundation.
-###
-### This program is distributed in the hope that it will be useful,
-### but WITHOUT ANY WARRANTY; without even the implied warranty of
-### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-### GNU General Public License for more details.
-###
-### You should have received a copy of the GNU General Public License
-### along with this program; if not, write to the Free Software
-### Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
-###
-
-try:
- import sys
- import os
-
- ruck_dir = "@DDIR@/ruck"
- ruck_version = "@VERSION@"
-
- # FIXME: This has a special check to allow us to run ruck in-place
- # without having done a "make install". We might want to take this
- # out at some point.
-
- if not (os.path.isfile("./ruckmain.py") \
- or (os.path.isdir(ruck_dir) and os.path.isfile(ruck_dir + "/ruckmain.py"))):
- print "ERROR: ruck doesn't appear to be installed properly. Please check your installation."
- sys.exit(1)
-
-
- sys.path.append(ruck_dir)
- import ruckmain
-
- if "--ruck-profile" in sys.argv:
- import profile
- sys.stderr.write("*** Profiling Enabled ***\n")
- sys.argv = filter(lambda x:x != "--ruck-profile", sys.argv)
- profile.run("ruckmain.main(ruck_version, ruck_dir)")
- else:
- ruckmain.main(ruck_version, ruck_dir)
-except KeyboardInterrupt:
- # Just quietly exit if we got a ^C
- print
- sys.exit(0)
-
-
diff --git a/contrib/ruck/src/ruckcachecmds.py b/contrib/ruck/src/ruckcachecmds.py
deleted file mode 100644
index 3dcbd47..0000000
--- a/contrib/ruck/src/ruckcachecmds.py
+++ /dev/null
@@ -1,349 +0,0 @@
-###
-### Copyright 2002 Ximian, Inc.
-### Copyright 2008 Aidan Skinner <aidan at skinner.me.uk>
-###
-### This program is free software; you can redistribute it and/or modify
-### it under the terms of the GNU General Public License, version 2,
-### as published by the Free Software Foundation.
-###
-### This program is distributed in the hope that it will be useful,
-### but WITHOUT ANY WARRANTY; without even the implied warranty of
-### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-### GNU General Public License for more details.
-###
-### You should have received a copy of the GNU General Public License
-### along with this program; if not, write to the Free Software
-### Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
-###
-
-import sys
-import os
-import os.path
-import glob
-from ConfigParser import ConfigParser
-import string
-import rucktalk
-import ruckformat
-import ruckcommand
-
-class CleanCmd(ruckcommand.RuckCommand):
-
- def name(self):
- return "clean"
-
- def aliases(self):
- return ["cl"]
-
- def is_basic(self):
- return 1
-
- def category(self):
- return "system"
-
- def arguments(self):
- return ""
-
- def description_short(self):
- return "Clean cache"
-
- def local_opt_table(self):
- return []
-
- def execute(self, options_dict, non_option_args):
- pkcon = self.pkcon()
- pkcon.refresh_cache(True)
- rucktalk.message('--- Refresh Successful ---')
-
-ruckcommand.register(CleanCmd)
-
-
-class RefreshCmd(ruckcommand.RuckCommand):
-
- def name(self):
- return "refresh"
-
- def aliases(self):
- return ["ref"]
-
- def is_basic(self):
- return 1
-
- def category(self):
- return "system"
-
- def arguments(self):
- return ""
-
- def description_short(self):
- return "Refresh the package cache"
-
- def execute(self, options_dict, non_option_args):
- pkcon = self.pkcon()
- pkcon.refresh_cache(False)
- rucktalk.message('--- Refresh Successful ---')
-
-
-ruckcommand.register(RefreshCmd)
-
-class RepolistCmd(ruckcommand.RuckCommand):
-
- def name(self):
- return "repos"
-
- def aliases(self):
- return ["sl", "ca", "ch"]
-
- def is_basic(self):
- return 1
-
- def category(self):
- return "system"
-
- def description_short(self):
- return "List active repositories"
-
- def local_opt_table(self):
- return [["", "disabled", "", "Show disabled services"]]
-
- def execute(self, options_dict, non_option_args):
- pkcon = self.pkcon()
-
- enabled_only = not options_dict.has_key("disabled")
- repos = []
- for repo in pkcon.get_repo_list():
- if enabled_only:
- if repo['enabled']:
- line = [repo['id'], repo['desc']]
- repos.append(line)
- else:
- line = [repo['id'], ruckformat.bool_to_short_str(repo['enabled']), repo['desc']]
- repos.append(line)
-
-
- repos.sort(lambda x,y:cmp(x[0], y[0]))
-
- if len(repos):
- headers = ['Name', 'Description']
- if not enabled_only:
- headers.insert(1, 'Enabled')
- ruckformat.tabular(headers, repos)
- else:
- rucktalk.message("--- No repositories found ---")
-
-ruckcommand.register(RepolistCmd)
-
-class RepoCmd(ruckcommand.RuckCommand):
-
- def name(self):
- return "enable"
-
- def aliases(self):
- return ["en"]
-
- def is_basic(self):
- return 1
-
- def category(self):
- return "system"
-
- def description_short(self):
- return "Enable a repository"
-
- def is_hidden(self):
- return 1
-
- def setenabled(self, repos, val):
- pkcon = self.pkcon()
-
- for repo in repos:
- pkcon.repo_enable(repo, val)
- if val:
- rucktalk.message("--- Enabled repository '%s' ---" % repo)
- else:
- rucktalk.message("--- Disabled repository '%s' ---" % repo)
-
-class RepoEnableCmd(RepoCmd):
-
- def name(self):
- return "enable"
-
- def aliases(self):
- return ["en"]
-
- def is_basic(self):
- return 1
-
- def is_hidden(self):
- return 0
-
- def category(self):
- return "system"
-
- def description_short(self):
- return "Enable a repository"
-
- def execute(self, options_dict, non_option_args):
- self.setenabled(non_option_args, True)
-
-ruckcommand.register(RepoEnableCmd)
-
-class RepoDisableCmd(RepoCmd):
-
- def name(self):
- return "disable"
-
- def aliases(self):
- return ["di"]
-
- def is_basic(self):
- return 1
-
- def is_hidden(self):
- return 0
-
- def category(self):
- return "system"
-
- def description_short(self):
- return "Disable a repository"
-
- def execute(self, options_dict, non_option_args):
- self.setenabled(non_option_args, False)
-
-ruckcommand.register(RepoDisableCmd)
-
-class RepoAddCmd(RepoCmd):
-
- def name(self):
- return "repo-add"
-
- def aliases(self):
- return ["sa", "ra"]
-
- def is_basic(self):
- return 1
-
- def is_hidden(self):
- return 1
-
- def category(self):
- return "system"
-
- def arguments(self):
- return "<name> <url>"
-
- def description_short(self):
- return "Add a repository"
-
- def local_opt_table(self):
- return [["c", "check-signatures", "", "Check gpg signatures"],
- ["n", "name", "name", "Name of the repository"],
- ["m", "mirrorlist", "", "The url specified is a mirror list"]]
-
- def check_url(self, url):
- if url.startswith('http://') or url.startswith('ftp://') or \
- url.startswith('file://') or url.startswith('https://'):
- return True
- else:
- return False
-
-
- def execute(self, options_dict, non_option_args):
- if len(non_option_args) != 2:
- self.usage()
- return False
-
- repoid = non_option_args[0]
- url = non_option_args[1]
-
- if not self.check_url(url):
- rucktalk.error("Invalid url '%s'" % url)
- return False
-
- if self.find_repo_file(repoid) != None:
- rucktalk.error("Repository '%s' already exists" % repoid)
- return False
-
- yum = self.yum(repos=False)
-
- repopath = os.path.join(yum.conf.reposdir[0], repoid + ".repo")
- if not os.path.exists(os.path.dirname(repopath)):
- os.makedirs(os.path.dirname(repopath))
-
- parser = ConfigParser()
- parser.add_section(repoid)
-
- name = repoid
- if options_dict.has_key('name'):
- name = options_dict['name']
-
- parser.set(repoid, "name", name)
-
- if options_dict.has_key('mirrorlist'):
- parser.set(repoid, "mirrorlist", url)
- else:
- parser.set(repoid, "baseurl", url)
-
- parser.set(repoid, "enabled", "1")
-
- gpgval = "0"
- if options_dict.has_key('check-signatures'):
- gpgval = "1"
-
- parser.set(repoid, "gpgcheck", gpgval)
-
-
-
- parser.write(file(repopath, "w+"))
-
- rucktalk.message("--- Successfully added '%s' ---" % repoid)
-
-
-ruckcommand.register(RepoAddCmd)
-
-class RepoDelCmd(RepoCmd):
-
- def name(self):
- return "repo-delete"
-
- def aliases(self):
- return ["sd", "rd"]
-
- def is_basic(self):
- return 1
-
- def is_hidden(self):
- return 1
-
- def category(self):
- return "system"
-
- def arguments(self):
- return "<id>"
-
- def description_short(self):
- return "Remove a repository"
-
- def execute(self, options_dict, non_option_args):
- if len(non_option_args) != 1:
- self.usage()
- return False
-
- repoid = non_option_args[0]
- repopath = self.find_repo_file(repoid)
- if repopath == None:
- rucktalk.error("Repository '%s' does not exist" % repoid)
- return False
-
- parser = ConfigParser()
- parser.read(repopath)
- parser.remove_section(repoid)
- if len(parser.sections()) == 0:
- os.unlink(repopath)
- else:
- parser.write(file(repopath, 'w+'))
-
- rucktalk.message("--- Successfully removed '%s' ---" % repoid)
-
-
-ruckcommand.register(RepoDelCmd)
diff --git a/contrib/ruck/src/ruckcommand.py b/contrib/ruck/src/ruckcommand.py
deleted file mode 100644
index 7aa7d68..0000000
--- a/contrib/ruck/src/ruckcommand.py
+++ /dev/null
@@ -1,641 +0,0 @@
-###
-### Copyright 2002 Ximian, Inc.
-### Copyright 2008 Aidan Skinner <aidan at skinner.me.uk>
-###
-### This program is free software; you can redistribute it and/or modify
-### it under the terms of the GNU General Public License, version 2,
-### as published by the Free Software Foundation.
-###
-### This program is distributed in the hope that it will be useful,
-### but WITHOUT ANY WARRANTY; without even the implied warranty of
-### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-### GNU General Public License for more details.
-###
-### You should have received a copy of the GNU General Public License
-### along with this program; if not, write to the Free Software
-### Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
-###
-
-import sys
-import os
-import getopt
-import string
-import ruckformat
-import rucktalk
-from packagekit import client
-
-import logging
-
-default_opt_table = [
- ["", "version", "", "Print client version and exit"],
- ["V", "verbose", "", "Verbose output"],
- ["p", "no-plugins", "", "Don't load yum plugins"],
- ["C", "cache-only", "", "Run entirely from cache, don't update cache"],
- ["", "normal-output", "", "Normal output (default)"],
- ["t", "terse", "", "Terse output"],
- ["", "quiet", "", "Quiet output, print only error messages"],
- ["", "read-from-file", "filename", "Get args from file"],
- ["", "read-from-stdin", "", "Get args from stdin"],
- ["", "ignore-rc-file", "", "Don't read ruck's startup file (~/.ruckrc)"],
- ["", "ignore-env", "", "Ignore the RUCK_ARGS environment variable"],
- ["?", "help", "", "Get help on a specific command"]
-]
-
-default_orthogonal_opts = [["verbose", "no-plugins", "terse", "normal-output", "quiet"]]
-
-
-command_dict = {}
-alias_dict = {}
-
-
-def register(constructor):
- obj = constructor()
- name = obj.name()
- aliases = obj.aliases()
- hidden = obj.is_hidden()
- basic = obj.is_basic()
- description = obj.description_short() or "<No Description Available>"
- category = obj.category()
-
- if command_dict.has_key(name):
- rucktalk.error("Command name collision: '"+name+"'")
- else:
- command_dict[name] = (description, constructor, aliases, hidden, basic, category)
-
- for a in aliases:
- al = string.lower(a)
- if command_dict.has_key(al):
- rucktalk.error("Command/alias collision: '"+a+"'")
- elif alias_dict.has_key(al):
- rucktalk.error("Alias collision: '"+a+"'")
- else:
- alias_dict[al] = name
-
-
-def construct(name):
- nl = string.lower(name)
-
- if alias_dict.has_key(nl):
- nl = alias_dict[nl]
-
- if not command_dict.has_key(nl):
- return None
-
- cons = command_dict[nl][1]
-
- return cons()
-
-# It seems bad that this is hard-wired here, but I don't really see
-# any cleaner way around it
-category_data = {"package":["Package management", -1000],
- "dependency":["Dependency analysis", 0],
- "user":["User management", 0],
- "prefs":["Preference management", 0],
- "service":["Service management", 0],
- "other":["Other", 10000000]}
-
-def command_sort(a, b):
-
- a_name = string.lower(a[0])
- b_name = string.lower(b[0])
-
- a_cat = string.lower(a[2])
- b_cat = string.lower(b[2])
-
- if category_data.has_key(a_cat):
- a_catcode = category_data[a_cat][1]
- else:
- a_catcode = 0
-
- if category_data.has_key(b_cat):
- b_catcode = category_data[b_cat][1]
- else:
- b_catcode = 0
-
- return cmp(a_catcode, b_catcode) or cmp(a_cat, b_cat) or cmp(a_name, b_name)
-
-def print_command_list(commands, with_categories=0):
-
- max_len = 0
- cmd_list = []
-
- for c in commands:
- name, aliases, description, category = c
-
- if aliases:
- name = name + " (" + string.join(aliases, ", ") + ")"
-
- cmd_list.append([name, description, category])
- max_len = max(max_len, len(name))
-
- desc_len = max_len + 4
-
- cmd_list.sort(command_sort)
-
- previous_category = "we will banish all dwarves from the love kingdom"
-
- for c in cmd_list:
-
- name, description, category = c
-
- if with_categories and category != previous_category:
- if category_data.has_key(category):
- category_name = category_data[category][0]
- else:
- category_name = string.upper(category[0]) + category[1:]
-
- rucktalk.message("\n" + category_name + " commands:")
- previous_category = category
-
- # If, for some reason, the command list is *really* wide (which it never should
- # be), don't do something stupid.
- if 79 - desc_len > 10:
- desc = ruckformat.linebreak(description, 79-desc_len)
- else:
- desc = [description]
-
- desc_first = desc.pop(0)
- rucktalk.message(" " + string.ljust(name, max_len) + " " + desc_first)
- for d in desc:
- rucktalk.message(" " * desc_len + d)
-
-def usage_basic():
- rucktalk.message("Usage: ruck <command> <options> ...")
- rucktalk.message("")
-
- keys = command_dict.keys()
-
- if keys:
- keys.sort()
- command_list = []
- for k in keys:
- description, constructor, aliases, hidden, basic, category = command_dict[k]
- if not hidden and basic:
- command_list.append([k, aliases, description, category])
-
- rucktalk.message("Some basic commands are:")
- print_command_list(command_list)
-
- rucktalk.message("")
- rucktalk.message("For a more complete list of commands and important options,")
- rucktalk.message("run \"ruck help\".")
- rucktalk.message("")
-
- else:
- rucktalk.error("<< No commands found --- something is wrong! >>")
-
-def usage_full():
- rucktalk.message("Usage: ruck <command> <options> ...")
- rucktalk.message("")
-
- rucktalk.message("The following options are understood by all commands:")
- ruckformat.opt_table(default_opt_table)
-
- keys = command_dict.keys()
-
- if keys:
- command_list = []
- for k in keys:
- description, constructor, aliases, hidden, basic, category = command_dict[k]
- if not hidden:
- command_list.append([k, aliases, description, category])
-
- print_command_list(command_list, with_categories=1)
-
- rucktalk.message("")
- rucktalk.message("For more detailed information about a specific command,")
- rucktalk.message("run 'ruck <command name> --help'.")
- rucktalk.message("")
-
- else:
- rucktalk.error("<< No commands found --- something is wrong! >>")
-
-
-def extract_command_from_argv(argv):
- command = None
- i = 0
- unknown_commands = []
- while i < len(argv) and not command:
- if argv[i][0] != "-":
- command = construct(argv[i])
- if command:
- argv.pop(i)
- else:
- unknown_commands.append(argv[i])
- else:
- takes_arg = 0
- for o in default_opt_table:
- if not (argv[i][1:] == o[0] or argv[i][2:] == o[1]):
- continue
-
- if o[2] != "":
- takes_arg = 1
- break
-
- if takes_arg and string.find(argv[i], "=") == -1:
- i = i + 1
-
- i = i + 1
-
- if not command:
- map(lambda x:rucktalk.warning("Unknown command '%s'" % x),
- unknown_commands)
- rucktalk.warning("No command found on command line.")
- if "--help" in argv or "-?" in argv:
- usage_full()
- else:
- usage_basic()
- sys.exit(1)
-
- return command
-
-###
-### Handle .ruckrc and RUCK_ARGS
-###
-
-def get_user_default_args(argv, command_name):
-
- # We add arguments to the beginning of argv. This means we can
- # override an magically added arg by explicitly putting the
- # orthogonal arg on the command line.
- def join_args(arglist, argv):
- return map(string.strip, arglist + argv)
-
- # Try to read the .ruckrc file. It basically works like a .cvsrc file.
- if "--ignore-rc-file" not in argv:
- ruckrc_files = (os.path.expanduser("~/.ruckrc"),
- os.path.expanduser("~/.rcrc"))
-
- rc_file = None
- for f in ruckrc_files:
- if os.path.exists(f):
- rc_file = f
- break
-
- if rc_file:
- try:
- ruckrc = open(rc_file, "r")
- while 1:
- line = ruckrc.readline()
-
- # strip out comments
- hash_pos = string.find(line, "#")
- if hash_pos >= 0:
- line = line[0:hash_pos]
-
- # skip empty lines
- if not line:
- break
-
- pieces = string.split(line)
- if len(pieces) and pieces[0] == command_name:
- argv = join_args(pieces[1:], argv)
- ruckrc.close()
-
- except IOError:
- # If we can't open the rc file, that is fine... just
- # continue as if nothing happened.
- pass
-
- if "--ignore-env" not in argv:
- if os.environ.has_key("RUCK_ARGS"):
- args = string.split(os.environ["RUCK_ARGS"])
- argv = join_args(args, argv)
-
- return argv
-
-###
-### Handle --read-from-file and --read-from-stdin
-###
-
-def expand_synthetic_args(argv):
-
- ###
- ### First, walk across our argument list and find any --read-from-file
- ### options. For each, read the arguments from the file and insert
- ### them directly after the --read-from-file option.
- ###
-
- i = 0
- is_file_to_read_from = 0
- while i < len(argv):
- arg = argv[i]
- file_to_read = None
- if is_file_to_read_from:
- file_to_read = arg
- is_file_to_read_from = 0
- if arg == "--read-from-file":
- is_file_to_read_from = 1
- elif string.find(arg, "--read-from-file=") == 0:
- file_to_read = arg[len("--read-from-file="):]
- is_file_to_read_from = 0
-
- if file_to_read:
- lines = []
- try:
- f = open(file_to_read, "r")
- lines = map(string.strip, f.readlines())
- except IOError:
- rucktalk.error("Couldn't open file '%s' to read arguments" % file_to_read)
- sys.exit(1)
- argv = argv[:i] + lines + argv[i+1:]
- i = i + len(lines)
-
- i = i + 1
-
- ###
- ### Next, look for --read-from-stdin options. If there is more than
- ### one on the command line, we split our list of options on blank
- ### lines.
- ###
-
- rfs_count = argv.count("--read-from-stdin")
- if rfs_count > 0:
- lines = map(string.strip, sys.stdin.readlines())
-
- i = 0 # position in argv
- j = 0 # position in lines
- while i < len(argv):
-
- if argv[i] == "--read-from-stdin":
-
- if j < len(lines):
- if rfs_count > 1 and "" in lines[j:]:
- j1 = j + lines[j:].index("")
- argv = argv[:i+1] + lines[j:j1] + argv[i+1:]
- j = j1+1
- else:
- argv = argv[:i+1] + \
- filter(lambda x:x!="", lines[j:]) + \
- argv[i+1:]
- j = len(lines)
-
-
- rfs_count = rfs_count - 1
-
- i = i + 1
-
- ###
- ### Finally, we filter our all of those --read-from-* arguments
- ### that we left lying around in argv.
- ###
-
- argv = filter(lambda x: \
- string.find(x,"--read-from-file") != 0 \
- and x != "--read-from-stdin",
- argv)
-
- return argv
-
-
-###
-### The actual Ruckcommand class
-###
-
-class RuckCommand:
-
- def __init__(self):
- self.__yum = None
- self.__pkcon = None
- self.cache_only = False
- self.no_plugins = False
-
- def pkcon(self):
- if not self.__pkcon:
- self.__pkcon = client.PackageKitClient()
- return self.__pkcon
-
- def name(self):
- return "Unknown!"
-
- def aliases(self):
- return []
-
- # If is_hidden returns true, the command will not appear in 'usage'
- # list of available commands.
- def is_hidden(self):
- return 0
-
- def is_basic(self):
- return 0
-
- def is_local(self):
- return 0
-
- def category(self):
- return "other"
-
- def arguments(self):
- return "..."
-
- def description_short(self):
- return ""
-
- def description_long(self):
- return ""
-
- def default_opt_table(self):
- return default_opt_table
-
- def local_opt_table(self):
- return []
-
- def opt_table(self):
- return self.default_opt_table() + self.local_opt_table()
-
-
- def default_orthogonal_opts(self):
- return default_orthogonal_opts
-
- def local_orthogonal_opts(self):
- return []
-
- def orthogonal_opts(self):
- return self.default_orthogonal_opts() + self.local_orthogonal_opts()
-
-
- def usage(self):
-
- rucktalk.message("")
- rucktalk.message("Usage: ruck " + self.name() + " <options> " + \
- self.arguments())
- rucktalk.message("")
-
- description = self.description_long() or self.description_short()
- if description:
- description = "'" + self.name() + "': " + description
- for l in ruckformat.linebreak(description, 72):
- rucktalk.message(l)
- rucktalk.message("")
-
- opts = self.local_opt_table()
- if opts:
- rucktalk.message("'" + self.name() + "' Options:")
- ruckformat.opt_table(opts)
- rucktalk.message("")
-
- opts = self.default_opt_table()
- if opts:
- rucktalk.message("General Options:")
- ruckformat.opt_table(opts)
- rucktalk.message("")
-
-
-
- def execute(self, server, options_dict, non_option_args):
- rucktalk.error("Execute not implemented!")
- sys.exit(1)
-
- def process_argv(self, argv):
- ###
- ### Expand our synthetic args.
- ### Then compile our list of arguments into something that getopt can
- ### understand. Finally, call getopt on argv and massage the results
- ### in something easy-to-use.
- ###
-
- argv = get_user_default_args(argv, self.name())
-
- opt_table = self.opt_table()
-
- short_opt_getopt = ""
- long_opt_getopt = []
-
- short2long_dict = {}
-
- for o in opt_table:
-
- short_opt = o[0]
- long_opt = o[1]
- opt_desc = o[2]
-
- if short_opt:
-
- if short2long_dict.has_key(short_opt):
- rucktalk.error("Short option collision!")
- rucktalk.error("-" + short_opt + ", --" + long_opt)
- rucktalk.error(" vs.")
- rucktalk.error("-" + short_opt + ", --" + short2long_dict[short_opt])
- sys.exit(1)
-
- short2long_dict[short_opt] = long_opt
- short_opt_getopt = short_opt_getopt + short_opt
- if opt_desc:
- short_opt_getopt = short_opt_getopt + ":"
-
- if opt_desc:
- long_opt_getopt.append(long_opt + "=")
- else:
- long_opt_getopt.append(long_opt)
-
- try:
- optlist, args = getopt.getopt(argv, short_opt_getopt, long_opt_getopt)
- except getopt.error:
- did_something = 0
- for a in argv:
- if string.find(a,"--") == 0:
- if not a[2:] in map(lambda x:x[1], opt_table):
- rucktalk.error("Invalid argument " + a)
- did_something = 1
- elif string.find(a, "-") == 0:
- if not a[1:] in map(lambda x:x[0], opt_table):
- rucktalk.error("Invalid argument " + a)
- did_something = 1
-
- # Just in case something strange went wrong and we weren't
- # able to describe quite why the options parsing failed,
- # we print a catch-all error message.
- if not did_something:
- rucktalk.error("Invalid arguments")
-
- self.usage()
-
- sys.exit(1)
-
- ###
- ### Walk through our list of options and replace short options with the
- ### corresponding long option.
- ###
-
- i = 0
- while i < len(optlist):
- key = optlist[i][0]
- if key[0:2] != "--":
- optlist[i] = ("--" + short2long_dict[key[1:]], optlist[i][1])
- i = i + 1
-
-
- ###
- ### Get the list of "orthogonal" options for this command and, if our
- ### list of options contains orthogonal elements, remove all but the
- ### last such option.
- ### (i.e. if we are handed --quiet --verbose, we drop the --quiet)
- ###
-
- optlist.reverse()
- for oo_list in self.orthogonal_opts():
- i = 0
- seen_oo = 0
- while i < len(optlist):
- key = optlist[i][0]
- if key[2:] in oo_list:
- if seen_oo:
- del optlist[i]
- i = i - 1
- seen_oo = 1
- i = i + 1
- optlist.reverse()
-
- ###
- ### Store our options in a dictionary
- ###
-
- opt_dict = {}
-
- for key, value in optlist:
- opt_dict[key[2:]] = value
-
-
- return opt_dict, args
-
-class HelpCmd(RuckCommand):
-
- def name(self):
- return "help"
-
- def is_basic(self):
- return 1
-
- def is_local(self):
- return 1
-
- def description_short(self):
- return "A list of all of the available commands"
-
- def execute(self, options_dict, non_option_args):
- usage_full()
-
- def usage(self):
- usage_full()
-
-register(HelpCmd)
-
-
-class PoopCmd(RuckCommand):
-
- def name(self):
- return "poop"
-
- def is_basic(self):
- return 1
-
- def is_local(self):
- return 1
-
- def is_hidden(self):
- return 1
-
- def execute(self, options_dict, non_option_args):
- os.system("figlet POOP")
-
-register(PoopCmd)
diff --git a/contrib/ruck/src/ruckformat.py b/contrib/ruck/src/ruckformat.py
deleted file mode 100644
index a72f46a..0000000
--- a/contrib/ruck/src/ruckformat.py
+++ /dev/null
@@ -1,293 +0,0 @@
-###
-### Copyright 2002 Ximian, Inc.
-### Copyright 2008 Aidan Skinner <aidan at skinner.me.uk>
-###
-### This program is free software; you can redistribute it and/or modify
-### it under the terms of the GNU General Public License, version 2,
-### as published by the Free Software Foundation.
-###
-### This program is distributed in the hope that it will be useful,
-### but WITHOUT ANY WARRANTY; without even the implied warranty of
-### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-### GNU General Public License for more details.
-###
-### You should have received a copy of the GNU General Public License
-### along with this program; if not, write to the Free Software
-### Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
-###
-
-import string
-import re
-import time
-import rucktalk
-
-###
-### Utility functions. Not really public.
-###
-
-def seconds_to_str(t):
-
- h = int(t/3600)
- m = int((t % 3600)/60)
- s = t % 60
-
- if h > 0:
- return "%dh%02dm%0ds" % (h, m, s)
- return "%ds" % t
- elif m > 0:
- return "%dm%02ds" % (m, s)
- else:
- return "%ds" % s
-
-def bytes_to_str(x):
-
- for fmt in ("%db", "%.2fk", "%.2fM", "%.2fg"):
-
- if x < 1024:
- return fmt % x
-
- x = x / 1024.0
-
- return "!!!"
-
-
-def pad_row(row, col_sizes):
- return map(string.ljust, row, col_sizes)
-
-
-def clean_row(row, separator):
- return map(lambda x, sep=separator:string.replace(x,sep,"_"), row)
-
-
-def max_col_widths(table):
- return reduce(lambda v,w:map(max,v,w),
- map(lambda x:map(len,x),table))
-
-
-def stutter(str, N):
- if N <= 0:
- return ""
- return str + stutter(str, N-1)
-
-
-def linebreak(in_str, width):
-
- str = string.strip(in_str)
-
- if not str:
- return []
-
- if len(str) <= width:
- return [str]
-
- if width < len(str) and str[width] == " ":
- n = width
- else:
- n = string.rfind(str[0:width], " ")
-
- lines = []
-
- if n == -1:
- lines.append(str)
- else:
- lines.append(str[0:n])
- lines = lines + linebreak(str[n+1:], width)
-
- return lines
-
-## Assemble EVRs into strings
-
-def naevr_to_str(naevr):
- version = ""
-
- (n,a,e,v,r) = naevr
-
- if e != '0':
- version = version + e + ":"
-
- version = version + v
-
- if r:
- version = version + "-" + r
-
- version = version + '.' + str(a)
-
- return version
-
-
-## Assemble EVRs into abbreviated strings
-
-def naevr_to_abbrev_str(naevr):
-
- (n,a,e,v,r) = naevr
-
- if r and string.find(r, "snap") != -1:
- r = re.compile(".*(\d\d\d\d)(\d\d)(\d\d)(\d\d)(\d\d)")
- m = r.match(v) or r.match(r)
- if m:
- return "%s-%s-%s, %s:%s" % \
- (m.group(1), m.group(2), m.group(3), m.group(4), m.group(5))
-
- return naevr_to_str(naevr)
-
-
-## Extract data from a package
-
-def package_to_row(pkg, no_abbrev, key_list):
-
- row = []
-
- for key in key_list:
- val = "?"
- if key == "installed":
- # FIXME: show newer versions than are installed as 'U'?
- if (pkg.installed):
- val = 'I'
- else:
- val = 'U'
- elif key == "repo":
- val = pkg.repoid
- elif key == "version":
- val = pkg.ver
- elif key == "name":
- # Trim long names
- val = pkg.name
- if not no_abbrev and len(val) > 25:
- val = val[0:22] + "..."
-
- row.append(val)
-
- return row
-
-def package_to_str(pkg, version=True, repo=True):
- pkg_str = pkg.name
- if version:
- if pkg.epoch == '0':
- pkg_str += "-%s-%s" % (pkg.version, pkg.release)
- else:
- pkg_str += "-%s:%s-%s" % (pkg.epoch, pkg.version, pkg.release)
- pkg_str += ".%s" % pkg.arch
-
- if repo:
- pkg_str += " (%s)" % pkg.repoid
-
- return pkg_str
-
-
-def progress_to_str(pc, completed_size, total_size,
- remaining_sec, elapsed_sec, text=None):
-
- msg = "%3d%%" % pc
-
- if remaining_sec > 0:
- hash_max = 10
- else:
- hash_max = 20
- hash_count = int(hash_max * pc / 100)
- hashes = "#" * hash_count + "-" * (hash_max - hash_count)
-
- msg = msg + " " + hashes
-
- if completed_size > 0 and total_size > 0:
- cs = bytes_to_str(completed_size)
- ts = bytes_to_str(total_size)
- msg = msg + " (" + cs + "/" + ts + ")"
-
- if elapsed_sec > 0:
- msg = msg + ", " + seconds_to_str(elapsed_sec) + " elapsed"
-
- if remaining_sec > 0:
- msg = msg + ", " + seconds_to_str(remaining_sec) + " remain"
-
- if elapsed_sec > 0 and completed_size > 0:
- rate = completed_size / elapsed_sec
- msg = msg + ", " + bytes_to_str(rate) + "/s"
-
- if text != None:
- msg += ", " + text
-
- return msg
-
-
-###
-### Code that actually does something.
-###
-
-def separated(table, separator):
-
- for r in table:
- rucktalk.message(string.join(clean_row(r, separator), separator + " "))
-
-
-def aligned(table):
-
- col_sizes = max_col_widths(table)
-
- for r in table:
- rucktalk.message(string.join(pad_row(r, col_sizes), " "))
-
-
-def opt_table(table):
-
- opt_list = []
-
- for r in table:
- opt = "--" + r[1]
- if r[0]:
- opt = "-" + r[0] + ", " + opt
- if r[2]:
- opt = opt + "=<" + r[2] + ">"
-
- opt_list.append([opt + " ", r[3]])
-
- # By appending [0,0], we insure that this will work even if
- # opt_list is empty (which it never should be)
- max_len = apply(max, map(lambda x:len(x[0]), opt_list) + [0,0])
-
- for opt, desc_str in opt_list:
-
- if 79 - max_len > 10:
- desc = linebreak(desc_str, 79 - max_len)
- else:
- desc = [desc_str]
-
- desc_first = desc.pop(0)
- rucktalk.message(string.ljust(opt, max_len) + desc_first)
- for d in desc:
- rucktalk.message(" " * max_len + d)
-
-
-def tabular(headers, table):
-
- def row_to_string(row, col_sizes):
- if rucktalk.be_terse:
- return string.join(row, "|")
- else:
- return string.join(pad_row(row, col_sizes), " | ")
-
- col_sizes = max_col_widths(table)
-
- if headers and not rucktalk.be_terse:
- col_sizes = map(max, map(len,headers), col_sizes)
-
- # print headers
- rucktalk.message(string.join(pad_row(headers, col_sizes), " | "))
-
- # print head/body separator
- rucktalk.message(string.join (map(lambda x:stutter("-",x), col_sizes), "-+-"))
-
- # print table body
- for r in table:
- rucktalk.message(row_to_string(r, col_sizes))
-
-def bool_to_str(b):
- if b:
- return 'Yes'
- else:
- return 'No'
-
-def bool_to_short_str(b):
- if b:
- return 'Y'
- else:
- return 'N'
diff --git a/contrib/ruck/src/ruckmain.py b/contrib/ruck/src/ruckmain.py
deleted file mode 100644
index 7f7a7ab..0000000
--- a/contrib/ruck/src/ruckmain.py
+++ /dev/null
@@ -1,175 +0,0 @@
-#!/usr/bin/python
-
-###
-### Copyright 2002 Ximian, Inc.
-### Copyright 2008 Aidan Skinner <aidan at skinner.me.uk>
-###
-### This program is free software; you can redistribute it and/or modify
-### it under the terms of the GNU General Public License, version 2,
-### as published by the Free Software Foundation.
-###
-### This program is distributed in the hope that it will be useful,
-### but WITHOUT ANY WARRANTY; without even the implied warranty of
-### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-### GNU General Public License for more details.
-###
-### You should have received a copy of the GNU General Public License
-### along with this program; if not, write to the Free Software
-### Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
-###
-
-import sys
-import string
-import getpass
-import os
-import traceback
-
-import rucktalk
-import ruckcommand
-
-import urlgrabber
-import urlgrabber.grabber
-
-ruck_name = "Red Carpet Command Line Client"
-ruck_copyright = "Copyright (C) 2000-2003 Ximian Inc. All Rights Reserved."
-ruck_version = None
-
-def import_commands(ruck_dir):
- import glob, imp
- sysdir = ruck_dir + "/commands"
- sys.path.append(sysdir)
-
- loaded_modules = []
-
- # First load modules in our current directory, for developers, and then
- # out of the system dir.
- files = glob.glob("*cmds.py")
- files = files + glob.glob("%s/*cmds.py" % sysdir)
-
- for file in files:
- (path, name) = os.path.split(file)
- (name, ext) = os.path.splitext(name)
-
- if name in loaded_modules:
- continue
-
- (file, filename, data) = imp.find_module(name, [path])
-
- try:
- module = imp.load_module(name, file, filename, data)
- except ImportError:
- rucktalk.warning("Can't import module " + filename)
- else:
- loaded_modules.append(name)
-
- if file:
- file.close()
-
-def show_exception(e):
- if rucktalk.show_verbose:
- trace = ""
- exception = ""
- exc_list = traceback.format_exception_only (sys.exc_type, sys.exc_value)
- for entry in exc_list:
- exception += entry
- tb_list = traceback.format_tb(sys.exc_info()[2])
- for entry in tb_list:
- trace += entry
-
- rucktalk.error(str(e))
- rucktalk.error(trace)
- else:
- rucktalk.error(str(e))
-
-def main(ver, ruck_dir):
-
- global local
- global ruck_version
-
- ruck_version = ver
-
- if os.environ.has_key("RUCK_DEBUG"):
- rucktalk.show_debug = 1
-
- import rucklocks
- rucklocks.init()
-
- import_commands(ruck_dir)
-
- ###
- ### Grab the option list and extract the first non-option argument that
- ### looks like a command. This could get weird if someone passes the name
- ### of a command as the argument to an option.
- ###
-
- argv = sys.argv[1:]
-
- argv = ruckcommand.expand_synthetic_args(argv)
-
- if "--version" in argv:
- print
- print ruck_name + " " + ruck_version
- print ruck_copyright
- print
- sys.exit(0)
-
- command = ruckcommand.extract_command_from_argv(argv)
-
- if "-?" in argv or "--help" in argv:
- command.usage()
- sys.exit(0)
-
- # A hack to suppress extra whitespace when dumping.
- if command.name() == "dump":
- rucktalk.be_terse = 1
-
- argv = ruckcommand.get_user_default_args(argv, command)
-
- opt_dict, args = command.process_argv(argv)
-
- ###
- ### Control verbosity
- ###
-
- if opt_dict.has_key("terse"):
- rucktalk.be_terse = 1
-
- if opt_dict.has_key("quiet"):
- rucktalk.show_messages = 0
- rucktalk.show_warnings = 0
-
- if opt_dict.has_key("verbose"):
- rucktalk.show_verbose = 1
-
- ### Whitespace is nice, so we always print a blank line before
- ### executing the command
-
- if not rucktalk.be_terse:
- rucktalk.message("")
-
- if opt_dict.has_key("cache-only") or os.getuid() != 0:
- command.cache_only = True
- elif opt_dict.has_key("no-plugins"):
- command.no_plugins = True
-
- try:
- command.execute(opt_dict, args)
- except IOError, e:
- if e.errno == 13:
- rucktalk.error("You must be root to execute this command")
- else:
- show_exception(e)
-
- sys.exit(1)
- except Exception, e:
- show_exception(e)
- sys.exit(1)
-
- ### Whitespace is nice, so we always print a blank line after
- ### executing the command
-
- if not rucktalk.be_terse:
- rucktalk.message("")
-
-
-
diff --git a/contrib/ruck/src/ruckpackagecmds.py b/contrib/ruck/src/ruckpackagecmds.py
deleted file mode 100644
index 5edfde4..0000000
--- a/contrib/ruck/src/ruckpackagecmds.py
+++ /dev/null
@@ -1,1343 +0,0 @@
-###
-### Copyright 2002 Ximian, Inc.
-### Copyright 2008 Aidan Skinner <aidan at skinner.me.uk>
-###
-### This program is free software; you can redistribute it and/or modify
-### it under the terms of the GNU General Public License, version 2,
-### as published by the Free Software Foundation.
-###
-### This program is distributed in the hope that it will be useful,
-### but WITHOUT ANY WARRANTY; without even the implied warranty of
-### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-### GNU General Public License for more details.
-###
-### You should have received a copy of the GNU General Public License
-### along with this program; if not, write to the Free Software
-### Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
-###
-
-import sys
-import os
-import re
-import os.path
-import shutil
-import glob
-from ConfigParser import ConfigParser
-import string
-import rucktalk
-import ruckformat
-import ruckcommand
-
-import rpmUtils.arch
-from rpmUtils.miscutils import compareEVR
-from packagekit import enums as pkenums
-
-class PackageCmd(ruckcommand.RuckCommand):
-
- def is_installed(self, p):
- pkcon = self.pkcon()
-
- (n,a,e,v,r) = p.pkgtup
- # FIXME: this only searches name, not full naevr
- matches = pkcon.search_name(pkcon.PK_FILTER_INSTALLED, n)
- return len(matches) > 0
-
- def find_available_packages(self, list):
- yum = self.yum()
-
- exactmatches, matches, unmatched = self.find_packages(list)
-
- if len(unmatched) > 0:
- raise Exception("Could not find package '%s'" % unmatched[0])
-
- installable = unique(exactmatches + matches)
- archlist = yum.conf.exactarchlist
-
- installs = {}
- updates = {}
-
- for pkg in installable:
- if yum.rpmdb.installed(po=pkg):
- continue
-
- # everything installed that matches the name
- installedByKey = yum.rpmdb.searchNevra(name=pkg.name)
- comparable = []
- for instpo in installedByKey:
- (n2, a2, e2, v2, r2) = instpo.pkgtup
- if rpmUtils.arch.isMultiLibArch(a2) == rpmUtils.arch.isMultiLibArch(pkg.arch):
- comparable.append(instpo)
-
- # go through each package
- if len(comparable) > 0:
- for instpo in comparable:
- if pkg > instpo: # we're newer - this is an update, pass to them
- if instpo.name in archlist:
- if pkg.arch == instpo.arch:
- if not updates.has_key(pkg.name):
- updates[pkg.name] = []
-
- updates[pkg.name].append(pkg)
- else:
- if not updates.has_key(pkg.name):
- updates[pkg.name] = []
-
- updates[pkg.name].append(pkg)
- elif pkg == instpo: # same, ignore
- continue
- else: # we've not got any installed that match n or n+a
- if not installs.has_key(pkg.name):
- installs[pkg.name] = []
-
- installs[pkg.name].append(pkg)
-
- pkglist = []
- for name in installs.keys():
- pkglist.extend(yum.bestPackagesFromList(installs[name]))
-
- installs = pkglist
-
- pkglist = []
- for name in updates.keys():
- pkglist.extend(yum.bestPackagesFromList(updates[name]))
-
- updates = pkglist
-
- return installs, updates
-
- def filter_installs(self, list):
- uninstalled = []
- installed = []
-
- for p in list:
- if self.is_installed(p):
- installed.append(p)
- else:
- uninstalled.append(p)
-
- return uninstalled, installed
-
- def find_packages(self, list, installed=False):
- yum = self.yum()
-
- if installed:
- avail = yum.rpmdb.returnPackages()
- else:
- avail = yum.pkgSack.returnPackages()
-
- return self.parsePackages(avail, list, casematch=0)
-
- def buildPkgRefDict(self, pkgs):
- """take a list of pkg objects and return a dict the contains all the possible
- naming conventions for them eg: for (name,i386,0,1,1)
- dict[name] = (name, i386, 0, 1, 1)
- dict[name.i386] = (name, i386, 0, 1, 1)
- dict[name-1-1.i386] = (name, i386, 0, 1, 1)
- dict[name-1] = (name, i386, 0, 1, 1)
- dict[name-1-1] = (name, i386, 0, 1, 1)
- dict[0:name-1-1.i386] = (name, i386, 0, 1, 1)
- dict[name-0:1-1.i386] = (name, i386, 0, 1, 1)
- """
- pkgdict = {}
- for pkg in pkgs:
- pkgtup = (pkg.name, pkg.arch, pkg.epoch, pkg.version, pkg.release)
- (n, a, e, v, r) = pkgtup
- name = n
- nameArch = '%s.%s' % (n, a)
- nameVerRelArch = '%s-%s-%s.%s' % (n, v, r, a)
- nameVer = '%s-%s' % (n, v)
- nameVerRel = '%s-%s-%s' % (n, v, r)
- envra = '%s:%s-%s-%s.%s' % (e, n, v, r, a)
- nevra = '%s-%s:%s-%s.%s' % (n, e, v, r, a)
- repoName = '%s:%s' % (pkg.repoid, n)
- repoNameArch = '%s:%s.%s' % (pkg.repoid, n, a)
-
- for item in [name, nameArch, nameVerRelArch, nameVer, nameVerRel, envra, nevra, repoName, repoNameArch]:
- if not pkgdict.has_key(item):
- pkgdict[item] = []
- pkgdict[item].append(pkg)
-
- return pkgdict
-
- def parsePackages(self, pkgs, usercommands, casematch=0):
- pkgdict = self.buildPkgRefDict(pkgs)
- exactmatch = []
- matched = []
- unmatched = []
- for command in usercommands:
- if pkgdict.has_key(command):
- exactmatch.extend(pkgdict[command])
- del pkgdict[command]
- else:
- # anything we couldn't find a match for
- # could mean it's not there, could mean it's a wildcard
- if re.match('.*[\*,\[,\],\{,\},\?].*', command):
- trylist = pkgdict.keys()
- restring = fnmatch.translate(command)
- if casematch:
- regex = re.compile(restring) # case sensitive
- else:
- regex = re.compile(restring, flags=re.I) # case insensitive
- foundit = 0
- for item in trylist:
- if regex.match(item):
- matched.extend(pkgdict[item])
- del pkgdict[item]
- foundit = 1
-
- if not foundit:
- unmatched.append(command)
-
- else:
- # we got nada
- unmatched.append(command)
-
- matched = unique(matched)
- unmatched = unique(unmatched)
- exactmatch = unique(exactmatch)
- return exactmatch, matched, unmatched
-
- def get_package(self, pkg_tuple):
- yum = self.yum()
-
- (n,a,e,v,r) = pkg_tuple
- matches = yum.pkgSack.searchNevra(name=n, arch=a, epoch=e,
- ver=v, rel=r)
- return matches[0]
-
- def get_updates(self, repo=None):
- yum = self.yum()
-
- yum.doRpmDBSetup()
- yum.doUpdateSetup()
-
- updates = yum.up.updating_dict
-
- tuples = []
-
- for new in updates:
- (n,a,e,v,r) = new
- matches = yum.pkgSack.searchNevra(name=n, arch=a, epoch=e,
- ver=v, rel=r)
- new_pkg = matches[0]
- if repo and new_pkg.repoid != repo:
- continue
-
- (n,a,e,v,r) = updates[new][0]
- matches = yum.rpmdb.searchNevra(name=n, arch=a, epoch=e,
- ver=v, rel=r)
- old_pkg = matches[0]
-
- tuples.append((new_pkg, old_pkg))
-
- return tuples
-
-
- def resolve_deps(self):
- rucktalk.message('Resolving dependencies...')
- yum = self.yum()
-
- return yum.buildTransaction()
-
- def show_ts_list(self, items, isdep=False):
- for pkg in items:
- msg = " " + ruckformat.package_to_str(pkg)
- if isdep:
- msg += " (dependency)"
- rucktalk.message(msg)
-
- def show_ts_packages(self):
- yum = self.yum()
-
- yum.tsInfo.makelists()
-
- list = yum.tsInfo.installed
- dep_list = yum.tsInfo.depinstalled
- if len(list) > 0 or len(dep_list) > 0:
- rucktalk.message('The following packages will be installed:')
- self.show_ts_list(list)
- self.show_ts_list(dep_list, True)
-
- list = yum.tsInfo.updated
- dep_list = yum.tsInfo.depupdated
- if len(list) > 0 or len(dep_list) > 0:
- rucktalk.message('The following packages will be upgraded:')
- self.show_ts_list(list)
- self.show_ts_list(dep_list, True)
-
- list = yum.tsInfo.removed
- dep_list = yum.tsInfo.depremoved
- if len(list) > 0 or len(dep_list) > 0:
- rucktalk.message('The following packages will be removed:')
- self.show_ts_list(list)
- self.show_ts_list(dep_list, True)
-
- def get_pkgs_to_download(self):
- yum = self.yum()
-
- downloadpkgs = []
- for txmbr in yum.tsInfo.getMembers():
- if txmbr.ts_state in ['i', 'u']:
- po = txmbr.po
- if po:
- downloadpkgs.append(po)
-
- return downloadpkgs
-
- def parse_dep_str(self, dep_str):
- ret = {}
-
- info = string.split(dep_str)
- info_len = len(info)
- if info_len == 1:
- ret["dep"] = dep_str
- return ret
- elif info_len != 3:
- raise Exception("Invalid dep string")
-
- valid_relations = ["=", "<", "<=", ">", ">=", "!="]
-
- if not info[1] in valid_relations:
- raise Exception("Invalid relation %s" % info[1])
-
- ret["dep"] = info[0]
- ret["relation"] = info[1]
-
- version_regex = re.compile("^(?:(\d+):)?(.*?)(?:-([^-]+))?$")
- match = version_regex.match(info[2])
-
- if match.group(1):
- ret["has_epoch"] = 1
- ret["epoch"] = int(match.group(1))
- else:
- ret["has_epoch"] = 0
- ret["epoch"] = 0
-
- ret["version"] = match.group(2)
-
- if match.group(3):
- ret["release"] = match.group(3)
- else:
- ret["release"] = ""
-
- return ret
-
- def need_prompt(self):
-
- yum = self.yum()
-
- # prompt if:
- # package was added to fill a dependency
- # package is being removed
- # package wasn't explictly given on the command line
- for txmbr in yum.tsInfo.getMembers():
- if txmbr.isDep or txmbr.ts_state == 'e':
- return True
-
- return False
-
- def gpgsigcheck(self, pkgs):
- yum = self.yum()
-
- for p in pkgs:
- result, errmsg = yum.sigCheckPkg(p)
- if result == 0:
- # woo!
- pass
- elif result == 1:
- # FIXME: need to download gpg
- rucktalk.error("Ignoring missing gpg key.")
- pass
- else:
- yumtalk.error(errmsg)
- return False
-
- return True
-
- def tsInfo_is_empty(self, tsInfo):
- return len(tsInfo.installed) == 0 and \
- len(tsInfo.depinstalled) == 0 and \
- len(tsInfo.updated) == 0 and \
- len(tsInfo.depupdated) == 0 and \
- len(tsInfo.removed) == 0 and \
- len(tsInfo.depremoved) == 0
-
- def start_transaction(self, dryrun=False, download_only=False):
- yum = self.yum()
-
- if not download_only:
- (rescode, resmsgs) = self.resolve_deps()
- if rescode != 2:
- for resmsg in resmsgs:
- rucktalk.error(resmsg)
-
- return False
-
- self.show_ts_packages()
-
- if self.tsInfo_is_empty(yum.tsInfo):
- rucktalk.warning("Nothing to do.")
- return False
-
- downloadpkgs = self.get_pkgs_to_download()
-
- if len(downloadpkgs) > 0:
- total_size = 0
-
- for p in downloadpkgs:
- try:
- size = int(p.size())
- total_size += size
- except:
- pass
-
- if total_size > 0:
- rucktalk.message("\nTotal download size: %s\n" % (ruckformat.bytes_to_str(total_size)))
-
- if self.need_prompt():
- answer = raw_input('\nProceed with transaction? (y/N) ')
- if len(answer) != 1 or answer[0] != 'y':
- rucktalk.message('Transaction Canceled')
- return False
-
- problems = yum.downloadPkgs(downloadpkgs)
- if len(problems.keys()) > 0:
- rucktalk.error("Error downloading packages:")
- for key in problems.keys():
- for error in unique(problems[key]):
- rucktalk.message(" %s: %s" % (key, error))
- return False
-
- if download_only:
- for pkg in downloadpkgs:
- dest = ruckformat.package_to_str(pkg, repo=False) + ".rpm"
- shutil.move(pkg.localpath, dest)
- rucktalk.message ("Downloaded '%s'" % dest)
-
- return True
-
- # Check GPG signatures
- if not self.gpgsigcheck(downloadpkgs):
- return False
-
- tsConf = {}
- for feature in ['diskspacecheck']: # more to come, I'm sure
- tsConf[feature] = getattr(yum.conf, feature)
-
- if dryrun:
- testcb = ruckyum.RPMInstallCallback(output=1)
- testcb.tsInfo = yum.tsInfo
- # clean out the ts b/c we have to give it new paths to the rpms
- del yum.ts
-
- yum.initActionTs()
- yum.populateTs(keepold=0) # sigh
- tserrors = yum.ts.test(testcb, conf=tsConf)
- del testcb
-
- if len(tserrors) > 0:
- errstring = ''
- for descr in tserrors:
- errstring += ' %s\n' % descr
-
- rucktalk.error(errstring)
- return False
-
- else:
- rucktalk.message('Running Transaction Test')
-
- testcb = ruckyum.RPMInstallCallback(output=0)
- testcb.tsInfo = yum.tsInfo
- # clean out the ts b/c we have to give it new paths to the rpms
- del yum.ts
-
- yum.initActionTs()
- # save our dsCallback out
- dscb = yum.dsCallback
- yum.dsCallback = None # dumb, dumb dumb dumb!
- yum.populateTs(keepold=0) # sigh
- tserrors = yum.ts.test(testcb, conf=tsConf)
- del testcb
-
- if len(tserrors) > 0:
- errstring = 'Transaction Check Error: '
- for descr in tserrors:
- errstring += ' %s\n' % descr
-
- rucktalk.error(errstring)
- return False
-
- rucktalk.message('Transaction Test Succeeded\n')
- del yum.ts
-
- yum.initActionTs() # make a new, blank ts to populate
- yum.populateTs(keepold=0) # populate the ts
- yum.ts.check() #required for ordering
- yum.ts.order() # order
-
- # put back our depcheck callback
- yum.dsCallback = dscb
-
- cb = ruckyum.RPMInstallCallback(output=1)
- cb.tsInfo = yum.tsInfo
-
- yum.runTransaction(cb=cb)
-
- rucktalk.message('\nTransaction Finished')
- return True
-
-class PackagesCmd(PackageCmd):
-
- def name(self):
- return "packages"
-
- def aliases(self):
- return ["pa"]
-
- def category(self):
- return "basic"
-
- def is_basic(self):
- return 1
-
- def arguments(self):
- return ""
-
- def description_short(self):
- return "List all packages"
-
- def category(self):
- return "package"
-
- def local_opt_table(self):
- return [["", "no-abbrev", "", "Do not abbreviate channel or version information"],
- ["i", "installed-only", "", "Show only installed packages"],
- ["u", "uninstalled-only", "", "Show only uninstalled packages"],
- ["", "sort-by-name", "", "Sort packages by name (default)"],
- ["", "sort-by-repo", "", "Sort packages by repository"]]
-
- def local_orthogonal_opts(self):
- return [["installed-only", "uninstalled-only"]]
-
- def execute(self, options_dict, non_option_args):
- # FIXME: does not know about status, not sure all is right default
- pkcon = self.pkcon()
-
- table_rows = []
- no_abbrev = options_dict.has_key("no-abbrev")
-
- sort_idx = 2
- table_headers = ["S", "Repository", "Name", "Version"]
- table_keys = ["installed", "repo", "name", "version"]
-
- filter = pkenums.FILTER_NEWEST
- if options_dict.has_key("uninstalled-only"):
- filter = filter + pkenums.FILTER_NOT_INSTALLED
- elif options_dict.has_key("installed-only"):
- filter = pkenums.FILTER_INSTALLED
-
- filter = pkenums.FILTER_INSTALLED
- pkgs = pkcon.get_packages(filter)
-
- remote_tuples = {}
-
- for p in pkgs:
- row = ruckformat.package_to_row(p, no_abbrev, table_keys)
- table_rows.append(row)
-
- if table_rows:
- if options_dict.has_key("sort-by-repo"):
- table_rows.sort(lambda x,y:cmp(string.lower(x[1]), string.lower(y[1])) or\
- cmp(string.lower(x[2]), string.lower(y[2])))
- else:
- table_rows.sort(lambda x,y:cmp(string.lower(x[sort_idx]), string.lower(y[sort_idx])))
- ruckformat.tabular(table_headers, table_rows)
- else:
- rucktalk.message("--- No packages found ---")
-
-
-###
-### "search" command
-###
-
-class PackageSearchCmd(PackageCmd):
-
- def name(self):
- return "search"
-
- def aliases(self):
- return ["se"]
-
- def is_basic(self):
- return 1
-
- def category(self):
- return "package"
-
- def arguments(self):
- return "[package name]"
-
- def description_short(self):
- return "Search packages"
-
- def local_opt_table(self):
- return [['d', "search-descriptions", '', "Search in package descriptions, as well as package names"],
- ['i', "installed-only", '', "Search only installed packages"],
- ['u', "uninstalled-only", '', "Search only uninstalled packages"],
- ["", "sort-by-name", "", "Sort packages by name (default)"],
- ["", "sort-by-repo", "", "Sort packages by repository, not by name"],
- ["", "no-abbrev", "", "Do not abbreviate channel or version information"]]
-
- def execute(self, options_dict, non_option_args):
- pkcon = self.pkcon()
-
- searchlist = ['name']
- if options_dict.has_key('search-descriptions'):
- method = pkcon.search_details
- else:
- method = pkcon.search_name
-
- filter = pkenums.FILTER_NONE
- if options_dict.has_key('installed-only'):
- filter = pkenums.FILTER_INSTALLED
- elif options_dict.has_key('uninstalled-only'):
- filter = pkenums.FILTER_NOT_INSTALLED
-
- result = {}
- matches = method(non_option_args[0], filter)
- if len(matches) > 0:
- table_keys = ["installed", "repo", "name", "version"]
- table_rows = []
- no_abbrev = options_dict.has_key("no-abbrev")
-
- for pkg in matches:
- row = ruckformat.package_to_row(pkg, no_abbrev, table_keys)
- table_rows.append(row)
-
- if options_dict.has_key("sort-by-repo"):
- table_rows.sort(lambda x,y:cmp(string.lower(x[1]), string.lower(y[1])) or\
- cmp(string.lower(x[2]), string.lower(y[2])))
- else:
- table_rows.sort(lambda x,y:cmp(string.lower(x[2]), string.lower(y[2])))
- ruckformat.tabular(["S", "Repository", "Name", "Version"], table_rows)
- else:
- rucktalk.message("--- No packages found ---")
-
-
-
-class PackageListUpdatesCmd(PackageCmd):
-
- def name(self):
- return "list-updates"
-
- def is_basic(self):
- return 1
-
- def aliases(self):
- return ["lu"]
-
- def arguments(self):
- return
-
- def description_short(self):
- return "List available updates"
-
- def category(self):
- return "package"
-
- def local_opt_table(self):
- return [["", "no-abbrev", "", "Do not abbreviate channel or version information"],
- ["", "sort-by-name", "", "Sort packages by name (default)"],
- ["", "sort-by-repo", "", "Sort packages by repository"]]
-
- def execute(self, options_dict, non_option_args):
- no_abbrev = options_dict.has_key("no-abbrev") or \
- options_dict.has_key("terse")
-
- pkcon = self.pkcon()
-
- table_keys = ["repo", "name", "version"]
- table_rows = []
-
- updates = pkcon.get_updates()
-
- for new_pkg in updates:
- row = ruckformat.package_to_row(new_pkg, no_abbrev, table_keys)
- table_rows.append(row)
-
- if len(table_rows):
- if options_dict.has_key("sort-by-repo"):
- table_rows.sort(lambda x,y:cmp(string.lower(x[0]), string.lower(y[0])) or\
- cmp(string.lower(x[1]), string.lower(y[1])))
- else:
- table_rows.sort(lambda x,y:cmp(string.lower(x[1]), string.lower(y[1])))
-
- ruckformat.tabular(["Repository", "Name",
- "Version"],
- table_rows)
- else:
- rucktalk.message("--- No updates found ---")
-
-class PackageUpdatesSummaryCmd(PackageCmd):
-
- def name(self):
- return "summary"
-
- def is_basic(self):
- return 1
-
- def aliases(self):
- return ["sum"]
-
- def arguments(self):
- return ""
-
- def description_short(self):
- return "Display a summary of available updates updates"
-
- def category(self):
- return "package"
-
- def local_opt_table(self):
- return [["", "no-abbrev", "", "Do not abbreviate channel or version information"]]
-
- def execute(self, options_dict, non_option_args):
- pkcon = self.pkcon()
-
- updates = pkcon.get_updates()
- repos = {}
- for pkg in updates:
- bits = ruckformat.package_to_row(pkg, False, ['repo'])
- if not repos.has_key(bits[0]):
- repos[bits[0]] = [bits[0], 0]
- repos[bits[0]][1] = str(int(repos[bits[0]][1])+1)
-
- repolist = []
- for repo in repos.keys():
- repolist.append(repos[repo])
-
- if len(repolist) > 0:
- repolist.sort(lambda x,y:cmp(y[1], x[1]))
- headers = ["Repository", "Total"]
- ruckformat.tabular(headers, repolist)
- else:
- rucktalk.message("--- No updates found ---")
-
-
-class PackageInfoCmd(ruckcommand.RuckCommand):
-
- def name(self):
- return "info"
-
- def is_basic(self):
- return 1
-
- def aliases(self):
- return ["if"]
-
- def category(self):
- return "package"
-
- def arguments(self):
- return "<package-name>"
-
- def description_short(self):
- return "Show detailed information about a package"
-
- def execute(self, options_dict, non_option_args):
-
- if not non_option_args:
- self.usage()
- sys.exit(1)
-
- pkcon = self.pkcon()
-
- for a in non_option_args:
-
- inform = 0
- channel = None
- package = None
-
- plist = pkcon.resolve("none", a)
-
- if plist == None or len(plist) == 0:
- rucktalk.message("--- No packages found ---")
- sys.exit(1)
-
- ## Find the latest version
- latest_ver, latest_id = None, None
- for pkg in plist:
- row = ruckformat.package_to_row(pkg, False, ['version'])
- if latest_ver == None or row[0] > latest_ver:
- latest_ver= row[0]
- latest_id = pkg
-
- latest = pkcon.get_details(latest_id['id'])[0]
- details = ruckformat.package_to_row(latest, False, ['name', 'version', 'repo', 'installed'])
- latest['name'] = details[0]
- latest['version'] = details[1]
- latest['repo'] = details[2]
- latest['installed'] = (details[3] == 'I')
-
- rucktalk.message("")
- rucktalk.message("Name: " + latest['name'])
- rucktalk.message("Version: " + latest['version'])
-
- if latest_id['installed']:
- rucktalk.message("Installed: Yes")
- else:
- rucktalk.message("Installed: No")
-
- rucktalk.message("Package size: " + str(latest['size']))
-
- rucktalk.message("Group: " + latest['group'])
- rucktalk.message("Homepage: " + latest['url'])
- rucktalk.message("Description: " + latest['detail'])
-
-class PackageFileCmd(ruckcommand.RuckCommand):
-
- def name(self):
- return "package-file"
-
- def aliases(self):
- return ["pf"]
-
- def arguments(self):
- return "<file> ..."
-
- def is_basic(self):
- return 1
-
- def category(self):
- return "package"
-
- def description_short(self):
- return "List packages that own the files provided"
-
- def execute(self, options_dict, non_option_args):
- size = len(non_option_args)
- if size < 1:
- self.usage()
- return False
-
- table_rows = []
- yum = self.yum()
-
- for file in non_option_args:
- if not os.access (file, os.F_OK):
- rucktalk.error("File %s does not exist" % file)
- continue
-
- matches = yum.rpmdb.searchFiles (file);
- if not matches:
- rucktalk.message("No package owns file %s" % file)
- continue
-
- for pkg in matches:
- row = ruckformat.package_to_row(yum, pkg, False, ["name", "version"])
- if size > 1:
- row.insert (0, file)
- table_rows.append (row)
-
- if len(table_rows):
- if size == 1:
- ruckformat.tabular(["Name", "Version"], table_rows)
- else:
- ruckformat.tabular(["File", "Name", "Version"], table_rows)
-
-
-class PackageFileListCmd(ruckcommand.RuckCommand):
-
- def name(self):
- return "file-list"
-
- def aliases(self):
- return ["fl"]
-
- def arguments(self):
- return "<package>"
-
- def is_basic(self):
- return 1
-
- def category(self):
- return "package"
-
- def description_short(self):
- return "List files within a package"
-
- def execute(self, options_dict, non_option_args):
- if len(non_option_args) != 1:
- self.usage()
- return False
-
- yum = self.yum()
- pkg = non_option_args[0]
-
- matches = yum.rpmdb.searchNevra (name=pkg);
- if not matches:
- yum.doSackFilelistPopulate()
- matches = yum.pkgSack.searchNevra (name=pkg);
- if not matches:
- rucktalk.message("--- No package found ---")
-
- for p in matches:
- files = None
-
- # FIXME: returnFileEntries() is always empty for installed
- # packages
- if p.repoid == 'installed':
- files = p.returnSimple('filenames');
- else:
- files = p.returnFileEntries();
-
- if not files:
- rucktalk.message("--- No files available ---")
-
- files.sort(lambda x,y:cmp(x,y))
- for file in files:
- rucktalk.message(file)
-
-
-### Dep commands ###
-
-class PackageDepCmd(PackageCmd):
-
- def category(self):
- return "package"
-
- def arguments(self):
- return "<package-dep> ..."
-
- def is_basic(self):
- return 1
-
- def local_opt_table(self):
- return [["i", "installed-only", "", "Show only installed packages"],
- ["u", "uninstalled-only", "", "Show only uninstalled packages"]]
-
- def check_relation(self, di, pkg):
- que_rel = di["relation"]
- eq_list = ['=', '<=', '>=']
- rel_map = {"EQ":"=", "LT":"<", "LE":"<=", "GT":">", "GE":">="}
-
- for (n, f, (e, v, r)) in pkg.returnPrco(self.dep_type()):
- if di["dep"] != n:
- continue
-
- # match anything if the package dep doesn't have a relation
- if not f:
- return True
-
- pkg_rel = rel_map[f]
- result = rpmUtils.miscutils.compareEVR((di["epoch"], di["version"], di["release"]),\
- (e, v, r))
-
- if result < 0:
- if que_rel in ['!=', '>', '>=']:
- return True
- elif result > 0:
- if que_rel in ['!=', '<', '<=']:
- return True
- elif result == 0:
- if que_rel in eq_list and pkg_rel in eq_list:
- return True
-
- return False
-
- def execute(self, options_dict, non_option_args):
- if len(non_option_args) < 1:
- self.usage()
- return False
-
- table_rows = []
- yum = self.yum()
-
- for dep in non_option_args:
- dep_info = self.parse_dep_str(dep)
-
- matches = []
- if not options_dict.has_key('installed-only'):
- matches = self.dep_search_uninstalled (dep_info["dep"]);
-
- if not options_dict.has_key('uninstalled-only'):
- matches += self.dep_search_installed (dep_info["dep"]);
-
- if dep_info.has_key("relation"):
- matches = [p for p in matches if self.check_relation (dep_info, p)]
-
- if not matches:
- rucktalk.message("--- No matches for %s ---" % dep)
- continue
-
- for pkg in matches:
- row = ruckformat.package_to_row(yum, pkg, False, ["name", "version"])
-
- repo = pkg.repoid
- if yum.rpmdb.installed(name=pkg.name, arch=pkg.arch):
- repo = "installed"
-
- row.insert(0, repo)
- table_rows.append (row)
-
- if len(table_rows):
- ruckformat.tabular(["Repository", "Name", "Version"], table_rows)
-
-
-class WhatProvidesCmd(PackageDepCmd):
-
- def name(self):
- return "what-provides"
-
- def aliases(self):
- return ["wp"]
-
- def description_short(self):
- return "List packages that provide what you specify"
-
- def dep_search_installed(self, name):
- yum = self.yum()
- return yum.rpmdb.searchProvides(name)
-
- def dep_search_uninstalled(self, name):
- yum = self.yum()
- return yum.pkgSack.searchProvides(name)
-
- def dep_type(self):
- return "provides"
-
-
-class WhatRequiresCmd(PackageDepCmd):
-
- def name(self):
- return "what-requires"
-
- def aliases(self):
- return ["wr"]
-
- def category(self):
- return "package"
-
- def description_short(self):
- return "List packages that require what you specify"
-
- def dep_search_installed(self, name):
- yum = self.yum()
- return yum.rpmdb.searchRequires(name)
-
- def dep_search_uninstalled(self, name):
- yum = self.yum()
- return yum.pkgSack.searchRequires(name)
-
- def dep_type(self):
- return "requires"
-
-class WhatConflictsCmd(PackageDepCmd):
-
- def name(self):
- return "what-conflicts"
-
- def aliases(self):
- return ["wc"]
-
- def category(self):
- return "package"
-
- def description_short(self):
- return "List packages that conflict with what you specify"
-
- def dep_search_installed(self, name):
- yum = self.yum()
- return yum.rpmdb.searchConflicts(name)
-
- def dep_search_uninstalled(self, name):
- yum = self.yum()
- return yum.pkgSack.searchConflicts(name)
-
- def dep_type(self):
- return "conflicts"
-
-class PackageInfoBaseCmd(PackageCmd):
-
- def category(self):
- return "package"
-
- def arguments(self):
- return "<package> ..."
-
- def is_basic(self):
- return 1
-
- def local_opt_table(self):
- return [["i", "installed-only", "", "Show only installed packages"],
- ["u", "uninstalled-only", "", "Show only uninstalled packages"]]
-
-
- def execute(self, options_dict, non_option_args):
- if len(non_option_args) < 1 or (options_dict.has_key('uninstalled-only') and options_dict.has_key('installed-only')):
- self.usage()
- return False
-
- table_rows = []
- yum = self.yum()
- dtype = self.dep_type();
-
- plist = []
- unmatched1 = None
- unmatched2 = None
-
- if not options_dict.has_key('uninstalled-only'):
- exactmatches, matches, unmatched1 = self.find_packages (non_option_args, installed=True)
- plist = exactmatches + matches
-
- if not options_dict.has_key('installed-only'):
- exactmatches, matches, unmatched2 = self.find_packages (non_option_args, installed=False)
- plist += exactmatches
- plist += matches
-
- if (unmatched1 is None or len(unmatched1) > 0) and (unmatched2 is None or len(unmatched2)) > 0:
- if unmatched1 != None:
- arg = unmatched1[0]
- else:
- arg = unmatched2[0]
-
- rucktalk.error("Could not find package '%s'" % arg)
- return False
-
- for p in plist:
- rucktalk.message("--- %s ---" % ruckformat.package_to_str(p))
- deps = p.returnPrco(dtype)
-
- if len(deps) == 0:
- rucktalk.message("\nNo %s found\n" % dtype)
- else:
- for dep in deps:
- #FIXME: piece of crap prcoPrintable sometimes chokes
- try:
- rucktalk.message(p.prcoPrintable(dep))
- except:
- pass
- rucktalk.message('')
-
-
-class PackageInfoProvidesCmd(PackageInfoBaseCmd):
-
- def name(self):
- return "info-provides"
-
- def aliases(self):
- return ["ip"]
-
- def description_short(self):
- return "List a package's provides"
-
- def dep_type(self):
- return "provides"
-
-
-class PackageInfoRequiresCmd(PackageInfoBaseCmd):
-
- def name(self):
- return "info-requires"
-
- def aliases(self):
- return ["ir"]
-
- def description_short(self):
- return "List a package's requires"
-
- def dep_type(self):
- return "requires"
-
-class PackageInfoConflictsCmd(PackageInfoBaseCmd):
-
- def name(self):
- return "info-conflicts"
-
- def aliases(self):
- return ["ic"]
-
- def description_short(self):
- return "List a package's conflicts"
-
- def dep_type(self):
- return "conflicts"
-
-class PackageInfoObsoletesCmd(PackageInfoBaseCmd):
-
- def name(self):
- return "info-obsoletes"
-
- def aliases(self):
- return ["io"]
-
- def description_short(self):
- return "List a package's obsoletes"
-
- def dep_type(self):
- return "obsoletes"
-
-class LockListCmd(PackageCmd):
-
- def name(self):
- return "lock-list"
-
- def is_basic(self):
- return 1
-
- def aliases(self):
- return ["ll"]
-
- def description_short(self):
- return "List locks"
-
- def category(self):
- return "package"
-
- def execute(self, options_dict, non_option_args):
- yum = self.yum()
-
- table_rows = []
-
- locks = rucklocks.get_locks()
-
- i = 1
- for (repo, lock) in locks:
- if repo is None:
- repo = ''
-
- table_rows.append((str(i), repo, lock))
- i += 1
-
- if len(table_rows):
- ruckformat.tabular(["#", "Repository", "Lock"], table_rows)
- else:
- rucktalk.message("--- No locks found ---")
-
-class LockAddCmd(PackageCmd):
-
- def name(self):
- return "lock-add"
-
- def is_basic(self):
- return 1
-
- def aliases(self):
- return ["la"]
-
- def description_short(self):
- return "Add a lock"
-
- def category(self):
- return "package"
-
- def local_opt_table(self):
- return [["r", "repo", "repo", "Lock only the given repo"]]
-
- def execute(self, options_dict, non_option_args):
- if len(non_option_args) != 1:
- self.usage()
- return False
-
- repo = None
- if options_dict.has_key('repo'):
- repo = options_dict['repo']
-
- rucklocks.add_lock(non_option_args[0], repo=repo)
- rucktalk.message("--- Lock successfully added ---")
-
-
-class LockRemoveCmd(PackageCmd):
-
- def name(self):
- return "lock-remove"
-
- def is_basic(self):
- return 1
-
- def aliases(self):
- return ["lr"]
-
- def description_short(self):
- return "Remove a lock"
-
- def category(self):
- return "package"
-
- def execute(self, options_dict, non_option_args):
- if len(non_option_args) != 1:
- self.usage()
- return False
-
- locks = rucklocks.get_locks()
- i = int(non_option_args[0]) - 1
-
- if i >= len(locks):
- rucktalk.error("Invalid lock %s" % str(i + 1))
- return False
-
- rucklocks.remove_lock(i)
- rucktalk.message("--- Lock successfully removed ---")
-
-
-class OrphansCmd(PackageCmd):
-
- def name(self):
- return "orphans"
-
- def is_basic(self):
- return 1
-
- def aliases(self):
- return ["or"]
-
- def description_short(self):
- return "List installed packages that don't exist in repositories"
-
- def category(self):
- return "package"
-
- def execute(self, options_dict, non_option_args):
- if len(non_option_args) != 0:
- self.usage()
- return False
-
- table_headers = ["Name", "Version"]
- table_keys = ["name", "version"]
- table_rows = []
-
- no_abbrev = options_dict.has_key("no-abbrev")
-
- yum = self.yum()
-
- for installed in yum.rpmdb.returnPackages():
- matches = yum.pkgSack.searchNevra(name=installed.name)
-
- if len(matches) == 0:
- table_rows.append(ruckformat.package_to_row(yum, installed, no_abbrev, table_keys))
-
- if len(table_rows) > 0:
- ruckformat.tabular(table_headers, table_rows)
- else:
- rucktalk.message('--- No orphans found ---')
-
-if not vars().has_key('registered'):
-# ruckcommand.register(PackageFileCmd)
- ruckcommand.register(PackagesCmd)
- ruckcommand.register(PackageSearchCmd)
- ruckcommand.register(PackageListUpdatesCmd)
- ruckcommand.register(PackageInfoCmd)
-# ruckcommand.register(WhatProvidesCmd)
-# ruckcommand.register(WhatRequiresCmd)
-# ruckcommand.register(WhatConflictsCmd)
-# ruckcommand.register(PackageInfoProvidesCmd)
-# ruckcommand.register(PackageInfoRequiresCmd)
-# ruckcommand.register(PackageInfoConflictsCmd)
-# ruckcommand.register(PackageInfoObsoletesCmd)
-# ruckcommand.register(PackageFileListCmd)
-# ruckcommand.register(LockListCmd)
-# ruckcommand.register(LockAddCmd)
-# ruckcommand.register(LockRemoveCmd)
-# ruckcommand.register(OrphansCmd)
-# ruckcommand.register(PackageUpdatesSummaryCmd)
- registered = True
diff --git a/contrib/ruck/src/rucktalk.py b/contrib/ruck/src/rucktalk.py
deleted file mode 100644
index 5e4939a..0000000
--- a/contrib/ruck/src/rucktalk.py
+++ /dev/null
@@ -1,81 +0,0 @@
-###
-### Copyright 2002 Ximian, Inc.
-### Copyright 2008 Aidan Skinner <aidan at skinner.me.uk>
-###
-### This program is free software; you can redistribute it and/or modify
-### it under the terms of the GNU General Public License, version 2,
-### as published by the Free Software Foundation.
-###
-### This program is distributed in the hope that it will be useful,
-### but WITHOUT ANY WARRANTY; without even the implied warranty of
-### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-### GNU General Public License for more details.
-###
-### You should have received a copy of the GNU General Public License
-### along with this program; if not, write to the Free Software
-### Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
-###
-
-import sys
-import os
-import stat
-
-show_messages = 1
-show_verbose = 0
-show_warnings = 1
-show_errors = 1
-show_debug = 0
-be_terse = 0
-
-# Check to see if stdout has been redirected to a file.
-stdout_is_file = 0
-if stat.S_ISREG(os.fstat(sys.stdout.fileno())[stat.ST_MODE]):
- stdout_is_file = 1
-
-def message(str):
- if show_messages:
- print str
-
-esc = ""
-
-def message_status(str):
- if show_messages and not be_terse:
- # If we've redirected to a file, don't print escape characters
- if stdout_is_file:
- print str
- else:
- print esc + "[1G" + str + esc + "[0K",
- sys.stdout.flush()
-
-def message_finished(str, force_output=0):
- if show_messages and (force_output or not be_terse):
- # If we've redirected to a file, don't print escape characters
- if stdout_is_file:
- print str
- else:
- print esc + "[1G" + str + esc + "[0K"
-
-def verbose(str):
- if show_verbose:
- print str
-
-def warning(str):
- if show_warnings:
- print "Warning: " + str
-
-def error(str):
- if show_errors:
- print "ERROR: " + str
-
-def fatal(str):
- error(str)
- sys.exit(1)
-
-def debug(str):
- if show_debug:
- print "DEBUG: " + str
-
-def prompt(str):
- sys.stdout.write(str + " ")
- sys.stdout.flush()
- return raw_input()
diff --git a/contrib/ruck/src/rucktransactcmds.py b/contrib/ruck/src/rucktransactcmds.py
deleted file mode 100644
index 9ac2c76..0000000
--- a/contrib/ruck/src/rucktransactcmds.py
+++ /dev/null
@@ -1,244 +0,0 @@
-###
-### Copyright 2002 Ximian, Inc.
-### Copyright 2008 Aidan Skinner <aidan at skinner.me.uk>
-###
-### This program is free software; you can redistribute it and/or modify
-### it under the terms of the GNU General Public License, version 2,
-### as published by the Free Software Foundation.
-###
-### This program is distributed in the hope that it will be useful,
-### but WITHOUT ANY WARRANTY; without even the implied warranty of
-### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-### GNU General Public License for more details.
-###
-### You should have received a copy of the GNU General Public License
-### along with this program; if not, write to the Free Software
-### Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
-###
-
-import sys
-import os
-import os.path
-import glob
-from ConfigParser import ConfigParser
-import string
-import rucktalk
-import ruckformat
-import ruckcommand
-import ruckpackagecmds
-
-class TransactCmd(ruckpackagecmds.PackageCmd):
- def local_opt_table(self):
- return [["N", "dry-run", "", "Perform a dry run"]]
-
-class UpdateCmd(TransactCmd):
-
- def name(self):
- return "update"
-
- def aliases(self):
- return ["up"]
-
- def is_basic(self):
- return 1
-
- def category(self):
- return "package"
-
- def arguments(self):
- # TODO: this should optionally call UpdatePackages with a list of packages to update
- return ""
-
- def description_short(self):
- return "Perform an update"
-
- def local_opt_table(self):
- return []
-
- def execute(self, options_dict, non_option_args):
- pkcon = self.pkcon()
-
- updates = pkcon.get_updates()
- if (len(updates) == 0):
- rucktalk.message("--- No updates found ---")
- exit()
-
- rucktalk.message("The following packages will be updated:")
-
- table_keys = ["repo", "name", "version"]
- table_rows = []
- for new_pkg in updates:
- row = ruckformat.package_to_row(new_pkg, False, table_keys)
- table_rows.append(row)
-
- table_rows.sort(lambda x,y:cmp(string.lower(x[1]), string.lower(y[1])))
-
- ruckformat.tabular(["Repository", "Name","Version"],
- table_rows)
- # FIXME: this prompt is horrid
- resp = rucktalk.prompt("Continue? Y/[N]")
- if (resp == 'y'):
- # FIXME: needs to deal with progress better
- pkcon.update_packages(updates)
- else:
- rucktalk.message("Update aborted")
-
-ruckcommand.register(UpdateCmd)
-
-
-class InstallCmd(TransactCmd):
-
- def name(self):
- return "install"
-
- def aliases(self):
- return ["in"]
-
- def is_basic(self):
- return 1
-
- def category(self):
- return "package"
-
- def arguments(self):
- return "<package> ..."
-
- def description_short(self):
- return "Perform an install"
-
- def local_opt_table(self):
- return []
-
- def separate_args(self, args):
- installs = []
- removals = []
-
- for arg in args:
- if arg.startswith('~'):
- removals.append(arg[1:])
- else:
- installs.append(arg)
-
- return installs, removals
-
- def execute(self, options_dict, non_option_args):
- if len(non_option_args) < 1:
- self.usage()
- return 1
-
- pk = self.pkcon()
-
- for arg in non_option_args:
- if os.path.exists(arg):
- rucktalk.error("This hasn't been implemented yet") # FIXME
- else:
- installs, removals = self.separate_args(non_option_args)
-
- pkids = pk.resolve(installs)
- if len(pkids) > 0:
- pk.install_packages(pkids)
- else:
- rucktalk.error("No packages found")
- return 1
-
- if len(removals) > 0:
- pk.remove_packages(removals)
-
-ruckcommand.register(InstallCmd)
-
-
-class RemoveCmd(TransactCmd):
-
- def name(self):
- return "remove"
-
- def aliases(self):
- return ["rm"]
-
- def is_basic(self):
- return 1
-
- def category(self):
- return "package"
-
- def arguments(self):
- return "<package> ..."
-
- def description_short(self):
- return "Perform a removal"
-
- def execute(self, options_dict, non_option_args):
- if len(non_option_args) < 1:
- self.usage()
- return 1
-
- yum = self.yum()
-
- exactmatches, matches, unmatched = self.find_packages(non_option_args, installed=1)
- if len(unmatched) > 0:
- rucktalk.error("Could not find package '%s'" % unmatched[0])
- return False
-
- plist = exactmatches + matches
-
- for p in plist:
- yum.remove(p)
-
- self.start_transaction(dryrun=options_dict.has_key('dry-run'))
-
-#ruckcommand.register(RemoveCmd)
-
-class PackageSolveDepsCmd(TransactCmd):
-
- def name(self):
- return "solvedeps"
-
- def aliases(self):
- return ["solve"]
-
- def is_basic(self):
- return 0
-
- def category(self):
- return "dependency"
-
- def arguments(self):
- return "<package-dep>"
-
- def description_short(self):
- return "Resolve dependencies for libraries"
-
- def execute(self, options_dict, non_option_args):
- if len(non_option_args) < 1:
- self.usage()
- return False
-
- plist = []
- yum = self.yum()
-
- for dep in non_option_args:
- if yum.returnInstalledPackagesByDep (dep):
- continue
-
- try:
- pkg = yum.returnPackageByDep(dep)
- plist.append(pkg.name)
- except:
- rucktalk.error("Unable to satisfy requirement '%s'" % dep)
- return False
-
- installs, updates = self.find_available_packages(plist)
- if not installs and not updates:
- rucktalk.message("Requirements are already met on the system.");
- return True
-
- for i in installs:
- yum.install(i)
-
- for u in updates:
- exactmatches, matches, unmatched = self.find_packages([u.name], installed=True)
- yum.tsInfo.addUpdate(u, exactmatches[0])
-
- self.start_transaction(dryrun=options_dict.has_key('dry-run'))
-
-#ruckcommand.register(PackageSolveDepsCmd)
diff --git a/contrib/ruck/src/ruckyum.py b/contrib/ruck/src/ruckyum.py
deleted file mode 100644
index 8fc41bf..0000000
--- a/contrib/ruck/src/ruckyum.py
+++ /dev/null
@@ -1,295 +0,0 @@
-import sys
-import os
-
-import rucktalk
-import ruckformat
-
-import rpm
-from yum.constants import *
-from i18n import _
-
-__yum = None
-init_funcs = []
-
-
-def get_yum(plugins=True, repos=True, cache_only=False):
- global __yum
- global init_funcs
-
- if __yum is None:
- import yum
- __yum = yum.YumBase()
- __yum.logger.disabled = 1
- __yum.verbose_logger.disabled = 1
-
- __yum.doConfigSetup(init_plugins=plugins)
-
- __yum.repos.setProgressBar(RuckMeter())
- __yum.repos.callback = CacheProgressCallback()
- __yum.dsCallback = DepSolveProgressCallback()
-
- if cache_only or not repos:
- __yum.conf.cache = 1
-
- __yum.doTsSetup()
- __yum.doRpmDBSetup()
-
- if repos:
- __yum.doRepoSetup()
- __yum.doSackSetup()
-
- for func in init_funcs:
- func()
-
- return __yum
-
-
-
-
-from urlgrabber.progress import BaseMeter
-class RuckMeter(BaseMeter):
-
- def __init__(self, fo=sys.stdout):
- BaseMeter.__init__(self)
- self.fo = fo
- self.last_text = None
-
- def _do_start(self, now=None):
- if self.text is not None:
- text = self.text
- else:
- text = self.basename
-
- rucktalk.message(text)
-
- def _do_update(self, amount_read, now=None):
- rucktalk.message_status(ruckformat.progress_to_str(self.re.fraction_read() * 100,
- self.last_amount_read, self.size, self.re.remaining_time(),
- self.re.elapsed_time()))
-
-
-
-
- def _do_end(self, amount_read, now=None):
- rucktalk.message_status(ruckformat.progress_to_str(self.re.fraction_read() * 100,
- self.last_amount_read, self.size, self.re.remaining_time(),
- self.re.elapsed_time()))
-
- self.fo.write('\n\n')
- self.fo.flush()
-
-class CacheProgressCallback:
-
- '''
- The class handles text output callbacks during metadata cache updates.
- '''
-
- def __init__(self):
- self.last_text = None
-
- def log(self, level, message):
- pass
-
- def errorlog(self, level, message):
- rucktalk.error(message)
-
- def filelog(self, level, message):
- pass
-
- def progressbar(self, current, total, name=None):
- if current > total:
- return
-
- msg = 'Updating metadata'
- if name != None:
- msg = "Updating repository: %s" % name
-
- if msg != self.last_text:
- rucktalk.message_finished(msg)
- self.last_text = msg
-
- rucktalk.message_status(ruckformat.progress_to_str(float(current) / float(total) * 100,
- -1, -1, -1, -1))
- if current == total:
- rucktalk.message('\n')
- self.last_text = None
-
-class RPMInstallCallback:
- def __init__(self, output=1):
- self.output = output
- self.callbackfilehandles = {}
- self.total_actions = 0
- self.total_installed = 0
- self.installed_pkg_names = []
- self.total_removed = 0
- self.last_message = None
-
- self.myprocess = { TS_UPDATE : 'Updating',
- TS_ERASE: 'Erasing',
- TS_INSTALL: 'Installing',
- TS_TRUEINSTALL : 'Installing',
- TS_OBSOLETED: 'Obsoleted',
- TS_OBSOLETING: 'Installing'}
- self.mypostprocess = { TS_UPDATE: 'Updated',
- TS_ERASE: 'Erased',
- TS_INSTALL: 'Installed',
- TS_TRUEINSTALL: 'Installed',
- TS_OBSOLETED: 'Obsoleted',
- TS_OBSOLETING: 'Installed'}
-
- self.tsInfo = None # this needs to be set for anything else to work
-
- def _dopkgtup(self, hdr):
- tmpepoch = hdr['epoch']
- if tmpepoch is None: epoch = '0'
- else: epoch = str(tmpepoch)
-
- return (hdr['name'], hdr['arch'], epoch, hdr['version'], hdr['release'])
-
- def _makeHandle(self, hdr):
- handle = '%s:%s.%s-%s-%s' % (hdr['epoch'], hdr['name'], hdr['version'],
- hdr['release'], hdr['arch'])
-
- return handle
-
- def _localprint(self, msg):
- if self.output:
- rucktalk.message(msg)
-
- def show_progress(self, percent, process, name):
- msg = "(%s/%s) %s: %s" % (self.total_installed + self.total_removed, self.total_actions, process, name)
- rucktalk.message_status(ruckformat.progress_to_str(percent, -1, -1, -1, -1, text=msg))
-
- def callback(self, what, bytes, total, h, user):
- if what == rpm.RPMCALLBACK_TRANS_START:
- if bytes == 6:
- self.total_actions = total
-
- elif what == rpm.RPMCALLBACK_TRANS_PROGRESS:
- pass
-
- elif what == rpm.RPMCALLBACK_TRANS_STOP:
- pass
-
- elif what == rpm.RPMCALLBACK_INST_OPEN_FILE:
-
- hdr = None
- if h is not None:
- hdr, rpmloc = h
- handle = self._makeHandle(hdr)
- fd = os.open(rpmloc, os.O_RDONLY)
- self.callbackfilehandles[handle]=fd
- self.total_installed += 1
- self.installed_pkg_names.append(hdr['name'])
- return fd
- else:
- self._localprint("No header - huh?")
-
- elif what == rpm.RPMCALLBACK_INST_CLOSE_FILE:
- hdr = None
- if h is not None:
- hdr, rpmloc = h
- handle = self._makeHandle(hdr)
- os.close(self.callbackfilehandles[handle])
- fd = 0
-
- if self.output:
- rucktalk.message('')
-
- elif what == rpm.RPMCALLBACK_INST_PROGRESS:
- if h is not None:
- # If h is a string, we're repackaging.
- # Why the RPMCALLBACK_REPACKAGE_PROGRESS flag isn't set, I have no idea
- if type(h) == type(""):
- if total == 0:
- percent = 0
- else:
- percent = (bytes*100L)/total
- if self.output and sys.stdout.isatty():
- self.show_progress(percent, 'Repackage', h)
-
- if bytes == total:
- sys.stdout.write('\n')
- sys.stdout.flush()
- else:
- hdr, rpmloc = h
- if total == 0:
- percent = 0
- else:
- percent = (bytes*100L)/total
- pkgtup = self._dopkgtup(hdr)
-
- txmbrs = self.tsInfo.getMembers(pkgtup=pkgtup)
- for txmbr in txmbrs:
- try:
- process = self.myprocess[txmbr.output_state]
- except KeyError, e:
- rucktalk.message("Error: invalid output state: %s for %s" % \
- (txmbr.output_state, hdr['name']))
- else:
- if self.output and (sys.stdout.isatty() or bytes == total):
- self.show_progress(percent, process, hdr['name'])
-
-
- elif what == rpm.RPMCALLBACK_UNINST_START:
- pass
-
- elif what == rpm.RPMCALLBACK_UNINST_PROGRESS:
- pass
-
- elif what == rpm.RPMCALLBACK_UNINST_STOP:
- self.total_removed += 1
-
- if self.output and sys.stdout.isatty():
- if h not in self.installed_pkg_names:
- process = "Removing"
- else:
- process = "Cleanup"
- percent = 100
-
- self.show_progress(percent, process, h)
- rucktalk.message('')
-
- elif what == rpm.RPMCALLBACK_REPACKAGE_START:
- pass
- elif what == rpm.RPMCALLBACK_REPACKAGE_STOP:
- pass
- elif what == rpm.RPMCALLBACK_REPACKAGE_PROGRESS:
- pass
-
-
-class DepSolveProgressCallback:
- """provides text output callback functions for Dependency Solver callback"""
-
- def __init__(self):
- self.loops = 0
-
- def pkgAdded(self, pkgtup, mode):
- pass
-
- def start(self):
- self.loops += 1
-
- def tscheck(self):
- pass
-
- def restartLoop(self):
- pass
-
- def end(self):
- pass
-
- def procReq(self, name, formatted_req):
- pass
-
- def unresolved(self, msg):
- pass
-
- def procConflict(self, name, confname):
- pass
-
- def transactionPopulation(self):
- pass
-
- def downloadHeader(self, name):
- rucktalk.message("Downloading header for '%s'" % name)
commit 0ee5ef732cb1dae802ceb69ea461ff8e3728e45d
Author: Warren Turkal <wt at penguintechs.org>
Date: Mon Apr 12 19:46:34 2010 +0100
apt: Fix a spelling error in the config file prompt message
Signed-off-by: Richard Hughes <richard at hughsie.com>
diff --git a/backends/apt/aptBackend.py b/backends/apt/aptBackend.py
index b238df6..efd508d 100755
--- a/backends/apt/aptBackend.py
+++ b/backends/apt/aptBackend.py
@@ -470,7 +470,7 @@ class PackageKitInstallProgress(apt.progress.InstallProgress):
if self.conffile_prompts:
self._backend.message(MESSAGE_CONFIG_FILES_CHANGED,
"The following conffile prompts were found "
- "and need investiagtion: %s" % \
+ "and need investigation: %s" % \
"\n".join(self.conffile_prompts))
# Check for required restarts
if os.path.exists("/var/run/reboot-required") and \
More information about the PackageKit-commit
mailing list