[PackageKit-commit] packagekit: Branch 'master' - 29 commits

Richard Hughes hughsient at kemper.freedesktop.org
Thu Aug 13 06:21:26 PDT 2009


 backends/apt/20packagekit                          |    2 
 backends/apt/aptBackend.py                         |  201 ++
 backends/aptcc/pk-backend-aptcc.cpp                |    2 
 backends/portage/portageBackend.py                 |   38 
 backends/urpmi/helpers/urpmi-dispatched-backend.pl |    8 
 contrib/browser-plugin/pk-main.c                   |  306 ++--
 contrib/browser-plugin/pk-plugin.c                 |   28 
 data/Makefile.am                                   |    2 
 docs/html/pk-matrix.html                           |   38 
 po/ko.po                                           | 1429 +++++++++++++++++++++
 src/pk-inhibit.c                                   |    3 
 11 files changed, 1884 insertions(+), 173 deletions(-)

New commits:
commit cdb5dad2785a6f418bec25e80283c0554fa972cd
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Aug 13 14:14:19 2009 +0100

    If there is no HAL, don't segfault when unloading PkInhibit

diff --git a/src/pk-inhibit.c b/src/pk-inhibit.c
index a9e68a7..5038aec 100644
--- a/src/pk-inhibit.c
+++ b/src/pk-inhibit.c
@@ -215,7 +215,8 @@ pk_inhibit_finalize (GObject *object)
 	}
 	/* no need to free the data in the array */
 	g_ptr_array_free (inhibit->priv->array, TRUE);
-	g_object_unref (inhibit->priv->proxy);
+	if (inhibit->priv->proxy != NULL)
+		g_object_unref (inhibit->priv->proxy);
 
 	G_OBJECT_CLASS (pk_inhibit_parent_class)->finalize (object);
 }
commit f10878cd9a529a1298492effbf8141c8f778e2ab
Author: eukim <eukim at fedoraproject.org>
Date:   Thu Aug 13 12:17:45 2009 +0000

    Sending translation for po/ko.po

diff --git a/po/ko.po b/po/ko.po
new file mode 100644
index 0000000..fc6deb6
--- /dev/null
+++ b/po/ko.po
@@ -0,0 +1,1429 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-08-13 08:30+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. TRANSLATORS: this is an atomic transaction
+#: ../client/pk-console.c:231
+msgid "Transaction"
+msgstr ""
+
+#. TRANSLATORS: this is the time the transaction was started in system timezone
+#: ../client/pk-console.c:233
+msgid "System time"
+msgstr ""
+
+#. TRANSLATORS: this is if the transaction succeeded or not
+#: ../client/pk-console.c:235
+msgid "Succeeded"
+msgstr ""
+
+#. TRANSLATORS: if the repo is enabled
+#: ../client/pk-console.c:235 ../client/pk-console.c:402
+msgid "True"
+msgstr ""
+
+#: ../client/pk-console.c:235 ../client/pk-console.c:402
+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:237 ../src/pk-polkit-action-lookup.c:331
+msgid "Role"
+msgstr ""
+
+#. TRANSLATORS: this is The duration of the transaction
+#: ../client/pk-console.c:242
+msgid "Duration"
+msgstr ""
+
+#: ../client/pk-console.c:242
+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:246 ../src/pk-polkit-action-lookup.c:345
+msgid "Command line"
+msgstr ""
+
+#. TRANSLATORS: this is the user ID of the user that started the action
+#: ../client/pk-console.c:248
+msgid "User ID"
+msgstr ""
+
+#. TRANSLATORS: this is the username, e.g. hughsie
+#: ../client/pk-console.c:255
+msgid "Username"
+msgstr ""
+
+#. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
+#: ../client/pk-console.c:259
+msgid "Real name"
+msgstr ""
+
+#: ../client/pk-console.c:267
+msgid "Affected packages:"
+msgstr ""
+
+#: ../client/pk-console.c:269
+msgid "Affected packages: None"
+msgstr ""
+
+#. TRANSLATORS: this is the distro, e.g. Fedora 10
+#: ../client/pk-console.c:294
+msgid "Distribution"
+msgstr ""
+
+#. TRANSLATORS: this is type of update, stable or testing
+#: ../client/pk-console.c:296
+msgid "Type"
+msgstr ""
+
+#. TRANSLATORS: this is any summary text describing the upgrade
+#. TRANSLATORS: this is the summary of the group
+#: ../client/pk-console.c:298 ../client/pk-console.c:321
+msgid "Summary"
+msgstr ""
+
+#. TRANSLATORS: this is the group category name
+#: ../client/pk-console.c:310
+msgid "Category"
+msgstr ""
+
+#. TRANSLATORS: this is group identifier
+#: ../client/pk-console.c:312
+msgid "ID"
+msgstr ""
+
+#. TRANSLATORS: this is the parent group
+#: ../client/pk-console.c:315
+msgid "Parent"
+msgstr ""
+
+#. TRANSLATORS: this is the name of the parent group
+#: ../client/pk-console.c:318
+msgid "Name"
+msgstr ""
+
+#. TRANSLATORS: this is preferred icon for the group
+#: ../client/pk-console.c:324
+msgid "Icon"
+msgstr ""
+
+#. TRANSLATORS: this is a header for the package that can be updated
+#: ../client/pk-console.c:339
+msgid "Details about the update:"
+msgstr ""
+
+#. TRANSLATORS: details about the update, package name and version
+#. TRANSLATORS: title, the names of the packages that the method is processing
+#: ../client/pk-console.c:341 ../src/pk-polkit-action-lookup.c:356
+msgid "Package"
+msgid_plural "Packages"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: details about the update, any packages that this update updates
+#: ../client/pk-console.c:344
+msgid "Updates"
+msgstr ""
+
+#. TRANSLATORS: details about the update, any packages that this update obsoletes
+#: ../client/pk-console.c:348
+msgid "Obsoletes"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the vendor URLs
+#: ../client/pk-console.c:352
+msgid "Vendor"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the bugzilla URLs
+#: ../client/pk-console.c:356
+msgid "Bugzilla"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the CVE URLs
+#: ../client/pk-console.c:360
+msgid "CVE"
+msgstr ""
+
+#. TRANSLATORS: details about the update, if the package requires a restart
+#: ../client/pk-console.c:364
+msgid "Restart"
+msgstr ""
+
+#. TRANSLATORS: details about the update, any description of the update
+#: ../client/pk-console.c:368
+msgid "Update text"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the changelog for the package
+#: ../client/pk-console.c:372
+msgid "Changes"
+msgstr ""
+
+#. TRANSLATORS: details about the update, the ongoing state of the update
+#: ../client/pk-console.c:376
+msgid "State"
+msgstr ""
+
+#. TRANSLATORS: details about the update, date the update was issued
+#: ../client/pk-console.c:381
+msgid "Issued"
+msgstr ""
+
+#. TRANSLATORS: details about the update, date the update was updated
+#: ../client/pk-console.c:386
+msgid "Updated"
+msgstr ""
+
+#: ../client/pk-console.c:473 ../client/pk-console.c:475
+msgid "Percentage"
+msgstr ""
+
+#: ../client/pk-console.c:475
+msgid "Unknown"
+msgstr ""
+
+#. TRANSLATORS: a package requires the system to be restarted
+#: ../client/pk-console.c:517
+msgid "System restart required by:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the session to be restarted
+#: ../client/pk-console.c:520
+msgid "Session restart required:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the system to be restarted due to a security update
+#: ../client/pk-console.c:523
+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:526
+msgid "Session restart (security) required:"
+msgstr ""
+
+#. TRANSLATORS: a package requires the application to be restarted
+#: ../client/pk-console.c:529
+msgid "Application restart required by:"
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart their system
+#: ../client/pk-console.c:584
+msgid "Please restart the computer to complete the update."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart the session
+#: ../client/pk-console.c:587
+msgid "Please logout and login to complete the update."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart the application
+#: ../client/pk-console.c:590
+msgid "Please restart the application as it is being used."
+msgstr ""
+
+#. TRANSLATORS: a package needs to restart their system (due to security)
+#: ../client/pk-console.c:593
+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:596
+msgid ""
+"Please logout and login to complete the update as important security updates "
+"have been installed."
+msgstr ""
+
+#. TRANSLATORS: The package is already installed on the system
+#: ../client/pk-console.c:723
+#, c-format
+msgid "The package %s is already installed"
+msgstr ""
+
+#. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
+#: ../client/pk-console.c:731
+#, c-format
+msgid "The package %s could not be installed: %s"
+msgstr ""
+
+#. TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows
+#: ../client/pk-console.c:756 ../client/pk-console.c:779
+#: ../client/pk-console.c:875 ../client/pk-console.c:992
+#: ../client/pk-tools-common.c:62 ../client/pk-tools-common.c:81
+#: ../client/pk-tools-common.c:89
+#, c-format
+msgid "Internal error: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error installing the packages. The detailed error follows
+#: ../client/pk-console.c:764 ../client/pk-console.c:1388
+#, c-format
+msgid "This tool could not install the packages: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error installing the files. The detailed error follows
+#: ../client/pk-console.c:787
+#, c-format
+msgid "This tool could not install the files: %s"
+msgstr ""
+
+#. TRANSLATORS: The package name was not found in the installed list. The detailed error follows
+#: ../client/pk-console.c:843
+#, c-format
+msgid "This tool could not remove %s: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error removing the packages. The detailed error follows
+#: ../client/pk-console.c:866 ../client/pk-console.c:904
+#: ../client/pk-console.c:937
+#, c-format
+msgid "This tool could not remove the packages: %s"
+msgstr ""
+
+#. TRANSLATORS: When removing, we might have to remove other dependencies
+#: ../client/pk-console.c:916
+msgid "The following packages have to be removed:"
+msgstr ""
+
+#. TRANSLATORS: We are checking if it's okay to remove a list of packages
+#: ../client/pk-console.c:923
+msgid "Proceed removing additional packages?"
+msgstr ""
+
+#. TRANSLATORS: We did not remove any packages
+#: ../client/pk-console.c:928
+msgid "The package removal was canceled!"
+msgstr ""
+
+#. TRANSLATORS: The package name was not found in any software sources
+#: ../client/pk-console.c:969
+#, c-format
+msgid "This tool could not download the package %s as it could not be found"
+msgstr ""
+
+#. TRANSLATORS: Could not download the packages for some reason. The detailed error follows
+#: ../client/pk-console.c:1000
+#, c-format
+msgid "This tool could not download the packages: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#: ../client/pk-console.c:1027 ../client/pk-console.c:1036
+#, c-format
+msgid "This tool could not update %s: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#: ../client/pk-console.c:1058 ../client/pk-console.c:1066
+#, c-format
+msgid "This tool could not get the requirements for %s: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
+#: ../client/pk-console.c:1088 ../client/pk-console.c:1096
+#, c-format
+msgid "This tool could not get the dependencies for %s: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
+#: ../client/pk-console.c:1118 ../client/pk-console.c:1126
+#, c-format
+msgid "This tool could not get package details for %s: %s"
+msgstr ""
+
+#. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
+#: ../client/pk-console.c:1148
+#, c-format
+msgid "This tool could not find the files for %s: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
+#: ../client/pk-console.c:1156
+#, c-format
+msgid "This tool could not get the file list for %s: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of packages. The filename follows
+#: ../client/pk-console.c:1178
+#, c-format
+msgid "File already exists: %s"
+msgstr ""
+
+#. TRANSLATORS: follows a list of packages to install
+#: ../client/pk-console.c:1183 ../client/pk-console.c:1239
+#: ../client/pk-console.c:1314
+msgid "Getting package list"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list of packages. The detailed error follows
+#: ../client/pk-console.c:1189 ../client/pk-console.c:1245
+#: ../client/pk-console.c:1320
+#, c-format
+msgid "This tool could not get package list: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error saving the list
+#: ../client/pk-console.c:1200
+#, c-format
+msgid "Failed to save to disk"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the list. The filename follows
+#: ../client/pk-console.c:1234 ../client/pk-console.c:1309
+#, c-format
+msgid "File does not exist: %s"
+msgstr ""
+
+#. TRANSLATORS: header to a list of packages newly added
+#: ../client/pk-console.c:1266
+msgid "Packages to add"
+msgstr ""
+
+#. TRANSLATORS: header to a list of packages removed
+#: ../client/pk-console.c:1274
+msgid "Packages to remove"
+msgstr ""
+
+#. TRANSLATORS: We didn't find any differences
+#: ../client/pk-console.c:1342
+#, c-format
+msgid "No new packages need to be installed"
+msgstr ""
+
+#. TRANSLATORS: follows a list of packages to install
+#: ../client/pk-console.c:1348
+msgid "To install"
+msgstr ""
+
+#. TRANSLATORS: searching takes some time....
+#: ../client/pk-console.c:1360
+msgid "Searching for package: "
+msgstr ""
+
+#. TRANSLATORS: package was not found -- this is the end of a string ended in ...
+#: ../client/pk-console.c:1364
+msgid "not found."
+msgstr ""
+
+#. TRANSLATORS: We didn't find any packages to install
+#: ../client/pk-console.c:1375
+#, c-format
+msgid "No packages can be found to install"
+msgstr ""
+
+#. TRANSLATORS: installing new packages from package list
+#. TRANSLATORS: we are now installing the debuginfo packages we found earlier
+#: ../client/pk-console.c:1381
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:886
+#, c-format
+msgid "Installing packages"
+msgstr ""
+
+#. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
+#: ../client/pk-console.c:1417
+#, c-format
+msgid "This tool could not find the update details for %s: %s"
+msgstr ""
+
+#. TRANSLATORS: There was an error getting the details about the update for the package. The detailed error follows
+#: ../client/pk-console.c:1425
+#, c-format
+msgid "This tool could not get the update details for %s: %s"
+msgstr ""
+
+#. TRANSLATORS: This was an unhandled error, and we don't have _any_ context
+#: ../client/pk-console.c:1456
+msgid "Error:"
+msgstr ""
+
+#. TRANSLATORS: This a list of details about the package
+#: ../client/pk-console.c:1470
+msgid "Package description"
+msgstr ""
+
+#. TRANSLATORS: This a message (like a little note that may be of interest) from the transaction
+#: ../client/pk-console.c:1486
+msgid "Message:"
+msgstr ""
+
+#. TRANSLATORS: This a list files contained in the package
+#: ../client/pk-console.c:1514
+msgid "Package files"
+msgstr ""
+
+#. TRANSLATORS: This where the package has no files
+#: ../client/pk-console.c:1522
+msgid "No files"
+msgstr ""
+
+#. TRANSLATORS: This a request for a GPG key signature from the backend, which the client will prompt for later
+#: ../client/pk-console.c:1545
+msgid "Repository signature required"
+msgstr ""
+
+#. TRANSLATORS: This a prompt asking the user to import the security key
+#: ../client/pk-console.c:1555
+msgid "Do you accept this signature?"
+msgstr ""
+
+#. TRANSLATORS: This is where the user declined the security key
+#: ../client/pk-console.c:1559
+msgid "The signature was not accepted."
+msgstr ""
+
+#. TRANSLATORS: This a request for a EULA
+#: ../client/pk-console.c:1593
+msgid "End user license agreement required"
+msgstr ""
+
+#. TRANSLATORS: This a prompt asking the user to agree to the license
+#: ../client/pk-console.c:1600
+msgid "Do you agree to this license?"
+msgstr ""
+
+#. TRANSLATORS: This is where the user declined the license
+#: ../client/pk-console.c:1604
+msgid "The license was refused."
+msgstr ""
+
+#. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
+#: ../client/pk-console.c:1633
+msgid "The daemon crashed mid-transaction!"
+msgstr ""
+
+#. TRANSLATORS: This is the header to the --help menu
+#: ../client/pk-console.c:1686
+msgid "PackageKit Console Interface"
+msgstr ""
+
+#. these are commands we can use with pkcon
+#: ../client/pk-console.c:1688
+msgid "Subcommands:"
+msgstr ""
+
+#. TRANSLATORS: command line argument, if we should show debugging information
+#. TRANSLATORS: if we should show debugging data
+#: ../client/pk-console.c:1781 ../client/pk-generate-pack.c:185
+#: ../client/pk-monitor.c:128
+#: ../contrib/command-not-found/pk-command-not-found.c:616
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:550
+#: ../src/pk-main.c:211
+msgid "Show extra debugging information"
+msgstr ""
+
+#. TRANSLATORS: command line argument, just show the version string
+#: ../client/pk-console.c:1784 ../client/pk-monitor.c:130
+msgid "Show the program version and exit"
+msgstr ""
+
+#. TRANSLATORS: command line argument, use a filter to narrow down results
+#: ../client/pk-console.c:1787
+msgid "Set the filter, e.g. installed"
+msgstr ""
+
+#. TRANSLATORS: command line argument, work asynchronously
+#: ../client/pk-console.c:1790
+msgid "Exit without waiting for actions to complete"
+msgstr ""
+
+#. TRANSLATORS: This is when we could not connect to the system bus, and is fatal
+#: ../client/pk-console.c:1817
+msgid "This tool could not connect to system DBUS."
+msgstr ""
+
+#. TRANSLATORS: The user specified an incorrect filter
+#: ../client/pk-console.c:1907
+msgid "The filter specified was invalid"
+msgstr ""
+
+#. TRANSLATORS: a search type can be name, details, file, etc
+#: ../client/pk-console.c:1926
+msgid "A search type is required, e.g. name"
+msgstr ""
+
+#. TRANSLATORS: the user needs to provide a search term
+#: ../client/pk-console.c:1933 ../client/pk-console.c:1942
+#: ../client/pk-console.c:1951 ../client/pk-console.c:1960
+msgid "A search term is required"
+msgstr ""
+
+#. TRANSLATORS: the search type was provided, but invalid
+#: ../client/pk-console.c:1967
+msgid "Invalid search type"
+msgstr ""
+
+#. TRANSLATORS: the user did not specify what they wanted to install
+#: ../client/pk-console.c:1973
+msgid "A package name or filename to install is required"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:1982
+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:1991
+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:1999
+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:2006
+msgid "Directory not found"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:2014
+msgid "A licence identifier (eula-id) is required"
+msgstr ""
+
+#. TRANSLATORS: geeky error, 99.9999% of users won't see this
+#: ../client/pk-console.c:2024
+msgid "A transaction identifier (tid) is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not specify a package name
+#: ../client/pk-console.c:2041
+msgid "A package name to resolve is required"
+msgstr ""
+
+#. TRANSLATORS: The user did not specify a repository (software source) name
+#: ../client/pk-console.c:2050 ../client/pk-console.c:2059
+msgid "A repository name is required"
+msgstr ""
+
+#. TRANSLATORS: The user didn't provide any data
+#: ../client/pk-console.c:2068
+msgid "A repo name, parameter and value are required"
+msgstr ""
+
+#. TRANSLATORS: The user didn't specify what action to use
+#: ../client/pk-console.c:2082
+msgid "An action, e.g. 'update-system' is required"
+msgstr ""
+
+#. TRANSLATORS: The user specified an invalid action
+#: ../client/pk-console.c:2089
+msgid "A correct role is required"
+msgstr ""
+
+#. TRANSLATORS: we keep a database updated with the time that an action was last executed
+#: ../client/pk-console.c:2096
+msgid "Failed to get the time since this action was last completed"
+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:2106 ../client/pk-console.c:2118
+#: ../client/pk-console.c:2127 ../client/pk-console.c:2145
+#: ../client/pk-console.c:2154 ../client/pk-generate-pack.c:241
+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:2136
+msgid "A package provide string is required"
+msgstr ""
+
+#. TRANSLATORS: The user didn't specify a filename to create as a list
+#: ../client/pk-console.c:2163
+msgid "A list file name to create is required"
+msgstr ""
+
+#. TRANSLATORS: The user didn't specify a filename to open as a list
+#: ../client/pk-console.c:2173 ../client/pk-console.c:2183
+msgid "A list file to open is required"
+msgstr ""
+
+#. TRANSLATORS: The user tried to use an unsupported option on the command line
+#: ../client/pk-console.c:2237
+#, c-format
+msgid "Option '%s' is not supported"
+msgstr ""
+
+#. TRANSLATORS: User does not have permission to do this
+#: ../client/pk-console.c:2250
+msgid "Incorrect privileges for this operation"
+msgstr ""
+
+#. TRANSLATORS: Generic failure of what they asked to do
+#: ../client/pk-console.c:2253
+msgid "Command failed"
+msgstr ""
+
+#. TRANSLATORS: This is the state of the transaction
+#: ../client/pk-generate-pack.c:101
+msgid "Downloading"
+msgstr ""
+
+#. TRANSLATORS: This is when the main packages are being downloaded
+#: ../client/pk-generate-pack.c:121
+msgid "Downloading packages"
+msgstr ""
+
+#. TRANSLATORS: This is when the dependency packages are being downloaded
+#: ../client/pk-generate-pack.c:126
+msgid "Downloading dependencies"
+msgstr ""
+
+#. TRANSLATORS: we can exclude certain packages (glibc) when we know they'll exist on the target
+#: ../client/pk-generate-pack.c:188
+msgid "Set the file name of dependencies to be excluded"
+msgstr ""
+
+#. TRANSLATORS: the output location
+#: ../client/pk-generate-pack.c:191
+msgid ""
+"The output file or directory (the current directory is used if ommitted)"
+msgstr ""
+
+#. TRANSLATORS: put a list of packages in the pack
+#: ../client/pk-generate-pack.c:194
+msgid "The package to be put into the service pack"
+msgstr ""
+
+#. TRANSLATORS: put all pending updates in the pack
+#: ../client/pk-generate-pack.c:197
+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:225
+msgid "Neither --package or --updates option selected."
+msgstr ""
+
+#. TRANSLATORS: This is when the user fails to supply just one argument
+#: ../client/pk-generate-pack.c:233
+msgid "Both options selected."
+msgstr ""
+
+#. TRANSLATORS: This is when the user fails to supply the output
+#: ../client/pk-generate-pack.c:249
+msgid "A output directory or file name is required"
+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:267 ../client/pk-generate-pack.c:273
+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:280
+msgid ""
+"Service packs cannot be created as PackageKit was not built with libarchive "
+"support."
+msgstr ""
+
+#. TRANSLATORS: the user specified an absolute path, but didn't get the extension correct
+#: ../client/pk-generate-pack.c:291
+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:307
+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:310
+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:323
+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:333
+msgid "Failed to open package list."
+msgstr ""
+
+#. TRANSLATORS: The package name is being matched up to available packages
+#: ../client/pk-generate-pack.c:344
+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:348
+#, c-format
+msgid "Failed to find package '%s': %s"
+msgstr ""
+
+#. TRANSLATORS: This is telling the user we are in the process of making the pack
+#: ../client/pk-generate-pack.c:365
+msgid "Creating service pack..."
+msgstr ""
+
+#. TRANSLATORS: we succeeded in making the file
+#: ../client/pk-generate-pack.c:372
+#, c-format
+msgid "Service pack created '%s'"
+msgstr ""
+
+#. TRANSLATORS: we failed to make te file
+#: ../client/pk-generate-pack.c:377
+#, c-format
+msgid "Failed to create '%s': %s"
+msgstr ""
+
+#. TRANSLATORS: this is a program that monitors PackageKit
+#: ../client/pk-monitor.c:146
+msgid "PackageKit Monitor"
+msgstr ""
+
+#: ../client/pk-monitor.c:183
+msgid "Cannot show the list of transactions"
+msgstr ""
+
+#. TRANSLATORS: The package was not found in any software sources
+#: ../client/pk-tools-common.c:118
+#, c-format
+msgid "The package could not be found"
+msgstr ""
+
+#. TRANSLATORS: more than one package could be found that matched, to follow is a list of possible packages
+#: ../client/pk-tools-common.c:130
+msgid "More than one package matches:"
+msgstr ""
+
+#. TRANSLATORS: This finds out which package in the list to use
+#: ../client/pk-tools-common.c:137
+msgid "Please choose the correct package: "
+msgstr ""
+
+#: ../client/pk-tools-common.c:162
+#, c-format
+msgid "Please enter a number from 1 to %i: "
+msgstr ""
+
+#. TRANSLATORS: downloading repo data so we can search
+#: ../contrib/command-not-found/pk-command-not-found.c:349
+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:353
+msgid "Downloading filelists (this may take some time to complete)."
+msgstr ""
+
+#. TRANSLATORS: waiting for native lock
+#: ../contrib/command-not-found/pk-command-not-found.c:357
+msgid "Waiting for package manager lock."
+msgstr ""
+
+#. TRANSLATORS: loading package cache so we can search
+#: ../contrib/command-not-found/pk-command-not-found.c:361
+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:420
+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:557
+msgid "Failed to launch:"
+msgstr ""
+
+#. TRANSLATORS: tool that gets called when the command is not found
+#: ../contrib/command-not-found/pk-command-not-found.c:632
+msgid "PackageKit Command Not Found"
+msgstr ""
+
+#. TRANSLATORS: the prefix of all the output telling the user why it's not executing
+#: ../contrib/command-not-found/pk-command-not-found.c:658
+msgid "Command not found."
+msgstr ""
+
+#. TRANSLATORS: tell the user what we think the command is
+#: ../contrib/command-not-found/pk-command-not-found.c:665
+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:674
+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:686
+#: ../contrib/command-not-found/pk-command-not-found.c:695
+msgid "Similar commands are:"
+msgstr ""
+
+#. TRANSLATORS: ask the user to choose a file to run
+#: ../contrib/command-not-found/pk-command-not-found.c:702
+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:721
+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:726
+#, c-format
+msgid "Install package '%s' to provide command '%s'?"
+msgstr ""
+
+#. TRANSLATORS: Show the user a list of packages that provide this command
+#: ../contrib/command-not-found/pk-command-not-found.c:747
+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:756
+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:764
+msgid "Please choose a package to install"
+msgstr ""
+
+#. TRANSLATORS: when we are getting data from the daemon
+#: ../contrib/browser-plugin/pk-plugin-install.c:433
+msgid "Getting package information..."
+msgstr ""
+
+#. TRANSLATORS: run an applicaiton
+#: ../contrib/browser-plugin/pk-plugin-install.c:439
+#, c-format
+msgid "Run %s"
+msgstr ""
+
+#. TRANSLATORS: show the installed version of a package
+#: ../contrib/browser-plugin/pk-plugin-install.c:445
+msgid "Installed version"
+msgstr ""
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/pk-plugin-install.c:453
+#, c-format
+msgid "Run version %s now"
+msgstr ""
+
+#. TRANSLATORS: run the application now
+#: ../contrib/browser-plugin/pk-plugin-install.c:459
+msgid "Run now"
+msgstr ""
+
+#. TRANSLATORS: update to a new version of the package
+#: ../contrib/browser-plugin/pk-plugin-install.c:465
+#, c-format
+msgid "Update to version %s"
+msgstr ""
+
+#. TRANSLATORS: To install a package
+#: ../contrib/browser-plugin/pk-plugin-install.c:471
+#, c-format
+msgid "Install %s now"
+msgstr ""
+
+#. TRANSLATORS: the version of the package
+#: ../contrib/browser-plugin/pk-plugin-install.c:474
+msgid "Version"
+msgstr ""
+
+#. TRANSLATORS: noting found, so can't install
+#: ../contrib/browser-plugin/pk-plugin-install.c:479
+msgid "No packages found for your system"
+msgstr ""
+
+#. TRANSLATORS: package is being installed
+#: ../contrib/browser-plugin/pk-plugin-install.c:484
+msgid "Installing..."
+msgstr ""
+
+#. TRANSLATORS: we are starting to install the packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:187
+msgid "Starting install"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:397
+#, c-format
+msgid "Failed to find the package %s, or already installed: %s"
+msgstr ""
+
+#. command line argument, simulate what would be done, but don't actually do it
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:553
+msgid ""
+"Don't actually install any packages, only simulate what would be installed"
+msgstr ""
+
+#. command line argument, do we skip packages that depend on the ones specified
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:556
+msgid "Do not install dependencies of the core packages"
+msgstr ""
+
+#. command line argument, do we operate quietly
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:559
+msgid "Do not display information or progress"
+msgstr ""
+
+#. TRANSLATORS: tool that gets called when the command is not found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:577
+msgid "PackageKit Debuginfo Installer"
+msgstr ""
+
+#. TRANSLATORS: the use needs to specify a list of package names on the command line
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:589
+#, c-format
+msgid "ERROR: Specify package names to install."
+msgstr ""
+
+#. TRANSLATORS: we are getting the list of repositories
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:623
+#, c-format
+msgid "Getting sources list"
+msgstr ""
+
+#. TRANSLATORS: all completed 100%
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:641
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:681
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:716
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:800
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:844
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:911
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:955
+#, c-format
+msgid "OK."
+msgstr ""
+
+#. TRANSLATORS: tell the user what we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:644
+#, c-format
+msgid "Found %i enabled and %i disabled sources."
+msgstr ""
+
+#. TRANSLATORS: we're finding repositories that match out pattern
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:651
+#, c-format
+msgid "Finding debugging sources"
+msgstr ""
+
+#. TRANSLATORS: tell the user what we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:684
+#, c-format
+msgid "Found %i disabled debuginfo repos."
+msgstr ""
+
+#. TRANSLATORS: we're now enabling all the debug sources we found
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:691
+#, c-format
+msgid "Enabling debugging sources"
+msgstr ""
+
+#. TRANSLATORS: operation was not successful
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:701
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:785
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:829
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:896
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:940
+msgid "FAILED."
+msgstr ""
+
+#. TRANSLATORS: tell the user how many we enabled
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:719
+#, c-format
+msgid "Enabled %i debugging sources."
+msgstr ""
+
+#. TRANSLATORS: we're now finding packages that match in all the repos
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:726
+#, c-format
+msgid "Finding debugging packages"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:738
+#, c-format
+msgid "Failed to find the package %s: %s"
+msgstr ""
+
+#. TRANSLATORS: we couldn't find the debuginfo package name, non-fatal
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:761
+#, c-format
+msgid "Failed to find the debuginfo package %s: %s"
+msgstr ""
+
+#. TRANSLATORS: no debuginfo packages could be found to be installed
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:789
+#, c-format
+msgid "Found no packages to install."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some packages, and then list them
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:803
+#, c-format
+msgid "Found %i packages:"
+msgstr ""
+
+#. TRANSLATORS: tell the user we are searching for deps
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:819
+#, c-format
+msgid "Finding packages that depend on these packages"
+msgstr ""
+
+#. TRANSLATORS: could not install, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:832
+#, c-format
+msgid "Could not find dependant packages: %s"
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some more packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:848
+#, c-format
+msgid "Found %i extra packages."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some more packages
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:852
+#, c-format
+msgid "No extra packages required."
+msgstr ""
+
+#. TRANSLATORS: tell the user we found some packages (and deps), and then list them
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:861
+#, c-format
+msgid "Found %i packages to install:"
+msgstr ""
+
+#. TRANSLATORS: simulate mode is a testing mode where we quit before the action
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:874
+#, c-format
+msgid "Not installing packages in simulate mode"
+msgstr ""
+
+#. TRANSLATORS: could not install, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:899
+#, c-format
+msgid "Could not install packages: %s"
+msgstr ""
+
+#. TRANSLATORS: we are now disabling all debuginfo repos we previously enabled
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:931
+#, c-format
+msgid "Disabling sources previously enabled"
+msgstr ""
+
+#. TRANSLATORS: no debuginfo packages could be found to be installed, detailed error follows
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:943
+#, c-format
+msgid "Could not disable the debugging sources: %s"
+msgstr ""
+
+#. TRANSLATORS: we disabled all the debugging repos that we enabled before
+#: ../contrib/debuginfo-install/pk-debuginfo-install.c:958
+#, c-format
+msgid "Disabled %i debugging sources."
+msgstr ""
+
+#: ../data/packagekit-catalog.xml.in.h:1
+msgid "PackageKit Catalog"
+msgstr ""
+
+#: ../data/packagekit-package-list.xml.in.h:1
+msgid "PackageKit Package List"
+msgstr ""
+
+#: ../data/packagekit-servicepack.xml.in.h:1
+msgid "PackageKit Service Pack"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to accept new
+#. licence agreements.
+#. - Change this to 'auth_admin' for environments where users should not
+#. be given the option to make legal decisions.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:7
+msgid "Accept EULA"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:8
+msgid "Authentication is required to accept a EULA"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:9
+msgid ""
+"Authentication is required to cancel a task that was not started by yourself"
+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 consider a key used for signing packages as "
+"trusted"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:12
+msgid "Authentication is required to install a signed package"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:13
+msgid "Authentication is required to install an untrusted package"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:14
+msgid "Authentication is required to refresh the system sources"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:15
+msgid "Authentication is required to remove packages"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:16
+msgid "Authentication is required to rollback a transaction"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:17
+msgid ""
+"Authentication is required to set the network proxy used for downloading "
+"packages"
+msgstr ""
+
+#: ../policy/org.freedesktop.packagekit.policy.in.h:18
+msgid "Authentication is required to update packages"
+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:24
+msgid "Cancel foreign task"
+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:30
+msgid "Change software source parameters"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not need authentication to install signed packages
+#. from signed repositories, as this cannot exploit a system.
+#. - Paranoid users (or parents!) can change this to 'auth_admin' or
+#. 'auth_admin_keep'.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:37
+msgid "Install signed package"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to install untrusted or
+#. unrecognised packages, as allowing users to do this without a
+#. password would be a massive security hole.
+#. - This is not retained as each package should be authenticated.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:44
+msgid "Install untrusted local file"
+msgstr ""
+
+#. SECURITY:
+#. - 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:49
+msgid "Refresh system sources"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to remove packages as
+#. this can make the system unbootable or stop other applications from
+#. working.
+#. - Be sure to close the tool used to remove the packages after the
+#. admin authentication has been obtained, otherwise packages can still
+#. be removed. If this is not possible, change this authentication to
+#. 'auth_admin'.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:59
+msgid "Remove package"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to rollback system state
+#. 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:65
+msgid "Rollback to a previous transaction"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to set the proxy
+#. used for downloading packages.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:70
+msgid "Set network proxy"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users require admin authentication to add signing keys.
+#. - This implies adding an explicit trust, and should not be granted
+#. without a secure authentication.
+#. - This is not kept as each package should be authenticated.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:77
+msgid "Trust a key used for signing packages"
+msgstr ""
+
+#. SECURITY:
+#. - Normal users do not require admin authentication to update the
+#. system as the packages will be signed, and the action is required
+#. to update the system when unattended.
+#. - Changing this to anything other than 'yes' will break unattended
+#. updates.
+#.
+#: ../policy/org.freedesktop.packagekit.policy.in.h:85
+msgid "Update packages"
+msgstr ""
+
+#. TRANSLATORS: failed due to DBus security
+#: ../src/pk-main.c:87
+msgid "Startup failed due to security policies on this machine."
+msgstr ""
+
+#. TRANSLATORS: only two ways this can fail...
+#: ../src/pk-main.c:89
+msgid "This can happen for two reasons:"
+msgstr ""
+
+#. TRANSLATORS: only allowed to be owned by root
+#: ../src/pk-main.c:91
+msgid "The correct user is not launching the executable (usually root)"
+msgstr ""
+
+#. TRANSLATORS: or we are installed in a prefix
+#: ../src/pk-main.c:93
+msgid ""
+"The org.freedesktop.PackageKit.conf file is not installed in the system "
+"directory:"
+msgstr ""
+
+#. TRANSLATORS: a backend is the system package tool, e.g. yum, apt
+#: ../src/pk-main.c:205
+msgid "Packaging backend to use, e.g. dummy"
+msgstr ""
+
+#. TRANSLATORS: if we should run in the background
+#: ../src/pk-main.c:208
+msgid "Daemonize and detach from the terminal"
+msgstr ""
+
+#. TRANSLATORS: if we should not monitor how long we are inactive for
+#: ../src/pk-main.c:214
+msgid "Disable the idle timer"
+msgstr ""
+
+#. TRANSLATORS: show version
+#: ../src/pk-main.c:217
+msgid "Show version and exit"
+msgstr ""
+
+#. TRANSLATORS: exit after we've started up, used for user profiling
+#: ../src/pk-main.c:220
+msgid "Exit after a small delay"
+msgstr ""
+
+#. TRANSLATORS: exit straight away, used for automatic profiling
+#: ../src/pk-main.c:223
+msgid "Exit after the engine has loaded"
+msgstr ""
+
+#. TRANSLATORS: describing the service that is running
+#: ../src/pk-main.c:238
+msgid "PackageKit service"
+msgstr ""
+
+#. TRANSLATORS: fatal error, dbus is not running
+#: ../src/pk-main.c:275
+msgid "Cannot connect to the system bus"
+msgstr ""
+
+#. TRANSLATORS: cannot register on system bus, unknown reason -- geeky error follows
+#: ../src/pk-main.c:334
+msgid "Error trying to start:"
+msgstr ""
+
+#: ../src/pk-polkit-action-lookup.c:147
+msgid "To install debugging packages, extra sources need to be enabled"
+msgstr ""
+
+#. TRANSLATORS: is not GPG signed
+#: ../src/pk-polkit-action-lookup.c:168 ../src/pk-polkit-action-lookup.c:191
+msgid "The software is not from a trusted source."
+msgstr ""
+
+#: ../src/pk-polkit-action-lookup.c:173
+msgid "Do not update this package unless you are sure it is safe to do so."
+msgstr ""
+
+#: ../src/pk-polkit-action-lookup.c:174
+msgid "Do not update these packages unless you are sure it is safe to do so."
+msgstr ""
+
+#. TRANSLATORS: warn the user that all bets are off
+#: ../src/pk-polkit-action-lookup.c:180 ../src/pk-polkit-action-lookup.c:203
+msgid "Malicious software can damage your computer or cause other harm."
+msgstr ""
+
+#: ../src/pk-polkit-action-lookup.c:196
+msgid "Do not install this package unless you are sure it is safe to do so."
+msgstr ""
+
+#: ../src/pk-polkit-action-lookup.c:197
+msgid "Do not install these packages unless you are sure it is safe to do so."
+msgstr ""
+
+#. TRANSLATORS: too many packages to list each one
+#: ../src/pk-polkit-action-lookup.c:278
+msgid "Many packages"
+msgstr ""
+
+#. TRANSLATORS: if the transaction is forced to install only trusted packages
+#: ../src/pk-polkit-action-lookup.c:338
+msgid "Only trusted"
+msgstr ""
commit 6e98f0428ac0d3280eda63de073345b5bdc6fe76
Merge: 9f597e2... 86b9ee7...
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Aug 12 13:45:20 2009 +0200

    Merge branch 'master' of git+ssh://glatzor@git.packagekit.org/srv/git/PackageKit

commit 9f597e20286dc41a07d16dc5dc2d35b85f351742
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Aug 12 13:36:37 2009 +0200

    APT: Only send dbus cache changed signal if system dbus is running. Thanks to Michael Biebl!

diff --git a/backends/apt/20packagekit b/backends/apt/20packagekit
index 3b6478c..bca50ae 100644
--- a/backends/apt/20packagekit
+++ b/backends/apt/20packagekit
@@ -1 +1 @@
-APT::Update::Post-Invoke-Success { "/usr/bin/dbus-send --system --dest=org.freedesktop.PackageKit --type=method_call /org/freedesktop/PackageKit org.freedesktop.PackageKit.StateHasChanged string:'cache-update'"; };
+APT::Update::Post-Invoke-Success { "[ ! -f /var/run/dbus/system_bus_socket ] || /usr/bin/dbus-send --system --dest=org.freedesktop.PackageKit --type=method_call /org/freedesktop/PackageKit org.freedesktop.PackageKit.StateHasChanged string:'cache-update'"; };
commit 86b9ee76ebd2014e87f8b595b6998fdf9439ce1b
Author: Martin Stransky <stransky at redhat.com>
Date:   Wed Aug 12 11:39:04 2009 +0100

    browser-plugin: PackageKit browser plugin must support windowed mode.
    
    This fixes the plugin when using WebKit based browsers
    
    Signed-off-by: Richard Hughes <richard at hughsie.com>

diff --git a/contrib/browser-plugin/pk-main.c b/contrib/browser-plugin/pk-main.c
index df10105..ba94217 100644
--- a/contrib/browser-plugin/pk-main.c
+++ b/contrib/browser-plugin/pk-main.c
@@ -24,6 +24,12 @@
 #include <glib/gprintf.h>
 #include <glib/gi18n-lib.h>
 
+#include <X11/Xlib.h>
+#include <X11/Intrinsic.h>
+
+#include <gtk/gtk.h>
+#include <gdk/gdkx.h>
+
 #include <npapi.h>
 #include <npfunctions.h>
 #include <npruntime.h>
@@ -42,6 +48,9 @@ static void *module_handle = NULL;
 #define HIBYTE(x) ((((uint32_t)(x)) & 0xff00) >> 8)
 #endif
 
+static void pk_main_draw_window (PkPlugin *plugin);
+static void pk_main_event_handler (PkPlugin *plugin, XEvent *event);
+
 /**
  * pk_debug_real:
  **/
@@ -60,7 +69,7 @@ pk_debug_real (const gchar *func, const gchar *file, const int line, const gchar
 
 	g_print ("FN:%s FC:%s LN:%i\n\t%s\n", file, func, line, buffer);
 
-	g_free(buffer);
+	g_free (buffer);
 }
 
 /**
@@ -78,7 +87,7 @@ pk_warning_real (const gchar *func, const gchar *file, const int line, const gch
 
 	g_print ("FN:%s FC:%s LN:%i\n!!\t%s\n", file, func, line, buffer);
 
-	g_free(buffer);
+	g_free (buffer);
 }
 
 /**
@@ -87,10 +96,6 @@ pk_warning_real (const gchar *func, const gchar *file, const int line, const gch
 static void
 pk_main_refresh_cb (PkPlugin *plugin_, NPP instance)
 {
-	NPRect rect;
-	guint width;
-	guint height;
-
 	pk_debug ("pk_main_refresh_cb [%p]", instance);
 
 	/* invalid */
@@ -99,21 +104,7 @@ pk_main_refresh_cb (PkPlugin *plugin_, NPP instance)
 		return;
 	}
 
-	/* get parameters */
-	g_object_get (plugin_,
-		      "width", &width,
-		      "height", &height,
-		      NULL);
-
-	/* Coordinates here are relative to the plugin's origin (x,y) */
-	rect.left = 0;
-	rect.right =  width;
-	rect.top = 0;
-	rect.bottom = height;
-
-	pk_debug ("invalidating rect %ix%i to %ix%i", rect.left, rect.top, rect.right, rect.bottom);
-
-	npnfuncs->invalidaterect (instance, &rect);
+	pk_main_draw_window (plugin_);
 }
 
 /**
@@ -130,19 +121,7 @@ pk_main_get_value (NPP instance, NPPVariable variable, void *value)
 	case NPPVpluginDescriptionString:
 		* ((const gchar **)value) = "Plugin for Installing Applications (new)";
 		break;
-	case NPPVpluginScriptableIID:
-	case NPPVpluginScriptableInstance:
-                /* XPCOM scripting, obsolete */
-                err = NPERR_GENERIC_ERROR;
-		break;
-	case NPPVpluginScriptableNPObject:
-		err = NPERR_INVALID_PLUGIN_ERROR;
-		break;
-	case NPPVpluginNeedsXEmbed:
-		* ((PRBool *)value) = PR_TRUE;
-		break;
 	default:
-		pk_warning ("Unhandled variable %d instance %p", variable, instance);
 		err = NPERR_INVALID_PARAM;
 	}
 	return err;
@@ -173,8 +152,6 @@ pk_main_newp (NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc,
 	/* add to list */
 	instance->pdata = plugin;
 
-	npnfuncs->setvalue (instance, NPPVpluginWindowBool, (void *) FALSE);
-
 	return NPERR_NO_ERROR;
 }
 
@@ -197,84 +174,181 @@ pk_main_destroy (NPP instance, NPSavedData **save)
 }
 
 /**
- * pk_main_handle_event:
+ * pk_main_plugin_x11_filter_event:
  **/
-static NPError
-pk_main_handle_event (NPP instance, void *event)
+static GdkFilterReturn
+pk_main_plugin_x11_filter_event (GdkXEvent *gdkxevent, GdkEvent *unused, gpointer plugin)
+{
+	pk_main_event_handler (plugin, gdkxevent);
+	return GDK_FILTER_REMOVE;
+}
+
+/**
+ * pk_main_create_window:
+ **/
+static void
+pk_main_create_window (PkPlugin *plugin)
+{
+	gint width;
+	gint height;
+	Window  xwindow;
+	Display *xdisplay;
+	GdkWindow *gdk_window;
+
+	/* get parameters */
+	g_object_get (plugin,
+		      "width", &width,
+		      "height", &height,
+		      "display", &xdisplay,
+		      "window", &xwindow,
+		      "gdk-window", &gdk_window,
+		      NULL);
+
+
+	if (gdk_window == NULL) {
+		GdkWindowAttr attr;
+		GdkWindow *parent;
+		GdkDisplay *gdk_display;
+
+		// TODO - is it correct? Do we want to translate xdisplay -> GdkDisplay?
+		gdk_display = gdk_display_get_default ();
+		if (gdk_display == NULL) {
+			pk_debug ("invalid display returned by gdk_display_get_default ()\n");
+			return;
+		}
+
+		/* get parent */
+		parent = gdk_window_foreign_new_for_display (gdk_display, xwindow);
+		if (parent == NULL) {
+			pk_debug ("invalid window given for setup (id %lu)\n", xwindow);
+			return;
+		}
+
+		attr.event_mask = GDK_VISIBILITY_NOTIFY_MASK | GDK_EXPOSURE_MASK |
+				  GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK |
+				  GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK |
+				  GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_KEY_PRESS_MASK |
+				  GDK_KEY_RELEASE_MASK;
+		attr.x = 0;
+		attr.y = 0;
+		attr.width = width;
+		attr.height = height;
+		attr.window_type = GDK_WINDOW_CHILD;
+		attr.wclass = GDK_INPUT_OUTPUT;
+		gdk_window = gdk_window_new (parent, &attr, GDK_WA_X | GDK_WA_Y);
+		gdk_window_add_filter (gdk_window, pk_main_plugin_x11_filter_event, plugin);
+
+		/* show window */
+		gdk_window_show (gdk_window);
+		g_object_set (plugin, "gdk-window", gdk_window, NULL);
+	} else {
+		gdk_window_move_resize (gdk_window, 0, 0, width, height);
+	}
+}
+
+/**
+ * pk_main_delete_window:
+ **/
+static void
+pk_main_delete_window (PkPlugin *plugin)
+{
+	GdkWindow *gdk_window;
+
+	/* get drawing window */
+	g_object_get (plugin, "gdk-window", &gdk_window, NULL);
+
+	if (gdk_window)
+		gdk_window_remove_filter (gdk_window, pk_main_plugin_x11_filter_event, plugin);
+
+	/* Clear parameters */
+	g_object_set (plugin,
+		      "x", 0,
+		      "y", 0,
+		      "width", 0,
+		      "height", 0,
+		      "display", NULL,
+		      "visual", NULL,
+		      "window", 0,
+		      "gdk-window", NULL,
+		      NULL);
+}
+
+/**
+ * pk_main_draw_window:
+ **/
+static void
+pk_main_draw_window (PkPlugin *plugin)
 {
-	XEvent *xev = (XEvent *)event;
-	cairo_surface_t *surface;
 	cairo_t *cr;
+	GdkWindow *gdk_window;
+
+	/* get drawing window */
+	g_object_get (plugin, "gdk-window", &gdk_window, NULL);
+
+	if (gdk_window == NULL) {
+		pk_debug ("gdk_window is NULL!");
+		return;
+	}
+
+	cr = gdk_cairo_create (gdk_window);
+	pk_plugin_draw (plugin, cr);
+	cairo_destroy (cr);
+}
+
+/**
+ * pk_main_handle_event:
+ **/
+static void
+pk_main_event_handler (PkPlugin *plugin, XEvent *event)
+{
 	XButtonEvent *xbe;
-	XGraphicsExposeEvent *xge;
 	XMotionEvent *xme;
 	XCrossingEvent *xce;
-	guint x;
-	guint y;
-	guint width;
-	guint height;
-	Display *display;
-	Visual *visual;
-	PkPlugin *plugin;
 
-	pk_debug ("pk_main_handle_event [%p]", instance);
+	pk_debug ("pk_main_handle_event [%p]", plugin);
 
 	/* find plugin */
-	plugin = PK_PLUGIN (instance->pdata);
 	if (plugin == NULL)
-		return NPERR_GENERIC_ERROR;
+		return;
 
-	switch (xev->xany.type) {
-	case GraphicsExpose:
-		xge = (XGraphicsExposeEvent *)event;
+	switch (event->xany.type) {
+	case VisibilityNotify:
+	case Expose:
+		{
+		Display *display;
+		Window  window;
+
+		pk_debug ("Expose [%p]", plugin);
 
 		/* get parameters */
-		g_object_get (plugin,
-			      "x", &x,
-			      "y", &y,
-			      "width", &width,
-			      "height", &height,
-			      "display", &display,
-			      "visual", &visual,
-			      NULL);
-
-		pk_debug ("creating surface on display %i size %ix%i on drawable %i with visual %p",
-			 (int)display, x + width, y + height, (gint)xge->drawable, visual);
-
-		surface = cairo_xlib_surface_create (display, xge->drawable, visual, x + width, y + height);
-
-		width = cairo_xlib_surface_get_width (surface);
-		height = cairo_xlib_surface_get_height (surface);
-		if (width <= 0 || height <= 0)
-			pk_warning ("did not create surface: %ix%i", width, height);
-
-		cr = cairo_create (surface);
-		pk_plugin_draw (plugin, cr);
-		cairo_destroy (cr);
-		cairo_surface_destroy (surface);
-		return 1;
+		g_object_get (plugin, "display", &display, "window", &window, NULL);
+
+		/* get rid of all other exposure events */
+		while (XCheckTypedWindowEvent (display, window, Expose, event));
+			pk_main_draw_window (plugin);
+		return;
+		}
 	case ButtonPress:
 		xbe = (XButtonEvent *)event;
 		pk_plugin_button_press (plugin, xbe->x, xbe->y, xbe->time);
-		return 1;
+		return;
 	case ButtonRelease:
 		xbe = (XButtonEvent *)event;
 		pk_plugin_button_release (plugin, xbe->x, xbe->y, xbe->time);
-		return 1;
+		return;
 	case MotionNotify:
 		xme = (XMotionEvent *)event;
 		pk_plugin_motion (plugin, xme->x, xme->y);
-		return 1;
+		return;
 	case EnterNotify:
 		xce = (XCrossingEvent *)event;
 		pk_plugin_enter (plugin, xce->x, xce->y);
-		return 1;
+		return;
 	case LeaveNotify:
 		xce = (XCrossingEvent *)event;
 		pk_plugin_leave (plugin, xce->x, xce->y);
-		return 1;
+		return;
 	}
-	return NPERR_NO_ERROR;
 }
 
 /**
@@ -287,24 +361,40 @@ pk_main_set_window (NPP instance, NPWindow* pNPWindow)
 	gboolean started;
 	PkPlugin *plugin;
 	NPSetWindowCallbackStruct *ws_info;
+	Window window;
 
 	pk_debug ("pk_main_set_window [%p]", instance);
 
-	/* shutdown */
-	if (pNPWindow == NULL) {
-		pk_warning ("NULL window");
-		return NPERR_GENERIC_ERROR;
-	}
-
 	/* find plugin */
 	plugin = PK_PLUGIN (instance->pdata);
 	if (plugin == NULL)
 		return NPERR_GENERIC_ERROR;
 
+	/* shutdown */
+	if (pNPWindow == NULL) {
+		pk_main_delete_window (plugin);
+		return NPERR_NO_ERROR;
+	}
+
 	/* type */
 	pk_debug ("type=%i (NPWindowTypeWindow=%i, NPWindowTypeDrawable=%i)",
 		  pNPWindow->type, NPWindowTypeWindow, NPWindowTypeDrawable);
 
+	g_object_get (plugin,
+		      "window", &window,
+		      NULL);
+
+	/*
+	 * The page with the plugin is being resized.
+	 * Save any UI information because the next time
+	 * around expect a SetWindow with a new window
+	 * id.
+	 */
+	if ((Window) (pNPWindow->window) == window) {
+		pk_debug ("resize event will come");
+		goto out;
+	}
+
 	/* do we have a callback struct (WebKit doesn't send this) */
 	ws_info = (NPSetWindowCallbackStruct *) pNPWindow->ws_info;
 	if (ws_info == NULL) {
@@ -320,31 +410,36 @@ pk_main_set_window (NPP instance, NPWindow* pNPWindow)
 
 	/* set parameters */
 	g_object_set (plugin,
-		      "x", pNPWindow->x,
-		      "y", pNPWindow->y,
+		      "x", 0,
+		      "y", 0,
 		      "width", pNPWindow->width,
 		      "height", pNPWindow->height,
 		      "display", ws_info->display,
 		      "visual", ws_info->visual,
+		      "window", pNPWindow->window,
 		      NULL);
 
-	pk_debug ("x=%i, y=%i, width=%i, height=%i, display=%p, visual=%p",
+	pk_debug ("x=%i, y=%i, width=%i, height=%i, display=%p, visual=%p, window=%ld",
 		 pNPWindow->x, pNPWindow->y, pNPWindow->width, pNPWindow->height,
-		 ws_info->display, ws_info->visual);
+		 ws_info->display, ws_info->visual, (Window)pNPWindow->window);
 
 	/* is already started */
 	g_object_get (plugin,
 		      "started", &started,
 		      NULL);
-	if (started) {
-		pk_debug ("already started, so skipping");
-		goto out;
+	if (!started) {
+		/* start plugin */
+		ret = pk_plugin_start (plugin);
+		if (!ret)
+			pk_warning ("failed to start plugin");
 	}
 
-	/* start plugin */
-	ret = pk_plugin_start (plugin);
-	if (!ret)
-		pk_warning ("failed to start plugin");
+	/* Set-up drawing window */
+	pk_main_create_window (plugin);
+
+	/* draw plugin */
+	pk_main_draw_window (plugin);
+
 out:
 	return NPERR_NO_ERROR;
 }
@@ -366,15 +461,15 @@ pk_main_make_module_resident (void)
 	Dl_info info;
 
 	/* get the absolute filename of this module */
-	if (!dladdr((void *)NP_GetMIMEDescription, &info)) {
-		g_warning("Can't find filename for module");
+	if (!dladdr ((void *)NP_GetMIMEDescription, &info)) {
+		g_warning ("Can't find filename for module");
 		return;
 	}
 
 	/* now reopen it to get our own handle */
-	module_handle = dlopen(info.dli_fname, RTLD_NOW);
+	module_handle = dlopen (info.dli_fname, RTLD_NOW);
 	if (!module_handle) {
-		g_warning("Can't permanently open module %s", dlerror());
+		g_warning ("Can't permanently open module %s", dlerror ());
 		return;
 	}
 }
@@ -393,7 +488,6 @@ NP_GetEntryPoints (NPPluginFuncs *nppfuncs)
 	nppfuncs->newp = pk_main_newp;
 	nppfuncs->destroy = pk_main_destroy;
 	nppfuncs->getvalue = pk_main_get_value;
-	nppfuncs->event = pk_main_handle_event;
 	nppfuncs->setwindow = pk_main_set_window;
 
 	return NPERR_NO_ERROR;
diff --git a/contrib/browser-plugin/pk-plugin.c b/contrib/browser-plugin/pk-plugin.c
index fc8522a..9d94f70 100644
--- a/contrib/browser-plugin/pk-plugin.c
+++ b/contrib/browser-plugin/pk-plugin.c
@@ -22,6 +22,7 @@
 #include <config.h>
 
 #include <glib-object.h>
+#include <gtk/gtk.h>
 
 #include "pk-main.h"
 #include "pk-plugin.h"
@@ -37,6 +38,8 @@ struct PkPluginPrivate
 	guint			 height;
 	Display			*display;
 	Visual			*visual;
+	Window			 window;
+	GdkWindow		*gdk_window;
 	GHashTable		*data;
 };
 
@@ -54,6 +57,8 @@ enum {
 	PROP_DISPLAY,
 	PROP_VISUAL,
 	PROP_STARTED,
+	PROP_WINDOW,
+	PROP_GDKWINDOW,
 	PROP_LAST,
 };
 
@@ -262,6 +267,12 @@ pk_plugin_get_property (GObject *object, guint prop_id, GValue *value, GParamSpe
 	case PROP_STARTED:
 		g_value_set_boolean (value, plugin->priv->started);
 		break;
+	case PROP_WINDOW:
+		g_value_set_ulong (value, plugin->priv->window);
+		break;
+	case PROP_GDKWINDOW:
+		g_value_set_pointer (value, plugin->priv->gdk_window);
+		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 		break;
@@ -297,6 +308,12 @@ pk_plugin_set_property (GObject *object, guint prop_id, const GValue *value, GPa
 	case PROP_STARTED:
 		plugin->priv->started = g_value_get_boolean (value);
 		break;
+	case PROP_WINDOW:
+		plugin->priv->window = g_value_get_ulong (value);
+		break;
+	case PROP_GDKWINDOW:
+		plugin->priv->gdk_window = g_value_get_pointer (value);
+		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 		break;
@@ -369,6 +386,15 @@ pk_plugin_class_init (PkPluginClass *klass)
 				      G_PARAM_READWRITE);
 	g_object_class_install_property (object_class, PROP_STARTED, pspec);
 
+	pspec = g_param_spec_ulong ("window", NULL, NULL,
+				    0, G_MAXULONG, 0,
+				    G_PARAM_READWRITE);
+	g_object_class_install_property (object_class, PROP_WINDOW, pspec);
+
+	pspec = g_param_spec_pointer ("gdk-window", NULL, NULL,
+				      G_PARAM_READWRITE);
+	g_object_class_install_property (object_class, PROP_GDKWINDOW, pspec);
+
 	g_type_class_add_private (klass, sizeof (PkPluginPrivate));
 }
 
@@ -386,6 +412,8 @@ pk_plugin_init (PkPlugin *plugin)
 	plugin->priv->height = 0;
 	plugin->priv->display = NULL;
 	plugin->priv->visual = NULL;
+	plugin->priv->window = 0;
+	plugin->priv->gdk_window = NULL;
 	plugin->priv->data = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
 }
 
commit e0707a59028bc86e7fdce2376f7b923a2269ca0a
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Aug 12 12:06:55 2009 +0200

    APT: Fix an old reference of a method of the former D-Bus based frontend (RequireRestart)

diff --git a/backends/apt/aptBackend.py b/backends/apt/aptBackend.py
index 6d6b12e..8715d8c 100755
--- a/backends/apt/aptBackend.py
+++ b/backends/apt/aptBackend.py
@@ -446,7 +446,7 @@ class PackageKitInstallProgress(apt.progress.InstallProgress):
         # Check for required restarts
         if os.path.exists("/var/run/reboot-required") and \
            os.path.getmtime("/var/run/reboot-required") > self.start_time:
-            self._backend.RequireRestart(RESTART_SYSTEM, "")
+            self._backend.require_restart(RESTART_SYSTEM, "")
 
 
 class PackageKitDpkgInstallProgress(DpkgInstallProgress,
commit 3ff809a305b4e5db54083f78c7c8c2d63d099eef
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Aug 12 11:25:06 2009 +0200

    APT: Fix a trivial typo

diff --git a/backends/apt/aptBackend.py b/backends/apt/aptBackend.py
index 315f326..6d6b12e 100755
--- a/backends/apt/aptBackend.py
+++ b/backends/apt/aptBackend.py
@@ -1074,7 +1074,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         self._check_init(prange=(0,10))
         pkgs=[]
         ac = apt_pkg.GetPkgActionGroup(self._cache._depcache)
-        resolve = apt_pkg.GetPkgProblemResolver(self._cache._depcache)
+        resolver = apt_pkg.GetPkgProblemResolver(self._cache._depcache)
         for id in ids:
             pkg = self._find_package_by_id(id)
             if pkg == None:
commit 1f79cacb52285acf9382b1968448bd98a514b3d2
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Aug 12 11:21:14 2009 +0200

    APT: Optimize update calculation by using the problem resolver directly

diff --git a/backends/apt/aptBackend.py b/backends/apt/aptBackend.py
index e0816ad..315f326 100755
--- a/backends/apt/aptBackend.py
+++ b/backends/apt/aptBackend.py
@@ -657,9 +657,12 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         # Start with a safe upgrade
         self._cache.upgrade()
         upgrades_safe = self._cache.getChanges()
+        resolver = apt_pkg.GetPkgProblemResolver(self._cache._depcache)
+        for upgrade in upgrades_safe:
+            resolver.Clear(upgrade._pkg)
+            resolver.Protect(upgrade._pkg)
         # Search for upgrades which are not already part of the safe upgrade
         # but would only require the installation of additional packages
-        upgrades_additional = []
         for pkg in self._cache:
             if not pkg.isUpgradable:
                 continue
@@ -667,24 +670,22 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             if not pkg in upgrades_safe:
                 # Check if the upgrade would require the removal of an already
                 # installed package. If this is the case it will be skipped
-                auto = self._cache._depcache.IsAutoInstalled(pkg._pkg)
-                pkg.markInstall(False, True, auto)
-                if self._cache._depcache.DelCount or \
-                   self._cache._depcache.BrokenCount:
-                    # The update is broken
+                resolver.Clear(pkg._pkg)
+                resolver.Protect(pkg._pkg)
+                resolver.InstallProtect()
+                try:
+                    resolver.Resolve(True)
+                except:
                     self._emit_package(pkg, INFO_BLOCKED, force_candidate=True)
-                    # Reset the cache to a state where all safe and additional
-                    # packages are marked for installation
-                    ac = apt_pkg.GetPkgActionGroup(self._cache._depcache)
+                    resolver.Clear(pkg._pkg)
+                    self._cache.clear()
+                    continue
+                if self._cache._depcache.DelCount:
+                    self._emit_package(pkg, INFO_BLOCKED, force_candidate=True)
+                    resolver.Clear(pkg._pkg)
                     self._cache.clear()
-                    self._cache.upgrade()
-                    for upd in upgrades_additional:
-                        auto = self._cache._depcache.IsAutoInstalled(upd._pkg)
-                        upd.markInstall(False, True, auto)
-                    ac.release()
                     continue
             # The update can be safely installed
-            upgrades_additional.append(pkg)
             info = INFO_NORMAL
             # Detect the nature of the upgrade (e.g. security, enhancement)
             archive = pkg.candidateOrigin[0].archive
@@ -805,35 +806,34 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         self.allow_cancel(False)
         self.percentage(0)
         self._check_init(prange=(0,5))
-        # Perform a safe upgrade
+        # Start with protecting all safe upgrades
         self._cache.upgrade()
         upgrades_safe = self._cache.getChanges()
+        resolver = apt_pkg.GetPkgProblemResolver(self._cache._depcache)
+        for upgrade in upgrades_safe:
+            resolver.Clear(upgrade._pkg)
+            resolver.Protect(upgrade._pkg)
         # Search for upgrades which are not already part of the safe upgrade
         # but would only require the installation of additional packages
-        upgrades_additional = []
         for pkg in self._cache:
-            if not pkg.isUpgradable:
+            if not pkg.isUpgradable or pkg in upgrades_safe:
                 continue
             pklog.debug("Checking upgrade of %s" % pkg.name)
-            if not pkg in upgrades_safe:
-                # Check if the upgrade would require the removal of an already
-                # installed package. If this is the case it will be skipped
-                auto = self._cache._depcache.IsAutoInstalled(pkg._pkg)
-                pkg.markInstall(False, True, auto)
-                if self._cache._depcache.DelCount or \
-                   self._cache._depcache.BrokenCount:
-                    # Reset the cache to a state where all safe and additional
-                    # packages are marked for installation
-                    ac = apt_pkg.GetPkgActionGroup(self._cache._depcache)
-                    self._cache.clear()
-                    self._cache.upgrade()
-                    for upd in upgrades_additional:
-                        auto = self._cache._depcache.IsAutoInstalled(upd._pkg)
-                        upd.markInstall(False, True, auto)
-                    ac.release()
-                    continue
-            # The update can be safely installed
-            upgrades_additional.append(pkg)
+            resolver.Clear(pkg._pkg)
+            resolver.Protect(pkg._pkg)
+            resolver.InstallProtect()
+            try:
+                resolver.Resolve(True)
+            except:
+                resolver.Clear(pkg._pkg)
+                self._cache.clear()
+                continue
+            if self._cache._depcache.DelCount:
+                resolver.Clear(pkg._pkg)
+                self._cache.clear()
+                continue
+        resolver.InstallProtect()
+        resolver.Resolve(True)
         if not self._commit_changes(): return False
 
     @unlock_cache_afterwards
commit c5e03ef10152ec0c9f748f8a87ff4ec1964183e3
Merge: 45ef4ce... 64a00e4...
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Aug 12 12:24:22 2009 +0200

    Merge branch 'master' of git+ssh://glatzor@git.packagekit.org/srv/git/PackageKit

commit 64a00e4df89296dd7794ba3b128fbaa11244cfe6
Author: Aurelien Lefebvre <alefebvre at mandriva.com>
Date:   Wed Aug 12 11:02:28 2009 +0200

    urpmi: Trivial fix in get-depends and get-requires
    
    In those two methods recursive and package id args were swaped

diff --git a/backends/urpmi/helpers/urpmi-dispatched-backend.pl b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
index f6c1318..9387b1e 100755
--- a/backends/urpmi/helpers/urpmi-dispatched-backend.pl
+++ b/backends/urpmi/helpers/urpmi-dispatched-backend.pl
@@ -123,8 +123,8 @@ sub get_depends {
   my ($urpm, $args) = @_;
   
   my @filterstab = split(/;/, @{$args}[0]);
-  my $recursive_option = @{$args}[1] eq "yes" ? 1 : 0;
-  my @packageidstab = split(/&/, @{$args}[2]);
+  my @packageidstab = split(/&/, @{$args}[1]);
+  my $recursive_option = @{$args}[2] eq "yes" ? 1 : 0;
   
   pk_print_status(PK_STATUS_ENUM_DEP_RESOLVE);
   
@@ -278,8 +278,8 @@ sub get_requires {
   my ($urpm, $args) = @_;
   
   my @filterstab = split(/;/, @{$args}[0]);
-  my $recursive_option = @{$args}[1] eq "yes" ? 1 : 0;
-  my @packageidstab = split(/&/, @{$args}[2]);
+  my @packageidstab = split(/&/, @{$args}[1]);
+  my $recursive_option = @{$args}[2] eq "yes" ? 1 : 0;
   
   my @pkgnames;
   foreach (@packageidstab) {
commit 145ca34c74ac61ab16c36fa65fe06957b61e2647
Author: Mounir Lamouri (volkmar) <mounir.lamouri at gmail.com>
Date:   Wed Aug 12 12:43:35 2009 +0200

    website-doc: add portage backend to pk-matrix.html

diff --git a/docs/html/pk-matrix.html b/docs/html/pk-matrix.html
index c7a47fa..5911451 100644
--- a/docs/html/pk-matrix.html
+++ b/docs/html/pk-matrix.html
@@ -28,6 +28,7 @@
 <td><center>opkg</center></td>
 <td><center>pisi</center></td>
 <td><center>poldek</center></td>
+<td><center>portage</center></td>
 <td><center>smart</center></td>
 <td><center>urpmi</center></td>
 <td><center>yum</center></td>
@@ -42,6 +43,7 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -56,6 +58,7 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -70,6 +73,7 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -84,6 +88,7 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -98,6 +103,7 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -112,6 +118,7 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -126,6 +133,7 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -140,6 +148,7 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -154,6 +163,7 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -168,6 +178,7 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -182,6 +193,7 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -196,6 +208,7 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -210,6 +223,7 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -224,6 +238,7 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -238,6 +253,7 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -252,6 +268,7 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -266,6 +283,7 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[yes]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -280,6 +298,7 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -294,6 +313,7 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -308,6 +328,7 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum -->
@@ -322,6 +343,7 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -336,6 +358,7 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -350,6 +373,7 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -364,6 +388,7 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -378,6 +403,7 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -392,6 +418,7 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -406,6 +433,7 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[no]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -424,6 +452,7 @@
 <td><center>opkg</center></td>
 <td><center>pisi</center></td>
 <td><center>poldek</center></td>
+<td><center>portage</center></td>
 <td><center>smart</center></td>
 <td><center>urpmi</center></td>
 <td><center>yum</center></td>
@@ -438,6 +467,7 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -452,6 +482,7 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[no]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -466,6 +497,7 @@
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- opkg -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[no]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -480,6 +512,7 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[yes]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -494,6 +527,7 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum -->
@@ -508,6 +542,7 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- smart -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum -->
@@ -522,6 +557,7 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- poldek -->
+<td><img src="img/status-good.png" alt="[yes]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -536,6 +572,7 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- yum -->
@@ -550,6 +587,7 @@
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- opkg -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- pisi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- poldek -->
+<td><img src="img/status-bad.png" alt="[no]"/></td><!-- portage -->
 <td><img src="img/status-good.png" alt="[yes]"/></td><!-- smart -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- urpmi -->
 <td><img src="img/status-bad.png" alt="[no]"/></td><!-- yum -->
commit 45ef4ce6805c266013b056cd962a000f314b2d1b
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Aug 12 09:35:17 2009 +0200

    APT: Emit a warning message if an untrusted package gets installed

diff --git a/backends/apt/aptBackend.py b/backends/apt/aptBackend.py
index c24bf48..e0816ad 100755
--- a/backends/apt/aptBackend.py
+++ b/backends/apt/aptBackend.py
@@ -1614,10 +1614,19 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             pass
         self._open_cache(prange)
 
+    def _check_trusted(self):
+        """Emit a message if untrusted packages would be installed."""
+        untrusted = [pkg.name for pkg in self._cache \
+                     if (pkg.markedInstall or pkg.markedUpgrade) and \
+                         not pkg.candidate.origins[0].trusted]
+        if untrusted:
+            self.message(MESSAGE_UNTRUSTED_PACKAGE, " ".join(untrusted))
+
     def _commit_changes(self, fetch_range=(5,50), install_range=(50,90)):
         """
         Commit changes to the cache and handle errors
         """
+        self._check_trusted()
         try:
             self._cache.commit(PackageKitFetchProgress(self, fetch_range), 
                                PackageKitInstallProgress(self, install_range))
commit e712ce8a33d1e87837ac5876d1df5002c63b93e5
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Aug 12 09:04:58 2009 +0200

    APT: Don't use the resolver to detect additional safe upgrades since they should not introduce any problems

diff --git a/backends/apt/aptBackend.py b/backends/apt/aptBackend.py
index aa33232..c24bf48 100755
--- a/backends/apt/aptBackend.py
+++ b/backends/apt/aptBackend.py
@@ -668,7 +668,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                 # Check if the upgrade would require the removal of an already
                 # installed package. If this is the case it will be skipped
                 auto = self._cache._depcache.IsAutoInstalled(pkg._pkg)
-                pkg.markInstall(True, True, auto)
+                pkg.markInstall(False, True, auto)
                 if self._cache._depcache.DelCount or \
                    self._cache._depcache.BrokenCount:
                     # The update is broken
@@ -680,7 +680,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                     self._cache.upgrade()
                     for upd in upgrades_additional:
                         auto = self._cache._depcache.IsAutoInstalled(upd._pkg)
-                        upd.markInstall(True, True, auto)
+                        upd.markInstall(False, True, auto)
                     ac.release()
                     continue
             # The update can be safely installed
@@ -818,9 +818,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             if not pkg in upgrades_safe:
                 # Check if the upgrade would require the removal of an already
                 # installed package. If this is the case it will be skipped
-                #FIXME: Should use the resolver to protect safe upgrades
                 auto = self._cache._depcache.IsAutoInstalled(pkg._pkg)
-                pkg.markInstall(True, True, auto)
+                pkg.markInstall(False, True, auto)
                 if self._cache._depcache.DelCount or \
                    self._cache._depcache.BrokenCount:
                     # Reset the cache to a state where all safe and additional
@@ -830,7 +829,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                     self._cache.upgrade()
                     for upd in upgrades_additional:
                         auto = self._cache._depcache.IsAutoInstalled(upd._pkg)
-                        upd.markInstall(True, True, auto)
+                        upd.markInstall(False, True, auto)
                     ac.release()
                     continue
             # The update can be safely installed
commit 1a1c8056b335e03fbbb41bd47e5f691daa3d5142
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Aug 12 09:00:01 2009 +0200

    APT: Use the enhanced safe upgrade for update-system

diff --git a/backends/apt/aptBackend.py b/backends/apt/aptBackend.py
index 95b5009..aa33232 100755
--- a/backends/apt/aptBackend.py
+++ b/backends/apt/aptBackend.py
@@ -805,15 +805,37 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         self.allow_cancel(False)
         self.percentage(0)
         self._check_init(prange=(0,5))
-        try:
-            self._cache.upgrade(distUpgrade=False)
-        except:
-            self._cache.clear()
-            self.error(ERROR_DEP_RESOLUTION_FAILED,
-                       "Failed to upgrade the system.")
-            return
+        # Perform a safe upgrade
+        self._cache.upgrade()
+        upgrades_safe = self._cache.getChanges()
+        # Search for upgrades which are not already part of the safe upgrade
+        # but would only require the installation of additional packages
+        upgrades_additional = []
+        for pkg in self._cache:
+            if not pkg.isUpgradable:
+                continue
+            pklog.debug("Checking upgrade of %s" % pkg.name)
+            if not pkg in upgrades_safe:
+                # Check if the upgrade would require the removal of an already
+                # installed package. If this is the case it will be skipped
+                #FIXME: Should use the resolver to protect safe upgrades
+                auto = self._cache._depcache.IsAutoInstalled(pkg._pkg)
+                pkg.markInstall(True, True, auto)
+                if self._cache._depcache.DelCount or \
+                   self._cache._depcache.BrokenCount:
+                    # Reset the cache to a state where all safe and additional
+                    # packages are marked for installation
+                    ac = apt_pkg.GetPkgActionGroup(self._cache._depcache)
+                    self._cache.clear()
+                    self._cache.upgrade()
+                    for upd in upgrades_additional:
+                        auto = self._cache._depcache.IsAutoInstalled(upd._pkg)
+                        upd.markInstall(True, True, auto)
+                    ac.release()
+                    continue
+            # The update can be safely installed
+            upgrades_additional.append(pkg)
         if not self._commit_changes(): return False
-        self.percentage(100)
 
     @unlock_cache_afterwards
     def remove_packages(self, allowdeps, autoremove, ids):
commit 6362c7c07bab5bd87b330d8f6c5c53bf65fe2a7a
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Aug 12 08:43:31 2009 +0200

    APT: Enhance also the removal of packages by action group and resolver

diff --git a/backends/apt/aptBackend.py b/backends/apt/aptBackend.py
index cb47cda..95b5009 100755
--- a/backends/apt/aptBackend.py
+++ b/backends/apt/aptBackend.py
@@ -828,6 +828,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         self.percentage(0)
         self._check_init(prange=(0,10))
         pkgs=[]
+        action_group = apt_pkg.GetPkgActionGroup(self._cache._depcache)
+        resolver = apt_pkg.GetPkgProblemResolver(self._cache._depcache)
         for id in ids:
             pkg = self._find_package_by_id(id)
             if pkg == None:
@@ -838,17 +840,34 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                 self.error(ERROR_PACKAGE_NOT_INSTALLED,
                            "Package %s isn't installed" % pkg.name)
                 return
-            pkgs.append(pkg.name[:])
             if pkg._pkg.Essential == True:
                 self.error(ERROR_CANNOT_REMOVE_SYSTEM_PACKAGE,
                            "Package %s cannot be removed." % pkg.name)
                 return
-            try:
-                pkg.markDelete()
-            except:
-                self._open_cache(prange=(90,99))
-                self.error(ERROR_UNKNOWN, "Removal of %s failed" % pkg.name)
-                return
+            pkgs.append(pkg.name[:])
+            pkg.markDelete(False, False)
+            resolver.Clear(pkg._pkg)
+            resolver.Remove(pkg._pkg)
+        try:
+            resolver.Resolve()
+        except SystemError, error:
+            broken = [pkg.name for pkg in self._cache if \
+                      self._cache._depcache.IsInstBroken(pkg._pkg)]
+            self.error(ERROR_DEP_RESOLUTION_FAILED,
+                       "The following packages would break and so block the "
+                       "removal: %s" % " ".join(broken))
+            return
+        action_group.release()
+        # Error out if the installation would the installation or upgrade of
+        # other packages
+        if self._cache._depcache.InstCount:
+            installed = [pkg.name for pkg in self._cache.getChanges() if \
+                         pkg.markedInstall or pkg.markedUpgrade]
+            self.error(ERROR_DEP_RESOLUTION_FAILED,
+                       "The following packages would have to upgraded or "
+                       "installed and so block the removal: "
+                       "%s" % " ".join(installed))
+            return
         if not self._commit_changes(fetch_range=(10,10),
                                     install_range=(10,90)):
             return False
commit eb5c3608cff35b270e22ed3fd78b3182967114c7
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Aug 12 08:01:30 2009 +0200

    APT: Make use of the problem resolver to detect conflicting installs/updates

diff --git a/backends/apt/aptBackend.py b/backends/apt/aptBackend.py
index 1db0aa4..cb47cda 100755
--- a/backends/apt/aptBackend.py
+++ b/backends/apt/aptBackend.py
@@ -1034,6 +1034,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         self._check_init(prange=(0,10))
         pkgs=[]
         ac = apt_pkg.GetPkgActionGroup(self._cache._depcache)
+        resolve = apt_pkg.GetPkgProblemResolver(self._cache._depcache)
         for id in ids:
             pkg = self._find_package_by_id(id)
             if pkg == None:
@@ -1047,7 +1048,18 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             pkgs.append(pkg.name[:])
             # Actually should be fixed in python-apt
             auto = self._cache._depcache.IsAutoInstalled(pkg._pkg)
-            pkg.markInstall(True, True, auto)
+            pkg.markInstall(False, True, auto)
+            resolver.Clear(pkg._pkg)
+            resolver.Protect(pkg._pkg)
+        try:
+            resolver.Resolve(True)
+        except SystemError, error:
+            broken = [pkg.name for pkg in self._cache if \
+                      self._cache._depcache.IsInstBroken(pkg._pkg)]
+            self.error(ERROR_DEP_RESOLUTION_FAILED,
+                       "The following packages block the installation: "
+                       "%s" % " ".join(broken))
+            return
         ac.release()
         # Error out if the updates would require the removal of already
         # installed packages
@@ -1135,6 +1147,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         self._check_init(prange=(0,10))
         pkgs=[]
         ac = apt_pkg.GetPkgActionGroup(self._cache._depcache)
+        resolver = apt_pkg.GetPkgProblemResolver(self._cache._depcache)
         for id in ids:
             pkg = self._find_package_by_id(id)
             if pkg == None:
@@ -1146,7 +1159,18 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                            "Package %s is already installed" % pkg.name)
                 return
             pkgs.append(pkg.name[:])
-            pkg.markInstall(True, True, True)
+            pkg.markInstall(False, True, True)
+            resolver.Clear(pkg._pkg)
+            resolver.Protect(pkg._pkg)
+        try:
+            resolver.Resolve(True)
+        except SystemError, error:
+            broken = [pkg.name for pkg in self._cache if \
+                      self._cache._depcache.IsInstBroken(pkg._pkg)]
+            self.error(ERROR_DEP_RESOLUTION_FAILED,
+                       "The following packages block the installation: "
+                       "%s" % " ".join(broken))
+            return
         ac.release()
         # Error out if the installation would require the removal of already
         # installed packages
commit ea54885fb995662712e47dd458beecca86ccfb90
Author: Mounir Lamouri (volkmar) <mounir.lamouri at gmail.com>
Date:   Wed Aug 12 01:04:46 2009 +0200

    portage: better managing of cyclic dep in get_requires

diff --git a/backends/portage/portageBackend.py b/backends/portage/portageBackend.py
index 365aa28..cb35128 100755
--- a/backends/portage/portageBackend.py
+++ b/backends/portage/portageBackend.py
@@ -572,7 +572,6 @@ class PackageKitPortageBackend(PackageKitBaseBackend):
         Get a list of cpv, portage settings and tree and recursive parameter
         And returns the list of packages required for cpv list
         '''
-        # TODO: should see if some cpv in the input list is not a dep of another
         packages_list = []
 
         myopts = {}
@@ -616,7 +615,9 @@ class PackageKitPortageBackend(PackageKitBaseBackend):
                         if not isinstance(n, _emerge.SetArg.SetArg):
                             packages_list.append(n)
 
-        return packages_list
+        # remove cpv_input that may be added to the list
+        def filter_cpv_input(x): return x.cpv not in cpv_input
+        return filter(filter_cpv_input, packages_list)
 
     def package(self, cpv, info=None):
         desc = self.get_metadata(cpv, ["DESCRIPTION"])[0]
commit b4b4d6b93ba9a5fe0abb0493aa380170c5f9e765
Author: Mounir Lamouri (volkmar) <mounir.lamouri at gmail.com>
Date:   Wed Aug 12 00:45:10 2009 +0200

    portage: don't use PackagekitPackage anymore

diff --git a/backends/portage/portageBackend.py b/backends/portage/portageBackend.py
index fe32a4b..365aa28 100755
--- a/backends/portage/portageBackend.py
+++ b/backends/portage/portageBackend.py
@@ -263,7 +263,7 @@ def is_repository_enabled(layman_db, repo_name):
         return True
     return False
 
-class PackageKitPortageBackend(PackageKitBaseBackend, PackagekitPackage):
+class PackageKitPortageBackend(PackageKitBaseBackend):
 
     def __init__(self, args):
         signal.signal(signal.SIGQUIT, sigquit)
commit b62b57a7ada9c15f4c7e1edc313d1c348dd0f656
Merge: b5d2e6e... ceba92a...
Author: Mounir Lamouri (volkmar) <mounir.lamouri at gmail.com>
Date:   Tue Aug 11 23:43:42 2009 +0200

    Merge branch 'master' of git+ssh://volkmar@git.packagekit.org/srv/git/PackageKit

commit b5d2e6ed01d8e9821efe7517e1730441ac1fc2aa
Author: Mounir Lamouri (volkmar) <mounir.lamouri at gmail.com>
Date:   Tue Aug 11 23:43:21 2009 +0200

    portage: clean lock usage

diff --git a/backends/portage/portageBackend.py b/backends/portage/portageBackend.py
index 06be243..3481a60 100755
--- a/backends/portage/portageBackend.py
+++ b/backends/portage/portageBackend.py
@@ -56,7 +56,6 @@ from itertools import izip
 # ERRORS with messages ?
 # remove percentage(None) if percentage is used
 # protection against signal when installing/removing
-# lock ?
 
 # Map Gentoo categories to the PackageKit group name space
 CATEGORY_GROUP_MAP = {
@@ -266,7 +265,7 @@ def is_repository_enabled(layman_db, repo_name):
 
 class PackageKitPortageBackend(PackageKitBaseBackend, PackagekitPackage):
 
-    def __init__(self, args, lock=True):
+    def __init__(self, args):
         signal.signal(signal.SIGQUIT, sigquit)
         PackageKitBaseBackend.__init__(self, args)
 
@@ -279,15 +278,13 @@ class PackageKitPortageBackend(PackageKitBaseBackend, PackagekitPackage):
         self.orig_err = None
 
         # do not log with mod_echo
-        #def filter_echo(x): return x != 'echo'
-
-        #elogs = self.psettings["PORTAGE_ELOG_SYSTEM"].split()
-        #print elogs
-        #elogs = filter(filter_echo, elogs)
-        #print elogs
+        '''
+        def filter_echo(x): return x != 'echo'
 
-        if lock:
-            self.doLock()
+        elogs = self.psettings["PORTAGE_ELOG_SYSTEM"].split()
+        elogs = filter(filter_echo, elogs)
+        self.psettings["PORTAGE_ELOG_SYSTEM"] = ' '.join(elogs)
+        '''
 
     # TODO: should be removed when using non-verbose function API
     def block_output(self):
@@ -1061,6 +1058,18 @@ class PackageKitPortageBackend(PackageKitBaseBackend, PackagekitPackage):
         myparams = _emerge.create_depgraph_params.create_depgraph_params(
                 myopts, "")
 
+        # do not log with mod_echo
+        '''
+        def filter_echo(x): return x != 'echo'
+
+        elogs = settings["PORTAGE_ELOG_SYSTEM"].split()
+        elogs = filter(filter_echo, elogs)
+        settings.unlock()
+        settings["PORTAGE_ELOG_SYSTEM"] = ' '.join(elogs)
+        settings.backup_changes("PORTAGE_ELOG_SYSTEM")
+        settings.regenerate()
+        '''
+
         depgraph = _emerge.depgraph.depgraph(settings, trees,
                 myopts, myparams, None)
         retval, favorites = depgraph.select_files(cpv_list)
@@ -1509,7 +1518,7 @@ class PackageKitPortageBackend(PackageKitBaseBackend, PackagekitPackage):
             self.unblock_output()
 
 def main():
-    backend = PackageKitPortageBackend("") #'', lock=True)
+    backend = PackageKitPortageBackend("")
     backend.dispatcher(sys.argv[1:])
 
 if __name__ == "__main__":
commit 40b209e96d7d803dad0744b94e124e9d8a0864b2
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Tue Aug 11 13:11:07 2009 +0200

    APT: Also use removal detection and action groups for InstallPackages

diff --git a/backends/apt/aptBackend.py b/backends/apt/aptBackend.py
index 0214176..1db0aa4 100755
--- a/backends/apt/aptBackend.py
+++ b/backends/apt/aptBackend.py
@@ -1134,6 +1134,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         self.percentage(0)
         self._check_init(prange=(0,10))
         pkgs=[]
+        ac = apt_pkg.GetPkgActionGroup(self._cache._depcache)
         for id in ids:
             pkg = self._find_package_by_id(id)
             if pkg == None:
@@ -1145,14 +1146,17 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                            "Package %s is already installed" % pkg.name)
                 return
             pkgs.append(pkg.name[:])
-            try:
-                pkg.markInstall()
-            except Exception, e:
-                self._open_cache(prange=(90,100))
-                self.error(ERROR_UNKNOWN,
-                           "%s could not be queued for "
-                           "installation: %s" % (pkg.name,e))
-                return
+            pkg.markInstall(True, True, True)
+        ac.release()
+        # Error out if the installation would require the removal of already
+        # installed packages
+        if self._cache._depcache.DelCount:
+            deleted = [pkg.name for pkg in self._cache.getChanges() if \
+                       pkg.markedDelete]
+            self.error(ERROR_DEP_RESOLUTION_FAILED,
+                       "The following packages block the update: "
+                       "%s" % " ".join(deleted))
+            return
         if not self._commit_changes(): return False
         self._open_cache(prange=(90,100))
         self.percentage(100)
commit 8f60e4e0d612123744c7a5ed090c774ac8f7ad91
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Tue Aug 11 13:04:55 2009 +0200

    APT: Do not allow to update not installed packages

diff --git a/backends/apt/aptBackend.py b/backends/apt/aptBackend.py
index 1193739..0214176 100755
--- a/backends/apt/aptBackend.py
+++ b/backends/apt/aptBackend.py
@@ -1040,6 +1040,10 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                 self.error(ERROR_PACKAGE_NOT_FOUND,
                            "Package %s isn't available" % id)
                 return
+            if not pkg.isInstalled:
+                self.error(ERROR_PACKAGE_NOT_INSTALLED,
+                           "%s isn't installed" % pkg.name)
+                return
             pkgs.append(pkg.name[:])
             # Actually should be fixed in python-apt
             auto = self._cache._depcache.IsAutoInstalled(pkg._pkg)
commit e2e0c9332bc6fe9ebe0e622f1ec7bc07f2116790
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Tue Aug 11 12:57:24 2009 +0200

    APT: Use an ActionGroup in update_packages

diff --git a/backends/apt/aptBackend.py b/backends/apt/aptBackend.py
index 2a42868..1193739 100755
--- a/backends/apt/aptBackend.py
+++ b/backends/apt/aptBackend.py
@@ -1033,6 +1033,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         self.percentage(0)
         self._check_init(prange=(0,10))
         pkgs=[]
+        ac = apt_pkg.GetPkgActionGroup(self._cache._depcache)
         for id in ids:
             pkg = self._find_package_by_id(id)
             if pkg == None:
@@ -1040,15 +1041,10 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                            "Package %s isn't available" % id)
                 return
             pkgs.append(pkg.name[:])
-            try:
-                # Actually should be fixed in python-apt
-                auto = self._cache._depcache.IsAutoInstalled(pkg._pkg)
-                pkg.markInstall(True, True, auto)
-            except:
-                self._open_cache(prange=(90,100))
-                self.error(ERROR_UNKNOWN,
-                           "%s could not be queued for update" % pkg.name)
-                return
+            # Actually should be fixed in python-apt
+            auto = self._cache._depcache.IsAutoInstalled(pkg._pkg)
+            pkg.markInstall(True, True, auto)
+        ac.release()
         # Error out if the updates would require the removal of already
         # installed packages
         if self._cache._depcache.DelCount:
commit f29a00be75e616a71124ef9224522464b5fd23bf
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Tue Aug 11 12:54:43 2009 +0200

    APT: Don't allow to install updates in UpdatePackages which would remove already
    installed packages

diff --git a/backends/apt/aptBackend.py b/backends/apt/aptBackend.py
index 39e9ccc..2a42868 100755
--- a/backends/apt/aptBackend.py
+++ b/backends/apt/aptBackend.py
@@ -1049,6 +1049,15 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                 self.error(ERROR_UNKNOWN,
                            "%s could not be queued for update" % pkg.name)
                 return
+        # Error out if the updates would require the removal of already
+        # installed packages
+        if self._cache._depcache.DelCount:
+            deleted = [pkg.name for pkg in self._cache.getChanges() if \
+                       pkg.markedDelete]
+            self.error(ERROR_DEP_RESOLUTION_FAILED,
+                       "The following packages block the update: "
+                       "%s" % " ".join(deleted))
+            return
         if not self._commit_changes(): return False
         self._open_cache(prange=(90,100))
         self.percentage(100)
commit f40c8fe92add354712326655c561f6722060dbc8
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Tue Aug 11 12:36:35 2009 +0200

    APT: Workaround a bug in python-apt which would mark upgraded packages as not automatic installed

diff --git a/backends/apt/aptBackend.py b/backends/apt/aptBackend.py
index b4e02e7..39e9ccc 100755
--- a/backends/apt/aptBackend.py
+++ b/backends/apt/aptBackend.py
@@ -1041,7 +1041,9 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                 return
             pkgs.append(pkg.name[:])
             try:
-                pkg.markUpgrade()
+                # Actually should be fixed in python-apt
+                auto = self._cache._depcache.IsAutoInstalled(pkg._pkg)
+                pkg.markInstall(True, True, auto)
             except:
                 self._open_cache(prange=(90,100))
                 self.error(ERROR_UNKNOWN,
commit 05f1ff84628106da599e86a6d4bf4defdd5f64cd
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Tue Aug 11 12:31:24 2009 +0200

    APT: UpdatePackages should not fail on already up-to-date packages

diff --git a/backends/apt/aptBackend.py b/backends/apt/aptBackend.py
index 88ba0f4..b4e02e7 100755
--- a/backends/apt/aptBackend.py
+++ b/backends/apt/aptBackend.py
@@ -1039,10 +1039,6 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                 self.error(ERROR_PACKAGE_NOT_FOUND,
                            "Package %s isn't available" % id)
                 return
-            if not pkg.isUpgradable:
-                self.error(ERROR_PACKAGE_ALREADY_INSTALLED,
-                           "Package %s is already up-to-date" % pkg.name)
-                return
             pkgs.append(pkg.name[:])
             try:
                 pkg.markUpgrade()
commit 374f908a721bc82dfcf301ee85264ccdacb34ba5
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Tue Aug 11 12:25:42 2009 +0200

    APT: Do not calculate updates using the dist-upgrade method. Instead perform
    a safe upgrade and try if a kept back upgrade can be safely installed without
    removing an existing one or introducing any conflicts.
    
    As an effect e.g. the linux-generic meta package won't be reported as blocked
    anymore if it requires the installation of a new kernel image.
    
    This is required since PackageKit doesn't allow the removal of packages during
    updates.

diff --git a/backends/apt/aptBackend.py b/backends/apt/aptBackend.py
index 7611164..88ba0f4 100755
--- a/backends/apt/aptBackend.py
+++ b/backends/apt/aptBackend.py
@@ -620,7 +620,11 @@ class PackageKitAptBackend(PackageKitBaseBackend):
 
     def get_updates(self, filters):
         """
-        Implement the {backend}-get-update functionality
+        Implement the {backend}-get-update functionality.
+
+        Only report updates which can be installed safely: Which can depend
+        on the installation of additional packages but which don't require
+        the removal of already installed packages or block any other update.
         """
         def succeeds_security_update(pkg):
             """
@@ -650,13 +654,39 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         self.allow_cancel(True)
         self.percentage(None)
         self._check_init(progress=False)
-        self._cache.upgrade(distUpgrade=True)
-        updates = [pkg.name for pkg in self._cache if pkg.isUpgradable]
-        for pkg in self._cache.getChanges():
-            if not (pkg.markedUpgrade and pkg.isUpgradable):
+        # Start with a safe upgrade
+        self._cache.upgrade()
+        upgrades_safe = self._cache.getChanges()
+        # Search for upgrades which are not already part of the safe upgrade
+        # but would only require the installation of additional packages
+        upgrades_additional = []
+        for pkg in self._cache:
+            if not pkg.isUpgradable:
                 continue
-            updates.remove(pkg.name)
+            pklog.debug("Checking upgrade of %s" % pkg.name)
+            if not pkg in upgrades_safe:
+                # Check if the upgrade would require the removal of an already
+                # installed package. If this is the case it will be skipped
+                auto = self._cache._depcache.IsAutoInstalled(pkg._pkg)
+                pkg.markInstall(True, True, auto)
+                if self._cache._depcache.DelCount or \
+                   self._cache._depcache.BrokenCount:
+                    # The update is broken
+                    self._emit_package(pkg, INFO_BLOCKED, force_candidate=True)
+                    # Reset the cache to a state where all safe and additional
+                    # packages are marked for installation
+                    ac = apt_pkg.GetPkgActionGroup(self._cache._depcache)
+                    self._cache.clear()
+                    self._cache.upgrade()
+                    for upd in upgrades_additional:
+                        auto = self._cache._depcache.IsAutoInstalled(upd._pkg)
+                        upd.markInstall(True, True, auto)
+                    ac.release()
+                    continue
+            # The update can be safely installed
+            upgrades_additional.append(pkg)
             info = INFO_NORMAL
+            # Detect the nature of the upgrade (e.g. security, enhancement)
             archive = pkg.candidateOrigin[0].archive
             origin = pkg.candidateOrigin[0].origin
             trusted = pkg.candidateOrigin[0].trusted
@@ -666,8 +696,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                     label == "Debian-Security":
                     info = INFO_SECURITY
                 elif succeeds_security_update(pkg):
-                    pklog.debug("Update of %s succeeds a security "
-                                "update. Raising its priority." % pkg.name)
+                    pklog.debug("Update of %s succeeds a security update. "
+                                "Raising its priority." % pkg.name)
                     info = INFO_SECURITY
                 elif archive.endswith("-backports"):
                     info = INFO_ENHANCEMENT
@@ -676,9 +706,6 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             if origin in ["Backports.org archive"] and trusted == True:
                 info = INFO_ENHANCEMENT
             self._emit_package(pkg, info, force_candidate=True)
-        # Report packages that are upgradable but cannot be upgraded
-        for missed in updates:
-            self._emit_package(self._cache[missed], INFO_BLOCKED)
         self._cache.clear()
 
     def get_update_detail(self, pkg_ids):
commit ceba92a429689a8772e7f326b4f343537d6dc4fe
Author: root <root at hommer.ajato.com.br>
Date:   Mon Aug 10 14:33:24 2009 -0300

    Fix aptcc to compile against 0.5

diff --git a/backends/aptcc/pk-backend-aptcc.cpp b/backends/aptcc/pk-backend-aptcc.cpp
index 96e9326..8381dc1 100644
--- a/backends/aptcc/pk-backend-aptcc.cpp
+++ b/backends/aptcc/pk-backend-aptcc.cpp
@@ -433,7 +433,7 @@ backend_update_system_thread (PkBackend *backend)
  * backend_update_system:
  */
 static void
-backend_update_system (PkBackend *backend)
+backend_update_system (PkBackend *backend, gboolean only_trusted)
 {
 	pk_backend_thread_create (backend, backend_update_system_thread);
 }
commit bfa840eacacfc345469d59d27952e803024acdfb
Author: Mounir Lamouri (volkmar) <mounir.lamouri at gmail.com>
Date:   Tue Aug 4 19:49:40 2009 +0200

    trivial: use DBUS_SYS_DIR instead of hard-written value

diff --git a/data/Makefile.am b/data/Makefile.am
index b6815cc..391fb90 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -19,7 +19,7 @@ mime_in_files = 					\
 	$(NULL)						
 mime_DATA = $(mime_in_files:.xml.in=.xml)
 
-dbusdir = ${SYSCONFDIR}/dbus-1/system.d
+dbusdir = ${DBUS_SYS_DIR}
 dist_dbus_DATA = 					\
 	org.freedesktop.PackageKit.conf			\
 	$(NULL)


More information about the PackageKit-commit mailing list