[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