[yum-git] Branch 'yum-3_2_X' - 22 commits - docs/yum.8 docs/yum.conf.5 README.API_CHANGES rpmUtils/miscutils.py test/depsolvetests.py test/operationstests.py test/packagetests.py test/simpleobsoletestests.py test/simpleupdatetests.py test/skipbroken-tests.py test/testbase.py yum/depsolve.py yum/__init__.py yum/packageSack.py yum/packages.py yum/rpmsack.py yum/sqlitesack.py

Seth Vidal skvidal at linux.duke.edu
Fri May 30 14:50:12 UTC 2008


 README.API_CHANGES           |   11 ++
 docs/yum.8                   |    4 
 docs/yum.conf.5              |    4 
 rpmUtils/miscutils.py        |   46 +++-----
 test/depsolvetests.py        |  114 +++++++++++-----------
 test/operationstests.py      |   10 -
 test/packagetests.py         |   60 ++++++-----
 test/simpleobsoletestests.py |    6 -
 test/simpleupdatetests.py    |    8 -
 test/skipbroken-tests.py     |   36 +++---
 test/testbase.py             |   16 ++-
 yum/__init__.py              |   12 --
 yum/depsolve.py              |  222 ++++++++++++-------------------------------
 yum/packageSack.py           |   99 ++++---------------
 yum/packages.py              |    8 -
 yum/rpmsack.py               |  128 ++++++------------------
 yum/sqlitesack.py            |   92 ++++++++---------
 17 files changed, 340 insertions(+), 536 deletions(-)

New commits:
commit d6eea66e257a7563489953e7aa971f4ee7ddecd7
Merge: 4c25e7a... 32d40d2...
Author: Seth Vidal <skvidal at fedoraproject.org>
Date:   Fri May 30 10:49:16 2008 -0400

    Merge branch 'yum-3_2_X' of ssh://login1.linux.duke.edu/home/groups/yum/git/yum into yum-3_2_X
    
    * 'yum-3_2_X' of ssh://login1.linux.duke.edu/home/groups/yum/git/yum:
      Allow non-obs. looping installs too :)
      Work around mutual obs. looping insanity
      update sr & sr at latin translation by Igor Miletic
      Fix i18n for y/N prompt and sr_RS.utf8 locale, also allow y/N if no overlap
      Fix -y config. option in man page: bug#447305
      Allow -c URL to work again
      commit and/or match from HEAD back to 3.2.X
      mention the branch name specifically
      label as 3.2.X branch

commit 4c25e7ad472722a2e2b0a02aa4c2d02bfb5446bb
Author: Seth Vidal <skvidal at fedoraproject.org>
Date:   Fri May 30 10:28:25 2008 -0400

    man page patch to close #446587

diff --git a/docs/yum.8 b/docs/yum.8
index 8845989..4b82533 100644
--- a/docs/yum.8
+++ b/docs/yum.8
@@ -282,8 +282,8 @@ Run with gpg signature checking disabled.
 .br
 Configuration Option: \fBgpgcheck\fP
 .IP "\fB\-\-skip\-broken\fP"
-Resolve depsolve problems by removing packages there is causing problems
- from the transaction.
+Resolve depsolve problems by removing packages that are causing problems
+from the transaction.
 .br
 Configuration Option: \fBskip_broken\fP
 .PP 
diff --git a/docs/yum.conf.5 b/docs/yum.conf.5
index 54eb8b8..d8b541a 100644
--- a/docs/yum.conf.5
+++ b/docs/yum.conf.5
@@ -60,6 +60,10 @@ default for all repositories. This option also determines whether or not an
 install of a package from a local RPM file will be GPG signature checked. The
 default is `0'.
 
+.IP \fBskip_broken\fR
+Either `1' or `0'. Resolve depsolve problems by removing packages that
+are causing problems from the transaction.
+
 .IP \fBassumeyes\fR
 Either `1' or `0'. Determines whether or not yum prompts for confirmation of
 critical actions. Default is `0' (do prompt).
commit 01c63334866e2adda4141cfed007322c39bbed03
Author: James Antill <james at and.org>
Date:   Tue May 27 11:26:07 2008 -0400

    Fix i18n for y/N prompt and sr_RS.utf8 locale, also allow y/N if no overlap

diff --git a/output.py b/output.py
index 752e18b..f7fbfbb 100644
--- a/output.py
+++ b/output.py
@@ -28,7 +28,7 @@ import re # For YumTerm
 
 from urlgrabber.progress import TextMeter
 from urlgrabber.grabber import URLGrabError
-from yum.misc import sortPkgObj, prco_tuple_to_string, to_str, to_unicode_maybe, get_my_lang_code
+from yum.misc import sortPkgObj, prco_tuple_to_string, to_str, to_unicode, get_my_lang_code
 from rpmUtils.miscutils import checkSignals
 from yum.constants import *
 
@@ -346,6 +346,9 @@ class YumOutput:
     def userconfirm(self):
         """gets a yes or no from the user, defaults to No"""
 
+        yui = (to_unicode(_('y')), to_unicode(_('yes')))
+        nui = (to_unicode(_('n')), to_unicode(_('no')))
+        aui = (yui[0], yui[1], nui[0], nui[1])
         while True:
             try:
                 choice = raw_input(_('Is this ok [y/N]: '))
@@ -355,11 +358,18 @@ class YumOutput:
                 raise
             except:
                 choice = ''
+            choice = to_unicode(choice)
             choice = choice.lower()
-            if len(choice) == 0 or choice in [_('y'), _('n'), _('yes'), _('no')]:
+            if len(choice) == 0 or choice in aui:
+                break
+            # If the enlish one letter names don't mix, allow them too
+            if u'y' not in aui and u'y' == choice:
+                choice = yui[0]
+                break
+            if u'n' not in aui and u'n' == choice:
                 break
 
-        if len(choice) == 0 or choice not in [_('y'), _('yes')]:
+        if len(choice) == 0 or choice not in yui:
             return False
         else:            
             return True
@@ -369,7 +379,7 @@ class YumOutput:
         mylang = get_my_lang_code()
         print _('\nGroup: %s') % group.nameByLang(mylang)
         if group.descriptionByLang(mylang) != "":
-            print _(' Description: %s') % to_unicode_maybe(group.descriptionByLang(mylang))
+            print _(' Description: %s') % to_unicode(group.descriptionByLang(mylang))
         if len(group.mandatory_packages) > 0:
             print _(' Mandatory Packages:')
             for item in sorted(group.mandatory_packages):
@@ -750,7 +760,7 @@ class YumCliRPMCallBack(RPMBaseCallback):
             fmt = self._makefmt(percent, ts_current, ts_total)
             msg = fmt % (process, pkgname)
             if msg != self.lastmsg:
-                sys.stdout.write(to_unicode_maybe(msg))
+                sys.stdout.write(to_unicode(msg))
                 sys.stdout.flush()
                 self.lastmsg = msg
             if te_current == te_total:
@@ -758,7 +768,7 @@ class YumCliRPMCallBack(RPMBaseCallback):
 
     def scriptout(self, package, msgs):
         if msgs:
-            sys.stdout.write(to_unicode_maybe(msgs))
+            sys.stdout.write(to_unicode(msgs))
             sys.stdout.flush()
 
     def _makefmt(self, percent, ts_current, ts_total, progress = True):
commit 896e244275495d2c31d343509109728617dcfcf4
Author: Seth Vidal <skvidal at fedoraproject.org>
Date:   Fri May 16 17:22:39 2008 -0400

    mention the branch name specifically

diff --git a/README b/README
index edb75d1..b2c3bff 100644
--- a/README
+++ b/README
@@ -29,4 +29,5 @@ Also see the webpage and wiki for more information:
 web page: http://linux.duke.edu/yum/
 wiki: http://wiki.linux.duke.edu/Yum
 
-3.2.X Branch
+3.2.X Branch - yum-3_2_X
+
commit 4c5834f09de5b46c6ab2683400e2ec2b36c760bd
Author: Seth Vidal <skvidal at fedoraproject.org>
Date:   Fri May 16 16:20:10 2008 -0400

    label as 3.2.X branch

diff --git a/README b/README
index 6bb0c7c..edb75d1 100644
--- a/README
+++ b/README
@@ -28,3 +28,5 @@ See the man page for more information (man yum)
 Also see the webpage and wiki for more information:
 web page: http://linux.duke.edu/yum/
 wiki: http://wiki.linux.duke.edu/Yum
+
+3.2.X Branch
commit 64e13a38c203303e91e0ff0c3b831ddc2de62f19
Merge: 7bf7ce0... 496fd8e...
Author: James Antill <james at and.org>
Date:   Tue May 27 09:42:00 2008 -0400

    Merge branch 'master' of ssh://login.linux.duke.edu/home/groups/yum/git/yum
    
    * 'master' of ssh://login.linux.duke.edu/home/groups/yum/git/yum:
      update sr & sr at latin translation by Igor Miletic
      Remove old excluded mechanism from SqliteSack

commit 496fd8ef6269b8f5e9300b77817f806b59332d94
Author: Tim Lauridsen <timlau at fedoraproject.org>
Date:   Tue May 27 15:16:45 2008 +0200

    update sr & sr at latin translation by Igor Miletic

diff --git a/po/sr.po b/po/sr.po
index 2d3094f..0f51d47 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -1,56 +1,57 @@
-# translation of yum.master.sr.po to Serbian
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
+# translation of sr.po to Serbian
+# Serbian translations for yum
+# Copyright (C) 2008 Linux at Duke
+# This file is distributed under the same license as the yum package.
 #
 # Jovan Krunic <jovan.krunic at gmail.com>, 2008.
 # Igor Miletic <grejigl-gnomeprevod at yahoo.ca>, 2008.
+# Miloš Komarčević <kmilos at gmail.com>, 2008.
 msgid ""
 msgstr ""
-"Project-Id-Version: yum.master.sr\n"
+"Project-Id-Version: yum\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-04-07 21:19+0000\n"
-"PO-Revision-Date: 2008-04-07 23:57-0400\n"
-"Last-Translator: Igor Miletic <grejigl-gnomeprevod at yahoo.ca>\n"
-"Language-Team: Serbian <fedora-trans-sr at redhat.com>\n"
+"POT-Creation-Date: 2008-05-26 13:28+0000\n"
+"PO-Revision-Date: 2008-05-26 20:30-0000\n"
+"Last-Translator: Miloš Komarčević <kmilos at gmail.com>\n"
+"Language-Team: Serbian (sr) <fedora-trans-sr at redhat.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms:  nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
 "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: ../callback.py:48 ../output.py:513 ../yum/rpmtrans.py:71
+#: ../callback.py:48 ../output.py:516 ../yum/rpmtrans.py:71
 msgid "Updating"
-msgstr "Aжурирање"
+msgstr "Aжурирам"
 
 #: ../callback.py:49 ../yum/rpmtrans.py:72
 msgid "Erasing"
-msgstr "Брисање"
+msgstr "Бришем"
 
-#: ../callback.py:50 ../callback.py:51 ../callback.py:53 ../output.py:512
+#: ../callback.py:50 ../callback.py:51 ../callback.py:53 ../output.py:515
 #: ../yum/rpmtrans.py:73 ../yum/rpmtrans.py:74 ../yum/rpmtrans.py:76
 msgid "Installing"
-msgstr "Инсталирање"
+msgstr "Инсталирам"
 
 #: ../callback.py:52 ../callback.py:58 ../yum/rpmtrans.py:75
 msgid "Obsoleted"
 msgstr "Превазиђени"
 
-#: ../callback.py:54 ../output.py:559
+#: ../callback.py:54 ../output.py:562
 msgid "Updated"
-msgstr "Ажурирано"
+msgstr "Ажурирани"
 
 #: ../callback.py:55
 msgid "Erased"
-msgstr "Обрисано"
+msgstr "Обрисани"
 
-#: ../callback.py:56 ../callback.py:57 ../callback.py:59 ../output.py:557
+#: ../callback.py:56 ../callback.py:57 ../callback.py:59 ../output.py:560
 msgid "Installed"
-msgstr "Инсталирано"
+msgstr "Инсталирани"
 
 #: ../callback.py:130
 msgid "No header - huh?"
-msgstr "Нема заглавља - је ли?"
+msgstr "Нема заглавља - хм?"
 
 #: ../callback.py:168
 msgid "Repackage"
@@ -66,7 +67,7 @@ msgstr "Грешка: погрешно излазно стање: %s за %s"
 msgid "Erased: %s"
 msgstr "Обрисано: %s"
 
-#: ../callback.py:217 ../output.py:514
+#: ../callback.py:217 ../output.py:517
 msgid "Removing"
 msgstr "Уклањам"
 
@@ -74,45 +75,45 @@ msgstr "Уклањам"
 msgid "Cleanup"
 msgstr "Чишћење"
 
-#: ../cli.py:103
+#: ../cli.py:105
 #, python-format
 msgid "Command \"%s\" already defined"
 msgstr "Наредба „%s“ је већ дефинисана"
 
-#: ../cli.py:115
+#: ../cli.py:117
 msgid "Setting up repositories"
 msgstr "Постављам ризнице"
 
-#: ../cli.py:126
+#: ../cli.py:128
 msgid "Reading repository metadata in from local files"
 msgstr "Читам метаподатке ризница из локалних датотека"
 
-#: ../cli.py:183 ../utils.py:72
+#: ../cli.py:185 ../utils.py:71
 #, python-format
 msgid "Config Error: %s"
 msgstr "Грешка при подешавању: %s"
 
-#: ../cli.py:186 ../cli.py:1070 ../utils.py:75
+#: ../cli.py:188 ../cli.py:1080 ../utils.py:74
 #, python-format
 msgid "Options Error: %s"
 msgstr "Грешка у опцијама: %s"
 
-#: ../cli.py:229
+#: ../cli.py:231
 msgid "You need to give some command"
 msgstr "Морате да унесете неку команду"
 
-#: ../cli.py:271
+#: ../cli.py:273
 msgid "Disk Requirements:\n"
 msgstr "Захтеви диска:\n"
 
-#: ../cli.py:273
+#: ../cli.py:275
 #, python-format
 msgid "  At least %dMB needed on the %s filesystem.\n"
-msgstr "  Најмање %dMB је потребно на вашем %s систему датотека.\n"
+msgstr "  Потребно је најмање %dМБ на %s систему датотека.\n"
 
 #. TODO: simplify the dependency errors?
 #. Fixup the summary
-#: ../cli.py:278
+#: ../cli.py:280
 msgid ""
 "Error Summary\n"
 "-------------\n"
@@ -120,225 +121,223 @@ msgstr ""
 "Сажетак грешака\n"
 "-------------\n"
 
-#: ../cli.py:317
+#: ../cli.py:319
 msgid "Trying to run the transaction but nothing to do. Exiting."
-msgstr ""
-"Покушавам да извршавам пренос али нема ништа што могу да урадим. Излазим."
+msgstr "Покушавам да извршим трансакцију али нема шта да се ради. Излазим."
 
-#: ../cli.py:347
+#: ../cli.py:349
 msgid "Exiting on user Command"
 msgstr "Излазим на команду корисника"
 
-#: ../cli.py:351
+#: ../cli.py:353
 msgid "Downloading Packages:"
 msgstr "Преузимам пакете:"
 
-#: ../cli.py:356
+#: ../cli.py:358
 msgid "Error Downloading Packages:\n"
 msgstr "Грешка при преузимању пакета:\n"
 
-#: ../cli.py:370 ../yum/__init__.py:2791
+#: ../cli.py:372 ../yum/__init__.py:2816
 msgid "Running rpm_check_debug"
 msgstr "Извршавам rpm_check_debug"
 
-#: ../cli.py:373 ../yum/__init__.py:2794
+#: ../cli.py:375 ../yum/__init__.py:2819
 msgid "ERROR with rpm_check_debug vs depsolve:"
 msgstr "ГРЕШКА са rpm_check_debug у односу на depsolve:"
 
-#: ../cli.py:377 ../yum/__init__.py:2796
+#: ../cli.py:379 ../yum/__init__.py:2821
 msgid "Please report this error in bugzilla"
 msgstr "Молим вас, пријавите ову грешку у bugzilla-и"
 
-#: ../cli.py:383
+#: ../cli.py:385
 msgid "Running Transaction Test"
-msgstr "Извршавам проверу преноса"
+msgstr "Извршавам проверу трансакције"
 
-#: ../cli.py:399
+#: ../cli.py:401
 msgid "Finished Transaction Test"
-msgstr "Завршио сам проверу преноса"
+msgstr "Завршио сам проверу трансакције"
 
-#: ../cli.py:401
+#: ../cli.py:403
 msgid "Transaction Check Error:\n"
-msgstr "Грешка при провери преноса:\n"
+msgstr "Грешка при провери трансакције:\n"
 
-#: ../cli.py:408
+#: ../cli.py:410
 msgid "Transaction Test Succeeded"
-msgstr "Провера преноса успела"
+msgstr "Провера трансакције је успела"
 
-#: ../cli.py:429
+#: ../cli.py:431
 msgid "Running Transaction"
-msgstr "Извршавам пренос"
+msgstr "Извршавам трансакцију"
 
-#: ../cli.py:459
+#: ../cli.py:461
 msgid ""
 "Refusing to automatically import keys when running unattended.\n"
 "Use \"-y\" to override."
 msgstr ""
-"Одбијање да се аутоматски увезу кључеви када се извршавање не надгледа.\n"
+"Одбијам да аутоматски увезем кључеве када се извршавање не надгледа.\n"
 "За превазилажење овога користите „-y“."
 
-#: ../cli.py:491
+#: ../cli.py:493
 msgid "Parsing package install arguments"
 msgstr "Рашчлањујем аргументе инсталације пакета"
 
-#: ../cli.py:501
+#: ../cli.py:503
 #, python-format
 msgid "No package %s available."
 msgstr "Не постоји доступан %s пакет."
 
-#: ../cli.py:505 ../cli.py:623 ../yumcommands.py:777
+#: ../cli.py:507 ../cli.py:625 ../yumcommands.py:790
 msgid "Package(s) to install"
 msgstr "Пакет(и) који ће се инсталирати"
 
-#: ../cli.py:506 ../cli.py:624 ../yumcommands.py:147 ../yumcommands.py:778
+#: ../cli.py:508 ../cli.py:626 ../yumcommands.py:147 ../yumcommands.py:791
 msgid "Nothing to do"
-msgstr "Нема ништа да се уради"
+msgstr "Нема шта да се ради"
 
-#: ../cli.py:536 ../yum/__init__.py:2252 ../yum/__init__.py:2352
-#: ../yum/__init__.py:2364
+#: ../cli.py:538 ../yum/__init__.py:2268 ../yum/__init__.py:2368
+#: ../yum/__init__.py:2380
 #, python-format
 msgid "Not Updating Package that is already obsoleted: %s.%s %s:%s-%s"
 msgstr "Не ажурирам пакете који су већ превазиђени: %s.%s %s:%s-%s"
 
-#: ../cli.py:568
+#: ../cli.py:570
 #, python-format
 msgid "Could not find update match for %s"
 msgstr "Не могу да пронађем одговарајуће ажурирање за %s"
 
-#: ../cli.py:580
+#: ../cli.py:582
 #, python-format
 msgid "%d packages marked for Update"
 msgstr "%d пакети означени за ажурирање"
 
-#: ../cli.py:583
+#: ../cli.py:585
 msgid "No Packages marked for Update"
 msgstr "Нема пакета означених за ажурирање"
 
-#: ../cli.py:599
+#: ../cli.py:601
 #, python-format
 msgid "%d packages marked for removal"
 msgstr "%d пакети означени за уклањање"
 
-#: ../cli.py:602
+#: ../cli.py:604
 msgid "No Packages marked for removal"
 msgstr "Нема пакета означених за уклањање"
 
-#: ../cli.py:614
+#: ../cli.py:616
 msgid "No Packages Provided"
 msgstr "Ниједан пакет није добављен"
 
-#: ../cli.py:654
+#: ../cli.py:656
 msgid "Matching packages for package list to user args"
 msgstr "Повезивање пакета за списак пакета по аргументима корисника"
 
-#: ../cli.py:701
+#: ../cli.py:704
 #, python-format
 msgid "Warning: No matches found for: %s"
-msgstr "Упозорење: Није нађено подударање за %s"
+msgstr "Упозорење: није нађено подударање за %s"
 
-#: ../cli.py:704
+#: ../cli.py:707
 msgid "No Matches found"
 msgstr "Нису пронађена подударања"
 
-#: ../cli.py:745
+#: ../cli.py:748
 #, python-format
 msgid "No Package Found for %s"
 msgstr "Нису пронађени пакети за %s"
 
-#: ../cli.py:757
+#: ../cli.py:760
 msgid "Cleaning up Everything"
 msgstr "Чистим све"
 
-#: ../cli.py:771
+#: ../cli.py:774
 msgid "Cleaning up Headers"
 msgstr "Чистим заглавља"
 
-#: ../cli.py:774
+#: ../cli.py:777
 msgid "Cleaning up Packages"
 msgstr "Чистим пакете"
 
-#: ../cli.py:777
+#: ../cli.py:780
 msgid "Cleaning up xml metadata"
 msgstr "Чистим xml метаподатке"
 
-#: ../cli.py:780
+#: ../cli.py:783
 msgid "Cleaning up database cache"
 msgstr "Чистим кеш база података"
 
-#: ../cli.py:783
+#: ../cli.py:786
 msgid "Cleaning up expire-cache metadata"
 msgstr "Чистим expire-cache метаподатке"
 
-#: ../cli.py:786
+#: ../cli.py:789
 msgid "Cleaning up plugins"
 msgstr "Чистим додатке"
 
-#: ../cli.py:807
+#: ../cli.py:811
 msgid "Installed Groups:"
 msgstr "Инсталиране групе:"
 
-#: ../cli.py:814
+#: ../cli.py:818
 msgid "Available Groups:"
 msgstr "Доступне групе:"
 
-#: ../cli.py:820
+#: ../cli.py:824
 msgid "Done"
 msgstr "Урађено"
 
-#: ../cli.py:829 ../cli.py:841 ../cli.py:847
+#: ../cli.py:835 ../cli.py:853 ../cli.py:859
 #, python-format
 msgid "Warning: Group %s does not exist."
 msgstr "Упозорење: група %s не постоји."
 
-#: ../cli.py:853
+#: ../cli.py:863
 msgid "No packages in any requested group available to install or update"
 msgstr ""
-"Нема пакета у свим захтеваним групама, који су доступни за инсталацију или "
-"ажурирање"
+"Нема доступних пакета за инсталацију или ажурирање у свим захтеваним групама"
 
-#: ../cli.py:855
+#: ../cli.py:865
 #, python-format
 msgid "%d Package(s) to Install"
 msgstr "%d пакет(и) за инсталацију"
 
-#: ../cli.py:865
+#: ../cli.py:875
 #, python-format
 msgid "No group named %s exists"
 msgstr "Не постоји група под именом %s"
 
-#: ../cli.py:871
+#: ../cli.py:881
 msgid "No packages to remove from groups"
 msgstr "Нема пакета за уклањање из група"
 
-#: ../cli.py:873
+#: ../cli.py:883
 #, python-format
 msgid "%d Package(s) to remove"
 msgstr "%d  пакет(и) за уклањање"
 
-#: ../cli.py:915
+#: ../cli.py:925
 #, python-format
 msgid "Package %s is already installed, skipping"
 msgstr "Пакет %s је већ инсталиран, прескачем га"
 
-#: ../cli.py:926
+#: ../cli.py:936
 #, python-format
 msgid "Discarding non-comparable pkg %s.%s"
 msgstr "Уклањам неупоредив пакет %s.%s"
 
 #. we've not got any installed that match n or n+a
-#: ../cli.py:952
+#: ../cli.py:962
 #, python-format
 msgid "No other %s installed, adding to list for potential install"
 msgstr ""
 "Не постоји инсталиран други %s, додајем га у списак за потенцијалну "
 "инсталацију"
 
-#: ../cli.py:971
+#: ../cli.py:981
 #, python-format
 msgid "Command line error: %s"
 msgstr "Грешка командне линије: %s"
 
-#: ../cli.py:983
+#: ../cli.py:993
 #, python-format
 msgid ""
 "\n"
@@ -349,218 +348,226 @@ msgstr ""
 "\n"
 "%s: %s опција захтева аргумент"
 
-#: ../cli.py:1103
+#: ../cli.py:1122
+msgid "show this help message and exit"
+msgstr "прикажи ову помоћну поруку и изађи"
+
+#: ../cli.py:1126
 msgid "be tolerant of errors"
 msgstr "буди толерантан на грешке"
 
-#: ../cli.py:1105
+#: ../cli.py:1128
 msgid "run entirely from cache, don't update cache"
 msgstr "извршавај се у потпуности из кеша, не ажурирај кеш"
 
-#: ../cli.py:1107
+#: ../cli.py:1130
 msgid "config file location"
 msgstr "место датотеке подешавања"
 
-#: ../cli.py:1109
+#: ../cli.py:1132
 msgid "maximum command wait time"
-msgstr "највеће чекање на команду"
+msgstr "најдуже време чекања на команду"
 
-#: ../cli.py:1111
+#: ../cli.py:1134
 msgid "debugging output level"
-msgstr "ниво проналажења грешака излаза"
+msgstr "ниво излазног приказа за проналажење грешака"
 
-#: ../cli.py:1115
+#: ../cli.py:1138
 msgid "show duplicates, in repos, in list/search commands"
 msgstr ""
 "приказуј дупликате, у ризницама, у командама за излиставање/претраживање"
 
-#: ../cli.py:1117
+#: ../cli.py:1140
 msgid "error output level"
-msgstr "ниво грешака излаза"
+msgstr "ниво излазног приказа грешака"
 
-#: ../cli.py:1120
+#: ../cli.py:1143
 msgid "quiet operation"
 msgstr "тиха радња"
 
-#: ../cli.py:1124
+#: ../cli.py:1145
+msgid "verbose operation"
+msgstr "опширна радња"
+
+#: ../cli.py:1147
 msgid "answer yes for all questions"
-msgstr "одговори да на сва питања"
+msgstr "одговори са да на сва питања"
 
-#: ../cli.py:1126
+#: ../cli.py:1149
 msgid "show Yum version and exit"
 msgstr "прикажи верзију Yum-а и изађи"
 
-#: ../cli.py:1127
+#: ../cli.py:1150
 msgid "set install root"
 msgstr "постави корени директоријум инсталације"
 
-#: ../cli.py:1131
+#: ../cli.py:1154
 msgid "enable one or more repositories (wildcards allowed)"
 msgstr "укључи једну или више ризница (скраћенице су дозвољене)"
 
-#: ../cli.py:1135
+#: ../cli.py:1158
 msgid "disable one or more repositories (wildcards allowed)"
 msgstr "искључи једну или више ризница (скраћенице су дозвољене)"
 
-#: ../cli.py:1138
+#: ../cli.py:1161
 msgid "exclude package(s) by name or glob"
-msgstr "одстраните пакет(е) по имену или glob-у"
+msgstr "изузмите пакет(е) по имену или glob-у"
 
-#: ../cli.py:1140
+#: ../cli.py:1163
 msgid "disable exclude from main, for a repo or for everything"
-msgstr "искључи одстрањивање, за репозиторијум или за све"
+msgstr "искључи изузимање из главног скупа, за ризницу или за све"
 
-#: ../cli.py:1143
+#: ../cli.py:1166
 msgid "enable obsoletes processing during updates"
 msgstr "укључи обраду застарелих пакета у току ажурирања"
 
-#: ../cli.py:1145
+#: ../cli.py:1168
 msgid "disable Yum plugins"
 msgstr "искључи додатке за Yum"
 
-#: ../cli.py:1147
+#: ../cli.py:1170
 msgid "disable gpg signature checking"
 msgstr "искључи проверу gpg потписа"
 
-#: ../cli.py:1149
+#: ../cli.py:1172
 msgid "disable plugins by name"
 msgstr "искључи додатке по имену"
 
-#: ../cli.py:1152
+#: ../cli.py:1175
 msgid "skip packages with depsolving problems"
 msgstr "прескочи пакете који имају проблема са решавањем зависности"
 
-#: ../output.py:229
+#: ../output.py:228
 msgid "Jan"
-msgstr "Јан"
+msgstr "јан"
 
-#: ../output.py:229
+#: ../output.py:228
 msgid "Feb"
-msgstr "Феб"
+msgstr "феб"
 
-#: ../output.py:229
+#: ../output.py:228
 msgid "Mar"
-msgstr "Мар"
+msgstr "мар"
 
-#: ../output.py:229
+#: ../output.py:228
 msgid "Apr"
-msgstr "Апр"
+msgstr "апр"
 
-#: ../output.py:229
+#: ../output.py:228
 msgid "May"
-msgstr "Мај"
+msgstr "мај"
 
-#: ../output.py:229
+#: ../output.py:228
 msgid "Jun"
-msgstr "Јун"
+msgstr "јун"
 
-#: ../output.py:230
+#: ../output.py:229
 msgid "Jul"
-msgstr "Јул"
+msgstr "јул"
 
-#: ../output.py:230
+#: ../output.py:229
 msgid "Aug"
-msgstr "Авг"
+msgstr "авг"
 
-#: ../output.py:230
+#: ../output.py:229
 msgid "Sep"
-msgstr "Сеп"
+msgstr "сеп"
 
-#: ../output.py:230
+#: ../output.py:229
 msgid "Oct"
-msgstr "Окт"
+msgstr "окт"
 
-#: ../output.py:230
+#: ../output.py:229
 msgid "Nov"
-msgstr "Нов"
+msgstr "нов"
 
-#: ../output.py:230
+#: ../output.py:229
 msgid "Dec"
-msgstr "Дец"
+msgstr "дец"
 
-#: ../output.py:240
+#: ../output.py:239
 msgid "Trying other mirror."
-msgstr "Покушај други одраз."
+msgstr "Покушавам други одраз."
 
-#: ../output.py:294
+#: ../output.py:293
 #, python-format
 msgid "Name       : %s"
-msgstr "Име          : %s"
+msgstr "Име        : %s"
 
-#: ../output.py:295
+#: ../output.py:294
 #, python-format
 msgid "Arch       : %s"
 msgstr "Архитектура: %s"
 
-#: ../output.py:297
+#: ../output.py:296
 #, python-format
 msgid "Epoch      : %s"
-msgstr "Период       : %s"
+msgstr "Период     : %s"
 
-#: ../output.py:298
+#: ../output.py:297
 #, python-format
 msgid "Version    : %s"
 msgstr "Верзија    : %s"
 
-#: ../output.py:299
+#: ../output.py:298
 #, python-format
 msgid "Release    : %s"
-msgstr "Издање    : %s"
+msgstr "Издање     : %s"
 
-#: ../output.py:300
+#: ../output.py:299
 #, python-format
 msgid "Size       : %s"
-msgstr "Величина       : %s"
+msgstr "Величина   : %s"
 
-#: ../output.py:301
+#: ../output.py:300
 #, python-format
 msgid "Repo       : %s"
-msgstr "Ризница       : %s"
+msgstr "Ризница    : %s"
 
-#: ../output.py:303
+#: ../output.py:302
 #, python-format
 msgid "Committer  : %s"
-msgstr "Објављивач  : %s"
+msgstr "Објављивач : %s"
 
-#: ../output.py:304
+#: ../output.py:303
 msgid "Summary    : "
 msgstr "Сажетак    :"
 
-#: ../output.py:306
+#: ../output.py:305
 #, python-format
 msgid "URL        : %s"
-msgstr "URL        : %s"
+msgstr "УРЛ        : %s"
 
-#: ../output.py:307
+#: ../output.py:306
 #, python-format
 msgid "License    : %s"
 msgstr "Лиценца    : %s"
 
-#: ../output.py:308
+#: ../output.py:307
 msgid "Description: "
-msgstr "Опис:"
+msgstr "Опис       : "
 
-#: ../output.py:352
+#: ../output.py:351
 msgid "Is this ok [y/N]: "
-msgstr "Да ли је ово у реду [д/Н]: "
+msgstr "Да ли је ово у реду [d/N]: "
 
-#: ../output.py:358 ../output.py:361
+#: ../output.py:359 ../output.py:362
 msgid "y"
-msgstr "д"
+msgstr "d"
 
-#: ../output.py:358
+#: ../output.py:359
 msgid "n"
-msgstr "н"
+msgstr "n"
 
-#: ../output.py:358 ../output.py:361
+#: ../output.py:359 ../output.py:362
 msgid "yes"
-msgstr "да"
+msgstr "da"
 
-#: ../output.py:358
+#: ../output.py:359
 msgid "no"
-msgstr "не"
+msgstr "ne"
 
-#: ../output.py:368
+#: ../output.py:370
 #, python-format
 msgid ""
 "\n"
@@ -569,96 +576,96 @@ msgstr ""
 "\n"
 "Група: %s"
 
-#: ../output.py:370
+#: ../output.py:372
 #, python-format
 msgid " Description: %s"
 msgstr " Опис: %s"
 
-#: ../output.py:372
+#: ../output.py:374
 msgid " Mandatory Packages:"
-msgstr " Главни пакети:"
+msgstr " Обавезни пакети:"
 
-#: ../output.py:377
+#: ../output.py:379
 msgid " Default Packages:"
 msgstr " Подразумевани пакети:"
 
-#: ../output.py:382
+#: ../output.py:384
 msgid " Optional Packages:"
-msgstr " Опционални пакети:"
+msgstr " Изборни пакети:"
 
-#: ../output.py:387
+#: ../output.py:389
 msgid " Conditional Packages:"
-msgstr " Ускловљени пакети:"
+msgstr " Условљени пакети:"
 
-#: ../output.py:395
+#: ../output.py:398
 #, python-format
 msgid "package: %s"
 msgstr "пакет: %s"
 
-#: ../output.py:397
+#: ../output.py:400
 msgid "  No dependencies for this package"
 msgstr "  Не постоје зависности овог пакета"
 
-#: ../output.py:402
+#: ../output.py:405
 #, python-format
 msgid "  dependency: %s"
 msgstr "  зависност: %s"
 
-#: ../output.py:404
+#: ../output.py:407
 msgid "   Unsatisfied dependency"
 msgstr "   Незадовољена зависност"
 
-#: ../output.py:462
+#: ../output.py:465
 msgid "Matched from:"
 msgstr "Повезан из:"
 
-#: ../output.py:488
+#: ../output.py:491
 msgid "There was an error calculating total download size"
-msgstr "Догодила се грешка при рачунању укупне величине преузимања"
+msgstr "Догодила се грешка при рачунању укупне величине за преузимање"
 
-#: ../output.py:493
+#: ../output.py:496
 #, python-format
 msgid "Total size: %s"
 msgstr "Укупна величина: %s"
 
-#: ../output.py:496
+#: ../output.py:499
 #, python-format
 msgid "Total download size: %s"
-msgstr "Укупна величина преузимања: %s"
+msgstr "Укупна величина за преузимање: %s"
 
-#: ../output.py:508
+#: ../output.py:511
 msgid "Package"
 msgstr "Пакет"
 
-#: ../output.py:508
+#: ../output.py:511
 msgid "Arch"
 msgstr "Архитектура"
 
-#: ../output.py:508
+#: ../output.py:511
 msgid "Version"
 msgstr "Верзија"
 
-#: ../output.py:508
+#: ../output.py:511
 msgid "Repository"
 msgstr "Ризница"
 
-#: ../output.py:508
+#: ../output.py:511
 msgid "Size"
 msgstr "Величина"
 
-#: ../output.py:515
+#: ../output.py:518
 msgid "Installing for dependencies"
-msgstr "Инсталирање везана за зависности"
+msgstr "Инсталирам због зависности"
 
-#: ../output.py:516
+#: ../output.py:519
 msgid "Updating for dependencies"
-msgstr "Ажурирања везана за зависности"
+msgstr "Ажурирам због зависности"
 
-#: ../output.py:517
+#: ../output.py:520
 msgid "Removing for dependencies"
-msgstr "Уклањања везана за зависности"
+msgstr "Уклањам због зависности"
 
-#: ../output.py:529
+#: ../output.py:532
 #, python-format
 msgid ""
 "     replacing  %s.%s %s\n"
@@ -667,7 +674,7 @@ msgstr ""
 "     уклањам  %s.%s %s\n"
 "\n"
 
-#: ../output.py:537
+#: ../output.py:540
 #, python-format
 msgid ""
 "\n"
@@ -678,33 +685,33 @@ msgid ""
 "Remove   %5.5s Package(s)         \n"
 msgstr ""
 "\n"
-"Сажетак преноса\n"
+"Сажетак трансакције\n"
 "=============================================================================\n"
-"инсталирај  %5.5s пакет(а)         \n"
-"ажурирај       %5.5s пакет(а)         \n"
-"уклони             %5.5s пакет(а)         \n"
+"инсталирање  %5.5s пакет(а)       \n"
+"ажурирање    %5.5s пакет(а)       \n"
+"уклањање     %5.5s пакет(а)       \n"
 
-#: ../output.py:555
+#: ../output.py:558
 msgid "Removed"
 msgstr "Уклоњено"
 
-#: ../output.py:556
+#: ../output.py:559
 msgid "Dependency Removed"
 msgstr "Зависност уклоњена"
 
-#: ../output.py:558
+#: ../output.py:561
 msgid "Dependency Installed"
 msgstr "Зависност инсталирана"
 
-#: ../output.py:560
+#: ../output.py:563
 msgid "Dependency Updated"
 msgstr "Зависност ажурирана"
 
-#: ../output.py:561
+#: ../output.py:564
 msgid "Replaced"
 msgstr "Замењено"
 
-#: ../output.py:619
+#: ../output.py:622
 #, python-format
 msgid ""
 "\n"
@@ -715,67 +722,67 @@ msgstr ""
 " Тренутно преузимање је обустављено, %sinterrupt (ctrl-c) још једном%s у "
 "току %s%s%s секунди да бисте изашли.\n"
 
-#: ../output.py:629
+#: ../output.py:632
 msgid "user interrupt"
 msgstr "прекид од стране корисника"
 
-#: ../output.py:640
+#: ../output.py:643
 msgid "installed"
-msgstr "инсталирано"
+msgstr "инсталиран"
 
-#: ../output.py:641
+#: ../output.py:644
 msgid "updated"
-msgstr "ажурирано"
+msgstr "ажуриран"
 
-#: ../output.py:642
+#: ../output.py:645
 msgid "obsoleted"
-msgstr "превазиђено"
+msgstr "превазиђен"
 
-#: ../output.py:643
+#: ../output.py:646
 msgid "erased"
-msgstr "обрисано"
+msgstr "обрисан"
 
-#: ../output.py:647
+#: ../output.py:650
 #, python-format
 msgid "---> Package %s.%s %s:%s-%s set to be %s"
 msgstr "---> Пакет %s.%s %s:%s-%s постављен да буде %s"
 
-#: ../output.py:654
+#: ../output.py:657
 msgid "--> Running transaction check"
-msgstr "--> Извршава се провера преноса"
+msgstr "--> Извршава се провера трансакције"
 
-#: ../output.py:659
+#: ../output.py:662
 msgid "--> Restarting Dependency Resolution with new changes."
-msgstr "--> Поновно покретање резолуције зависности са новим променама."
+msgstr "--> Поновно покретање разрешавања зависности са новим променама."
 
-#: ../output.py:664
+#: ../output.py:667
 msgid "--> Finished Dependency Resolution"
-msgstr "--> Завршена резолуција зависности"
+msgstr "--> Завршено је разрешавање зависности"
 
-#: ../output.py:669
+#: ../output.py:672
 #, python-format
 msgid "--> Processing Dependency: %s for package: %s"
 msgstr "--> Обрађујем зависност: %s за пакет: %s"
 
-#: ../output.py:674
+#: ../output.py:677
 #, python-format
 msgid "--> Unresolved Dependency: %s"
 msgstr "--> Неразрешена зависност: %s"
 
-#: ../output.py:680
+#: ../output.py:683
 #, python-format
 msgid "--> Processing Conflict: %s conflicts %s"
 msgstr "--> Сукоб при обради: %s се сукоби са %s"
 
-#: ../output.py:683
+#: ../output.py:686
 msgid "--> Populating transaction set with selected packages. Please wait."
 msgstr ""
-"--> Попуњавам скуп трансакција са изабраним пакетима. Молим вас, сачекајте."
+"--> Попуњавам скуп трансакције са изабраним пакетима. Молим вас, сачекајте."
 
-#: ../output.py:687
+#: ../output.py:690
 #, python-format
 msgid "---> Downloading header for %s to pack into transaction set."
-msgstr "---> Преузимам заглавље за %s да би се спаковало у скуп преноса."
+msgstr "---> Преузимам заглавље за %s ради паковања у скуп трансакције."
 
 #: ../yumcommands.py:37
 msgid "You need to be root to perform this command."
@@ -800,14 +807,14 @@ msgid ""
 msgstr ""
 "\n"
 "Укључили сте проверу пакета помоћу GPG кључева. Ово је добра ствар. \n"
-"Међутим, немате инсталиран ни један GPG јавни кључ. Морате да преузмете\n"
+"Међутим, немате инсталиран ниједан GPG јавни кључ. Морате да преузмете\n"
 "кључеве за пакете које желите да инсталирате и инсталирате их.\n"
 "То можете урадити извршавањем команде:\n"
 "    rpm --import public.gpg.key\n"
 "\n"
 "\n"
-"Такође, можете одредити url за кључ који желите да користите\n"
-"за пизницу у 'gpgkey' опцији у одељку везаним за ризнице и yum \n"
+"Такође, можете одредити урл за кључ који желите да користите\n"
+"за ризницу у „gpgkey“ опцији у одељку везаним за ризнице и yum \n"
 "ће га инсталирати за вас.\n"
 "\n"
 "За више информација контактирајте добављача ваше дистрибуције или пакета.\n"
@@ -929,7 +936,7 @@ msgstr "Постављам процес за групе"
 
 #: ../yumcommands.py:287
 msgid "No Groups on which to run command"
-msgstr "Не постоји група при којој се може извршавати команда"
+msgstr "Не постоји група над којом се може извршити команда"
 
 #: ../yumcommands.py:300
 msgid "List available package groups"
@@ -977,7 +984,7 @@ msgstr "Проверите да ли су доступна ажурирања п
 
 #: ../yumcommands.py:493
 msgid "Search package details for the given string"
-msgstr "Претражи детаље о пакету за задату ниску"
+msgstr "Претражите детаље о пакету за задату ниску"
 
 #: ../yumcommands.py:499
 msgid "Searching Packages: "
@@ -985,7 +992,7 @@ msgstr "Претражујем пакете: "
 
 #: ../yumcommands.py:516
 msgid "Update packages taking obsoletes into account"
-msgstr "Ажурирајте пакете носећи превазиђене у налог"
+msgstr "Ажурирајте пакете узимајући превазиђене у обзир"
 
 #: ../yumcommands.py:525
 msgid "Setting up Upgrade Process"
@@ -1027,48 +1034,52 @@ msgstr "Тражим зависности: "
 msgid "Display the configured software repositories"
 msgstr "Прикажи подешене софтверске ризнице"
 
-#: ../yumcommands.py:662
+#: ../yumcommands.py:666
 msgid "enabled"
-msgstr "укључен"
+msgstr "укључена"
 
-#: ../yumcommands.py:665
+#: ../yumcommands.py:673
 msgid "disabled"
-msgstr "искључен"
+msgstr "искључена"
 
-#: ../yumcommands.py:672
+#: ../yumcommands.py:682
 msgid "repo id"
 msgstr "репо id"
 
-#: ../yumcommands.py:673
+#: ../yumcommands.py:683
 msgid "repo name"
 msgstr "репо име"
 
-#: ../yumcommands.py:673
+#: ../yumcommands.py:683
 msgid "status"
 msgstr "статус"
 
-#: ../yumcommands.py:676
+#: ../yumcommands.py:686
 msgid "Repo-id     : "
-msgstr "ИБ ризнице       : "
+msgstr "ИБ ризнице      : "
 
-#: ../yumcommands.py:677
+#: ../yumcommands.py:687
 msgid "Repo-name   : "
-msgstr "Име ризнице    : "
+msgstr "Име ризнице     : "
 
-#: ../yumcommands.py:678
+#: ../yumcommands.py:688
 msgid "Repo-enabled: "
 msgstr "Ризница укључена: "
 
-#: ../yumcommands.py:700
+#: ../yumcommands.py:689
+msgid "Repo-size   : "
+msgstr "Величина ризнице: "
+
+#: ../yumcommands.py:713
 msgid "Display a helpful usage message"
-msgstr "Прикажи корисн поруку о коришћењу"
+msgstr "Прикажи корисну поруку о употреби"
 
-#: ../yumcommands.py:734
+#: ../yumcommands.py:747
 #, python-format
 msgid "No help available for %s"
 msgstr "Није доступна помоћ за %s"
 
-#: ../yumcommands.py:739
+#: ../yumcommands.py:752
 msgid ""
 "\n"
 "\n"
@@ -1078,7 +1089,7 @@ msgstr ""
 "\n"
 "алијаси: "
 
-#: ../yumcommands.py:741
+#: ../yumcommands.py:754
 msgid ""
 "\n"
 "\n"
@@ -1088,15 +1099,15 @@ msgstr ""
 "\n"
 "алијас: "
 
-#: ../yumcommands.py:770
+#: ../yumcommands.py:783
 msgid "Setting up Reinstall Process"
 msgstr "Постављам процес поновне инсталације"
 
-#: ../yumcommands.py:784
+#: ../yumcommands.py:797
 msgid "reinstall a package"
 msgstr "поновно инсталирам пакет"
 
-#: ../yummain.py:41
+#: ../yummain.py:53
 msgid ""
 "\n"
 "\n"
@@ -1106,7 +1117,7 @@ msgstr ""
 "\n"
 "Излазим када корисник откаже"
 
-#: ../yummain.py:47
+#: ../yummain.py:59
 msgid ""
 "\n"
 "\n"
@@ -1116,41 +1127,41 @@ msgstr ""
 "\n"
 "Излазим када се сломи цев"
 
-#: ../yummain.py:105
+#: ../yummain.py:110
 msgid ""
 "Another app is currently holding the yum lock; waiting for it to exit..."
 msgstr ""
 "Неки други програм тренутно држи yum закључавање, чекам да се тај програм "
 "искључи..."
 
-#: ../yummain.py:132 ../yummain.py:171
+#: ../yummain.py:137 ../yummain.py:176
 #, python-format
 msgid "Error: %s"
 msgstr "Грешка: %s"
 
-#: ../yummain.py:142 ../yummain.py:178
+#: ../yummain.py:147 ../yummain.py:183
 #, python-format
 msgid "Unknown Error(s): Exit Code: %d:"
-msgstr "Непозната грешка(е): Излазни чвор: %d:"
+msgstr "Непозната грешка(е): излазни код: %d:"
 
 #. Depsolve stage
-#: ../yummain.py:149
+#: ../yummain.py:154
 msgid "Resolving Dependencies"
 msgstr "Разрешавам зависности"
 
-#: ../yummain.py:184
+#: ../yummain.py:189
 msgid ""
 "\n"
 "Dependencies Resolved"
 msgstr ""
 "\n"
-"Зависности разрешене"
+"Зависности су разрешене"
 
-#: ../yummain.py:198
+#: ../yummain.py:203
 msgid "Complete!"
 msgstr "Завршено!"
 
-#: ../yummain.py:245
+#: ../yummain.py:250
 msgid ""
 "\n"
 "\n"
@@ -1160,192 +1171,147 @@ msgstr ""
 "\n"
 "Излазим када корисник откаже."
 
-#: ../yum/depsolve.py:83
+#: ../yum/depsolve.py:78
 msgid "doTsSetup() will go away in a future version of Yum.\n"
-msgstr "doTsSetup() неће бити присутан у будућим верзијама Yum-а.\n"
+msgstr "doTsSetup() неће бити присутна у будућим верзијама Yum-а.\n"
 
-#: ../yum/depsolve.py:96
+#: ../yum/depsolve.py:91
 msgid "Setting up TransactionSets before config class is up"
-msgstr ""
-"Постављам поставке трансакције пре него што се подигне класа подешавања"
+msgstr "Постављам TransactionSets пре него што се подигне класа подешавања"
 
-#: ../yum/depsolve.py:137
+#: ../yum/depsolve.py:132
 #, python-format
 msgid "Invalid tsflag in config file: %s"
 msgstr "Погрешан tsflag у датотеци подешавања: %s"
 
-#: ../yum/depsolve.py:148
-#, python-format
-msgid "Searching pkgSack for dep: %s"
-msgstr "Претражујем pkgSack у потрази за зависности: %s"
-
-#: ../yum/depsolve.py:171
-#, python-format
-msgid "Potential match for %s from %s"
-msgstr "Потенцијални спој за %s од %s"
-
-#: ../yum/depsolve.py:179
-#, python-format
-msgid "Matched %s to require for %s"
-msgstr "Пронађено да је %s захтеван за %s"
-
-#: ../yum/depsolve.py:220
+#: ../yum/depsolve.py:176
 #, python-format
 msgid "Member: %s"
 msgstr "Члан: %s"
 
-#: ../yum/depsolve.py:234 ../yum/depsolve.py:687
+#: ../yum/depsolve.py:190 ../yum/depsolve.py:595
 #, python-format
 msgid "%s converted to install"
 msgstr "%s пребачен за инсталацију"
 
-#: ../yum/depsolve.py:241
+#: ../yum/depsolve.py:197
 #, python-format
 msgid "Adding Package %s in mode %s"
 msgstr "Додајем пакет %s у начину рада %s"
 
-#: ../yum/depsolve.py:251
+#: ../yum/depsolve.py:207
 #, python-format
 msgid "Removing Package %s"
-msgstr "Укањам пакет %s"
+msgstr "Уклањам пакет %s"
 
-#: ../yum/depsolve.py:262
+#: ../yum/depsolve.py:218
 #, python-format
 msgid "%s requires: %s"
 msgstr "%s захтева: %s"
 
-#: ../yum/depsolve.py:313
-msgid "Needed Require has already been looked up, cheating"
-msgstr "Потребан услов је већ тражен, варам"
-
-#: ../yum/depsolve.py:323
-#, python-format
-msgid "Needed Require is not a package name. Looking up: %s"
-msgstr "Потребан услов није име пакета. Тражим: %s"
-
-#: ../yum/depsolve.py:330
-#, python-format
-msgid "Potential Provider: %s"
-msgstr "Потенцијални добављач: %s"
-
-#: ../yum/depsolve.py:353
-#, python-format
-msgid "Mode is %s for provider of %s: %s"
-msgstr "Начин рада је %s за достављача %s-а: %s"
-
-#: ../yum/depsolve.py:357
-#, python-format
-msgid "Mode for pkg providing %s: %s"
-msgstr "Начин рада за pkg који пружа %s: %s"
-
-#: ../yum/depsolve.py:361
-#, python-format
-msgid "TSINFO: %s package requiring %s marked as erase"
-msgstr "TSINFO: %s пакет захтева %s означен као брисање"
-
-#: ../yum/depsolve.py:373
+#: ../yum/depsolve.py:273
 #, python-format
 msgid "TSINFO: Obsoleting %s with %s to resolve dep."
-msgstr "TSINFO: Мењам %s са %s да бих разрешио зависност."
+msgstr "TSINFO: мењам %s са %s да бих разрешио зависност."
 
-#: ../yum/depsolve.py:376
+#: ../yum/depsolve.py:276
 #, python-format
 msgid "TSINFO: Updating %s to resolve dep."
-msgstr "TSINFO: Ажурирам %s да бих разрешио зависност."
+msgstr "TSINFO: ажурирам %s да бих разрешио зависност."
 
-#: ../yum/depsolve.py:379
+#: ../yum/depsolve.py:279
 #, python-format
 msgid "Cannot find an update path for dep for: %s"
 msgstr "Не могу да пронађем путању ажурирања за зависност за: %s"
 
-#: ../yum/depsolve.py:389
+#: ../yum/depsolve.py:283
 #, python-format
-msgid "Unresolvable requirement %s for %s"
-msgstr "Неразрешиви захтев %s за %s"
+msgid "TSINFO: %s package requiring %s marked as erase"
+msgstr "TSINFO: %s пакет захтева да %s буде означен за брисање"
 
 #. is it already installed?
-#: ../yum/depsolve.py:435
+#: ../yum/depsolve.py:329
 #, python-format
 msgid "%s is in providing packages but it is already installed, removing."
-msgstr "%s је у пружању пакета али је још увек инсталиран, уклањам га."
+msgstr "%s је у пруженим пакета али је већ инсталиран, уклањам га."
 
-#: ../yum/depsolve.py:450
+#: ../yum/depsolve.py:344
 #, python-format
 msgid "Potential resolving package %s has newer instance in ts."
 msgstr "Потенцијално разрешавање пакета %s има новији примерак у ts-у."
 
-#: ../yum/depsolve.py:461
+#: ../yum/depsolve.py:355
 #, python-format
 msgid "Potential resolving package %s has newer instance installed."
 msgstr "Потенцијално разрешавање пакета %s има инсталиран нови примерак."
 
-#: ../yum/depsolve.py:469 ../yum/depsolve.py:518
+#: ../yum/depsolve.py:363 ../yum/depsolve.py:412
 #, python-format
 msgid "Missing Dependency: %s is needed by package %s"
 msgstr "Недостаје зависност: %s је потребан од стране пакета %s"
 
-#: ../yum/depsolve.py:482
+#: ../yum/depsolve.py:376
 #, python-format
 msgid "%s already in ts, skipping this one"
 msgstr "%s је већ у ts-у, прескачем га"
 
-#: ../yum/depsolve.py:528
+#: ../yum/depsolve.py:422
 #, python-format
 msgid "TSINFO: Marking %s as update for %s"
-msgstr "TSINFO: Означавам %s као ажурирање за %s"
+msgstr "TSINFO: означавам %s као ажурирање за %s"
 
-#: ../yum/depsolve.py:535
+#: ../yum/depsolve.py:429
 #, python-format
 msgid "TSINFO: Marking %s as install for %s"
-msgstr "TSINFO: Означавам %s као инсталацију за %s"
+msgstr "TSINFO: означавам %s као инсталацију за %s"
 
-#: ../yum/depsolve.py:626 ../yum/depsolve.py:705
+#: ../yum/depsolve.py:520 ../yum/depsolve.py:613
 msgid "Success - empty transaction"
 msgstr "Успех - празна трансакција"
 
-#: ../yum/depsolve.py:664 ../yum/depsolve.py:677
+#: ../yum/depsolve.py:565 ../yum/depsolve.py:585
 msgid "Restarting Loop"
-msgstr "Поново стартујем понављање"
+msgstr "Поново покрећем петљу"
 
-#: ../yum/depsolve.py:693
+#: ../yum/depsolve.py:601
 msgid "Dependency Process ending"
 msgstr "Завршетак процеса зависности"
 
-#: ../yum/depsolve.py:699
+#: ../yum/depsolve.py:607
 #, python-format
 msgid "%s from %s has depsolving problems"
 msgstr "%s из %s има проблема са разрешавањем зависности"
 
-#: ../yum/depsolve.py:706
+#: ../yum/depsolve.py:614
 msgid "Success - deps resolved"
 msgstr "Успех - зависности су разрешене"
 
-#: ../yum/depsolve.py:720
+#: ../yum/depsolve.py:628
 #, python-format
 msgid "Checking deps for %s"
 msgstr "Проверавам зависности за %s"
 
-#: ../yum/depsolve.py:773
+#: ../yum/depsolve.py:690
 #, python-format
 msgid "looking for %s as a requirement of %s"
 msgstr "тражим %s као захтев за %s"
 
-#: ../yum/depsolve.py:911
+#: ../yum/depsolve.py:817
 #, python-format
 msgid "Running compare_providers() for %s"
 msgstr "Покрећем compare_providers() за %s"
 
-#: ../yum/depsolve.py:939 ../yum/depsolve.py:945
+#: ../yum/depsolve.py:845 ../yum/depsolve.py:851
 #, python-format
 msgid "better arch in po %s"
 msgstr "боља архитектура у po %s"
 
-#: ../yum/depsolve.py:984
+#: ../yum/depsolve.py:890
 #, python-format
 msgid "%s obsoletes %s"
-msgstr "%s izbacuje %s"
+msgstr "%s превазилази %s"
 
-#: ../yum/depsolve.py:995
+#: ../yum/depsolve.py:901
 #, python-format
 msgid ""
 "archdist compared %s to %s on %s\n"
@@ -1354,203 +1320,211 @@ msgstr ""
 "archdist упоредио %s са %s на %s\n"
 "  Победник: %s"
 
-#: ../yum/depsolve.py:1002
+#: ../yum/depsolve.py:908
 #, python-format
 msgid "common sourcerpm %s and %s"
-msgstr "заједнички изворни RPM %s и %s"
+msgstr "заједнички изворни rpm %s и %s"
 
-#: ../yum/depsolve.py:1008
+#: ../yum/depsolve.py:914
 #, python-format
 msgid "common prefix of %s between %s and %s"
 msgstr "заједнички префикс %s између %s и %s"
 
-#: ../yum/depsolve.py:1016
+#: ../yum/depsolve.py:922
 #, python-format
 msgid "Best Order: %s"
 msgstr "Најбољи редослед: %s"
 
-#: ../yum/__init__.py:127
+#: ../yum/__init__.py:129
 msgid "doConfigSetup() will go away in a future version of Yum.\n"
-msgstr "doConfigSetup() неће бити присутан у будућим верзијама Yum-а.\n"
+msgstr "doConfigSetup() неће бити присутна у будућим верзијама Yum-а.\n"
 
-#: ../yum/__init__.py:299
+#: ../yum/__init__.py:303
 #, python-format
 msgid "Repository %r is missing name in configuration, using id"
 msgstr "Ризници %r недостаје име у подешавањима, користим id"
 
-#: ../yum/__init__.py:335
+#: ../yum/__init__.py:339
 msgid "plugins already initialised"
 msgstr "већ иницијализовани додаци"
 
-#: ../yum/__init__.py:342
+#: ../yum/__init__.py:346
 msgid "doRpmDBSetup() will go away in a future version of Yum.\n"
-msgstr "doRpmDBSetup() неће бити присутан у будућим верзијама Yum-а.\n"
+msgstr "doRpmDBSetup() неће бити присутна у будућим верзијама Yum-а.\n"
 
-#: ../yum/__init__.py:352
+#: ../yum/__init__.py:356
 msgid "Reading Local RPMDB"
 msgstr "Читам локални RPMDB"
 
-#: ../yum/__init__.py:370
+#: ../yum/__init__.py:374
 msgid "doRepoSetup() will go away in a future version of Yum.\n"
-msgstr "doRepoSetup() неће бити присутан у будућим верзијама Yum-а.\n"
+msgstr "doRepoSetup() неће бити присутна у будућим верзијама Yum-а.\n"
 
-#: ../yum/__init__.py:390
+#: ../yum/__init__.py:394
 msgid "doSackSetup() will go away in a future version of Yum.\n"
-msgstr "doSackSetup() неће бити присутан у будућим верзијама Yum-а.\n"
+msgstr "doSackSetup() неће бити присутна у будућим верзијама Yum-а.\n"
 
-#: ../yum/__init__.py:407
+#: ../yum/__init__.py:411
 msgid "Setting up Package Sacks"
 msgstr "Постављам групе пакета"
 
-#: ../yum/__init__.py:450
+#: ../yum/__init__.py:454
 #, python-format
 msgid "repo object for repo %s lacks a _resetSack method\n"
 msgstr "репо објекту за репо %s недостаје a _resetSack метода\n"
 
-#: ../yum/__init__.py:451
+#: ../yum/__init__.py:455
 msgid "therefore this repo cannot be reset.\n"
-msgstr "због тога се овај репо не може поново стартовати.\n"
+msgstr "због тога се овај репо не може вратити на почетну поставку.\n"
 
-#: ../yum/__init__.py:456
+#: ../yum/__init__.py:460
 msgid "doUpdateSetup() will go away in a future version of Yum.\n"
-msgstr "doUpdateSetup() неће бити присутан у будућим верзијама Yum-а.\n"
+msgstr "doUpdateSetup() неће бити присутна у будућим верзијама Yum-а.\n"
 
-#: ../yum/__init__.py:468
+#: ../yum/__init__.py:472
 msgid "Building updates object"
-msgstr "Изграђивање ажурира објекат"
+msgstr "Изграђујем објекат ажурирња"
 
-#: ../yum/__init__.py:499
+#: ../yum/__init__.py:503
 msgid "doGroupSetup() will go away in a future version of Yum.\n"
-msgstr "doGroupSetup() неће бити присутан у будућим верзијама Yum-а.\n"
+msgstr "doGroupSetup() неће бити присутна у будућим верзијама Yum-а.\n"
 
-#: ../yum/__init__.py:523
+#: ../yum/__init__.py:527
 msgid "Getting group metadata"
-msgstr "Добављам групу метаподатака"
+msgstr "Добављам метаподатке групе"
 
-#: ../yum/__init__.py:549
+#: ../yum/__init__.py:553
 #, python-format
 msgid "Adding group file from repository: %s"
-msgstr "Додајем групу датотека из ризнице: %s"
+msgstr "Додајем датотеку групе из ризнице: %s"
 
-#: ../yum/__init__.py:558
+#: ../yum/__init__.py:562
 #, python-format
 msgid "Failed to add groups file for repository: %s - %s"
-msgstr "Нисам успео да додам групу датотека за ризницу: %s - %s"
+msgstr "Нисам успео да додам датотеку групе за ризницу: %s - %s"
 
-#: ../yum/__init__.py:564
+#: ../yum/__init__.py:568
 msgid "No Groups Available in any repository"
 msgstr "Не постоји група која је доступна у било којој ризници"
 
-#: ../yum/__init__.py:614
+#: ../yum/__init__.py:618
 msgid "Importing additional filelist information"
 msgstr "Увозим додатне информације о списковима датотека"
 
-#: ../yum/__init__.py:662
+#: ../yum/__init__.py:670
 #, python-format
 msgid "Skip-broken round %i"
 msgstr "Skip-broken етапа %i"
 
-#: ../yum/__init__.py:685
+#: ../yum/__init__.py:693
 #, python-format
 msgid "Skip-broken took %i rounds "
-msgstr "Skip-broken је узео %i етапа "
+msgstr "Skip-broken је завршен у %i етапа "
 
-#: ../yum/__init__.py:686
+#: ../yum/__init__.py:694
 msgid ""
 "\n"
 "Packages skipped because of dependency problems:"
 msgstr ""
 "\n"
-"Пакети су прескочени због проблема за зависностима:"
+"Пакети су прескочени због проблема са зависностима:"
 
-#: ../yum/__init__.py:690
+#: ../yum/__init__.py:698
 #, python-format
 msgid "    %s from %s"
 msgstr "    %s из %s"
 
 #: ../yum/__init__.py:779
+msgid ""
+"Warning: scriptlet or other non-fatal errors occurred during transaction."
+msgstr ""
+"Упозорење: дошло је до грешке у скриптици или неке друге некритичне грешке "
+"током транскације."
+
+#: ../yum/__init__.py:794
 #, python-format
 msgid "Failed to remove transaction file %s"
-msgstr "Нисам успео да уклоним датотеку преноса %s"
+msgstr "Нисам успео да уклоним датотеку трансакције %s"
 
-#: ../yum/__init__.py:819
+#: ../yum/__init__.py:834
 #, python-format
 msgid "excluding for cost: %s from %s"
-msgstr "одстрањујем из трошка %s из %s"
+msgstr "изузимам из трошка: %s из %s"
 
-#: ../yum/__init__.py:850
+#: ../yum/__init__.py:865
 msgid "Excluding Packages in global exclude list"
-msgstr "Одстрањујем пакете у глобалном списку за одстрањивања"
+msgstr "Изузимам пакете у глобалном списку за изузимање"
 
-#: ../yum/__init__.py:852
+#: ../yum/__init__.py:867
 #, python-format
 msgid "Excluding Packages from %s"
-msgstr "Одстрањујем пакете из %s"
+msgstr "Изузимам пакете из %s"
 
-#: ../yum/__init__.py:880
+#: ../yum/__init__.py:895
 #, python-format
 msgid "Reducing %s to included packages only"
-msgstr "Редукујем %s у само садржане пакете"
+msgstr "Сажимам %s само у садржане пакете"
 
-#: ../yum/__init__.py:885
+#: ../yum/__init__.py:900
 #, python-format
 msgid "Keeping included package %s"
 msgstr "Задржавам садржани пакет %s"
 
-#: ../yum/__init__.py:891
+#: ../yum/__init__.py:906
 #, python-format
 msgid "Removing unmatched package %s"
 msgstr "Уклањам неповезани пакет %s"
 
-#: ../yum/__init__.py:894
+#: ../yum/__init__.py:909
 msgid "Finished"
 msgstr "Завршио"
 
 #. Whoa. What the heck happened?
-#: ../yum/__init__.py:924
+#: ../yum/__init__.py:939
 #, python-format
 msgid "Unable to check if PID %s is active"
 msgstr "Нисам у могућнисти да проверим да ли је PID %s активан"
 
 #. Another copy seems to be running.
-#: ../yum/__init__.py:928
+#: ../yum/__init__.py:943
 #, python-format
 msgid "Existing lock %s: another copy is running as pid %s."
 msgstr "Постоји закључавање %s: друга копија се извршава као pid %s."
 
-#: ../yum/__init__.py:991
+#: ../yum/__init__.py:1006
 msgid "Package does not match intended download"
 msgstr "Пакет није одговарајући за намеравано преузимање"
 
-#: ../yum/__init__.py:1006
+#: ../yum/__init__.py:1021
 msgid "Could not perform checksum"
-msgstr "Не могу да извршим checksum"
+msgstr "Не могу да извршим контролу суме"
 
-#: ../yum/__init__.py:1009
+#: ../yum/__init__.py:1024
 msgid "Package does not match checksum"
-msgstr "Пакет нема одговарајући checksum"
+msgstr "Пакет нема одговарајући контролну суму"
 
-#: ../yum/__init__.py:1050
+#: ../yum/__init__.py:1068
 #, python-format
 msgid "package fails checksum but caching is enabled for %s"
 msgstr ""
-"пакету нема одговарајућу вредност checksum-а или је за %s укључено кеширање"
+"пакет нема одговарајућу вредност контролне суме или је за %s укључено "
+"кеширање"
 
-#: ../yum/__init__.py:1053
+#: ../yum/__init__.py:1071
 #, python-format
 msgid "using local copy of %s"
 msgstr "користим локални умножак %s-а"
 
-#: ../yum/__init__.py:1077
+#: ../yum/__init__.py:1096
 #, python-format
 msgid "Insufficient space in download directory %s to download"
 msgstr "Недовољна количина простора у директоријуму %s намењеног за преузимање"
 
-#: ../yum/__init__.py:1110
+#: ../yum/__init__.py:1129
 msgid "Header is not complete."
 msgstr "Заглавље није потпуно."
 
-#: ../yum/__init__.py:1150
+#: ../yum/__init__.py:1169
 #, python-format
 msgid ""
 "Header not in local cache and caching-only mode enabled. Cannot download %s"
@@ -1558,207 +1532,218 @@ msgstr ""
 "Заглавље није у локалном кешу и само начин рада са кеширањем је укључен. Не "
 "могу да преузмем %s"
 
-#: ../yum/__init__.py:1205
+#: ../yum/__init__.py:1224
 #, python-format
 msgid "Public key for %s is not installed"
 msgstr "Јавни кључ за %s није инсталиран"
 
-#: ../yum/__init__.py:1209
+#: ../yum/__init__.py:1228
 #, python-format
 msgid "Problem opening package %s"
 msgstr "Проблем са отварањем пакета %s"
 
-#: ../yum/__init__.py:1217
+#: ../yum/__init__.py:1236
 #, python-format
 msgid "Public key for %s is not trusted"
 msgstr "Јавни кључ за %s није поверљив"
 
-#: ../yum/__init__.py:1221
+#: ../yum/__init__.py:1240
 #, python-format
 msgid "Package %s is not signed"
 msgstr "Пакет %s није потписан"
 
-#: ../yum/__init__.py:1259
+#: ../yum/__init__.py:1278
 #, python-format
 msgid "Cannot remove %s"
 msgstr "Не могу да уклоним %s"
 
-#: ../yum/__init__.py:1263
+#: ../yum/__init__.py:1282
 #, python-format
 msgid "%s removed"
-msgstr "%s уклоњен"
+msgstr "%s је уклоњен"
 
-#: ../yum/__init__.py:1299
+#: ../yum/__init__.py:1318
 #, python-format
 msgid "Cannot remove %s file %s"
 msgstr "Не могу да уклоним %s датотеку %s"
 
-#: ../yum/__init__.py:1303
+#: ../yum/__init__.py:1322
 #, python-format
 msgid "%s file %s removed"
 msgstr "%s датотека %s је уклоњена"
 
-#: ../yum/__init__.py:1305
+#: ../yum/__init__.py:1324
 #, python-format
 msgid "%d %s files removed"
 msgstr "%d %s датотеке су уклоњене"
 
-#: ../yum/__init__.py:1359
+#: ../yum/__init__.py:1378
 #, python-format
 msgid "More than one identical match in sack for %s"
 msgstr "Постоји више од једног идентичног слагања у групи за %s"
 
-#: ../yum/__init__.py:1365
+#: ../yum/__init__.py:1384
 #, python-format
 msgid "Nothing matches %s.%s %s:%s-%s from update"
 msgstr "Ништа се не слаже са %s.%s %s:%s-%s из ажурирања"
 
-#: ../yum/__init__.py:1563
+#: ../yum/__init__.py:1577
 msgid ""
 "searchPackages() will go away in a future version of "
 "Yum.                      Use searchGenerator() instead. \n"
 msgstr ""
-"searchPackages() неће бити присутан у будућим верзијама Yum-"
-"а.                      Уместо њега користите searchGenerator(). \n"
+"searchPackages() неће бити присутна у будућим верзијама Yum-"
+"а.                      Уместо ње користите searchGenerator(). \n"
 
-#: ../yum/__init__.py:1600
+#: ../yum/__init__.py:1614
 #, python-format
 msgid "Searching %d packages"
 msgstr "Претражујем %d пакете"
 
-#: ../yum/__init__.py:1604
+#: ../yum/__init__.py:1618
 #, python-format
 msgid "searching package %s"
 msgstr "тражим пакет %s"
 
-#: ../yum/__init__.py:1616
+#: ../yum/__init__.py:1630
 msgid "searching in file entries"
-msgstr "searching у уносима датотека"
+msgstr "тражим у уносима датотека"
 
-#: ../yum/__init__.py:1623
+#: ../yum/__init__.py:1637
 msgid "searching in provides entries"
 msgstr "тражим у уносима достављача"
 
-#: ../yum/__init__.py:1653
+#: ../yum/__init__.py:1667
 #, python-format
 msgid "Provides-match: %s"
 msgstr "Доставља-слагање: %s"
 
-#: ../yum/__init__.py:1722 ../yum/__init__.py:1740 ../yum/__init__.py:1768
-#: ../yum/__init__.py:1773 ../yum/__init__.py:1828 ../yum/__init__.py:1832
+#: ../yum/__init__.py:1736 ../yum/__init__.py:1755 ../yum/__init__.py:1782
+#: ../yum/__init__.py:1788 ../yum/__init__.py:1844 ../yum/__init__.py:1848
 #, python-format
 msgid "No Group named %s exists"
 msgstr "Не постоји група под именом %s"
 
-#: ../yum/__init__.py:1751 ../yum/__init__.py:1844
+#: ../yum/__init__.py:1767 ../yum/__init__.py:1861
 #, python-format
 msgid "package %s was not marked in group %s"
 msgstr "пакет %s није означен у групи %s"
 
-#: ../yum/__init__.py:1790
+#: ../yum/__init__.py:1806
 #, python-format
 msgid "Adding package %s from group %s"
 msgstr "Додајем пакет %s из групе %s"
 
-#: ../yum/__init__.py:1794
+#: ../yum/__init__.py:1810
 #, python-format
 msgid "No package named %s available to be installed"
-msgstr "Ниједан пакет мод именом %s није доступан за инсталацију"
+msgstr "Ниједан пакет под именом %s није доступан за инсталацију"
 
-#: ../yum/__init__.py:1869
+#: ../yum/__init__.py:1886
 #, python-format
 msgid "Package tuple %s could not be found in packagesack"
 msgstr "Група пакета %s није нађена у packagesack-у"
 
-#: ../yum/__init__.py:1937 ../yum/__init__.py:1980
+#: ../yum/__init__.py:1954 ../yum/__init__.py:1994
 msgid "Invalid versioned dependency string, try quoting it."
-msgstr "Ниска зависности има погрешну верзију, покушајте да га обележите."
+msgstr ""
+"Неисправна ниска зависности са верзијом, покушајте да је обележите "
+"наводницима."
 
-#: ../yum/__init__.py:1939 ../yum/__init__.py:1982
+#: ../yum/__init__.py:1956 ../yum/__init__.py:1996
 msgid "Invalid version flag"
-msgstr "Погрешна застава верзије"
+msgstr "Погрешна ознака верзије"
 
-#: ../yum/__init__.py:1954 ../yum/__init__.py:1958
+#: ../yum/__init__.py:1968 ../yum/__init__.py:1972
 #, python-format
 msgid "No Package found for %s"
-msgstr "Нема пронађенох пакета за %s"
+msgstr "Нема пронађених пакета за %s"
 
-#: ../yum/__init__.py:2086
+#: ../yum/__init__.py:2100
 msgid "Package Object was not a package object instance"
 msgstr "Објекат пакета није био примерак објекта пакета"
 
-#: ../yum/__init__.py:2090
+#: ../yum/__init__.py:2104
 msgid "Nothing specified to install"
-msgstr "Ништа није одређено за инсталацију"
+msgstr "Није одређено ништа за инсталацију"
 
 #. only one in there
-#: ../yum/__init__.py:2105
+#: ../yum/__init__.py:2119
 #, python-format
 msgid "Checking for virtual provide or file-provide for %s"
 msgstr "Проверавам виртуелну доставу или доставу датотеке за %s"
 
-#: ../yum/__init__.py:2111 ../yum/__init__.py:2424
+#: ../yum/__init__.py:2125 ../yum/__init__.py:2440
 #, python-format
 msgid "No Match for argument: %s"
 msgstr "Не постоји слагање за аргумент: %s"
 
 #. FIXME - this is where we could check to see if it already installed
 #. for returning better errors
-#: ../yum/__init__.py:2166
+#: ../yum/__init__.py:2180
 msgid "No package(s) available to install"
 msgstr "Нема пакета доступних за инсталацију"
 
-#: ../yum/__init__.py:2178
+#: ../yum/__init__.py:2192
 #, python-format
 msgid "Package: %s  - already in transaction set"
-msgstr "Пакет: %s  - је већ у скупу за пренос"
+msgstr "Пакет: %s  - већ је у скупу трансакције"
 
-#: ../yum/__init__.py:2191
+#: ../yum/__init__.py:2205
 #, python-format
 msgid "Package %s already installed and latest version"
 msgstr "Већ је инсталирана најновија верзија пакета %s"
 
-#: ../yum/__init__.py:2198
+#: ../yum/__init__.py:2212
 #, python-format
 msgid "Package matching %s already installed. Checking for update."
 msgstr ""
 "Пакет који се поклапа са %s је већ инсталиран. Проверавам за новију верзију."
 
+#: ../yum/__init__.py:2223
+#, python-format
+msgid "Package %s is obsoleted by %s, trying to install %s instead"
+msgstr "Пакет %s је замењен пакетом %s, покушавам да наместо инсталирам %s"
+
 #. update everything (the easy case)
-#: ../yum/__init__.py:2240
+#: ../yum/__init__.py:2256
 msgid "Updating Everything"
 msgstr "Ажурирам све"
 
-#: ../yum/__init__.py:2343
+#: ../yum/__init__.py:2359
 #, python-format
 msgid "Package is already obsoleted: %s.%s %s:%s-%s"
 msgstr "Пакет је већ превазиђен: %s.%s %s:%s-%s"
 
-#: ../yum/__init__.py:2367
+#: ../yum/__init__.py:2383
 #, python-format
 msgid "Not Updating Package that is already updated: %s.%s %s:%s-%s"
 msgstr "Не ажурирам пакете који су већ ажурирани: %s.%s %s:%s-%s"
 
-#: ../yum/__init__.py:2421
+#: ../yum/__init__.py:2437
 #, python-format
 msgid "%s"
 msgstr "%s"
 
-#: ../yum/__init__.py:2436
+#. FIXME we should give the caller some nice way to hush this warning
+#. probably just a kwarg of 'silence_warnings' or something
+#. b/c when this is called from groupRemove() it makes a lot of
+#. garbage noise
+#: ../yum/__init__.py:2456
 msgid "No package matched to remove"
 msgstr "Ниједан пакет није одређен за уклањање"
 
-#: ../yum/__init__.py:2470
+#: ../yum/__init__.py:2490
 #, python-format
 msgid "Cannot open file: %s. Skipping."
 msgstr "Не могу да отворим датотеку: %s. Прескачем је."
 
-#: ../yum/__init__.py:2473
+#: ../yum/__init__.py:2493
 #, python-format
 msgid "Examining %s: %s"
 msgstr "Испитујем %s: %s"
 
-#: ../yum/__init__.py:2480
+#: ../yum/__init__.py:2500
 #, python-format
 msgid ""
 "Package %s not installed, cannot update it. Run yum install to install it "
@@ -1767,104 +1752,104 @@ msgstr ""
 "Пакет %s није инсталиран, не могу да га ажурирам. Извршите yum инсталацију "
 "да бисте га инсталирали."
 
-#: ../yum/__init__.py:2513
+#: ../yum/__init__.py:2533
 #, python-format
 msgid "Excluding %s"
-msgstr "Извршавам %s"
+msgstr "Изузимам %s"
 
-#: ../yum/__init__.py:2518
+#: ../yum/__init__.py:2538
 #, python-format
 msgid "Marking %s to be installed"
 msgstr "Означавам %s за инсталацију"
 
-#: ../yum/__init__.py:2524
+#: ../yum/__init__.py:2544
 #, python-format
 msgid "Marking %s as an update to %s"
 msgstr "Означавам %s као ажурирање за %s"
 
-#: ../yum/__init__.py:2531
+#: ../yum/__init__.py:2551
 #, python-format
 msgid "%s: does not update installed package."
 msgstr "%s: не ажурира инсталирани пакет."
 
-#: ../yum/__init__.py:2549
+#: ../yum/__init__.py:2569
 msgid "Problem in reinstall: no package matched to remove"
 msgstr ""
 "Проблем при поновној инсталацији: ниједан пакет није одређен за уклањање"
 
-#: ../yum/__init__.py:2560
+#: ../yum/__init__.py:2580
 #, python-format
 msgid "Package %s is allowed multiple installs, skipping"
 msgstr "Пакету %s су дозвољене многоструке инсталације, прескачем га"
 
-#: ../yum/__init__.py:2567
+#: ../yum/__init__.py:2587
 msgid "Problem in reinstall: no package matched to install"
 msgstr ""
 "Проблем при поновној инсталацији: ниједан пакет није одређен за инсталацију"
 
-#: ../yum/__init__.py:2615
+#: ../yum/__init__.py:2635
 #, python-format
 msgid "Retrieving GPG key from %s"
-msgstr "Добијам GPG кључ од %s"
+msgstr "Добављам GPG кључ са %s"
 
-#: ../yum/__init__.py:2621
+#: ../yum/__init__.py:2641
 msgid "GPG key retrieval failed: "
-msgstr "Достављање GPG кључа није успело: "
+msgstr "Добављање GPG кључа није успело: "
 
-#: ../yum/__init__.py:2634
+#: ../yum/__init__.py:2654
 msgid "GPG key parsing failed: "
 msgstr "Рашчлањивање GPG кључа није успело: "
 
-#: ../yum/__init__.py:2638
+#: ../yum/__init__.py:2658
 #, python-format
 msgid "GPG key at %s (0x%s) is already installed"
 msgstr "GPG кључ на %s (0x%s) је већ инсталиран"
 
 #. Try installing/updating GPG key
-#: ../yum/__init__.py:2643
+#: ../yum/__init__.py:2663
 #, python-format
 msgid "Importing GPG key 0x%s \"%s\" from %s"
 msgstr "Увозим GPG кључ 0x%s „%s“ из %s"
 
-#: ../yum/__init__.py:2655
+#: ../yum/__init__.py:2675
 msgid "Not installing key"
 msgstr "Не инсталирам кључ"
 
-#: ../yum/__init__.py:2661
+#: ../yum/__init__.py:2681
 #, python-format
 msgid "Key import failed (code %d)"
 msgstr "Није успео увоз кључа (код %d)"
 
-#: ../yum/__init__.py:2664
+#: ../yum/__init__.py:2684
 msgid "Key imported successfully"
 msgstr "Кључ је успешно увезен"
 
-#: ../yum/__init__.py:2669
+#: ../yum/__init__.py:2689
 #, python-format
 msgid ""
 "The GPG keys listed for the \"%s\" repository are already installed but they "
 "are not correct for this package.\n"
 "Check that the correct key URLs are configured for this repository."
 msgstr ""
-"GPG кључеви излистани за „%s“ репозиторијум су већ исталирани али нису "
-"одговарајући заовај пакет.\n"
-"Проверите да ли су подешени одговарајући URL-ови кључева за ову ризницу."
+"GPG кључеви излистани за „%s“ ризницу су већ исталирани али нису "
+"одговарајући за овај пакет.\n"
+"Проверите да ли су подешени одговарајући УРЛ-ови кључева за ову ризницу."
 
-#: ../yum/__init__.py:2678
+#: ../yum/__init__.py:2698
 msgid "Import of key(s) didn't help, wrong key(s)?"
 msgstr "Увоз кључа(кључева) није помогао, погрешан кључ(кључеви)?"
 
-#: ../yum/__init__.py:2752
+#: ../yum/__init__.py:2778
 msgid "Unable to find a suitable mirror."
 msgstr "Не могу да пронађем одговарајући одраз."
 
-#: ../yum/__init__.py:2754
+#: ../yum/__init__.py:2780
 msgid "Errors were encountered while downloading packages."
 msgstr "Појавиле су се грешке за време преузимања пакета."
 
-#: ../yum/__init__.py:2819
+#: ../yum/__init__.py:2844
 msgid "Test Transaction Errors: "
-msgstr "Грешке при провери преноса: "
+msgstr "Грешке при провери трансакције: "
 
 #. Mostly copied from YumOutput._outKeyValFill()
 #: ../yum/plugins.py:197
@@ -1884,7 +1869,7 @@ msgstr "„%s“ додатак је искључен"
 #: ../yum/plugins.py:233
 #, python-format
 msgid "Plugin \"%s\" doesn't specify required API version"
-msgstr "Додатак „%s“ не одрећује верзију захтеваног API-а"
+msgstr "Додатак „%s“ не одређује верзију захтеваног API-а"
 
 #: ../yum/plugins.py:237
 #, python-format
@@ -1937,7 +1922,7 @@ msgstr "Није успела md5 провера за %s RPM"
 #: ../rpmUtils/oldUtils.py:144
 msgid "Could not open RPM database for reading. Perhaps it is already in use?"
 msgstr ""
-"Не могу да за потребе читања отворим RPM базу података. Можда је већ у "
+"Не могу да отворим RPM базу података за потребе читања. Можда је већ у "
 "употреби?"
 
 #: ../rpmUtils/oldUtils.py:174
diff --git a/po/sr at latin.po b/po/sr at latin.po
index 9fd45b6..e053e91 100644
--- a/po/sr at latin.po
+++ b/po/sr at latin.po
@@ -1,56 +1,57 @@
-# translation of yum.master.sr.po to Serbian
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
+# translation of sr.po to Serbian
+# Serbian(Latin) translations for yum
+# Copyright (C) 2008 Linux at Duke
+# This file is distributed under the same license as the yum package.
 #
 # Jovan Krunic <jovan.krunic at gmail.com>, 2008.
 # Igor Miletic <grejigl-gnomeprevod at yahoo.ca>, 2008.
+# Miloš Komarčević <kmilos at gmail.com>, 2008.
 msgid ""
 msgstr ""
-"Project-Id-Version: yum.master.sr\n"
+"Project-Id-Version: yum\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-04-07 21:19+0000\n"
-"PO-Revision-Date: 2008-04-07 23:57-0400\n"
-"Last-Translator: Igor Miletic <grejigl-gnomeprevod at yahoo.ca>\n"
-"Language-Team: Serbian <fedora-trans-sr at redhat.com>\n"
+"POT-Creation-Date: 2008-05-26 13:28+0000\n"
+"PO-Revision-Date: 2008-05-26 20:30-0000\n"
+"Last-Translator: Miloš Komarčević <kmilos at gmail.com>\n"
+"Language-Team: Serbian (sr) <fedora-trans-sr at redhat.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms:  nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
 "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: ../callback.py:48 ../output.py:513 ../yum/rpmtrans.py:71
+#: ../callback.py:48 ../output.py:516 ../yum/rpmtrans.py:71
 msgid "Updating"
-msgstr "Ažuriranje"
+msgstr "Ažuriram"
 
 #: ../callback.py:49 ../yum/rpmtrans.py:72
 msgid "Erasing"
-msgstr "Brisanje"
+msgstr "Brišem"
 
-#: ../callback.py:50 ../callback.py:51 ../callback.py:53 ../output.py:512
+#: ../callback.py:50 ../callback.py:51 ../callback.py:53 ../output.py:515
 #: ../yum/rpmtrans.py:73 ../yum/rpmtrans.py:74 ../yum/rpmtrans.py:76
 msgid "Installing"
-msgstr "Instaliranje"
+msgstr "Instaliram"
 
 #: ../callback.py:52 ../callback.py:58 ../yum/rpmtrans.py:75
 msgid "Obsoleted"
 msgstr "Prevaziđeni"
 
-#: ../callback.py:54 ../output.py:559
+#: ../callback.py:54 ../output.py:562
 msgid "Updated"
-msgstr "Ažurirano"
+msgstr "Ažurirani"
 
 #: ../callback.py:55
 msgid "Erased"
-msgstr "Obrisano"
+msgstr "Obrisani"
 
-#: ../callback.py:56 ../callback.py:57 ../callback.py:59 ../output.py:557
+#: ../callback.py:56 ../callback.py:57 ../callback.py:59 ../output.py:560
 msgid "Installed"
-msgstr "Instalirano"
+msgstr "Instalirani"
 
 #: ../callback.py:130
 msgid "No header - huh?"
-msgstr "Nema zaglavlja - je li?"
+msgstr "Nema zaglavlja - hm?"
 
 #: ../callback.py:168
 msgid "Repackage"
@@ -66,7 +67,7 @@ msgstr "Greška: pogrešno izlazno stanje: %s za %s"
 msgid "Erased: %s"
 msgstr "Obrisano: %s"
 
-#: ../callback.py:217 ../output.py:514
+#: ../callback.py:217 ../output.py:517
 msgid "Removing"
 msgstr "Uklanjam"
 
@@ -74,45 +75,45 @@ msgstr "Uklanjam"
 msgid "Cleanup"
 msgstr "Čišćenje"
 
-#: ../cli.py:103
+#: ../cli.py:105
 #, python-format
 msgid "Command \"%s\" already defined"
 msgstr "Naredba „%s“ je već definisana"
 
-#: ../cli.py:115
+#: ../cli.py:117
 msgid "Setting up repositories"
 msgstr "Postavljam riznice"
 
-#: ../cli.py:126
+#: ../cli.py:128
 msgid "Reading repository metadata in from local files"
 msgstr "ÄŒitam metapodatke riznica iz lokalnih datoteka"
 
-#: ../cli.py:183 ../utils.py:72
+#: ../cli.py:185 ../utils.py:71
 #, python-format
 msgid "Config Error: %s"
 msgstr "Greška pri podešavanju: %s"
 
-#: ../cli.py:186 ../cli.py:1070 ../utils.py:75
+#: ../cli.py:188 ../cli.py:1080 ../utils.py:74
 #, python-format
 msgid "Options Error: %s"
 msgstr "Greška u opcijama: %s"
 
-#: ../cli.py:229
+#: ../cli.py:231
 msgid "You need to give some command"
 msgstr "Morate da unesete neku komandu"
 
-#: ../cli.py:271
+#: ../cli.py:273
 msgid "Disk Requirements:\n"
 msgstr "Zahtevi diska:\n"
 
-#: ../cli.py:273
+#: ../cli.py:275
 #, python-format
 msgid "  At least %dMB needed on the %s filesystem.\n"
-msgstr "  Najmanje %dMB je potrebno na vašem %s sistemu datoteka.\n"
+msgstr "  Potrebno je najmanje %dMB na %s sistemu datoteka.\n"
 
 #. TODO: simplify the dependency errors?
 #. Fixup the summary
-#: ../cli.py:278
+#: ../cli.py:280
 msgid ""
 "Error Summary\n"
 "-------------\n"
@@ -120,225 +121,223 @@ msgstr ""
 "Sažetak grešaka\n"
 "-------------\n"
 
-#: ../cli.py:317
+#: ../cli.py:319
 msgid "Trying to run the transaction but nothing to do. Exiting."
-msgstr ""
-"Pokušavam da izvršavam prenos ali nema ništa što mogu da uradim. Izlazim."
+msgstr "Pokušavam da izvršim transakciju ali nema šta da se radi. Izlazim."
 
-#: ../cli.py:347
+#: ../cli.py:349
 msgid "Exiting on user Command"
 msgstr "Izlazim na komandu korisnika"
 
-#: ../cli.py:351
+#: ../cli.py:353
 msgid "Downloading Packages:"
 msgstr "Preuzimam pakete:"
 
-#: ../cli.py:356
+#: ../cli.py:358
 msgid "Error Downloading Packages:\n"
 msgstr "Greška pri preuzimanju paketa:\n"
 
-#: ../cli.py:370 ../yum/__init__.py:2791
+#: ../cli.py:372 ../yum/__init__.py:2816
 msgid "Running rpm_check_debug"
 msgstr "Izvršavam rpm_check_debug"
 
-#: ../cli.py:373 ../yum/__init__.py:2794
+#: ../cli.py:375 ../yum/__init__.py:2819
 msgid "ERROR with rpm_check_debug vs depsolve:"
 msgstr "GREÅ KA sa rpm_check_debug u odnosu na depsolve:"
 
-#: ../cli.py:377 ../yum/__init__.py:2796
+#: ../cli.py:379 ../yum/__init__.py:2821
 msgid "Please report this error in bugzilla"
-msgstr "Molim vas, prijavite ovu grešku u bugzilla-i"
+msgstr "Molim vas, prijavite ovu grešku u bugzilli"
 
-#: ../cli.py:383
+#: ../cli.py:385
 msgid "Running Transaction Test"
-msgstr "Izvršavam proveru prenosa"
+msgstr "Izvršavam proveru transakcije"
 
-#: ../cli.py:399
+#: ../cli.py:401
 msgid "Finished Transaction Test"
-msgstr "Završio sam proveru prenosa"
+msgstr "Završio sam proveru transakcije"
 
-#: ../cli.py:401
+#: ../cli.py:403
 msgid "Transaction Check Error:\n"
-msgstr "Greška pri proveri prenosa:\n"
+msgstr "Greška pri proveri transakcije:\n"
 
-#: ../cli.py:408
+#: ../cli.py:410
 msgid "Transaction Test Succeeded"
-msgstr "Provera prenosa uspela"
+msgstr "Provera transakcije je uspela"
 
-#: ../cli.py:429
+#: ../cli.py:431
 msgid "Running Transaction"
-msgstr "Izvršavam prenos"
+msgstr "Izvršavam transakciju"
 
-#: ../cli.py:459
+#: ../cli.py:461
 msgid ""
 "Refusing to automatically import keys when running unattended.\n"
 "Use \"-y\" to override."
 msgstr ""
-"Odbijanje da se automatski uvezu ključevi kada se izvršavanje ne nadgleda.\n"
+"Odbijam da automatski uvezem ključeve kada se izvršavanje ne nadgleda.\n"
 "Za prevazilaženje ovoga koristite „-y“."
 
-#: ../cli.py:491
+#: ../cli.py:493
 msgid "Parsing package install arguments"
 msgstr "Raščlanjujem argumente instalacije paketa"
 
-#: ../cli.py:501
+#: ../cli.py:503
 #, python-format
 msgid "No package %s available."
 msgstr "Ne postoji dostupan %s paket."
 
-#: ../cli.py:505 ../cli.py:623 ../yumcommands.py:777
+#: ../cli.py:507 ../cli.py:625 ../yumcommands.py:790
 msgid "Package(s) to install"
 msgstr "Paket(i) koji će se instalirati"
 
-#: ../cli.py:506 ../cli.py:624 ../yumcommands.py:147 ../yumcommands.py:778
+#: ../cli.py:508 ../cli.py:626 ../yumcommands.py:147 ../yumcommands.py:791
 msgid "Nothing to do"
-msgstr "Nema ništa da se uradi"
+msgstr "Nema Å¡ta da se radi"
 
-#: ../cli.py:536 ../yum/__init__.py:2252 ../yum/__init__.py:2352
-#: ../yum/__init__.py:2364
+#: ../cli.py:538 ../yum/__init__.py:2268 ../yum/__init__.py:2368
+#: ../yum/__init__.py:2380
 #, python-format
 msgid "Not Updating Package that is already obsoleted: %s.%s %s:%s-%s"
 msgstr "Ne ažuriram pakete koji su već prevaziđeni: %s.%s %s:%s-%s"
 
-#: ../cli.py:568
+#: ../cli.py:570
 #, python-format
 msgid "Could not find update match for %s"
 msgstr "Ne mogu da pronađem odgovarajuće ažuriranje za %s"
 
-#: ../cli.py:580
+#: ../cli.py:582
 #, python-format
 msgid "%d packages marked for Update"
 msgstr "%d paketi označeni za ažuriranje"
 
-#: ../cli.py:583
+#: ../cli.py:585
 msgid "No Packages marked for Update"
 msgstr "Nema paketa označenih za ažuriranje"
 
-#: ../cli.py:599
+#: ../cli.py:601
 #, python-format
 msgid "%d packages marked for removal"
 msgstr "%d paketi označeni za uklanjanje"
 
-#: ../cli.py:602
+#: ../cli.py:604
 msgid "No Packages marked for removal"
 msgstr "Nema paketa označenih za uklanjanje"
 
-#: ../cli.py:614
+#: ../cli.py:616
 msgid "No Packages Provided"
 msgstr "Nijedan paket nije dobavljen"
 
-#: ../cli.py:654
+#: ../cli.py:656
 msgid "Matching packages for package list to user args"
 msgstr "Povezivanje paketa za spisak paketa po argumentima korisnika"
 
-#: ../cli.py:701
+#: ../cli.py:704
 #, python-format
 msgid "Warning: No matches found for: %s"
-msgstr "Upozorenje: Nije nađeno podudaranje za %s"
+msgstr "Upozorenje: nije nađeno podudaranje za %s"
 
-#: ../cli.py:704
+#: ../cli.py:707
 msgid "No Matches found"
 msgstr "Nisu pronađena podudaranja"
 
-#: ../cli.py:745
+#: ../cli.py:748
 #, python-format
 msgid "No Package Found for %s"
 msgstr "Nisu pronađeni paketi za %s"
 
-#: ../cli.py:757
+#: ../cli.py:760
 msgid "Cleaning up Everything"
 msgstr "ÄŒistim sve"
 
-#: ../cli.py:771
+#: ../cli.py:774
 msgid "Cleaning up Headers"
 msgstr "ÄŒistim zaglavlja"
 
-#: ../cli.py:774
+#: ../cli.py:777
 msgid "Cleaning up Packages"
 msgstr "ÄŒistim pakete"
 
-#: ../cli.py:777
+#: ../cli.py:780
 msgid "Cleaning up xml metadata"
 msgstr "ÄŒistim xml metapodatke"
 
-#: ../cli.py:780
+#: ../cli.py:783
 msgid "Cleaning up database cache"
 msgstr "Čistim keš baza podataka"
 
-#: ../cli.py:783
+#: ../cli.py:786
 msgid "Cleaning up expire-cache metadata"
 msgstr "ÄŒistim expire-cache metapodatke"
 
-#: ../cli.py:786
+#: ../cli.py:789
 msgid "Cleaning up plugins"
 msgstr "ÄŒistim dodatke"
 
-#: ../cli.py:807
+#: ../cli.py:811
 msgid "Installed Groups:"
 msgstr "Instalirane grupe:"
 
-#: ../cli.py:814
+#: ../cli.py:818
 msgid "Available Groups:"
 msgstr "Dostupne grupe:"
 
-#: ../cli.py:820
+#: ../cli.py:824
 msgid "Done"
 msgstr "Urađeno"
 
-#: ../cli.py:829 ../cli.py:841 ../cli.py:847
+#: ../cli.py:835 ../cli.py:853 ../cli.py:859
 #, python-format
 msgid "Warning: Group %s does not exist."
 msgstr "Upozorenje: grupa %s ne postoji."
 
-#: ../cli.py:853
+#: ../cli.py:863
 msgid "No packages in any requested group available to install or update"
 msgstr ""
-"Nema paketa u svim zahtevanim grupama, koji su dostupni za instalaciju ili "
-"ažuriranje"
+"Nema dostupnih paketa za instalaciju ili ažuriranje u svim zahtevanim grupama"
 
-#: ../cli.py:855
+#: ../cli.py:865
 #, python-format
 msgid "%d Package(s) to Install"
 msgstr "%d paket(i) za instalaciju"
 
-#: ../cli.py:865
+#: ../cli.py:875
 #, python-format
 msgid "No group named %s exists"
 msgstr "Ne postoji grupa pod imenom %s"
 
-#: ../cli.py:871
+#: ../cli.py:881
 msgid "No packages to remove from groups"
 msgstr "Nema paketa za uklanjanje iz grupa"
 
-#: ../cli.py:873
+#: ../cli.py:883
 #, python-format
 msgid "%d Package(s) to remove"
 msgstr "%d  paket(i) za uklanjanje"
 
-#: ../cli.py:915
+#: ../cli.py:925
 #, python-format
 msgid "Package %s is already installed, skipping"
 msgstr "Paket %s je već instaliran, preskačem ga"
 
-#: ../cli.py:926
+#: ../cli.py:936
 #, python-format
 msgid "Discarding non-comparable pkg %s.%s"
 msgstr "Uklanjam neuporediv paket %s.%s"
 
 #. we've not got any installed that match n or n+a
-#: ../cli.py:952
+#: ../cli.py:962
 #, python-format
 msgid "No other %s installed, adding to list for potential install"
 msgstr ""
 "Ne postoji instaliran drugi %s, dodajem ga u spisak za potencijalnu "
 "instalaciju"
 
-#: ../cli.py:971
+#: ../cli.py:981
 #, python-format
 msgid "Command line error: %s"
 msgstr "Greška komandne linije: %s"
 
-#: ../cli.py:983
+#: ../cli.py:993
 #, python-format
 msgid ""
 "\n"
@@ -349,218 +348,226 @@ msgstr ""
 "\n"
 "%s: %s opcija zahteva argument"
 
-#: ../cli.py:1103
+#: ../cli.py:1122
+msgid "show this help message and exit"
+msgstr "prikaži ovu pomoćnu poruku i izađi"
+
+#: ../cli.py:1126
 msgid "be tolerant of errors"
 msgstr "budi tolerantan na greške"
 
-#: ../cli.py:1105
+#: ../cli.py:1128
 msgid "run entirely from cache, don't update cache"
 msgstr "izvršavaj se u potpunosti iz keša, ne ažuriraj keš"
 
-#: ../cli.py:1107
+#: ../cli.py:1130
 msgid "config file location"
 msgstr "mesto datoteke podešavanja"
 
-#: ../cli.py:1109
+#: ../cli.py:1132
 msgid "maximum command wait time"
-msgstr "najveće čekanje na komandu"
+msgstr "najduže vreme čekanja na komandu"
 
-#: ../cli.py:1111
+#: ../cli.py:1134
 msgid "debugging output level"
-msgstr "nivo pronalaženja grešaka izlaza"
+msgstr "nivo izlaznog prikaza za pronalaženje grešaka"
 
-#: ../cli.py:1115
+#: ../cli.py:1138
 msgid "show duplicates, in repos, in list/search commands"
 msgstr ""
 "prikazuj duplikate, u riznicama, u komandama za izlistavanje/pretraživanje"
 
-#: ../cli.py:1117
+#: ../cli.py:1140
 msgid "error output level"
-msgstr "nivo grešaka izlaza"
+msgstr "nivo izlaznog prikaza grešaka"
 
-#: ../cli.py:1120
+#: ../cli.py:1143
 msgid "quiet operation"
 msgstr "tiha radnja"
 
-#: ../cli.py:1124
+#: ../cli.py:1145
+msgid "verbose operation"
+msgstr "opširna radnja"
+
+#: ../cli.py:1147
 msgid "answer yes for all questions"
-msgstr "odgovori da na sva pitanja"
+msgstr "odgovori sa da na sva pitanja"
 
-#: ../cli.py:1126
+#: ../cli.py:1149
 msgid "show Yum version and exit"
 msgstr "prikaži verziju Yum-a i izađi"
 
-#: ../cli.py:1127
+#: ../cli.py:1150
 msgid "set install root"
 msgstr "postavi koreni direktorijum instalacije"
 
-#: ../cli.py:1131
+#: ../cli.py:1154
 msgid "enable one or more repositories (wildcards allowed)"
 msgstr "uključi jednu ili više riznica (skraćenice su dozvoljene)"
 
-#: ../cli.py:1135
+#: ../cli.py:1158
 msgid "disable one or more repositories (wildcards allowed)"
 msgstr "isključi jednu ili više riznica (skraćenice su dozvoljene)"
 
-#: ../cli.py:1138
+#: ../cli.py:1161
 msgid "exclude package(s) by name or glob"
-msgstr "odstranite paket(e) po imenu ili glob-u"
+msgstr "izuzmite paket(e) po imenu ili glob-u"
 
-#: ../cli.py:1140
+#: ../cli.py:1163
 msgid "disable exclude from main, for a repo or for everything"
-msgstr "isključi odstranjivanje, za repozitorijum ili za sve"
+msgstr "isključi izuzimanje iz glavnog skupa, za riznicu ili za sve"
 
-#: ../cli.py:1143
+#: ../cli.py:1166
 msgid "enable obsoletes processing during updates"
 msgstr "uključi obradu zastarelih paketa u toku ažuriranja"
 
-#: ../cli.py:1145
+#: ../cli.py:1168
 msgid "disable Yum plugins"
 msgstr "isključi dodatke za Yum"
 
-#: ../cli.py:1147
+#: ../cli.py:1170
 msgid "disable gpg signature checking"
 msgstr "isključi proveru gpg potpisa"
 
-#: ../cli.py:1149
+#: ../cli.py:1172
 msgid "disable plugins by name"
 msgstr "isključi dodatke po imenu"
 
-#: ../cli.py:1152
+#: ../cli.py:1175
 msgid "skip packages with depsolving problems"
 msgstr "preskoči pakete koji imaju problema sa rešavanjem zavisnosti"
 
-#: ../output.py:229
+#: ../output.py:228
 msgid "Jan"
-msgstr "Jan"
+msgstr "jan"
 
-#: ../output.py:229
+#: ../output.py:228
 msgid "Feb"
-msgstr "Feb"
+msgstr "feb"
 
-#: ../output.py:229
+#: ../output.py:228
 msgid "Mar"
-msgstr "Mar"
+msgstr "mar"
 
-#: ../output.py:229
+#: ../output.py:228
 msgid "Apr"
-msgstr "Apr"
+msgstr "apr"
 
-#: ../output.py:229
+#: ../output.py:228
 msgid "May"
-msgstr "Maj"
+msgstr "maj"
 
-#: ../output.py:229
+#: ../output.py:228
 msgid "Jun"
-msgstr "Jun"
+msgstr "jun"
 
-#: ../output.py:230
+#: ../output.py:229
 msgid "Jul"
-msgstr "Jul"
+msgstr "jul"
 
-#: ../output.py:230
+#: ../output.py:229
 msgid "Aug"
-msgstr "Avg"
+msgstr "avg"
 
-#: ../output.py:230
+#: ../output.py:229
 msgid "Sep"
-msgstr "Sep"
+msgstr "sep"
 
-#: ../output.py:230
+#: ../output.py:229
 msgid "Oct"
-msgstr "Okt"
+msgstr "okt"
 
-#: ../output.py:230
+#: ../output.py:229
 msgid "Nov"
-msgstr "Nov"
+msgstr "nov"
 
-#: ../output.py:230
+#: ../output.py:229
 msgid "Dec"
-msgstr "Dec"
+msgstr "dec"
 
-#: ../output.py:240
+#: ../output.py:239
 msgid "Trying other mirror."
-msgstr "Pokušaj drugi odraz."
+msgstr "Pokušavam drugi odraz."
 
-#: ../output.py:294
+#: ../output.py:293
 #, python-format
 msgid "Name       : %s"
-msgstr "Ime          : %s"
+msgstr "Ime        : %s"
 
-#: ../output.py:295
+#: ../output.py:294
 #, python-format
 msgid "Arch       : %s"
 msgstr "Arhitektura: %s"
 
-#: ../output.py:297
+#: ../output.py:296
 #, python-format
 msgid "Epoch      : %s"
-msgstr "Period       : %s"
+msgstr "Period     : %s"
 
-#: ../output.py:298
+#: ../output.py:297
 #, python-format
 msgid "Version    : %s"
 msgstr "Verzija    : %s"
 
-#: ../output.py:299
+#: ../output.py:298
 #, python-format
 msgid "Release    : %s"
-msgstr "Izdanje    : %s"
+msgstr "Izdanje     : %s"
 
-#: ../output.py:300
+#: ../output.py:299
 #, python-format
 msgid "Size       : %s"
-msgstr "Veličina       : %s"
+msgstr "Veličina   : %s"
 
-#: ../output.py:301
+#: ../output.py:300
 #, python-format
 msgid "Repo       : %s"
-msgstr "Riznica       : %s"
+msgstr "Riznica    : %s"
 
-#: ../output.py:303
+#: ../output.py:302
 #, python-format
 msgid "Committer  : %s"
-msgstr "Objavljivač  : %s"
+msgstr "Objavljivač : %s"
 
-#: ../output.py:304
+#: ../output.py:303
 msgid "Summary    : "
 msgstr "Sažetak    :"
 
-#: ../output.py:306
+#: ../output.py:305
 #, python-format
 msgid "URL        : %s"
 msgstr "URL        : %s"
 
-#: ../output.py:307
+#: ../output.py:306
 #, python-format
 msgid "License    : %s"
 msgstr "Licenca    : %s"
 
-#: ../output.py:308
+#: ../output.py:307
 msgid "Description: "
-msgstr "Opis:"
+msgstr "Opis       : "
 
-#: ../output.py:352
+#: ../output.py:351
 msgid "Is this ok [y/N]: "
 msgstr "Da li je ovo u redu [d/N]: "
 
-#: ../output.py:358 ../output.py:361
+#: ../output.py:359 ../output.py:362
 msgid "y"
 msgstr "d"
 
-#: ../output.py:358
+#: ../output.py:359
 msgid "n"
 msgstr "n"
 
-#: ../output.py:358 ../output.py:361
+#: ../output.py:359 ../output.py:362
 msgid "yes"
 msgstr "da"
 
-#: ../output.py:358
+#: ../output.py:359
 msgid "no"
 msgstr "ne"
 
-#: ../output.py:368
+#: ../output.py:370
 #, python-format
 msgid ""
 "\n"
@@ -569,96 +576,96 @@ msgstr ""
 "\n"
 "Grupa: %s"
 
-#: ../output.py:370
+#: ../output.py:372
 #, python-format
 msgid " Description: %s"
 msgstr " Opis: %s"
 
-#: ../output.py:372
+#: ../output.py:374
 msgid " Mandatory Packages:"
-msgstr " Glavni paketi:"
+msgstr " Obavezni paketi:"
 
-#: ../output.py:377
+#: ../output.py:379
 msgid " Default Packages:"
 msgstr " Podrazumevani paketi:"
 
-#: ../output.py:382
+#: ../output.py:384
 msgid " Optional Packages:"
-msgstr " Opcionalni paketi:"
+msgstr " Izborni paketi:"
 
-#: ../output.py:387
+#: ../output.py:389
 msgid " Conditional Packages:"
-msgstr " Usklovljeni paketi:"
+msgstr " Uslovljeni paketi:"
 
-#: ../output.py:395
+#: ../output.py:398
 #, python-format
 msgid "package: %s"
 msgstr "paket: %s"
 
-#: ../output.py:397
+#: ../output.py:400
 msgid "  No dependencies for this package"
 msgstr "  Ne postoje zavisnosti ovog paketa"
 
-#: ../output.py:402
+#: ../output.py:405
 #, python-format
 msgid "  dependency: %s"
 msgstr "  zavisnost: %s"
 
-#: ../output.py:404
+#: ../output.py:407
 msgid "   Unsatisfied dependency"
 msgstr "   Nezadovoljena zavisnost"
 
-#: ../output.py:462
+#: ../output.py:465
 msgid "Matched from:"
 msgstr "Povezan iz:"
 
-#: ../output.py:488
+#: ../output.py:491
 msgid "There was an error calculating total download size"
-msgstr "Dogodila se greška pri računanju ukupne veličine preuzimanja"
+msgstr "Dogodila se greška pri računanju ukupne veličine za preuzimanje"
 
-#: ../output.py:493
+#: ../output.py:496
 #, python-format
 msgid "Total size: %s"
 msgstr "Ukupna veličina: %s"
 
-#: ../output.py:496
+#: ../output.py:499
 #, python-format
 msgid "Total download size: %s"
-msgstr "Ukupna veličina preuzimanja: %s"
+msgstr "Ukupna veličina za preuzimanje: %s"
 
-#: ../output.py:508
+#: ../output.py:511
 msgid "Package"
 msgstr "Paket"
 
-#: ../output.py:508
+#: ../output.py:511
 msgid "Arch"
 msgstr "Arhitektura"
 
-#: ../output.py:508
+#: ../output.py:511
 msgid "Version"
 msgstr "Verzija"
 
-#: ../output.py:508
+#: ../output.py:511
 msgid "Repository"
 msgstr "Riznica"
 
-#: ../output.py:508
+#: ../output.py:511
 msgid "Size"
 msgstr "Veličina"
 
-#: ../output.py:515
+#: ../output.py:518
 msgid "Installing for dependencies"
-msgstr "Instaliranje vezana za zavisnosti"
+msgstr "Instaliram zbog zavisnosti"
 
-#: ../output.py:516
+#: ../output.py:519
 msgid "Updating for dependencies"
-msgstr "Ažuriranja vezana za zavisnosti"
+msgstr "Ažuriram zbog zavisnosti"
 
-#: ../output.py:517
+#: ../output.py:520
 msgid "Removing for dependencies"
-msgstr "Uklanjanja vezana za zavisnosti"
+msgstr "Uklanjam zbog zavisnosti"
 
-#: ../output.py:529
+#: ../output.py:532
 #, python-format
 msgid ""
 "     replacing  %s.%s %s\n"
@@ -667,7 +674,7 @@ msgstr ""
 "     uklanjam  %s.%s %s\n"
 "\n"
 
-#: ../output.py:537
+#: ../output.py:540
 #, python-format
 msgid ""
 "\n"
@@ -678,33 +685,33 @@ msgid ""
 "Remove   %5.5s Package(s)         \n"
 msgstr ""
 "\n"
-"Sažetak prenosa\n"
+"Sažetak transakcije\n"
 "=============================================================================\n"
-"instaliraj  %5.5s paket(a)         \n"
-"ažuriraj       %5.5s paket(a)         \n"
-"ukloni             %5.5s paket(a)         \n"
+"instaliranje  %5.5s paket(a)       \n"
+"ažuriranje    %5.5s paket(a)       \n"
+"uklanjanje     %5.5s paket(a)       \n"
 
-#: ../output.py:555
+#: ../output.py:558
 msgid "Removed"
 msgstr "Uklonjeno"
 
-#: ../output.py:556
+#: ../output.py:559
 msgid "Dependency Removed"
 msgstr "Zavisnost uklonjena"
 
-#: ../output.py:558
+#: ../output.py:561
 msgid "Dependency Installed"
 msgstr "Zavisnost instalirana"
 
-#: ../output.py:560
+#: ../output.py:563
 msgid "Dependency Updated"
 msgstr "Zavisnost ažurirana"
 
-#: ../output.py:561
+#: ../output.py:564
 msgid "Replaced"
 msgstr "Zamenjeno"
 
-#: ../output.py:619
+#: ../output.py:622
 #, python-format
 msgid ""
 "\n"
@@ -715,67 +722,67 @@ msgstr ""
 " Trenutno preuzimanje je obustavljeno, %sinterrupt (ctrl-c) još jednom%s u "
 "toku %s%s%s sekundi da biste izašli.\n"
 
-#: ../output.py:629
+#: ../output.py:632
 msgid "user interrupt"
 msgstr "prekid od strane korisnika"
 
-#: ../output.py:640
+#: ../output.py:643
 msgid "installed"
-msgstr "instalirano"
+msgstr "instaliran"
 
-#: ../output.py:641
+#: ../output.py:644
 msgid "updated"
-msgstr "ažurirano"
+msgstr "ažuriran"
 
-#: ../output.py:642
+#: ../output.py:645
 msgid "obsoleted"
-msgstr "prevaziđeno"
+msgstr "prevaziđen"
 
-#: ../output.py:643
+#: ../output.py:646
 msgid "erased"
-msgstr "obrisano"
+msgstr "obrisan"
 
-#: ../output.py:647
+#: ../output.py:650
 #, python-format
 msgid "---> Package %s.%s %s:%s-%s set to be %s"
 msgstr "---> Paket %s.%s %s:%s-%s postavljen da bude %s"
 
-#: ../output.py:654
+#: ../output.py:657
 msgid "--> Running transaction check"
-msgstr "--> Izvršava se provera prenosa"
+msgstr "--> Izvršava se provera transakcije"
 
-#: ../output.py:659
+#: ../output.py:662
 msgid "--> Restarting Dependency Resolution with new changes."
-msgstr "--> Ponovno pokretanje rezolucije zavisnosti sa novim promenama."
+msgstr "--> Ponovno pokretanje razrešavanja zavisnosti sa novim promenama."
 
-#: ../output.py:664
+#: ../output.py:667
 msgid "--> Finished Dependency Resolution"
-msgstr "--> Završena rezolucija zavisnosti"
+msgstr "--> Završeno je razrešavanje zavisnosti"
 
-#: ../output.py:669
+#: ../output.py:672
 #, python-format
 msgid "--> Processing Dependency: %s for package: %s"
 msgstr "--> Obrađujem zavisnost: %s za paket: %s"
 
-#: ../output.py:674
+#: ../output.py:677
 #, python-format
 msgid "--> Unresolved Dependency: %s"
 msgstr "--> Nerazrešena zavisnost: %s"
 
-#: ../output.py:680
+#: ../output.py:683
 #, python-format
 msgid "--> Processing Conflict: %s conflicts %s"
 msgstr "--> Sukob pri obradi: %s se sukobi sa %s"
 
-#: ../output.py:683
+#: ../output.py:686
 msgid "--> Populating transaction set with selected packages. Please wait."
 msgstr ""
-"--> Popunjavam skup transakcija sa izabranim paketima. Molim vas, sačekajte."
+"--> Popunjavam skup transakcije sa izabranim paketima. Molim vas, sačekajte."
 
-#: ../output.py:687
+#: ../output.py:690
 #, python-format
 msgid "---> Downloading header for %s to pack into transaction set."
-msgstr "---> Preuzimam zaglavlje za %s da bi se spakovalo u skup prenosa."
+msgstr "---> Preuzimam zaglavlje za %s radi pakovanja u skup transakcije."
 
 #: ../yumcommands.py:37
 msgid "You need to be root to perform this command."
@@ -800,14 +807,14 @@ msgid ""
 msgstr ""
 "\n"
 "Uključili ste proveru paketa pomoću GPG ključeva. Ovo je dobra stvar. \n"
-"Međutim, nemate instaliran ni jedan GPG javni ključ. Morate da preuzmete\n"
+"Međutim, nemate instaliran nijedan GPG javni ključ. Morate da preuzmete\n"
 "ključeve za pakete koje želite da instalirate i instalirate ih.\n"
 "To možete uraditi izvršavanjem komande:\n"
 "    rpm --import public.gpg.key\n"
 "\n"
 "\n"
 "Takođe, možete odrediti url za ključ koji želite da koristite\n"
-"za piznicu u 'gpgkey' opciji u odeljku vezanim za riznice i yum \n"
+"za riznicu u „gpgkey“ opciji u odeljku vezanim za riznice i yum \n"
 "će ga instalirati za vas.\n"
 "\n"
 "Za više informacija kontaktirajte dobavljača vaše distribucije ili paketa.\n"
@@ -853,8 +860,7 @@ msgstr ""
 #: ../yumcommands.py:116
 msgid "Error: more than one file given as argument to shell."
 msgstr ""
-"Greška: više od jedne datoteke je prosleđeno kao argument komandnom "
-"okruženju."
+"Greška: više od jedne datoteke je prosleđeno kao argument komandnom okruženju."
 
 #: ../yumcommands.py:157
 msgid "PACKAGE..."
@@ -930,7 +936,7 @@ msgstr "Postavljam proces za grupe"
 
 #: ../yumcommands.py:287
 msgid "No Groups on which to run command"
-msgstr "Ne postoji grupa pri kojoj se može izvršavati komanda"
+msgstr "Ne postoji grupa nad kojom se može izvršiti komanda"
 
 #: ../yumcommands.py:300
 msgid "List available package groups"
@@ -978,7 +984,7 @@ msgstr "Proverite da li su dostupna ažuriranja paketa"
 
 #: ../yumcommands.py:493
 msgid "Search package details for the given string"
-msgstr "Pretraži detalje o paketu za zadatu nisku"
+msgstr "Pretražite detalje o paketu za zadatu nisku"
 
 #: ../yumcommands.py:499
 msgid "Searching Packages: "
@@ -986,7 +992,7 @@ msgstr "Pretražujem pakete: "
 
 #: ../yumcommands.py:516
 msgid "Update packages taking obsoletes into account"
-msgstr "Ažurirajte pakete noseći prevaziđene u nalog"
+msgstr "Ažurirajte pakete uzimajući prevaziđene u obzir"
 
 #: ../yumcommands.py:525
 msgid "Setting up Upgrade Process"
@@ -1028,48 +1034,52 @@ msgstr "Tražim zavisnosti: "
 msgid "Display the configured software repositories"
 msgstr "Prikaži podešene softverske riznice"
 
-#: ../yumcommands.py:662
+#: ../yumcommands.py:666
 msgid "enabled"
-msgstr "uključen"
+msgstr "uključena"
 
-#: ../yumcommands.py:665
+#: ../yumcommands.py:673
 msgid "disabled"
-msgstr "isključen"
+msgstr "isključena"
 
-#: ../yumcommands.py:672
+#: ../yumcommands.py:682
 msgid "repo id"
 msgstr "repo id"
 
-#: ../yumcommands.py:673
+#: ../yumcommands.py:683
 msgid "repo name"
 msgstr "repo ime"
 
-#: ../yumcommands.py:673
+#: ../yumcommands.py:683
 msgid "status"
 msgstr "status"
 
-#: ../yumcommands.py:676
+#: ../yumcommands.py:686
 msgid "Repo-id     : "
-msgstr "IB riznice       : "
+msgstr "IB riznice      : "
 
-#: ../yumcommands.py:677
+#: ../yumcommands.py:687
 msgid "Repo-name   : "
-msgstr "Ime riznice    : "
+msgstr "Ime riznice     : "
 
-#: ../yumcommands.py:678
+#: ../yumcommands.py:688
 msgid "Repo-enabled: "
 msgstr "Riznica uključena: "
 
-#: ../yumcommands.py:700
+#: ../yumcommands.py:689
+msgid "Repo-size   : "
+msgstr "Veličina riznice: "
+
+#: ../yumcommands.py:713
 msgid "Display a helpful usage message"
-msgstr "Prikaži korisn poruku o korišćenju"
+msgstr "Prikaži korisnu poruku o upotrebi"
 
-#: ../yumcommands.py:734
+#: ../yumcommands.py:747
 #, python-format
 msgid "No help available for %s"
 msgstr "Nije dostupna pomoć za %s"
 
-#: ../yumcommands.py:739
+#: ../yumcommands.py:752
 msgid ""
 "\n"
 "\n"
@@ -1079,7 +1089,7 @@ msgstr ""
 "\n"
 "alijasi: "
 
-#: ../yumcommands.py:741
+#: ../yumcommands.py:754
 msgid ""
 "\n"
 "\n"
@@ -1089,15 +1099,15 @@ msgstr ""
 "\n"
 "alijas: "
 
-#: ../yumcommands.py:770
+#: ../yumcommands.py:783
 msgid "Setting up Reinstall Process"
 msgstr "Postavljam proces ponovne instalacije"
 
-#: ../yumcommands.py:784
+#: ../yumcommands.py:797
 msgid "reinstall a package"
 msgstr "ponovno instaliram paket"
 
-#: ../yummain.py:41
+#: ../yummain.py:53
 msgid ""
 "\n"
 "\n"
@@ -1107,7 +1117,7 @@ msgstr ""
 "\n"
 "Izlazim kada korisnik otkaže"
 
-#: ../yummain.py:47
+#: ../yummain.py:59
 msgid ""
 "\n"
 "\n"
@@ -1117,41 +1127,41 @@ msgstr ""
 "\n"
 "Izlazim kada se slomi cev"
 
-#: ../yummain.py:105
+#: ../yummain.py:110
 msgid ""
 "Another app is currently holding the yum lock; waiting for it to exit..."
 msgstr ""
 "Neki drugi program trenutno drži yum zaključavanje, čekam da se taj program "
 "isključi..."
 
-#: ../yummain.py:132 ../yummain.py:171
+#: ../yummain.py:137 ../yummain.py:176
 #, python-format
 msgid "Error: %s"
 msgstr "Greška: %s"
 
-#: ../yummain.py:142 ../yummain.py:178
+#: ../yummain.py:147 ../yummain.py:183
 #, python-format
 msgid "Unknown Error(s): Exit Code: %d:"
-msgstr "Nepoznata greška(e): Izlazni čvor: %d:"
+msgstr "Nepoznata greška(e): izlazni kod: %d:"
 
 #. Depsolve stage
-#: ../yummain.py:149
+#: ../yummain.py:154
 msgid "Resolving Dependencies"
 msgstr "Razrešavam zavisnosti"
 
-#: ../yummain.py:184
+#: ../yummain.py:189
 msgid ""
 "\n"
 "Dependencies Resolved"
 msgstr ""
 "\n"
-"Zavisnosti razrešene"
+"Zavisnosti su razrešene"
 
-#: ../yummain.py:198
+#: ../yummain.py:203
 msgid "Complete!"
 msgstr "Završeno!"
 
-#: ../yummain.py:245
+#: ../yummain.py:250
 msgid ""
 "\n"
 "\n"
@@ -1161,192 +1171,147 @@ msgstr ""
 "\n"
 "Izlazim kada korisnik otkaže."
 
-#: ../yum/depsolve.py:83
+#: ../yum/depsolve.py:78
 msgid "doTsSetup() will go away in a future version of Yum.\n"
-msgstr "doTsSetup() neće biti prisutan u budućim verzijama Yum-a.\n"
+msgstr "doTsSetup() neće biti prisutna u budućim verzijama Yum-a.\n"
 
-#: ../yum/depsolve.py:96
+#: ../yum/depsolve.py:91
 msgid "Setting up TransactionSets before config class is up"
-msgstr ""
-"Postavljam postavke transakcije pre nego što se podigne klasa podešavanja"
+msgstr "Postavljam TransactionSets pre nego što se podigne klasa podešavanja"
 
-#: ../yum/depsolve.py:137
+#: ../yum/depsolve.py:132
 #, python-format
 msgid "Invalid tsflag in config file: %s"
 msgstr "Pogrešan tsflag u datoteci podešavanja: %s"
 
-#: ../yum/depsolve.py:148
-#, python-format
-msgid "Searching pkgSack for dep: %s"
-msgstr "Pretražujem pkgSack u potrazi za zavisnosti: %s"
-
-#: ../yum/depsolve.py:171
-#, python-format
-msgid "Potential match for %s from %s"
-msgstr "Potencijalni spoj za %s od %s"
-
-#: ../yum/depsolve.py:179
-#, python-format
-msgid "Matched %s to require for %s"
-msgstr "Pronađeno da je %s zahtevan za %s"
-
-#: ../yum/depsolve.py:220
+#: ../yum/depsolve.py:176
 #, python-format
 msgid "Member: %s"
 msgstr "ÄŒlan: %s"
 
-#: ../yum/depsolve.py:234 ../yum/depsolve.py:687
+#: ../yum/depsolve.py:190 ../yum/depsolve.py:595
 #, python-format
 msgid "%s converted to install"
 msgstr "%s prebačen za instalaciju"
 
-#: ../yum/depsolve.py:241
+#: ../yum/depsolve.py:197
 #, python-format
 msgid "Adding Package %s in mode %s"
 msgstr "Dodajem paket %s u načinu rada %s"
 
-#: ../yum/depsolve.py:251
+#: ../yum/depsolve.py:207
 #, python-format
 msgid "Removing Package %s"
-msgstr "Ukanjam paket %s"
+msgstr "Uklanjam paket %s"
 
-#: ../yum/depsolve.py:262
+#: ../yum/depsolve.py:218
 #, python-format
 msgid "%s requires: %s"
 msgstr "%s zahteva: %s"
 
-#: ../yum/depsolve.py:313
-msgid "Needed Require has already been looked up, cheating"
-msgstr "Potreban uslov je već tražen, varam"
-
-#: ../yum/depsolve.py:323
-#, python-format
-msgid "Needed Require is not a package name. Looking up: %s"
-msgstr "Potreban uslov nije ime paketa. Tražim: %s"
-
-#: ../yum/depsolve.py:330
-#, python-format
-msgid "Potential Provider: %s"
-msgstr "Potencijalni dobavljač: %s"
-
-#: ../yum/depsolve.py:353
-#, python-format
-msgid "Mode is %s for provider of %s: %s"
-msgstr "Način rada je %s za dostavljača %s-a: %s"
-
-#: ../yum/depsolve.py:357
-#, python-format
-msgid "Mode for pkg providing %s: %s"
-msgstr "Način rada za pkg koji pruža %s: %s"
-
-#: ../yum/depsolve.py:361
-#, python-format
-msgid "TSINFO: %s package requiring %s marked as erase"
-msgstr "TSINFO: %s paket zahteva %s označen kao brisanje"
-
-#: ../yum/depsolve.py:373
+#: ../yum/depsolve.py:273
 #, python-format
 msgid "TSINFO: Obsoleting %s with %s to resolve dep."
-msgstr "TSINFO: Menjam %s sa %s da bih razrešio zavisnost."
+msgstr "TSINFO: menjam %s sa %s da bih razrešio zavisnost."
 
-#: ../yum/depsolve.py:376
+#: ../yum/depsolve.py:276
 #, python-format
 msgid "TSINFO: Updating %s to resolve dep."
-msgstr "TSINFO: Ažuriram %s da bih razrešio zavisnost."
+msgstr "TSINFO: ažuriram %s da bih razrešio zavisnost."
 
-#: ../yum/depsolve.py:379
+#: ../yum/depsolve.py:279
 #, python-format
 msgid "Cannot find an update path for dep for: %s"
 msgstr "Ne mogu da pronađem putanju ažuriranja za zavisnost za: %s"
 
-#: ../yum/depsolve.py:389
+#: ../yum/depsolve.py:283
 #, python-format
-msgid "Unresolvable requirement %s for %s"
-msgstr "Nerazrešivi zahtev %s za %s"
+msgid "TSINFO: %s package requiring %s marked as erase"
+msgstr "TSINFO: %s paket zahteva da %s bude označen za brisanje"
 
 #. is it already installed?
-#: ../yum/depsolve.py:435
+#: ../yum/depsolve.py:329
 #, python-format
 msgid "%s is in providing packages but it is already installed, removing."
-msgstr "%s je u pružanju paketa ali je još uvek instaliran, uklanjam ga."
+msgstr "%s je u pruženim paketa ali je već instaliran, uklanjam ga."
 
-#: ../yum/depsolve.py:450
+#: ../yum/depsolve.py:344
 #, python-format
 msgid "Potential resolving package %s has newer instance in ts."
 msgstr "Potencijalno razrešavanje paketa %s ima noviji primerak u ts-u."
 
-#: ../yum/depsolve.py:461
+#: ../yum/depsolve.py:355
 #, python-format
 msgid "Potential resolving package %s has newer instance installed."
 msgstr "Potencijalno razrešavanje paketa %s ima instaliran novi primerak."
 
-#: ../yum/depsolve.py:469 ../yum/depsolve.py:518
+#: ../yum/depsolve.py:363 ../yum/depsolve.py:412
 #, python-format
 msgid "Missing Dependency: %s is needed by package %s"
 msgstr "Nedostaje zavisnost: %s je potreban od strane paketa %s"
 
-#: ../yum/depsolve.py:482
+#: ../yum/depsolve.py:376
 #, python-format
 msgid "%s already in ts, skipping this one"
 msgstr "%s je već u ts-u, preskačem ga"
 
-#: ../yum/depsolve.py:528
+#: ../yum/depsolve.py:422
 #, python-format
 msgid "TSINFO: Marking %s as update for %s"
-msgstr "TSINFO: Označavam %s kao ažuriranje za %s"
+msgstr "TSINFO: označavam %s kao ažuriranje za %s"
 
-#: ../yum/depsolve.py:535
+#: ../yum/depsolve.py:429
 #, python-format
 msgid "TSINFO: Marking %s as install for %s"
-msgstr "TSINFO: Označavam %s kao instalaciju za %s"
+msgstr "TSINFO: označavam %s kao instalaciju za %s"
 
-#: ../yum/depsolve.py:626 ../yum/depsolve.py:705
+#: ../yum/depsolve.py:520 ../yum/depsolve.py:613
 msgid "Success - empty transaction"
 msgstr "Uspeh - prazna transakcija"
 
-#: ../yum/depsolve.py:664 ../yum/depsolve.py:677
+#: ../yum/depsolve.py:565 ../yum/depsolve.py:585
 msgid "Restarting Loop"
-msgstr "Ponovo startujem ponavljanje"
+msgstr "Ponovo pokrećem petlju"
 
-#: ../yum/depsolve.py:693
+#: ../yum/depsolve.py:601
 msgid "Dependency Process ending"
 msgstr "Završetak procesa zavisnosti"
 
-#: ../yum/depsolve.py:699
+#: ../yum/depsolve.py:607
 #, python-format
 msgid "%s from %s has depsolving problems"
 msgstr "%s iz %s ima problema sa razrešavanjem zavisnosti"
 
-#: ../yum/depsolve.py:706
+#: ../yum/depsolve.py:614
 msgid "Success - deps resolved"
 msgstr "Uspeh - zavisnosti su razrešene"
 
-#: ../yum/depsolve.py:720
+#: ../yum/depsolve.py:628
 #, python-format
 msgid "Checking deps for %s"
 msgstr "Proveravam zavisnosti za %s"
 
-#: ../yum/depsolve.py:773
+#: ../yum/depsolve.py:690
 #, python-format
 msgid "looking for %s as a requirement of %s"
 msgstr "tražim %s kao zahtev za %s"
 
-#: ../yum/depsolve.py:911
+#: ../yum/depsolve.py:817
 #, python-format
 msgid "Running compare_providers() for %s"
 msgstr "Pokrećem compare_providers() za %s"
 
-#: ../yum/depsolve.py:939 ../yum/depsolve.py:945
+#: ../yum/depsolve.py:845 ../yum/depsolve.py:851
 #, python-format
 msgid "better arch in po %s"
 msgstr "bolja arhitektura u po %s"
 
-#: ../yum/depsolve.py:984
+#: ../yum/depsolve.py:890
 #, python-format
 msgid "%s obsoletes %s"
-msgstr "%s izbacuje %s"
+msgstr "%s prevazilazi %s"
 
-#: ../yum/depsolve.py:995
+#: ../yum/depsolve.py:901
 #, python-format
 msgid ""
 "archdist compared %s to %s on %s\n"
@@ -1355,412 +1320,430 @@ msgstr ""
 "archdist uporedio %s sa %s na %s\n"
 "  Pobednik: %s"
 
-#: ../yum/depsolve.py:1002
+#: ../yum/depsolve.py:908
 #, python-format
 msgid "common sourcerpm %s and %s"
-msgstr "zajednički izvorni RPM %s i %s"
+msgstr "zajednički izvorni rpm %s i %s"
 
-#: ../yum/depsolve.py:1008
+#: ../yum/depsolve.py:914
 #, python-format
 msgid "common prefix of %s between %s and %s"
 msgstr "zajednički prefiks %s između %s i %s"
 
-#: ../yum/depsolve.py:1016
+#: ../yum/depsolve.py:922
 #, python-format
 msgid "Best Order: %s"
 msgstr "Najbolji redosled: %s"
 
-#: ../yum/__init__.py:127
+#: ../yum/__init__.py:129
 msgid "doConfigSetup() will go away in a future version of Yum.\n"
-msgstr "doConfigSetup() neće biti prisutan u budućim verzijama Yum-a.\n"
+msgstr "doConfigSetup() neće biti prisutna u budućim verzijama Yum-a.\n"
 
-#: ../yum/__init__.py:299
+#: ../yum/__init__.py:303
 #, python-format
 msgid "Repository %r is missing name in configuration, using id"
 msgstr "Riznici %r nedostaje ime u podešavanjima, koristim id"
 
-#: ../yum/__init__.py:335
+#: ../yum/__init__.py:339
 msgid "plugins already initialised"
 msgstr "već inicijalizovani dodaci"
 
-#: ../yum/__init__.py:342
+#: ../yum/__init__.py:346
 msgid "doRpmDBSetup() will go away in a future version of Yum.\n"
-msgstr "doRpmDBSetup() neće biti prisutan u budućim verzijama Yum-a.\n"
+msgstr "doRpmDBSetup() neće biti prisutna u budućim verzijama Yum-a.\n"
 
-#: ../yum/__init__.py:352
+#: ../yum/__init__.py:356
 msgid "Reading Local RPMDB"
 msgstr "ÄŒitam lokalni RPMDB"
 
-#: ../yum/__init__.py:370
+#: ../yum/__init__.py:374
 msgid "doRepoSetup() will go away in a future version of Yum.\n"
-msgstr "doRepoSetup() neće biti prisutan u budućim verzijama Yum-a.\n"
+msgstr "doRepoSetup() neće biti prisutna u budućim verzijama Yum-a.\n"
 
-#: ../yum/__init__.py:390
+#: ../yum/__init__.py:394
 msgid "doSackSetup() will go away in a future version of Yum.\n"
-msgstr "doSackSetup() neće biti prisutan u budućim verzijama Yum-a.\n"
+msgstr "doSackSetup() neće biti prisutna u budućim verzijama Yum-a.\n"
 
-#: ../yum/__init__.py:407
+#: ../yum/__init__.py:411
 msgid "Setting up Package Sacks"
 msgstr "Postavljam grupe paketa"
 
-#: ../yum/__init__.py:450
+#: ../yum/__init__.py:454
 #, python-format
 msgid "repo object for repo %s lacks a _resetSack method\n"
 msgstr "repo objektu za repo %s nedostaje a _resetSack metoda\n"
 
-#: ../yum/__init__.py:451
+#: ../yum/__init__.py:455
 msgid "therefore this repo cannot be reset.\n"
-msgstr "zbog toga se ovaj repo ne može ponovo startovati.\n"
+msgstr "zbog toga se ovaj repo ne može vratiti na početnu postavku.\n"
 
-#: ../yum/__init__.py:456
+#: ../yum/__init__.py:460
 msgid "doUpdateSetup() will go away in a future version of Yum.\n"
-msgstr "doUpdateSetup() neće biti prisutan u budućim verzijama Yum-a.\n"
+msgstr "doUpdateSetup() neće biti prisutna u budućim verzijama Yum-a.\n"
 
-#: ../yum/__init__.py:468
+#: ../yum/__init__.py:472
 msgid "Building updates object"
-msgstr "Izgrađivanje ažurira objekat"
+msgstr "Izgrađujem objekat ažurirnja"
 
-#: ../yum/__init__.py:499
+#: ../yum/__init__.py:503
 msgid "doGroupSetup() will go away in a future version of Yum.\n"
-msgstr "doGroupSetup() neće biti prisutan u budućim verzijama Yum-a.\n"
+msgstr "doGroupSetup() neće biti prisutna u budućim verzijama Yum-a.\n"
 
-#: ../yum/__init__.py:523
+#: ../yum/__init__.py:527
 msgid "Getting group metadata"
-msgstr "Dobavljam grupu metapodataka"
+msgstr "Dobavljam metapodatke grupe"
 
-#: ../yum/__init__.py:549
+#: ../yum/__init__.py:553
 #, python-format
 msgid "Adding group file from repository: %s"
-msgstr "Dodajem grupu datoteka iz riznice: %s"
+msgstr "Dodajem datoteku grupe iz riznice: %s"
 
-#: ../yum/__init__.py:558
+#: ../yum/__init__.py:562
 #, python-format
 msgid "Failed to add groups file for repository: %s - %s"
-msgstr "Nisam uspeo da dodam grupu datoteka za riznicu: %s - %s"
+msgstr "Nisam uspeo da dodam datoteku grupe za riznicu: %s - %s"
 
-#: ../yum/__init__.py:564
+#: ../yum/__init__.py:568
 msgid "No Groups Available in any repository"
 msgstr "Ne postoji grupa koja je dostupna u bilo kojoj riznici"
 
-#: ../yum/__init__.py:614
+#: ../yum/__init__.py:618
 msgid "Importing additional filelist information"
 msgstr "Uvozim dodatne informacije o spiskovima datoteka"
 
-#: ../yum/__init__.py:662
+#: ../yum/__init__.py:670
 #, python-format
 msgid "Skip-broken round %i"
 msgstr "Skip-broken etapa %i"
 
-#: ../yum/__init__.py:685
+#: ../yum/__init__.py:693
 #, python-format
 msgid "Skip-broken took %i rounds "
-msgstr "Skip-broken je uzeo %i etapa "
+msgstr "Skip-broken je završen u %i etapa "
 
-#: ../yum/__init__.py:686
+#: ../yum/__init__.py:694
 msgid ""
 "\n"
 "Packages skipped because of dependency problems:"
 msgstr ""
 "\n"
-"Paketi su preskočeni zbog problema za zavisnostima:"
+"Paketi su preskočeni zbog problema sa zavisnostima:"
 
-#: ../yum/__init__.py:690
+#: ../yum/__init__.py:698
 #, python-format
 msgid "    %s from %s"
 msgstr "    %s iz %s"
 
 #: ../yum/__init__.py:779
+msgid ""
+"Warning: scriptlet or other non-fatal errors occurred during transaction."
+msgstr ""
+"Upozorenje: došlo je do greške u skriptici ili neke druge nekritične greške "
+"tokom transkacije."
+
+#: ../yum/__init__.py:794
 #, python-format
 msgid "Failed to remove transaction file %s"
-msgstr "Nisam uspeo da uklonim datoteku prenosa %s"
+msgstr "Nisam uspeo da uklonim datoteku transakcije %s"
 
-#: ../yum/__init__.py:819
+#: ../yum/__init__.py:834
 #, python-format
 msgid "excluding for cost: %s from %s"
-msgstr "odstranjujem iz troška %s iz %s"
+msgstr "izuzimam iz troška: %s iz %s"
 
-#: ../yum/__init__.py:850
+#: ../yum/__init__.py:865
 msgid "Excluding Packages in global exclude list"
-msgstr "Odstranjujem pakete u globalnom spisku za odstranjivanja"
+msgstr "Izuzimam pakete u globalnom spisku za izuzimanje"
 
-#: ../yum/__init__.py:852
+#: ../yum/__init__.py:867
 #, python-format
 msgid "Excluding Packages from %s"
-msgstr "Odstranjujem pakete iz %s"
+msgstr "Izuzimam pakete iz %s"
 
-#: ../yum/__init__.py:880
+#: ../yum/__init__.py:895
 #, python-format
 msgid "Reducing %s to included packages only"
-msgstr "Redukujem %s u samo sadržane pakete"
+msgstr "Sažimam %s samo u sadržane pakete"
 
-#: ../yum/__init__.py:885
+#: ../yum/__init__.py:900
 #, python-format
 msgid "Keeping included package %s"
 msgstr "Zadržavam sadržani paket %s"
 
-#: ../yum/__init__.py:891
+#: ../yum/__init__.py:906
 #, python-format
 msgid "Removing unmatched package %s"
 msgstr "Uklanjam nepovezani paket %s"
 
-#: ../yum/__init__.py:894
+#: ../yum/__init__.py:909
 msgid "Finished"
 msgstr "Završio"
 
 #. Whoa. What the heck happened?
-#: ../yum/__init__.py:924
+#: ../yum/__init__.py:939
 #, python-format
 msgid "Unable to check if PID %s is active"
 msgstr "Nisam u mogućnisti da proverim da li je PID %s aktivan"
 
 #. Another copy seems to be running.
-#: ../yum/__init__.py:928
+#: ../yum/__init__.py:943
 #, python-format
 msgid "Existing lock %s: another copy is running as pid %s."
 msgstr "Postoji zaključavanje %s: druga kopija se izvršava kao pid %s."
 
-#: ../yum/__init__.py:991
+#: ../yum/__init__.py:1006
 msgid "Package does not match intended download"
 msgstr "Paket nije odgovarajući za nameravano preuzimanje"
 
-#: ../yum/__init__.py:1006
+#: ../yum/__init__.py:1021
 msgid "Could not perform checksum"
-msgstr "Ne mogu da izvršim checksum"
+msgstr "Ne mogu da izvršim kontrolu sume"
 
-#: ../yum/__init__.py:1009
+#: ../yum/__init__.py:1024
 msgid "Package does not match checksum"
-msgstr "Paket nema odgovarajući checksum"
+msgstr "Paket nema odgovarajući kontrolnu sumu"
 
-#: ../yum/__init__.py:1050
+#: ../yum/__init__.py:1068
 #, python-format
 msgid "package fails checksum but caching is enabled for %s"
 msgstr ""
-"paketu nema odgovarajuću vrednost checksum-a ili je za %s uključeno keširanje"
+"paket nema odgovarajuću vrednost kontrolne sume ili je za %s uključeno "
+"keširanje"
 
-#: ../yum/__init__.py:1053
+#: ../yum/__init__.py:1071
 #, python-format
 msgid "using local copy of %s"
 msgstr "koristim lokalni umnožak %s-a"
 
-#: ../yum/__init__.py:1077
+#: ../yum/__init__.py:1096
 #, python-format
 msgid "Insufficient space in download directory %s to download"
-msgstr ""
-"Nedovoljna količina prostora u direktorijumu %s namenjenog za preuzimanje"
+msgstr "Nedovoljna količina prostora u direktorijumu %s namenjenog za preuzimanje"
 
-#: ../yum/__init__.py:1110
+#: ../yum/__init__.py:1129
 msgid "Header is not complete."
 msgstr "Zaglavlje nije potpuno."
 
-#: ../yum/__init__.py:1150
+#: ../yum/__init__.py:1169
 #, python-format
 msgid ""
 "Header not in local cache and caching-only mode enabled. Cannot download %s"
 msgstr ""
-"Zaglavlje nije u lokalnom kešu i samo način rada sa keširanjem je uključen. "
-"Ne mogu da preuzmem %s"
+"Zaglavlje nije u lokalnom kešu i samo način rada sa keširanjem je uključen. Ne "
+"mogu da preuzmem %s"
 
-#: ../yum/__init__.py:1205
+#: ../yum/__init__.py:1224
 #, python-format
 msgid "Public key for %s is not installed"
 msgstr "Javni ključ za %s nije instaliran"
 
-#: ../yum/__init__.py:1209
+#: ../yum/__init__.py:1228
 #, python-format
 msgid "Problem opening package %s"
 msgstr "Problem sa otvaranjem paketa %s"
 
-#: ../yum/__init__.py:1217
+#: ../yum/__init__.py:1236
 #, python-format
 msgid "Public key for %s is not trusted"
 msgstr "Javni ključ za %s nije poverljiv"
 
-#: ../yum/__init__.py:1221
+#: ../yum/__init__.py:1240
 #, python-format
 msgid "Package %s is not signed"
 msgstr "Paket %s nije potpisan"
 
-#: ../yum/__init__.py:1259
+#: ../yum/__init__.py:1278
 #, python-format
 msgid "Cannot remove %s"
 msgstr "Ne mogu da uklonim %s"
 
-#: ../yum/__init__.py:1263
+#: ../yum/__init__.py:1282
 #, python-format
 msgid "%s removed"
-msgstr "%s uklonjen"
+msgstr "%s je uklonjen"
 
-#: ../yum/__init__.py:1299
+#: ../yum/__init__.py:1318
 #, python-format
 msgid "Cannot remove %s file %s"
 msgstr "Ne mogu da uklonim %s datoteku %s"
 
-#: ../yum/__init__.py:1303
+#: ../yum/__init__.py:1322
 #, python-format
 msgid "%s file %s removed"
 msgstr "%s datoteka %s je uklonjena"
 
-#: ../yum/__init__.py:1305
+#: ../yum/__init__.py:1324
 #, python-format
 msgid "%d %s files removed"
 msgstr "%d %s datoteke su uklonjene"
 
-#: ../yum/__init__.py:1359
+#: ../yum/__init__.py:1378
 #, python-format
 msgid "More than one identical match in sack for %s"
 msgstr "Postoji više od jednog identičnog slaganja u grupi za %s"
 
-#: ../yum/__init__.py:1365
+#: ../yum/__init__.py:1384
 #, python-format
 msgid "Nothing matches %s.%s %s:%s-%s from update"
 msgstr "Ništa se ne slaže sa %s.%s %s:%s-%s iz ažuriranja"
 
-#: ../yum/__init__.py:1563
+#: ../yum/__init__.py:1577
 msgid ""
 "searchPackages() will go away in a future version of "
 "Yum.                      Use searchGenerator() instead. \n"
 msgstr ""
-"searchPackages() neće biti prisutan u budućim verzijama Yum-"
-"a.                      Umesto njega koristite searchGenerator(). \n"
+"searchPackages() neće biti prisutna u budućim verzijama Yum-"
+"a.                      Umesto nje koristite searchGenerator(). \n"
 
-#: ../yum/__init__.py:1600
+#: ../yum/__init__.py:1614
 #, python-format
 msgid "Searching %d packages"
 msgstr "Pretražujem %d pakete"
 
-#: ../yum/__init__.py:1604
+#: ../yum/__init__.py:1618
 #, python-format
 msgid "searching package %s"
 msgstr "tražim paket %s"
 
-#: ../yum/__init__.py:1616
+#: ../yum/__init__.py:1630
 msgid "searching in file entries"
-msgstr "searching u unosima datoteka"
+msgstr "tražim u unosima datoteka"
 
-#: ../yum/__init__.py:1623
+#: ../yum/__init__.py:1637
 msgid "searching in provides entries"
 msgstr "tražim u unosima dostavljača"
 
-#: ../yum/__init__.py:1653
+#: ../yum/__init__.py:1667
 #, python-format
 msgid "Provides-match: %s"
 msgstr "Dostavlja-slaganje: %s"
 
-#: ../yum/__init__.py:1722 ../yum/__init__.py:1740 ../yum/__init__.py:1768
-#: ../yum/__init__.py:1773 ../yum/__init__.py:1828 ../yum/__init__.py:1832
+#: ../yum/__init__.py:1736 ../yum/__init__.py:1755 ../yum/__init__.py:1782
+#: ../yum/__init__.py:1788 ../yum/__init__.py:1844 ../yum/__init__.py:1848
 #, python-format
 msgid "No Group named %s exists"
 msgstr "Ne postoji grupa pod imenom %s"
 
-#: ../yum/__init__.py:1751 ../yum/__init__.py:1844
+#: ../yum/__init__.py:1767 ../yum/__init__.py:1861
 #, python-format
 msgid "package %s was not marked in group %s"
 msgstr "paket %s nije označen u grupi %s"
 
-#: ../yum/__init__.py:1790
+#: ../yum/__init__.py:1806
 #, python-format
 msgid "Adding package %s from group %s"
 msgstr "Dodajem paket %s iz grupe %s"
 
-#: ../yum/__init__.py:1794
+#: ../yum/__init__.py:1810
 #, python-format
 msgid "No package named %s available to be installed"
-msgstr "Nijedan paket mod imenom %s nije dostupan za instalaciju"
+msgstr "Nijedan paket pod imenom %s nije dostupan za instalaciju"
 
-#: ../yum/__init__.py:1869
+#: ../yum/__init__.py:1886
 #, python-format
 msgid "Package tuple %s could not be found in packagesack"
 msgstr "Grupa paketa %s nije nađena u packagesack-u"
 
-#: ../yum/__init__.py:1937 ../yum/__init__.py:1980
+#: ../yum/__init__.py:1954 ../yum/__init__.py:1994
 msgid "Invalid versioned dependency string, try quoting it."
-msgstr "Niska zavisnosti ima pogrešnu verziju, pokušajte da ga obeležite."
+msgstr ""
+"Neispravna niska zavisnosti sa verzijom, pokušajte da je obeležite "
+"navodnicima."
 
-#: ../yum/__init__.py:1939 ../yum/__init__.py:1982
+#: ../yum/__init__.py:1956 ../yum/__init__.py:1996
 msgid "Invalid version flag"
-msgstr "Pogrešna zastava verzije"
+msgstr "Pogrešna oznaka verzije"
 
-#: ../yum/__init__.py:1954 ../yum/__init__.py:1958
+#: ../yum/__init__.py:1968 ../yum/__init__.py:1972
 #, python-format
 msgid "No Package found for %s"
-msgstr "Nema pronađenoh paketa za %s"
+msgstr "Nema pronađenih paketa za %s"
 
-#: ../yum/__init__.py:2086
+#: ../yum/__init__.py:2100
 msgid "Package Object was not a package object instance"
 msgstr "Objekat paketa nije bio primerak objekta paketa"
 
-#: ../yum/__init__.py:2090
+#: ../yum/__init__.py:2104
 msgid "Nothing specified to install"
-msgstr "Ništa nije određeno za instalaciju"
+msgstr "Nije određeno ništa za instalaciju"
 
 #. only one in there
-#: ../yum/__init__.py:2105
+#: ../yum/__init__.py:2119
 #, python-format
 msgid "Checking for virtual provide or file-provide for %s"
 msgstr "Proveravam virtuelnu dostavu ili dostavu datoteke za %s"
 
-#: ../yum/__init__.py:2111 ../yum/__init__.py:2424
+#: ../yum/__init__.py:2125 ../yum/__init__.py:2440
 #, python-format
 msgid "No Match for argument: %s"
 msgstr "Ne postoji slaganje za argument: %s"
 
 #. FIXME - this is where we could check to see if it already installed
 #. for returning better errors
-#: ../yum/__init__.py:2166
+#: ../yum/__init__.py:2180
 msgid "No package(s) available to install"
 msgstr "Nema paketa dostupnih za instalaciju"
 
-#: ../yum/__init__.py:2178
+#: ../yum/__init__.py:2192
 #, python-format
 msgid "Package: %s  - already in transaction set"
-msgstr "Paket: %s  - je već u skupu za prenos"
+msgstr "Paket: %s  - već je u skupu transakcije"
 
-#: ../yum/__init__.py:2191
+#: ../yum/__init__.py:2205
 #, python-format
 msgid "Package %s already installed and latest version"
 msgstr "Već je instalirana najnovija verzija paketa %s"
 
-#: ../yum/__init__.py:2198
+#: ../yum/__init__.py:2212
 #, python-format
 msgid "Package matching %s already installed. Checking for update."
 msgstr ""
 "Paket koji se poklapa sa %s je već instaliran. Proveravam za noviju verziju."
 
+#: ../yum/__init__.py:2223
+#, python-format
+msgid "Package %s is obsoleted by %s, trying to install %s instead"
+msgstr "Paket %s je zamenjen paketom %s, pokušavam da namesto instaliram %s"
+
 #. update everything (the easy case)
-#: ../yum/__init__.py:2240
+#: ../yum/__init__.py:2256
 msgid "Updating Everything"
 msgstr "Ažuriram sve"
 
-#: ../yum/__init__.py:2343
+#: ../yum/__init__.py:2359
 #, python-format
 msgid "Package is already obsoleted: %s.%s %s:%s-%s"
 msgstr "Paket je već prevaziđen: %s.%s %s:%s-%s"
 
-#: ../yum/__init__.py:2367
+#: ../yum/__init__.py:2383
 #, python-format
 msgid "Not Updating Package that is already updated: %s.%s %s:%s-%s"
 msgstr "Ne ažuriram pakete koji su već ažurirani: %s.%s %s:%s-%s"
 
-#: ../yum/__init__.py:2421
+#: ../yum/__init__.py:2437
 #, python-format
 msgid "%s"
 msgstr "%s"
 
-#: ../yum/__init__.py:2436
+#. FIXME we should give the caller some nice way to hush this warning
+#. probably just a kwarg of 'silence_warnings' or something
+#. b/c when this is called from groupRemove() it makes a lot of
+#. garbage noise
+#: ../yum/__init__.py:2456
 msgid "No package matched to remove"
 msgstr "Nijedan paket nije određen za uklanjanje"
 
-#: ../yum/__init__.py:2470
+#: ../yum/__init__.py:2490
 #, python-format
 msgid "Cannot open file: %s. Skipping."
 msgstr "Ne mogu da otvorim datoteku: %s. Preskačem je."
 
-#: ../yum/__init__.py:2473
+#: ../yum/__init__.py:2493
 #, python-format
 msgid "Examining %s: %s"
 msgstr "Ispitujem %s: %s"
 
-#: ../yum/__init__.py:2480
+#: ../yum/__init__.py:2500
 #, python-format
 msgid ""
 "Package %s not installed, cannot update it. Run yum install to install it "
@@ -1769,104 +1752,104 @@ msgstr ""
 "Paket %s nije instaliran, ne mogu da ga ažuriram. Izvršite yum instalaciju "
 "da biste ga instalirali."
 
-#: ../yum/__init__.py:2513
+#: ../yum/__init__.py:2533
 #, python-format
 msgid "Excluding %s"
-msgstr "Izvršavam %s"
+msgstr "Izuzimam %s"
 
-#: ../yum/__init__.py:2518
+#: ../yum/__init__.py:2538
 #, python-format
 msgid "Marking %s to be installed"
 msgstr "Označavam %s za instalaciju"
 
-#: ../yum/__init__.py:2524
+#: ../yum/__init__.py:2544
 #, python-format
 msgid "Marking %s as an update to %s"
 msgstr "Označavam %s kao ažuriranje za %s"
 
-#: ../yum/__init__.py:2531
+#: ../yum/__init__.py:2551
 #, python-format
 msgid "%s: does not update installed package."
 msgstr "%s: ne ažurira instalirani paket."
 
-#: ../yum/__init__.py:2549
+#: ../yum/__init__.py:2569
 msgid "Problem in reinstall: no package matched to remove"
 msgstr ""
 "Problem pri ponovnoj instalaciji: nijedan paket nije određen za uklanjanje"
 
-#: ../yum/__init__.py:2560
+#: ../yum/__init__.py:2580
 #, python-format
 msgid "Package %s is allowed multiple installs, skipping"
 msgstr "Paketu %s su dozvoljene mnogostruke instalacije, preskačem ga"
 
-#: ../yum/__init__.py:2567
+#: ../yum/__init__.py:2587
 msgid "Problem in reinstall: no package matched to install"
 msgstr ""
 "Problem pri ponovnoj instalaciji: nijedan paket nije određen za instalaciju"
 
-#: ../yum/__init__.py:2615
+#: ../yum/__init__.py:2635
 #, python-format
 msgid "Retrieving GPG key from %s"
-msgstr "Dobijam GPG ključ od %s"
+msgstr "Dobavljam GPG ključ sa %s"
 
-#: ../yum/__init__.py:2621
+#: ../yum/__init__.py:2641
 msgid "GPG key retrieval failed: "
-msgstr "Dostavljanje GPG ključa nije uspelo: "
+msgstr "Dobavljanje GPG ključa nije uspelo: "
 
-#: ../yum/__init__.py:2634
+#: ../yum/__init__.py:2654
 msgid "GPG key parsing failed: "
 msgstr "Raščlanjivanje GPG ključa nije uspelo: "
 
-#: ../yum/__init__.py:2638
+#: ../yum/__init__.py:2658
 #, python-format
 msgid "GPG key at %s (0x%s) is already installed"
 msgstr "GPG ključ na %s (0x%s) je već instaliran"
 
 #. Try installing/updating GPG key
-#: ../yum/__init__.py:2643
+#: ../yum/__init__.py:2663
 #, python-format
 msgid "Importing GPG key 0x%s \"%s\" from %s"
 msgstr "Uvozim GPG ključ 0x%s „%s“ iz %s"
 
-#: ../yum/__init__.py:2655
+#: ../yum/__init__.py:2675
 msgid "Not installing key"
 msgstr "Ne instaliram ključ"
 
-#: ../yum/__init__.py:2661
+#: ../yum/__init__.py:2681
 #, python-format
 msgid "Key import failed (code %d)"
 msgstr "Nije uspeo uvoz ključa (kod %d)"
 
-#: ../yum/__init__.py:2664
+#: ../yum/__init__.py:2684
 msgid "Key imported successfully"
 msgstr "Ključ je uspešno uvezen"
 
-#: ../yum/__init__.py:2669
+#: ../yum/__init__.py:2689
 #, python-format
 msgid ""
 "The GPG keys listed for the \"%s\" repository are already installed but they "
 "are not correct for this package.\n"
 "Check that the correct key URLs are configured for this repository."
 msgstr ""
-"GPG ključevi izlistani za „%s“ repozitorijum su već istalirani ali nisu "
-"odgovarajući zaovaj paket.\n"
+"GPG ključevi izlistani za „%s“ riznicu su već istalirani ali nisu "
+"odgovarajući za ovaj paket.\n"
 "Proverite da li su podešeni odgovarajući URL-ovi ključeva za ovu riznicu."
 
-#: ../yum/__init__.py:2678
+#: ../yum/__init__.py:2698
 msgid "Import of key(s) didn't help, wrong key(s)?"
 msgstr "Uvoz ključa(ključeva) nije pomogao, pogrešan ključ(ključevi)?"
 
-#: ../yum/__init__.py:2752
+#: ../yum/__init__.py:2778
 msgid "Unable to find a suitable mirror."
 msgstr "Ne mogu da pronađem odgovarajući odraz."
 
-#: ../yum/__init__.py:2754
+#: ../yum/__init__.py:2780
 msgid "Errors were encountered while downloading packages."
 msgstr "Pojavile su se greške za vreme preuzimanja paketa."
 
-#: ../yum/__init__.py:2819
+#: ../yum/__init__.py:2844
 msgid "Test Transaction Errors: "
-msgstr "Greške pri proveri prenosa: "
+msgstr "Greške pri proveri transakcije: "
 
 #. Mostly copied from YumOutput._outKeyValFill()
 #: ../yum/plugins.py:197
@@ -1886,7 +1869,7 @@ msgstr "„%s“ dodatak je isključen"
 #: ../yum/plugins.py:233
 #, python-format
 msgid "Plugin \"%s\" doesn't specify required API version"
-msgstr "Dodatak „%s“ ne odrećuje verziju zahtevanog API-a"
+msgstr "Dodatak „%s“ ne određuje verziju zahtevanog API-a"
 
 #: ../yum/plugins.py:237
 #, python-format
@@ -1903,8 +1886,8 @@ msgstr "Učitavam „%s“ dodatak"
 msgid ""
 "Two or more plugins with the name \"%s\" exist in the plugin search path"
 msgstr ""
-"U putanji za pretraživanje dodataka postoje dva ili više dodataka pod imenom "
-"„%s“"
+"U putanji za pretraživanje dodataka postoje dva ili više dodataka pod imenom „%"
+"s“"
 
 #: ../yum/plugins.py:293
 #, python-format
@@ -1939,7 +1922,7 @@ msgstr "Nije uspela md5 provera za %s RPM"
 #: ../rpmUtils/oldUtils.py:144
 msgid "Could not open RPM database for reading. Perhaps it is already in use?"
 msgstr ""
-"Ne mogu da za potrebe čitanja otvorim RPM bazu podataka. Možda je već u "
+"Ne mogu da otvorim RPM bazu podataka za potrebe čitanja. Možda je već u "
 "upotrebi?"
 
 #: ../rpmUtils/oldUtils.py:174
commit 4a7acc768e4b466fe23c09435a2beff963461ecb
Author: Florian Festi <ffesti at redhat.com>
Date:   Thu Dec 13 17:53:01 2007 +0100

    Remove old excluded mechanism from SqliteSack

diff --git a/yum/sqlitesack.py b/yum/sqlitesack.py
index 31c4eb0..f0617bb 100644
--- a/yum/sqlitesack.py
+++ b/yum/sqlitesack.py
@@ -261,8 +261,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
         self.primarydb = {}
         self.filelistsdb = {}
         self.otherdb = {}
-        self.excludes = {}
-        self._excludes = set() # of (repo, pkgKey)
+        self._excludes = { } # repo ->set(pkgKeys)
         self._all_excludes = {}
         self._search_cache = {
             'provides' : { },
@@ -295,14 +294,16 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
             return 0
             
         exclude_num = 0
-        for repo in self.excludes:
-            exclude_num += len(self.excludes[repo])
-        if hasattr(self, 'pkgobjlist'):
+        for excludes in self._excludes.values():
+            exclude_num += len(excludes)
+
+        if hasattr(self, 'pkgobjlist') and not self._all_excludes:
             return len(self.pkgobjlist) - exclude_num
         
         pkg_num = 0
-        sql = "SELECT count(pkgId) FROM packages"
         for repo in self.primarydb:
+            if repo in self._all_excludes:
+                continue
             pkg_num += self._sql_MD_pkg_num('primary', repo)
         return pkg_num - exclude_num
 
@@ -331,9 +332,14 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
         self.primarydb = {}
         self.filelistsdb = {}
         self.otherdb = {}
-        self.excludes = {}
-        self._excludes = set()
         self._all_excludes = {}
+        self._excludes.clear()
+        self._search_cache = {
+            'provides' : { },
+            'requires' : { },
+            }
+        if hasattr(self, 'pkgobjlist'):
+            del self.pkgobjlist
 
         yumRepo.YumPackageSack.close(self)
 
@@ -349,33 +355,25 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
     # Because we don't want to remove a package from the database we just
     # add it to the exclude list
     def delPackage(self, obj):
-        if not self.excludes.has_key(obj.repo):
-            self.excludes[obj.repo] = {}
-        self.excludes[obj.repo][obj.pkgId] = 1
-        self._excludes.add( (obj.repo, obj.pkgKey) )
+        if obj.repo in self._all_excludes:
+            return
+        if not self._excludes.has_key(obj.repo):
+            self._excludes[obj.repo] = set()
+        self._excludes[obj.repo].add(obj.pkgKey)
 
     def _delAllPackages(self, repo):
         """ Exclude all packages from the repo. """
         self._all_excludes[repo] = True
-        if repo in self.excludes:
-            del self.excludes[repo]
+        if repo in self._excludes:
+            self._excludes[repo].clear()
         if repo in self._key2pkg:
             del self._key2pkg[repo]
 
-    def _excluded(self, repo, pkgId):
-        if repo in self._all_excludes:
-            return True
-        
-        if repo in self.excludes and pkgId in self.excludes[repo]:
-            return True
-                
-        return False
-
     def _pkgKeyExcluded(self, repo, pkgKey):
         if repo in self._all_excludes:
             return True
 
-        return (repo, pkgKey) in self._excludes
+        return self._excludes.has_key(repo) and pkgKey in self._excludes[repo]
 
     def _pkgExcluded(self, po):
         return self._pkgKeyExcluded(po.repo, po.pkgKey)
@@ -398,9 +396,6 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
         else:
             self.added[repo] = []
 
-        if not self.excludes.has_key(repo): 
-            self.excludes[repo] = {}
-
         if dataobj is None:
             raise Errors.RepoError, "Tried to add None %s to %s" % (datatype, repo)
 
commit 7bf7ce04f34b0fa1540b02de70d696675864efc3
Merge: 976043b... 3194633...
Author: James Antill <james at and.org>
Date:   Mon May 26 17:37:23 2008 -0400

    Merge branch 'master' of ssh://login.linux.duke.edu/home/groups/yum/git/yum
    
    * 'master' of ssh://login.linux.duke.edu/home/groups/yum/git/yum:
      Fix flag conversion in YumHeaderPackage._populatePrco()
      Use already known txmbr when resolving installed pkgs problems
      Restart .check* every time the tsInfo got modified to only resolve problems that still exist
      Make Depsolve.check* generators instead of returning lists
      Make sure rpm.RPMSENSE_* int constants are used as flags in PRCOs.
      Fix code merge error in RpmSack._getPRCO
      PackageSack API cleanup
      Remove Depsolve.whatProvides

commit 3194633958f626f94784ae06b17ed23f37d03451
Author: Florian Festi <ffesti at redhat.com>
Date:   Mon May 26 13:12:18 2008 +0200

    Fix flag conversion in YumHeaderPackage._populatePrco()
    broken in febe35eee130212380e5688bd119f19a032d74fc

diff --git a/yum/packages.py b/yum/packages.py
index 7dbc3a0..4e5d61e 100644
--- a/yum/packages.py
+++ b/yum/packages.py
@@ -751,9 +751,7 @@ class YumHeaderPackage(YumAvailablePackage):
             if name is None:
                 continue
 
-            lst = hdr[getattr(rpm, 'RPMTAG_%sFLAGS' % tag)]
-            # flag = map(rpmUtils.miscutils.flagToString, lst)
-            flag = map(misc.share_data, flag)
+            flag = map(misc.share_data, hdr[getattr(rpm, 'RPMTAG_%sFLAGS' % tag)])
 
             lst = hdr[getattr(rpm, 'RPMTAG_%sVERSION' % tag)]
             vers = map(rpmUtils.miscutils.stringToVersion, lst)
commit 41f8ae4532ba7810534a7eefb9e0d05c78a98178
Author: Florian Festi <ffesti at redhat.com>
Date:   Wed Feb 13 12:33:38 2008 +0100

    Use already known txmbr when resolving installed pkgs problems

diff --git a/yum/depsolve.py b/yum/depsolve.py
index cc5ba2c..8a9811a 100644
--- a/yum/depsolve.py
+++ b/yum/depsolve.py
@@ -206,7 +206,7 @@ class Depsolve(object):
                 self.verbose_logger.log(logginglevels.DEBUG_1,
                     _('Removing Package %s'), txmbr.po)
 
-    def _processReq(self, po, requirement):
+    def _processReq(self, po, requirement, remove_txmbr=None):
         """processes a Requires dep from the resolveDeps functions, returns a tuple
            of (CheckDeps, missingdep, conflicts, errors) the last item is an array
            of error messages"""
@@ -222,7 +222,7 @@ class Depsolve(object):
             if po.repo.id != "installed":
                 CheckDeps, missingdep = self._requiringFromTransaction(po, requirement, errormsgs)
             else:
-                CheckDeps, missingdep = self._requiringFromInstalled(po, requirement, errormsgs)
+                CheckDeps, missingdep = self._requiringFromInstalled(po, requirement, remove_txmbr, errormsgs)
     
             # Check packages with problems
             if missingdep:
@@ -241,7 +241,7 @@ class Depsolve(object):
 
         return (CheckDeps, missingdep, errormsgs)
             
-    def _requiringFromInstalled(self, requiringPo, requirement, errorlist):
+    def _requiringFromInstalled(self, requiringPo, requirement, remove_txmbr, errorlist):
         """processes the dependency resolution for a dep where the requiring 
            package is installed"""
 
@@ -256,71 +256,15 @@ class Depsolve(object):
         needname, needflags, needversion = requirement
         niceformatneed = rpmUtils.miscutils.formatRequire(needname, needversion, needflags)
 
-
-        # we must first find out why the requirement is no longer there
-        # we must find out what provides/provided it from the rpmdb (if anything)
-        # then check to see if that thing is being acted upon by the transaction set
-        # if it is then we need to find out what is being done to it and act accordingly
-        needmode = None # mode in the transaction of the needed pkg (if any)
-        needpo = None
-        providers = []
-        
-        if self.cheaterlookup.has_key((needname, needflags, needversion)):
-            self.verbose_logger.log(logginglevels.DEBUG_2, _('Needed Require has already been looked up, cheating'))
-            cheater_po = self.cheaterlookup[(needname, needflags, needversion)]
-            providers = [cheater_po]
-        
-        elif self.rpmdb.contains(name=needname):
-            txmbrs = self.tsInfo.matchNaevr(name=needname)
-            for txmbr in txmbrs:
-                providers.append(txmbr.po)
-
-        else:
-            self.verbose_logger.log(logginglevels.DEBUG_2, _('Needed Require is not a package name. Looking up: %s'), niceformatneed)
-            providers = self.rpmdb.getProvides(needname, needflags, needversion)
-
-        for inst_po in providers:
-            inst_str = '%s.%s %s:%s-%s' % inst_po.pkgtup
-            (i_n, i_a, i_e, i_v, i_r) = inst_po.pkgtup
-            self.verbose_logger.log(logginglevels.DEBUG_2,
-                _('Potential Provider: %s'), inst_str)
-            thismode = self.tsInfo.getMode(name=i_n, arch=i_a, 
-                            epoch=i_e, ver=i_v, rel=i_r)
-
-            if thismode is None and i_n in self.conf.exactarchlist:
-                # check for mode by the same name+arch
-                thismode = self.tsInfo.getMode(name=i_n, arch=i_a)
-            
-            if thismode is None and i_n not in self.conf.exactarchlist:
-                # check for mode by just the name
-                thismode = self.tsInfo.getMode(name=i_n)
-
-            # if this package is being obsoleted, it's just like if it's
-            # being upgraded as far as checking for other providers
-            if thismode is None:
-                if filter(lambda x: x.obsoleted_by,
-                          self.tsInfo.matchNaevr(i_n, i_a, i_e, i_v, i_r)):
-                    thismode = 'u'
-
-            if thismode is not None:
-                needmode = thismode
-
-                self.cheaterlookup[(needname, needflags, needversion)] = inst_po
-                self.verbose_logger.log(logginglevels.DEBUG_2, _('Mode is %s for provider of %s: %s'),
-                    needmode, niceformatneed, inst_str)
-                break
-                    
-        self.verbose_logger.log(logginglevels.DEBUG_2, _('Mode for pkg providing %s: %s'), 
-            niceformatneed, needmode)
-
-        if needmode in ['e']:
-            self.verbose_logger.log(logginglevels.DEBUG_2, _('TSINFO: %s package requiring %s marked as erase'),
-                requiringPo, needname)
-            txmbr = self.tsInfo.addErase(requiringPo)
-            txmbr.setAsDep(po=inst_po)
-            checkdeps = 1
+        if not remove_txmbr:
+            for po in self.rpmdb.getProvides(*requirement):
+                for txmbr in self.tsInfo.getMembersWithState(po.pkgtup, TS_REMOVE_STATES):
+                    if (remove_txmbr is None or
+                        (not txmbr.obsoleted_by and not txmbr.updated_by)):
+                        # prefer true deletes
+                        remove_txmbr = txmbr
         
-        if needmode in ['i', 'u']:
+        if remove_txmbr and (remove_txmbr.obsoleted_by or remove_txmbr.updated_by):
             length = len(self.tsInfo)
             self.update(name=name, epoch=epoch, version=ver, release=rel)
             txmbrs = self.tsInfo.getMembersWithState(requiringPo.pkgtup, TS_REMOVE_STATES)
@@ -334,23 +278,16 @@ class Depsolve(object):
                 return checkdeps, missingdep
             self.verbose_logger.log(logginglevels.DEBUG_2, _('Cannot find an update path for dep for: %s'), niceformatneed)
             return self._requiringFromTransaction(requiringPo, requirement, errorlist)
-            
 
-        if needmode is None:
-            reqpkg = (name, ver, rel, None)
-            if self.pkgSack is None:
-                return self._requiringFromTransaction(requiringPo, requirement, errorlist)
-            else:
-                prob_pkg = "%s (%s)" % (requiringPo,requiringPo.repoid)
-                msg = _('Unresolvable requirement %s for %s') % (niceformatneed,
-                                                               prob_pkg)
-                self.verbose_logger.log(logginglevels.DEBUG_2, msg)
-                checkdeps = 0
-                missingdep = 1
-                errorlist.append(msg)
+        if remove_txmbr and remove_txmbr.ts_state=='e' and not (remove_txmbr.obsoleted_by or remove_txmbr.updated_by):
+            self.verbose_logger.log(logginglevels.DEBUG_2, _('TSINFO: %s package requiring %s marked as erase'),
+                requiringPo, needname)
+            txmbr = self.tsInfo.addErase(requiringPo)
+            txmbr.setAsDep(po=remove_txmbr.po)
+            checkdeps = 1
+            return checkdeps, missingdep
 
-        return checkdeps, missingdep
-        
+        return self._requiringFromTransaction(requiringPo, requirement, errorlist)
 
     def _requiringFromTransaction(self, requiringPo, requirement, errorlist):
         """processes the dependency resolution for a dep where requiring 
@@ -709,8 +646,8 @@ class Depsolve(object):
             missing_in_pkg = False
 
             while True:
-                for po, dep in thisneeds:
-                    (checkdep, missing, errormsgs) = self._processReq(po, dep)
+                for po, dep, removed_txmbr in thisneeds:
+                    (checkdep, missing, errormsgs) = self._processReq(po, dep, removed_txmbr)
                     CheckDeps |= checkdep
                     errors += errormsgs
                     missing_in_pkg |= missing
@@ -753,7 +690,7 @@ class Depsolve(object):
             self.verbose_logger.log(logginglevels.DEBUG_2, _("looking for %s as a requirement of %s"), req, txmbr)
             provs = self.tsInfo.getProvides(*req)
             if not provs:
-                yield (txmbr.po, (req[0], req[1], version_tuple_to_string(req[2])))
+                yield (txmbr.po, (req[0], req[1], version_tuple_to_string(req[2])), None)
 
             #Add relationship
             for po in provs:
@@ -784,7 +721,7 @@ class Depsolve(object):
             for pkg, hits in self.tsInfo.getRequires(*prov).iteritems():
                 for rn, rf, rv in hits:
                     if not self.tsInfo.getProvides(rn, rf, rv):
-                        yield (pkg, (rn, rf, version_tuple_to_string(rv)))
+                        yield (pkg, (rn, rf, version_tuple_to_string(rv)), txmbr)
 
     def _checkFileRequires(self):
         fileRequires = set()
commit bec9421eb464da4af918b0325f75bed0eb65f35c
Author: Florian Festi <ffesti at redhat.com>
Date:   Mon Feb 18 14:21:07 2008 +0100

    Restart .check* every time the tsInfo got modified to only resolve problems that still exist

diff --git a/yum/depsolve.py b/yum/depsolve.py
index 1fe8657..cc5ba2c 100644
--- a/yum/depsolve.py
+++ b/yum/depsolve.py
@@ -611,10 +611,17 @@ class Depsolve(object):
             # check global FileRequires
             if CheckRemoves:
                 CheckRemoves = False
-                for po, dep in self._checkFileRequires():
-                    (checkdep, missing, errormsgs) = self._processReq(po, dep)
-                    CheckDeps |= checkdep
-                    errors += errormsgs
+                filerequires = self._checkFileRequires()
+                while True:
+                    for po, dep in filerequires:
+                        (checkdep, missing, errormsgs) = self._processReq(po, dep)
+                        CheckDeps |= checkdep
+                        errors += errormsgs
+                        if CheckDeps:
+                            filerequires = self._checkFileRequires()
+                            break
+                    else:
+                        break # end while loop if for loop ran through
 
                 if CheckDeps:
                     if self.dsCallback: self.dsCallback.restartLoop()
@@ -624,10 +631,17 @@ class Depsolve(object):
             # check Conflicts
             if CheckInstalls:
                 CheckInstalls = False
-                for conflict in self._checkConflicts():
-                    (checkdep, errormsgs) = self._processConflict(*conflict)
-                    CheckDeps |= checkdep
-                    errors += errormsgs
+                conflicts = self._checkConflicts()
+                while True:
+                    for conflict in conflicts:
+                        (checkdep, errormsgs) = self._processConflict(*conflict)
+                        CheckDeps |= checkdep
+                        errors += errormsgs
+                        if checkdep:
+                            conflicts = self._checkConflicts()
+                            break
+                    else:
+                        break # end while loop if for loop ran through
 
                 if CheckDeps:
                     if self.dsCallback: self.dsCallback.restartLoop()
@@ -693,11 +707,21 @@ class Depsolve(object):
                 CheckRemoves = True
 
             missing_in_pkg = False
-            for po, dep in thisneeds:
-                (checkdep, missing, errormsgs) = self._processReq(po, dep)
-                CheckDeps |= checkdep
-                errors += errormsgs
-                missing_in_pkg |= missing
+
+            while True:
+                for po, dep in thisneeds:
+                    (checkdep, missing, errormsgs) = self._processReq(po, dep)
+                    CheckDeps |= checkdep
+                    errors += errormsgs
+                    missing_in_pkg |= missing
+                    if checkdep:
+                        if (txmbr.output_state in TS_INSTALL_STATES) == (txmbr.po.state != None):
+                            thisneeds = self._checkInstall(txmbr)
+                        else:
+                            thisneeds = self._checkRemove(txmbr)
+                        break
+                else:
+                    break
 
             if not missing_in_pkg:
                 self.tsInfo.markAsResolved(txmbr)
commit 58e9cbd609d9225ea9a7e3a0262362eb976973e1
Author: Florian Festi <ffesti at redhat.com>
Date:   Mon Feb 18 13:56:19 2008 +0100

    Make Depsolve.check* generators instead of returning lists

diff --git a/yum/depsolve.py b/yum/depsolve.py
index 190f33b..1fe8657 100644
--- a/yum/depsolve.py
+++ b/yum/depsolve.py
@@ -718,7 +718,6 @@ class Depsolve(object):
             oldreqs.extend(oldpo.returnPrco('requires'))
         oldreqs = set(oldreqs)
 
-        ret = []
         for req in txmbr_reqs:
             if req[0].startswith('rpmlib('):
                 continue
@@ -730,8 +729,7 @@ class Depsolve(object):
             self.verbose_logger.log(logginglevels.DEBUG_2, _("looking for %s as a requirement of %s"), req, txmbr)
             provs = self.tsInfo.getProvides(*req)
             if not provs:
-                ret.append( (txmbr.po, (req[0], req[1], version_tuple_to_string(req[2]))) )
-                continue
+                yield (txmbr.po, (req[0], req[1], version_tuple_to_string(req[2])))
 
             #Add relationship
             for po in provs:
@@ -741,8 +739,6 @@ class Depsolve(object):
                     pkgtup=po.pkgtup, output_states=TS_INSTALL_STATES):
                     member.relatedto.append((txmbr.po, 'dependson'))
 
-        return ret
-
     def _checkRemove(self, txmbr):
         po = txmbr.po
         provs = po.returnPrco('provides')
@@ -753,7 +749,6 @@ class Depsolve(object):
         for newpo in txmbr.updated_by:
             for p in newpo.provides:
                 newpoprovs[p] = 1
-        ret = []
         
         # iterate over the provides of the package being removed
         # and see what's actually going away
@@ -765,13 +760,11 @@ class Depsolve(object):
             for pkg, hits in self.tsInfo.getRequires(*prov).iteritems():
                 for rn, rf, rv in hits:
                     if not self.tsInfo.getProvides(rn, rf, rv):
-                        ret.append( (pkg, (rn, rf, version_tuple_to_string(rv))) )
-        return ret
+                        yield (pkg, (rn, rf, version_tuple_to_string(rv)))
 
     def _checkFileRequires(self):
         fileRequires = set()
         reverselookup = {}
-        ret = []
 
         # generate list of file requirement in rpmdb
         if self.installedFileRequires is None:
@@ -818,13 +811,9 @@ class Depsolve(object):
         for filename in fileRequires:
             if not self.tsInfo.getOldProvides(filename) and not self.tsInfo.getNewProvides(filename):
                 for po in reverselookup[filename]:
-                    ret.append( (po, (filename, 0, '')) )
-
-        return ret
-
+                    yield (po, (filename, 0, ''))
 
     def _checkConflicts(self):
-        ret = [ ]
         for po in self.rpmdb.returnPackages():
             if self.tsInfo.getMembersWithState(po.pkgtup, output_states=TS_REMOVE_STATES):
                 continue
@@ -833,7 +822,7 @@ class Depsolve(object):
                 for conflicting_po in self.tsInfo.getNewProvides(r, f, v):
                     if conflicting_po.pkgtup[0] == po.pkgtup[0] and conflicting_po.pkgtup[2:] == po.pkgtup[2:]:
                         continue
-                    ret.append( (po, (r, f, version_tuple_to_string(v)), conflicting_po) )
+                    yield (po, (r, f, version_tuple_to_string(v)), conflicting_po)
         for txmbr in self.tsInfo.getMembersWithState(output_states=TS_INSTALL_STATES):
             po = txmbr.po
             for conflict in txmbr.po.returnPrco('conflicts'):
@@ -841,8 +830,7 @@ class Depsolve(object):
                 for conflicting_po in self.tsInfo.getProvides(r, f, v):
                     if conflicting_po.pkgtup[0] == po.pkgtup[0] and conflicting_po.pkgtup[2:] == po.pkgtup[2:]:
                         continue
-                    ret.append( (po, (r, f, version_tuple_to_string(v)), conflicting_po) )
-        return ret
+                    yield (po, (r, f, version_tuple_to_string(v)), conflicting_po)
 
 
     def isPackageInstalled(self, pkgname):
commit febe35eee130212380e5688bd119f19a032d74fc
Author: Florian Festi <ffesti at redhat.com>
Date:   Fri May 23 16:05:00 2008 +0200

    Make sure rpm.RPMSENSE_* int constants are used as flags in PRCOs.
    Added short hand constants to testbase
    Adjusted the test cases

diff --git a/rpmUtils/miscutils.py b/rpmUtils/miscutils.py
index 64e232e..606aea0 100644
--- a/rpmUtils/miscutils.py
+++ b/rpmUtils/miscutils.py
@@ -129,7 +129,7 @@ def rangeCheck(reqtuple, pkgtuple):
     # nameonly shouldn't ever raise it
     #(reqn, reqf, (reqe, reqv, reqr)) = reqtuple
     (n, a, e, v, r) = pkgtuple
-    return rangeCompare(reqtuple, (n, 'EQ', (e, v, r)))
+    return rangeCompare(reqtuple, (n, rpm.RPMSENSE_EQUAL, (e, v, r)))
 
 def rangeCompare(reqtuple, provtuple):
     """returns true if provtuple satisfies reqtuple"""
@@ -141,6 +141,9 @@ def rangeCompare(reqtuple, provtuple):
     if f is None or reqf is None:
         return 1
 
+    if isinstance(f, str) or isinstance(reqf, str):
+        raise ValueError, "%r %r" % (f, reqf)
+
     # and you thought we were done having fun
     # if the requested release is left out then we have
     # to remove release from the package prco to make sure the match
@@ -161,42 +164,33 @@ def rangeCompare(reqtuple, provtuple):
 
     # does not match unless
     if rc >= 1:
-        if reqf in ['GT', 'GE', 4, 12]:
+        if reqf & rpm.RPMSENSE_GREATER:
             return 1
-        if reqf in ['EQ', 8]:
-            if f in ['LE', 10]:
+        if reqf == rpm.RPMSENSE_EQUAL:
+            if f == (rpm.RPMSENSE_LESS|rpm.RPMSENSE_EQUAL):
                 return 1
     if rc == 0:
-        if reqf in ['GT', 4]:
-            if f in ['GT', 'GE', 4, 12]:
+        if reqf == rpm.RPMSENSE_GREATER:
+            if f & rpm.RPMSENSE_GREATER:
                 return 1
-        if reqf in ['GE', 12]:
-            if f in ['GT', 'GE', 'EQ', 'LE', 4, 12, 8, 10]:
+        if reqf == (rpm.RPMSENSE_GREATER|rpm.RPMSENSE_EQUAL):
+            if f != rpm.RPMSENSE_LESS:
                 return 1
-        if reqf in ['EQ', 8]:
-            if f in ['EQ', 'GE', 'LE', 8, 12, 10]:
+        if reqf == rpm.RPMSENSE_EQUAL:
+            if f & rpm.RPMSENSE_EQUAL:
                 return 1
-        if reqf in ['LE', 10]:
-            if f in ['EQ', 'LE', 'LT', 'GE', 8, 10, 2, 12]:
+        if reqf == (rpm.RPMSENSE_LESS|rpm.RPMSENSE_EQUAL):
+            if f != rpm.RPMSENSE_GREATER:
                 return 1
-        if reqf in ['LT', 2]:
-            if f in ['LE', 'LT', 10, 2]:
+        if reqf == rpm.RPMSENSE_LESS:
+            if f & rpm.RPMSENSE_LESS:
                 return 1
     if rc <= -1:
-        if reqf in ['GT', 'GE', 'EQ', 4, 12, 8]:
-            if f in ['GT', 'GE', 4, 12]:
+        if not (reqf & rpm.RPMSENSE_LESS):
+            if f & rpm.RPMSENSE_GREATER:
                 return 1
-        if reqf in ['LE', 'LT', 10, 2]:
+        if reqf & rpm.RPMSENSE_LESS:
             return 1
-#                if rc >= 1:
-#                    if reqf in ['GT', 'GE', 4, 12]:
-#                        return 1
-#                if rc == 0:
-#                    if reqf in ['GE', 'LE', 'EQ', 8, 10, 12]:
-#                        return 1
-#                if rc <= -1:
-#                    if reqf in ['LT', 'LE', 2, 10]:
-#                        return 1
 
     return 0
 
diff --git a/test/depsolvetests.py b/test/depsolvetests.py
index 3f8c748..3e445ba 100644
--- a/test/depsolvetests.py
+++ b/test/depsolvetests.py
@@ -64,7 +64,7 @@ class DepsolveTests(DepsolveTests):
 
     def testInstallSinglePackageRequireVer1NotProvided(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
-        po.addRequires('zip', 'EQ', (None, '1.3', '2'))
+        po.addRequires('zip', EQ, (None, '1.3', '2'))
         self.tsInfo.addInstall(po)
 
         ipo = FakePackage('zip', '1.0', '2', None, 'i386')
@@ -74,7 +74,7 @@ class DepsolveTests(DepsolveTests):
 
     def testInstallSinglePackageRequireVer1Installed(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
-        po.addRequires('zip', 'EQ', (None, '1.3', '2'))
+        po.addRequires('zip', EQ, (None, '1.3', '2'))
         self.tsInfo.addInstall(po)
 
         ipo = FakePackage('zip', '1.3', '2', None, 'i386')
@@ -85,7 +85,7 @@ class DepsolveTests(DepsolveTests):
 
     def testInstallSinglePackageRequireVer2NotProvided(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
-        po.addRequires('zip', 'EQ', (None, '1.3', '4'))
+        po.addRequires('zip', EQ, (None, '1.3', '4'))
         self.tsInfo.addInstall(po)
 
         ipo = FakePackage('zip', '1.3', '2', None, 'i386')
@@ -95,7 +95,7 @@ class DepsolveTests(DepsolveTests):
 
     def testInstallSinglePackageRequireVer2Installed(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
-        po.addRequires('zip', 'EQ', (None, '1.3', '4'))
+        po.addRequires('zip', EQ, (None, '1.3', '4'))
         self.tsInfo.addInstall(po)
 
         ipo = FakePackage('zip', '1.3', '4', None, 'i386')
@@ -106,7 +106,7 @@ class DepsolveTests(DepsolveTests):
 
     def testInstallSinglePackageRequireVer3NotProvided(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
-        po.addRequires('zip', 'GE', ('1', '1.3', '4'))
+        po.addRequires('zip', GE, ('1', '1.3', '4'))
         self.tsInfo.addInstall(po)
 
         ipo = FakePackage('zip', '1.3', '4', '0', 'i386')
@@ -116,7 +116,7 @@ class DepsolveTests(DepsolveTests):
 
     def testInstallSinglePackageRequireVer3Installed(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
-        po.addRequires('zip', 'GE', ('2', '1.3', '4'))
+        po.addRequires('zip', GE, ('2', '1.3', '4'))
         self.tsInfo.addInstall(po)
 
         ipo = FakePackage('zip', '1.3', '4', '2', 'i386')
@@ -127,7 +127,7 @@ class DepsolveTests(DepsolveTests):
 
     def testInstallSinglePackageRequireVer4NotProvided(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
-        po.addRequires('zip', 'LT', ('2', '1.3', '4'))
+        po.addRequires('zip', LT, ('2', '1.3', '4'))
         self.tsInfo.addInstall(po)
 
         ipo = FakePackage('zip', '1.3', '4', '2', 'i386')
@@ -137,7 +137,7 @@ class DepsolveTests(DepsolveTests):
 
     def testInstallSinglePackageRequireVer4_1Installed(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
-        po.addRequires('zip', 'LT', ('2', '1.3', '4'))
+        po.addRequires('zip', LT, ('2', '1.3', '4'))
         self.tsInfo.addInstall(po)
 
         ipo = FakePackage('zip', '1.0', '4', '2', 'i386')
@@ -147,7 +147,7 @@ class DepsolveTests(DepsolveTests):
         self.assertResult((po, ipo))
     def testInstallSinglePackageRequireVer4_2Installed(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
-        po.addRequires('zip', 'LT', ('2', '1.3', '4'))
+        po.addRequires('zip', LT, ('2', '1.3', '4'))
         self.tsInfo.addInstall(po)
 
         ipo = FakePackage('zip', '1.3', '3', '2', 'i386')
@@ -157,7 +157,7 @@ class DepsolveTests(DepsolveTests):
         self.assertResult((po, ipo))
     def testInstallSinglePackageRequireVer4_3Installed(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
-        po.addRequires('zip', 'LT', ('2', '1.3', '4'))
+        po.addRequires('zip', LT, ('2', '1.3', '4'))
         self.tsInfo.addInstall(po)
 
         ipo = FakePackage('zip', '1.3', '4', None, 'i386')
@@ -167,7 +167,7 @@ class DepsolveTests(DepsolveTests):
         self.assertResult((po, ipo))
     def testInstallSinglePackageRequireVer4_4Installed(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
-        po.addRequires('zip', 'LT', ('2', '1.3', '4'))
+        po.addRequires('zip', LT, ('2', '1.3', '4'))
         self.tsInfo.addInstall(po)
 
         ipo = FakePackage('zip', '1.3', '4', '1', 'i386')
@@ -177,7 +177,7 @@ class DepsolveTests(DepsolveTests):
         self.assertResult((po, ipo))
     def testInstallSinglePackageRequireVer4_5Installed(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
-        po.addRequires('zip', 'LT', ('2', '1.3', '4'))
+        po.addRequires('zip', LT, ('2', '1.3', '4'))
         self.tsInfo.addInstall(po)
 
         ipo = FakePackage('zip', '0.3', '4', '2', 'i386')
@@ -188,8 +188,8 @@ class DepsolveTests(DepsolveTests):
 
     def testInstallSinglePackageRequireXtraBadVer(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
-        po.addRequires('zip', 'EQ', ('2', '1.3', '4'))
-        po.addRequires('zap', 'EQ', ('2', '1.3', '4'))
+        po.addRequires('zip', EQ, ('2', '1.3', '4'))
+        po.addRequires('zap', EQ, ('2', '1.3', '4'))
         self.tsInfo.addInstall(po)
 
         ipo = FakePackage('zip', '1.3', '4', '2', 'i386')
@@ -202,8 +202,8 @@ class DepsolveTests(DepsolveTests):
 
     def testInstallSinglePackageRequireXtra(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
-        po.addRequires('zip', 'EQ', ('2', '1.3', '4'))
-        po.addRequires('zap', 'EQ', ('4', '2.6', '8'))
+        po.addRequires('zip', EQ, ('2', '1.3', '4'))
+        po.addRequires('zap', EQ, ('4', '2.6', '8'))
         self.tsInfo.addInstall(po)
 
         ipo = FakePackage('zip', '1.3', '4', '2', 'i386')
@@ -217,11 +217,11 @@ class DepsolveTests(DepsolveTests):
         
     def testInstallSinglePackageRequireInstalledRequireXtra(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
-        po.addRequires('zip', 'EQ', ('2', '1.3', '4'))
+        po.addRequires('zip', EQ, ('2', '1.3', '4'))
         self.tsInfo.addInstall(po)
 
         ipo = FakePackage('zip', '1.3', '4', '2', 'i386')
-        ipo.addRequires('zap', 'EQ', ('4', '2.6', '8'))
+        ipo.addRequires('zap', EQ, ('4', '2.6', '8'))
         self.rpmdb.addPackage(ipo)
         
         xpo = FakePackage('zap', '2.6', '8', '4', 'i386')
@@ -232,33 +232,33 @@ class DepsolveTests(DepsolveTests):
         
     def testInstallSinglePackageRequireUpgradeRequireXtraErr(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
-        po.addRequires('zip', 'EQ', ('4', '2.6', '8'))
+        po.addRequires('zip', EQ, ('4', '2.6', '8'))
         self.tsInfo.addInstall(po)
 
         ipo = FakePackage('zip', '1.3', '4', '2', 'i386')
-        ipo.addRequires('zap', 'EQ', ('2', '1.3', '3'))
+        ipo.addRequires('zap', EQ, ('2', '1.3', '3'))
         self.rpmdb.addPackage(ipo)
         
         xpo = FakePackage('zip', '2.6', '8', '4', 'i386')
-        xpo.addRequires('zap', 'EQ', ('2', '1.3', '4'))
+        xpo.addRequires('zap', EQ, ('2', '1.3', '4'))
         self.xsack.addPackage(xpo)
         xpo = FakePackage('zap', '1.3', '4', '2', 'i386')
-        xpo.addRequires('zsh', 'EQ', ('2', '4', '8'))
+        xpo.addRequires('zsh', EQ, ('2', '4', '8'))
         self.xsack.addPackage(xpo)
 
         self.assertEquals('err', *self.resolveCode())
 
     def testInstallSinglePackageRequireUpgradeRequireXtraOk(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
-        po.addRequires('zip', 'EQ', ('4', '2.6', '8'))
+        po.addRequires('zip', EQ, ('4', '2.6', '8'))
         self.tsInfo.addInstall(po)
 
         ipo = FakePackage('zip', '1.3', '4', '2', 'i386')
-        ipo.addRequires('zap', 'EQ', ('2', '1.3', '3'))
+        ipo.addRequires('zap', EQ, ('2', '1.3', '3'))
         self.rpmdb.addPackage(ipo)
         
         xpo = FakePackage('zip', '2.6', '8', '4', 'i386')
-        xpo.addRequires('zap', 'EQ', ('2', '1.3', '4'))
+        xpo.addRequires('zap', EQ, ('2', '1.3', '4'))
         self.xsack.addPackage(xpo)
         xpo2 = FakePackage('zap', '1.3', '4', '2', 'i386')
         self.xsack.addPackage(xpo2)
@@ -268,11 +268,11 @@ class DepsolveTests(DepsolveTests):
         
     def testInstallSinglePackageRequireMultiXtra(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
-        po.addRequires('zip', 'EQ', ('4', '2.6', '8'))
+        po.addRequires('zip', EQ, ('4', '2.6', '8'))
         self.tsInfo.addInstall(po)
 
         xpo = FakePackage('zip', '2.6', '8', '4', 'i386')
-        xpo.addRequires('zap', 'EQ', ('2', '1.3', '4'))
+        xpo.addRequires('zap', EQ, ('2', '1.3', '4'))
         self.xsack.addPackage(xpo)
         
         xpo2 = FakePackage('zap', '1.3', '4', '2', 'i386')
@@ -346,7 +346,7 @@ class DepsolveTests(DepsolveTests):
 
     def testUpdateForDependency(self):
         po = FakePackage('zsh', '1', '1', '0', 'i386')
-        po.addRequires('zip', 'EQ', ('0', '2', '1'))
+        po.addRequires('zip', EQ, ('0', '2', '1'))
         self.tsInfo.addInstall(po)
 
         installedpo = FakePackage('zip', '1', '1', '0', 'i386')
@@ -360,18 +360,18 @@ class DepsolveTests(DepsolveTests):
 
     def testUpdateSplitPackage(self):
         po = FakePackage('zsh', '1', '1', '0', 'i386')
-        po.addRequires('libzip', 'EQ', ('0', '2', '1'))
+        po.addRequires('libzip', EQ, ('0', '2', '1'))
         self.tsInfo.addInstall(po)
 
         installedpo = FakePackage('zip', '1', '1', '0', 'i386')
-        installedpo.addProvides('libzip', 'EQ', ('0', '1', '1'))
+        installedpo.addProvides('libzip', EQ, ('0', '1', '1'))
         self.rpmdb.addPackage(installedpo)
 
         updatepo = FakePackage('zip', '2', '1', '0', 'i386')
-        updatepo.addRequires('zip-libs', 'EQ', ('0', '2', '1'))
+        updatepo.addRequires('zip-libs', EQ, ('0', '2', '1'))
         self.xsack.addPackage(updatepo)
         updatepo2 = FakePackage('zip-libs', '2', '1', '0', 'i386')
-        updatepo2.addProvides('libzip', 'EQ', ('0', '2', '1'))
+        updatepo2.addProvides('libzip', EQ, ('0', '2', '1'))
         self.xsack.addPackage(updatepo2)
 
         self.assertEquals('ok', *self.resolveCode())
@@ -442,7 +442,7 @@ class DepsolveTests(DepsolveTests):
 
     def testUpdateForConflict(self):
         po = FakePackage('zsh', '1', '1', '0', 'i386')
-        po.addConflicts('zip', 'LE', ('0', '1', '1'))
+        po.addConflicts('zip', LE, ('0', '1', '1'))
         self.tsInfo.addInstall(po)
 
         installedpo = FakePackage('zip', '1', '1', '0', 'i386')
@@ -459,7 +459,7 @@ class DepsolveTests(DepsolveTests):
         self.tsInfo.addInstall(po)
 
         installedpo = FakePackage('zip', '1', '1', '0', 'i386')
-        installedpo.addConflicts('zsh', 'LE', ('0', '1', '1'))
+        installedpo.addConflicts('zsh', LE, ('0', '1', '1'))
         self.rpmdb.addPackage(installedpo)
 
         updatepo = FakePackage('zip', '2', '1', '0', 'i386')
@@ -470,11 +470,11 @@ class DepsolveTests(DepsolveTests):
 
     def testUpdateForConflictProvide(self):
         po = FakePackage('zsh', '1', '1', '0', 'i386')
-        po.addConflicts('zippy', 'LE', ('0', '1', '1'))
+        po.addConflicts('zippy', LE, ('0', '1', '1'))
         self.tsInfo.addInstall(po)
 
         installedpo = FakePackage('zip', '1', '1', '0', 'i386')
-        installedpo.addProvides('zippy', 'EQ', ('0', '1', '1'))
+        installedpo.addProvides('zippy', EQ, ('0', '1', '1'))
         self.rpmdb.addPackage(installedpo)
 
         updatepo = FakePackage('zip', '2', '1', '0', 'i386')
@@ -485,17 +485,17 @@ class DepsolveTests(DepsolveTests):
 
     def testUpdateForConflictProvide2(self):
         po = FakePackage('zsh', '1', '1', '0', 'i386')
-        po.addProvides('zippy', 'EQ', ('0', '2', '1'))
+        po.addProvides('zippy', EQ, ('0', '2', '1'))
         self.tsInfo.addInstall(po)
 
         installedpo = FakePackage('zip', '1', '1', '0', 'i386')
-        installedpo.addConflicts('zippy', 'GT', ('0', '1', '1'))
-        installedpo.addConflicts('zippy', 'LT', ('0', '1', '1'))
+        installedpo.addConflicts('zippy', GT, ('0', '1', '1'))
+        installedpo.addConflicts('zippy', LT, ('0', '1', '1'))
         self.rpmdb.addPackage(installedpo)
 
         updatepo = FakePackage('zip', '2', '1', '0', 'i386')
-        updatepo.addConflicts('zippy', 'GT', ('0', '2', '1'))
-        updatepo.addConflicts('zippy', 'LT', ('0', '2', '1'))
+        updatepo.addConflicts('zippy', GT, ('0', '2', '1'))
+        updatepo.addConflicts('zippy', LT, ('0', '2', '1'))
         self.xsack.addPackage(updatepo)
 
         self.assertEquals('ok', *self.resolveCode())
@@ -785,13 +785,13 @@ class DepsolveTests(DepsolveTests):
 
     def testMultiPkgVersions1(self):
         ipo1 = FakePackage('abcd', arch='noarch')
-        ipo1.addRequires('Foo', 'EQ', ('0', '1', '1'))
+        ipo1.addRequires('Foo', EQ, ('0', '1', '1'))
         self.rpmdb.addPackage(ipo1)
         ipo2 = FakePackage('Foo', arch='noarch')
         self.rpmdb.addPackage(ipo2)
         
         xpo = FakePackage('abcd', version='2', arch='noarch')
-        xpo.addRequires('Foo', 'GE', ('0', '2', '1'))
+        xpo.addRequires('Foo', GE, ('0', '2', '1'))
         self.tsInfo.addUpdate(xpo, oldpo=ipo1)
 
         po1 = FakePackage('Foo', arch='noarch')
@@ -806,13 +806,13 @@ class DepsolveTests(DepsolveTests):
 
     def testMultiPkgVersions2(self):
         ipo1 = FakePackage('abcd', arch='i586')
-        ipo1.addRequires('Foo', 'EQ', ('0', '1', '1'))
+        ipo1.addRequires('Foo', EQ, ('0', '1', '1'))
         self.rpmdb.addPackage(ipo1)
         ipo2 = FakePackage('Foo', arch='i586')
         self.rpmdb.addPackage(ipo2)
         
         xpo = FakePackage('abcd', version='2', arch='i586')
-        xpo.addRequires('Foo', 'GE', ('0', '2', '1'))
+        xpo.addRequires('Foo', GE, ('0', '2', '1'))
         self.tsInfo.addUpdate(xpo, oldpo=ipo1)
 
         po1 = FakePackage('Foo', arch='i586')
@@ -827,13 +827,13 @@ class DepsolveTests(DepsolveTests):
 
     def testMultiPkgVersions3(self):
         ipo1 = FakePackage('abcd', arch='i586')
-        ipo1.addRequires('Foo', 'EQ', ('0', '1', '1'))
+        ipo1.addRequires('Foo', EQ, ('0', '1', '1'))
         self.rpmdb.addPackage(ipo1)
         ipo2 = FakePackage('Foo', arch='i586')
         self.rpmdb.addPackage(ipo2)
         
         xpo = FakePackage('abcd', version='2', arch='i586')
-        xpo.addRequires('Foo', 'GE', ('0', '2', '1'))
+        xpo.addRequires('Foo', GE, ('0', '2', '1'))
         self.tsInfo.addUpdate(xpo, oldpo=ipo1)
 
         po1 = FakePackage('Foo', arch='i586')
@@ -851,13 +851,13 @@ class DepsolveTests(DepsolveTests):
 
     def testMultiPkgVersions4(self):
         ipo1 = FakePackage('abcd', arch='i386')
-        ipo1.addRequires('Foo', 'EQ', ('0', '1', '1'))
+        ipo1.addRequires('Foo', EQ, ('0', '1', '1'))
         self.rpmdb.addPackage(ipo1)
         ipo2 = FakePackage('Foo', arch='i386')
         self.rpmdb.addPackage(ipo2)
         
         xpo = FakePackage('abcd', version='2', arch='i386')
-        xpo.addRequires('Foo', 'GE', ('0', '2', '1'))
+        xpo.addRequires('Foo', GE, ('0', '2', '1'))
         self.tsInfo.addUpdate(xpo, oldpo=ipo1)
 
         po1 = FakePackage('Foo', arch='i386')
@@ -880,12 +880,12 @@ class DepsolveTests(DepsolveTests):
         self.tsInfo.addInstall(xpo)
 
         po1 = FakePackage('unison213', version='2.13.16', release='9')
-        po1.addProvides('unison', 'EQ', ('0', '2.13.16', '9'))
-        po1.addObsoletes('unison', 'LT', ('0', '2.27.57', '3'))
+        po1.addProvides('unison', EQ, ('0', '2.13.16', '9'))
+        po1.addObsoletes('unison', LT, ('0', '2.27.57', '3'))
         self.xsack.addPackage(po1)
         po2 = FakePackage('unison227', version='2.27.57', release='7')
-        po2.addProvides('unison', 'EQ', ('0', '2.27.57', '7'))
-        po2.addObsoletes('unison', 'LT', ('0', '2.27.57', '3'))
+        po2.addProvides('unison', EQ, ('0', '2.27.57', '7'))
+        po2.addObsoletes('unison', LT, ('0', '2.27.57', '3'))
         self.xsack.addPackage(po2)
 
         self.assertEquals('ok', *self.resolveCode())
@@ -897,11 +897,11 @@ class DepsolveTests(DepsolveTests):
         self.tsInfo.addInstall(xpo)
 
         po1 = FakePackage('unison213', version='2.13.16', release='9')
-        po1.addProvides('unison', 'EQ', ('0', '2.13.16', '9'))
-        po1.addObsoletes('unison', 'LT', ('0', '2.27.57', '3'))
+        po1.addProvides('unison', EQ, ('0', '2.13.16', '9'))
+        po1.addObsoletes('unison', LT, ('0', '2.27.57', '3'))
         po2 = FakePackage('unison227', version='2.27.57', release='7')
-        po2.addProvides('unison', 'EQ', ('0', '2.27.57', '7'))
-        po2.addObsoletes('unison', 'LT', ('0', '2.27.57', '3'))
+        po2.addProvides('unison', EQ, ('0', '2.27.57', '7'))
+        po2.addObsoletes('unison', LT, ('0', '2.27.57', '3'))
         self.xsack.addPackage(po2)
         self.xsack.addPackage(po1)
 
diff --git a/test/operationstests.py b/test/operationstests.py
index 12a1627..71d311f 100644
--- a/test/operationstests.py
+++ b/test/operationstests.py
@@ -9,7 +9,7 @@ class ComplicatedTests(OperationsTests):
         simpleobsoletestests.SimpleObsoletesTests.buildPkgs(pkgs)
         # conflicts
         pkgs.conflicts = FakePackage('super-zippy', '0.3', '1', '0', 'i386')
-        pkgs.conflicts.addConflicts('zsh', 'EQ', ('0', '1', '1'))
+        pkgs.conflicts.addConflicts('zsh', EQ, ('0', '1', '1'))
 
     def testObsoleteForConflict(self):
         p = self.pkgs
@@ -31,11 +31,11 @@ class CombinedUpdateObsoletesTest(OperationsTests):
         pkgs.kdevel_2 = FakePackage('k-devel', '3.5', '2')
         pkgs.kdevel_2.addRequires('k')
         pkgs.klibs_2_i386 = FakePackage('klibs', '3.5', '2', arch='i386')
-        pkgs.klibs_2_i386.addObsoletes('klibs', 'LT', (None, '3.5', '2'))
-        pkgs.klibs_2_i386.addObsoletes('k', 'LT', (None, '3.5', '2'))
+        pkgs.klibs_2_i386.addObsoletes('klibs', LT, (None, '3.5', '2'))
+        pkgs.klibs_2_i386.addObsoletes('k', LT, (None, '3.5', '2'))
         pkgs.klibs_2_x86_64 = FakePackage('klibs', '3.5', '2', arch='x86_64')
-        pkgs.klibs_2_x86_64.addObsoletes('klibs', 'LT', (None, '3.5', '2'))
-        pkgs.klibs_2_x86_64.addObsoletes('k', 'LT', (None, '3.5', '2'))
+        pkgs.klibs_2_x86_64.addObsoletes('klibs', LT, (None, '3.5', '2'))
+        pkgs.klibs_2_x86_64.addObsoletes('k', LT, (None, '3.5', '2'))
 
     def testSelfObsolete(self):
         p = self.pkgs
diff --git a/test/packagetests.py b/test/packagetests.py
index 628247d..44946de 100644
--- a/test/packagetests.py
+++ b/test/packagetests.py
@@ -3,89 +3,90 @@ import settestpath
 
 from yum import packages
 from rpmUtils import miscutils
+from testbase import * 
 
 class InPrcoRangePackageTests(unittest.TestCase):
 
     def setUp(self):
         self.po = packages.RpmBase()
         self.po.rel = 10
-        self.po.prco['provides'].append(("seth", "EQ", (1, 2, 3)))
-        self.po.prco['requires'].append(("foo", "GE", (4, 5, None)))
+        self.po.prco['provides'].append(("seth", EQ, (1, 2, 3)))
+        self.po.prco['requires'].append(("foo", GE, (4, 5, None)))
 
     def testRequiresEqPass(self):
-        dep = ("foo", "EQ", (4, 5, 0))
+        dep = ("foo", EQ, (4, 5, 0))
         self.assertTrue(self.po.inPrcoRange('requires', dep))
 
     def testRequiresEqFailGt(self):
-        dep = ("foo", "EQ", (4, 4, 0))
+        dep = ("foo", EQ, (4, 4, 0))
         self.assertFalse(self.po.inPrcoRange('requires', dep))
 
     def testProvidesGePass(self):
-        dep = ("seth", "GE", (1, 0, 0))
+        dep = ("seth", GE, (1, 0, 0))
         self.assertTrue(self.po.inPrcoRange('provides', dep)) 
 
     def testProvidesGePassWithEqual(self):
-        dep = ("seth", "GE", (1, 2, 3))
+        dep = ("seth", GE, (1, 2, 3))
         self.assertTrue(self.po.inPrcoRange('provides', dep)) 
 
     def testProvidesGeFailOnEpoch(self):
-        dep = ("seth", "GE", (2, 0, 0))
+        dep = ("seth", GE, (2, 0, 0))
         self.assertFalse(self.po.inPrcoRange('provides', dep)) 
 
     def testProvidesGeFailOnVersion(self):
-        dep = ("seth", "GE", (1, 3, 0))
+        dep = ("seth", GE, (1, 3, 0))
         self.assertFalse(self.po.inPrcoRange('provides', dep))
 
     def testProvidesGeFailOnRelease(self):
-        dep = ("seth", "GE", (1, 2, 4))
+        dep = ("seth", GE, (1, 2, 4))
         self.assertFalse(self.po.inPrcoRange('provides', dep))
 
     def testProvidesGtPass(self):
-        dep = ("seth", "GT", (1, 0, 0))
+        dep = ("seth", GT, (1, 0, 0))
         self.assertTrue(self.po.inPrcoRange('provides', dep))
 
     def testProvidesGtFail(self):
-        dep = ("seth", "GT", (1, 2, 4))
+        dep = ("seth", GT, (1, 2, 4))
         self.assertFalse(self.po.inPrcoRange('provides', dep))
 
     def testProvidesGtFailOnEqual(self):
-        dep = ("seth", "GT", (1, 2, 3))
+        dep = ("seth", GT, (1, 2, 3))
         self.assertFalse(self.po.inPrcoRange('provides', dep))
 
     def testProvidesEqPass(self):
-        dep = ("seth", "EQ", (1, 2, 3))
+        dep = ("seth", EQ, (1, 2, 3))
         self.assertTrue(self.po.inPrcoRange('provides', dep))
 
     def testProvidesEqFailGt(self):
-        dep = ("seth", "EQ", (1, 2, 0))
+        dep = ("seth", EQ, (1, 2, 0))
         self.assertFalse(self.po.inPrcoRange('provides', dep))
 
     def testProvidesEqFailLt(self):
-        dep = ("seth", "EQ", (1, 2, 4))
+        dep = ("seth", EQ, (1, 2, 4))
         self.assertFalse(self.po.inPrcoRange('provides', dep))
 
     def testProvidesLePassEq(self):
-        dep = ("seth", "LE", (1, 2, 3))
+        dep = ("seth", LE, (1, 2, 3))
         self.assertTrue(self.po.inPrcoRange('provides', dep))
 
     def testProvidesLePassGt(self):
-        dep = ("seth", "LE", (1, 5, 2))
+        dep = ("seth", LE, (1, 5, 2))
         self.assertTrue(self.po.inPrcoRange('provides', dep))
 
     def testProvidesLeFail(self):
-        dep = ("seth", "LE", (0, 2, 2))
+        dep = ("seth", LE, (0, 2, 2))
         self.assertFalse(self.po.inPrcoRange('provides', dep))
 
     def testProvidesLtPass(self):
-        dep = ("seth", "LT", (1, 2, 6))
+        dep = ("seth", LT, (1, 2, 6))
         self.assertTrue(self.po.inPrcoRange('provides', dep))
 
     def testProvidesLtFailEq(self):
-        dep = ("seth", "LT", (1, 2, 3))
+        dep = ("seth", LT, (1, 2, 3))
         self.assertFalse(self.po.inPrcoRange('provides', dep))
 
     def testProvidesLtFailGt(self):
-        dep = ("seth", "LT", (1, 0, 2))
+        dep = ("seth", LT, (1, 0, 2))
         self.assertFalse(self.po.inPrcoRange('provides', dep))
 
 
@@ -188,12 +189,13 @@ class RangeCompareTests(unittest.TestCase):
 
     def testRangeCompare(self):
         for requires, provides, result in (
-            (('foo', 'EQ', ('0', '1.4.4', '0')),   ('foo', 'EQ', ('0', '1.4.4', '0')),  1),
-            (('foo', 'EQ', ('0', '1.4.4', '0')),   ('foo', 'EQ', ('0', '1.4.4', None)), 1),
-            (('foo', 'EQ', ('0', '1.4.4', None)),  ('foo', 'EQ', ('0', '1.4.4', '8')),  1),
-            (('foo', 'LT', ('0', '1.5.4', None)),  ('foo', 'EQ', ('0', '1.4.4', '7')),  1),
-            (('foo', 'GE', ('0', '1.4.4', '7.1')), ('foo', 'EQ', ('0', '1.4.4', '7')),  0),
-            (('foo', 'EQ', ('0', '1.4', None)),    ('foo', 'EQ', ('0', '1.4.4', '7')),  0),
-            (('foo', 'GT', ('1', '1.4.4', None)),  ('foo', 'EQ', ('3', '1.2.4', '7')),  1),
+            (('foo', EQ, ('0', '1.4.4', '0')),   ('foo', EQ, ('0', '1.4.4', '0')),  1),
+            (('foo', EQ, ('0', '1.4.4', '0')),   ('foo', EQ, ('0', '1.4.4', None)), 1),
+            (('foo', EQ, ('0', '1.4.4', None)),  ('foo', EQ, ('0', '1.4.4', '8')),  1),
+            (('foo', LT, ('0', '1.5.4', None)),  ('foo', EQ, ('0', '1.4.4', '7')),  1),
+            (('foo', GE, ('0', '1.4.4', '7.1')), ('foo', EQ, ('0', '1.4.4', '7')),  0),
+            (('foo', EQ, ('0', '1.4', None)),    ('foo', EQ, ('0', '1.4.4', '7')),  0),
+            (('foo', GT, ('1', '1.4.4', None)),  ('foo', EQ, ('3', '1.2.4', '7')),  1),
             ):
-            self.assertEquals(miscutils.rangeCompare(requires, provides), result)
+            self.assertEquals(miscutils.rangeCompare(requires, provides), result,
+                              "%r %r: %r" % (requires, provides, result))
diff --git a/test/simpleobsoletestests.py b/test/simpleobsoletestests.py
index 05ebf05..f10f6e4 100644
--- a/test/simpleobsoletestests.py
+++ b/test/simpleobsoletestests.py
@@ -226,11 +226,11 @@ class GitMetapackageObsoletesTests(OperationsTests):
         pkgs.metapackage = FakePackage('git', '1.5.4.2', '1', '0', 'x86_64')
         # obsoletes
         pkgs.new_git = FakePackage('git', '1.5.4.4', '1', '0', 'x86_64')
-        pkgs.new_git.addObsoletes('git-core', 'LE', ('0', '1.5.4.3', '1'))
-        pkgs.new_git.addProvides('git-core', 'EQ', ('0', '1.5.4', '1'))
+        pkgs.new_git.addObsoletes('git-core', LE, ('0', '1.5.4.3', '1'))
+        pkgs.new_git.addProvides('git-core', EQ, ('0', '1.5.4', '1'))
 
         pkgs.git_all = FakePackage('git-all', '1.5.4', '1', '0', 'x86_64')
-        pkgs.git_all.addObsoletes('git', 'LE', ('0', '1.5.4.3', '1'))
+        pkgs.git_all.addObsoletes('git', LE, ('0', '1.5.4.3', '1'))
 
 
     def testGitMetapackageOnlyCoreInstalled(self):
diff --git a/test/simpleupdatetests.py b/test/simpleupdatetests.py
index fe4f414..180c880 100644
--- a/test/simpleupdatetests.py
+++ b/test/simpleupdatetests.py
@@ -18,18 +18,18 @@ class SimpleUpdateTests(OperationsTests):
     def buildPkgs(pkgs, *args):
         # installed
         pkgs.installed_i386 = FakePackage('zsh', '1', '1', '0', 'i386')
-        pkgs.installed_i386.addRequires('bar', 'EQ', ('0', '1', '1'))
+        pkgs.installed_i386.addRequires('bar', EQ, ('0', '1', '1'))
         pkgs.installed_x86_64 = FakePackage('zsh', '1', '1', '0', 'x86_64')
-        pkgs.installed_x86_64.addRequires('bar', 'EQ', ('0', '1', '1'))
+        pkgs.installed_x86_64.addRequires('bar', EQ, ('0', '1', '1'))
         pkgs.installed_noarch = FakePackage('zsh', '1', '1', '0', 'noarch')
-        pkgs.installed_noarch.addRequires('bar', 'EQ', ('0', '1', '1'))
+        pkgs.installed_noarch.addRequires('bar', EQ, ('0', '1', '1'))
         # updates
         pkgs.update_i386 = FakePackage('zsh', '2', '1', '0', 'i386')
         pkgs.update_x86_64 = FakePackage('zsh', '2', '1', '0', 'x86_64')
         pkgs.update_noarch = FakePackage('zsh', '2', '1', '0', 'noarch')
         # requires update (UpdateForDependency tests)
         pkgs.requires_update = FakePackage('zsh-utils', '2', '1', '0', 'noarch')
-        pkgs.requires_update.addRequires('zsh', 'EQ', ('0', '2', '1'))
+        pkgs.requires_update.addRequires('zsh', EQ, ('0', '2', '1'))
         # removed requirement due to update (UpdateForDependency2 tests)
         pkgs.required = FakePackage('bar', '1', '1', '0')
         pkgs.required_updated = FakePackage('bar', version='2')
diff --git a/test/skipbroken-tests.py b/test/skipbroken-tests.py
index e15ae56..2b9aabd 100644
--- a/test/skipbroken-tests.py
+++ b/test/skipbroken-tests.py
@@ -76,7 +76,7 @@ class SkipBrokenTests(DepsolveTests):
         po2 = self.repoPackage('foo', '2')
 
         ipo = self.instPackage('foo-tools', '2.5')
-        ipo.addRequires('foo', 'EQ', ('0', '1', '0'))
+        ipo.addRequires('foo', EQ, ('0', '1', '0'))
 
         self.tsInfo.addUpdate(po2, oldpo=po1)
         
@@ -89,9 +89,9 @@ class SkipBrokenTests(DepsolveTests):
         is not provided, the update should be skipped and result in a empty transaction
         '''
         po1 = self.instPackage('foo', '1')
-        po1.addRequires('foo-tools', 'EQ', ('0', '1', '0'))
+        po1.addRequires('foo-tools', EQ, ('0', '1', '0'))
         po2 = self.repoPackage('foo', '2')
-        po2.addRequires('foo-tools', 'EQ', ('0', '2', '0'))
+        po2.addRequires('foo-tools', EQ, ('0', '2', '0'))
 
         ipo = self.instPackage('foo-tools', '1')
 
@@ -108,13 +108,13 @@ class SkipBrokenTests(DepsolveTests):
         there is not longer provided.
         '''
         po1 = self.instPackage('foo', '1')
-        po1.addRequires('foo-tools', 'EQ', ('0', '1', '0'))
+        po1.addRequires('foo-tools', EQ, ('0', '1', '0'))
         po2 = self.repoPackage('foo', '2')
-        po2.addRequires('foo-tools', 'EQ', ('0', '2', '0'))
+        po2.addRequires('foo-tools', EQ, ('0', '2', '0'))
 
         ipo = self.instPackage('foo-tools', '1')
         por =  self.repoPackage('foo-gui', '1')
-        por.addRequires('foo', 'EQ', ('0', '2', '0'))
+        por.addRequires('foo', EQ, ('0', '2', '0'))
 
         self.tsInfo.addUpdate(po2, oldpo=po1)
         self.tsInfo.addInstall(por)
@@ -129,7 +129,7 @@ class SkipBrokenTests(DepsolveTests):
         '''
         ipo = self.instPackage('foo', '1')
         ipo2 = self.instPackage('foo-tools', '1')
-        ipo2.addRequires('foo', 'EQ', ('0', '1', '0'))
+        ipo2.addRequires('foo', EQ, ('0', '1', '0'))
 
         self.tsInfo.addErase(ipo)
         self.assertEquals('ok', *self.resolveCode(skip=True))
@@ -141,10 +141,10 @@ class SkipBrokenTests(DepsolveTests):
         '''
         ipo = self.instPackage('foo', '1')
         ipo2 = self.instPackage('foo-tools', '1')
-        ipo2.addRequires('foo', 'EQ', ('0', '1', '0'))
+        ipo2.addRequires('foo', EQ, ('0', '1', '0'))
 
         upo2 = self.repoPackage('foo-tools', '2')
-        upo2.addRequires('foo', 'EQ', ('0', '1', '0'))
+        upo2.addRequires('foo', EQ, ('0', '1', '0'))
 
         self.tsInfo.addErase(ipo)
         self.tsInfo.addUpdate(upo2, oldpo=ipo2)
@@ -158,10 +158,10 @@ class SkipBrokenTests(DepsolveTests):
         '''
         ipo = self.instPackage('foo', '1')
         ipo2 = self.instPackage('foo-tools', '1')
-        ipo2.addRequires('foo', 'EQ', ('0', '1', '0'))
+        ipo2.addRequires('foo', EQ, ('0', '1', '0'))
 
         upo2 = self.repoPackage('foo-tools', '2')
-        upo2.addRequires('foo', 'EQ', ('0', '1', '0'))
+        upo2.addRequires('foo', EQ, ('0', '1', '0'))
 
         self.tsInfo.addUpdate(upo2, oldpo=ipo2)
         self.tsInfo.addErase(ipo)
@@ -176,7 +176,7 @@ class SkipBrokenTests(DepsolveTests):
         '''
         po1 = self.instPackage('foo', '1')
         po2 = self.repoPackage('foo', '2')
-        po2.addConflicts('bar', 'EQ', ('0', '1', '0'))
+        po2.addConflicts('bar', EQ, ('0', '1', '0'))
 
         ipo = self.instPackage('bar', '1')
 
@@ -193,13 +193,13 @@ class SkipBrokenTests(DepsolveTests):
         '''
         po1 = self.instPackage('foo', '1')
         po2 = self.repoPackage('foo', '2')
-        po2.addConflicts('bar', 'EQ', ('0', '1', '0'))
+        po2.addConflicts('bar', EQ, ('0', '1', '0'))
 
         ipo = self.instPackage('bar', '1')
 
 
         xpo = self.repoPackage('bar', '2')
-        xpo.addRequires('foo', 'EQ', ('0', '1', '0'))
+        xpo.addRequires('foo', EQ, ('0', '1', '0'))
 
         self.tsInfo.addUpdate(po2, oldpo=po1)
         
@@ -215,13 +215,13 @@ class SkipBrokenTests(DepsolveTests):
         '''
         po1 = self.instPackage('foo', '1')
         po2 = self.repoPackage('foo', '2')
-        po2.addConflicts('bar', 'EQ', ('0', '1', '0'))
+        po2.addConflicts('bar', EQ, ('0', '1', '0'))
 
         ipo = self.instPackage('bar', '1')
 
 
         xpo = self.repoPackage('bar', '2')
-        xpo.addRequires('poo', 'EQ', ('0', '1', '0'))
+        xpo.addRequires('poo', EQ, ('0', '1', '0'))
 
         self.tsInfo.addUpdate(po2, oldpo=po1)
         
@@ -286,7 +286,7 @@ class SkipBrokenTests(DepsolveTests):
         self.tsInfo.addInstall(po1)
 
         po2 = self.repoPackage('bar')
-        po2.addRequires('baz', 'EQ', (None, '2', '1'))
+        po2.addRequires('baz', EQ, (None, '2', '1'))
 
         ipo = self.instPackage('baz')
         upo = self.repoPackage('baz', '2', '1')
@@ -353,7 +353,7 @@ class SkipBrokenTests(DepsolveTests):
         ipo2 = self.instPackage('foo', '1',arch='x86_64')
         po1 = self.repoPackage('foo', '2',arch='i386')
         po2 = self.repoPackage('foo', '2',arch='x86_64')
-        po2.addRequires('notfound', 'EQ', ('0', '1', '0'))
+        po2.addRequires('notfound', EQ, ('0', '1', '0'))
         self.tsInfo.addUpdate(po1, oldpo=ipo1)
         self.tsInfo.addUpdate(po2, oldpo=ipo2)
         self.assertEquals('empty', *self.resolveCode(skip=True))
diff --git a/test/testbase.py b/test/testbase.py
index 372fec3..b939c12 100644
--- a/test/testbase.py
+++ b/test/testbase.py
@@ -16,6 +16,18 @@ import inspect
 from rpmUtils import arch
 
 #############################################################
+### RPM Flag constants ######################################
+############################################################# 
+import rpm
+
+GT = rpm.RPMSENSE_GREATER
+GE = rpm.RPMSENSE_EQUAL | rpm.RPMSENSE_GREATER
+LT = rpm.RPMSENSE_LESS
+LE = rpm.RPMSENSE_LESS | rpm.RPMSENSE_EQUAL
+EQ = rpm.RPMSENSE_EQUAL
+
+
+#############################################################
 ### Helper classes ##########################################
 #############################################################
 
@@ -60,7 +72,7 @@ class FakePackage(packages.YumAvailablePackage):
         self.arch = arch
         self.pkgtup = (self.name, self.arch, self.epoch, self.version, self.release)
 
-        self.prco['provides'].append((name, 'EQ', (epoch, version, release)))
+        self.prco['provides'].append((name, EQ, (epoch, version, release)))
 
         # Just a unique integer
         self.id = self.__hash__()
@@ -157,7 +169,7 @@ class DepsolveTests(_DepsolveTestsBase):
 
     def testInstallPackageRequireInstalled(self):
         po = FakePackage('zsh', '1', '1', None, 'i386')
-        po.addRequires('zip', 'EQ', (None, '1.3', '2'))
+        po.addRequires('zip', EQ, (None, '1.3', '2'))
         self.tsInfo.addInstall(po)
 
         ipo = FakePackage('zip', '1.3', '2', None, 'i386')
diff --git a/yum/depsolve.py b/yum/depsolve.py
index 5bc3c7f..190f33b 100644
--- a/yum/depsolve.py
+++ b/yum/depsolve.py
@@ -53,12 +53,6 @@ except:
             for y in args:
                 if x < y: x = y
             return x
-flags = {"GT": rpm.RPMSENSE_GREATER,
-         "GE": rpm.RPMSENSE_EQUAL | rpm.RPMSENSE_GREATER,
-         "LT": rpm.RPMSENSE_LESS,
-         "LE": rpm.RPMSENSE_LESS | rpm.RPMSENSE_EQUAL,
-         "EQ": rpm.RPMSENSE_EQUAL,
-         None: 0 }
 
 class Depsolve(object):
 
@@ -736,7 +730,7 @@ class Depsolve(object):
             self.verbose_logger.log(logginglevels.DEBUG_2, _("looking for %s as a requirement of %s"), req, txmbr)
             provs = self.tsInfo.getProvides(*req)
             if not provs:
-                ret.append( (txmbr.po, (req[0], flags[req[1]], version_tuple_to_string(req[2]))) )
+                ret.append( (txmbr.po, (req[0], req[1], version_tuple_to_string(req[2]))) )
                 continue
 
             #Add relationship
@@ -771,7 +765,7 @@ class Depsolve(object):
             for pkg, hits in self.tsInfo.getRequires(*prov).iteritems():
                 for rn, rf, rv in hits:
                     if not self.tsInfo.getProvides(rn, rf, rv):
-                        ret.append( (pkg, (rn, flags[rf], version_tuple_to_string(rv))) )
+                        ret.append( (pkg, (rn, rf, version_tuple_to_string(rv))) )
         return ret
 
     def _checkFileRequires(self):
@@ -839,7 +833,7 @@ class Depsolve(object):
                 for conflicting_po in self.tsInfo.getNewProvides(r, f, v):
                     if conflicting_po.pkgtup[0] == po.pkgtup[0] and conflicting_po.pkgtup[2:] == po.pkgtup[2:]:
                         continue
-                    ret.append( (po, (r, flags[f], version_tuple_to_string(v)), conflicting_po) )
+                    ret.append( (po, (r, f, version_tuple_to_string(v)), conflicting_po) )
         for txmbr in self.tsInfo.getMembersWithState(output_states=TS_INSTALL_STATES):
             po = txmbr.po
             for conflict in txmbr.po.returnPrco('conflicts'):
@@ -847,7 +841,7 @@ class Depsolve(object):
                 for conflicting_po in self.tsInfo.getProvides(r, f, v):
                     if conflicting_po.pkgtup[0] == po.pkgtup[0] and conflicting_po.pkgtup[2:] == po.pkgtup[2:]:
                         continue
-                    ret.append( (po, (r, flags[f], version_tuple_to_string(v)), conflicting_po) )
+                    ret.append( (po, (r, f, version_tuple_to_string(v)), conflicting_po) )
         return ret
 
 
diff --git a/yum/packages.py b/yum/packages.py
index 49630f6..7dbc3a0 100644
--- a/yum/packages.py
+++ b/yum/packages.py
@@ -310,8 +310,8 @@ class RpmBase(object):
                 continue
 
             if f == '=':
-                f = 'EQ'
-            if f != 'EQ' and prcotype == 'provides':
+                f = rpm.RPMSENSE_EQUAL
+            if f != rpm.RPMSENSE_EQUAL and prcotype == 'provides':
                 # isn't this odd, it's not 'EQ' and it is a provides
                 # - it really should be EQ
                 # use the pkgobj's evr for the comparison
@@ -752,7 +752,7 @@ class YumHeaderPackage(YumAvailablePackage):
                 continue
 
             lst = hdr[getattr(rpm, 'RPMTAG_%sFLAGS' % tag)]
-            flag = map(rpmUtils.miscutils.flagToString, lst)
+            # flag = map(rpmUtils.miscutils.flagToString, lst)
             flag = map(misc.share_data, flag)
 
             lst = hdr[getattr(rpm, 'RPMTAG_%sVERSION' % tag)]
diff --git a/yum/sqlitesack.py b/yum/sqlitesack.py
index 786f06a..31c4eb0 100644
--- a/yum/sqlitesack.py
+++ b/yum/sqlitesack.py
@@ -27,6 +27,7 @@ import yumRepo
 from packages import PackageObject, RpmBase, YumAvailablePackage
 import Errors
 import misc
+import rpm
 
 from sqlutils import executeSQL
 import rpmUtils.miscutils
@@ -51,6 +52,13 @@ def catchSqliteException(func):
 def _share_data(value):
     return misc.share_data(value)
 
+_flags2rpm = {"GT": rpm.RPMSENSE_GREATER,
+              "GE": rpm.RPMSENSE_EQUAL | rpm.RPMSENSE_GREATER,
+              "LT": rpm.RPMSENSE_LESS,
+              "LE": rpm.RPMSENSE_LESS | rpm.RPMSENSE_EQUAL,
+              "EQ": rpm.RPMSENSE_EQUAL,
+              None: 0 }
+
 class YumAvailablePackageSqlite(YumAvailablePackage, PackageObject, RpmBase):
     def __init__(self, repo, db_obj):
         self.prco = { 'obsoletes': (),
@@ -235,7 +243,7 @@ class YumAvailablePackageSqlite(YumAvailablePackage, PackageObject, RpmBase):
             cur = self._sql_MD('primary', sql, (self.pkgKey,))
             self.prco[prcotype] = [ ]
             for ob in cur:
-                prco_set = (_share_data(ob['name']), _share_data(ob['flags']),
+                prco_set = (_share_data(ob['name']), _share_data(_flags2rpm[ob['flags']]),
                             (_share_data(ob['epoch']),
                              _share_data(ob['version']),
                              _share_data(ob['release'])))
@@ -592,7 +600,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
                         _share_data(ob['epoch']), _share_data(ob['version']),
                         _share_data(ob['release']))
                 (n,f,e,v,r) = ( _share_data(ob['oname']),
-                                _share_data(ob['oflags']),
+                                _share_data(_flags2rpm[ob['oflags']]),
                                 _share_data(ob['oepoch']),
                                 _share_data(ob['oversion']),
                                 _share_data(ob['orelease']))
@@ -639,7 +647,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
                 cur = cache.cursor()
                 executeSQL(cur, "select * from %s" % prcotype)
                 for x in cur:
-                    val = (_share_data(x['name']), _share_data(x['flags']),
+                    val = (_share_data(x['name']), _share_data(_flags2rpm[x['flags']]),
                            (_share_data(x['epoch']), _share_data(x['version']),
                             _share_data(x['release'])))
                     val = _share_data(val)
@@ -702,7 +710,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
                        (name,))
             tmp = { }
             for x in cur:
-                val = (_share_data(x['name']), _share_data(x['flags']),
+                val = (_share_data(x['name']), _share_data(_flags2rpm[x['flags']]),
                        (_share_data(x['epoch']), _share_data(x['version']),
                         _share_data(x['release'])))
                 val = _share_data(val)
commit 412350a6016f3f6420439948b6a2ad7a248097aa
Author: Florian Festi <ffesti at redhat.com>
Date:   Mon May 26 10:07:01 2008 +0200

    Fix code merge error in RpmSack._getPRCO
    
    Thanks to Terje Røsten for testing and reporting.

diff --git a/yum/rpmsack.py b/yum/rpmsack.py
index 5a82e27..f64409e 100644
--- a/yum/rpmsack.py
+++ b/yum/rpmsack.py
@@ -488,24 +488,22 @@ class RPMDBPackageSack(PackageSackBase):
         r_v = deptup[2][1]
 
         ts = self.readOnlyTS()
-        result = {}
-        tag = self.DEP_TABLE[prcotype][0]
+        pkgs = {}
+        tag = self.DEP_TABLE[PRCO][0]
         mi = ts.dbMatch(tag, name)
         for hdr in mi:
             po = self._makePackageObject(hdr, mi.instance())
-            result[po.pkgid] = po
+            pkgs[po.pkgid] = po
         del mi
 
         # If it's not a provides or filename, we are done
         if PRCO == 'provides' and name[0] == '/':
             fileresults = self.searchFiles(name)
             for pkg in fileresults:
-                result[pkg.pkgid] = pkg
+                pkgs[pkg.pkgid] = pkg
         
-        pkgs = result.values()
         result = {}
-
-        for po in pkgs:
+        for po in pkgs.values():
             if name[0] == '/' and r_v is None:
                 # file dep add all matches to the defSack
                 result[po] = [(name, None, (None, None, None))]
commit 976043b4bf4dbb71632e4fa7a297e80ff58c6c97
Author: James Antill <james at and.org>
Date:   Fri May 23 09:50:58 2008 -0400

    Minor bit rot, pointed out by Jay Soffian

diff --git a/yum/depsolve.py b/yum/depsolve.py
index a08f481..dad4912 100644
--- a/yum/depsolve.py
+++ b/yum/depsolve.py
@@ -489,7 +489,6 @@ class Depsolve(object):
         # find the best one 
 
         # try updating the already install pkgs
-        length = len(self.tsInfo)
         for pkg in provSack.returnNewestByName():
             results = self.update(requiringPo=requiringPo, name=pkg.name,
                                   epoch=pkg.epoch, version=pkg.version,
commit e617465ff9769ef7e205c0fc6943b4c2b9d59793
Author: Florian Festi <ffesti at redhat.com>
Date:   Fri May 23 15:40:17 2008 +0200

    PackageSack API cleanup
    Removed
     PackagesSack.search(Provides|Requires|Conflicts|Obsoletes)
     RpmSack.what(Provides|Requires)
     SqliteSack.searchPrco
    Added
     PackagesSack.get(Conflicts|Obsoletes)

diff --git a/README.API_CHANGES b/README.API_CHANGES
new file mode 100644
index 0000000..ae451a8
--- /dev/null
+++ b/README.API_CHANGES
@@ -0,0 +1,11 @@
+
+4.0.0
+=====
+
+Removed:
+
+ * PackageSack.search(Provides|Requires|Conflicts|Obsoletes)
+  * use PackageSack.get* instead
+ * RpmSack(whatProvides|Requires)
+  * use PackageSack.get* instead
+ * SqliteSack.searchPrco
diff --git a/yum/packageSack.py b/yum/packageSack.py
index 975a39b..4aeccbb 100644
--- a/yum/packageSack.py
+++ b/yum/packageSack.py
@@ -88,20 +88,12 @@ class PackageSackBase(object):
         """return dict { packages -> list of matching requires }"""
         raise NotImplementedError()
 
-    def searchRequires(self, name):
-        """return list of package requiring the name (any evr and flag)"""
+    def getConflicts(self, name, flags=None, version=(None, None, None)):
+        """return dict { packages -> list of matching conflicts }"""
         raise NotImplementedError()
 
-    def searchProvides(self, name):
-        """return list of package providing the name (any evr and flag)"""
-        raise NotImplementedError()
-
-    def searchConflicts(self, name):
-        """return list of package conflicting with the name (any evr and flag)"""
-        raise NotImplementedError()
-
-    def searchObsoletes(self, name):
-        """return list of package obsoleting the name (any evr and flag)"""
+    def getObsoletes(self, name, flags=None, version=(None, None, None)):
+        """return dict { packages -> list of matching obsoletes }"""
         raise NotImplementedError()
 
     def returnObsoletes(self, newest=False):
@@ -298,21 +290,13 @@ class MetaSack(PackageSackBase):
         """return dict { packages -> list of matching requires }"""
         return self._computeAggregateDictResult("getRequires", name, flags, version)
 
-    def searchRequires(self, name):
-        """return list of package requiring the name (any evr and flag)"""
-        return self._computeAggregateListResult("searchRequires", name)
-
-    def searchProvides(self, name):
-        """return list of package providing the name (any evr and flag)"""
-        return self._computeAggregateListResult("searchProvides", name)
-
-    def searchConflicts(self, name):
-        """return list of package conflicting with the name (any evr and flag)"""
-        return self._computeAggregateListResult("searchConflicts", name)
+    def getConflicts(self, name, flags=None, version=(None, None, None)):
+        """return dict { packages -> list of matching provides }"""
+        return self._computeAggregateDictResult("getConflicts", name, flags, version)
 
-    def searchObsoletes(self, name):
-        """return list of package obsoleting the name (any evr and flag)"""
-        return self._computeAggregateListResult("searchObsoletes", name)
+    def getObsoletes(self, name, flags=None, version=(None, None, None)):
+        """return dict { packages -> list of matching requires }"""
+        return self._computeAggregateDictResult("getObsoletes", name, flags, version)
 
     def returnObsoletes(self, newest=False):
         """returns a dict of obsoletes dict[obsoleting pkgtuple] = [list of obs]"""
@@ -520,14 +504,20 @@ class PackageSack(PackageSackBase):
             result.append(po)
         return result
         
-    def getProvides(self, name, flags=None, version=(None, None, None)):
-        """return dict { packages -> list of matching provides }"""
+    def _getPRCO(self, PRCO, name, flags=None, version=(None, None, None)):
+        """return dict { packages -> list of matching RCO }"""
         self._checkIndexes(failure='build')
         result = { }
-        for po in self.provides.get(name, []):
-            hits = po.matchingPrcos('provides', (name, flags, version))
+        for po in getattr(self, PRCO).get(name, []):
+            hits = po.matchingPrcos(PRCO, (name, flags, version))
             if hits:
                 result[po] = hits
+        return result
+
+    def getProvides(self, name, flags=None, version=(None, None, None)):
+        """return dict { packages -> list of matching provides }"""
+        self._checkIndexes(failure='build')
+        result = self._getPRCO('provides', name, flags, version)
         if name[0] == '/':
             hit = (name, None, (None, None, None))
             for po in self.searchFiles(name):
@@ -535,50 +525,11 @@ class PackageSack(PackageSackBase):
         return result
 
     def getRequires(self, name, flags=None, version=(None, None, None)):
-        """return dict { packages -> list of matching requires }"""
-        self._checkIndexes(failure='build')
-        result = { }
-        for po in self.requires.get(name, []):
-            hits = po.matchingPrcos('requires', (name, flags, version))
-            if hits:
-                result[po] = hits
-        return result
-
-    def searchRequires(self, name):
-        """return list of package requiring the name (any evr and flag)"""
-        self._checkIndexes(failure='build')        
-        if self.requires.has_key(name):
-            return self.requires[name]
-        else:
-            return []
-
-    def searchProvides(self, name):
-        """return list of package providing the name (any evr and flag)"""
-        # FIXME - should this do a pkgobj.checkPrco((name, flag, (e,v,r,))??
-        # has to do a searchFiles and a searchProvides for things starting with /
-        self._checkIndexes(failure='build')        
-        returnList = []
-        if name[0] == '/':
-             returnList.extend(self.searchFiles(name))
-        if self.provides.has_key(name):
-            returnList.extend(self.provides[name])
-        return returnList
-
-    def searchConflicts(self, name):
-        """return list of package conflicting with the name (any evr and flag)"""
-        self._checkIndexes(failure='build')        
-        if self.conflicts.has_key(name):
-            return self.conflicts[name]
-        else:
-            return []
-
-    def searchObsoletes(self, name):
-        """return list of package obsoleting the name (any evr and flag)"""
-        self._checkIndexes(failure='build')        
-        if self.obsoletes.has_key(name):
-            return self.obsoletes[name]
-        else:
-            return []
+        return self._getPRCO('requires', name, flags, version)
+    def getConflicts(self, name, flags=None, version=(None, None, None)):
+        return self._getPRCO('conflicts', name, flags, version)
+    def getObsoletes(self, name, flags=None, version=(None, None, None)):
+        return self._getPRCO('obsoletes', name, flags, version)
 
     def returnObsoletes(self, newest=False):
         """returns a dict of obsoletes dict[obsoleting pkgtuple] = [list of obs]"""
diff --git a/yum/rpmsack.py b/yum/rpmsack.py
index 7b08ab0..5a82e27 100644
--- a/yum/rpmsack.py
+++ b/yum/rpmsack.py
@@ -93,16 +93,11 @@ class RPMDBPackageSack(PackageSackBase):
         self._tup2pkg = {}
         self._completely_loaded = False
         self._simple_pkgtup_list = []
-        self._get_pro_cache = {}
-        self._get_req_cache  = {}
+        self._get_prco_cache = {'provides' : {},
+                                'requires' : {},
+                                'conflicts' : {},
+                                'obsoletes' : {}}
         self.ts = None
-
-        self._cache = {
-            'provides' : { },
-            'requires' : { },
-            'conflicts' : { },
-            'obsoletes' : { },
-            }
         
     def _get_pkglist(self):
         '''Getter for the pkglist property. 
@@ -122,15 +117,9 @@ class RPMDBPackageSack(PackageSackBase):
         self._tup2pkg = {}
         self._completely_loaded = False
         self._simple_pkgtup_list = []
-        self._get_pro_cache = {}
-        self._get_req_cache = {}
+        for cache in self._get_prco_cache.values():
+            cache.clear()
         misc.unshare_data()
-        self._cache = {
-            'provides' : { },
-            'requires' : { },
-            'conflicts' : { },
-            'obsoletes' : { },
-            }
 
     def readOnlyTS(self):
         if not self.ts:
@@ -186,43 +175,6 @@ class RPMDBPackageSack(PackageSackBase):
         result = result.values()
         return result
         
-    def searchPrco(self, name, prcotype):
-
-        result = self._cache[prcotype].get(name)
-        if result is not None:
-            return result
-
-        ts = self.readOnlyTS()
-        result = {}
-        tag = self.DEP_TABLE[prcotype][0]
-        mi = ts.dbMatch(tag, name)
-        for hdr in mi:
-            po = self._makePackageObject(hdr, mi.instance())
-            result[po.pkgid] = po
-        del mi
-
-        # If it's not a provides or filename, we are done
-        if prcotype == 'provides' and name[0] == '/':
-            fileresults = self.searchFiles(name)
-            for pkg in fileresults:
-                result[pkg.pkgid] = pkg
-        
-        result = result.values()
-        self._cache[prcotype][name] = result
-        return result
-
-    def searchProvides(self, name):
-        return self.searchPrco(name, 'provides')
-
-    def searchRequires(self, name):
-        return self.searchPrco(name, 'requires')
-
-    def searchObsoletes(self, name):
-        return self.searchPrco(name, 'obsoletes')
-
-    def searchConflicts(self, name):
-        return self.searchPrco(name, 'conflicts')
-
     def simplePkgList(self):
         return self.pkglist
 
@@ -525,63 +477,57 @@ class RPMDBPackageSack(PackageSackBase):
                    misc.share_data(r_r)))
         return misc.share_data(deptup)
 
-    def getProvides(self, name, flags=None, version=(None, None, None)):
+    def _getPRCO(self, PRCO, name, flags=None, version=(None, None, None)):
         """searches the rpmdb for what provides the arguments
            returns a list of pkgtuples of providing packages, possibly empty"""
 
         name = misc.share_data(name)
         deptup = self._genDeptup(name, flags, version)
-        if deptup in self._get_pro_cache:
-            return self._get_pro_cache[deptup]
+        if deptup in self._get_prco_cache[PRCO]:
+            return self._get_prco_cache[PRCO][deptup]
         r_v = deptup[2][1]
+
+        ts = self.readOnlyTS()
+        result = {}
+        tag = self.DEP_TABLE[prcotype][0]
+        mi = ts.dbMatch(tag, name)
+        for hdr in mi:
+            po = self._makePackageObject(hdr, mi.instance())
+            result[po.pkgid] = po
+        del mi
+
+        # If it's not a provides or filename, we are done
+        if PRCO == 'provides' and name[0] == '/':
+            fileresults = self.searchFiles(name)
+            for pkg in fileresults:
+                result[pkg.pkgid] = pkg
         
-        pkgs = self.searchProvides(name)
-        
-        result = { }
-        
+        pkgs = result.values()
+        result = {}
+
         for po in pkgs:
             if name[0] == '/' and r_v is None:
+                # file dep add all matches to the defSack
                 result[po] = [(name, None, (None, None, None))]
                 continue
-            hits = po.matchingPrcos('provides', deptup)
+            hits = po.matchingPrcos(PRCO, deptup)
             if hits:
                 result[po] = hits
-        self._get_pro_cache[deptup] = result
+        self._get_prco_cache[PRCO][deptup] = result
         return result
 
-    def whatProvides(self, name, flags, version):
-        # XXX deprecate?
-        return [po.pkgtup for po in self.getProvides(name, flags, version)]
+    def getProvides(self, name, flags=None, version=(None, None, None)):
+        return self._getPRCO('provides', name, flags, version)
 
     def getRequires(self, name, flags=None, version=(None, None, None)):
-        """searches the rpmdb for what provides the arguments
-           returns a list of pkgtuples of providing packages, possibly empty"""
-
-        name = misc.share_data(name)
-        deptup = self._genDeptup(name, flags, version)
-        if deptup in self._get_req_cache:
-            return self._get_req_cache[deptup]
-        r_v = deptup[2][1]
+        return self._getPRCO('requires', name, flags, version)
 
-        pkgs = self.searchRequires(name)
+    def getConflicts(self, name, flags=None, version=(None, None, None)):
+        return self._getPRCO('conflicts', name, flags, version)
 
-        result = { }
+    def getObsoletes(self, name, flags=None, version=(None, None, None)):
+        return self._getPRCO('obsoletes', name, flags, version)
 
-        for po in pkgs:
-            if name[0] == '/' and r_v is None:
-                # file dep add all matches to the defSack
-                result[po] = [(name, None, (None, None, None))]
-                continue
-            hits = po.matchingPrcos('requires', deptup)
-            if hits:
-                result[po] = hits
-        self._get_req_cache[deptup] = result
-        return result
-
-    def whatRequires(self, name, flags, version):
-        # XXX deprecate?
-        return [po.pkgtup for po in self.getRequires(name, flags, version)]
-            
 def main():
     sack = RPMDBPackageSack('/')
     for p in sack.simplePkgList():
diff --git a/yum/sqlitesack.py b/yum/sqlitesack.py
index 0b5d3e1..786f06a 100644
--- a/yum/sqlitesack.py
+++ b/yum/sqlitesack.py
@@ -414,7 +414,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
     # or provide a file containing name 
     def searchAll(self,name, query_type='like'):
         # this function is just silly and it reduces down to just this
-        return self.searchPrco(name, 'provides')
+        return self._searchPrco(name, 'provides')
 
     def _sql_pkgKey2po(self, repo, cur, pkgs=None):
         """ Takes a cursor and maps the pkgKey rows into a list of packages. """
@@ -747,9 +747,15 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
     def getRequires(self, name, flags=None, version=(None, None, None)):
         return self._search("requires", name, flags, version)
 
+    def getConflicts(self, name, flags=None, version=(None, None, None)):
+        return self._search("conflicts", name, flags, version)
+
+    def getObsoletes(self, name, flags=None, version=(None, None, None)):
+        return self._search("obsoletes", name, flags, version)
+
     
     @catchSqliteException
-    def searchPrco(self, name, prcotype):
+    def _searchPrco(self, name, prcotype):
         """return list of packages having prcotype name (any evr and flag)"""
         glob = True
         querytype = 'glob'
@@ -830,23 +836,6 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
         
         #~ return results
 
-    def searchProvides(self, name):
-        """return list of packages providing name (any evr and flag)"""
-        return self.searchPrco(name, "provides")
-                
-    def searchRequires(self, name):
-        """return list of packages requiring name (any evr and flag)"""
-        return self.searchPrco(name, "requires")
-
-    def searchObsoletes(self, name):
-        """return list of packages obsoleting name (any evr and flag)"""
-        return self.searchPrco(name, "obsoletes")
-
-    def searchConflicts(self, name):
-        """return list of packages conflicting with name (any evr and flag)"""
-        return self.searchPrco(name, "conflicts")
-
-
     def db2class(self, db, nevra_only=False):
         print 'die die die die die db2class'
         pass
commit 8ac246a33310a9f516b04a9b7c81631d54fe003f
Author: Florian Festi <ffesti at redhat.com>
Date:   Fri Nov 30 15:02:39 2007 +0100

    Remove Depsolve.whatProvides

diff --git a/yum/__init__.py b/yum/__init__.py
index cd75ced..1be6237 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -1485,12 +1485,7 @@ class YumBase(depsolve.Depsolve):
                 if r.startswith('rpmlib('):
                     continue
                 
-                satisfiers = []
-
-                for po in self.whatProvides(r, f, v):
-                    satisfiers.append(po)
-
-                pkgresults[req] = satisfiers
+                pkgresults[req] = self.pkgs.getProvides(r, f, v).keys()
         
         return results
     
@@ -1961,10 +1956,7 @@ class YumBase(depsolve.Depsolve):
                     raise Errors.YumBaseError, _('Invalid version flag')
                 depflags = SYMBOLFLAGS[flagsymbol]
                 
-        sack = self.whatProvides(depname, depflags, depver)
-        results = sack.returnPackages()
-        return results
-        
+        return self.pkgSack.getProvides(depname, depflags, depver).keys()
 
     def returnPackageByDep(self, depstring):
         """Pass in a generic [build]require string and this function will 
diff --git a/yum/depsolve.py b/yum/depsolve.py
index a08f481..5bc3c7f 100644
--- a/yum/depsolve.py
+++ b/yum/depsolve.py
@@ -141,45 +141,6 @@ class Depsolve(object):
         for flag in self.tsInfo.probFilterFlags:
             probfilter |= flag
         self._ts.setProbFilter(probfilter)
-
-    def whatProvides(self, name, flags, version):
-        """searches the packageSacks for what provides the arguments
-           returns a ListPackageSack of providing packages, possibly empty"""
-
-        self.verbose_logger.log(logginglevels.DEBUG_1, _('Searching pkgSack for dep: %s'),
-            name)
-        # we need to check the name - if it doesn't match:
-        # /etc/* bin/* or /usr/lib/sendmail then we should fetch the 
-        # filelists.xml for all repos to make the searchProvides more complete.
-        if name[0] == '/':
-            if not misc.re_primary_filename(name):
-                self.doSackFilelistPopulate()
-            
-        pkgs = self.pkgSack.searchProvides(name)
-        
-        
-        if flags == 0:
-            flags = None
-        if type(version) in (types.StringType, types.NoneType, types.UnicodeType):
-            (r_e, r_v, r_r) = rpmUtils.miscutils.stringToVersion(version)
-        elif type(version) in (types.TupleType, types.ListType): # would this ever be a ListType?
-            (r_e, r_v, r_r) = version
-        
-        defSack = ListPackageSack() # holder for items definitely providing this dep
-        
-        for po in pkgs:
-            self.verbose_logger.log(logginglevels.DEBUG_2,
-                _('Potential match for %s from %s'), name, po)
-            if name[0] == '/' and r_v is None:
-                # file dep add all matches to the defSack
-                defSack.addPackage(po)
-                continue
-
-            if po.checkPrco('provides', (name, flags, (r_e, r_v, r_r))):
-                defSack.addPackage(po)
-                self.verbose_logger.debug(_('Matched %s to require for %s'), po, name)
-        
-        return defSack
         
     def allowedMultipleInstalls(self, po):
         """takes a packageObject, returns 1 or 0 depending on if the package 
@@ -427,7 +388,8 @@ class Depsolve(object):
         #                   - if they are the same
         #                       - be confused but continue
 
-        provSack = self.whatProvides(needname, needflags, needversion)
+        provSack = ListPackageSack(self.pkgSack.getProvides(
+                needname, needflags or None, rpmUtils.miscutils.stringToVersion(needversion)))
 
         # get rid of things that are already in the rpmdb - b/c it's pointless to use them here
 
commit 2991621f5424da61a4284bb75dc13dd55f988750
Author: James Antill <james at and.org>
Date:   Mon May 19 09:34:07 2008 -0400

    Fix -y config. option in man page: bug#447305

diff --git a/docs/yum.8 b/docs/yum.8
index 7b6bdeb..8845989 100644
--- a/docs/yum.8
+++ b/docs/yum.8
@@ -208,7 +208,7 @@ Help; display a help message and then quit\&.
 Assume yes; assume that the answer to any question which would be asked 
 is yes\&.
 .br
-Configuration Option: \fBassume\-yes\fP
+Configuration Option: \fBassumeyes\fP
 .IP "\fB\-c [config file]\fP" 
 Specifies the config file location - can take http, ftp urls and local file
 paths\&.
commit 5ae57388f5156c51c31929f4bc09c821ba141abc
Merge: 89b0d52... 7a99a04...
Author: James Antill <james at and.org>
Date:   Mon May 19 09:30:44 2008 -0400

    Merge branch 'master' of ssh://login.linux.duke.edu/home/groups/yum/git/yum
    
    * 'master' of ssh://login.linux.duke.edu/home/groups/yum/git/yum:
      gotta check both, not either - otherwise filedeps don't work :(

commit 89b0d52e0cd595010f538df65537df0f4d0c4500
Author: James Antill <james at and.org>
Date:   Mon May 19 09:30:19 2008 -0400

    Allow -c URL to work again

diff --git a/yum/config.py b/yum/config.py
index fecdfe3..218008b 100644
--- a/yum/config.py
+++ b/yum/config.py
@@ -751,7 +751,10 @@ def readMainConfig(startupconf):
     
     # items related to the originating config file
     yumconf.config_file_path = startupconf.config_file_path
-    yumconf.config_file_age = os.stat(startupconf.config_file_path)[8]
+    if os.path.exists(startupconf.config_file_path):
+        yumconf.config_file_age = os.stat(startupconf.config_file_path)[8]
+    else:
+        yumconf.config_file_age = 0
     
     # propagate the debuglevel and errorlevel values:
     yumconf.debuglevel = startupconf.debuglevel
commit 7a99a04d7f121a547d9af82738cd64b2fa8b04ca
Author: Seth Vidal <skvidal at fedoraproject.org>
Date:   Sat May 17 07:43:42 2008 -0400

    gotta check both, not either - otherwise filedeps don't work :(

diff --git a/yum/sqlitesack.py b/yum/sqlitesack.py
index c9fc26c..0b5d3e1 100644
--- a/yum/sqlitesack.py
+++ b/yum/sqlitesack.py
@@ -766,7 +766,7 @@ class YumSqlitePackageSack(yumRepo.YumPackageSack):
         # If it's not a provides or a filename, we are done
         if prcotype != "provides":
             return results
-        if not glob or name[0] != '/':
+        if not glob and name[0] != '/':
             return results
 
         # If it is a filename, search the primary.xml file info



More information about the Yum-cvs-commits mailing list