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

Richard Hughes hughsient at kemper.freedesktop.org
Fri Jul 4 05:22:50 PDT 2008


 backends/alpm/pk-backend-alpm.c         |  295 ++++++++++++++++---------------
 backends/pisi/pk-backend-pisi.c         |   25 ++
 backends/poldek/pk-backend-poldek.c     |   69 ++++---
 backends/razor/pk-backend-razor.c       |   44 +++-
 backends/smart/helpers/get-depends.py   |    2 
 backends/smart/helpers/get-details.py   |    2 
 backends/smart/helpers/get-files.py     |    2 
 backends/smart/helpers/smartBackend.py  |  147 +++++++--------
 backends/smart/pk-backend-smart.c       |   20 +-
 backends/yum/helpers/remove-packages.py |    7 
 backends/yum/helpers/yumBackend.py      |   73 +++----
 backends/zypp/zypp-utils.cpp            |   12 -
 client/pk-console.c                     |   71 +++++++
 libpackagekit/pk-client.c               |    7 
 libpackagekit/pk-client.h               |    2 
 libpackagekit/pk-control.c              |    7 
 libpackagekit/pk-task-list.c            |    2 
 libpackagekit/pk-update-detail-list.c   |    2 
 po/pt_BR.po                             |  302 +++++++++++++-------------------
 src/pk-backend-dbus.c                   |    5 
 src/pk-backend.c                        |   11 -
 src/pk-engine.c                         |    2 
 src/pk-interface.xml                    |   11 -
 src/pk-security-polkit.c                |    2 
 src/pk-security.h                       |    4 
 src/pk-transaction.c                    |   10 -
 26 files changed, 631 insertions(+), 505 deletions(-)

New commits:
commit c59ae932e70a8682742aeaf845219105c6cc8a0f
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Jul 4 12:35:30 2008 +0100

    yum: allow more than one package to be removed in one transaction

diff --git a/backends/yum/helpers/remove-packages.py b/backends/yum/helpers/remove-packages.py
index 4bec79c..3825d81 100755
--- a/backends/yum/helpers/remove-packages.py
+++ b/backends/yum/helpers/remove-packages.py
@@ -15,10 +15,9 @@ import sys
 from yumBackend import PackageKitYumBackend
 
 allowdeps = sys.argv[1]
-package = sys.argv[2]
+packages = sys.argv[2:]
 
 backend = PackageKitYumBackend(sys.argv[1:])
-backend.remove_packages(allowdeps, package)
-backend.unLock()
-
+backend.remove_packages(allowdeps, packages)
 sys.exit(0)
+
diff --git a/backends/yum/helpers/yumBackend.py b/backends/yum/helpers/yumBackend.py
index 7b4c167..25b0dde 100644
--- a/backends/yum/helpers/yumBackend.py
+++ b/backends/yum/helpers/yumBackend.py
@@ -1241,7 +1241,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
                 else:
                     self.error(ERROR_TRANSACTION_ERROR,message)
 
-    def remove_packages(self,allowdep,package):
+    def remove_packages(self,allowdep,package_ids):
         '''
         Implement the {backend}-remove functionality
         Needed to be implemented in a sub class
@@ -1251,21 +1251,21 @@ class PackageKitYumBackend(PackageKitBaseBackend):
         self.percentage(0)
         self.status(STATUS_RUNNING)
 
-        pkg,inst = self._findPackage(package)
-        if pkg and inst:
-            try:
+        txmbrs = []
+        for package in package_ids:
+            pkg,inst = self._findPackage(package)
+            if pkg and inst:
                 txmbr = self.yumbase.remove(po=pkg)
-            except yum.Errors.RepoError,e:
-                self.error(ERROR_REPO_NOT_AVAILABLE,str(e))
-            if txmbr:
-                if allowdep != 'yes':
-                    self._runYumTransaction(removedeps=False)
-                else:
-                    self._runYumTransaction(removedeps=True)
+                txmbrs.extend(txmbr)
+            if not inst:
+                self.error(ERROR_PACKAGE_NOT_INSTALLED,"The package %s is not installed" % pkg.name)
+        if txmbrs:
+            if allowdep != 'yes':
+                self._runYumTransaction(removedeps=False)
             else:
-                self.error(ERROR_PACKAGE_NOT_INSTALLED,"Package %s is not installed" % package)
+                self._runYumTransaction(removedeps=True)
         else:
-            self.error(ERROR_PACKAGE_NOT_INSTALLED,"Package %s is not installed" % package)
+            self.error(ERROR_PACKAGE_NOT_INSTALLED,"The packages failed to be removed")
 
     def get_details(self,package_ids):
         '''
commit 0560c248c8df93c227845796062c563d4d5d249c
Author: Shishir Goel <crazyontheedge at gmail.com>
Date:   Fri Jul 4 14:08:46 2008 +0530

    fix up download-packages for the yum backend

diff --git a/backends/yum/helpers/yumBackend.py b/backends/yum/helpers/yumBackend.py
index 4db1621..7b4c167 100644
--- a/backends/yum/helpers/yumBackend.py
+++ b/backends/yum/helpers/yumBackend.py
@@ -630,7 +630,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
                         found[str(pkg)] = 1
 
     @handle_repo_error
-    def download_packages(self,packages,directory):
+    def download_packages(self,directory,packages):
 	'''
 	Implement the {backend}-download-packages functionality
 	'''
@@ -639,28 +639,27 @@ class PackageKitYumBackend(PackageKitBaseBackend):
 	self.percentage(0)
 	self.status(STATUS_DOWNLOAD)
 	for package in packages:
-	    pkg,inst = self._findPackage(package)
-	    for pkg in packages:
-	        n,a,e,v,r = pkg.pkgtup
-	        packs = self.pkgSack.searchNevra(n,e,v,r,a)
-	        for download in packs:
-	            repo = self.repos.getRepo(download.repoid)
-	            remote = download.returnSimple('relativepath')
-	            local = os.path.basename(remote)
-	            if not os.path.exists(directory):
-	                self.error(ERROR_PACKAGE_DOWNLOAD_FAILED,"No destination directory exists")
-	            local = os.path.join(directory,local)
-	            if(os.path.exists(local) and os.path.getsize(local) == int(download.returnSimple('packagesize'))):
-	                self.error(ERROR_PACKAGE_DOWNLOAD_FAILED,"Package already exists")
-	                continue
-	            # Disable cache otherwise things won't download
-	            repo.cache = 0
-	            download.localpath = local #Hack:To set the localpath we want
-	            try:
-	                path = repo.getPackage(download)
-	            except IOError, e:
-	                self.error(ERROR_WRITE_ERROR,"Cannot write to file")
-	                continue
+	   pkg,inst = self._findPackage(package)
+	   n,a,e,v,r = pkg.pkgtup
+	   packs = self.yumbase.pkgSack.searchNevra(n,e,v,r,a)
+	   for download in packs:
+	      	repo = self.yumbase.repos.getRepo(download.repoid)
+	      	remote = download.returnSimple('relativepath')
+	      	local = os.path.basename(remote)
+	       	if not os.path.exists(directory):
+	              	self.error(ERROR_PACKAGE_DOWNLOAD_FAILED,"No destination directory exists")
+            	local = os.path.join(directory,local)
+            	if(os.path.exists(local) and os.path.getsize(local) == int(download.returnSimple('packagesize'))):
+                	self.error(ERROR_PACKAGE_DOWNLOAD_FAILED,"Package already exists")
+                	continue
+	        # Disable cache otherwise things won't download
+	        repo.cache = 0
+	        download.localpath = local #Hack:To set the localpath we want
+	        try:
+	           path = repo.getPackage(download)
+	        except IOError, e:
+	           self.error(ERROR_WRITE_ERROR,"Cannot write to file")
+	           continue
 
     def _getEVR(self,idver):
         '''
commit 051903fbaf5f8a67fae15f5a7ffdfadc70752886
Author: Igor Pires Soares <igorsoares at gmail.com>
Date:   Fri Jul 4 00:50:44 2008 +0000

    2008-07-04  Igor Pires Soares <igorsoares at gmail.com> (via
    igor at fedoraproject.org)
    
      * po/pt_BR.po: Updated Brazilian Portuguese translation

diff --git a/po/pt_BR.po b/po/pt_BR.po
index e261ac3..fd1b2ce 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PackageKit\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-04-18 21:33+0300\n"
-"PO-Revision-Date: 2008-04-23 23:58-0300\n"
+"POT-Creation-Date: 2008-06-10 17:51+0000\n"
+"PO-Revision-Date: 2008-07-03 21:49-0300\n"
 "Last-Translator: Igor Pires Soares <igor at projetofedora.org>\n"
 "Language-Team: Brazilian Portuguese <fedora-trans-pt_br at redhat.com>\n"
 "MIME-Version: 1.0\n"
@@ -19,339 +19,247 @@ msgstr ""
 "X-Poedit-Language: Portuguese\n"
 "X-Poedit-Country: BRAZIL\n"
 
-#: ../policy/org.freedesktop.packagekit.policy.in.h:1
-msgid "Accept EULA"
-msgstr "Aceitar a licença EULA"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:2
-msgid "Authentication is required to accept a EULA"
-msgstr "É necessário autenticar para aceitar uma licença EULA"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:3
-msgid "Authentication is required to change software source parameters"
-msgstr "É necessário autenticar para alterar os parâmetros das fontes de programas"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:4
-msgid "Authentication is required to install a local file"
-msgstr "É necessário autenticar para instalar um arquivo local"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:5
-msgid "Authentication is required to install a package"
-msgstr "É necessário autenticar para instalar um pacote"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:6
-msgid "Authentication is required to install a security signature"
-msgstr "É necessário autenticar para instalar uma assinatura de segurança"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:7
-msgid "Authentication is required to refresh the package lists"
-msgstr "É necessário autenticar para recarregar a lista de pacotes"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:8
-msgid "Authentication is required to remove packages"
-msgstr "É necessário autenticar para remover pacotes"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:9
-msgid "Authentication is required to rollback a transaction"
-msgstr "É necessário autenticar para retroceder uma transação"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:10
-msgid "Authentication is required to update all packages"
-msgstr "É necessário autenticar para atualizar todos os pacotes"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:11
-msgid "Authentication is required to update packages"
-msgstr "É necessário autenticar para atualizar os pacotes"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:12
-msgid "Change software source parameters"
-msgstr "Altere parâmetros das fontes de programas"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:13
-msgid "Install local file"
-msgstr "Instalar um arquivo local"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:14
-msgid "Install package"
-msgstr "Instalar um pacote"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:15
-msgid "Install security signature"
-msgstr "Instalar uma assinatura de segurança"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:16
-msgid "Refresh package lists"
-msgstr "Recarregar listas de pacotes"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:17
-msgid "Remove package"
-msgstr "Remover pacote"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:18
-msgid "Rollback to a previous transaction"
-msgstr "Retroceder para uma transação anterior"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:19
-msgid "Update all packages"
-msgstr "Atualizar todos os pacotes"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:20
-msgid "Update package"
-msgstr "Atualizar pacote"
-
-#: ../client/pk-console.c:208
+#: ../client/pk-console.c:223
 msgid "Update detail"
 msgstr "Detalhe da atualização"
 
-#: ../client/pk-console.c:400
+#: ../client/pk-console.c:424
 msgid "A system restart is required"
 msgstr "É necessário reiniciar o sistema"
 
-#: ../client/pk-console.c:402
+#: ../client/pk-console.c:426
 msgid "A logout and login is required"
 msgstr "É necessário sair da sessão e autenticar novamente"
 
-#: ../client/pk-console.c:404
+#: ../client/pk-console.c:428
 msgid "An application restart is required"
 msgstr "É necessário reiniciar a aplicação"
 
-#: ../client/pk-console.c:443
+#: ../client/pk-console.c:473
 #, c-format
 msgid "Please enter a number from 1 to %i: "
 msgstr "Por favor, insira um número entre 1 e %i: "
 
-#: ../client/pk-console.c:493
+#: ../client/pk-console.c:533
 msgid "Could not find a package match"
 msgstr "Não foi possível encontrar um pacote correspondente"
 
-#: ../client/pk-console.c:507
+#: ../client/pk-console.c:547
 msgid "There are multiple package matches"
 msgstr "Há múltiplos pacotes correspondentes"
 
 #. find out what package the user wants to use
-#: ../client/pk-console.c:514
+#: ../client/pk-console.c:554
 msgid "Please enter the package number: "
 msgstr "Por favor, insira o número do pacote: "
 
-#: ../client/pk-console.c:530
+#: ../client/pk-console.c:589
 msgid "Could not find a package with that name to install, or package already installed"
 msgstr "Não foi possível encontrar um pacote com esse nome para instalar ou o pacote já está instalado"
 
-#: ../client/pk-console.c:612
-msgid "Could not find a package with that name to remove"
-msgstr "Não foi possível encontrar um pacote com esse nome para remover"
+#: ../client/pk-console.c:737
+msgid "Could not find a package to remove"
+msgstr "Não foi possível localizar um pacote a ser removido"
 
-#: ../client/pk-console.c:652
+#: ../client/pk-console.c:806
 msgid "The following packages have to be removed"
 msgstr "Os seguintes pacotes têm que ser removidos"
 
 #. get user input
-#: ../client/pk-console.c:661
+#: ../client/pk-console.c:815
 msgid "Okay to remove additional packages?"
 msgstr "Os pacotes adicionais podem ser removidos?"
 
-#: ../client/pk-console.c:665
+#: ../client/pk-console.c:819
 msgid "Cancelled!"
 msgstr "Cancelado!"
 
-#: ../client/pk-console.c:687
+#: ../client/pk-console.c:844
 msgid "Could not find a package with that name to update"
 msgstr "Não foi possível encontrar um pacote com esse nome para ser atualizado"
 
-#: ../client/pk-console.c:705
+#: ../client/pk-console.c:862
 msgid "Could not find what packages require this package"
 msgstr "Não foi possível encontrar quais pacotes necessitam desse pacote"
 
-#: ../client/pk-console.c:723
+#: ../client/pk-console.c:880
 msgid "Could not get dependencies for this package"
 msgstr "Não foi possível obter as dependências desse pacote"
 
-#: ../client/pk-console.c:741
-msgid "Could not find a description for this package"
-msgstr "Não foi possível encontrar uma descrição para esse pacote"
+#: ../client/pk-console.c:898
+msgid "Could not find details for this package"
+msgstr "Não foi possível localizar os detalhes deste pacote"
 
-#: ../client/pk-console.c:759
-#, c-format
+#: ../client/pk-console.c:916
 msgid "Could not find the files for this package"
 msgstr "Não foi possível encontrar os arquivos para este pacote"
 
-#: ../client/pk-console.c:819
+#: ../client/pk-console.c:996
 msgid "Package description"
 msgstr "Descrição do pacote"
 
-#: ../client/pk-console.c:842
+#: ../client/pk-console.c:1019
 msgid "Package files"
 msgstr "Arquivos do pacote"
 
-#: ../client/pk-console.c:850
+#: ../client/pk-console.c:1027
 msgid "No files"
 msgstr "Nenhum arquivo"
 
 #. get user input
-#: ../client/pk-console.c:882
+#: ../client/pk-console.c:1059
 msgid "Okay to import key?"
 msgstr "A chave pode ser importada?"
 
-#: ../client/pk-console.c:885
+#: ../client/pk-console.c:1062
 msgid "Did not import key"
 msgstr "Não importar a chave"
 
 #. get user input
-#: ../client/pk-console.c:925
+#: ../client/pk-console.c:1102
 msgid "Do you agree?"
 msgstr "Você concorda?"
 
-#: ../client/pk-console.c:928
+#: ../client/pk-console.c:1105
 msgid "Did not agree to licence, task will fail"
 msgstr "Se você não concordar com a licença a tarefa irá falhar"
 
-#: ../client/pk-console.c:957
+#: ../client/pk-console.c:1134
 msgid "The daemon crashed mid-transaction!"
 msgstr "O daemon travou no meio da transação!"
 
 #. header
-#: ../client/pk-console.c:1010
+#: ../client/pk-console.c:1187
 msgid "PackageKit Console Interface"
 msgstr "Interface em Console do PackageKit"
 
-#: ../client/pk-console.c:1010
+#: ../client/pk-console.c:1187
 msgid "Subcommands:"
 msgstr "Subcomandos:"
 
-#: ../client/pk-console.c:1114
-#: ../client/pk-monitor.c:100
+#: ../client/pk-console.c:1290
+#: ../client/pk-monitor.c:104
 #: ../src/pk-main.c:189
 msgid "Show extra debugging information"
 msgstr "Mostrar informações extras de depuração"
 
-#: ../client/pk-console.c:1116
-#: ../client/pk-monitor.c:102
+#: ../client/pk-console.c:1292
+#: ../client/pk-monitor.c:106
 msgid "Show the program version and exit"
 msgstr "Mostrar a versão do programa e sair"
 
-#: ../client/pk-console.c:1118
+#: ../client/pk-console.c:1294
 msgid "Set the filter, e.g. installed"
 msgstr "Definir o filtro, p. ex.: instalados"
 
-#: ../client/pk-console.c:1120
+#: ../client/pk-console.c:1296
 msgid "Exit without waiting for actions to complete"
 msgstr "Sair sem esperar pelo término das ações"
 
-#: ../client/pk-console.c:1143
+#: ../client/pk-console.c:1319
 msgid "Could not connect to system DBUS."
 msgstr "Não foi possível conectar ao DBUS do sistema."
 
-#: ../client/pk-console.c:1231
-#, c-format
+#: ../client/pk-console.c:1413
 msgid "You need to specify a search type"
 msgstr "Você precisa especificar um tipo de pesquisa"
 
-#: ../client/pk-console.c:1236
-#: ../client/pk-console.c:1243
-#: ../client/pk-console.c:1250
-#: ../client/pk-console.c:1257
-#: ../client/pk-console.c:1361
-#: ../client/pk-console.c:1368
-#: ../client/pk-console.c:1375
-#: ../client/pk-console.c:1382
-#, c-format
+#: ../client/pk-console.c:1418
+#: ../client/pk-console.c:1425
+#: ../client/pk-console.c:1432
+#: ../client/pk-console.c:1439
+#: ../client/pk-console.c:1538
+#: ../client/pk-console.c:1545
+#: ../client/pk-console.c:1552
+#: ../client/pk-console.c:1559
 msgid "You need to specify a search term"
 msgstr "Você precisa especificar um termo de pesquisa"
 
-#: ../client/pk-console.c:1262
-#, c-format
+#: ../client/pk-console.c:1444
 msgid "Invalid search type"
 msgstr "Tipo de pesquisa inválido"
 
-#: ../client/pk-console.c:1267
-#, c-format
+#: ../client/pk-console.c:1449
 msgid "You need to specify a package or file to install"
 msgstr "Você precisa especificar um pacote ou programa a ser instalado"
 
-#: ../client/pk-console.c:1280
-#, c-format
+#: ../client/pk-console.c:1456
 msgid "You need to specify a type, key_id and package_id"
 msgstr "Você precisa especificar um tipo, key_id e package_id"
 
-#: ../client/pk-console.c:1287
-#, c-format
+#: ../client/pk-console.c:1463
 msgid "You need to specify a package to remove"
 msgstr "Você precisa especificar um pacote a ser removido"
 
-#: ../client/pk-console.c:1294
-#, c-format
+#: ../client/pk-console.c:1470
 msgid "You need to specify a eula-id"
 msgstr "Você precisa especificar um eula-id"
 
-#: ../client/pk-console.c:1309
-#, c-format
+#: ../client/pk-console.c:1486
 msgid "You need to specify a package name to resolve"
 msgstr "Você precisa especificar um nome de pacote a ser analisado"
 
-#: ../client/pk-console.c:1316
-#: ../client/pk-console.c:1323
-#, c-format
+#: ../client/pk-console.c:1493
+#: ../client/pk-console.c:1500
 msgid "You need to specify a repo name"
 msgstr "Você precisa especificar um nome de repositório"
 
-#: ../client/pk-console.c:1330
-#, c-format
+#: ../client/pk-console.c:1507
 msgid "You need to specify a repo name/parameter and value"
 msgstr "Você precisa especificar um nome/parâmetro de repositório e um valor"
 
-#: ../client/pk-console.c:1343
-#, c-format
+#: ../client/pk-console.c:1520
 msgid "You need to specify a time term"
 msgstr "Você precisa especificar um termo de horário"
 
-#: ../client/pk-console.c:1348
-#, c-format
+#: ../client/pk-console.c:1525
 msgid "You need to specify a correct role"
 msgstr "Você precisa especificar um papel correto"
 
-#: ../client/pk-console.c:1353
-#, c-format
+#: ../client/pk-console.c:1530
 msgid "Failed to get last time"
 msgstr "Falha ao obter o último horário"
 
-#: ../client/pk-console.c:1389
-#, c-format
-msgid "You need to specify a package to find the description for"
-msgstr "Você precisa especificar o pacote para o qual você deseja localizar a descrição"
+#: ../client/pk-console.c:1566
+msgid "You need to specify a package to find the details for"
+msgstr "Você precisa especificar o pacote para o qual você quer localizar os detalhes"
 
-#: ../client/pk-console.c:1396
-#, c-format
+#: ../client/pk-console.c:1573
 msgid "You need to specify a package to find the files for"
 msgstr "Você precisa especificar o pacote para o qual você quer localizar os arquivos"
 
-#: ../client/pk-console.c:1441
+#: ../client/pk-console.c:1622
 #, c-format
 msgid "Option '%s' not supported"
 msgstr "A opção \"%s\" não é suportada"
 
-#: ../client/pk-console.c:1452
+#: ../client/pk-console.c:1633
 msgid "Command failed"
 msgstr "O comando falhou"
 
-#: ../client/pk-console.c:1456
+#: ../client/pk-console.c:1637
 msgid "You don't have the necessary privileges for this operation"
 msgstr "Você não tem os privilégios necessários para esta operação"
 
-#: ../client/pk-monitor.c:113
-msgid "PackageKit Monitor"
-msgstr "Monitor do PackageKit"
-
-#: ../client/pk-import-desktop.c:283
-#: ../client/pk-import-specspo.c:169
+#: ../client/pk-import-desktop.c:298
+#: ../client/pk-import-specspo.c:173
 #, c-format
 msgid "Could not open database: %s"
 msgstr "Não foi possível abrir o banco de dados: %s"
 
-#: ../client/pk-import-desktop.c:284
-#: ../client/pk-import-specspo.c:170
+#: ../client/pk-import-desktop.c:299
+#: ../client/pk-import-specspo.c:174
 msgid "You probably need to run this program as the root user"
 msgstr "Você provavelmente precisa executar este programa como usuário root"
 
+#: ../client/pk-monitor.c:117
+msgid "PackageKit Monitor"
+msgstr "Monitor do PackageKit"
+
+#: ../data/packagekit-catalog.xml.in.h:1
+msgid "PackageKit Catalog"
+msgstr "Catálogo do PackageKit"
+
 #: ../src/pk-main.c:83
 msgid "Startup failed due to security policies on this machine."
 msgstr "A inicialização falhou devido à políticas de segurança desta máquina"
@@ -405,3 +313,51 @@ msgstr "Não foi possível conectar ao barramento do sistema"
 msgid "Error trying to start: %s\n"
 msgstr "Erro ao tentar iniciar: %s\n"
 
+#~ msgid "Accept EULA"
+#~ msgstr "Aceitar a licença EULA"
+#~ msgid "Authentication is required to accept a EULA"
+#~ msgstr "É necessário autenticar para aceitar uma licença EULA"
+#~ msgid "Authentication is required to change software source parameters"
+#~ msgstr ""
+#~ "É necessário autenticar para alterar os parâmetros das fontes de programas"
+#~ msgid "Authentication is required to install a local file"
+#~ msgstr "É necessário autenticar para instalar um arquivo local"
+#~ msgid "Authentication is required to install a package"
+#~ msgstr "É necessário autenticar para instalar um pacote"
+#~ msgid "Authentication is required to install a security signature"
+#~ msgstr "É necessário autenticar para instalar uma assinatura de segurança"
+#~ msgid "Authentication is required to refresh the package lists"
+#~ msgstr "É necessário autenticar para recarregar a lista de pacotes"
+#~ msgid "Authentication is required to remove packages"
+#~ msgstr "É necessário autenticar para remover pacotes"
+#~ msgid "Authentication is required to rollback a transaction"
+#~ msgstr "É necessário autenticar para retroceder uma transação"
+#~ msgid "Authentication is required to update all packages"
+#~ msgstr "É necessário autenticar para atualizar todos os pacotes"
+#~ msgid "Authentication is required to update packages"
+#~ msgstr "É necessário autenticar para atualizar os pacotes"
+#~ msgid "Change software source parameters"
+#~ msgstr "Altere parâmetros das fontes de programas"
+#~ msgid "Install local file"
+#~ msgstr "Instalar um arquivo local"
+#~ msgid "Install package"
+#~ msgstr "Instalar um pacote"
+#~ msgid "Install security signature"
+#~ msgstr "Instalar uma assinatura de segurança"
+#~ msgid "Refresh package lists"
+#~ msgstr "Recarregar listas de pacotes"
+#~ msgid "Remove package"
+#~ msgstr "Remover pacote"
+#~ msgid "Rollback to a previous transaction"
+#~ msgstr "Retroceder para uma transação anterior"
+#~ msgid "Update all packages"
+#~ msgstr "Atualizar todos os pacotes"
+#~ msgid "Update package"
+#~ msgstr "Atualizar pacote"
+#~ msgid "Could not find a description for this package"
+#~ msgstr "Não foi possível encontrar uma descrição para esse pacote"
+#~ msgid "You need to specify a package to find the description for"
+#~ msgstr ""
+#~ "Você precisa especificar o pacote para o qual você deseja localizar a "
+#~ "descrição"
+
commit 01ebb3a42b61bcdf2974cfab34b747619b49cacc
Merge: bb13883... a5ae220...
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date:   Thu Jul 3 20:24:17 2008 +0200

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

commit bb1388304b42bb67d4172de39cc11c3e91c208cf
Author: Anders F Bjorklund <afb at users.sourceforge.net>
Date:   Thu Jul 3 20:22:33 2008 +0200

    change packageid to packageids (plural)

diff --git a/backends/smart/helpers/get-depends.py b/backends/smart/helpers/get-depends.py
index bba29b7..635b1a1 100755
--- a/backends/smart/helpers/get-depends.py
+++ b/backends/smart/helpers/get-depends.py
@@ -15,5 +15,5 @@ import sys
 from smartBackend import PackageKitSmartBackend
 package = sys.argv[1]
 backend = PackageKitSmartBackend(sys.argv[1:])
-backend.get_depends(package)
+backend.get_depends(package.split('|'))
 sys.exit(0)
diff --git a/backends/smart/helpers/get-details.py b/backends/smart/helpers/get-details.py
index 6ef43b5..065d72b 100755
--- a/backends/smart/helpers/get-details.py
+++ b/backends/smart/helpers/get-details.py
@@ -16,5 +16,5 @@ from smartBackend import PackageKitSmartBackend
 
 package = sys.argv[1]
 backend = PackageKitSmartBackend(sys.argv[1:])
-backend.get_details(package)
+backend.get_details(package.split('|'))
 sys.exit(0)
diff --git a/backends/smart/helpers/get-files.py b/backends/smart/helpers/get-files.py
index b4d2d26..1b25134 100755
--- a/backends/smart/helpers/get-files.py
+++ b/backends/smart/helpers/get-files.py
@@ -15,5 +15,5 @@ import sys
 from smartBackend import PackageKitSmartBackend
 package = sys.argv[1]
 backend = PackageKitSmartBackend(sys.argv[1:])
-backend.get_files(package)
+backend.get_files(package.split('|'))
 sys.exit(0)
diff --git a/backends/smart/helpers/smartBackend.py b/backends/smart/helpers/smartBackend.py
index 20f1836..aeac569 100644
--- a/backends/smart/helpers/smartBackend.py
+++ b/backends/smart/helpers/smartBackend.py
@@ -176,90 +176,93 @@ class PackageKitSmartBackend(PackageKitBaseBackend):
         self.ctrl.saveSysConf()
 
     @needs_cache
-    def get_details(self, packageid):
-        ratio, results, suggestions = self._search_packageid(packageid)
-
-        packages = self._process_search_results(results)
-
-        if len(packages) != 1:
-            return
-
-        package = packages[0]
-        infos = []
-        for loader in package.loaders:
-            info = loader.getInfo(package)
-            infos.append(info)
-
-        infos.sort()
-        info = infos[0]
-
-        version, arch = package.version.split('@')
-        description = info.GetDetails()
-        description = description.replace("\n\n", ";")
-        description = description.replace("\n", " ")
-        urls = info.getReferenceURLs()
-        if urls:
-            url = urls[0]
-        else:
-            url = "unknown"
-
-        pkgsize = None
-        seen = {}
-        for loader in package.loaders:
-            info = loader.getInfo(package)
-            for pkgurl in info.getURLs():
-                size = info.getSize(pkgurl)
-                if size:
-                    pkgsize = size
+    def get_details(self, packageids):
+        for packageid in packageids:
+            ratio, results, suggestions = self._search_packageid(packageid)
+
+            packages = self._process_search_results(results)
+
+            if len(packages) != 1:
+                return
+
+            package = packages[0]
+            infos = []
+            for loader in package.loaders:
+                info = loader.getInfo(package)
+                infos.append(info)
+
+            infos.sort()
+            info = infos[0]
+
+            version, arch = package.version.split('@')
+            description = info.GetDetails()
+            description = description.replace("\n\n", ";")
+            description = description.replace("\n", " ")
+            urls = info.getReferenceURLs()
+            if urls:
+                url = urls[0]
+            else:
+                url = "unknown"
+
+            pkgsize = None
+            seen = {}
+            for loader in package.loaders:
+                info = loader.getInfo(package)
+                for pkgurl in info.getURLs():
+                    size = info.getSize(pkgurl)
+                    if size:
+                        pkgsize = size
+                        break
+                if pkgsize:
                     break
-            if pkgsize:
-                break
-        if not pkgsize:
-            pkgsize = "unknown"
+            if not pkgsize:
+                pkgsize = "unknown"
 
-        self.details(packageid, "unknown", "unknown", description, url,
-                pkgsize)
+            self.details(packageid, "unknown", "unknown", description, url,
+                    pkgsize)
 
     @needs_cache
-    def get_files(self, packageid):
-        ratio, results, suggestions = self._search_packageid(packageid)
-
-        packages = self._process_search_results(results)
-
-        if len(packages) != 1:
-            return
-
-        package = packages[0]
-        # FIXME: Only installed packages have path lists.
-        paths = []
-        for loader in package.loaders:
-            info = loader.getInfo(package)
-            paths = info.getPathList()
-            if len(paths) > 0:
-                break
+    def get_files(self, packageids):
+        for packageid in packageids:
+            ratio, results, suggestions = self._search_packageid(packageid)
+
+            packages = self._process_search_results(results)
+
+            if len(packages) != 1:
+                return
+
+            package = packages[0]
+            # FIXME: Only installed packages have path lists.
+            paths = []
+            for loader in package.loaders:
+                info = loader.getInfo(package)
+                paths = info.getPathList()
+                if len(paths) > 0:
+                    break
 
-        self.files(packageid, ";".join(paths))
+            self.files(packageid, ";".join(paths))
 
     @needs_cache
-    def get_depends(self, packageid):
-        ratio, results, suggestions = self._search_packageid(packageid)
+    def get_depends(self, packageids):
+        for packageid in packageids:
+            ratio, results, suggestions = self._search_packageid(packageid)
 
-        packages = self._process_search_results(results)
+            packages = self._process_search_results(results)
 
-        if len(packages) != 1:
-            return
+            if len(packages) != 1:
+                return
 
-        package = packages[0]
+            package = packages[0]
 
-        providers = {}
-        for required in package.requires:
-            for provider in self.ctrl.getCache().getProvides(str(required)):
-                for package in provider.packages:
-                    if not providers.has_key(package):
-                        providers[package] = True
+            providers = {}
+            for required in package.requires:
+                for provider in self.ctrl.getCache().getProvides(str(required)):
+                    for package in provider.packages:
+                        if not providers.has_key(package):
+                            providers[package] = True
 
-        for package in providers.keys():
-            self._show_package(package)
+            for package in providers.keys():
+                self._show_package(package)
 
     def get_repo_list(self, filters):
         channels = smart.sysconf.get("channels", ())
diff --git a/backends/smart/pk-backend-smart.c b/backends/smart/pk-backend-smart.c
index c67612f..950208c 100644
--- a/backends/smart/pk-backend-smart.c
+++ b/backends/smart/pk-backend-smart.c
@@ -57,10 +57,13 @@ static void
 backend_get_depends (PkBackend *backend, PkFilterEnum filters, gchar **package_ids, gboolean recursive)
 {
 	gchar *filters_text;
+	gchar *package_ids_temp;
 	/* FIXME: Use recursive and filter here */
 	filters_text = pk_filter_enums_to_text (filters);
-	pk_backend_spawn_helper (spawn, "get-depends.py", package_id, NULL);
+	package_ids_temp = pk_package_ids_to_text (package_ids, "|");
+	pk_backend_spawn_helper (spawn, "get-depends.py", package_ids_temp, NULL);
 	g_free (filters_text);
+	g_free (package_ids_temp);
 }
 
 /**
@@ -69,7 +72,10 @@ backend_get_depends (PkBackend *backend, PkFilterEnum filters, gchar **package_i
 static void
 backend_get_details (PkBackend *backend, gchar **package_ids)
 {
-	pk_backend_spawn_helper (spawn, "get-details.py", package_id, NULL);
+	gchar *package_ids_temp;
+	package_ids_temp = pk_package_ids_to_text (package_ids, "|");
+	pk_backend_spawn_helper (spawn, "get-details.py", package_ids_temp, NULL);
+	g_free (package_ids_temp);
 }
 
 /**
@@ -78,7 +84,10 @@ backend_get_details (PkBackend *backend, gchar **package_ids)
 static void
 backend_get_files (PkBackend *backend, gchar **package_ids)
 {
-	pk_backend_spawn_helper (spawn, "get-files.py", package_id, NULL);
+	gchar *package_ids_temp;
+	package_ids_temp = pk_package_ids_to_text (package_ids, "|");
+	pk_backend_spawn_helper (spawn, "get-files.py", package_ids_temp, NULL);
+	g_free (package_ids_temp);
 }
 
 /**
@@ -178,9 +187,12 @@ static void
 backend_resolve (PkBackend *backend, PkFilterEnum filters, gchar **package_ids)
 {
 	gchar *filters_text;
+	gchar *package_ids_temp;
 	filters_text = pk_filter_enums_to_text (filters);
-	pk_backend_spawn_helper (spawn, "resolve.py", filters_text, package_id, NULL);
+	package_ids_temp = pk_package_ids_to_text (package_ids, "|");
+	pk_backend_spawn_helper (spawn, "resolve.py", filters_text, package_ids_temp, NULL);
 	g_free (filters_text);
+	g_free (package_ids_temp);
 }
 
 /**
commit a5ae220104d12e18233c1526fb910674b35222fc
Author: Shishir Goel <crazyontheedge at gmail.com>
Date:   Thu Jul 3 19:00:12 2008 +0530

    remove the check for client permissions on download-packages

diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index 5f8affb..a47df87 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -1218,7 +1218,6 @@ pk_transaction_download_packages (PkTransaction *transaction, gchar **package_id
 {
 	gboolean ret;
 	GError *error;
-	gchar *sender;
 	gchar *package_ids_temp;
 
 	g_return_if_fail (PK_IS_TRANSACTION (transaction));
@@ -1246,15 +1245,6 @@ pk_transaction_download_packages (PkTransaction *transaction, gchar **package_id
 	        return;
 	}
 
-	/* check if the action is allowed from this client - if not, set an error */
-	sender = dbus_g_method_get_sender (context);
-	ret = pk_transaction_action_is_allowed (transaction, sender, FALSE, PK_ROLE_ENUM_DOWNLOAD_PACKAGES, &error);
-	g_free (sender);
-	if  (!ret) {
-	        dbus_g_method_return_error (context, error);
-	        return;
-	}
-
 	/* set the dbus name, so we can get the disconnect */
 	pk_transaction_set_dbus_name (transaction, dbus_g_method_get_sender (context));
 
commit 85c1279953f561ef673c9d6c540d6535b1efbdcd
Author: Shishir Goel <crazyontheedge at gmail.com>
Date:   Thu Jul 3 18:12:22 2008 +0530

    change mode for yum/helpers/download-packages.py

diff --git a/backends/yum/helpers/download-packages.py b/backends/yum/helpers/download-packages.py
old mode 100644
new mode 100755
commit 2fa1c44b6e672186ff0f938fb28c42ef977e88be
Author: Shishir Goel <crazyontheedge at gmail.com>
Date:   Thu Jul 3 16:24:19 2008 +0530

    Added download packages functionality to pkcon

diff --git a/client/pk-console.c b/client/pk-console.c
index 973450a..23b70ae 100644
--- a/client/pk-console.c
+++ b/client/pk-console.c
@@ -108,7 +108,7 @@ pk_console_start_bar (const gchar *text)
 {
 	gchar *text_pad;
 
-	/* make these all the same lenght */
+	/* make these all the same length */
 	text_pad = pk_strpad (text, 50);
 	g_print ("%s", text_pad);
 	g_free (text_pad);
@@ -811,6 +811,64 @@ out:
 }
 
 /**
+ * pk_console_download_packages:
+ **/
+static gboolean
+pk_console_download_packages (PkClient *client, gchar **packages, const gchar *directory, GError **error)
+{
+	gboolean ret = TRUE;
+	gchar *package_id = NULL;
+	gchar **package_ids = NULL;
+	guint i;
+	guint length;
+	GPtrArray *array_packages;
+
+
+	array_packages = g_ptr_array_new ();
+	length = g_strv_length (packages);
+	for (i=2; i<length; i++) {
+			package_id = pk_console_perhaps_resolve (client, PK_FILTER_ENUM_NONE, packages[i], error);
+			if (package_id == NULL) {
+				g_print ("%s\n", _("Could not find a package to download"));
+				ret = FALSE;
+				break;
+			}
+			g_ptr_array_add (array_packages, package_id);
+		}
+	
+	/* one of the resolves failed */
+	if (!ret) {
+		pk_warning ("resolve failed");
+		goto out;
+	}
+
+
+	/* any to process? */
+	if (array_packages->len > 0) {
+		/* convert to strv */
+		package_ids = pk_ptr_array_to_argv (array_packages);
+
+		/* reset */
+		ret = pk_client_reset (client, error);
+		if (!ret) {
+			pk_warning ("failed to reset");
+			goto out;
+		}
+
+		ret = pk_client_download_packages (client, package_ids, directory, error);
+		if (!ret) {
+			pk_warning ("failed to download the packages");
+			goto out;
+		}
+	}
+
+out:
+	g_strfreev (package_ids);
+	g_ptr_array_free (array_packages, TRUE);
+	return ret;
+}
+
+/**
  * pk_console_update_package:
  **/
 static gboolean
@@ -1199,6 +1257,9 @@ pk_console_get_summary (PkRoleEnum roles)
 	    pk_enums_contain (roles, PK_ROLE_ENUM_INSTALL_FILES)) {
 		g_string_append_printf (string, "  %s\n", "install [packages|files]");
 	}
+	if (pk_enums_contain (roles, PK_ROLE_ENUM_DOWNLOAD_PACKAGES)) {
+		g_string_append_printf (string, "  %s\n", "download [packages] [directory]");
+	}
 	if (pk_enums_contain (roles, PK_ROLE_ENUM_INSTALL_SIGNATURE)) {
 		g_string_append_printf (string, "  %s\n", "install-sig [type] [key_id] [package_id]");
 	}
@@ -1276,6 +1337,7 @@ main (int argc, char *argv[])
 	const gchar *value = NULL;
 	const gchar *details = NULL;
 	const gchar *parameter = NULL;
+	const gchar *directory = "/tmp";
 	PkGroupEnum groups;
 	gchar *text;
 	ret = FALSE;
@@ -1461,7 +1523,12 @@ main (int argc, char *argv[])
 			goto out;
 		}
 		ret = pk_console_remove_packages (client, argv, &error);
-
+	} else if (strcmp (mode, "download") == 0) {
+		if (value == NULL || directory == NULL) {
+			g_print (_("You need to specify the package to download and the destination directory"));
+			goto out;
+		}
+		ret = pk_console_download_packages (client, argv, directory, &error);
 	} else if (strcmp (mode, "accept-eula") == 0) {
 		if (value == NULL) {
 			g_print (_("You need to specify a eula-id"));
diff --git a/libpackagekit/pk-client.h b/libpackagekit/pk-client.h
index 24e680d..c4a4d4e 100644
--- a/libpackagekit/pk-client.h
+++ b/libpackagekit/pk-client.h
@@ -189,7 +189,7 @@ gboolean	 pk_client_get_package			(PkClient	*client,
 gboolean	 pk_client_cancel			(PkClient	*client,
 							 GError		**error)
 							 G_GNUC_WARN_UNUSED_RESULT;
-gboolean	 pk_download_packages			(PkClient	*client,
+gboolean	 pk_client_download_packages		(PkClient	*client,
 							 gchar		**package_ids,
 							 const gchar	*directory,
 							 GError		**error)
commit 8a88eaabce391f332bbbf182b531d65590b294b8
Merge: a3322aa... 0220b60...
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Jul 3 10:36:55 2008 +0100

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

commit a3322aa3253909105a62724783e92142d7c511a4
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Jul 3 10:36:27 2008 +0100

    detect the download-packages role and export it in the action list

diff --git a/src/pk-backend.c b/src/pk-backend.c
index d2f78fe..4b5d2c5 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -219,6 +219,9 @@ pk_backend_get_actions (PkBackend *backend)
 	if (desc->remove_packages != NULL) {
 		pk_enums_add (roles, PK_ROLE_ENUM_REMOVE_PACKAGES);
 	}
+	if (desc->download_packages != NULL) {
+		pk_enums_add (roles, PK_ROLE_ENUM_DOWNLOAD_PACKAGES);
+	}
 	if (desc->resolve != NULL) {
 		pk_enums_add (roles, PK_ROLE_ENUM_RESOLVE);
 	}
commit 0220b60d5600d9a95a8548a99b6286a759db289a
Merge: 0687382... 212306a...
Author: Valeriy Lyasotskiy <onestep at ukr.net>
Date:   Thu Jul 3 11:36:51 2008 +0300

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

commit 068738220854db9b7f12da4adf70be52b437d657
Author: Valeriy Lyasotskiy <onestep at ukr.net>
Date:   Thu Jul 3 11:35:25 2008 +0300

    alpm: fix build for PK 0.3.0

diff --git a/backends/alpm/pk-backend-alpm.c b/backends/alpm/pk-backend-alpm.c
index 49fc22d..52e905e 100644
--- a/backends/alpm/pk-backend-alpm.c
+++ b/backends/alpm/pk-backend-alpm.c
@@ -880,10 +880,10 @@ backend_get_filters (PkBackend *backend)
 }
 
 /**
- * backend_get_cancel:
+ * backend_cancel:
  **/
 static void
-backend_get_cancel (PkBackend *backend)
+backend_cancel (PkBackend *backend)
 {
 	pk_backend_set_status (backend, PK_STATUS_ENUM_CANCEL);
 }
@@ -892,62 +892,65 @@ backend_get_cancel (PkBackend *backend)
  * backend_get_depends:
  */
 static void
-backend_get_depends (PkBackend *backend, PkFilterEnum filters, const gchar *package_id, gboolean recursive)
+backend_get_depends (PkBackend *backend, PkFilterEnum filters, gchar **package_ids, gboolean recursive)
 {
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 	pk_backend_set_allow_cancel (backend, FALSE);
 
-	pmpkg_t *pkg = pkg_from_package_id_str (package_id);
-	if (pkg == NULL) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, alpm_strerrorlast ());
-		pk_backend_finished (backend);
-		return;
-	}
+	int iterator;
+	for (iterator = 0; iterator < g_strv_length (package_ids); ++iterator) {
+		pmpkg_t *pkg = pkg_from_package_id_str (package_ids[iterator]);
+		if (pkg == NULL) {
+			pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, alpm_strerrorlast ());
+			pk_backend_finished (backend);
+			return;
+		}
 
-	pk_debug ("alpm: filters is: %i", filters);
+		pk_debug ("alpm: filters is: %i", filters);
 
-	alpm_list_t *iterator;
-	for (iterator = alpm_pkg_get_depends (pkg); iterator; iterator = alpm_list_next (iterator)) {
-		pmdepend_t *dep = alpm_list_getdata (iterator);
-		pmpkg_t *dep_pkg;
-		gboolean found = FALSE;
+		alpm_list_t *list_iterator;
+		for (list_iterator = alpm_pkg_get_depends (pkg); list_iterator; list_iterator = alpm_list_next (list_iterator)) {
+			pmdepend_t *dep = alpm_list_getdata (list_iterator);
+			pmpkg_t *dep_pkg;
+			gboolean found = FALSE;
 
-		if (!pk_enums_contain (filters, PK_FILTER_ENUM_INSTALLED)) {
-			/* search in sync dbs */
-			alpm_list_t *db_iterator;
-			for (db_iterator = alpm_option_get_syncdbs (); found == FALSE && db_iterator; db_iterator = alpm_list_next (db_iterator)) {
-				pmdb_t *syncdb = alpm_list_getdata (db_iterator);
+			if (!pk_enums_contain (filters, PK_FILTER_ENUM_INSTALLED)) {
+				/* search in sync dbs */
+				alpm_list_t *db_iterator;
+				for (db_iterator = alpm_option_get_syncdbs (); found == FALSE && db_iterator; db_iterator = alpm_list_next (db_iterator)) {
+					pmdb_t *syncdb = alpm_list_getdata (db_iterator);
+
+					pk_debug ("alpm: searching for %s in %s", alpm_dep_get_name (dep), alpm_db_get_name (syncdb));
 
-				pk_debug ("alpm: searching for %s in %s", alpm_dep_get_name (dep), alpm_db_get_name (syncdb));
+					dep_pkg = alpm_db_get_pkg (syncdb, alpm_dep_get_name (dep));
+					if (dep_pkg && alpm_depcmp (dep_pkg, dep)) {
+						found = TRUE;
+						gchar *dep_package_id_str = pkg_to_package_id_str (dep_pkg, alpm_db_get_name (syncdb));
+						pk_backend_package (backend, PK_INFO_ENUM_AVAILABLE, dep_package_id_str, alpm_pkg_get_desc (dep_pkg));
+						g_free (dep_package_id_str);
+					}
+				}
+			}
 
-				dep_pkg = alpm_db_get_pkg (syncdb, alpm_dep_get_name (dep));
+			if (!pk_enums_contain (filters, PK_FILTER_ENUM_NOT_INSTALLED)) {
+				pk_debug ("alpm: searching for %s in local db", alpm_dep_get_name (dep));
+
+				/* search in local db */
+				dep_pkg = alpm_db_get_pkg (alpm_option_get_localdb (), alpm_dep_get_name (dep));
 				if (dep_pkg && alpm_depcmp (dep_pkg, dep)) {
 					found = TRUE;
-					gchar *dep_package_id_str = pkg_to_package_id_str (dep_pkg, alpm_db_get_name (syncdb));
-					pk_backend_package (backend, PK_INFO_ENUM_AVAILABLE, dep_package_id_str, alpm_pkg_get_desc (dep_pkg));
+					gchar *dep_package_id_str = pkg_to_package_id_str (dep_pkg, ALPM_LOCAL_DB_ALIAS);
+					pk_backend_package (backend, PK_INFO_ENUM_INSTALLED, dep_package_id_str, alpm_pkg_get_desc (dep_pkg));
 					g_free (dep_package_id_str);
 				}
 			}
-		}
 
-		if (!pk_enums_contain (filters, PK_FILTER_ENUM_NOT_INSTALLED)) {
-			pk_debug ("alpm: searching for %s in local db", alpm_dep_get_name (dep));
-
-			/* search in local db */
-			dep_pkg = alpm_db_get_pkg (alpm_option_get_localdb (), alpm_dep_get_name (dep));
-			if (dep_pkg && alpm_depcmp (dep_pkg, dep)) {
-				found = TRUE;
-				gchar *dep_package_id_str = pkg_to_package_id_str (dep_pkg, ALPM_LOCAL_DB_ALIAS);
-				pk_backend_package (backend, PK_INFO_ENUM_INSTALLED, dep_package_id_str, alpm_pkg_get_desc (dep_pkg));
-				g_free (dep_package_id_str);
+			if (found == FALSE) {
+				pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, alpm_strerrorlast ());
+				pk_backend_finished (backend);
+				return;
 			}
 		}
-
-		if (found == FALSE) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, alpm_strerrorlast ());
-			pk_backend_finished (backend);
-			return;
-		}
 	}
 
 	pk_backend_finished (backend);
@@ -962,30 +965,40 @@ backend_get_details (PkBackend *backend, gchar **package_ids)
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 	pk_backend_set_allow_cancel (backend, FALSE);
 
-	pmpkg_t *pkg = pkg_from_package_id_str (package_id);
-	if (pkg == NULL) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, alpm_strerrorlast ());
-		pk_backend_finished (backend);
-		return;
-	}
+	int iterator;
+	for (iterator = 0; iterator < g_strv_length (package_ids); ++iterator) {
+		pmpkg_t *pkg = pkg_from_package_id_str (package_ids[iterator]);
+		if (pkg == NULL) {
+			pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, alpm_strerrorlast ());
+			pk_backend_finished (backend);
+			return;
+		}
 
-	GString *licenses_str;
-	alpm_list_t *licenses_list = alpm_pkg_get_licenses (pkg);
-	if (licenses_list == NULL)
-		licenses_str = g_string_new ("unknown");
-	else {
-		licenses_str = g_string_new ("");
-		alpm_list_t *iterator;
-		for (iterator = licenses_list; iterator; iterator = alpm_list_next (iterator)) {
-			if (iterator != licenses_list)
-				g_string_append (licenses_str, ", ");
-			g_string_append (licenses_str, (char *) alpm_list_getdata (iterator));
+		GString *licenses_str;
+
+		alpm_list_t *licenses_list = alpm_pkg_get_licenses (pkg);
+		if (licenses_list == NULL)
+			licenses_str = g_string_new ("unknown");
+		else {
+			licenses_str = g_string_new ("");
+			alpm_list_t *list_iterator;
+			for (list_iterator = licenses_list; list_iterator; list_iterator = alpm_list_next (list_iterator)) {
+				if (list_iterator != licenses_list)
+					g_string_append (licenses_str, ", ");
+				g_string_append (licenses_str, (char *) alpm_list_getdata (list_iterator));
+			}
 		}
+
+		// get licenses_str content to licenses array
+		gchar *licenses = g_string_free (licenses_str, FALSE);
+
+		// return details
+		pk_backend_details (backend, package_ids[iterator], licenses, PK_GROUP_ENUM_OTHER, alpm_pkg_get_desc (pkg), alpm_pkg_get_url(pkg), alpm_pkg_get_size (pkg));
+
+		// free licenses array as we no longer need it
+		g_free (licenses);
 	}
-	gchar *licenses = g_string_free (licenses_str, FALSE);
 
-	pk_backend_details (backend, package_id, licenses, PK_GROUP_ENUM_OTHER, alpm_pkg_get_desc (pkg), alpm_pkg_get_url(pkg), alpm_pkg_get_size (pkg));
-	g_free (licenses);
 	pk_backend_finished (backend);
 }
 
@@ -998,27 +1011,32 @@ backend_get_files (PkBackend *backend, gchar **package_ids)
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 	pk_backend_set_allow_cancel (backend, FALSE);
 
-	pmpkg_t *pkg = pkg_from_package_id_str (package_id);
-	if (pkg == NULL) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, alpm_strerrorlast ());
-		pk_backend_finished (backend);
-		return;
-	}
+	int iterator;
+	for (iterator = 0; iterator < g_strv_length (package_ids); ++iterator) {
+		pmpkg_t *pkg = pkg_from_package_id_str (package_ids[iterator]);
 
-	GString *files_str = g_string_new ("");
-	alpm_list_t *pkg_files = alpm_pkg_get_files (pkg);
-	if (pkg_files != NULL) {
-		alpm_list_t *iterator;
-		for (iterator = pkg_files; iterator; iterator = alpm_list_next (iterator)) {
-			if (iterator != pkg_files)
-				g_string_append (files_str, ";");
-			g_string_append (files_str, alpm_option_get_root ());
-			g_string_append (files_str, (char *) alpm_list_getdata (iterator));
+		if (pkg == NULL) {
+			pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, alpm_strerrorlast ());
+			pk_backend_finished (backend);
+			return;
 		}
+
+		GString *files_str = g_string_new ("");
+		alpm_list_t *pkg_files = alpm_pkg_get_files (pkg);
+		if (pkg_files != NULL) {
+			alpm_list_t *list_iterator;
+			for (list_iterator = pkg_files; list_iterator; list_iterator = alpm_list_next (list_iterator)) {
+				if (list_iterator != pkg_files)
+					g_string_append (files_str, ";");
+				g_string_append (files_str, alpm_option_get_root ());
+				g_string_append (files_str, (char *) alpm_list_getdata (list_iterator));
+			}
+		}
+		gchar *files = g_string_free (files_str, FALSE);
+
+		pk_backend_files (backend, package_ids[iterator], files);
 	}
-	gchar *files = g_string_free (files_str, FALSE);
 
-	pk_backend_files (backend, package_id, files);
 	pk_backend_finished (backend);
 }
 
@@ -1079,20 +1097,23 @@ backend_get_repo_list (PkBackend *backend, PkFilterEnum filters)
 }
 
 static void
-backend_get_update_detail (PkBackend *backend, const gchar *package_id)
+backend_get_update_detail (PkBackend *backend, gchar **package_ids)
 {
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 	pk_backend_set_allow_cancel (backend, FALSE);
 
-	// TODO: add changelog code here
-	PkPackageId *pk_package_id = pk_package_id_new_from_string (package_id);
+	int iterator;
+	for (iterator = 0; iterator < g_strv_length (package_ids); ++iterator) {
+		// TODO: add changelog code here
+		PkPackageId *pk_package_id = pk_package_id_new_from_string (package_ids[iterator]);
 
-	pmpkg_t *obsolete_pkg = alpm_db_get_pkg (alpm_option_get_localdb (), pk_package_id->name);
+		pmpkg_t *installed_pkg = alpm_db_get_pkg (alpm_option_get_localdb (), pk_package_id->name);
 
-	gchar *obsolete_package_id = obsolete_pkg ? pkg_to_package_id_str (obsolete_pkg, ALPM_LOCAL_DB_ALIAS) : NULL;
-	pk_backend_update_detail (backend, package_id, obsolete_package_id, "", "", "", "", PK_RESTART_ENUM_NONE,
-		obsolete_pkg ? "Update to latest available version" : "Install as a dependency for another update");
-	g_free (obsolete_package_id);
+		gchar *installed_package_id = installed_pkg ? pkg_to_package_id_str (installed_pkg, ALPM_LOCAL_DB_ALIAS) : NULL;
+		pk_backend_update_detail (backend, package_ids[iterator], installed_package_id, "", "", "", "", PK_RESTART_ENUM_NONE,
+			installed_pkg ? "Update to latest available version" : "Install as a dependency for another update");
+		g_free (installed_package_id);
+	}
 
 	pk_backend_finished (backend);
 }
@@ -1401,31 +1422,34 @@ backend_remove_packages (PkBackend *backend, gchar **package_ids, gboolean allow
  * backend_resolve:
  */
 static void
-backend_resolve (PkBackend *backend, PkFilterEnum filters, const gchar *package)
+backend_resolve (PkBackend *backend, PkFilterEnum filters, gchar **packages)
 {
 	alpm_list_t *result = NULL;
 
 	pk_backend_set_status (backend, PK_STATUS_ENUM_QUERY);
 
-	gboolean search_installed = pk_enums_contain (filters, PK_FILTER_ENUM_INSTALLED);
-	gboolean search_not_installed = pk_enums_contain (filters, PK_FILTER_ENUM_NOT_INSTALLED);
+	int iterator;
+	for (iterator = 0; iterator < g_strv_length (packages); ++iterator) {
+		gboolean search_installed = pk_enums_contain (filters, PK_FILTER_ENUM_INSTALLED);
+		gboolean search_not_installed = pk_enums_contain (filters, PK_FILTER_ENUM_NOT_INSTALLED);
 
-	if (!search_not_installed) {
-		// Search in local db
-		result = alpm_list_join (result, find_packages_by_name (package, alpm_option_get_localdb (), TRUE));
-	}
+		if (!search_not_installed) {
+			// Search in local db
+			result = alpm_list_join (result, find_packages_by_name (packages[iterator], alpm_option_get_localdb (), TRUE));
+		}
 
-	if (!search_installed) {
-		// Search in sync dbs
-		alpm_list_t *iterator;
-		for (iterator = alpm_option_get_syncdbs (); iterator; iterator = alpm_list_next (iterator))
-			result = alpm_list_join (result, find_packages_by_name (package, (pmdb_t *) alpm_list_getdata(iterator), TRUE));
-	}
+		if (!search_installed) {
+			// Search in sync dbs
+			alpm_list_t *db_iterator;
+			for (db_iterator = alpm_option_get_syncdbs (); db_iterator; db_iterator = alpm_list_next (db_iterator))
+				result = alpm_list_join (result, find_packages_by_name (packages[iterator], (pmdb_t *) alpm_list_getdata(db_iterator), TRUE));
+		}
 
-	add_packages_from_list (backend, alpm_list_first (result));
+		add_packages_from_list (backend, alpm_list_first (result));
 
-	alpm_list_free_inner (result, (alpm_list_fn_free) package_source_free);
-	alpm_list_free (result);
+		alpm_list_free_inner (result, (alpm_list_fn_free) package_source_free);
+		alpm_list_free (result);
+	}
 
 	pk_backend_finished (backend);
 }
@@ -1540,37 +1564,38 @@ backend_update_packages (PkBackend *backend, gchar **package_ids)
 }
 
 PK_BACKEND_OPTIONS (
-		"alpm",						/* description */
-		"Andreas Obergrusberger <tradiaz at yahoo.de>",	/* author */
-		backend_initialize,				/* initialize */
-		backend_destroy,				/* destroy */
-		backend_get_groups,				/* get_groups */
-		backend_get_filters,				/* get_filters */
-		backend_get_cancel,				/* cancel */
-		NULL,						/* download_packages */
-		backend_get_depends,				/* get_depends */
-		backend_get_details,				/* get_details */
-		backend_get_files,				/* get_files */
-		backend_get_packages,				/* get_packages */
-		backend_get_repo_list,				/* get_repo_list */
-		NULL,						/* get_requires */
-		backend_get_update_detail,			/* get_update_detail */
-		backend_get_updates,				/* get_updates */
-		backend_install_files,				/* install_files */
-		backend_install_packages,			/* install_packages */
-		NULL,						/* install_signature */
-		backend_refresh_cache,				/* refresh_cache */
-		backend_remove_packages,			/* remove_packages */
-		NULL,						/* repo_enable */
-		NULL,						/* repo_set_data */
-		backend_resolve,				/* resolve */
-		NULL,						/* rollback */
-		backend_search_details,				/* search_details */
-		NULL,						/* search_file */
-		backend_search_group,				/* search_group */
-		backend_search_name,				/* search_name */
-		NULL,						/* service_pack */
-		backend_update_packages,			/* update_packages */
-		NULL,						/* update_system */
-		NULL						/* what_provides */
+	"alpm",						/* description */
+	"Andreas Obergrusberger <tradiaz at yahoo.de>",	/* author */
+	backend_initialize,				/* initialize */
+	backend_destroy,				/* destroy */
+	backend_get_groups,				/* get_groups */
+	backend_get_filters,				/* get_filters */
+	backend_cancel,					/* cancel */
+	NULL,						/* download_packages */
+	backend_get_depends,				/* get_depends */
+	backend_get_details,				/* get_details */
+	backend_get_files,				/* get_files */
+	backend_get_packages,				/* get_packages */
+	backend_get_repo_list,				/* get_repo_list */
+	NULL,						/* get_requires */
+	backend_get_update_detail,			/* get_update_detail */
+	backend_get_updates,				/* get_updates */
+	backend_install_files,				/* install_files */
+	backend_install_packages,			/* install_packages */
+	NULL,						/* install_signature */
+	backend_refresh_cache,				/* refresh_cache */
+	backend_remove_packages,			/* remove_packages */
+	NULL,						/* repo_enable */
+	NULL,						/* repo_set_data */
+	backend_resolve,				/* resolve */
+	NULL,						/* rollback */
+	backend_search_details,				/* search_details */
+	NULL,						/* search_file */
+	backend_search_group,				/* search_group */
+	backend_search_name,				/* search_name */
+	NULL,						/* service_pack */
+	backend_update_packages,			/* update_packages */
+	NULL,						/* update_system */
+	NULL						/* what_provides */
 );
+
commit 1c723829d4a547beac7aa66d6101d4e2bd26f7ec
Merge: 33edecb... 212306a...
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Jul 3 09:18:25 2008 +0100

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

commit 212306afe3d06762d45dc38edf80901f8ba989dd
Author: Marcin Banasiak <megabajt at pld-linux.org>
Date:   Wed Jul 2 22:57:44 2008 +0200

    poldek: trivial: display properly status when updating
    (cherry picked from commit 247e48f402064994b70e9ed03cc7855965b10397)

diff --git a/backends/poldek/pk-backend-poldek.c b/backends/poldek/pk-backend-poldek.c
index 27528a1..42d691d 100644
--- a/backends/poldek/pk-backend-poldek.c
+++ b/backends/poldek/pk-backend-poldek.c
@@ -1566,11 +1566,40 @@ show_rpm_progress (PkBackend *backend, gchar *message)
 	}
 }
 
+/* Returns NULL if not found */
+static gchar*
+get_filename_from_message (char *message)
+{
+	gchar *msg = NULL, *p;
+
+	if ((p = strchr (message, ':')) == NULL)
+		return NULL;
+
+	/* check if it's really rpm progress
+	 * example: ' 4:foo    ###'
+	 */
+	if (g_ascii_isdigit (*(p - 1))) {
+		p++;
+
+		msg = p;
+
+		while (p) {
+			if (*p == '#' || g_ascii_isspace (*p)) {
+				*p = '\0';
+				break;
+			}
+
+			p++;
+		}
+	}
+
+	return msg;
+}
+
 static void
 poldek_backend_log (void *data, int pri, char *message)
 {
 	PkBackend *backend = (PkBackend*)data;
-	gchar *p;
 
 	/* skip messages that we don't want to show */
 	if (g_str_has_prefix (message, "Nothing")) // 'Nothing to do'
@@ -1618,37 +1647,23 @@ poldek_backend_log (void *data, int pri, char *message)
 		pberror->rpmstate &= (~PB_RPM_STATE_ENUM_REPACKAGING);
 	}
 	if (pberror->rpmstate != PB_RPM_STATE_ENUM_NONE) {
-		p = g_strchug (message);
-		if (p && g_ascii_isdigit(*p)) {
-			gchar *n;
-
-			/* extract package name */
-			if ((n = strchr (p, ':') + 1) == NULL)
-				return;
-
-			p = n;
+		gchar *fn;
 
-			while (*p != '\0') {
-				if (g_ascii_isspace (*p)) {
-					*p = '\0';
-					break;
-				}
-				p++;
-			}
+		if ((fn = get_filename_from_message (message)) == NULL)
+			return;
 
-			if ((pberror->rpmstate & PB_RPM_STATE_ENUM_REPACKAGING) == FALSE) {
-				guint ts_type = pk_backend_get_uint (backend, "ts_type");
+		if ((pberror->rpmstate & PB_RPM_STATE_ENUM_REPACKAGING) == FALSE) {
+			guint ts_type = pk_backend_get_uint (backend, "ts_type");
 
-				/* set proper status */
-				if (ts_type == TS_TYPE_ENUM_INSTALL) {
-					pk_backend_set_status (backend, PK_STATUS_ENUM_INSTALL);
-				} else if (ts_type == TS_TYPE_ENUM_UPDATE) {
-					pk_backend_set_status (backend, PK_STATUS_ENUM_UPDATE);
-				}
+			/* set proper status */
+			if (ts_type == TS_TYPE_ENUM_INSTALL) {
+				pk_backend_set_status (backend, PK_STATUS_ENUM_INSTALL);
+			} else if (ts_type == TS_TYPE_ENUM_UPDATE) {
+				pk_backend_set_status (backend, PK_STATUS_ENUM_UPDATE);
 			}
-
-			show_rpm_progress (backend, n);
 		}
+
+		show_rpm_progress (backend, fn);
 	}
 }
 
commit c63b0cd85dd11fae769b77fb83703a8759067593
Author: Scott Reeves <sreeves at novell.com>
Date:   Fri Jun 27 11:21:47 2008 -0600

    change to return all restart_suggested patches not just the first one
    (cherry picked from commit b46d22182369920639fb1fbd55d06440b19ed936)

diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index ad1d86f..293dba3 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -640,15 +640,19 @@ zypp_get_patches ()
                         it != zypp->poolProxy ().byKindEnd<zypp::Patch>(); it ++) {
                 // check if patch is needed 
                 if((*it)->candidateObj ().isRelevant() && !((*it)->candidateObj ().isSatisfied())) {
-                        patches->insert ((*it)->candidateObj ());
 			zypp::Patch::constPtr patch = zypp::asKind<zypp::Patch>((*it)->candidateObj ().resolvable ());
+			if (_updating_self) {
+				if (patch->restartSuggested ())
+					patches->insert ((*it)->candidateObj ());
+			}
+			else
+				patches->insert ((*it)->candidateObj ());
 
-			// check if the patch updates libzypp or packageKit and show only this one
-			if (patch->restartSuggested ()) {
+			// check if the patch updates libzypp or packageKit and show only these
+			if (!_updating_self && patch->restartSuggested ()) {
 				_updating_self = TRUE;
 				patches->clear ();
 				patches->insert ((*it)->candidateObj ());
-				break;
 			}
 		}
 
commit 0ea7ad31b6c9833476b070cfa238f0b2de9875d8
Author: S.Çağlar Onur <caglar at pardus.org.tr>
Date:   Wed Jul 2 19:44:21 2008 +0300

    PiSi: compile with trunk changes

diff --git a/backends/pisi/pk-backend-pisi.c b/backends/pisi/pk-backend-pisi.c
index 74d2c31..07e7d16 100644
--- a/backends/pisi/pk-backend-pisi.c
+++ b/backends/pisi/pk-backend-pisi.c
@@ -116,9 +116,12 @@ static void
 backend_get_depends (PkBackend *backend, PkFilterEnum filters, gchar **package_ids, gboolean recursive)
 {
 	gchar *filters_text;
+	gchar *package_ids_temp;
+	package_ids_temp = pk_package_ids_to_text (package_ids, "|");
 	filters_text = pk_filter_enums_to_text (filters);
-	pk_backend_spawn_helper (spawn, "get-depends.py", filters_text, package_id, pk_backend_bool_to_text (recursive), NULL);
+	pk_backend_spawn_helper (spawn, "get-depends.py", filters_text, package_ids_temp, pk_backend_bool_to_text (recursive), NULL);
 	g_free (filters_text);
+	g_free (package_ids_temp);
 }
 
 /**
@@ -127,7 +130,10 @@ backend_get_depends (PkBackend *backend, PkFilterEnum filters, gchar **package_i
 static void
 backend_get_details (PkBackend *backend, gchar **package_ids)
 {
-	pk_backend_spawn_helper (spawn, "get-details.py", package_id, NULL);
+	gchar *package_ids_temp;
+	package_ids_temp = pk_package_ids_to_text (package_ids, "|");
+	pk_backend_spawn_helper (spawn, "get-details.py", package_ids_temp, NULL);
+	g_free (package_ids_temp);
 }
 
 /**
@@ -136,7 +142,10 @@ backend_get_details (PkBackend *backend, gchar **package_ids)
 static void
 backend_get_files (PkBackend *backend, gchar **package_ids)
 {
-	pk_backend_spawn_helper (spawn, "get-files.py", package_id, NULL);
+	gchar *package_ids_temp;
+	package_ids_temp = pk_package_ids_to_text (package_ids, "|");
+	pk_backend_spawn_helper (spawn, "get-files.py", package_ids_temp, NULL);
+	g_free (package_ids_temp);
 }
 
 /**
@@ -146,9 +155,12 @@ static void
 backend_get_requires (PkBackend *backend, PkFilterEnum filters, gchar **package_ids, gboolean recursive)
 {
 	gchar *filters_text;
+	gchar *package_ids_temp;
+	package_ids_temp = pk_package_ids_to_text (package_ids, "|");
 	filters_text = pk_filter_enums_to_text (filters);
-	pk_backend_spawn_helper (spawn, "get-requires.py", filters_text, package_id, pk_backend_bool_to_text (recursive), NULL);
+	pk_backend_spawn_helper (spawn, "get-requires.py", filters_text, package_ids_temp, pk_backend_bool_to_text (recursive), NULL);
 	g_free (filters_text);
+	g_free (package_ids_temp);
 }
 
 /**
@@ -314,9 +326,12 @@ static void
 backend_resolve (PkBackend *backend, PkFilterEnum filters, gchar **package_ids)
 {
 	gchar *filters_text;
+	gchar *package_ids_temp;
 	filters_text = pk_filter_enums_to_text (filters);
-	pk_backend_spawn_helper (spawn, "resolve.py", filters_text, package_id, NULL);
+	package_ids_temp = pk_package_ids_to_text (package_ids, "|");
+	pk_backend_spawn_helper (spawn, "resolve.py", filters_text, package_ids_temp, NULL);
 	g_free (filters_text);
+	g_free (package_ids_temp);
 }
 
 /**
commit 33edecbaf61ed6565c64cc20e9969a6f388f7460
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Jul 2 17:10:47 2008 +0100

    yum: fix an error message which can lead to printf debug breakage in the daemon

diff --git a/backends/yum/helpers/yumBackend.py b/backends/yum/helpers/yumBackend.py
index 40e2e43..4db1621 100644
--- a/backends/yum/helpers/yumBackend.py
+++ b/backends/yum/helpers/yumBackend.py
@@ -1019,7 +1019,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
                 txmbr = self.yumbase.install(po=pkg)
                 txmbrs.extend(txmbr)
             if inst:
-                self.error(ERROR_PACKAGE_ALREADY_INSTALLED,"The package %s is already installed", pkg.name)
+                self.error(ERROR_PACKAGE_ALREADY_INSTALLED,"The package %s is already installed" % pkg.name)
         if txmbrs:
             self._runYumTransaction()
         else:
commit f37502a69ef11ccfdc4f8e00c1357e8fc09f93e5
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Jul 2 10:19:01 2008 +0100

    bugfix: audit the use of FIXME and TODO and fix up some of the issues

diff --git a/libpackagekit/pk-client.c b/libpackagekit/pk-client.c
index ddc0562..8fdf878 100644
--- a/libpackagekit/pk-client.c
+++ b/libpackagekit/pk-client.c
@@ -3517,9 +3517,10 @@ pk_client_connect (PkClient *client)
 static void
 pk_connection_changed_cb (PkConnection *pconnection, gboolean connected, PkClient *client)
 {
-	pk_debug ("connected=%i", connected);
-
-	/* TODO: if PK re-started mid-transaction then show a big fat warning */
+	/* if PK re-started mid-transaction then show a big fat warning */
+	if (!connected && client->priv->tid != NULL && !client->priv->is_finished) {
+		pk_warning ("daemon disconnected mid-transaction!");
+	}
 }
 
 /**
diff --git a/libpackagekit/pk-control.c b/libpackagekit/pk-control.c
index c243f94..fbb83fa 100644
--- a/libpackagekit/pk-control.c
+++ b/libpackagekit/pk-control.c
@@ -718,7 +718,8 @@ pk_control_class_init (PkControlClass *klass)
 	 * PkControl::transaction-list-changed:
 	 * @control: the #PkControl instance that emitted the signal
 	 *
-	 * The ::transaction-list-changed signal is emitted when TODO
+	 * The ::transaction-list-changed signal is emitted when the list
+	 * of transactions handled by the daemon is changed.
 	 **/
 	signals [PK_CONTROL_LIST_CHANGED] =
 		g_signal_new ("transaction-list-changed",
@@ -730,7 +731,9 @@ pk_control_class_init (PkControlClass *klass)
 	 * PkControl::locked:
 	 * @control: the #PkControl instance that emitted the signal
 	 *
-	 * The ::locked signal is emitted when TODO
+	 * The ::locked signal is emitted when the backend instance has been
+	 * locked by PackageKit.
+	 * This may mean that other native package tools will not work.
 	 **/
 	signals [PK_CONTROL_LOCKED] =
 		g_signal_new ("locked",
diff --git a/libpackagekit/pk-update-detail-list.c b/libpackagekit/pk-update-detail-list.c
index 99de8bf..987c1be 100644
--- a/libpackagekit/pk-update-detail-list.c
+++ b/libpackagekit/pk-update-detail-list.c
@@ -129,7 +129,7 @@ pk_update_detail_list_finalize (GObject *object)
 	g_return_if_fail (PK_IS_UPDATE_DETAIL_LIST (object));
 	list = PK_UPDATE_DETAIL_LIST (object);
 
-	//TODO: FREE!
+	/* free the list */
 	len = list->priv->array->len;
 	for (i=0; i<len; i++) {
 		obj = (PkUpdateDetailObj *) g_ptr_array_index (list->priv->array, i);
diff --git a/src/pk-backend-dbus.c b/src/pk-backend-dbus.c
index 9256faa..530b0b2 100644
--- a/src/pk-backend-dbus.c
+++ b/src/pk-backend-dbus.c
@@ -383,9 +383,8 @@ pk_backend_dbus_startup (PkBackendDbus *backend_dbus)
 				 G_TYPE_INVALID, G_TYPE_INVALID);
 	if (!ret) {
 		pk_warning ("%s", error->message);
-		/* FIXME: might be insane... */
-		pk_backend_error_code (backend_dbus->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, error->message);
-		pk_backend_finished (backend_dbus->priv->backend);
+		/* cannot use ErrorCode as not in transaction */
+		pk_backend_message (backend_dbus->priv->backend, PK_MESSAGE_ENUM_DAEMON, error->message);
 		g_error_free (error);
 		goto out;
 	}
diff --git a/src/pk-backend.c b/src/pk-backend.c
index 3a57589..d2f78fe 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -1842,6 +1842,12 @@ pk_backend_reset (PkBackend *backend)
 {
 	g_return_val_if_fail (PK_IS_BACKEND (backend), FALSE);
 
+	/* we can't reset when we are running */
+	if (backend->priv->status == PK_STATUS_ENUM_RUNNING) {
+		pk_warning ("cannot reset %s when running", backend->priv->c_tid);
+		return FALSE;
+	}
+
 	/* do finish now, as we might be unreffing quickly */
 	if (backend->priv->signal_finished != 0) {
 		g_source_remove (backend->priv->signal_finished);
@@ -1854,8 +1860,6 @@ pk_backend_reset (PkBackend *backend)
 		g_source_remove (backend->priv->signal_error_timeout);
 	}
 
-	/* TODO: need to wait for Finished() if running */
-
 	pk_package_obj_free (backend->priv->last_package);
 	backend->priv->set_error = FALSE;
 	backend->priv->set_signature = FALSE;
diff --git a/src/pk-engine.c b/src/pk-engine.c
index c85b0b9..f8df943 100644
--- a/src/pk-engine.c
+++ b/src/pk-engine.c
@@ -523,7 +523,7 @@ pk_engine_set_proxy (PkEngine *engine, const gchar *proxy_http, const gchar *pro
 	sender = dbus_g_method_get_sender (context);
 
 	/* use security model to get auth */
-	ret = pk_security_action_is_allowed (engine->priv->security, sender, FALSE, PK__ROLE_ENUM_SET_PROXY, &error_detail);
+	ret = pk_security_action_is_allowed (engine->priv->security, sender, FALSE, PK_ROLE_ENUM_SET_PROXY_PRIVATE, &error_detail);
 	if (!ret) {
 		error = g_error_new (PK_ENGINE_ERROR, PK_ENGINE_ERROR_REFUSED_BY_POLICY, "%s", error_detail);
 		dbus_g_method_return_error (context, error);
diff --git a/src/pk-interface.xml b/src/pk-interface.xml
index 90c7a3c..ae89d58 100644
--- a/src/pk-interface.xml
+++ b/src/pk-interface.xml
@@ -186,7 +186,9 @@
         <doc:doc>
           <doc:summary>
             <doc:para>
-              The reason of the state change, FIXME
+              The reason of the state change. Valid reasons are <literal>resume</literal> or
+              <literal>posttrans</literal>.
+              Resume is given a lower priority than posttrans.
             </doc:para>
           </doc:summary>
         </doc:doc>
@@ -219,7 +221,8 @@
         <doc:doc>
           <doc:summary>
             <doc:para>
-              The network state, e.g. FIXME
+              The network state, e.g. <literal>unknown</literal>,
+              <literal>offline</literal> or <literal>online</literal>.
             </doc:para>
           </doc:summary>
         </doc:doc>
@@ -241,7 +244,7 @@
         <doc:doc>
           <doc:summary>
             <doc:para>
-              The HTTP proxy, e.g. FIXME
+              The HTTP proxy, e.g. <literal>username:password at server:port</literal>.
             </doc:para>
           </doc:summary>
         </doc:doc>
@@ -250,7 +253,7 @@
         <doc:doc>
           <doc:summary>
             <doc:para>
-              The FTP proxy, e.g. FIXME
+              The FTP proxy, e.g. <literal>username:password at server:port</literal>.
             </doc:para>
           </doc:summary>
         </doc:doc>
diff --git a/src/pk-security-polkit.c b/src/pk-security-polkit.c
index 81332d0..0b13fe4 100644
--- a/src/pk-security-polkit.c
+++ b/src/pk-security-polkit.c
@@ -129,7 +129,7 @@ pk_security_role_to_action (PkSecurity *security, gboolean trusted, PkRoleEnum r
 	} else if (role == PK_ROLE_ENUM_REFRESH_CACHE) {
 		policy = "org.freedesktop.packagekit.refresh-cache";
 	/* PRIVATE: not actually roles */
-	} else if (role == PK__ROLE_ENUM_SET_PROXY) {
+	} else if (role == PK_ROLE_ENUM_SET_PROXY_PRIVATE) {
 		policy = "org.freedesktop.packagekit.refresh-cache";
 	}
 	return policy;
diff --git a/src/pk-security.h b/src/pk-security.h
index eb55932..3037c8e 100644
--- a/src/pk-security.h
+++ b/src/pk-security.h
@@ -34,8 +34,8 @@ G_BEGIN_DECLS
 #define PK_IS_SECURITY_CLASS(k)		(G_TYPE_CHECK_CLASS_TYPE ((k), PK_TYPE_SECURITY))
 #define PK_SECURITY_GET_CLASS(o)	(G_TYPE_INSTANCE_GET_CLASS ((o), PK_TYPE_SECURITY, PkSecurityClass))
 
-/* FIXME: not actually a role */
-#define PK__ROLE_ENUM_SET_PROXY		1 << 31
+/* not actually a role, but treated as one */
+#define PK_ROLE_ENUM_SET_PROXY_PRIVATE		1 << 31
 
 typedef struct PkSecurityPrivate PkSecurityPrivate;
 
commit 78e1a966de4aa1838aad752a78890dc2be75e113
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Jul 2 09:28:55 2008 +0100

    bugfix: don't use-after-free in pk_task_list_status_changed_cb()

diff --git a/libpackagekit/pk-task-list.c b/libpackagekit/pk-task-list.c
index e22b226..e203462 100644
--- a/libpackagekit/pk-task-list.c
+++ b/libpackagekit/pk-task-list.c
@@ -165,10 +165,10 @@ pk_task_list_status_changed_cb (PkClient *client, PkStatusEnum status, PkTaskLis
 	/* get correct item */
 	item = pk_task_list_find_existing_tid (tlist, tid);
 	item->status = status;
-	g_free (tid);
 
 	pk_debug ("emit status-changed(%s) for %s", pk_status_enum_to_text (status), tid);
 	g_signal_emit (tlist, signals [PK_TASK_LIST_STATUS_CHANGED], 0);
+	g_free (tid);
 }
 
 /**
commit d7445880562d552ac3029adc88e20e32a2fe92d4
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Jul 2 09:28:23 2008 +0100

    trivial: remove some debugging that crept in

diff --git a/libpackagekit/pk-client.c b/libpackagekit/pk-client.c
index dfedbd6..ddc0562 100644
--- a/libpackagekit/pk-client.c
+++ b/libpackagekit/pk-client.c
@@ -352,7 +352,6 @@ pk_client_get_tid (PkClient *client)
 	if (client->priv->tid == NULL) {
 		return NULL;
 	}
-	pk_warning ("client->priv->tid=%s", client->priv->tid);
 	return g_strdup (client->priv->tid);
 }
 
commit f2408cf4a8cb6d438d24de3c771ef17f96cc46f1
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Jul 2 09:15:17 2008 +0100

    razor: upstream API changes

diff --git a/backends/razor/pk-backend-razor.c b/backends/razor/pk-backend-razor.c
index 5d9c780..a2246c5 100644
--- a/backends/razor/pk-backend-razor.c
+++ b/backends/razor/pk-backend-razor.c
@@ -159,7 +159,7 @@ backend_get_details_thread (PkBackend *backend)
 	const gchar *name, *version, *arch, *summary, *description, *url, *license;
 	gchar *package_id;
 	gchar **package_ids;
-	PkPackageId *ident;
+	PkPackageId *id;
 
 	package_ids = pk_backend_get_strv (backend, "package_ids");
 	length = g_strv_length (package_ids);
@@ -172,8 +172,8 @@ backend_get_details_thread (PkBackend *backend)
 					    RAZOR_DETAIL_LAST)) {
 		for (i=0; i<length; i++) {
 			/* TODO: we should cache this */
-			ident = pk_package_id_new_from_string (package_ids[i]);
-			if (pk_strequal (name, ident->name)) {
+			id = pk_package_id_new_from_string (package_ids[i]);
+			if (pk_strequal (name, id->name)) {
 				package_id = pk_package_id_build (name, version, arch, "installed");
 				razor_package_get_details (set, package,
 							   RAZOR_DETAIL_SUMMARY, &summary,
@@ -184,7 +184,7 @@ backend_get_details_thread (PkBackend *backend)
 				pk_backend_details (backend, package_ids[i], license, PK_GROUP_ENUM_UNKNOWN, description, url, 0);
 				g_free (package_id);
 			}
-			pk_package_id_free (ident);
+			pk_package_id_free (id);
 		}
 	}
 
@@ -202,6 +202,32 @@ backend_get_details (PkBackend *backend, gchar **package_ids)
 }
 
 /**
+ * backend_resolve_package_id:
+ */
+static struct razor_package *
+backend_resolve_package_id (const PkPackageId *id)
+{
+	struct razor_package_iterator *pi;
+	struct razor_package *package;
+	struct razor_package *package_retval = NULL;
+	const gchar *name, *version, *arch;
+
+	pi = razor_package_iterator_create (set);
+	while (razor_package_iterator_next (pi, &package,
+					    RAZOR_DETAIL_NAME, &name,
+					    RAZOR_DETAIL_VERSION, &version,
+					    RAZOR_DETAIL_ARCH, &arch,
+					    RAZOR_DETAIL_LAST)) {
+		if (pk_strequal (name, id->name)) {
+			package_retval = package;
+			break;
+		}
+	}
+	razor_package_iterator_destroy (pi);
+	return package_retval;
+}
+
+/**
  * backend_get_files:
  */
 static void
@@ -210,16 +236,18 @@ backend_get_files (PkBackend *backend, gchar **package_ids)
 	guint i;
 	guint length;
 	const gchar *package_id;
-	PkPackageId *ident;
+	struct razor_package *package;
+	PkPackageId *id;
 
 	length = g_strv_length (package_ids);
 	for (i=0; i<length; i++) {
 		package_id = package_ids[i];
-		ident = pk_package_id_new_from_string (package_id);
+		id = pk_package_id_new_from_string (package_id);
 		/* TODO: we need to get this list! */
-		razor_set_list_package_files (set, ident->name);
+		package = backend_resolve_package_id (id);
+		razor_set_list_package_files (set, package);
 		pk_backend_files (backend, package_id, "/usr/bin/dave;/usr/share/brian");
-		pk_package_id_free (ident);
+		pk_package_id_free (id);
 	}
 	pk_backend_finished (backend);
 }
diff --git a/libpackagekit/pk-client.c b/libpackagekit/pk-client.c
index ddc0562..dfedbd6 100644
--- a/libpackagekit/pk-client.c
+++ b/libpackagekit/pk-client.c
@@ -352,6 +352,7 @@ pk_client_get_tid (PkClient *client)
 	if (client->priv->tid == NULL) {
 		return NULL;
 	}
+	pk_warning ("client->priv->tid=%s", client->priv->tid);
 	return g_strdup (client->priv->tid);
 }
 


More information about the PackageKit-commit mailing list