diff -ru yum-3.2.29-orig/cli.py yum-3.2.29/cli.py
--- yum-3.2.29-orig/cli.py	2011-01-11 16:05:35.000000000 +0000
+++ yum-3.2.29/cli.py	2012-10-19 11:58:03.000000000 +0000
@@ -504,6 +504,8 @@
         if self.gpgsigcheck(downloadpkgs) != 0:
             return 1
         
+        self.verbose_logger.log(yum.logginglevels.INFO_2, 
+                                self.fmtSection(_("Entering rpm code")))
         if self.conf.rpm_check_debug:
             rcd_st = time.time()
             self.verbose_logger.log(yum.logginglevels.INFO_2, 
@@ -580,6 +582,8 @@
         resultobject = self.runTransaction(cb=cb)
 
         self.verbose_logger.debug('Transaction time: %0.3f' % (time.time() - ts_st))
+        self.verbose_logger.log(yum.logginglevels.INFO_2, 
+                                self.fmtSection(_("Leaving rpm code")))
         # close things
         self.verbose_logger.log(yum.logginglevels.INFO_1,
             self.postTransactionOutput())
@@ -958,6 +962,7 @@
             ypl.hidden_installed = ypl.installed
         if done_hidden_available:
             ypl.available = []
+        
         if done_hidden_installed:
             ypl.installed = []
         return ypl
@@ -1448,6 +1453,38 @@
 
             if opts.color not in (None, 'auto', 'always', 'never',
                                   'tty', 'if-tty', 'yes', 'no', 'on', 'off'):
+                raise ValueError, _("--color takes one of: auto, always, never")
+            elif opts.color is None:
+                if self.base.conf.color != 'auto':
+                    self.base.term.reinit(color=self.base.conf.color)
+            else:
+                _remap = {'tty' : 'auto', 'if-tty' : 'auto',
+                          '1' : 'always', 'true' : 'always',
+                          'yes' : 'always', 'on' : 'always',
+                          '0' : 'always', 'false' : 'always',
+                          'no' : 'never', 'off' : 'never'}
+                opts.color = _remap.get(opts.color, opts.color)
+                if opts.color != 'auto':
+                    self.base.term.reinit(color=opts.color)
+
+            if opts.color not in (None, 'auto', 'always', 'never',
+                                  'tty', 'if-tty', 'yes', 'no', 'on', 'off'):
+                raise ValueError, _("--color takes one of: auto, always, never")
+            elif opts.color is None:
+                if self.base.conf.color != 'auto':
+                    self.base.term.reinit(color=self.base.conf.color)
+            else:
+                _remap = {'tty' : 'auto', 'if-tty' : 'auto',
+                          '1' : 'always', 'true' : 'always',
+                          'yes' : 'always', 'on' : 'always',
+                          '0' : 'always', 'false' : 'always',
+                          'no' : 'never', 'off' : 'never'}
+                opts.color = _remap.get(opts.color, opts.color)
+                if opts.color != 'auto':
+                    self.base.term.reinit(color=opts.color)
+
+            if opts.color not in (None, 'auto', 'always', 'never',
+                                  'tty', 'if-tty', 'yes', 'no', 'on', 'off'):
                 raise ValueError, _("--color takes one of: auto, always, never")
             elif opts.color is None:
                 if self.base.conf.color != 'auto':
Binary files yum-3.2.29-orig/cli.pyc and yum-3.2.29/cli.pyc differ
diff -ru yum-3.2.29-orig/docs/yum.8 yum-3.2.29/docs/yum.8
--- yum-3.2.29-orig/docs/yum.8	2011-01-03 16:30:37.000000000 +0000
+++ yum-3.2.29/docs/yum.8	2012-10-19 11:08:14.000000000 +0000
@@ -429,6 +429,11 @@
 will do a little extra work when color is enabled.
 Configuration Option: \fBcolor\fP
 .br
+.IP "\fB\-\-color=[always|auto|never]\fP"
+Display colorized output automatically, depending on the output terminal,
+always (using ANSI codes) or never.
+Configuration Option: \fBcolor\fP
+.br
 .IP "\fB\-\-disableexcludes=[all|main|repoid]\fP"
 Disable the excludes defined in your config files. Takes one of three options:
 .br
diff -ru yum-3.2.29-orig/docs/yum.conf.5 yum-3.2.29/docs/yum.conf.5
--- yum-3.2.29-orig/docs/yum.conf.5	2011-01-07 20:42:36.000000000 +0000
+++ yum-3.2.29/docs/yum.conf.5	2012-10-19 10:32:00.000000000 +0000
@@ -575,6 +575,59 @@
 
 
 
+.IP \fBbugtracker_url \fR
+Url where bugs should be filed for yum. Configurable for local versions or distro-specific
+bugtrackers.
+
+.IP \fBcolor \fR
+Display colorized output automatically, depending on the output terminal,
+always (using ANSI codes) or never.
+Command-line option: \fB\-\-color\fP
+
+.IP \fBcolor_list_installed_older \fR
+The colorization/highlighting for pacakges in list/info installed which are
+older than the latest available package with the same name and arch.
+Default is `bold'.
+Possible values are a comma seperated list containing: bold, blink, dim,
+reverse, underline, fg:black, fg:red, fg:green, fg:yellow, fg:blue, fg:magenta,
+fg:cyan, fg:white, bg:black, bg:red, bg:green, bg:yellow, bg:blue, bg:magenta,
+bg:cyan, bg:white.
+
+.IP \fBcolor_list_installed_newer \fR
+The colorization/highlighting for pacakges in list/info installed which are
+newer than the latest available package with the same name and arch.
+Default is `bold,yellow'.
+See color_list_installed_older for possible values.
+
+.IP \fBcolor_list_installed_extra \fR
+The colorization/highlighting for pacakges in list/info installed which has
+no available package with the same name and arch.
+Default is `bold,red'.
+See color_list_installed_older for possible values.
+
+.IP \fBcolor_list_available_upgrade \fR
+The colorization/highlighting for pacakges in list/info available which is
+an upgrade for the latest installed package with the same name and arch.
+Default is `bold,blue'.
+See color_list_installed_older for possible values.
+
+.IP \fBcolor_list_available_downgrade \fR
+The colorization/highlighting for pacakges in list/info available which is
+a downgrade for the latest installed package with the same name and arch.
+Default is `dim,cyan'.
+See color_list_installed_older for possible values.
+
+.IP \fBcolor_list_available_install \fR
+The colorization/highlighting for pacakges in list/info available which has
+no installed package with the same name and arch.
+Default is `normal'.
+See color_list_installed_older for possible values.
+
+.IP \fBcolor_search_match \fR
+The colorization/highlighting for text matches in search.
+Default is `bold'.
+See color_list_installed_older for possible values.
+
 .SH "[repository] OPTIONS"
 .LP 
 The repository section(s) take the following form:
diff -ru yum-3.2.29-orig/output.py yum-3.2.29/output.py
--- yum-3.2.29-orig/output.py	2010-12-11 05:16:00.000000000 +0000
+++ yum-3.2.29/output.py	2012-10-19 10:55:21.000000000 +0000
@@ -247,6 +247,9 @@
     def __init__(self, term_stream=None, color='auto'):
         self.reinit(term_stream, color)
 
+    def __init__(self, term_stream=None, color='auto'):
+        self.reinit(term_stream, color)
+
     def _tigetstr(self, cap_name):
         # String capabilities can include "delays" of the form "$<2>".
         # For any modern terminal, we should be able to just ignore
@@ -356,6 +359,10 @@
         hibeg, hiend = self._highlight(highlight)
         return self.term.sub(haystack, hibeg, hiend, needles, **kwds)
 
+    def _sub_highlight(self, haystack, highlight, needles, **kwds):
+        hibeg, hiend = self._highlight(highlight)
+        return self.term.sub(haystack, hibeg, hiend, needles, **kwds)
+
     @staticmethod
     def _calc_columns_spaces_helps(current, data_tups, left):
         """ Spaces left on the current field will help how many pkgs? """
@@ -481,7 +488,6 @@
         data = []
         for col_data in columns[:-1]:
             (val, width, hibeg, hiend) = self._col_data(col_data)
-
             if not width: # Don't count this column, invisible text
                 msg += u"%s"
                 data.append(val)
Binary files yum-3.2.29-orig/output.pyc and yum-3.2.29/output.pyc differ
diff -ru yum-3.2.29-orig/po/ca.po yum-3.2.29/po/ca.po
--- yum-3.2.29-orig/po/ca.po	2010-05-06 14:54:46.000000000 +0000
+++ yum-3.2.29/po/ca.po	2012-10-19 11:07:08.000000000 +0000
@@ -1691,18 +1691,18 @@
 msgid "doTsSetup() will go away in a future version of Yum.\n"
 msgstr "doTsSetup() desapareixerà en una futura versió de Yum.\n"
 
-#: ../yum/depsolve.py:97
+#: ../yum/depsolve.py:99
 msgid "Setting up TransactionSets before config class is up"
 msgstr ""
 "S'està configurant TransactionSets abans que la classe de configuració "
 "estigui iniciada"
 
-#: ../yum/depsolve.py:148
+#: ../yum/depsolve.py:150
 #, python-format
 msgid "Invalid tsflag in config file: %s"
 msgstr "Tsflag invàlid en el fitxer de configuració: %s"
 
-#: ../yum/depsolve.py:159
+#: ../yum/depsolve.py:161
 #, python-format
 msgid "Searching pkgSack for dep: %s"
 msgstr "S'està buscant pkgSack per a la dependència: %s"
diff -ru yum-3.2.29-orig/po/de.po yum-3.2.29/po/de.po
--- yum-3.2.29-orig/po/de.po	2010-05-06 14:54:46.000000000 +0000
+++ yum-3.2.29/po/de.po	2012-10-19 11:02:13.000000000 +0000
@@ -1693,17 +1693,17 @@
 msgid "doTsSetup() will go away in a future version of Yum.\n"
 msgstr "doTsSetup() wird in zukünftigen Versionen von Yum verschwinden.\n"
 
-#: ../yum/depsolve.py:97
+#: ../yum/depsolve.py:99
 msgid "Setting up TransactionSets before config class is up"
 msgstr ""
 "Konfiguriere TransactionSets, bevor die Konfigurationsklasse gestartet ist"
 
-#: ../yum/depsolve.py:148
+#: ../yum/depsolve.py:150
 #, python-format
 msgid "Invalid tsflag in config file: %s"
 msgstr "Ungültiges tsflag in Konfigurationsdatei: %s"
 
-#: ../yum/depsolve.py:159
+#: ../yum/depsolve.py:161
 #, python-format
 msgid "Searching pkgSack for dep: %s"
 msgstr "Suche pkgSack für Abhängigkeiten: %s"
diff -ru yum-3.2.29-orig/po/nb.po yum-3.2.29/po/nb.po
--- yum-3.2.29-orig/po/nb.po	2010-05-06 14:54:46.000000000 +0000
+++ yum-3.2.29/po/nb.po	2012-10-19 11:02:40.000000000 +0000
@@ -1668,7 +1668,7 @@
 "\n"
 "Avslutter etter ønske"
 
-#: ../yum/depsolve.py:82
+#: ../yum/depsolve.py:78
 msgid "doTsSetup() will go away in a future version of Yum.\n"
 msgstr "doTsSetup() vil forsvinne i en kommende utgave av Yum.\n"
 
diff -ru yum-3.2.29-orig/po/pl.po yum-3.2.29/po/pl.po
--- yum-3.2.29-orig/po/pl.po	2010-08-24 13:27:14.000000000 +0000
+++ yum-3.2.29/po/pl.po	2012-10-19 11:02:56.000000000 +0000
@@ -1920,7 +1920,7 @@
 msgid "doTsSetup() will go away in a future version of Yum.\n"
 msgstr "doTsSetup() zostanie usunięte w przyszłych wersjach programu yum.\n"
 
-#: ../yum/depsolve.py:97
+#: ../yum/depsolve.py:99
 msgid "Setting up TransactionSets before config class is up"
 msgstr "Ustawianie zestawów transakcji przed włączeniem klasy konfiguracji"
 
@@ -2010,13 +2010,13 @@
 msgid "Cannot find an update path for dep for: %s"
 msgstr "Nie można odnaleźć ścieżki aktualizacji dla zależności dla: %s"
 
-#: ../yum/depsolve.py:435
+#: ../yum/depsolve.py:437
 #, python-format
 msgid "Quick matched %s to require for %s"
 msgstr "Szybko dopasowano %s jako wymaganie %s"
 
 #. is it already installed?
-#: ../yum/depsolve.py:477
+#: ../yum/depsolve.py:479
 #, python-format
 msgid "%s is in providing packages but it is already installed, removing."
 msgstr ""
diff -ru yum-3.2.29-orig/po/pt_BR.po yum-3.2.29/po/pt_BR.po
--- yum-3.2.29-orig/po/pt_BR.po	2010-10-08 15:55:20.000000000 +0000
+++ yum-3.2.29/po/pt_BR.po	2012-10-19 11:45:38.000000000 +0000
@@ -2005,7 +2005,7 @@
 "\n"
 "Saindo pelo cancelamento do usuário."
 
-#: ../yum/depsolve.py:82
+#: ../yum/depsolve.py:84
 msgid "doTsSetup() will go away in a future version of Yum.\n"
 msgstr "doTsSetup() será removida em uma futura versão do Yum.\n"
 
@@ -3191,28 +3191,21 @@
 
 #~ msgid "Looking for Obsoletes for %s"
 #~ msgstr "Localizando Obsoletos para %s"
-
 #~ msgid "unable to find newer package for %s"
 #~ msgstr "não foi possível encontrar um pacote mais recente para o %s"
-
 #~ msgid "TSINFO: Updating %s to resolve conflict."
 #~ msgstr "TSINFO: Atualizando o %s para resolver o conflito."
 
 #~ msgid "Package %s conflicts with %s."
 #~ msgstr "O pacote %s conflita com %s."
-
 #~ msgid "Running \"%s\" handler for \"%s\" plugin"
 #~ msgstr "Executando o manipulador \"%s\" para o plugin \"%s\""
-
 #~ msgid "Directory of rpms must exist"
 #~ msgstr "O diretório de rpms precisa existir"
-
 #~ msgid "Error accessing URL: %s"
 #~ msgstr "Erro ao acessar a URL: %s"
-
 #~ msgid "No Packages installed not included in a repository"
 #~ msgstr "Nenhum pacote instalado não incluído em um repositório"
-
 #~ msgid ""
 #~ "\n"
 #~ "   Total: %d\n"
@@ -3223,13 +3216,10 @@
 #~ "   Total: %d\n"
 #~ "   Usado: %d\n"
 #~ "   Src: %d"
-
 #~ msgid "Error restoring the backup of lilo.conf  The backup was:\n"
 #~ msgstr "Erro ao restaurar o backup do lilo.conf. O backup era:\n"
-
 #~ msgid "Looking in available packages for a providing package"
 #~ msgstr "Procurando pelo pacote fornecido nos pacotes disponíveis"
-
 #~ msgid ""
 #~ "retrygrab() failed for:\n"
 #~ "  %s%s\n"
@@ -3238,16 +3228,12 @@
 #~ "retrygrab() falhou para:\n"
 #~ "  %s%s\n"
 #~ "  Executando método de recuperação"
-
 #~ msgid "I will install/upgrade these to satisfy the dependencies:"
 #~ msgstr "Eu irei instalar/atualizar isto para satisfazer as dependências:"
-
 #~ msgid "Cannot delete %s - check perms"
 #~ msgstr "Não foi possível remover %s - verifique as permissões"
-
 #~ msgid "Need a provides to match"
 #~ msgstr "É necessário fornecer uma informação para corresponder"
-
 #~ msgid ""
 #~ "lilo options that are not supported by yum are used in the default lilo."
 #~ "conf. This file will not be modified. The options include:\n"
@@ -3255,13 +3241,10 @@
 #~ "opções do lilo que não são suportadas pelo yum estão sendo utilizadas no "
 #~ "arquivo lilo.conf padrão. Este arquivo não será modificado. Dentre as "
 #~ "opções estão:\n"
-
 #~ msgid "Error getting file %s"
 #~ msgstr "Erro ao obter arquivo %s"
-
 #~ msgid "%s is not writable"
 #~ msgstr "%s não é gravável"
-
 #~ msgid ""
 #~ "\n"
 #~ "Already found tuple: %s %s:\n"
@@ -3270,117 +3253,86 @@
 #~ "\n"
 #~ "Tupla já encontrada: %s %s:\n"
 #~ "%s "
-
 #~ msgid "errors found"
 #~ msgstr "erros encontrados"
-
 #~ msgid "Unable to determine boot loader."
 #~ msgstr "Não foi possível determinar o gerenciador de inicialização."
-
 #~ msgid "getting %s"
 #~ msgstr "obtendo %s"
-
 #~ msgid "Error Reading Header on %s"
 #~ msgstr "Erro ao Ler Cabeçalho em %s"
-
 #~ msgid "Error accessing File: %s"
 #~ msgstr "Erro ao acessar arquivo: %s"
-
 #~ msgid "You're not root, we can't install things"
 #~ msgstr "Você não é root, nós não podemos instalar coisas"
-
 #~ msgid "Cannot find any conf file."
 #~ msgstr "Não foi possível encontrar um arquivo de configuração."
-
 #~ msgid "Local file does not exist: %s"
 #~ msgstr "O arquivo local não existe: %s"
-
 #~ msgid "using ftp, http[s], or file for servers, Aborting - %s"
 #~ msgstr "usando ftp, http[s] ou arquivos para servidores. Abortando - %s"
-
 #~ msgid "Found %s."
 #~ msgstr "%s encontrado."
-
 #~ msgid "Transaction(s) Complete"
 #~ msgstr "Transação Completa"
-
 #~ msgid "IOError: %s"
 #~ msgstr "IOError (Erro E/S): %s"
-
 #~ msgid "Cleaning packages and old headers"
 #~ msgstr "Limpando pacotes e cabeçalhos antigos"
-
 #~ msgid ""
 #~ "Cannot download %s in caching only mode or when running as non-root user."
 #~ msgstr ""
 #~ "Não é possível baixar %s no modo \"somente cache\" ou quando estiver "
 #~ "executando com um usuário não root."
-
 #~ msgid ""
 #~ "Error: You may want to run yum clean or remove the file: \n"
 #~ " %s"
 #~ msgstr ""
 #~ "Erro: Você pode querer executar a limpeza do yum ou remover o arquivo: \n"
 #~ " %s"
-
 #~ msgid "Error reading lilo.conf: The messages was:\n"
 #~ msgstr "Erro ao ler o lilo.conf: A mensagem foi:\n"
-
 #~ msgid "No groups provided or accessible on any server."
 #~ msgstr "Nenhum grupo fornecido ou acessível em nenhum servidor."
-
 #~ msgid "%s results returned"
 #~ msgstr "%s resultados retornados"
-
 #~ msgid "Error moving %s to %s, fatal"
 #~ msgstr "Erro ao mover %s para %s, fatal"
-
 #~ msgid ""
 #~ "\n"
 #~ "ignoring bad rpm: %s"
 #~ msgstr ""
 #~ "\n"
 #~ "ignorando rpm defeituoso: %s"
-
 #~ msgid "[erase: %s]"
 #~ msgstr "[remover: %s]"
-
 #~ msgid "%s is not a dir"
 #~ msgstr "%s não é um diretório"
-
 #~ msgid "Best version for %s is %s:%s-%s"
 #~ msgstr "A melhor versão para %s é %s:%s-%s"
-
 #~ msgid "[deps: %s]"
 #~ msgstr "[deps: %s]"
-
 #~ msgid ""
 #~ "\n"
 #~ "ignoring srpm: %s"
 #~ msgstr ""
 #~ "\n"
 #~ "ignorando srpm: %s"
-
 #~ msgid "Checking deps %d/%d complete"
 #~ msgstr "Checando dependências, %d/%d completo"
-
 #~ msgid ""
 #~ "Errors within the dir(s):\n"
 #~ " %s"
 #~ msgstr ""
 #~ "Erro dentro do(s) diretório(s):\n"
 #~ " %s"
-
 #~ msgid "Please run yum in non-caching mode to correct this header."
 #~ msgstr ""
 #~ "Por favor, execute o yum no modo sem cache para corrigir este cabeçalho."
-
 #~ msgid "Error installing lilo.conf  The message was:\n"
 #~ msgstr "Erro ao instalar o lilo.conf. A mensagem foi:\n"
-
 #~ msgid "Error: Untrusted GPG key on %s"
 #~ msgstr "Erro: Chave GPG não confiável em %s"
-
 #~ msgid ""
 #~ "\n"
 #~ "\n"
@@ -3391,66 +3343,49 @@
 #~ "\n"
 #~ "Problema com a assinatura gpg ou com o md5sum em %s\n"
 #~ "\n"
-
 #~ msgid "No Packages Available for Update or Install"
 #~ msgstr "Nenhum Pacote Disponível para Atualização ou Instalação"
-
 #~ msgid "Found best arch for install only pkg %s"
 #~ msgstr "Encontre a melhor arquitetura para instalar apenas o pacote %s"
-
 #~ msgid "I will do the following:"
 #~ msgstr "Eu farei o seguinte:"
-
 #~ msgid "Bad URL: %s"
 #~ msgstr "URL Inválida: %s"
-
 #~ msgid "NonMatching RPM version, %s, removing."
 #~ msgstr "Versão do RPM não coincide, %s, removendo."
-
 #~ msgid "I will erase these to satisfy the dependencies:"
 #~ msgstr "Eu irei apagar isto para satisfazer as dependências:"
-
 #~ msgid "HTTP Error (%s): %s"
 #~ msgstr "Erro HTTP (%s): %s"
-
 #~ msgid "Please ask your sysadmin to update the headers on this system."
 #~ msgstr ""
 #~ "Por favor, peça ao administrador do seu sistema para atualizar os "
 #~ "cabeçalhos."
-
 #~ msgid "Putting back old headers"
 #~ msgstr "Recolocando cabeçalhos antigos"
 
 #~ msgid "Completing update for %s  - %d/%d"
 #~ msgstr "Completando atualização para %s - %d/%d"
-
 #~ msgid ""
 #~ "Error: You may need to disable gpg checking to install this package\n"
 #~ msgstr ""
 #~ "Erro: Talvez seja necessário desabilitar a verificação gpg para instalar "
 #~ "este pacote\n"
-
 #~ msgid "Options Error: no commands found"
 #~ msgstr "Erro nas opções: nenhum comando encontrado"
-
 #~ msgid "Unable to run grubby correctly: the message was:\n"
 #~ msgstr "Não foi possível executar o grubby corretamente: a mensagem foi:\n"
-
 #~ msgid "IOError - # %s - %s"
 #~ msgstr "IOError (Erro E/S) - # %s - %s"
-
 #~ msgid "Kernel Updated/Installed, checking for bootloader"
 #~ msgstr ""
 #~ "Kernel atualizado/instalado, verificando gerenciador de inicialização"
-
 #~ msgid "Need to pass a list of pkgs to install"
 #~ msgstr "É necessário passar uma lista de pacotes para instalar"
-
 #~ msgid "Insufficient server config - no servers found. Aborting."
 #~ msgstr ""
 #~ "Configuração de servidor insuficiente - nenhum servidor encontrado. "
 #~ "Abortando."
-
 #~ msgid ""
 #~ "\n"
 #~ "    Usage:  yum [options] <update | upgrade | install | info | remove | "
@@ -3496,102 +3431,76 @@
 #~ "          --version - exibe a versão do yum\n"
 #~ "          -h, --help - exibe esta tela\n"
 #~ "    "
-
 #~ msgid "From %s installing %s"
 #~ msgstr "A partir de %s, instalando %s"
-
 #~ msgid "No bootloader found, Cannot configure kernel, continuing."
 #~ msgstr ""
 #~ "Nenhum gerenciador de inicialização encontrado. Não é possível configurar "
 #~ "o kernel, continuando."
-
 #~ msgid "Attempt to delete a missing file %s - ignoring."
 #~ msgstr "Tentativa de remover um arquivo faltando %s - ignorando."
-
 #~ msgid "Getting %s"
 #~ msgstr "Obtendo %s"
-
 #~ msgid ""
 #~ "\n"
 #~ "Writing header.info file"
 #~ msgstr ""
 #~ "\n"
 #~ "Gravando arquivo header.info"
-
 #~ msgid "Gathering header information file(s) from server(s)"
 #~ msgstr ""
 #~ "Coletando arquivo(s) de informações de cabeçalhos a partir do(s) servidor"
 #~ "(es)"
-
 #~ msgid "Using cached header.info file"
 #~ msgstr "Utilizando arquivo header.info do cache"
-
 #~ msgid "localrpmdb not defined"
 #~ msgstr "localrpmdb não definido"
-
 #~ msgid "Error installing the new bootloader: \n"
 #~ msgstr "Erro ao instalar o novo gerenciador de inicialização: \n"
-
 #~ msgid "Error: Could not find the GPG Key necessary to validate pkg %s"
 #~ msgstr ""
 #~ "Erro: Não foi possível localizar a Chave GPG necessária para validar o "
 #~ "pacote %s"
-
 #~ msgid "No actions to take"
 #~ msgstr "Nenhuma ação a ser tomada"
-
 #~ msgid ""
 #~ "Available package: %s.%s %s:%s-%s from %s matches with\n"
 #~ " %s"
 #~ msgstr ""
 #~ "Pacote disponível: %s.%s %s:%s-%s de %s resultados com\n"
 #~ " %s"
-
 #~ msgid "   "
 #~ msgstr "   "
-
 #~ msgid "Error: Cannot find baseurl or name for server '%s'. Skipping"
 #~ msgstr ""
 #~ "Erro: Não foi possível localizar a baseurl ou o nome do servidor \"%s\". "
 #~ "Ignorando."
-
 #~ msgid "Odd header %s suddenly disappeared"
 #~ msgstr "Cabeçalho indefinido %s desapareceu repentinamente"
-
 #~ msgid "All dependencies resolved and no conflicts detected"
 #~ msgstr "Todas as dependências resolvidas e nenhum conflito detectado"
-
 #~ msgid "using cached groups from server: %s"
 #~ msgstr "usando grupos em cache a partir do servidor: %s"
-
 #~ msgid "Exiting."
 #~ msgstr "Saindo."
-
 #~ msgid ""
 #~ "asking for package %s.%s - does not exist in nevral - bailing out - check "
 #~ "rpmdb for errors"
 #~ msgstr ""
 #~ "perguntando pelo pacote %s.%s - não existe no nevral - saindo "
 #~ "abruptamente - verifique por erros no rpmdb"
-
 #~ msgid "Errors reported doing trial run"
 #~ msgstr "Erros reportados na execução experimental"
-
 #~ msgid "Lilo found - adding kernel to lilo and making it the default"
 #~ msgstr "Lilo encontrado - adicionando o kernel ao lilo e tornando-o padrão"
-
 #~ msgid "[update: %s]"
 #~ msgstr "[atualizar: %s]"
-
 #~ msgid "ERROR: Url Return no Content-Length  - something is wrong"
 #~ msgstr "ERRO: A URL retornou conteúdo vazio - algo está errado"
-
 #~ msgid "Got a file - yay"
 #~ msgstr "Obteve um arquivo - yay"
-
 #~ msgid "From %s updating %s"
 #~ msgstr "A partir de %s, atualizando %s"
-
 #~ msgid ""
 #~ "Usage:\n"
 #~ "yum-arch [-v] [-z] [-l] [-c] [-n] [-d] [-q] [-vv] (path of dir where "
@@ -3621,71 +3530,54 @@
 #~ "   -l  = utiliza links simbólicos como rpms válidos ao compilar "
 #~ "cabeçalhos\n"
 #~ "   -q  = faz uma exibição mais discreta"
-
 #~ msgid "The file %s is damaged."
 #~ msgstr "O arquivo %s está danificado."
-
 #~ msgid "Repo"
 #~ msgstr "Repo"
-
 #~ msgid "No bootloader found, Cannot configure kernel."
 #~ msgstr ""
 #~ "Nenhum gerenciador de inicialização encontrado. Não é possível configurar "
 #~ "o kernel."
-
 #~ msgid "Name"
 #~ msgstr "Nome"
 
 #~ msgid "Downloading needed headers"
 #~ msgstr "Baixando os cabeçalhos necessários"
-
 #~ msgid "Header for pkg %s not found"
 #~ msgstr "O cabeçalho para o pacote %s não foi encontrado"
-
 #~ msgid "Cleaning all headers"
 #~ msgstr "Limpando todos os cabeçalhos"
-
 #~ msgid "depcheck: package %s needs %s"
 #~ msgstr "verificação de dependências: o pacote %s precisa do %s"
 
 #~ msgid "Erasing: %s %d/%d"
 #~ msgstr "Apagando: %s %d/%d"
-
 #~ msgid "Nothing in any group to update or install"
 #~ msgstr "Nada em nenhum grupo para atualizar ou instalar"
-
 #~ msgid "Grub found - making this kernel the default"
 #~ msgstr "Grub encontrado - tornando este kernel o padrão"
-
 #~ msgid "Digesting rpm - %s - %d/%d"
 #~ msgstr "Preparando rpm - %s - %d/%d"
-
 #~ msgid "Damaged RPM %s, removing."
 #~ msgstr "RPM %s danificado, removendo."
-
 #~ msgid ""
 #~ "Bad Header for pkg %s.%s trying to get headers for the nevral - exiting"
 #~ msgstr ""
 #~ "Cabeçalho danificado para o pacote %s.%s, tentando obter cabeçalhos para "
 #~ "o nevral - saindo"
-
 #~ msgid ""
 #~ "Error: You may also check that you have the correct GPG keys installed"
 #~ msgstr ""
 #~ "Erro: Você também pode verificar se tem as Chaves GPG corretas instaladas"
-
 #~ msgid "No rpms to work with and no header dir. Exiting."
 #~ msgstr ""
 #~ "Nenhum diretório de cabeçalhos e nenhum rpm para ser utilizado. Saindo."
-
 #~ msgid "ignoring bad rpm: %s"
 #~ msgstr "ignorando rpm danificado: %s"
-
 #~ msgid "Directory of rpms must be a directory."
 #~ msgstr "O diretório de rpms deve ser um diretório."
-
 #~ msgid "failover: out of servers to try"
 #~ msgstr "recuperação: não há mais servidores para tentar"
-
 #~ msgid "Getting header.info from server"
 #~ msgstr "Obtendo header.info do servidor"
+
diff -ru yum-3.2.29-orig/po/sr@latin.po yum-3.2.29/po/sr@latin.po
--- yum-3.2.29-orig/po/sr@latin.po	2010-05-06 14:54:46.000000000 +0000
+++ yum-3.2.29/po/sr@latin.po	2012-10-19 11:47:01.000000000 +0000
@@ -1671,7 +1671,7 @@
 "\n"
 "Izlazim kada korisnik otkaže."
 
-#: ../yum/depsolve.py:82
+#: ../yum/depsolve.py:84
 msgid "doTsSetup() will go away in a future version of Yum.\n"
 msgstr "doTsSetup() neće biti prisutna u budućim verzijama Yuma.\n"
 
diff -ru yum-3.2.29-orig/po/sr.po yum-3.2.29/po/sr.po
--- yum-3.2.29-orig/po/sr.po	2010-05-06 14:54:46.000000000 +0000
+++ yum-3.2.29/po/sr.po	2012-10-19 11:45:11.000000000 +0000
@@ -1670,7 +1670,7 @@
 "\n"
 "Излазим када корисник откаже."
 
-#: ../yum/depsolve.py:82
+#: ../yum/depsolve.py:84
 msgid "doTsSetup() will go away in a future version of Yum.\n"
 msgstr "doTsSetup() неће бити присутна у будућим верзијама Yum-а.\n"
 
Binary files yum-3.2.29-orig/rpmUtils/updates.pyc and yum-3.2.29/rpmUtils/updates.pyc differ
Binary files yum-3.2.29-orig/shell.pyc and yum-3.2.29/shell.pyc differ
Binary files yum-3.2.29-orig/test/depsolvetests.pyc and yum-3.2.29/test/depsolvetests.pyc differ
Binary files yum-3.2.29-orig/test/merge-history-transactions-tests.pyc and yum-3.2.29/test/merge-history-transactions-tests.pyc differ
Binary files yum-3.2.29-orig/test/misc-tests.pyc and yum-3.2.29/test/misc-tests.pyc differ
Binary files yum-3.2.29-orig/test/operationstests.pyc and yum-3.2.29/test/operationstests.pyc differ
Binary files yum-3.2.29-orig/test/packagetests.pyc and yum-3.2.29/test/packagetests.pyc differ
Binary files yum-3.2.29-orig/test/settestpath.pyc and yum-3.2.29/test/settestpath.pyc differ
diff -ru yum-3.2.29-orig/test/simpleobsoletestests.py yum-3.2.29/test/simpleobsoletestests.py
--- yum-3.2.29-orig/test/simpleobsoletestests.py	2010-10-19 20:44:17.000000000 +0000
+++ yum-3.2.29/test/simpleobsoletestests.py	2012-10-19 10:32:40.000000000 +0000
@@ -588,6 +588,119 @@
         # self.assert_(res=='err', msg)
         self.assertResult([])
 
+    def testInstallObsoletenoarchTonoarch(self):
+        p = self.pkgs
+        res, msg = self.runOperation(['install', 'zsh-ng'], [p.installed_noarch], [p.obsoletes_noarch])
+        self.assert_(res=='ok', msg)
+        self.assertResult((p.obsoletes_noarch,))
+
+    def _MultiObsHelper(self):
+        ret = {'zsh'  : FakePackage('zsh', '1', '1', '0', 'noarch'),
+               'ksh'  : FakePackage('ksh', '1', '1', '0', 'noarch'),
+               'nash' : FakePackage('nash', '1', '1', '0', 'noarch')}
+        ret['pi'] = [ret['zsh'], ret['ksh'], ret['nash']]
+              
+        ret['fish'] = FakePackage('fish', '0.1', '1', '0', 'noarch')
+        ret['fish'].addObsoletes('zsh', None, (None, None, None))
+        ret['bigfish'] = FakePackage('bigfish', '0.2', '1', '0', 'noarch')
+        ret['bigfish'].addObsoletes('zsh', None, (None, None, None))
+        ret['bigfish'].addObsoletes('ksh', None, (None, None, None))
+        ret['shark'] = FakePackage('shark', '0.3', '1', '0', 'noarch')
+        ret['shark'].addObsoletes('zsh', None, (None, None, None))
+        ret['shark'].addObsoletes('ksh', None, (None, None, None))
+        ret['shark'].addObsoletes('nash', None, (None, None, None))
+
+        ret['po'] = [ret['fish'], ret['bigfish'], ret['shark']]
+        return ret
+
+    def testMultiObs1(self):
+        pkgs = self._MultiObsHelper()
+        res, msg = self.runOperation(['install', 'fish'],
+                                     pkgs['pi'], pkgs['po'])
+        self.assert_(res=='ok', msg)
+        self.assertResult((pkgs['ksh'],pkgs['nash'],pkgs['fish'],))
+
+    def testMultiObs2(self):
+        pkgs = self._MultiObsHelper()
+        res, msg = self.runOperation(['install', 'bigfish'],
+                                     pkgs['pi'], pkgs['po'])
+        self.assert_(res=='ok', msg)
+        self.assertResult((pkgs['nash'],pkgs['bigfish'],))
+
+    def testMultiObs3(self):
+        pkgs = self._MultiObsHelper()
+        res, msg = self.runOperation(['install', 'shark'],
+                                     pkgs['pi'], pkgs['po'])
+        self.assert_(res=='ok', msg)
+        self.assertResult((pkgs['shark'],))
+
+    def testMultiObs4(self):
+        # This tests update...
+        pkgs = self._MultiObsHelper()
+        oldshark = FakePackage('shark', '0.1', '1', '0', 'noarch')
+
+        res, msg = self.runOperation(['update', 'shark'],
+                                     pkgs['pi'] + [oldshark], pkgs['po'])
+        self.assert_(res=='ok', msg)
+        self.assertResult((pkgs['shark'],))
+
+    def testMultiObs5(self):
+        # This tests update of the to be obsoleted pkg...
+        pkgs = self._MultiObsHelper()
+        oldshark = FakePackage('shark', '0.1', '1', '0', 'noarch')
+
+        res, msg = self.runOperation(['update', 'nash'],
+                                     pkgs['pi'] + [oldshark], pkgs['po'])
+        self.assert_(res=='ok', msg)
+        self.assertResult((pkgs['shark'],))
+
+    # NOTE: Do we really want to remove the old kernel-xen? ... not 100% sure
+    def testMultiObsKern1(self):
+        # kernel + kernel-xen installed, and update kernel obsoletes kernel-xen
+        okern1    = FakePackage('kernel',     '0.1', '1', '0', 'noarch')
+        okern2    = FakePackage('kernel',     '0.2', '1', '0', 'noarch')
+        okernxen1 = FakePackage('kernel-xen', '0.1', '1', '0', 'noarch')
+        okernxen2 = FakePackage('kernel-xen', '0.2', '1', '0', 'noarch')
+        nkern     = FakePackage('kernel',     '0.8', '1', '0', 'noarch')
+        nkern.addObsoletes('kernel-xen', None, (None, None, None))
+
+        res, msg = self.runOperation(['update', 'kernel'],
+                                     [okern1, okernxen1,
+                                      okern2, okernxen2], [nkern])
+        self.assert_(res=='ok', msg)
+        self.assertResult((okern1,okern2,nkern,))
+
+    def testMultiObsKern2(self):
+        # kernel + kernel-xen installed, and update kernel obsoletes kernel-xen
+        okern1    = FakePackage('kernel',     '0.1', '1', '0', 'noarch')
+        okern2    = FakePackage('kernel',     '0.2', '1', '0', 'noarch')
+        okernxen1 = FakePackage('kernel-xen', '0.1', '1', '0', 'noarch')
+        okernxen2 = FakePackage('kernel-xen', '0.2', '1', '0', 'noarch')
+        nkern     = FakePackage('kernel',     '0.8', '1', '0', 'noarch')
+        nkern.addObsoletes('kernel-xen', None, (None, None, None))
+
+        res, msg = self.runOperation(['update', 'kernel-xen'],
+                                     [okern1, okernxen1,
+                                      okern2, okernxen2], [nkern])
+        self.assert_(res=='ok', msg)
+        self.assertResult((okern1,okern2,nkern,))
+
+    def testMultiObsKern3(self):
+        # kernel + kernel-xen installed, and update kernel obsoletes kernel-xen
+        okern1    = FakePackage('kernel',     '0.1', '1', '0', 'noarch')
+        okern2    = FakePackage('kernel',     '0.2', '1', '0', 'noarch')
+        okernxen1 = FakePackage('kernel-xen', '0.1', '1', '0', 'noarch')
+        okernxen2 = FakePackage('kernel-xen', '0.2', '1', '0', 'noarch')
+        nkern     = FakePackage('kernel',     '0.8', '1', '0', 'noarch')
+        nkern.addObsoletes('kernel-xen', None, (None, None, None))
+
+        res, msg = self.runOperation(['update'],
+                                     [okern1, okernxen1,
+                                      okern2, okernxen2], [nkern])
+        self.assert_(res=='ok', msg)
+        self.assertResult((okern1,okern2,nkern,))
+
+
 class GitMetapackageObsoletesTests(OperationsTests):
 
     @staticmethod
Binary files yum-3.2.29-orig/test/simpleobsoletestests.pyc and yum-3.2.29/test/simpleobsoletestests.pyc differ
Binary files yum-3.2.29-orig/test/simpleremovetests.pyc and yum-3.2.29/test/simpleremovetests.pyc differ
Binary files yum-3.2.29-orig/test/simpleupdatetests.pyc and yum-3.2.29/test/simpleupdatetests.pyc differ
Binary files yum-3.2.29-orig/test/skipbroken-tests.pyc and yum-3.2.29/test/skipbroken-tests.pyc differ
diff -ru yum-3.2.29-orig/test/testbase.py yum-3.2.29/test/testbase.py
--- yum-3.2.29-orig/test/testbase.py	2010-12-07 21:57:47.000000000 +0000
+++ yum-3.2.29/test/testbase.py	2012-10-19 12:01:16.000000000 +0000
@@ -126,7 +126,6 @@
 class _Container(object):
     pass
 
-
 class DepSolveProgressCallBack:
     """provides text output callback functions for Dependency Solver callback"""
     
@@ -252,6 +251,8 @@
             errors.append("\n")
             self.fail("".join(errors))
 
+
+
 class FakeRpmDb(packageSack.PackageSack):
     '''
     We use a PackagePack for a Fake rpmdb insted of the normal
Binary files yum-3.2.29-orig/test/testbase.pyc and yum-3.2.29/test/testbase.pyc differ
Binary files yum-3.2.29-orig/test/transactiontests.pyc and yum-3.2.29/test/transactiontests.pyc differ
Binary files yum-3.2.29-orig/yum/comps.pyc and yum-3.2.29/yum/comps.pyc differ
Binary files yum-3.2.29-orig/yum/config.pyc and yum-3.2.29/yum/config.pyc differ
Binary files yum-3.2.29-orig/yum/depsolve.pyc and yum-3.2.29/yum/depsolve.pyc differ
diff -ru yum-3.2.29-orig/yum/Errors.py yum-3.2.29/yum/Errors.py
--- yum-3.2.29-orig/yum/Errors.py	2010-12-11 05:16:00.000000000 +0000
+++ yum-3.2.29/yum/Errors.py	2012-10-19 10:32:40.000000000 +0000
@@ -34,6 +34,9 @@
     def __unicode__(self):
         return '%s' % to_unicode(self.value)
 
+    def __unicode__(self):
+        return '%s' % to_unicode(self.value)
+
 class YumGPGCheckError(YumBaseError):
     pass
 
Binary files yum-3.2.29-orig/yum/Errors.pyc and yum-3.2.29/yum/Errors.pyc differ
Binary files yum-3.2.29-orig/yum/i18n.pyc and yum-3.2.29/yum/i18n.pyc differ
diff -ru yum-3.2.29-orig/yum/__init__.py yum-3.2.29/yum/__init__.py
--- yum-3.2.29-orig/yum/__init__.py	2011-01-13 05:28:12.000000000 +0000
+++ yum-3.2.29/yum/__init__.py	2012-10-19 11:28:02.000000000 +0000
@@ -3260,6 +3260,15 @@
             if flag not in self.tsInfo.probFilterFlags:
                 self.tsInfo.probFilterFlags.append(flag)
 
+    def _find_obsoletees(self, po):
+        """ Return the pkgs. that are obsoleted by the po we pass in. """
+        for (obstup, inst_tup) in self.up.getObsoletesTuples(name=po.name, 
+                                                             arch=po.arch):
+            if po.pkgtup == obstup:
+                installed_pkg =  self.rpmdb.searchPkgTuple(inst_tup)[0]
+                yield installed_pkg
+
+
     def install(self, po=None, **kwargs):
         """try to mark for install the item specified. Uses provided package 
            object, if available. If not it uses the kwargs and gets the best
@@ -3433,6 +3442,16 @@
                     tx_return.extend(self.install(po=obsoleting_pkg))
                 continue
             
+            #  Make sure we're not installing a package which is obsoleted by
+            # something else in the repo. Unless there is a obsoletion loop,
+            # at which point ignore everything.
+            obsoleting_pkg = self._test_loop(po, self._pkg2obspkg)
+            if obsoleting_pkg is not None:
+                self.verbose_logger.warning(_('Package %s is obsoleted by %s, trying to install %s instead'),
+                    po.name, obsoleting_pkg.name, obsoleting_pkg)               
+                self.install(po=obsoleting_pkg)
+                continue
+            
             # make sure it's not already installed
             if self.rpmdb.contains(po=po):
                 if not self.tsInfo.getMembersWithState(po.pkgtup, TS_REMOVE_STATES):
Binary files yum-3.2.29-orig/yum/__init__.pyc and yum-3.2.29/yum/__init__.pyc differ
Binary files yum-3.2.29-orig/yum/metalink.pyc and yum-3.2.29/yum/metalink.pyc differ
diff -ru yum-3.2.29-orig/yum/misc.py yum-3.2.29/yum/misc.py
--- yum-3.2.29-orig/yum/misc.py	2010-12-23 20:16:25.000000000 +0000
+++ yum-3.2.29/yum/misc.py	2012-10-19 11:34:21.000000000 +0000
@@ -292,6 +292,17 @@
             checksum = 'sha1'
         return self.digests()[checksum]
 
+    def digests(self):
+        ret = {}
+        for sumtype, sumdata in zip(self._sumtypes, self._sumalgos):
+            ret[sumtype] = sumdata.digest()
+        return ret
+
+    def digest(self, checksum=None):
+        if checksum is None:
+            checksum = self._sumtypes[0]
+        return self.digests()[checksum]
+
 
 class AutoFileChecksums:
     """ Generate checksum(s), on given file/fileobject. Pretending to be a file
Binary files yum-3.2.29-orig/yum/misc.pyc and yum-3.2.29/yum/misc.pyc differ
Binary files yum-3.2.29-orig/yum/packages.pyc and yum-3.2.29/yum/packages.pyc differ
Binary files yum-3.2.29-orig/yum/parser.pyc and yum-3.2.29/yum/parser.pyc differ
Binary files yum-3.2.29-orig/yum/pgpmsg.pyc and yum-3.2.29/yum/pgpmsg.pyc differ
diff -ru yum-3.2.29-orig/yum/plugins.py yum-3.2.29/yum/plugins.py
--- yum-3.2.29-orig/yum/plugins.py	2010-09-20 14:37:36.000000000 +0000
+++ yum-3.2.29/yum/plugins.py	2012-10-19 10:32:40.000000000 +0000
@@ -37,6 +37,8 @@
 
 from yum.i18n import utf8_width
 
+from yum.i18n import utf8_width, utf8_width_fill
+
 # TODO: expose rpm package sack objects to plugins (once finished)
 # TODO: allow plugins to use the existing config stuff to define options for
 # their own configuration files (would replace confString() etc).
Binary files yum-3.2.29-orig/yum/plugins.pyc and yum-3.2.29/yum/plugins.pyc differ
Binary files yum-3.2.29-orig/yum/sqlitesack.pyc and yum-3.2.29/yum/sqlitesack.pyc differ
diff -ru yum-3.2.29-orig/yum/yumRepo.py yum-3.2.29/yum/yumRepo.py
--- yum-3.2.29-orig/yum/yumRepo.py	2011-01-11 16:06:39.000000000 +0000
+++ yum-3.2.29/yum/yumRepo.py	2012-10-19 14:10:25.000000000 +0000
@@ -285,6 +285,7 @@
 
         self._grabfunc = None
         self._grab = None
+        self._override_sigchecks = False
 
     def __cmp__(self, other):
         """ Sort yum repos. by cost, and then by alphanumeric on their id. """
@@ -997,6 +998,11 @@
 
     def _getFileRepoXML(self, local, text=None, grab_can_fail=None):
         """ Call _getFile() for the repomd.xml file. """
+        def _cleanup_tmp():
+            try:
+                os.unlink(tfname)
+            except:
+                pass
         checkfunc = (self._checkRepoXML, (), {})
         if grab_can_fail is None:
             grab_can_fail = 'old_repo_XML' in self._oldRepoMDData
Binary files yum-3.2.29-orig/yum/yumRepo.pyc and yum-3.2.29/yum/yumRepo.pyc differ
diff -ru yum-3.2.29-orig/yumcommands.py yum-3.2.29/yumcommands.py
--- yum-3.2.29-orig/yumcommands.py	2010-11-03 21:28:36.000000000 +0000
+++ yum-3.2.29/yumcommands.py	2012-10-19 10:39:20.000000000 +0000
@@ -29,7 +29,8 @@
 import locale
 import fnmatch
 import time
-from yum.i18n import utf8_width, utf8_width_fill, to_unicode
+from yum.misc import to_unicode
+from yum.i18n import utf8_width, utf8_width_fill
 
 import yum.config
 
@@ -656,6 +657,15 @@
                 print _('Obsoleting Packages')
                 # The tuple is (newPkg, oldPkg) ... so sort by new
                 for obtup in sorted(ypl.obsoletesTuples,
+                                    key=operator.itemgetter(0)):
+                    base.updatesObsoletesList(obtup, 'obsoletes',
+                                              columns=columns)
+                result = 100
+            if len(ypl.obsoletes) > 0: # This only happens in verbose mode
+                rop = [0, '']
+                print _('Obsoleting Packages')
+                # The tuple is (newPkg, oldPkg) ... so sort by new
+                for obtup in sorted(ypl.obsoletesTuples,
                                     key=operator.itemgetter(0)):
                     base.updatesObsoletesList(obtup, 'obsoletes',
                                               columns=columns)
Binary files yum-3.2.29-orig/yumcommands.pyc and yum-3.2.29/yumcommands.pyc differ
Only in yum-3.2.29/: yum-HEAD.patch
