python2-yum/yum-HEAD.patch
2025-01-27 22:03:48 -05:00

204224 lines
5.5 MiB
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

diff --git a/.gitignore b/.gitignore
index 911da19..85decd5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,8 @@
*.bak
*.swp
*.tar.*
+.tx
+docs/sphinxdocs/_build
.project
.pydevproject
asthelper.completions
diff --git a/Makefile b/Makefile
index 740b616..f203c4d 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-SUBDIRS = rpmUtils yum etc docs po
+SUBDIRS = rpmUtils yum yum-cron etc docs po
PYFILES = $(wildcard *.py)
PYLINT_MODULES = *.py yum rpmUtils
PYLINT_IGNORE = oldUtils.py
@@ -26,8 +26,9 @@ install:
for p in $(PYFILES) ; do \
install -m 644 $$p $(DESTDIR)/usr/share/yum-cli/$$p; \
done
+ chmod 755 $(DESTDIR)/usr/share/yum-cli/completion-helper.py
mv $(DESTDIR)/usr/share/yum-cli/yum-updatesd.py $(DESTDIR)/usr/share/yum-cli/yumupd.py
- $(PYTHON) -c "import compileall; compileall.compile_dir('$(DESTDIR)/usr/share/yum-cli', 1, '$(PYDIR)', 1)"
+ $(PYTHON) -c "import compileall; compileall.compile_dir('$(DESTDIR)/usr/share/yum-cli', 1, '/usr/share/yum-cli', 1)"
mkdir -p $(DESTDIR)/usr/bin $(DESTDIR)/usr/sbin
install -m 755 bin/yum.py $(DESTDIR)/usr/bin/yum
@@ -38,6 +39,25 @@ install:
for d in $(SUBDIRS); do make PYTHON=$(PYTHON) DESTDIR=`cd $(DESTDIR); pwd` -C $$d install; [ $$? = 0 ] || exit 1; done
+apidocs:
+ make -C docs/sphinxdocs html
+ echo "Docs are in: docs/sphinxdocs/_build/html/*"
+
+transifex-pull:
+ tx pull -a -f
+ @echo "You can now git commit -a -m 'Transifex pull, *.po update'"
+
+transifex-push:
+ make -C po yum.pot
+ tx push -s -t
+ @echo "You can now git commit -a -m 'Transifex push, yum.pot update'"
+
+transifex:
+ make transifex-pull
+ git commit -a -m 'Transefex pull, *.po update'
+ make transifex-push
+ git commit -a -m 'Transifex push, yum.pot update'
+
.PHONY: docs test
DOCS = yum rpmUtils callback.py yumcommands.py shell.py output.py cli.py utils.py\
@@ -63,7 +83,6 @@ doccheck:
test:
@nosetests -i ".*test" test
- -@test/check-po-yes-no.py
cd po; make test
test-skipbroken:
diff --git a/callback.py b/callback.py
index 2f6154e..2e5a052 100644
--- a/callback.py
+++ b/callback.py
@@ -27,10 +27,7 @@ from yum.constants import *
class RPMInstallCallback:
-
- """
- Yum command line callback class for callbacks from the RPM library.
- """
+ """Yum command line callback class for callbacks from the RPM library."""
def __init__(self, output=1):
self.output = output
@@ -105,6 +102,21 @@ class RPMInstallCallback:
return pkg
def callback(self, what, bytes, total, h, user):
+ """Handle callbacks from the RPM library.
+
+ :param what: number identifying the type of callback
+ :param bytes: the number of bytes associated with the
+ callback; the exact meaning depends on the type of
+ the callback. For example, for a RPMCALLBACK_INST_PROGRESS
+ callback, bytes will represent the current amount of work done
+ :param total: the total amount of work associated with the
+ callback; the exact meaning depends on the type of the
+ callback. For example, *total* may represent the total
+ number of transactions in a transaction set
+ :param h: a package object or string identifying the package
+ involved in the callback
+ :param user: unused
+ """
if what == rpm.RPMCALLBACK_TRANS_START:
if bytes == 6:
self.total_actions = total
diff --git a/cli.py b/cli.py
old mode 100644
new mode 100755
index 6056d38..7f6643f
--- a/cli.py
+++ b/cli.py
@@ -25,7 +25,7 @@ import sys
import time
import random
import logging
-from optparse import OptionParser,OptionGroup
+from optparse import OptionParser,OptionGroup,SUPPRESS_HELP
import rpm
from weakref import proxy as weakref
@@ -43,31 +43,34 @@ from yum.rpmtrans import RPMTransaction
import signal
import yumcommands
-from yum.i18n import to_unicode, to_utf8
+from yum.i18n import to_unicode, to_utf8, exception2msg
# This is for yum-utils/yumdownloader in RHEL-5, where it isn't importing this
# directly but did do "from cli import *", and we did have this in 3.2.22. I
# just _love_ how python re-exports these by default.
+# pylint: disable-msg=W0611
from yum.packages import parsePackages
+# pylint: enable-msg=W0611
def sigquit(signum, frame):
- """ SIGQUIT handler for the yum cli. """
+ """SIGQUIT handler for the yum cli. This function will print an
+ error message and exit the program.
+
+ :param signum: unused
+ :param frame: unused
+ """
print >> sys.stderr, "Quit signal sent - exiting immediately"
sys.exit(1)
class CliError(yum.Errors.YumBaseError):
-
- """
- Command line interface related Exception.
- """
+ """Command line interface related Exception."""
def __init__(self, args=''):
yum.Errors.YumBaseError.__init__(self)
self.args = args
class YumBaseCli(yum.YumBase, output.YumOutput):
- """This is the base class for yum cli.
- Inherits from yum.YumBase and output.YumOutput """
+ """This is the base class for yum cli."""
def __init__(self):
# handle sigquit early on
@@ -104,17 +107,31 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
self.registerCommand(yumcommands.CheckRpmdbCommand())
self.registerCommand(yumcommands.DistroSyncCommand())
self.registerCommand(yumcommands.LoadTransactionCommand())
+ self.registerCommand(yumcommands.SwapCommand())
+ self.registerCommand(yumcommands.RepoPkgsCommand())
+ self.registerCommand(yumcommands.UpdateinfoCommand())
+ self.registerCommand(yumcommands.UpdateMinimalCommand())
+ self.registerCommand(yumcommands.FSSnapshotCommand())
def registerCommand(self, command):
+ """Register a :class:`yumcommands.YumCommand` so that it can be called by
+ any of the names returned by its
+ :func:`yumcommands.YumCommand.getNames` method.
+
+ :param command: the :class:`yumcommands.YumCommand` to register
+ """
for name in command.getNames():
if name in self.yum_cli_commands:
raise yum.Errors.ConfigError(_('Command "%s" already defined') % name)
self.yum_cli_commands[name] = command
def doRepoSetup(self, thisrepo=None, dosack=1):
- """grabs the repomd.xml for each enabled repository
- and sets up the basics of the repository"""
-
+ """Grab the repomd.xml for each enabled and set up the basics
+ of the repository.
+
+ :param thisrepo: the repository to set up
+ :param dosack: whether to get the repo sack
+ """
if self._repos and thisrepo is None:
return self._repos
@@ -163,9 +180,19 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
mainopts = yum.misc.GenericHolder()
mainopts.items = []
+ bad_setopt_tm = []
+ bad_setopt_ne = []
+
for item in setopts:
- k,v = item.split('=')
- period = k.find('.')
+ vals = item.split('=')
+ if len(vals) > 2:
+ bad_setopt_tm.append(item)
+ continue
+ if len(vals) < 2:
+ bad_setopt_ne.append(item)
+ continue
+ k,v = vals
+ period = k.rfind('.')
if period != -1:
repo = k[:period]
k = k[period+1:]
@@ -180,13 +207,15 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
self.main_setopts = mainopts
self.repo_setopts = repoopts
-
+
+ return bad_setopt_tm, bad_setopt_ne
def getOptionsConfig(self, args):
- """parses command line arguments, takes cli args:
- sets up self.conf and self.cmds as well as logger objects
- in base instance"""
-
+ """Parse command line arguments, and set up :attr:`self.conf` and
+ :attr:`self.cmds`, as well as logger objects in base instance.
+
+ :param args: a list of command line arguments
+ """
self.optparser = YumOptionParser(base=self, usage=self._makeUsage())
# Parse only command line options that affect basic yum setup
@@ -199,7 +228,7 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
opts.verbose = False
# go through all the setopts and set the global ones
- self._parseSetOpts(opts.setopts)
+ bad_setopt_tm, bad_setopt_ne = self._parseSetOpts(opts.setopts)
if self.main_setopts:
for opt in self.main_setopts.items:
@@ -229,6 +258,12 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
pc.releasever = opts.releasever
self.conf
+ for item in bad_setopt_tm:
+ msg = "Setopt argument has multiple values: %s"
+ self.logger.warning(msg % item)
+ for item in bad_setopt_ne:
+ msg = "Setopt argument has no value: %s"
+ self.logger.warning(msg % item)
# now set all the non-first-start opts from main from our setopts
if self.main_setopts:
for opt in self.main_setopts.items:
@@ -238,10 +273,14 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
setattr(self.conf, opt, getattr(self.main_setopts, opt))
except yum.Errors.ConfigError, e:
- self.logger.critical(_('Config Error: %s'), e)
+ self.logger.critical(_('Config error: %s'), e)
+ sys.exit(1)
+ except IOError, e:
+ e = '%s: %s' % (to_unicode(e.args[1]), repr(e.filename))
+ self.logger.critical(_('Config error: %s'), e)
sys.exit(1)
except ValueError, e:
- self.logger.critical(_('Options Error: %s'), e)
+ self.logger.critical(_('Options error: %s'), e)
sys.exit(1)
# update usage in case plugins have added commands
@@ -263,11 +302,11 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
if opts.verbose:
opts.debuglevel = opts.errorlevel = 6
if opts.debuglevel != pc.debuglevel or opts.errorlevel != pc.errorlevel:
- self.logger.warning("Ignored option -q, -v, -d or -e (probably due to merging: -yq != -y -q)")
+ self.logger.warning(_("Ignored option -q, -v, -d or -e (probably due to merging: -yq != -y -q)"))
# getRoot() changes it, but then setupYumConfig() changes it back. So
# don't test for this, if we are using --installroot.
if root == '/' and opts.conffile != pc.fn:
- self.logger.warning("Ignored option -c (probably due to merging -yc != -y -c)")
+ self.logger.warning(_("Ignored option -c (probably due to merging -yc != -y -c)"))
if opts.version:
self.conf.cache = 1
@@ -290,9 +329,9 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
self.term.MODE['normal'])
print _(" Installed: %s-%s at %s") %(name, ver,
sm_ui_time(pkg.installtime))
- print _(" Built : %s at %s") % (pkg.packager,
+ print _(" Built : %s at %s") % (to_unicode(pkg.packager),
sm_ui_time(pkg.buildtime))
- print _(" Committed: %s at %s") % (pkg.committer,
+ print _(" Committed: %s at %s") % (to_unicode(pkg.committer),
sm_ui_date(pkg.committime))
sys.exit(0)
@@ -318,10 +357,12 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
time.sleep(sleeptime)
def parseCommands(self):
- """reads self.cmds and parses them out to make sure that the requested
- base command + argument makes any sense at all"""
-
- self.verbose_logger.debug('Yum Version: %s', yum.__version__)
+ """Read :attr:`self.cmds` and parse them out to make sure that
+ the requested base command and argument makes any sense at
+ all. This function will also set :attr:`self.basecmd` and
+ :attr:`self.extcmds`.
+ """
+ self.verbose_logger.debug('Yum version: %s', yum.__version__)
self.verbose_logger.log(yum.logginglevels.DEBUG_4,
'COMMAND: %s', self.cmdstring)
self.verbose_logger.log(yum.logginglevels.DEBUG_4,
@@ -349,6 +390,50 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
self.basecmd, sys.argv[0])
raise CliError
+ cmd = self.yum_cli_commands[self.basecmd]
+ cacheReq = 'write'
+ if hasattr(cmd, 'cacheRequirement'):
+ cacheReq = cmd.cacheRequirement(self, self.basecmd, self.extcmds)
+
+ # The main thing we want to do here is that if the user has done a
+ # "yum makecache fast" or has yum-cron running or something, then try
+ # not to update the repo. caches ... thus. not turning 0.5s ops. into
+ # 100x longer ops.
+ # However if the repos. are not in sync. that's probably not going to
+ # work well (Eg. user enables updates-testing). Also give a warning if
+ # they are _really_ old.
+ ts_min = None
+ ts_max = None
+ for repo in self.repos.sort():
+ if not os.path.exists(repo.metadata_cookie):
+ ts_min = None
+ break
+
+ rts = os.stat(repo.metadata_cookie).st_mtime
+ if not ts_min:
+ ts_min = rts
+ ts_max = rts
+ elif rts > ts_max:
+ ts_max = rts
+ elif rts < ts_min:
+ ts_min = rts
+
+ if ts_min:
+ # If caches are within 5 days of each other, they are ok to work
+ # together (lol, random numbers)...
+ if (ts_max - ts_min) > (60 * 60 * 24 * 5):
+ ts_min = None
+ elif ts_max > time.time():
+ ts_min = None
+
+ if not ts_min:
+ cacheReq = 'write'
+ elif (time.time() - ts_max) > (60 * 60 * 24 * 14):
+ self.logger.warning(_("Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast"))
+
+ for repo in self.repos.sort():
+ repo._metadata_cache_req = cacheReq
+
self.yum_cli_commands[self.basecmd].doCheck(self, self.basecmd, self.extcmds)
def _shell_history_write(self):
@@ -365,7 +450,11 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
self.history.write_addon_data('shell-cmds', data)
def doShell(self):
- """do a shell-like interface for yum commands"""
+ """Run a shell-like interface for yum commands.
+
+ :return: a tuple containing the shell result number, and the
+ shell result messages
+ """
yumshell = shell.YumShell(base=self)
@@ -382,8 +471,12 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return yumshell.result, yumshell.resultmsgs
def errorSummary(self, errstring):
- """ parse the error string for 'interesting' errors which can
- be grouped, such as disk space issues """
+ """Parse the error string for 'interesting' errors which can
+ be grouped, such as disk space issues.
+
+ :param errstring: the error string
+ :return: a string containing a summary of the errors
+ """
summary = ''
# do disk space report first
p = re.compile('needs (\d+)MB on the (\S+) filesystem')
@@ -407,17 +500,45 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return summary
- def doCommands(self):
+ def waitForLock(self):
+ """Establish the yum lock. If another process is already
+ holding the yum lock, by default this method will keep trying
+ to establish the lock until it is successful. However, if
+ :attr:`self.conf.exit_on_lock` is set to True, it will
+ raise a :class:`Errors.YumBaseError`.
"""
- Calls the base command passes the extended commands/args out to be
- parsed (most notably package globs).
-
- Returns a numeric result code and an optional string
- - 0 = we're done, exit
- - 1 = we've errored, exit with error string
- - 2 = we've got work yet to do, onto the next stage
- """
-
+ lockerr = ""
+ while True:
+ try:
+ self.doLock()
+ except yum.Errors.LockError, e:
+ if exception2msg(e) != lockerr:
+ lockerr = exception2msg(e)
+ self.logger.critical(lockerr)
+ if e.errno:
+ raise yum.Errors.YumBaseError, _("Can't create lock file; exiting")
+ if not self.conf.exit_on_lock:
+ self.logger.critical("Another app is currently holding the yum lock; waiting for it to exit...")
+ import utils
+ utils.show_lock_owner(e.pid, self.logger)
+ time.sleep(2)
+ else:
+ raise yum.Errors.YumBaseError, _("Another app is currently holding the yum lock; exiting as configured by exit_on_lock")
+ else:
+ break
+
+ def doCommands(self):
+ """Call the base command, and pass it the extended commands or
+ arguments.
+
+ :return: (exit_code, [ errors ])
+
+ exit_code is::
+
+ 0 = we're done, exit
+ 1 = we've errored, exit with error string
+ 2 = we've got work yet to do, onto the next stage
+ """
# at this point we know the args are valid - we don't know their meaning
# but we know we're not being sent garbage
@@ -435,14 +556,41 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
try:
self._getTs(needTsRemove)
except yum.Errors.YumBaseError, e:
- return 1, [str(e)]
+ return 1, [exception2msg(e)]
+
+ # This should already have been done at doCheck() time, but just in
+ # case repos. got added or something do it again.
+ cacheReq = 'write'
+ if hasattr(cmd, 'cacheRequirement'):
+ cacheReq = cmd.cacheRequirement(self, self.basecmd, self.extcmds)
+ for repo in self.repos.sort():
+ repo._metadata_cache_req = cacheReq
return self.yum_cli_commands[self.basecmd].doCommand(self, self.basecmd, self.extcmds)
def doTransaction(self):
- """takes care of package downloading, checking, user confirmation and actually
- RUNNING the transaction"""
-
+ """Take care of package downloading, checking, user
+ confirmation and actually running the transaction.
+
+ :return: a numeric return code, and optionally a list of
+ errors. A negative return code indicates that errors
+ occurred in the pre-transaction checks
+ """
+ def _downloadonly_userconfirm(self):
+ # Note that we shouldn't just remove the 'd' option, or the options
+ # yum accepts will be different which is bad. So always accept it,
+ # but change the prompt.
+ dl_only = {'downloadonly' :
+ (u'd', _('d'), _('download'),
+ _('downloadonly'))}
+ if not stuff_to_download:
+ ret = self.userconfirm(extra=dl_only)
+ if ret == 'downloadonly':
+ ret = None
+ return ret
+ return self.userconfirm(prompt=_('Is this ok [y/d/N]: '),
+ extra=dl_only)
+
# just make sure there's not, well, nothing to do
if len(self.tsInfo) == 0:
self.verbose_logger.info(_('Trying to run the transaction but nothing to do. Exiting.'))
@@ -453,7 +601,7 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
lsts = self.listTransaction()
if self.verbose_logger.isEnabledFor(yum.logginglevels.INFO_1):
self.verbose_logger.log(yum.logginglevels.INFO_1, lsts)
- elif not self.conf.assumeyes:
+ elif self.conf.assumeno or not self.conf.assumeyes:
# If we are in quiet, and assumeyes isn't on we want to output
# at least the transaction list anyway.
self.logger.warn(lsts)
@@ -463,7 +611,6 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
rmpkgs = []
stuff_to_download = False
install_only = True
- remove_only = True
for txmbr in self.tsInfo.getMembers():
if txmbr.ts_state not in ('i', 'u'):
install_only = False
@@ -471,7 +618,6 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
if po:
rmpkgs.append(po)
else:
- remove_only = False
stuff_to_download = True
po = txmbr.po
if po:
@@ -489,19 +635,40 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
else:
self.reportDownloadSize(downloadpkgs, install_only)
+ cfr = self.tsInfo._check_future_rpmdbv
+ if (cfr is not None and
+ self.tsInfo.futureRpmDBVersion() != cfr[1]):
+ msg = _("future rpmdb ver mismatched saved transaction version,")
+ if cfr[2]:
+ msg += _(" ignoring, as requested.")
+ self.logger.critical(_(msg))
+ else:
+ msg += _(" aborting.")
+ raise yum.Errors.YumBaseError(msg)
+
# confirm with user
if self._promptWanted():
- if not self.userconfirm():
- self.verbose_logger.info(_('Exiting on user Command'))
+ uc = None
+ if not self.conf.assumeno:
+ uc = _downloadonly_userconfirm(self)
+
+ if not uc:
+ self.verbose_logger.info(_('Exiting on user command'))
return -1
+ elif uc == 'downloadonly':
+ self.conf.downloadonly = True
- self.verbose_logger.log(yum.logginglevels.INFO_2,
- _('Downloading Packages:'))
+ if self.conf.downloadonly:
+ self.verbose_logger.log(yum.logginglevels.INFO_2,
+ _('Background downloading packages, then exiting:'))
+ else:
+ self.verbose_logger.log(yum.logginglevels.INFO_2,
+ _('Downloading packages:'))
problems = self.downloadPkgs(downloadpkgs, callback_total=self.download_callback_total_cb)
if len(problems) > 0:
errstring = ''
- errstring += _('Error Downloading Packages:\n')
+ errstring += _('Error downloading packages:\n')
for key in problems:
errors = yum.misc.unique(problems[key])
for error in errors:
@@ -520,8 +687,9 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
rcd_st = time.time()
self.verbose_logger.log(yum.logginglevels.INFO_2,
- _('Running Transaction Check'))
+ _('Running transaction check'))
msgs = self._run_rpm_check()
+ depsolve = False
if msgs:
rpmlib_only = True
for msg in msgs:
@@ -532,21 +700,23 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
print _("ERROR You need to update rpm to handle:")
else:
print _('ERROR with transaction check vs depsolve:')
+ depsolve = True
for msg in msgs:
print to_utf8(msg)
if rpmlib_only:
return 1, [_('RPM needs to be updated')]
- return 1, [_('Please report this error in %s') % self.conf.bugtracker_url]
+ if depsolve:
+ return 1, []
+ else:
+ return 1, [_('Please report this error in %s') % self.conf.bugtracker_url]
- self.verbose_logger.debug('Transaction Check time: %0.3f' % (time.time() - rcd_st))
+ self.verbose_logger.debug('Transaction check time: %0.3f' % (time.time() - rcd_st))
tt_st = time.time()
self.verbose_logger.log(yum.logginglevels.INFO_2,
- _('Running Transaction Test'))
- if not self.conf.diskspacecheck:
- self.tsInfo.probFilterFlags.append(rpm.RPMPROB_FILTER_DISKSPACE)
+ _('Running transaction test'))
self.ts.order() # order the transaction
self.ts.clean() # release memory not needed beyond this point
@@ -556,16 +726,16 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
del testcb
if len(tserrors) > 0:
- errstring = _('Transaction Check Error:\n')
+ errstring = _('Transaction check error:\n')
for descr in tserrors:
errstring += ' %s\n' % to_unicode(descr)
raise yum.Errors.YumBaseError, errstring + '\n' + \
self.errorSummary(errstring)
self.verbose_logger.log(yum.logginglevels.INFO_2,
- _('Transaction Test Succeeded'))
+ _('Transaction test succeeded'))
- self.verbose_logger.debug('Transaction Test time: %0.3f' % (time.time() - tt_st))
+ self.verbose_logger.debug('Transaction test time: %0.3f' % (time.time() - tt_st))
# unset the sigquit handler
signal.signal(signal.SIGQUIT, signal.SIG_DFL)
@@ -595,7 +765,7 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
if self.conf.debuglevel < 2:
cb.display.output = False
- self.verbose_logger.log(yum.logginglevels.INFO_2, _('Running Transaction'))
+ self.verbose_logger.log(yum.logginglevels.INFO_2, _('Running transaction'))
resultobject = self.runTransaction(cb=cb)
self.verbose_logger.debug('Transaction time: %0.3f' % (time.time() - ts_st))
@@ -609,12 +779,14 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return resultobject.return_code
def gpgsigcheck(self, pkgs):
- '''Perform GPG signature verification on the given packages, installing
- keys if possible
+ """Perform GPG signature verification on the given packages,
+ installing keys if possible.
- Returns non-zero if execution should stop (user abort).
- Will raise YumBaseError if there's a problem
- '''
+ :param pkgs: a list of package objects to verify the GPG
+ signatures of
+ :return: non-zero if execution should stop due to an error
+ :raises: Will raise :class:`YumBaseError` if there's a problem
+ """
for po in pkgs:
result, errmsg = self.sigCheckPkg(po)
@@ -623,7 +795,8 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
continue
elif result == 1:
- if not sys.stdin.isatty() and not self.conf.assumeyes:
+ ay = self.conf.assumeyes and not self.conf.assumeno
+ if not sys.stdin.isatty() and not ay:
raise yum.Errors.YumBaseError, \
_('Refusing to automatically import keys when running ' \
'unattended.\nUse "-y" to override.')
@@ -691,12 +864,62 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
", ".join(matches))
self.verbose_logger.log(yum.logginglevels.INFO_2, msg)
- def installPkgs(self, userlist):
- """Attempts to take the user specified list of packages/wildcards
- and install them, or if they are installed, update them to a newer
- version. If a complete version number if specified, attempt to
- upgrade (or downgrade if they have been removed) them to the
- specified version"""
+ def _install_upgraded_requires(self, txmbrs):
+ """Go through the given txmbrs, and for any to be installed packages
+ look for their installed deps. and try to upgrade them, if the
+ configuration is set. Returning any new transaction members to be
+ isntalled.
+
+ :param txmbrs: a list of :class:`yum.transactioninfo.TransactionMember` objects
+ :return: a list of :class:`yum.transactioninfo.TransactionMember` objects
+ """
+
+ if not self.conf.upgrade_requirements_on_install:
+ return []
+
+ ret = []
+ done = set()
+ def _pkg2ups(pkg, reqpo=None):
+ if pkg.name in done:
+ return []
+ if reqpo is None:
+ reqpo = pkg
+
+ done.add(pkg.name)
+
+ uret = []
+ for req in pkg.requires:
+ for npkg in self.returnInstalledPackagesByDep(req):
+ if npkg.name in done:
+ continue
+ uret += self.update(name=npkg.name, requiringPo=reqpo)
+ uret += _pkg2ups(npkg, reqpo=reqpo)
+ return uret
+
+ for txmbr in txmbrs:
+ for rtxmbr, T in txmbr.relatedto:
+ ret += _pkg2ups(rtxmbr)
+ ret += _pkg2ups(txmbr.po)
+
+ return ret
+
+ def installPkgs(self, userlist, basecmd='install', repoid=None):
+ """Attempt to take the user specified list of packages or
+ wildcards and install them, or if they are installed, update
+ them to a newer version. If a complete version number is
+ specified, attempt to upgrade (or downgrade if they have been
+ removed) them to the specified version.
+
+ :param userlist: a list of names or wildcards specifying
+ packages to install
+ :return: (exit_code, [ errors ])
+
+ exit_code is::
+
+ 0 = we're done, exit
+ 1 = we've errored, exit with error string
+ 2 = we've got work yet to do, onto the next stage
+ """
# get the list of available packages
# iterate over the user's list
# add packages to Transaction holding class if they match.
@@ -710,11 +933,36 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
for arg in userlist:
if (arg.endswith('.rpm') and (yum.misc.re_remote_url(arg) or
os.path.exists(arg))):
- self.localInstall(filelist=[arg])
+ txmbrs = self.installLocal(arg)
+ self._install_upgraded_requires(txmbrs)
continue # it was something on disk and it ended in rpm
# no matter what we don't go looking at repos
try:
- self.install(pattern=arg)
+ if False: pass
+ elif basecmd == 'install-n':
+ txmbrs = self.install(name=arg)
+ elif basecmd == 'install-na':
+ try:
+ n,a = arg.rsplit('.', 1)
+ except:
+ self.verbose_logger.warning(_('Bad %s argument %s.'),
+ basecmd, arg)
+ continue
+ txmbrs = self.install(name=n, arch=a)
+ elif basecmd == 'install-nevra':
+ try:
+ nevr,a = arg.rsplit('.', 1)
+ n,ev,r = nevr.rsplit('-', 2)
+ e,v = ev.split(':', 1)
+ except:
+ self.verbose_logger.warning(_('Bad %s argument %s.'),
+ basecmd, arg)
+ continue
+ txmbrs = self.install(name=n,
+ epoch=e, version=v, release=r, arch=a)
+ else:
+ assert basecmd == 'install', basecmd
+ txmbrs = self.install(pattern=arg)
except yum.Errors.InstallError:
self.verbose_logger.log(yum.logginglevels.INFO_2,
_('No package %s%s%s available.'),
@@ -723,6 +971,7 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
self._maybeYouMeant(arg)
else:
done = True
+ self._install_upgraded_requires(txmbrs)
if len(self.tsInfo) > oldcount:
change = len(self.tsInfo) - oldcount
return 2, [P_('%d package to install', '%d packages to install', change) % change]
@@ -732,9 +981,27 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return 0, [_('Nothing to do')]
def updatePkgs(self, userlist, quiet=0, update_to=False):
- """take user commands and populate transaction wrapper with
- packages to be updated"""
-
+ """Take user commands and populate transaction wrapper with
+ packages to be updated.
+
+ :param userlist: a list of names or wildcards specifying
+ packages to update. If *userlist* is an empty list, yum
+ will perform a global update
+ :param quiet: unused
+ :param update_to: if *update_to* is True, the update will only
+ be run if it will update the given package to the given
+ version. For example, if the package foo-1-2 is installed,
+ updatePkgs(["foo-1-2], update_to=False) will work
+ identically to updatePkgs(["foo"]), but
+ updatePkgs(["foo-1-2"], update_to=True) will do nothing
+ :return: (exit_code, [ errors ])
+
+ exit_code is::
+
+ 0 = we're done, exit
+ 1 = we've errored, exit with error string
+ 2 = we've got work yet to do, onto the next stage
+ """
# if there is no userlist, then do global update below
# this is probably 90% of the calls
# if there is a userlist then it's for updating pkgs, not obsoleting
@@ -745,34 +1012,46 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
else:
# go through the userlist - look for items that are local rpms. If we find them
- # pass them off to localInstall() and then move on
- localupdates = []
+ # pass them off to installLocal() and then move on
for item in userlist:
if (item.endswith('.rpm') and (yum.misc.re_remote_url(item) or
os.path.exists(item))):
- localupdates.append(item)
-
- if len(localupdates) > 0:
- self.localInstall(filelist=localupdates, updateonly=1)
- for item in localupdates:
- userlist.remove(item)
-
- for arg in userlist:
- if not self.update(pattern=arg, update_to=update_to):
- self._checkMaybeYouMeant(arg)
+ txmbrs = self.installLocal(item, updateonly=1)
+ self._install_upgraded_requires(txmbrs)
+ continue
+
+ txmbrs = self.update(pattern=item, update_to=update_to)
+ self._install_upgraded_requires(txmbrs)
+ if not txmbrs:
+ self._checkMaybeYouMeant(item)
if len(self.tsInfo) > oldcount:
change = len(self.tsInfo) - oldcount
- return 2, [P_('%d package marked for Update', '%d packages marked for Update', change) % change]
+ return 2, [P_('%d package marked for update', '%d packages marked for update', change) % change]
else:
- return 0, [_('No Packages marked for Update')]
+ return 0, [_('No packages marked for update')]
# Note that we aren't in __init__ yet for a couple of reasons, but we
# probably will get there for 3.2.28.
def distroSyncPkgs(self, userlist):
- """ This does either upgrade/downgrade, depending on if the latest
- installed version is older or newer. We allow "selection" but not
- local packages (use tmprepo, or something). """
+ """Upgrade or downgrade packages to match the latest versions
+ available in the enabled repositories.
+
+ :param userlist: list of names or wildcards specifying
+ packages to synchronize with the repositories. If the
+ first string in *userlist* is "full", packages will also be
+ reinstalled if their checksums do not match the checksums
+ in the repositories. If *userlist* is an empty list or
+ only contains "full", every installed package will be
+ synchronized
+ :return: (exit_code, [ errors ])
+
+ exit_code is::
+
+ 0 = we're done, exit
+ 1 = we've errored, exit with error string
+ 2 = we've got work yet to do, onto the next stage
+ """
level = 'diff'
if userlist and userlist[0] in ('full', 'diff', 'different'):
@@ -831,6 +1110,7 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
continue
nayi = napkg.yumdb_info
+ found = False
for apkg in self.pkgSack.searchPkgTuple(napkg.pkgtup):
if ('checksum_type' in nayi and
'checksum_data' in nayi and
@@ -861,19 +1141,58 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
dupdates.extend(self.downgrade(name=n, epoch=e, ver=v, rel=r))
if dupdates:
- return 2, [P_('%d package marked for Distribution Synchronization', '%d packages marked for Distribution Synchronization', len(dupdates)) % len(dupdates)]
+ return 2, [P_('%d package marked for distribution synchronization', '%d packages marked for distribution synchronization', len(dupdates)) % len(dupdates)]
else:
- return 0, [_('No Packages marked for Distribution Synchronization')]
+ return 0, [_('No packages marked for distribution synchronization')]
- def erasePkgs(self, userlist):
- """take user commands and populate a transaction wrapper with packages
- to be erased/removed"""
-
- oldcount = len(self.tsInfo)
+ def erasePkgs(self, userlist, pos=False, basecmd='remove'):
+ """Take user commands and populate a transaction wrapper with
+ packages to be erased.
+
+ :param userlist: a list of names or wildcards specifying
+ packages to erase
+ :return: (exit_code, [ errors ])
+
+ exit_code is::
+
+ 0 = we're done, exit
+ 1 = we've errored, exit with error string
+ 2 = we've got work yet to do, onto the next stage
+ """
all_rms = []
for arg in userlist:
- rms = self.remove(pattern=arg)
+ if pos:
+ rms = self.remove(po=arg)
+ if rms:
+ all_rms.extend(rms)
+ continue
+
+ if False: pass
+ elif basecmd in ('erase-n', 'remove-n'):
+ rms = self.remove(name=arg)
+ elif basecmd in ('erase-na', 'remove-na'):
+ try:
+ n,a = arg.rsplit('.', 1)
+ except:
+ self.verbose_logger.warning(_('Bad %s argument %s.'),
+ basecmd, arg)
+ continue
+ rms = self.remove(name=n, arch=a)
+ elif basecmd in ('erase-nevra', 'remove-nevra'):
+ try:
+ nevr,a = arg.rsplit('.', 1)
+ n,ev,r = nevr.rsplit('-', 2)
+ e,v = ev.split(':', 1)
+ except:
+ self.verbose_logger.warning(_('Bad %s argument %s.'),
+ basecmd, arg)
+ continue
+ rms = self.remove(name=n, epoch=e, version=v, release=r, arch=a)
+ else:
+ assert basecmd in ('erase', 'remove'), basecmd
+ rms = self.remove(pattern=arg)
+
if not rms:
self._checkMaybeYouMeant(arg, always_output=False, rpmdb_only=True)
all_rms.extend(rms)
@@ -884,12 +1203,24 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return 0, [_('No Packages marked for removal')]
def downgradePkgs(self, userlist):
- """Attempts to take the user specified list of packages/wildcards
- and downgrade them. If a complete version number if specified,
- attempt to downgrade them to the specified version"""
+ """Attempt to take the user specified list of packages or
+ wildcards and downgrade them. If a complete version number if
+ specified, attempt to downgrade them to the specified version
+
+ :param userlist: a list of names or wildcards specifying
+ packages to downgrade
+ :return: (exit_code, [ errors ])
+
+ exit_code is::
+
+ 0 = we're done, exit
+ 1 = we've errored, exit with error string
+ 2 = we've got work yet to do, onto the next stage
+ """
oldcount = len(self.tsInfo)
+ done = False
for arg in userlist:
if (arg.endswith('.rpm') and (yum.misc.re_remote_url(arg) or
os.path.exists(arg))):
@@ -905,26 +1236,44 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
self.term.MODE['bold'], arg,
self.term.MODE['normal'])
self._maybeYouMeant(arg)
+ else:
+ done = True
if len(self.tsInfo) > oldcount:
change = len(self.tsInfo) - oldcount
return 2, [P_('%d package to downgrade', '%d packages to downgrade', change) % change]
+
+ if not done:
+ return 1, [_('Nothing to do')]
return 0, [_('Nothing to do')]
def reinstallPkgs(self, userlist):
- """Attempts to take the user specified list of packages/wildcards
- and reinstall them. """
+ """Attempt to take the user specified list of packages or
+ wildcards and reinstall them.
+
+ :param userlist: a list of names or wildcards specifying
+ packages to reinstall
+ :return: (exit_code, [ errors ])
+
+ exit_code is::
+
+ 0 = we're done, exit
+ 1 = we've errored, exit with error string
+ 2 = we've got work yet to do, onto the next stage
+ """
oldcount = len(self.tsInfo)
+ done = False
for arg in userlist:
if (arg.endswith('.rpm') and (yum.misc.re_remote_url(arg) or
os.path.exists(arg))):
- self.reinstallLocal(arg)
+ txmbrs = self.reinstallLocal(arg)
+ self._install_upgraded_requires(txmbrs)
continue # it was something on disk and it ended in rpm
# no matter what we don't go looking at repos
try:
- self.reinstall(pattern=arg)
+ txmbrs = self.reinstall(pattern=arg)
except yum.Errors.ReinstallRemoveError:
self._checkMaybeYouMeant(arg, always_output=False)
except yum.Errors.ReinstallInstallError, e:
@@ -940,22 +1289,38 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
except yum.Errors.ReinstallError, e:
assert False, "Shouldn't happen, but just in case"
self.verbose_logger.log(yum.logginglevels.INFO_2, e)
+ else:
+ done = True
+ self._install_upgraded_requires(txmbrs)
+
if len(self.tsInfo) > oldcount:
change = len(self.tsInfo) - oldcount
return 2, [P_('%d package to reinstall', '%d packages to reinstall', change) % change]
+
+ if not done:
+ return 1, [_('Nothing to do')]
return 0, [_('Nothing to do')]
def localInstall(self, filelist, updateonly=0):
- """handles installs/updates of rpms provided on the filesystem in a
- local dir (ie: not from a repo)"""
-
+ """Install or update rpms provided on the file system in a
+ local directory (i.e. not from a repository).
+
+ :param filelist: a list of names specifying local rpms
+ :return: (exit_code, [ errors ])
+
+ exit_code is::
+
+ 0 = we're done, exit
+ 1 = we've errored, exit with error string
+ 2 = we've got work yet to do, onto the next stage
+ """
# read in each package into a YumLocalPackage Object
# append it to self.localPackages
# check if it can be installed or updated based on nevra versus rpmdb
# don't import the repos until we absolutely need them for depsolving
if len(filelist) == 0:
- return 0, [_('No Packages Provided')]
+ return 0, [_('No packages provided')]
installing = False
for pkg in filelist:
@@ -971,23 +1336,29 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return 2, [_('Package(s) to install')]
return 0, [_('Nothing to do')]
- def returnPkgLists(self, extcmds, installed_available=False):
- """Returns packages lists based on arguments on the cli.returns a
- GenericHolder instance with the following lists defined:
- available = list of packageObjects
- installed = list of packageObjects
- updates = tuples of packageObjects (updating, installed)
- extras = list of packageObjects
- obsoletes = tuples of packageObjects (obsoleting, installed)
- recent = list of packageObjects
-
- installed_available = that the available package list is present
- as .hidden_available when doing any of:
- all/available/installed
- """
-
+ def returnPkgLists(self, extcmds, installed_available=False, repoid=None):
+ """Return a :class:`yum.misc.GenericHolder` object containing
+ lists of package objects that match the given names or wildcards.
+
+ :param extcmds: a list of names or wildcards specifying
+ packages to list
+ :param installed_available: whether the available package list
+ is present as .hidden_available when doing all, available,
+ or installed
+ :param repoid: a repoid that all packages should belong to
+
+ :return: a :class:`yum.misc.GenericHolder` instance with the
+ following lists defined::
+
+ available = list of packageObjects
+ installed = list of packageObjects
+ updates = tuples of packageObjects (updating, installed)
+ extras = list of packageObjects
+ obsoletes = tuples of packageObjects (obsoleting, installed)
+ recent = list of packageObjects
+ """
special = ['available', 'installed', 'all', 'extras', 'updates', 'recent',
- 'obsoletes']
+ 'obsoletes', 'distro-extras']
pkgnarrow = 'all'
done_hidden_available = False
@@ -1003,7 +1374,7 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
pkgnarrow = extcmds.pop(0)
ypl = self.doPackageLists(pkgnarrow=pkgnarrow, patterns=extcmds,
- ignore_case=True)
+ ignore_case=True, repoid=repoid)
if self.conf.showdupesfromrepos:
ypl.available += ypl.reinstall_available
@@ -1017,8 +1388,25 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return ypl
def search(self, args):
- """cli wrapper method for module search function, searches simple
- text tags in a package object"""
+ """Search for simple text tags in a package object. This is a
+ cli wrapper method for the module search function.
+
+ :param args: list of names or wildcards to search for.
+ Normally this method will begin by searching the package
+ names and summaries, and will only search urls and
+ descriptions if that fails. However, if the first string
+ in *args* is "all", this method will always search
+ everything
+ :return: a tuple where the first item is an exit code, and
+ the second item is a generator if the search is a
+ successful, and a list of error messages otherwise
+
+ exit_code is::
+
+ 0 = we're done, exit
+ 1 = we've errored, exit with error string
+ 2 = we've got work yet to do, onto the next stage
+ """
# call the yum module search function with lists of tags to search
# and what to search for
@@ -1053,7 +1441,7 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
print ""
else:
mkeys = set(keys)
- _print_match_section(_('N/S Matched: %s'))
+ _print_match_section(_('N/S matched: %s'))
okeys = keys
pos.add(po)
akeys.update(keys)
@@ -1104,13 +1492,24 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
self.logger.warning(_('Warning: No matches found for: %s'), arg)
if not akeys:
- return 0, [_('No Matches found')]
+ return 0, [_('No matches found')]
return 0, matching
def deplist(self, args):
- """cli wrapper method for findDeps method takes a list of packages and
- returns a formatted deplist for that package"""
+ """Print out a formatted list of dependencies for a list of
+ packages. This is a cli wrapper method for
+ :class:`yum.YumBase.findDeps`.
+
+ :param args: a list of names or wildcards specifying packages
+ that should have their dependenices printed
+ :return: (exit_code, [ errors ])
+
+ exit_code is::
+ 0 = we're done, exit
+ 1 = we've errored, exit with error string
+ 2 = we've got work yet to do, onto the next stage
+ """
pkgs = []
for arg in args:
if (arg.endswith('.rpm') and (yum.misc.re_remote_url(arg) or
@@ -1118,10 +1517,12 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
thispkg = yum.packages.YumUrlPackage(self, self.ts, arg)
pkgs.append(thispkg)
elif self.conf.showdupesfromrepos:
- pkgs.extend(self.pkgSack.returnPackages(patterns=[arg]))
+ pkgs.extend(self.pkgSack.returnPackages(patterns=[arg],
+ ignore_case=True))
else:
try:
- pkgs.extend(self.pkgSack.returnNewestByName(patterns=[arg]))
+ pkgs.extend(self.pkgSack.returnNewestByName(patterns=[arg],
+ ignore_case=True))
except yum.Errors.PackageSackError:
pass
@@ -1131,10 +1532,19 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return 0, []
def provides(self, args):
- """use the provides methods in the rpmdb and pkgsack to produce a list
- of items matching the provides strings. This is a cli wrapper to the
- module"""
-
+ """Print out a list of packages that provide the given file or
+ feature. This a cli wrapper to the provides methods in the
+ rpmdb and pkgsack.
+
+ :param args: the name of a file or feature to search for
+ :return: (exit_code, [ errors ])
+
+ exit_code is::
+
+ 0 = we're done, exit
+ 1 = we've errored, exit with error string
+ 2 = we've got work yet to do, onto the next stage
+ """
old_sdup = self.conf.showdupesfromrepos
# For output, as searchPackageProvides() is always in showdups mode
self.conf.showdupesfromrepos = True
@@ -1147,6 +1557,8 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
paths = set(sys.path + os.environ['PATH'].split(':'))
nargs = []
for arg in args:
+ if not arg:
+ continue
if yum.misc.re_filename(arg) or yum.misc.re_glob(arg):
continue
for path in paths:
@@ -1158,25 +1570,82 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
self.conf.showdupesfromrepos = old_sdup
if len(matching) == 0:
- return 0, ['No Matches found']
+ return 0, ['No matches found']
return 0, []
def resolveDepCli(self, args):
- """returns a package (one per user arg) that provide the supplied arg"""
-
+ """Print information about a package that provides the given
+ dependency. Only one package will be printed per dependency.
+
+ :param args: a list of strings specifying dependencies to
+ search for
+ :return: (exit_code, [ errors ])
+
+ exit_code is::
+
+ 0 = we're done, exit
+ 1 = we've errored, exit with error string
+ 2 = we've got work yet to do, onto the next stage
+ """
+
+ not_found = set()
for arg in args:
try:
+ ipkg = self.returnInstalledPackageByDep(arg)
+ except yum.Errors.YumBaseError:
+ ipkg = None
+ else:
+ self.verbose_logger.info(" %s:", arg)
+ self.verbose_logger.info("%s %s" % (ipkg.envra,
+ ipkg.ui_from_repo))
+ try:
pkg = self.returnPackageByDep(arg)
except yum.Errors.YumBaseError:
- self.logger.critical(_('No Package Found for %s'), arg)
+ if not ipkg:
+ not_found.add(arg)
else:
- msg = '%s:%s-%s-%s.%s' % (pkg.epoch, pkg.name, pkg.version, pkg.release, pkg.arch)
- self.verbose_logger.info(msg)
+ if not ipkg:
+ self.verbose_logger.info(" %s:", arg)
+ if not pkg.verEQ(ipkg):
+ self.verbose_logger.info("%s %s" % (pkg.envra,
+ pkg.ui_from_repo))
+
+ if not_found:
+ self.logger.critical(_('Error: No packages found for:\n %s'),
+ "\n ".join(sorted(not_found)))
return 0, []
def cleanCli(self, userlist):
+ """Remove data from the yum cache directory. What data is
+ removed depends on the options supplied by the user.
+
+ :param userlist: a list of options. The following are valid
+ options::
+
+ expire-cache = Eliminate the local data saying when the
+ metadata and mirror lists were downloaded for each
+ repository.
+ packages = Eliminate any cached packages
+ headers = Eliminate the header files, which old versions
+ of yum used for dependency resolution
+ metadata = Eliminate all of the files which yum uses to
+ determine the remote availability of packages
+ dbcache = Eliminate the sqlite cache used for faster
+ access to metadata
+ rpmdb = Eliminate any cached datat from the local rpmdb
+ plugins = Tell any enabled plugins to eliminate their
+ cached data
+ all = do all of the above
+ :return: (exit_code, [ errors ])
+
+ exit_code is::
+
+ 0 = we're done, exit
+ 1 = we've errored, exit with error string
+ 2 = we've got work yet to do, onto the next stage
+ """
hdrcode = pkgcode = xmlcode = dbcode = expccode = 0
pkgresults = hdrresults = xmlresults = dbresults = expcresults = []
msg = self.fmtKeyValFill(_('Cleaning repos: '),
@@ -1184,7 +1653,7 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
self.verbose_logger.log(yum.logginglevels.INFO_2, msg)
if 'all' in userlist:
self.verbose_logger.log(yum.logginglevels.INFO_2,
- _('Cleaning up Everything'))
+ _('Cleaning up everything'))
pkgcode, pkgresults = self.cleanPackages()
hdrcode, hdrresults = self.cleanHeaders()
xmlcode, xmlresults = self.cleanMetadata()
@@ -1200,10 +1669,10 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return code, []
if 'headers' in userlist:
- self.logger.debug(_('Cleaning up Headers'))
+ self.logger.debug(_('Cleaning up headers'))
hdrcode, hdrresults = self.cleanHeaders()
if 'packages' in userlist:
- self.logger.debug(_('Cleaning up Packages'))
+ self.logger.debug(_('Cleaning up packages'))
pkgcode, pkgresults = self.cleanPackages()
if 'metadata' in userlist:
self.logger.debug(_('Cleaning up xml metadata'))
@@ -1228,138 +1697,265 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return code, []
def returnGroupLists(self, userlist):
+ """Print out a list of groups that match the given names or
+ wildcards.
+
+ :param extcmds: a list of names or wildcards specifying
+ groups to list
+ :return: (exit_code, [ errors ])
- uservisible=1
+ exit_code is::
+
+ 0 = we're done, exit
+ 1 = we've errored, exit with error string
+ 2 = we've got work yet to do, onto the next stage
+ """
+ return self._returnGroupLists(userlist)
+
+ def _returnGroupLists(self, userlist, summary=False):
+ # What data are we showing...
+ wts_map = {'hidden' : 'hidden',
+ 'language' : 'lang',
+ 'languages' : 'lang',
+ 'lang' : 'lang',
+ 'langs' : 'lang',
+ 'environment' : 'env',
+ 'environments' : 'env',
+ 'env' : 'env',
+ 'envs' : 'env',
+ 'package' : 'pkg',
+ 'packages' : 'pkg',
+ 'pkg' : 'pkg',
+ 'pkgs' : 'pkg',
+ 'available' : 'avail',
+ 'avail' : 'avail',
+ 'installed' : 'inst',
+ 'inst' : 'inst',
+ 'id' : 'id',
+ 'ids' : 'id',
+ }
+ verb = self.verbose_logger.isEnabledFor(yum.logginglevels.DEBUG_3)
+ wts = {'hidden' : False,
+ 'lang' : None,
+ 'env' : None,
+ 'pkg' : None,
+ 'inst' : None,
+ 'avail' : None,
+ 'id' : verb}
- if len(userlist) > 0:
- if userlist[0] == 'hidden':
- uservisible=0
- userlist.pop(0)
+ ouserlist = userlist[:]
+ while userlist:
+ arg = userlist[0]
+ val = True
+ if arg.startswith('no'):
+ arg = arg[2:]
+ val = False
+ if arg not in wts_map:
+ break
+ wts[wts_map[arg]] = val
+ userlist.pop(0)
if not userlist:
userlist = None # Match everything...
- installed, available = self.doGroupLists(uservisible=uservisible,
- patterns=userlist)
-
- if not installed and not available:
- self.logger.error(_('Warning: No groups match: %s'),
- ", ".join(userlist))
- return 0, []
+ if wts['inst'] is None and wts['avail'] is None:
+ wts['inst'] = True
+ wts['avail'] = True
- def _out_grp(sect, group):
- if not done:
- self.verbose_logger.log(yum.logginglevels.INFO_2, sect)
- msg = ' %s' % group.ui_name
- if self.verbose_logger.isEnabledFor(yum.logginglevels.DEBUG_3):
- msg += ' (%s)' % group.groupid
- if group.langonly:
- msg += ' [%s]' % group.langonly
- self.verbose_logger.log(yum.logginglevels.INFO_2, '%s', msg)
+ if wts['lang'] is None and wts['pkg'] is None and wts['env'] is None:
+ wts['env'] = True
+ wts['pkg'] = True
- done = False
- for group in installed:
- if group.langonly: continue
- _out_grp(_('Installed Groups:'), group)
- done = True
+ uv = not wts['hidden']
+ dGL = self.doGroupLists(patterns=userlist,
+ uservisible=uv, return_evgrps=True)
- done = False
- for group in installed:
- if not group.langonly: continue
- _out_grp(_('Installed Language Groups:'), group)
- done = True
+ installed, available, ievgrps, evgrps = dGL
- done = False
- for group in available:
- if group.langonly: continue
- _out_grp(_('Available Groups:'), group)
- done = True
+ if not wts['env']:
+ ievgrps = []
+ evgrps = []
- done = False
- for group in available:
- if not group.langonly: continue
- _out_grp(_('Available Language Groups:'), group)
- done = True
+ if not wts['inst']:
+ installed = []
+ ievgrps = []
+ if not wts['avail']:
+ available = []
+ evgrps = []
+
+ done = []
+ def _out_grp(sect, groups):
+ if not groups:
+ return
- return 0, [_('Done')]
+ done.append(sect)
+ if summary:
+ self.verbose_logger.log(yum.logginglevels.INFO_2,
+ "%s %u", sect, len(groups))
+ return
- def returnGroupSummary(self, userlist):
+ self.verbose_logger.log(yum.logginglevels.INFO_2, sect)
- uservisible=1
-
- if len(userlist) > 0:
- if userlist[0] == 'hidden':
- uservisible=0
- userlist.pop(0)
- if not userlist:
- userlist = None # Match everything...
+ for group in groups:
+ msg = ' %s' % group.ui_name
+ if wts['id']:
+ msg += ' (%s)' % group.compsid
+ if group.langonly:
+ msg += ' [%s]' % group.langonly
+ self.verbose_logger.info('%s', msg)
- installed, available = self.doGroupLists(uservisible=uservisible,
- patterns=userlist)
-
- def _out_grp(sect, num):
- if not num:
- return
- self.verbose_logger.log(yum.logginglevels.INFO_2, '%s %u', sect,num)
- done = 0
+ _out_grp(_('Installed environment groups:'), ievgrps)
+ _out_grp(_('Available environment groups:'), evgrps)
+
+ groups = []
for group in installed:
if group.langonly: continue
- done += 1
- _out_grp(_('Installed Groups:'), done)
+ if not wts['pkg']: continue
+ groups.append(group)
+ _out_grp(_('Installed groups:'), groups)
- done = 0
+ groups = []
for group in installed:
if not group.langonly: continue
- done += 1
- _out_grp(_('Installed Language Groups:'), done)
+ if not wts['lang']: continue
+ groups.append(group)
+ _out_grp(_('Installed language groups:'), groups)
- done = False
+ groups = []
for group in available:
if group.langonly: continue
- done += 1
- _out_grp(_('Available Groups:'), done)
+ if not wts['pkg']: continue
+ groups.append(group)
+ _out_grp(_('Available Groups:'), groups)
- done = False
+ groups = []
for group in available:
if not group.langonly: continue
- done += 1
- _out_grp(_('Available Language Groups:'), done)
+ if not wts['lang']: continue
+ groups.append(group)
+ _out_grp(_('Available language groups:'), groups)
+
+ if not done:
+ self.logger.error(_('Warning: no environments/groups match: %s'),
+ ", ".join(ouserlist))
+ return 0, []
return 0, [_('Done')]
+
+ def returnGroupSummary(self, userlist):
+ """Print a summary of the groups that match the given names or
+ wildcards.
+
+ :param userlist: a list of names or wildcards specifying the
+ groups to summarise. If *userlist* is an empty list, all
+ installed and available packages will be summarised
+ :return: (exit_code, [ errors ])
+
+ exit_code is::
+
+ 0 = we're done, exit
+ 1 = we've errored, exit with error string
+ 2 = we've got work yet to do, onto the next stage
+ """
+ return self._returnGroupLists(userlist, summary=True)
def returnGroupInfo(self, userlist):
- """returns complete information on a list of groups"""
+ """Print complete information about the groups that match the
+ given names or wildcards.
+
+ :param userlist: a list of names or wildcards specifying the
+ groups to print information about
+ :return: (exit_code, [ errors ])
+
+ exit_code is::
+
+ 0 = we're done, exit
+ 1 = we've errored, exit with error string
+ 2 = we've got work yet to do, onto the next stage
+ """
for strng in userlist:
group_matched = False
- for group in self.comps.return_groups(strng):
- self.displayPkgsInGroups(group)
- group_matched = True
+
+ pkg_grp = True
+ grp_grp = True
+ if strng.startswith('@^'):
+ strng = strng[2:]
+ pkg_grp = False
+ elif strng.startswith('@'):
+ strng = strng[1:]
+ grp_grp = False
+
+ if grp_grp:
+ for evgroup in self.comps.return_environments(strng):
+ self.displayGrpsInEnvironments(evgroup)
+ group_matched = True
+ if pkg_grp:
+ for group in self.comps.return_groups(strng):
+ self.displayPkgsInGroups(group)
+ group_matched = True
if not group_matched:
- self.logger.error(_('Warning: Group %s does not exist.'), strng)
+ self.logger.error(_('Warning: group/environment %s does not exist.'), strng)
return 0, []
- def installGroups(self, grouplist):
- """for each group requested do 'selectGroup' on them."""
-
+ def installGroups(self, grouplist, upgrade=False):
+ """Mark the packages in the given groups for installation.
+
+ :param grouplist: a list of names or wildcards specifying
+ groups to be installed
+ :return: (exit_code, [ errors ])
+
+ exit_code is::
+
+ 0 = we're done, exit
+ 1 = we've errored, exit with error string
+ 2 = we've got work yet to do, onto the next stage
+ """
pkgs_used = []
for group_string in grouplist:
+
+ grp_grp = True
+ pkg_grp = True
+ if group_string.startswith('@^'):
+ pkg_grp = False
+ group_string = group_string[2:]
+ elif group_string.startswith('@'):
+ grp_grp = False
+ group_string = group_string[1:]
+
group_matched = False
- for group in self.comps.return_groups(group_string):
+ groups = []
+ if grp_grp:
+ groups = self.comps.return_environments(group_string)
+ for group in groups:
group_matched = True
+ try:
+ txmbrs = self.selectEnvironment(group.environmentid,
+ upgrade=upgrade)
+ except yum.Errors.GroupsError:
+ self.logger.critical(_('Warning: environment %s does not exist.'), group_string)
+ continue
+ else:
+ pkgs_used.extend(txmbrs)
+
+ groups = []
+ if pkg_grp:
+ groups = self.comps.return_groups(group_string)
+ for group in groups:
+ group_matched = True
try:
- txmbrs = self.selectGroup(group.groupid)
+ txmbrs = self.selectGroup(group.groupid, upgrade=upgrade)
except yum.Errors.GroupsError:
- self.logger.critical(_('Warning: Group %s does not exist.'), group_string)
+ self.logger.critical(_('Warning: group %s does not exist.'), group_string)
continue
else:
pkgs_used.extend(txmbrs)
if not group_matched:
- self.logger.error(_('Warning: Group %s does not exist.'), group_string)
+ self.logger.error(_('Warning: group %s does not exist.'), group_string)
continue
if not pkgs_used:
@@ -1368,17 +1964,55 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return 2, [P_('%d package to Install', '%d packages to Install', len(pkgs_used)) % len(pkgs_used)]
def removeGroups(self, grouplist):
- """Remove only packages of the named group(s). Do not recurse."""
+ """Mark the packages in the given groups for removal.
+ :param grouplist: a list of names or wildcards specifying
+ groups to be removed
+ :return: (exit_code, [ errors ])
+
+ exit_code is::
+
+ 0 = we're done, exit
+ 1 = we've errored, exit with error string
+ 2 = we've got work yet to do, onto the next stage
+ """
pkgs_used = []
for group_string in grouplist:
- try:
- txmbrs = self.groupRemove(group_string)
- except yum.Errors.GroupsError:
- self.logger.critical(_('No group named %s exists'), group_string)
- continue
- else:
- pkgs_used.extend(txmbrs)
+
+ grp_grp = True
+ pkg_grp = True
+ if group_string.startswith('@^'):
+ pkg_grp = False
+ group_string = group_string[2:]
+ elif group_string.startswith('@'):
+ grp_grp = False
+ group_string = group_string[1:]
+
+ groups = []
+ if grp_grp:
+ groups = self.comps.return_environments(group_string)
+ if not groups:
+ self.logger.critical(_('No environment named %s exists'), group_string)
+ for group in groups:
+ try:
+ txmbrs = self.environmentRemove(group.environmentid)
+ except yum.Errors.GroupsError:
+ continue
+ else:
+ pkgs_used.extend(txmbrs)
+
+ groups = []
+ if pkg_grp:
+ groups = self.comps.return_groups(group_string)
+ if not groups:
+ self.logger.critical(_('No group named %s exists'), group_string)
+ for group in groups:
+ try:
+ txmbrs = self.groupRemove(group.groupid)
+ except yum.Errors.GroupsError:
+ continue
+ else:
+ pkgs_used.extend(txmbrs)
if not pkgs_used:
return 0, [_('No packages to remove from groups')]
@@ -1389,7 +2023,7 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
def _promptWanted(self):
# shortcut for the always-off/always-on options
- if self.conf.assumeyes:
+ if (self.conf.assumeyes or self.conf.downloadonly) and not self.conf.assumeno:
return False
if self.conf.alwaysprompt:
return True
@@ -1397,10 +2031,9 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
# prompt if:
# package was added to fill a dependency
# package is being removed
- # package wasn't explictly given on the command line
+ # package wasn't explicitly given on the command line
for txmbr in self.tsInfo.getMembers():
if txmbr.isDep or \
- txmbr.ts_state == 'e' or \
txmbr.name not in self.extcmds:
return True
@@ -1408,11 +2041,11 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return False
def usage(self):
- ''' Print out command line usage '''
+ """Print out an explanation of command line usage."""
sys.stdout.write(self.optparser.format_help())
def shellUsage(self):
- ''' Print out the shell usage '''
+ """Print out an explanation of the shell usage."""
sys.stdout.write(self.optparser.get_usage())
def _installable(self, pkg, ematch=False):
@@ -1468,9 +2101,9 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return False
class YumOptionParser(OptionParser):
- '''Subclass that makes some minor tweaks to make OptionParser do things the
+ """Subclass that makes some minor tweaks to make OptionParser do things the
"yum way".
- '''
+ """
def __init__(self,base, **kwargs):
# check if this is called with a utils=True/False parameter
@@ -1488,13 +2121,23 @@ class YumOptionParser(OptionParser):
self._addYumBasicOptions()
def error(self, msg):
- '''This method is overridden so that error output goes to logger. '''
+ """Output an error message, and exit the program. This method
+ is overridden so that error output goes to the logger.
+
+ :param msg: the error message to output
+ """
self.print_usage()
self.logger.critical(_("Command line error: %s"), msg)
sys.exit(1)
def firstParse(self,args):
- # Parse only command line options that affect basic yum setup
+ """Parse only command line options that affect basic yum
+ setup.
+
+ :param args: a list of command line options to parse
+ :return: a dictionary containing the values of command line
+ options
+ """
try:
args = _filtercmdline(
('--noplugins','--version','-q', '-v', "--quiet", "--verbose"),
@@ -1521,7 +2164,15 @@ class YumOptionParser(OptionParser):
return ret
def setupYumConfig(self, args=None):
- # Now parse the command line for real
+ """Parse command line options.
+
+ :param args: the command line arguments entered by the user
+ :return: (opts, cmds) opts is a dictionary containing
+ the values of command line options. cmds is a list of the
+ command line arguments that were not parsed as options.
+ For example, if args is ["install", "foo", "--verbose"],
+ cmds will be ["install", "foo"].
+ """
if not args:
(opts, cmds) = self.parse_args()
else:
@@ -1533,16 +2184,30 @@ class YumOptionParser(OptionParser):
try:
# config file is parsed and moving us forward
# set some things in it.
+
+ if opts.tolerant or self.base.conf.tolerant: # Make it slower capt.
+ self.base.conf.recheck_installed_requires = True
# Handle remaining options
if opts.assumeyes:
- self.base.conf.assumeyes =1
-
- # Instead of going cache-only for a non-root user, try to use a
- # user writable cachedir. If that fails fall back to cache-only.
- if opts.cacheonly:
+ self.base.conf.assumeyes = 1
+ if opts.assumeno:
+ self.base.conf.assumeno = 1
+ self.base.conf.downloadonly = opts.dlonly
+ self.base.conf.downloaddir = opts.dldir
+
+ # Store all the updateinfo filters somewhere...
+ self.base.updateinfo_filters['security'] = opts.security
+ self.base.updateinfo_filters['bugfix'] = opts.bugfix
+ self.base.updateinfo_filters['advs'] = self._splitArg(opts.advs)
+ self.base.updateinfo_filters['bzs'] = self._splitArg(opts.bzs)
+ self.base.updateinfo_filters['cves'] = self._splitArg(opts.cves)
+ self.base.updateinfo_filters['sevs'] = self._splitArg(opts.sevs)
+
+ # Treat users like root as much as possible:
+ if not self.base.setCacheDir():
self.base.conf.cache = 1
- elif not self.base.setCacheDir():
+ if opts.cacheonly:
self.base.conf.cache = 1
if opts.obsoletes:
@@ -1574,11 +2239,8 @@ class YumOptionParser(OptionParser):
if opts.color != 'auto':
self.base.term.reinit(color=opts.color)
- if opts.disableexcludes:
- disable_excludes = self._splitArg(opts.disableexcludes)
- else:
- disable_excludes = []
- self.base.conf.disable_excludes = disable_excludes
+ self.base.conf.disable_excludes = self._splitArg(opts.disableexcludes)
+ self.base.conf.disable_includes = self._splitArg(opts.disableincludes)
for exclude in self._splitArg(opts.exclude):
try:
@@ -1610,10 +2272,6 @@ class YumOptionParser(OptionParser):
self.base.usage()
sys.exit(1)
- # make sure the added repos are setup.
- if len(opts.repos) > 0:
- self.base._getRepos(doSetup=True)
-
# Disable all gpg key checking, if requested.
if opts.nogpgcheck:
# Altering the normal configs. doesn't work too well, esp. with
@@ -1623,7 +2281,7 @@ class YumOptionParser(OptionParser):
repo._override_sigchecks = True
except ValueError, e:
- self.logger.critical(_('Options Error: %s'), e)
+ self.logger.critical(_('Options error: %s'), e)
self.base.usage()
sys.exit(1)
@@ -1640,10 +2298,18 @@ class YumOptionParser(OptionParser):
sys.exit(1)
def getRoot(self,opts):
+ """Return the root location to use for the yum operation.
+ This location can be changed by using the --installroot
+ option.
+
+ :param opts: a dictionary containing the values of the command
+ line options
+ :return: a string representing the root location
+ """
self._checkAbsInstallRoot(opts)
# If the conf file is inside the installroot - use that.
# otherwise look for it in the normal root
- if opts.installroot:
+ if opts.installroot and opts.installroot.lstrip('/'):
if os.access(opts.installroot+'/'+opts.conffile, os.R_OK):
opts.conffile = opts.installroot+'/'+opts.conffile
elif opts.conffile == '/etc/yum/yum.conf':
@@ -1701,6 +2367,9 @@ class YumOptionParser(OptionParser):
group.add_option("--showduplicates", dest="showdupesfromrepos",
action="store_true",
help=_("show duplicates, in repos, in list/search commands"))
+ group.add_option("--show-duplicates", dest="showdupesfromrepos",
+ action="store_true",
+ help=SUPPRESS_HELP)
group.add_option("-e", "--errorlevel", dest="errorlevel", default=None,
help=_("error output level"), type='int',
metavar='[error level]')
@@ -1713,6 +2382,10 @@ class YumOptionParser(OptionParser):
help=_("verbose operation"))
group.add_option("-y", "--assumeyes", dest="assumeyes",
action="store_true", help=_("answer yes for all questions"))
+ group.add_option("--assumeno", dest="assumeno",
+ action="store_true", help=_("answer no for all questions"))
+ group.add_option("--nodeps", dest="assumeno", # easter egg :)
+ action="store_true", help=SUPPRESS_HELP)
group.add_option("--version", action="store_true",
help=_("show Yum version and exit"))
group.add_option("--installroot", help=_("set install root"),
@@ -1730,6 +2403,9 @@ class YumOptionParser(OptionParser):
group.add_option("", "--disableexcludes", default=[], action="append",
help=_("disable exclude from main, for a repo or for everything"),
metavar='[repo]')
+ group.add_option("", "--disableincludes", default=[], action="append",
+ help=_("disable includepkgs for a repo or for everything"),
+ metavar='[repo]')
group.add_option("--obsoletes", action="store_true",
help=_("enable obsoletes processing during updates"))
group.add_option("--noplugins", action="store_true",
@@ -1748,9 +2424,29 @@ class YumOptionParser(OptionParser):
help=_("control whether color is used"))
group.add_option("", "--releasever", dest="releasever", default=None,
help=_("set value of $releasever in yum config and repo files"))
+ group.add_option("--downloadonly", dest="dlonly", action="store_true",
+ help=_("don't update, just download"))
+ group.add_option("--downloaddir", dest="dldir", default=None,
+ help=_("specifies an alternate directory to store packages"))
group.add_option("", "--setopt", dest="setopts", default=[],
action="append", help=_("set arbitrary config and repo options"))
+ # Updateinfo options...
+ group.add_option("--bugfix", action="store_true",
+ help=_("Include bugfix relevant packages, in updates"))
+ group.add_option("--security", action="store_true",
+ help=_("Include security relevant packages, in updates"))
+
+ group.add_option("--advisory", "--advisories", dest="advs", default=[],
+ action="append", help=_("Include packages needed to fix the given advisory, in updates"))
+ group.add_option("--bzs", default=[],
+ action="append", help=_("Include packages needed to fix the given BZ, in updates"))
+ group.add_option("--cves", default=[],
+ action="append", help=_("Include packages needed to fix the given CVE, in updates"))
+ group.add_option("--sec-severity", "--secseverity", default=[],
+ dest="sevs", action="append",
+ help=_("Include security relevant packages matching the severity, in updates"))
+
def _filtercmdline(novalopts, valopts, args):
'''Keep only specific options from the command line argument list
diff --git a/completion-helper.py b/completion-helper.py
new file mode 100755
index 0000000..c0e5a28
--- /dev/null
+++ b/completion-helper.py
@@ -0,0 +1,96 @@
+#!/usr/bin/python -t
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2011 Ville Skyttä
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+
+import shlex
+import sys
+
+import cli
+import yumcommands
+from yum.Errors import GroupsError, ConfigError, RepoError
+
+
+class GroupsCompletionCommand(yumcommands.GroupsCommand):
+ def doCommand(self, base, basecmd, extcmds):
+ cmd, extcmds = self._grp_cmd(basecmd, extcmds)
+ # case insensitivity is fine here because groupinstall etc are that too
+ installed, available = base.doGroupLists(
+ patterns=[get_pattern(extcmds)])
+ if extcmds[0] in ("installed", "all"):
+ for group in installed:
+ print group.ui_name
+ if extcmds[0] in ("available", "all"):
+ for group in available:
+ print group.ui_name
+
+class ListCompletionCommand(yumcommands.ListCommand):
+ def doCommand(self, base, basecmd, extcmds):
+ def printPkgs(pkgs):
+ for pkg in pkgs:
+ if base.allowedMultipleInstalls(pkg):
+ print pkg.nvra
+ else:
+ print pkg.na
+
+ ypl = base.doPackageLists(pkgnarrow=extcmds[0],
+ patterns=[get_pattern(extcmds)])
+ if extcmds[0] in ("installed", "all"):
+ printPkgs(ypl.installed)
+ if extcmds[0] in ("available", "all"):
+ printPkgs(ypl.available)
+
+class RepoListCompletionCommand(yumcommands.RepoListCommand):
+ def doCommand(self, base, basecmd, extcmds):
+ import fnmatch
+ pattern = get_pattern(extcmds)
+ for repo in base.repos.repos.values():
+ if fnmatch.fnmatch(repo.id, pattern) \
+ and (extcmds[0] == "all" or
+ (extcmds[0] == "enabled" and repo.isEnabled()) or
+ (extcmds[0] == "disabled" and not repo.isEnabled())):
+ print repo.id
+
+
+def get_pattern(extcmds):
+ if len(extcmds) > 1:
+ try: return shlex.split(extcmds[-1])[0] + "*"
+ except (ValueError, IndexError): pass
+ return "*"
+
+def main(args):
+ base = cli.YumBaseCli()
+ base.yum_cli_commands.clear()
+ base.registerCommand(GroupsCompletionCommand())
+ base.registerCommand(ListCompletionCommand())
+ base.registerCommand(RepoListCompletionCommand())
+ base.getOptionsConfig(args)
+ base.parseCommands()
+ try:
+ for repo in base.repos.listEnabled():
+ repo.skip_if_unavailable = True
+ base.doCommands()
+ except (GroupsError, ConfigError, RepoError), e:
+ # Any reason to not just catch YumBaseError ?
+ base.logger.error(e)
+
+if __name__ == "__main__":
+ try:
+ main(sys.argv[1:])
+ except KeyboardInterrupt, e:
+ sys.exit(1)
diff --git a/docs/Makefile b/docs/Makefile
index dc31d0e..8cc7f9f 100644
--- a/docs/Makefile
+++ b/docs/Makefile
@@ -13,3 +13,4 @@ install:
install -m 644 yum.conf.5 $(DESTDIR)/usr/share/man/man5/yum.conf.5
install -m 644 yum-updatesd.8 $(DESTDIR)/usr/share/man/man8/yum-updatesd.8
install -m 644 yum-updatesd.conf.5 $(DESTDIR)/usr/share/man/man5/yum-updatesd.conf.5
+ install -m 644 yum-cron.8 $(DESTDIR)/usr/share/man/man8
diff --git a/docs/sphinxdocs/Makefile b/docs/sphinxdocs/Makefile
new file mode 100644
index 0000000..623c22b
--- /dev/null
+++ b/docs/sphinxdocs/Makefile
@@ -0,0 +1,130 @@
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS =
+SPHINXBUILD = sphinx-build
+PAPER =
+BUILDDIR = _build
+
+# Internal variables.
+PAPEROPT_a4 = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+
+.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest
+
+help:
+ @echo "Please use \`make <target>' where <target> is one of"
+ @echo " html to make standalone HTML files"
+ @echo " dirhtml to make HTML files named index.html in directories"
+ @echo " singlehtml to make a single large HTML file"
+ @echo " pickle to make pickle files"
+ @echo " json to make JSON files"
+ @echo " htmlhelp to make HTML files and a HTML help project"
+ @echo " qthelp to make HTML files and a qthelp project"
+ @echo " devhelp to make HTML files and a Devhelp project"
+ @echo " epub to make an epub"
+ @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+ @echo " latexpdf to make LaTeX files and run them through pdflatex"
+ @echo " text to make text files"
+ @echo " man to make manual pages"
+ @echo " changes to make an overview of all changed/added/deprecated items"
+ @echo " linkcheck to check all external links for integrity"
+ @echo " doctest to run all doctests embedded in the documentation (if enabled)"
+
+clean:
+ -rm -rf $(BUILDDIR)/*
+
+html:
+ $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+ @echo
+ @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
+
+dirhtml:
+ $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+ @echo
+ @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
+singlehtml:
+ $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
+ @echo
+ @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
+
+pickle:
+ $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+ @echo
+ @echo "Build finished; now you can process the pickle files."
+
+json:
+ $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+ @echo
+ @echo "Build finished; now you can process the JSON files."
+
+htmlhelp:
+ $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+ @echo
+ @echo "Build finished; now you can run HTML Help Workshop with the" \
+ ".hhp project file in $(BUILDDIR)/htmlhelp."
+
+qthelp:
+ $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+ @echo
+ @echo "Build finished; now you can run "qcollectiongenerator" with the" \
+ ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
+ @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Yum.qhcp"
+ @echo "To view the help file:"
+ @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Yum.qhc"
+
+devhelp:
+ $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
+ @echo
+ @echo "Build finished."
+ @echo "To view the help file:"
+ @echo "# mkdir -p $$HOME/.local/share/devhelp/Yum"
+ @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Yum"
+ @echo "# devhelp"
+
+epub:
+ $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
+ @echo
+ @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
+
+latex:
+ $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+ @echo
+ @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+ @echo "Run \`make' in that directory to run these through (pdf)latex" \
+ "(use \`make latexpdf' here to do that automatically)."
+
+latexpdf:
+ $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+ @echo "Running LaTeX files through pdflatex..."
+ make -C $(BUILDDIR)/latex all-pdf
+ @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+text:
+ $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
+ @echo
+ @echo "Build finished. The text files are in $(BUILDDIR)/text."
+
+man:
+ $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
+ @echo
+ @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
+
+changes:
+ $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+ @echo
+ @echo "The overview file is in $(BUILDDIR)/changes."
+
+linkcheck:
+ $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+ @echo
+ @echo "Link check complete; look for any errors in the above output " \
+ "or in $(BUILDDIR)/linkcheck/output.txt."
+
+doctest:
+ $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+ @echo "Testing of doctests in the sources finished, look at the " \
+ "results in $(BUILDDIR)/doctest/output.txt."
diff --git a/docs/sphinxdocs/conf.py b/docs/sphinxdocs/conf.py
new file mode 100644
index 0000000..867d323
--- /dev/null
+++ b/docs/sphinxdocs/conf.py
@@ -0,0 +1,228 @@
+# -*- coding: utf-8 -*-
+#
+# Yum documentation build configuration file, created by
+# sphinx-quickstart on Mon Jun 27 14:01:20 2011.
+#
+# This file is execfile()d with the current directory set to its containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys, os
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+# sys.path.insert(0, os.path.abspath('.'))
+
+# -- General configuration -----------------------------------------------------
+
+#Tell sphinx where to look for all the files
+sys.path.insert(0, os.path.normpath(os.path.join(os.getcwd(), "../../test")))
+sys.path.insert(0, os.path.normpath(os.path.join(os.getcwd(), "../../po")))
+sys.path.insert(0, os.path.normpath(os.path.join(os.getcwd(), "../../bin")))
+sys.path.insert(0, os.path.normpath(os.path.join(os.getcwd(), "../..")))
+
+#Generate all the rst files
+sys.path.insert(1, os.getcwd())
+import rstgenerator
+rstgenerator.generateAll(sys.path[0], os.getcwd())
+import yum
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#needs_sphinx = '1.0'
+
+# Add any Sphinx extension module names here, as strings. They can be extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+extensions = ['sphinx.ext.autodoc']
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The encoding of source files.
+#source_encoding = 'utf-8-sig'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = u'Yum'
+copyright = None
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+# version =
+# The full version, including alpha/beta/rc tags.
+release = yum.__version__
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+exclude_patterns = ['_build']
+
+# The reST default role (used for this markup: `text`) to use for all documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+#modindex_common_prefix = []
+
+
+# -- Options for HTML output ---------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages. See the documentation for
+# a list of builtin themes.
+html_theme = 'default'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further. For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+#html_theme_path = []
+
+# The name for this set of Sphinx documents. If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar. Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_domain_indices = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
+#html_show_sphinx = True
+
+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
+html_show_copyright = False
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it. The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# This is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = None
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'Yumdoc'
+
+
+# -- Options for LaTeX output --------------------------------------------------
+
+# The paper size ('letter' or 'a4').
+#latex_paper_size = 'letter'
+
+# The font size ('10pt', '11pt' or '12pt').
+#latex_font_size = '10pt'
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title, author, documentclass [howto/manual]).
+latex_documents = [
+ ('index', 'Yum.tex', u'Yum Documentation',
+ u'', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# If true, show page references after internal links.
+#latex_show_pagerefs = False
+
+# If true, show URL addresses after external links.
+#latex_show_urls = False
+
+# Additional stuff for the LaTeX preamble.
+#latex_preamble = ''
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_domain_indices = True
+
+
+# -- Options for manual page output --------------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+ ('index', 'yum', u'Yum Documentation',
+ [u''], 1)
+]
diff --git a/docs/sphinxdocs/rstgenerator.py b/docs/sphinxdocs/rstgenerator.py
new file mode 100755
index 0000000..ad24788
--- /dev/null
+++ b/docs/sphinxdocs/rstgenerator.py
@@ -0,0 +1,222 @@
+#! /usr/bin/python
+
+import sys, re, os
+
+def generateFile(input_directory, file_name, output_directory,
+ package_heirarchy=None, module_name=None):
+ """Generate a rst file telling sphinx to just generate documentation
+ for the public interface automatically. Output will be written to
+ *file_name*.rst in the current directory.
+
+ :param input_directory: a string specifying the directory containing the
+ source code file
+ :param file_name: the name of the python source code file to generate
+ a sphinx rst file describing
+ :param ouput_directory: a string specifying the directory where
+ the generated rst file should be placed. If *output_directory* does
+ not already exist, it will be created
+ :param package_heirarchy: a list of strings, where each name is
+ the name of a package, in the order of the hierarchy
+ :param module_name: the name of the module. If not given, the .py is
+ removed from *file_name* to produce the module_name
+ """
+ #Stick all output into a list of strings, then just join it and output
+ #it all in on go.
+ output = []
+
+ # Create the output directory if it doesn't already exist. Note that
+ # if the directory is created between the check and the creation, it
+ # might cause issues, but I don't think this likely at all to happen
+ if not os.path.exists(output_directory):
+ try:
+ os.makedirs(output_directory)
+ except OSError as e:
+ print "Error creating the output directory"
+ print e.args
+
+ try:
+ #Open the file
+ f = open(os.path.join(input_directory, file_name), 'r')
+
+ #Do the module output
+ if not module_name:
+ module_name = re.search('(\w+).py$', file_name).group(1)
+
+ #Append the package names, if there are any
+ full_module_name = module_name
+ if package_heirarchy:
+ full_module_name = '.'.join(package_heirarchy) + '.' + module_name
+
+ output.append(full_module_name)
+ output.append('=' * len(full_module_name))
+ output.append('.. automodule:: %s\n' % full_module_name)
+
+ #Read the file, and do output for classes
+ class_reg = re.compile('^class (\w+)')
+ func_reg = re.compile('^def ((?:[a-zA-Z0-9]+_)*[a-zA-Z0-9]+)')
+
+ #We don't need a blank line between autofunction directives, but we do
+ #need one between autofunctions and headings etc. for classes. This
+ #keeps track if we're switching from autofunctions to classes, so we
+ #can add that blank line.
+ finding_functions = False
+
+ for line in iter(f):
+ #Search for classes
+ match = class_reg.match(line)
+ if match is not None:
+ if finding_functions:
+ output.append('')
+ finding_functions = False
+ class_name = match.group(1)
+ output.append(class_name)
+ output.append('-' * len(class_name))
+ output.append('''.. autoclass:: %s
+ :members:
+ :show-inheritance:
+
+ ''' % class_name)
+
+
+ #Search for top level functions
+ else:
+ match = func_reg.match(line)
+ if match is not None:
+ func_name = match.group(1)
+ output.append('.. autofunction:: ' + func_name)
+ finding_functions = True
+ f.close()
+
+ except IOError as e:
+ print "Error opening the input file : ", os.path.join(input_directory, file_name)
+ print e.args[1]
+
+ else:
+ #Write the output
+ try:
+ output_file_name = os.path.join(output_directory, module_name) + '.rst'
+ f = open(output_file_name, 'w')
+ f.write('\n'.join(output))
+
+
+ except IOError as e:
+ print "Error opening the output file : ", output_file_name
+ print e.args[1]
+
+
+def generateIndex(module_list, output_directory):
+ """Create an index.rst file for sphinx in the given directory.
+
+ :param module_list: a list of the names of the modules to list in
+ the index file
+ :param output_directory: the directory to create the index file in
+ """
+
+ #Sort the module_list
+ module_list.sort()
+
+ try:
+ #open the file
+ f = open(os.path.join(output_directory, 'index.rst'), 'w')
+
+ #Do the output
+ f.write(""".. Yum documentation master file, created by
+ sphinx-quickstart on Mon Jun 27 14:01:20 2011.
+ You can adapt this file completely to your liking, but it should at least
+ contain the root `toctree` directive.
+
+Welcome to Yum's documentation!
+===============================
+
+Contents:
+
+.. toctree::
+ :maxdepth: 2
+
+ """)
+ f.write('\n '.join(module_list))
+ f.write("""
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
+""")
+
+ except IOError as e:
+ print "Error opening the output file."
+ print e.args[1]
+
+
+def generateAll(source_directory, output_directory):
+ #Verify that both the source and output directories exist
+
+
+ # Keep a set of file names that are packages. This is
+ # useful so that later we will be able to figure out full
+ # module names.
+ packages = set()
+
+ # Keep a list of tuples containing python module names and
+ # relative paths, so that we can build the index file later
+ modules = []
+
+ # Walk the directory tree
+ for dirpath, dirnames, filenames in os.walk(source_directory, topdown=True):
+
+ # print dirpath
+ # print dirnames
+ # print filenames
+ # print
+
+ # Add the curent directory to packages if __init__.py exists
+ if '__init__.py' in filenames:
+ packages.add(dirpath)
+
+ # Find the hierarchy of packages that we are currently in
+ package_heirarchy = []
+ #Recurse up to the root
+ dirpath_i = dirpath
+ while dirpath_i != '/':
+ if dirpath_i in packages:
+ dirpath_i, tail = os.path.split(dirpath_i)
+ package_heirarchy.insert(0, tail)
+ else:
+ break
+
+ # Find the relative output directory, mirroring the input
+ # directory structure
+ relative_output_directory = ''
+ if not os.path.samefile(dirpath, source_directory):
+ relative_output_directory = os.path.relpath(dirpath, source_directory)
+
+ # Don't recurse into directories that are hidden, or for docs
+ for directory in dirnames:
+ if directory == "docs" or directory.startswith("."):
+ dirnames.remove(directory)
+
+ # Generate the rst for a file if it is a python source code file
+ for file_name in filenames:
+ # Skip file names that contain dashes, since they're not
+ # valid module names, so we won't be able to import them
+ # to generate the documentation anyway
+ if '-' in file_name:
+ continue
+
+ if file_name.endswith('.py'):
+ module_name = file_name.partition('.')[0]
+ modules.append(os.path.join(relative_output_directory,
+ module_name))
+ generateFile(dirpath, file_name,
+ os.path.join(output_directory, relative_output_directory),
+ package_heirarchy, module_name)
+
+
+
+ # Create the index.rst file
+ generateIndex(modules, output_directory)
+
+if __name__ == "__main__":
+ generateAll(os.getcwd(), os.getcwd())
diff --git a/docs/yum-cron.8 b/docs/yum-cron.8
new file mode 100644
index 0000000..2af059d
--- /dev/null
+++ b/docs/yum-cron.8
@@ -0,0 +1,50 @@
+.\" yum-cron - cron interface for yum
+.TH "yum-cron" "8" "" "Nick Jacek" ""
+.SH "NAME"
+yum-cron \- an interface to convieniently call yum from cron
+
+.SH "SYNOPSIS"
+\fByum-cron\fP [config-file]
+
+.SH "DESCRIPTION"
+.PP
+\fByum-cron\fP is an alternate interface to yum that is optimised to
+be convenient to call from cron. It provides methods to keep
+repository metadata up to date, and to check for, download, and apply
+updates. Rather than accepting many different command line arguments,
+the different functions of yum-cron can be accessed through config
+files.
+.PP
+\fIconfig-file\fP is used to optionally specify the path to the
+configuration file to use. If it is not given, the default
+configuration file will be used. It is useful to be able to specify
+different configuration files for different use cases. For example,
+one configuration file might be set to update the repository metadata,
+and a line could be added to the crontab to run yum-cron frequently
+using this file. Then, another configuration file might be set to
+install updates, and yum-cron could be run from cron using this file
+just once each day.
+
+.SH "FILES"
+.nf
+/etc/yum/yum-cron.conf
+/etc/yum/yum-cron-hourly.conf
+.fi
+
+.PP
+.SH "SEE ALSO"
+.nf
+.I yum (8)
+.fi
+
+.PP
+.SH "AUTHORS"
+.nf
+See the Authors file included with this program.
+.fi
+
+.PP
+.SH "BUGS"
+There of course aren't any bugs, but if you find any, you should email
+ the mailing list, yum@lists.baseurl.org, or consult bugzilla.
+.fi
diff --git a/docs/yum.8 b/docs/yum.8
index 1a8202a..e42bf49 100644
--- a/docs/yum.8
+++ b/docs/yum.8
@@ -25,6 +25,8 @@ gnome\-packagekit application\&.
.br
.I \fR * update-to [package1] [package2] [\&.\&.\&.]
.br
+.I \fR * minimal-update [package1] [package2] [\&.\&.\&.]
+.br
.I \fR * check\-update
.br
.I \fR * upgrade [package1] [package2] [\&.\&.\&.]
@@ -35,6 +37,8 @@ gnome\-packagekit application\&.
.br
.I \fR * remove | erase package1 [package2] [\&.\&.\&.]
.br
+.I \fR * autoremove [package1] [\&.\&.\&.]
+.br
.I \fR * list [\&.\&.\&.]
.br
.I \fR * info [\&.\&.\&.]
@@ -43,7 +47,7 @@ gnome\-packagekit application\&.
.br
.I \fR * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
.br
-.I \fR * makecache
+.I \fR * makecache [fast]
.br
.I \fR * groups [\&.\&.\&.]
.br
@@ -52,6 +56,7 @@ gnome\-packagekit application\&.
.I \fR * shell [filename]
.br
.I \fR * resolvedep dep1 [dep2] [\&.\&.\&.]
+ (maintained for legacy reasons only - use repoquery or yum provides)
.br
.I \fR * localinstall rpmfile1 [rpmfile2] [\&.\&.\&.]
(maintained for legacy reasons only - use install)
@@ -67,9 +72,19 @@ gnome\-packagekit application\&.
.br
.I \fR * repolist [all|enabled|disabled]
.br
+.I \fR * repoinfo [all|enabled|disabled]
+.br
+.I \fR * repository-packages <enabled-repoid> <install|remove|remove-or-reinstall|remove-or-distribution-synchronization> [package2] [\&.\&.\&.]
+.br
.I \fR * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
.br
-.I \fR * history [info|list|packages-list|summary|addon-info|redo|undo|rollback|new]
+.I \fR * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
+.br
+.I \fR * load-transaction [txfile]
+.br
+.I \fR * updateinfo [summary | list | info | remove-pkgs-ts | exclude-updates | exclude-all | check-running-kernel]
+.br
+.I \fR * fssnapshot [summary | list | have-space | create | delete]
.br
.I \fR * check
.br
@@ -86,14 +101,20 @@ Is used to install the latest version of a package or
group of packages while ensuring that all dependencies are
satisfied\&. (See \fBSpecifying package names\fP for more information)
If no package matches the given package name(s), they are assumed to be a shell
-glob and any matches are then installed\&. If the name starts with an
-@ character the rest of the name is used as though passed to the groupinstall
-command\&. If the name starts with a - character, then a search is done within
+glob and any matches are then installed\&. If the name starts with @^ then it
+is treated as an environment group (group install @^foo), an @ character and
+it's treated as a group (plain group install)\&. If the name starts with
+a - character, then a search is done within
the transaction and any matches are removed. If the name is a file, then install works
like localinstall\&. If the name doesn't match a package, then package
-"provides" are searched (Eg. "_sqlitecache.so()(64bit)") as are
+"provides" are searched (e.g. "_sqlitecache.so()(64bit)") as are
filelists (Eg. "/usr/bin/yum"). Also note that for filelists, wildcards will
match multiple packages\&.
+
+Because install does a lot of work to make it as easy as possible to use, there
+are also a few specific install commands "\fBinstall-n\fP", "\fBinstall-na\fP"
+and "\fBinstall-nevra\fP". These only work on package names, and do not process
+wildcards etc.
.IP
.IP "\fBupdate\fP"
If run without any packages, update will update every currently
@@ -111,7 +132,7 @@ changes, for example: upgrading from somelinux 8.0 to somelinux 9.
Note that "\fBupdate\fP" works on installed packages first, and only if there
are no matches does it look for available packages. The difference is most
-noticable when you do "\fBupdate\fP foo-1-2" which will act exactly as
+noticeable when you do "\fBupdate\fP foo-1-2" which will act exactly as
"\fBupdate\fP foo" if foo-1-2 is installed. You can use the "\fBupdate-to\fP"
if you'd prefer that nothing happen in the above case.
.IP
@@ -119,6 +140,11 @@ if you'd prefer that nothing happen in the above case.
This command works like "\fBupdate\fP" but always specifies the version of the
package we want to update to.
.IP
+.IP "\fBupdate-minimal\fP"
+This works like the update command, but if you have the package foo-1
+installed and have foo-2 (bugfix) and foo-3 (enhancement) available with
+updateinfo.xml then update-minimal --bugfix will update you to foo-2.
+.IP
.IP "\fBcheck\-update\fP"
Implemented so you could know if your machine had any updates that needed to
be applied without running it interactively. Returns exit value of 100 if
@@ -158,7 +184,30 @@ the "install" command\&.(See \fBSpecifying package names\fP for more information
Note that "yum" is included in the protected_packages configuration, by default.
So you can't accidentally remove yum itself.
+
+The remove_leaf_only configuration changes the behaviour of this command
+to only remove packages which aren't required by something else.
+
+The clean_requirements_on_remove configuration changes the behaviour of this
+command to also remove packages that are only dependencies of this package.
+
+Because remove does a lot of work to make it as easy as possible to use, there
+are also a few specific remove commands "\fBremove-n\fP", "\fBremove-na\fP"
+and "\fBremove-nevra\fP". These only work on package names, and do not process
+wildcards etc.
.IP
+.IP "\fBautoremove\fP"
+.IP
+With one or more arguments this command works like running the "\fBremove\fP"
+command with the clean_requirements_on_remove turned on. However you can also
+specify no arguments, at which point it tries to remove any packages that
+weren't installed explicitly by the user and which aren't required by
+anything (so called leaf packages).
+
+Because autoremove does a lot of work to make it as easy as possible to use,
+there are also a few specific autoremove commands "\fBautoremove-n\fP",
+"\fBautoremove-na\fP" and "\fBautoremove-nevra\fP". These only work on package
+names, and do not process wildcards etc.
.IP "\fBlist\fP"
Is used to list various information about available
packages; more complete details are available in the \fIList Options\fP
@@ -191,7 +240,8 @@ the \fIClean Options\fP section below\&.
.IP
.IP "\fBmakecache\fP"
Is used to download and make usable all the metadata for the currently enabled
-\fByum\fP repos.
+\fByum\fP repos. If the argument "fast" is passed, then we just try to make
+sure the repos. are current (much like "yum clean expire-cache").
.IP
.IP "\fBgroups\fP"
A command, new in 3.4.2, that collects all the subcommands that act on groups together.
@@ -209,10 +259,12 @@ installed.
"\fBgroup list\fP" is used to list the available groups from all \fByum\fP repos. Groups are marked
as "installed" if all mandatory packages are installed, or if a group doesn't
have any mandatory packages then it is installed if any of the optional or
-default package are installed.
-The optional "hidden" argument will also list groups marked as not being
-"user visible". If you pass the \-v option, to enable verbose mode, then the
-groupids are displayed.
+default package are installed (when not in group_command=objects mode).
+You can pass optional arguments to the list/summary commands: installed,
+available, environment, language, packages, hidden and ids (or any of those
+prefixed by "no" to turn them off again).
+If you pass the \-v option, to enable verbose mode, then the groupids are
+displayed by default (but "yum group list ids" is often easier to read).
"\fBgroup remove\fP" is used to remove all of the packages in a group, unlike "groupinstall" this
will remove everything regardless of group_package_types. It is worth pointing
@@ -224,23 +276,65 @@ to only remove packages which aren't required by something else.
"\fBgroup info\fP" is used to give the description and package list of a group (and which type
those packages are marked as). Note that you can use the yum-filter-data and
-yum-list-data plugins to get/use the data the other way around (Ie. what
+yum-list-data plugins to get/use the data the other way around (i.e. what
groups own packages need updating). If you pass the \-v option, to enable verbose
mode, then the package names are matched against installed/available packages
similar to the list command.
+
+When using group_command=objects, the info command will display markers next
+to each package saying how that package relates to the group object. The
+meaning of these markers is:
+
+.br
+"-" = Package isn't installed, and won't be installed as part of the group (Eg. group install foo -pkgA … this will have pkgA marked as '-')
+.br
+"+" = Package isn't installed, but will be the next time you run "yum upgrade" or "yum group upgrade foo"
+.br
+" " = Package is installed, but wasn't installed via the group (so "group remove foo" won't remove it).
+.br
+"=" = Package is installed, and was installed via the group.
+
+"\fBgroup summary\fP" is used to give a quick summary of how many groups
+are installed and available.
+
+"\fBgroup mark\fP" and "\fBgroup unmark\fP" are used when groups are configured
+in group_command=objects mode. These commands then allow you to alter yum's idea
+of which groups are installed, and the packages that belong to them.
+
+"\fBgroup mark install\fP" mark the group as installed. When
+installed "\fByum upgrade\fP" and "\fByum group upgrade\fP" will install new
+packages for the group (only those packages already installed will be marked as
+members of the installed group to start with).
+
+"\fBgroup mark remove\fP" the opposite of mark install.
+
+"\fBgroup mark packages\fP" takes a group id (which must be installed) and marks
+any given installed packages (which aren't members of a group) as members of
+the group. Note that the data from the repositories does not need to specify
+the packages as a member of the group.
+
+"\fBgroup mark packages-force\fP" works like mark packages, but doesn't care if
+the packages are already members of another group.
+
+"\fBgroup mark convert\fP" converts the automatic data you get without using
+groups as objects into groups as objects data. This makes it much easier to
+convert to groups as objects without having to reinstall.
+
+"\fBgroup unmark packages\fP" remove a package as a member from any groups.
.IP
.IP "\fBshell\fP"
Is used to enter the 'yum shell', when a filename is specified the contents of
-that file is executed in yum shell mode. See \fIyum-shell(8)\fP for more info
+that file is executed in yum shell mode. See \fIyum-shell(8)\fP for more info.
.IP
.IP "\fBresolvedep\fP"
Is used to list packages providing the specified dependencies, at most one
-package is listed per dependency.
+package is listed per dependency. This command is maintained for legacy
+reasons only, use repoquery instead.
.IP
.IP "\fBlocalinstall\fP"
Is used to install a set of local rpm files. If required the enabled
repositories will be used to resolve dependencies. Note that the install command
-will do a local install, if given a filename. This option is maintained for legacy
+will do a local install, if given a filename. This command is maintained for legacy
reasons only.
.IP
.IP "\fBlocalupdate\fP"
@@ -248,7 +342,7 @@ Is used to update the system by specifying local rpm files. Only the specified
rpm files of which an older version is already installed will be installed,
the remaining specified packages will be ignored.
If required the enabled repositories will be used to resolve dependencies. Note
-that the update command will do a local update, if given a filename. This option is maintained for
+that the update command will do a local update, if given a filename. This command is maintained for
legacy reasons only.
.IP
.IP "\fBreinstall\fP"
@@ -260,10 +354,28 @@ on groups, files, provides and filelists just like the "install" command\&.
Will try and downgrade a package from the version currently installed to the
previously highest version (or the specified version).
The depsolver will not necessarily work, but if you specify all the packages it
-should work (and thus. all the simple cases will work). Also this does not
+should work (thus, all the simple cases will work). Also this does not
work for "installonly" packages, like Kernels. downgrade operates
on groups, files, provides, filelists and rpm files just like the "install" command\&.
.IP
+.IP "\fBswap\fP"
+At it's simplest this is just a simpler way to remove one set of package(s) and
+install another set of package(s) without having to use the "shell" command.
+However you can specify different commands to call than just remove or install,
+and you can list multiple packages (it splits using the "--" marker).
+Note that option parsing will remove the first "--" in an argument list on the
+command line.
+
+
+Examples:
+
+.nf
+swap foo bar
+swap -- remove foo -- install bar
+swap foo group install bar-grp
+swap -- group remove foo-grp -- group install bar-grp
+.fi
+.IP
.IP "\fBdeplist\fP"
Produces a list of all dependencies and what packages provide those
dependencies for the given packages. As of 3.2.30 it now just shows the latest
@@ -271,18 +383,19 @@ version of each package that matches (this can be changed by
using --showduplicates) and it only shows the newest providers (which can be
changed by using --verbose).
.IP
-.IP "\fBrepolist\fP"
+.IP "\fBrepolist\fP" "\fBrepoinfo\fP"
Produces a list of configured repositories. The default is to list all
-enabled repositories. If you pass \-v, for verbose mode, more information is
-listed. If the first argument is 'enabled', 'disabled' or 'all' then the command
-will list those types of repos.
+enabled repositories. If you pass \-v, for verbose mode, or use repoinfo then
+more information is listed. If the first argument is 'enabled', 'disabled' or
+'all' then the command will list those types of repos.
You can pass repo id or name arguments, or wildcards which to match against
both of those. However if the id or name matches exactly then the repo will
be listed even if you are listing enabled repos. and it is disabled.
In non-verbose mode the first column will start with a '*' if the repo. has
-metalink data and the latest metadata is not local. For non-verbose mode the
+metalink data and the latest metadata is not local and will start with a
+'!' if the repo. has metadata that is expired. For non-verbose mode the
last column will also display the number of packages in the repo. and (if there
are any user specified excludes) the number of packages excluded.
@@ -291,11 +404,63 @@ then yum will ignore any repo errors and output the information it can get
(Eg. "yum clean all; yum -C repolist" will output something, although the
package counts/etc. will be zeroed out).
.IP
+.IP "\fBrepoinfo\fP"
+.IP
+This command works exactly like repolist -v.
+.IP
+.IP "\fBrepository\-packages\fP"
+Treat a repo. as a collection of packages (like "yum groups") allowing the user
+to install or remove them as a single entity.
+
+"repository\-packages <repo> list" - Works like the "yum list" command, but
+only shows packages from the given repository.
+
+"repository\-packages <repo> info" - Works like the "yum info" command, but
+only shows packages from the given repository.
+
+"repository\-packages <repo> install" - Install all of the packages in the
+repository, basically the same as: yum install $(repoquery --repoid=<repo> -a).
+Specific packages/wildcards can be specified.
+
+"repository\-packages <repo> upgrade" - Update all of the packages in the
+repository, basically the same as: yum upgrade $(repoquery --repoid=<repo> -a).
+Specific packages/wildcards can be specified.
+
+"repository\-packages <repo> upgrade-to" - Update all of the packages in the
+repository, basically the same as: yum upgrade $(repoquery --repoid=<repo> -a).
+Without arguments it works the same as upgrade, with arguments it just
+interprets them as the versions you want to move to.
+
+"repository\-packages <repo> reinstall-old" - ReInstall all of the packages
+that are installed from the repository and available in the
+repository, similar to: yum reinstall $(yumdb search-quiet from_repo <repo>).
+
+"repository\-packages <repo> move-to" - ReInstall all of the packages
+that are available in the repository, basically the same as:
+yum reinstall $(repoquery --repoid=<repo> -a).
+
+"repository\-packages <repo> reinstall" - Tries to do reinstall-old, but if that
+produces no packages then tries move-to.
+
+"repo\-pkgs <repo> remove" - Remove all of the packages in the repository, very
+similar to: yum remove $(repoquery --repoid=<repo> -a). However the
+repopkgsremove_leaf_only option is obeyed.
+
+"repo\-pkgs <repo> remove-or-reinstall" - Works like remove for any package
+that doesn't have the exact same version in another repository. For any package
+that does have the exact NEVRA in another repository then that version will be
+reinstalled.
+
+"repo\-pkgs <repo> remove-or-distro-sync" - Works like remove for any package
+that doesn't exist in another repository. For any package that does exist
+it tries to work as if distro-sync was called (with the repo. disabled).
+
+.IP
.IP "\fBversion\fP"
Produces a "version" of the rpmdb, and of the enabled repositories if "all" is
given as the first argument. You can also specify version groups in the
-version-groups config. file. If you pass \-v, for verbose mode, more
-information is listed. The version is calculated by taking a sha1 hash of the
+version-groups configuration file. If you pass \-v, for verbose mode, more
+information is listed. The version is calculated by taking an SHA1 hash of the
packages (in sorted order), and the checksum_type/checksum_data entries from
the yumdb. Note that this rpmdb version is now also used significantly within
yum (esp. in yum history).
@@ -321,26 +486,33 @@ and so takes sub-commands:
.IP "\fBhistory\fP"
The history command allows the user to view what has happened in past
transactions (assuming the history_record config. option is set). You can use
-info/list/packages-list/summary to view what happened, undo/redo/rollback to act
-on that information and new to start a new history file.
+info/list/packages-list/packages-info/summary to view what happened,
+undo/redo/rollback to act on that information and new to start a new history
+file.
The info/list/summary commands take either a transaction id or a package (with
wildcards, as in \fBSpecifying package names\fP), all three can also be passed
no arguments. list can be passed the keyword "all" to list all the transactions.
-The packages-list command takes a package (with wildcards, as in
-\fBSpecifying package names\fP).
+The packages-list/packages-info commands takes a package (with wildcards, as in
+\fBSpecifying package names\fP). And show data from the point of view of that
+package.
The undo/redo/rollback commands take either a single transaction id or the
keyword last and an offset from the last transaction (Eg. if you've done 250
transactions, "last" refers to transaction 250, and "last-4" refers to
transaction 246).
+The redo command can also take some optional arguments before you specify the
+transaction. "force-reinstall" tells it reinstall any packages that were
+installed in that transaction (via install, upgrade or downgrade).
+"force-remove" tells it to forcibly remove any packages that were updated or
+downgraded.
The undo/redo commands act on the specified transaction, undo'ing or repeating
the work of that transaction. While the rollback command will undo all
-transactions upto the point of the specified transaction. For example, if you
+transactions up to the point of the specified transaction. For example, if you
have 3 transactions, where package A; B and C where installed respectively.
-Then "undo 1" will try to remove pacakge A, "redo 1" will try to install package
+Then "undo 1" will try to remove package A, "redo 1" will try to install package
A (if it is not still installed), and "rollback 1" will try to remove packages
B and C. Note that after a "rollback 1" you will have a fourth transaction,
although the ending rpmdb version (see: yum version) should be the same in
@@ -349,13 +521,20 @@ transactions 1 and 4.
The addon-info command takes a transaction ID, and the packages-list command
takes a package (with wildcards).
-In "history list" you can change the behaviour of the 2nd column via. the
+The stats command shows some statistics about the current history DB.
+
+The sync commands allows you to change the rpmdb/yumdb data stored for any
+installed packages, to whatever is in the current rpmdb/yumdb (this is mostly
+useful when this data was not stored when the package went into the history DB).
+
+In "history list" you can change the behaviour of the 2nd column via the
configuration option history_list_view.
In "history list" output the Altered column also gives some extra information
if there was something not good with the transaction (this is also shown at the
end of the package column in the packages-list command).
+.br
.I \fB>\fR - The rpmdb was changed, outside yum, after the transaction.
.br
.I \fB<\fR - The rpmdb was changed, outside yum, before the transaction.
@@ -371,11 +550,156 @@ end of the package column in the packages-list command).
.I \fBs\fR - The transaction completed fine, but --skip-broken was enabled and had to skip some packages.
.br
+
+.IP
+.IP "\fBload-transaction\fP"
+This command will re-load a saved yum transaction file, this allows you to
+run a transaction on one machine and then use it on another.
+The two common ways to get a saved yum transaction file are from
+"yum -q history addon-info last saved_tx" or via the automatic saves in
+$TMPDIR/yum_save_tx.* when a transaction is solved but not run.
+
+Running the command without an argument, or a directory as an argument will
+try and list the possible files available to load. Showing if the packages are
+still available, if the rpmdb matches the current rpmdb, how many transaction
+install/removes members are in the saved transaction and what the filename is.
+
+.IP
+.IP "\fBupdateinfo\fP"
+This command has a bunch of sub-commands to act on the updateinfo in the
+repositories. The simplest commands are:
+
+.br
+.I \fR yum updateinfo info [all | available | installed | updates]
+.br
+.I \fR yum updateinfo list [all | available | installed | updates]
+.br
+.I \fR yum updateinfo [summary] [all | available | installed | updates]
+.br
+
+which all display information about the available update information relevant
+to your machine (including anything installed, if you supply "all").
+.br
+
+.br
+.I \fR "\fB* all\fP"
+Is used to display information about both install and available advisories.
+.br
+.I \fR "\fB* available\fP"
+Is used to display information about just available advisories. This is the
+default.
+.br
+.I \fR "\fB* installed\fP"
+Is used to display information about just install advisories.
+.br
+.I \fR "\fB* updates\fP"
+This is mostly the same as "available" but it only shows advisory information
+for packages that can be updated to.
+
+
+.br
+They all take as arguments:
+
+.br
+.br
+.I \fR "\fB* <advisory> [advisory...]\fP"
+Is used to display information about one or more advisories.
+
+.br
+.I \fR "\fB* <package> [package...]\fP"
+Is used to display information about one or more packages.
+
+.br
+.I \fR "\fB* bugzillas / bzs\fP"
+Is the subset of the updateinfo information, pertaining to the bugzillas.
+
+.br
+.I \fR "\fB* cves\fP"
+Is the subset of the updateinfo information, pertaining to the CVEs.
+
+.br
+.I \fR "\fB* enhancement\fP"
+Is the subset of the updateinfo information, pertaining to enhancements.
+
+.br
+.I \fR "\fB* bugfix\fP"
+Is the subset of the updateinfo information, pertaining to bugfixes.
+
+.br
+.I \fR "\fB* security / sec\fP"
+Is the subset of the updateinfo information, pertaining to security.
+
+.br
+.I \fR "\fB* severity / sev\fP"
+Include security relevant packages of this severity.
+
+.br
+.I \fR "\fB* recommended\fP"
+Is the subset of the updateinfo information, pertaining to recommended updates.
+
+.br
+.I \fR "\fB* new-packages\fP"
+Is the subset of the updateinfo information, pertaining to new packages. These
+are packages which weren't available at the initial release of your
+distribution.
+.br
+
+There are also three sub-commands to remove packages when using "yum shell",
+they are:
+
+.br
+.I \fR yum updateinfo remove-pkgs-ts
+
+.br
+.I \fR yum updateinfo exclude-updates
+
+.br
+.I \fR yum updateinfo exclude-all
+.br
+
+they all take the following arguments:
+
+.br
+.I \fR* [bzs=foo] [advisories=foo] [cves=foo] [security-severity=foo] [security] [bugfix]
+.br
+
+and finally there is a command to manually check the running kernel against
+updateinfo data:
+
+.br
+.I \fR yum updateinfo check-running-kernel
+.br
+
+.IP
+.IP "\fBfssnapshot\fP"
+This command has a few sub-commands to act on the LVM data of the host, to list
+snapshots and the create and remove them. The simplest commands, to display
+information about the configured LVM snapshotable devices, are:
+
+.br
+.I \fR yum fssnapshot [summary]
+.br
+.I \fR yum fssnapshot list
+.br
+.I \fR yum fssnapshot have-space
+.br
+
+then you can create and delete snapshots using:
+
+.br
+.I \fR yum fssnap create
+.br
+.I \fR yum fssnap delete <device(s)>
+.br
+
+.br
+Configuration Options: \fBfssnap_automatic_pre\fP, \fBfssnap_automatic_post\fP, \fBfssnap_automatic_keep\fP, \fBfssnap_percentage\fP, \fBfssnap_devices\fP
+
.IP
.IP "\fBcheck\fP"
Checks the local rpmdb and produces information on any problems it finds. You
-can pass the check command the arguments "dependencies" or "duplicates", to
-limit the checking that is performed (the default is "all" which does both).
+can pass the check command the arguments "dependencies", "duplicates", "obsoletes" or "provides",
+to limit the checking that is performed (the default is "all" which does all).
The info command can also take ranges of transaction ids, of the form
start..end, which will then display a merged history as if all the
@@ -401,6 +725,11 @@ Assume yes; assume that the answer to any question which would be asked
is yes\&.
.br
Configuration Option: \fBassumeyes\fP
+.IP "\fB\-\-assumeno\fP"
+Assume no; assume that the answer to any question which would be asked
+is no\&. This option overrides assumeyes, but is still subject to alwaysprompt.
+.br
+Configuration Option: \fBassumeno\fP
.IP "\fB\-c, \-\-config=[config file]\fP"
Specifies the config file location - can take HTTP and FTP URLs and local file
paths\&.
@@ -420,7 +749,7 @@ Sets the error level to [number] Practical range 0 \- 10. 0 means print only cri
.br
Configuration Option: \fBerrorlevel\fP
.IP "\fB\-\-rpmverbosity=[name]\fP"
-Sets the debug level to [name] for rpm scriplets. 'info' is the default, other
+Sets the debug level to [name] for rpm scriptlets. 'info' is the default, other
options are: 'critical', 'emergency', 'error', 'warn' and 'debug'.
.br
Configuration Option: \fBrpmverbosity\fP
@@ -428,9 +757,7 @@ Configuration Option: \fBrpmverbosity\fP
Sets the maximum amount of time yum will wait before performing a command \- it randomizes over the time.
.IP "\fB\-C, \-\-cacheonly\fP"
Tells yum to run entirely from system cache - does not download or
-update any headers unless it has to to perform the requested action. If you're
-using this as a user yum will not use the tempcache for the user but will only
-use the system cache in the system cachedir.
+update any headers unless it has to to perform the requested action.
.IP "\fB\-\-version\fP"
Reports the \fByum\fP version number and installed package versions for
everything in history_record_packages (can be added to by plugins).
@@ -461,8 +788,13 @@ processing logic. For more information see the \fBupdate\fP command above.
.br
Configuration Option: \fBobsoletes\fP
.IP "\fB\-x, \-\-exclude=package\fP"
-Exclude a specific package by name or glob from updates on all repositories.
-Configuration Option: \fBexclude\fP
+Exclude a specific package by name or glob from all repositories, so yum works
+as if that package was never in the repositories.
+This is commonly used so a package isn't upgraded or installed accidentally, but
+can be used to remove packages in any way that "yum list" will show packages.
+
+Can be disabled using --disableexcludes.
+Configuration Option: \fBexclude\fP, \fBincludepkgs\fP
.br
.IP "\fB\-\-color=[always|auto|never]\fP"
Display colorized output automatically, depending on the output terminal,
@@ -479,6 +811,13 @@ main == disable excludes defined in [main] in yum.conf
.br
repoid == disable excludes defined for that repo
.br
+.IP "\fB\-\-disableincludes=[all|repoid]\fP"
+Disable the includes defined in your config files. Takes one of two options:
+.br
+all == disable all includes
+.br
+repoid == disable includes defined for that repo
+.br
.IP "\fB\-\-disableplugin=plugin\fP"
Run with one or more plugins disabled, the argument is a comma separated list
of wildcards to match against plugin names.
@@ -506,7 +845,14 @@ option will corrupt your cache (and you can use $releasever in your cachedir
configuration to stop this).
.PP
.IP "\fB\-t, \-\-tolerant\fP"
-This option currently does nothing.
+This option makes yum go slower, checking for things that shouldn't be possible
+making it more tolerant of external errors.
+.br
+.IP "\fB\-\-downloadonly\fP"
+Don't update, just download.
+.br
+.IP "\fB\-\-downloaddir=directory\fP"
+Specifies an alternate directory to store packages.
.br
.IP "\fB\-\-setopt=option=value\fP"
Set any config option in yum config or repo files. For options in the global
@@ -523,7 +869,7 @@ version of the package\&.
The format of the output of yum list is:
-name.arch [epoch:]version-release repo or \@installed-from-repo
+name.arch [epoch:]version-release repo or @installed-from-repo
.IP "\fByum list [all | glob_exp1] [glob_exp2] [\&.\&.\&.]\fP"
List all available and installed packages\&.
@@ -542,6 +888,10 @@ shell\-style glob and any matches are printed\&.
List the packages installed on the system that are not available in any yum
repository listed in the config file.
.IP
+.IP "\fByum list distro-extras [glob_exp1] [\&.\&.\&.]\fP"
+List the packages installed on the system that are not available, by name,
+in any yum repository listed in the config file.
+.IP
.IP "\fByum list obsoletes [glob_exp1] [\&.\&.\&.]\fP"
List the packages installed on the system that are obsoleted by packages
in any yum repository listed in the config file.
@@ -658,7 +1008,7 @@ configuration options.
.I yum-complete-transaction (1)
.I yumdownloader (1)
.I yum-utils (1)
-.I yum-security (8)
+.I yum-langpacks (1)
http://yum.baseurl.org/
http://yum.baseurl.org/wiki/Faq
yum search yum
diff --git a/docs/yum.conf.5 b/docs/yum.conf.5
index 515aa73..5d8578d 100644
--- a/docs/yum.conf.5
+++ b/docs/yum.conf.5
@@ -64,7 +64,7 @@ options are: 'critical', 'emergency', 'error', 'warn' and 'debug'.
.IP
\fBprotected_packages\fR
This is a list of packages that yum should never completely remove. They are
-protected via. Obsoletes as well as user/plugin removals.
+protected via Obsoletes as well as user/plugin removals.
The default is: yum glob:/etc/yum/protected.d/*.conf
So any packages which should be protected can do so by including a file in
@@ -114,32 +114,49 @@ are causing problems from the transaction.
Either `1' or `0'. Determines whether or not yum prompts for confirmation of
critical actions. Default is `0' (do prompt).
.br
-Command-line option: \fB\-y\fP
+Command-line option: \fB\-y\fP \fB\--assumeyes\fP
+
+.IP
+\fBassumeno\fR
+Either `1' or `0'. If yum would prompt for confirmation of critical actions,
+assume the user chose no. This is basically the same as doing "echo | yum ..."
+but is a bit more usable. This option overrides \fBassumeyes\fP, but is still
+subject to \fBalwaysprompt\fP.
+Default is `0' (do prompt).
+.br
+Command-line option: \fB\--assumeno\fP
.IP
\fBalwaysprompt\fR
Either `1' or `0'. Without this option, yum will not prompt for confirmation
when the list of packages to be installed exactly matches those given on the
-command line. Unless \fBassumeyes\fR is enabled, it will still prompt for
-package removal, or when additional packages need to be installed to fulfill
-dependencies. Default is `1'.
+command line. Unless \fBassumeyes\fR is enabled, it will still prompt when
+additional packages need to be installed to fulfill dependencies. Note that
+older versions of yum would also always prompt for package removal, and that is
+no longer true.
+Default is `1'.
.br
.IP
\fBtolerant\fR
-Either `1' or `0'. If enabled, then yum will be tolerant of errors on the
-command line with regard to packages. For example: if you request to install
-foo, bar and baz and baz is installed; yum won't error out complaining that baz
-is already installed. Default to `0' (not tolerant).
+Either `1' or `0'. If enabled, yum will go slower, checking for things that
+shouldn't be possible making it more tolerant of external errors.
+Default to `0' (not tolerant).
.br
Command-line option: \fB\-t\fP
.IP
\fBexclude\fR
-List of packages to exclude from updates or installs. This should be a space
+List of packages to exclude from all repositories, so yum works
+as if that package was never in the repositories.. This should be a space
separated list.
+This is commonly used so a package isn't upgraded or installed accidentally, but
+can be used to remove packages in any way that "yum list" will show packages.
Shell globs using wildcards (eg. * and ?) are allowed.
+Can be disabled using --disableexcludes.
+Command-line option: \fB\-x\fP
+
.IP
\fBexactarch\fR
Either `1' or `0'. Set to `1' to make yum update only update the architectures
@@ -161,7 +178,7 @@ will also apply to kernel-debug-devel, etc.
Number of packages listed in installonlypkgs to keep installed at the same
time. Setting to 0 disables this feature. Default is '0'. Note that this
functionality used to be in the "installonlyn" plugin, where this option was
-altered via. tokeep.
+altered via tokeep.
Note that as of version 3.2.24, yum will now look in the yumdb for a installonly
attribute on installed packages. If that attribute is "keep", then they will
never be removed.
@@ -188,12 +205,32 @@ Default is `true'.
Command-line option: \fB\-\-obsoletes\fP
.IP
+\fBremove_leaf_only \fR
+Either `0' or `1'. Used to determine yum's behaviour when a package is removed.
+If \fBremove_leaf_only\fR is `0' (default) then
+packages, and their deps, will be removed. If \fBremove_leaf_only\fR is
+`1' then only those packages that aren't required by another
+package will be removed.
+
+.IP
+\fBrepopkgsremove_leaf_only \fR
+Either `0' or `1'. Used to determine yum's behaviour when the repo-pkg remove
+command is run. If \fBrepopkgremove_leaf_only\fR is `0' (default) then
+all packages in the repo. will be removed. If \fBrepopkgremove_leaf_only\fR is
+`1' then only those packages in the repo. that aren't required by another
+package will be removed.
+Note that this option does not override remove_leaf_only, so enabling that
+option means this has almost no affect.
+
+.IP
\fBoverwrite_groups \fR
Either `0' or `1'. Used to determine yum's behaviour if two or more
repositories offer the package groups with the same name. If
\fBoverwrite_groups\fR is `1' then the group packages of the last matching
repository will be used. If \fBoverwrite_groups\fR is `0' then the groups
from all matching repositories will be merged together as one large group.
+Note that this option does not override remove_leaf_only, so enabling that
+option means this has almost no affect.
.IP
\fBgroupremove_leaf_only \fR
@@ -215,6 +252,30 @@ of packages in groups will be installed when 'groupinstall' is called.
Default is: default, mandatory
.IP
+\fBgroup_command\fR
+List of the following: simple, compat, objects. Tells yum what to do for
+group install/upgrade/remove commands.
+
+Simple acts like you did yum group cmd $(repoquery --group --list group), so
+it is vrery easy to reason about what will happen. Alas. this is often not what
+people want to happen.
+
+Compat. works much like simple, except that when you run "group upgrade" it
+actually runs "group install" (this means that you get any new packages added
+to the group, but you also get packages added that were there before and you
+didn't want).
+
+Objects makes groups act like a real object, separate from the packages they
+contain. Yum keeps track of the groups you have installed, so "group upgrade"
+will install new packages for the group but not install old ones. It also knows
+about group members that are installed but weren't installed as part of the
+group, and won't remove those on "group remove".
+Running "yum upgrade" will also run "yum group upgrade" (thus. adding new
+packages for all groups).
+
+Default is: compat
+
+.IP
\fBinstallroot \fR
Specifies an alternative installroot, relative to which all packages will be
installed.
@@ -223,14 +284,21 @@ Command-line option: \fB\-\-installroot\fP
.IP
\fBdistroverpkg\fR
-The package used by yum to determine the "version" of the distribution. This
-can be any installed package. Default is `redhat-release'. You can see what
-provides this manually by using: "yum whatprovides redhat-release".
+The package used by yum to determine the "version" of the distribution, this
+sets $releasever for use in config. files. This
+can be any installed package. Default is `system-release(releasever)',
+`redhat-release'. Yum will now look at the version provided by the provide,
+and if that is non-empty then will use the full V(-R), otherwise it uses the
+version of the package.
+ You can see what provides this manually by using:
+"yum whatprovides 'system-release(releasever)' redhat-release" and you can see
+what $releasever is most easily by using: "yum version".
.IP
\fBdiskspacecheck\fR
Either `0' or `1'. Set this to `0' to disable the checking for sufficient
-diskspace before a RPM transaction is run. Default is `1' (perform the check).
+diskspace and inodes before a RPM transaction is run. Default is `1'
+(perform the check).
.IP
\fBtsflags\fR
@@ -291,6 +359,16 @@ the maximum available bandwidth.
Set to `0' to disable bandwidth throttling. This is the default.
+Note that when multiple downloads run simultaneously the total bandwidth might
+exceed the throttle limit. You may want to also set max_connections=1 or scale
+your throttle option down accordingly.
+
+.IP
+\fBminrate \fR
+This sets the low speed threshold in bytes per second. If the server
+is sending data slower than this for at least `timeout' seconds, Yum
+aborts the connection. The default is `1000'.
+
.IP
\fBbandwidth \fR
Use to specify the maximum available network bandwidth in bytes/second. Used
@@ -300,6 +378,41 @@ with the \fBthrottle\fR option (above). If \fBthrottle\fR is a percentage and
ignored. Default is `0' (no bandwidth throttling).
.IP
+\fBip_resolve \fR
+Determines how yum resolves host names.
+
+`4' or `IPv4': resolve to IPv4 addresses only.
+
+`6' or `IPv6': resolve to IPv6 addresses only.
+
+.IP
+\fBmax_connections \fR
+
+The maximum number of simultaneous connections. This overrides the urlgrabber
+default of 5 connections. Note that there are also implicit per-mirror limits
+and the downloader honors these too.
+
+.IP
+\fBdeltarpm\fR
+
+When non-zero, delta-RPM files are used if available. The value specifies
+the maximum number of "applydeltarpm" processes Yum will spawn, if the value
+is negative then yum works out how many cores you have and multiplies that
+by the value (cores=2, deltarpm=-2; 4 processes). (2 by default).
+
+Note that the "applydeltarpm" process uses a significant amount of disk IO,
+so running too many instances can significantly slow down all disk IO including
+the downloads that yum is doing (thus. a too high value can make everything
+slower).
+
+.IP
+\fBdeltarpm_percentage\fR
+When the relative size of delta vs pkg is larger than this, delta is not used.
+Default value is 75 (Deltas must be at least 25% smaller than the pkg).
+Use `0' to turn off delta rpm processing. Local repositories (with file://
+baseurl) have delta rpms turned off by default.
+
+.IP
\fBsslcacert \fR
Path to the directory containing the databases of the certificate authorities
yum should use to verify SSL certificates. Defaults to none - uses system
@@ -331,6 +444,15 @@ Path to the SSL client key yum should use to connect to repos/remote sites
Defaults to none.
.IP
+\fBssl_check_cert_permissions \fR
+Boolean - Whether yum should check the permissions on the paths for the
+certificates on the repository (both remote and local). If we can't read any of
+the files then yum will force skip_if_unavailable to be true.
+This is most useful for non-root processes which use yum on repos. that have
+client cert files which are readable only by root.
+Defaults to True.
+
+.IP
\fBhistory_record \fR
Boolean - should yum record history entries for transactions. This takes some
disk space, and some extra time in the transactions. But it allows how to know a
@@ -391,7 +513,9 @@ syslog logging is disabled. Default is `/dev/log'.
.IP
\fBproxy \fR
-URL to the proxy server that yum should use.
+URL to the proxy server that yum should use. Set this to `libproxy'
+to enable proxy auto configuration via libproxy. Defaults to direct
+connection.
.IP
\fBproxy_username \fR
@@ -438,6 +562,31 @@ It's also possible to use the word "never", meaning that the metadata will
never expire. Note that when using a metalink file the metalink must always
be newer than the metadata for the repository, due to the validation, so this
timeout also applies to the metalink file.
+Also note that "never" does not override "yum clean expire-cache"
+
+.IP
+\fBmetadata_expire_filter \fR
+Filter the metadata_expire time, allowing a trade of speed for accuracy if
+a command doesn't require it. Each yum command can specify that it requires a
+certain level of timeliness quality from the remote repos. from "I'm about to
+install/upgrade, so this better be current" to "Anything that's available
+is good enough".
+
+`never' - Nothing is filtered, always obey metadata_expire.
+
+`read-only:past' - Commands that only care about past information
+are filtered from metadata expiring.
+Eg. yum history info (if history needs to lookup anything about a previous
+transaction, then by definition the remote package was available in the past).
+
+`read-only:present' - Commands that are balanced between past and future.
+This is the default.
+Eg. yum list yum
+
+`read-only:future' - Commands that are likely to result in running other
+commands which will require the latest metadata. Eg. yum check-update
+
+Note that this option does not override "yum clean expire-cache".
.IP
\fBmirrorlist_expire \fR
@@ -462,12 +611,12 @@ always did, however it now does some checking on the index and reverts if
it classifies it as bad.
`group:primary' - Download the primary metadata with the index. This contains
-most of the package information and so is almost always required anyway. This
-is the default.
+most of the package information and so is almost always required anyway.
-`group:small' - With the primary also download the updateinfo metadata, this is
-required for yum-security operations and it also used in the graphical clients.
-This file also tends to be significantly smaller than most others.
+`group:small' - With the primary also download the updateinfo metadata, groups,
+and pkgtags. This is required for yum-security operations and it also used in
+the graphical clients. This file also tends to be significantly smaller than
+most others. This is the default.
`group:main' - With the primary and updateinfo download the filelists metadata
and the group metadata. The filelists data is required for operations like
@@ -480,6 +629,19 @@ not listed above is the other metadata, which contains the changelog information
which is used by yum-changelog. This is what "yum makecache" uses.
.IP
+\fBmddownloadpolicy \fR
+You can select which kinds of repodata you would prefer yum to download:
+
+`sqlite' - Download the .sqlite files, if available. This is currently slightly
+faster, once they are downloaded. However these files tend to be bigger, and
+thus. take longer to download.
+
+`xml' - Download the .XML files, which yum will do anyway as a fallback on
+the other options. These files tend to be smaller, but they require
+parsing/converting locally after download and some aditional checks are
+performed on them each time they are used.
+
+.IP
\fBmultilib_policy \fR
Can be set to 'all' or 'best'. All means install all possible arches for any package you
want to install. Therefore yum install foo will install foo.i386 and foo.x86_64 on x86_64,
@@ -523,6 +685,13 @@ Default is `normal'.
See color_list_installed_older for possible values.
.IP
+\fBcolor_list_installed_running_kernel \fR
+The colorization/highlighting for kernel packages in list/info installed which
+is the same version as the running kernel.
+Default is `bold,underline.
+See color_list_installed_older for possible values.
+
+.IP
\fBcolor_list_installed_extra \fR
The colorization/highlighting for packages in list/info installed which has
no available package with the same name and arch.
@@ -558,6 +727,13 @@ Default is `bold,underline,green.
See color_list_installed_older for possible values.
.IP
+\fBcolor_list_available_running_kernel \fR
+The colorization/highlighting for kernel packages in list/info available which
+is the same version as the running kernel.
+Default is `bold,underline.
+See color_list_installed_older for possible values.
+
+.IP
\fBcolor_search_match \fR
The colorization/highlighting for text matches in search.
Default is `bold'.
@@ -587,14 +763,98 @@ be downloaded. The updates list is what is printed when you run "yum update",
Default is `normal'.
See color_list_installed_older for possible values.
+.IP
+\fBui_repoid_vars \fR
+When a repository id is displayed, append these yum variables to the string
+if they are used in the baseurl/etc. Variables are appended in the order
+listed (and found).
+Default is 'releasever basearch'.
.IP
\fBclean_requirements_on_remove \fR
When removing packages (by removal, update or obsoletion) go through each
package's dependencies. If any of them are no longer required by any other
package then also mark them to be removed.
+Boolean (1, 0, True, False, yes, no) Defaults to False
+
+.IP
+\fBupgrade_requirements_on_install \fR
+When installing/reinstalling/upgrading packages go through each package's
+installed dependencies and check for an update.
Boolean (1, 0, True, False, yes,no) Defaults to False
+.IP
+\fBrecheck_installed_requires \fR
+When upgrading a package do we recheck any requirements that existed in the old
+package. Turning this on shouldn't do anything but slow yum depsolving down,
+however using rpm --nodeps etc. can break the rpmdb and then this will help.
+Boolean (1, 0, True, False, yes,no) Defaults to False
+
+.IP
+\fBreset_nice \fR
+If set to true then yum will try to reset the nice value to zero, before
+running an rpm transaction. Defaults to True.
+
+\fBexit_on_lock\fR
+Should the yum client exit immediately when something else has the lock.
+Boolean (1, 0, True, False, yes, no) Defaults to False
+
+.IP
+\fBloadts_ignoremissing\fR
+Should the load-ts command ignore packages that are missing. This includes
+packages in the TS to be removed, which aren't installed, and packages in the
+TS to be added, which aren't available.
+If this is set to true, and an rpm is missing then loadts_ignorenewrpm is
+automatically set to true.
+Boolean (1, 0, True, False, yes, no) Defaults to False
+
+.IP
+\fBloadts_ignorerpm\fR
+Should the load-ts command ignore the rpmdb version (yum version nogroups) or
+abort if there is a mismatch between the TS file and the current machine.
+If this is set to true, then loadts_ignorenewrpm is automatically set to true.
+Boolean (1, 0, True, False, yes, no) Defaults to False
+
+.IP
+\fBloadts_ignorenewrpm\fR
+Should the load-ts command ignore the future rpmdb version or
+abort if there is a mismatch between the TS file and what will happen on the
+current machine.
+Note that if loadts_ignorerpm is True, this option does nothing.
+Boolean (1, 0, True, False, yes, no) Defaults to False
+
+.IP
+\fBfssnap_automatic_pre\fR
+Should yum try to automatically create a snapshot before it runs a transaction.
+Boolean (1, 0, True, False, yes, no) Defaults to False
+
+.IP
+\fBfssnap_automatic_post\fR
+Should yum try to automatically create a snapshot after it runs a transaction.
+Boolean (1, 0, True, False, yes, no) Defaults to False
+
+.IP
+\fBfssnap_automatic_keep\fR
+How many old snapshots should yum keep when trying to automatically create a
+new snapshot. Setting to 0 disables this feature. Default is '0'.
+
+.IP
+\fBfssnap_automatic_percentage\fR
+The size of new snaphosts, expressed as a percentage of the old origin device.
+Any number between 1 and 100. Default is '100'.
+
+.IP
+\fBfssnap_automatic_devices\fR
+The origin LVM devices to use for snapshots. Wildcards and negation are allowed,
+first match (positive or negative) wins.
+Default is: !*/swap !*/lv_swap glob:/etc/yum/fssnap.d/*.conf
+
+.IP
+\fBdepsolve_loop_limit\fR
+Set the number of times any attempt to depsolve before we just give up. This
+shouldn't be needed as yum should always solve or fail, however it has been
+observed that it can loop forever with very large system upgrades. Setting
+this to `0' (or "forever") makes yum try forever. Default is `100'.
.SH "[repository] OPTIONS"
@@ -668,6 +928,10 @@ value of mirrorlist is copied to metalink (if metalink is not set).
Either `1' or `0'. This tells yum whether or not use this repository.
.IP
+\fBkeepcache\fR
+Overrides the \fBkeepcache\fR option from the [main] section for this repository.
+
+.IP
\fBgpgcheck\fR
Either `1' or `0'. This tells yum whether or not it should perform a GPG
signature check on the packages gotten from this repository.
@@ -702,12 +966,18 @@ key will be automatically imported without user confirmation.
Same as the [main] \fBexclude\fR option but only for this repository.
Substitution variables, described below, are honored here.
+Can be disabled using --disableexcludes.
+
.IP
\fBincludepkgs\fR
-Inverse of exclude. This is a list of packages you want to use from a
-repository. If this option lists only one package then that is all yum will
-ever see from the repository. Defaults to an empty list. Substitution
-variables, described below, are honored here.
+Inverse of exclude, yum will exclude any package in the repo. that doesn't
+match this list. This works in conjunction with exclude and doesn't override it,
+so if you exclude=*.i386 and includepkgs=python* then only packages starting
+with python that do not have an i386 arch. will be seen by yum in this repo.
+
+Substitution variables, described below, are honored here.
+
+Can be disabled using --disableexcludes.
.IP
\fBenablegroups\fR
@@ -755,6 +1025,15 @@ repository.
Overrides the \fBbandwidth\fR option from the [main] section for this
repository.
+.IP
+\fBip_resolve \fR
+Overrides the \fBip_resolve\fR option from the [main] section for this
+repository.
+
+.IP
+\fBdeltarpm_percentage\fR
+Overrides the \fBdeltarpm_percentage\fR option from the [main] section
+for this repository.
.IP
\fBsslcacert \fR
@@ -776,6 +1055,10 @@ repository.
Overrides the \fBsslclientkey\fR option from the [main] section for this
repository.
+.IP
+\fBssl_check_cert_permissions \fR
+Overrides the \fBssl_check_cert_permissions\fR option from the [main] section
+for this repository.
.IP
\fBmetadata_expire \fR
@@ -783,6 +1066,11 @@ Overrides the \fBmetadata_expire\fR option from the [main] section for this
repository.
.IP
+\fBmetadata_expire_filter \fR
+Overrides the \fBmetadata_expire_filter\fR option from the [main] section for
+this repository.
+
+.IP
\fBmirrorlist_expire \fR
Overrides the \fBmirrorlist_expire\fR option from the [main] section for this
repository.
@@ -824,7 +1112,16 @@ as greater/less than any other. defaults to 1000
If set to True yum will continue running if this repository cannot be
contacted for any reason. This should be set carefully as all repos are consulted
for any given command. Defaults to False.
+
.IP
+\fBasync \fR
+If set to True Yum will download packages and metadata from this repo in
+parallel, if possible. Defaults to True.
+
+.IP
+\fBui_repoid_vars \fR
+Overrides the \fBui_repoid_vars\fR option from the [main] section for this
+repository.
.SH "URL INCLUDE SYNTAX"
.LP
@@ -861,8 +1158,8 @@ package.
.IP
\fB$arch\fR
-This will be replaced with your architecture as listed by os.uname()[4] in
-Python.
+This will be replaced with the architecture or your system
+as detected by yum.
.IP
\fB$basearch\fR
diff --git a/etc/0yum.cron b/etc/0yum.cron
deleted file mode 100755
index 0cfaa4b..0000000
--- a/etc/0yum.cron
+++ /dev/null
@@ -1,141 +0,0 @@
-#!/bin/bash
-
-# Only run if this flag file is set (by /etc/rc.d/init.d/yum-cron)
-if [ ! -f /var/lock/subsys/yum-cron ]; then
- exit 0
-fi
-
-DAILYSCRIPT=/etc/yum/yum-daily.yum
-WEEKLYSCRIPT=/etc/yum/yum-weekly.yum
-LOCKDIR=/var/lock/yum-cron.lock
-LOCKFILE=$LOCKDIR/pidfile
-TSLOCK=$LOCKDIR/ts.lock
-
-# Grab config settings
-if [ -f /etc/sysconfig/yum-cron ]; then
- source /etc/sysconfig/yum-cron
-fi
-# set default for SYSTEMNAME
-[ -z "$SYSTEMNAME" ] && SYSTEMNAME=$(hostname)
-
-# Only run on certain days of the week
-dow=`date +%w`
-DAYS_OF_WEEK=${DAYS_OF_WEEK:-0123456}
-if [ "${DAYS_OF_WEEK/$dow/}" == "${DAYS_OF_WEEK}" ]; then
- exit 0
-fi
-
-# if DOWNLOAD_ONLY is set then we force CHECK_ONLY too.
-# Gotta check before one can download!
-if [ "$DOWNLOAD_ONLY" == "yes" ]; then
- CHECK_ONLY=yes
-fi
-
-YUMTMP=$(mktemp /var/run/yum-cron.XXXXXX)
-touch $YUMTMP
-[ -x /sbin/restorecon ] && /sbin/restorecon $YUMTMP
-
-# Random wait function
-random_wait() {
- sleep $(( $RANDOM % ($RANDOMWAIT * 60) + 1 ))
-}
-
-# Note - the lockfile code doesn't try and use YUMTMP to email messages nicely.
-# Too many ways to die, this gets handled by normal cron error mailing.
-# Try mkdir for the lockfile, will test for and make it in one atomic action
-if mkdir $LOCKDIR 2>/dev/null; then
- # store the current process ID in there so we can check for staleness later
- echo "$$" >"${LOCKFILE}"
- # and clean up locks and tempfile if the script exits or is killed
- trap "{ rm -f $LOCKFILE $TSLOCK; rmdir $LOCKDIR 2>/dev/null; rm -f $YUMTMP; exit 255; }" INT TERM EXIT
-else
- # lock failed, check if process exists. First, if there's no PID file
- # in the lock directory, something bad has happened, we can't know the
- # process name, so clean up the old lockdir and restart
- if [ ! -f $LOCKFILE ]; then
- rmdir $LOCKDIR 2>/dev/null
- echo "yum-cron: no lock PID, clearing and restarting myself" >&2
- exec $0 "$@"
- fi
- OTHERPID="$(cat "${LOCKFILE}")"
- # if cat wasn't able to read the file anymore, another instance probably is
- # about to remove the lock -- exit, we're *still* locked
- if [ $? != 0 ]; then
- echo "yum-cron: lock failed, PID ${OTHERPID} is active" >&2
- exit 0
- fi
- if ! kill -0 $OTHERPID &>/dev/null; then
- # lock is stale, remove it and restart
- echo "yum-cron: removing stale lock of nonexistant PID ${OTHERPID}" >&2
- rm -rf "${LOCKDIR}"
- echo "yum-cron: restarting myself" >&2
- exec $0 "$@"
- else
- # Remove stale (more than a day old) lockfiles
- find $LOCKDIR -type f -name 'pidfile' -amin +1440 -exec rm -rf $LOCKDIR \;
- # if it's still there, it wasn't too old, bail
- if [ -f $LOCKFILE ]; then
- # lock is valid and OTHERPID is active - exit, we're locked!
- echo "yum-cron: lock failed, PID ${OTHERPID} is active" >&2
- exit 0
- else
- # lock was invalid, restart
- echo "yum-cron: removing stale lock belonging to stale PID ${OTHERPID}" >&2
- echo "yum-cron: restarting myself" >&2
- exec $0 "$@"
- fi
- fi
-fi
-
-# Then check for updates and/or do them, as configured
-{
- # First, if this is CLEANDAY, do so
- CLEANDAY=${CLEANDAY:-0}
- if [ ! "${CLEANDAY/$dow/}" == "${CLEANDAY}" ]; then
- /usr/bin/yum $YUM_PARAMETER -e ${ERROR_LEVEL:-0} -d ${DEBUG_LEVEL:-0} -y shell $WEEKLYSCRIPT
- fi
-
- # Now continue to do the real work
- if [ "$CHECK_ONLY" == "yes" ]; then
- random_wait
- touch $TSLOCK
- /usr/bin/yum $YUM_PARAMETER -e 0 -d 0 -y check-update 1> /dev/null 2>&1
- case $? in
- 1) exit 1;;
- 100) echo "New updates available for host `/bin/hostname`";
- /usr/bin/yum $YUM_PARAMETER -e ${ERROR_LEVEL:-0} -d ${DEBUG_LEVEL:-0} -y -C check-update
- if [ "$DOWNLOAD_ONLY" == "yes" ]; then
- /usr/bin/yum $YUM_PARAMETER -e ${ERROR_LEVEL:-0} -d ${DEBUG_LEVEL:-0} -y --downloadonly update
- echo "Updates downloaded, use \"yum -C update\" manually to install them."
- fi
- ;;
- esac
- elif [ "$CHECK_FIRST" == "yes" ]; then
- # Don't run if we can't access the repos
- random_wait
- touch $TSLOCK
- /usr/bin/yum $YUM_PARAMETER -e 0 -d 0 check-update 2>&-
- case $? in
- 1) exit 1;;
- 100) /usr/bin/yum $YUM_PARAMETER -e ${ERROR_LEVEL:-0} -d ${DEBUG_LEVEL:-0} -y update yum
- /usr/bin/yum $YUM_PARAMETER -e ${ERROR_LEVEL:-0} -d ${DEBUG_LEVEL:-0} -y shell $DAILYSCRIPT
- ;;
- esac
- else
- random_wait
- touch $TSLOCK
- /usr/bin/yum $YUM_PARAMETER -e ${ERROR_LEVEL:-0} -d ${DEBUG_LEVEL:-0} -y update yum
- /usr/bin/yum $YUM_PARAMETER -e ${ERROR_LEVEL:-0} -d ${DEBUG_LEVEL:-0} -y shell $DAILYSCRIPT
- fi
-} >> $YUMTMP 2>&1
-
-if [ ! -z "$MAILTO" ] && [ -x /bin/mail ]; then
-# if MAILTO is set, use mail command (ie better than standard mail with cron output)
- [ -s "$YUMTMP" ] && mail -s "System update: $SYSTEMNAME" $MAILTO < $YUMTMP
-else
-# default behavior is to use cron's internal mailing of output from cron-script
- cat $YUMTMP
-fi
-rm -f $YUMTMP
-
-exit 0
diff --git a/etc/Makefile b/etc/Makefile
index 29a7f95..49f1d81 100644
--- a/etc/Makefile
+++ b/etc/Makefile
@@ -1,4 +1,6 @@
YUMETC=$(DESTDIR)/etc/yum
+compdir = $(shell pkg-config --variable=completionsdir bash-completion)
+compdir := $(or $(compdir), "/etc/bash_completion.d")
all:
echo "Nothing to do"
@@ -8,6 +10,7 @@ clean:
install:
mkdir -p $(DESTDIR)/etc/yum/
+ mkdir -p $(DESTDIR)/etc/yum/fssnap.d
mkdir -p $(DESTDIR)/etc/yum/protected.d
mkdir -p $(DESTDIR)/etc/yum/repos.d
mkdir -p $(DESTDIR)/etc/yum/vars
@@ -24,15 +27,9 @@ install:
mkdir -p $(DESTDIR)/etc/dbus-1/system.d/
install -m 755 yum-updatesd-dbus.conf $(DESTDIR)/etc/dbus-1/system.d/yum-updatesd.conf
-
- install -m 755 yum-updatesd.conf $(DESTDIR)/etc/yum/yum-updatesd.conf
-
- mkdir -p $(DESTDIR)/etc/bash_completion.d
- install -m 644 yum.bash $(DESTDIR)/etc/bash_completion.d
- mkdir -p $(DESTDIR)/etc/cron.daily
- mkdir -p $(DESTDIR)/etc/sysconfig/
- install -D -m 755 0yum.cron $(DESTDIR)/etc/cron.daily/0yum.cron
- install -D -m 755 yum-cron $(DESTDIR)/etc/rc.d/init.d/yum-cron
- install -D -m 644 yum-daily.yum $(YUMETC)/yum-daily.yum
- install -D -m 644 yum-weekly.yum $(YUMETC)/yum-weekly.yum
- install -D -m 644 yum-cron.sysconf $(DESTDIR)/etc/sysconfig/yum-cron
+ install -m 644 yum-updatesd.conf $(YUMETC)
+ mkdir -p $(DESTDIR)/$(compdir)
+ install -m 644 yum.bash $(DESTDIR)/$(compdir)/yum
+ ln -s yum $(DESTDIR)/$(compdir)/yummain.py
+ install -m 644 yum-cron.conf $(YUMETC)
+ install -m 644 yum-cron-hourly.conf $(YUMETC)
diff --git a/etc/yum-cron b/etc/yum-cron
deleted file mode 100755
index 63c5ec0..0000000
--- a/etc/yum-cron
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/bin/bash
-#
-# yum-cron This shell script enables the automatic use of YUM
-#
-# Author: Seth Vidal <skvidal@phy.duke.edu>
-#
-# chkconfig: - 50 01
-#
-# description: Enable daily run of yum, a program updater.
-# processname: yum-cron
-# config: /etc/yum/yum-daily.yum
-#
-
-# source function library
-. /etc/rc.d/init.d/functions
-
-test -f /etc/sysconfig/yum-cron && . /etc/sysconfig/yum-cron
-
-lockfile=/var/lock/subsys/yum-cron
-tslock=/var/lock/yum-cron.lock/ts.lock
-yumcronpid=/var/lock/yum-cron.lock/pidfile
-
-RETVAL=0
-
-start() {
- echo -n $"Enabling nightly yum update: "
- touch "$lockfile" && success || failure
- RETVAL=$?
- echo
-}
-
-stop() {
- echo -n $"Disabling nightly yum update: "
- if [ -f "$yumcronpid" -a "$SERVICE_WAITS" = "yes" ]; then
- yum_done=0
- if [ ! -f $tslock ]; then
- # No transaction yet in progress, just kill it
- kill `cat $yumcronpid > /dev/null 2>&1` > /dev/null 2>&1
- yum_done=1
- fi
- if [ $yum_done -eq 0 ]; then
- echo -n $"Waiting for yum "
- if [ -z "$SERVICE_WAIT_TIME" ]; then
- SERVICE_WAIT_TIME=300
- fi
- start=`date +%s`
- end=`expr $start + $SERVICE_WAIT_TIME`
- while [ `date +%s` -le $end ]
- do
- sleep 5
- if [ ! -f "$tslock" ]; then
- yum_done=1
- break
- fi
- done
- if [ $yum_done -eq 1 ]; then
- echo -n " ok "
- else
- echo -n " failed "
- fi
- fi
- fi
- rm -f "$lockfile" && success || failure
- RETVAL=$?
- echo
-}
-
-restart() {
- stop
- start
-}
-
-case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- restart|force-reload)
- restart
- ;;
- reload)
- ;;
- condrestart)
- [ -f "$lockfile" ] && restart
- ;;
- status)
- if [ -f $lockfile ]; then
- echo $"Nightly yum update is enabled."
- RETVAL=0
- else
- echo $"Nightly yum update is disabled."
- RETVAL=3
- fi
- ;;
- *)
- echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}"
- exit 1
-esac
-
-exit $RETVAL
diff --git a/etc/yum-cron-hourly.conf b/etc/yum-cron-hourly.conf
new file mode 100644
index 0000000..2d52349
--- /dev/null
+++ b/etc/yum-cron-hourly.conf
@@ -0,0 +1,79 @@
+[commands]
+# What kind of update to use:
+# default = yum upgrade
+# security = yum --security upgrade
+# security-severity:Critical = yum --sec-severity=Critical upgrade
+# minimal = yum --bugfix upgrade-minimal
+# minimal-security = yum --security upgrade-minimal
+# minimal-security-severity:Critical = --sec-severity=Critical upgrade-minimal
+update_cmd = default
+
+# Whether a message should emitted when updates are available.
+update_messages = no
+
+# Whether updates should be downloaded when they are available. Note
+# that updates_messages must also be yes for updates to be downloaded.
+download_updates = no
+
+# Whether updates should be applied when they are available. Note
+# that both update_messages and download_updates must also be yes for
+# the update to be applied
+apply_updates = no
+
+# Maximum amout of time to randomly sleep, in minutes. The program
+# will sleep for a random amount of time between 0 and random_sleep
+# minutes before running. This is useful for e.g. staggering the
+# times that multiple systems will access update servers. If
+# random_sleep is 0 or negative, the program will run immediately.
+random_sleep = 0
+
+
+[emitters]
+# Name to use for this system in messages that are emitted. If
+# system_name is None, the hostname will be used.
+system_name = None
+
+# How to send messages. Valid options are stdio and email. If
+# emit_via includes stdio, messages will be sent to stdout; this is useful
+# to have cron send the messages. If emit_via includes email, this
+# program will send email itself according to the configured options.
+# If emit_via is None or left blank, no messages will be sent.
+emit_via = stdio
+
+# The width, in characters, that messages that are emitted should be
+# formatted to.
+ouput_width = 80
+
+
+[email]
+# The address to send email messages from.
+email_from = root
+
+# List of addresses to send messages to.
+email_to = root
+
+# Name of the host to connect to to send email messages.
+email_host = localhost
+
+
+[groups]
+# List of groups to update
+group_list = None
+
+# The types of group packages to install
+group_package_types = mandatory, default
+
+[base]
+# This section overrides yum.conf
+
+# Use this to filter Yum core messages
+# -4: critical
+# -3: critical+errors
+# -2: critical+errors+warnings (default)
+debuglevel = -2
+
+# skip_broken = True
+mdpolicy = group:main
+
+# Uncomment to auto-import new gpg keys (dangerous)
+# assumeyes = True
diff --git a/etc/yum-cron.conf b/etc/yum-cron.conf
new file mode 100644
index 0000000..a97d881
--- /dev/null
+++ b/etc/yum-cron.conf
@@ -0,0 +1,79 @@
+[commands]
+# What kind of update to use:
+# default = yum upgrade
+# security = yum --security upgrade
+# security-severity:Critical = yum --sec-severity=Critical upgrade
+# minimal = yum --bugfix upgrade-minimal
+# minimal-security = yum --security upgrade-minimal
+# minimal-security-severity:Critical = --sec-severity=Critical upgrade-minimal
+update_cmd = default
+
+# Whether a message should be emitted when updates are available,
+# were downloaded, or applied.
+update_messages = yes
+
+# Whether updates should be downloaded when they are available.
+download_updates = yes
+
+# Whether updates should be applied when they are available. Note
+# that download_updates must also be yes for the update to be applied.
+apply_updates = no
+
+# Maximum amout of time to randomly sleep, in minutes. The program
+# will sleep for a random amount of time between 0 and random_sleep
+# minutes before running. This is useful for e.g. staggering the
+# times that multiple systems will access update servers. If
+# random_sleep is 0 or negative, the program will run immediately.
+random_sleep = 0
+
+
+[emitters]
+# Name to use for this system in messages that are emitted. If
+# system_name is None, the hostname will be used.
+system_name = None
+
+# How to send messages. Valid options are stdio and email. If
+# emit_via includes stdio, messages will be sent to stdout; this is useful
+# to have cron send the messages. If emit_via includes email, this
+# program will send email itself according to the configured options.
+# If emit_via is None or left blank, no messages will be sent.
+emit_via = stdio
+
+# The width, in characters, that messages that are emitted should be
+# formatted to.
+ouput_width = 80
+
+
+[email]
+# The address to send email messages from.
+email_from = root@localhost
+
+# List of addresses to send messages to.
+email_to = root
+
+# Name of the host to connect to to send email messages.
+email_host = localhost
+
+
+[groups]
+# NOTE: This only works when group_command != objects, which is now the default
+# List of groups to update
+group_list = None
+
+# The types of group packages to install
+group_package_types = mandatory, default
+
+[base]
+# This section overrides yum.conf
+
+# Use this to filter Yum core messages
+# -4: critical
+# -3: critical+errors
+# -2: critical+errors+warnings (default)
+debuglevel = -2
+
+# skip_broken = True
+mdpolicy = group:main
+
+# Uncomment to auto-import new gpg keys (dangerous)
+# assumeyes = True
diff --git a/etc/yum-cron.sysconf b/etc/yum-cron.sysconf
deleted file mode 100644
index 930341c..0000000
--- a/etc/yum-cron.sysconf
+++ /dev/null
@@ -1,58 +0,0 @@
-# Pass any given paramter to yum, as run in all the scripts invoked
-# by this package. Be aware that this is global, and yum is invoked in
-# several modes by these scripts for which your own parameter might not
-# be appropriate
-YUM_PARAMETER=
-
-# Don't install, just check (valid: yes|no)
-CHECK_ONLY=no
-
-# Check to see if you can reach the repos before updating (valid: yes|no)
-CHECK_FIRST=no
-
-# Don't install, just check and download (valid: yes|no)
-# Implies CHECK_ONLY=yes (gotta check first to see what to download)
-DOWNLOAD_ONLY=no
-
-# Error level, practical range 0-10, 0 means print only critical errors which
-# you must be told, 1 means print all errors, even ones that are not important
-# Level 0 is the default
-# ERROR_LEVEL=0
-
-# Debug level, practical range 0-10, higher number means more output
-# Level 1 is a useful level if you want to see what's been done and
-# don't want to read /var/log/yum.log
-# Level 0 is the default
-# DEBUG_LEVEL=1
-
-# randomwait is used by yum to wait random time
-# default is 60 so yum waits random time from 1 to 60 minutes
-# the value must not be zero
-RANDOMWAIT="60"
-
-# if MAILTO is set and the mail command is available, the mail command
-# is used to deliver yum output
-
-# by default MAILTO is unset, so crond mails the output by itself
-# example: MAILTO=root
-MAILTO=
-
-# you may set SYSTEMNAME if you want your yum emails tagged differently
-# default is output of hostname command
-# this variable is used only if MAILTO is set too
-#SYSTEMNAME=""
-
-# you may set DAYS_OF_WEEK to the days of the week you want to run
-# default is every day
-#DAYS_OF_WEEK="0123456"
-
-# which day should it do cleanup on? defaults to 0 (Sunday). If this day isn't in the
-# DAYS_OF_WEEK above, it'll never happen
-CLEANDAY="0"
-
-# set to yes to make the yum-cron service to wait for transactions to complete
-SERVICE_WAITS=yes
-
-# set maximum time period (in seconds) for the yum-cron service to wait for
-# transactions to complete. The default is 300 seconds (5 minutes)
-SERVICE_WAIT_TIME=300
diff --git a/etc/yum-daily.yum b/etc/yum-daily.yum
deleted file mode 100644
index 5d4e874..0000000
--- a/etc/yum-daily.yum
+++ /dev/null
@@ -1,3 +0,0 @@
-update
-ts run
-exit
diff --git a/etc/yum-makecache.service b/etc/yum-makecache.service
new file mode 100644
index 0000000..b4434ea
--- /dev/null
+++ b/etc/yum-makecache.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=yum makecache
+
+[Service]
+Type=oneshot
+Nice=19
+IOSchedulingClass=2
+IOSchedulingPriority=7
+ExecStart=/usr/bin/yum makecache fast
diff --git a/etc/yum-makecache.timer b/etc/yum-makecache.timer
new file mode 100644
index 0000000..02fb5a2
--- /dev/null
+++ b/etc/yum-makecache.timer
@@ -0,0 +1,11 @@
+[Unit]
+Description=yum makecache timer
+ConditionKernelCommandLine=!rd.live.image
+
+[Timer]
+OnBootSec=10min
+OnUnitInactiveSec=1h
+Unit=yum-makecache.service
+
+[Install]
+WantedBy=basic.target
diff --git a/etc/yum-weekly.yum b/etc/yum-weekly.yum
deleted file mode 100644
index c60fa08..0000000
--- a/etc/yum-weekly.yum
+++ /dev/null
@@ -1,4 +0,0 @@
-clean packages
-clean expire-cache
-ts run
-exit
diff --git a/etc/yum.bash b/etc/yum.bash
index f1e06e8..40541af 100644
--- a/etc/yum.bash
+++ b/etc/yum.bash
@@ -1,53 +1,25 @@
# bash completion for yum
-# arguments:
-# 1 = argument to "yum list" (all, available, updates etc)
-# 2 = current word to be completed
-_yum_list()
+_yum_helper()
{
- # Fail fast for things that look like paths.
- [[ $2 == */* || $2 == [.~]* ]] && return
-
- if [ "$1" = all ] ; then
- # Try to strip in between headings like "Available Packages" - would
- # be nice if e.g. -d 0 did that for us. This will obviously only work
- # for English :P
- COMPREPLY+=( $( ${yum:-yum} -d 0 -C list $1 "$2*" 2>/dev/null | \
- sed -ne '/^Available /d' -e '/^Installed /d' -e '/^Updated /d' \
- -e 's/[[:space:]].*//p' ) )
- else
- # Drop first line (e.g. "Updated Packages") - would be nice if e.g.
- # -d 0 did that for us.
- COMPREPLY+=( $( ${yum:-yum} -d 0 -C list $1 "$2*" 2>/dev/null | \
- sed -ne 1d -e 's/[[:space:]].*//p' ) )
+ local IFS=$'\n'
+ if [[ -n "$YUM_CACHEDIR" && "$1 $2" == "list available" ]]; then
+ for db in $(find "$YUM_CACHEDIR" -name primary_db.sqlite); do
+ COMPREPLY+=( $( sqlite3 "$db" \
+ "SELECT name||'.'||arch FROM packages WHERE name LIKE '$3%'"
+ ) )
+ done
+ return
fi
+ COMPREPLY+=( $(
+ /usr/share/yum-cli/completion-helper.py -d 0 -C "$@" 2>/dev/null ) )
}
-# arguments:
-# 1 = argument to "yum repolist" (enabled, disabled etc)
-# 2 = current word to be completed
-_yum_repolist()
+_yum_list()
{
- # TODO: add -d 0 when http://yum.baseurl.org/ticket/29 is fixed
- # (for now --noplugins is used to get rid of "Loaded plugins: ...")
- # Drop first ("repo id repo name") and last ("repolist: ...") rows -
- # would be nice if e.g. -d 0 did that for us.
- COMPREPLY+=(
- $( compgen -W "$( ${yum:-yum} --noplugins -C repolist $1 2>/dev/null | \
- sed -ne '/^repo\s\{1,\}id/d' -e '/^repolist:/d' \
- -e 's/[[:space:]].*//p' )" -- "$2" ) )
-}
-
-# arguments:
-# 1 = argument to "yum grouplist" (usually empty (""), or hidden)
-# 2 = current word to be completed
-_yum_grouplist()
-{
- local IFS=$'\n'
- # TODO: add -d 0 when http://yum.baseurl.org/ticket/29 is fixed
- COMPREPLY=( $( compgen -W "$( ${yum:-yum} -C grouplist $1 "$2*" \
- 2>/dev/null | sed -ne 's/^[[:space:]]\{1,\}\(.\{1,\}\)/\1/p' )" \
- -- "$2" ) )
+ # Fail fast for things that look like paths or options.
+ [[ $2 == */* || $2 == [.~-]* ]] && return
+ _yum_helper list "$@"
}
# arguments:
@@ -56,7 +28,7 @@ _yum_grouplist()
_yum_plugins()
{
local val
- [ $1 = 1 ] && val='\(1\|yes\|true\|on\)' || val='\(0\|no\|false\|off\)'
+ [[ $1 -eq 1 ]] && val='\(1\|yes\|true\|on\)' || val='\(0\|no\|false\|off\)'
COMPREPLY+=( $( compgen -W '$( command grep -il "^\s*enabled\s*=\s*$val" \
/etc/yum/pluginconf.d/*.conf 2>/dev/null \
| sed -ne "s|^.*/\([^/]\{1,\}\)\.conf$|\1|p" )' -- "$2" ) )
@@ -75,9 +47,10 @@ _yum_baseopts()
{
local opts='--help --tolerant --cacheonly --config --randomwait
--debuglevel --showduplicates --errorlevel --rpmverbosity --quiet
- --verbose --assumeyes --version --installroot --enablerepo
+ --verbose --assumeyes --assumeno --version --installroot --enablerepo
--disablerepo --exclude --disableexcludes --obsoletes --noplugins
- --nogpgcheck --skip-broken --color --releasever --setopt'
+ --nogpgcheck --skip-broken --color --releasever --setopt --downloadonly
+ --downloaddir --disableincludes'
[[ $COMP_LINE == *--noplugins* ]] || \
opts+=" --disableplugin --enableplugin"
printf %s "$opts"
@@ -89,6 +62,16 @@ _yum_transactions()
sed -ne 's/^[[:space:]]*\([0-9]\{1,\}\).*/\1/p' )" -- "$cur" ) )
}
+_yum_atgroups()
+{
+ if [[ $1 == \@* ]]; then
+ _yum_helper groups list all "${1:1}"
+ COMPREPLY=( "${COMPREPLY[@]/#/@}" )
+ return 0
+ fi
+ return 1
+}
+
# arguments:
# 1 = current word to be completed
# 2 = previous word
@@ -119,18 +102,20 @@ _yum_complete_baseopts()
;;
--enablerepo)
- _yum_repolist disabled "$1"
+ _yum_helper repolist disabled "$1"
return 0
;;
--disablerepo)
- _yum_repolist enabled "$1"
+ _yum_helper repolist enabled "$1"
return 0
;;
- --disableexcludes)
- _yum_repolist all "$1"
- COMPREPLY=( $( compgen -W '${COMPREPLY[@]} all main' -- "$1" ) )
+ --disableexcludes|--disableincludes)
+ _yum_helper repolist all "$1"
+ local main=
+ [[ $2 == *excludes ]] && main=main
+ COMPREPLY=( $( compgen -W '${COMPREPLY[@]} all $main' -- "$1" ) )
return 0
;;
@@ -183,16 +168,16 @@ _yum()
# Commands offered as completions
local cmds=( check check-update clean deplist distro-sync downgrade
- groupinfo groupinstall grouplist groupremove help history info install
- list makecache provides reinstall remove repolist resolvedep search
- shell update upgrade version )
+ groups help history info install list load-transaction makecache provides
+ reinstall remove repolist search shell update upgrade version )
local i c cmd subcmd
for (( i=1; i < ${#words[@]}-1; i++ )) ; do
[[ -n $cmd ]] && subcmd=${words[i]} && break
# Recognize additional commands and aliases
for c in ${cmds[@]} check-rpmdb distribution-synchronization erase \
- groupupdate grouperase localinstall localupdate whatprovides ; do
+ group groupinfo groupinstall grouplist groupremove groupupdate \
+ grouperase install-na load-ts localinstall localupdate whatprovides ; do
[[ ${words[i]} == $c ]] && cmd=$c && break
done
done
@@ -205,13 +190,12 @@ _yum()
return 0
;;
- check-update|grouplist|makecache|provides|whatprovides|resolvedep|\
- search)
+ check-update|makecache|resolvedep)
return 0
;;
clean)
- [ "$prev" = "$cmd" ] && \
+ [[ $prev == $cmd ]] && \
COMPREPLY=( $( compgen -W 'expire-cache packages headers
metadata cache dbcache all' -- "$cur" ) )
return 0
@@ -224,59 +208,83 @@ _yum()
;;
distro-sync|distribution-synchronization)
- [ "$prev" = "$cmd" ] && \
+ [[ $prev == $cmd ]] && \
COMPREPLY=( $( compgen -W 'full different' -- "$cur" ) )
_yum_list installed "$cur"
return 0
;;
downgrade|reinstall)
- _yum_binrpmfiles "$cur"
- _yum_list installed "$cur"
+ if ! _yum_atgroups "$cur" ; then
+ _yum_binrpmfiles "$cur"
+ _yum_list installed "$cur"
+ fi
return 0
;;
erase|remove)
- _yum_list installed "$cur"
+ _yum_atgroups "$cur" || _yum_list installed "$cur"
return 0
;;
group*)
- _yum_grouplist "" "$cur"
+ if [[ ($cmd == groups || $cmd == group) && $prev == $cmd ]] ; then
+ COMPREPLY=( $( compgen -W 'info install list remove summary' \
+ -- "$cur" ) )
+ else
+ _yum_helper groups list all "$cur"
+ fi
return 0
;;
help)
- [ "$prev" = "$cmd" ] && \
+ [[ $prev == $cmd ]] && \
COMPREPLY=( $( compgen -W '${cmds[@]}' -- "$cur" ) )
return 0
;;
history)
if [[ $prev == $cmd ]] ; then
- COMPREPLY=( $( compgen -W 'info list summary undo redo new
- addon-info package-list rollback' -- "$cur" ) )
+ COMPREPLY=( $( compgen -W 'info list packages-list
+ packages-info summary addon-info redo undo rollback new
+ sync stats' -- "$cur" ) )
return 0
fi
case $subcmd in
- undo|redo|repeat|addon|addon-info|rollback)
- _yum_transactions
- COMPREPLY=( $( compgen -W "${COMPREPLY[@]} last" \
- -- "$cur" ) )
+ undo|repeat|addon|addon-info|rollback)
+ if [[ $prev == $subcmd ]]; then
+ COMPREPLY=( $( compgen -W "last" -- "$cur" ) )
+ _yum_transactions
+ fi
+ ;;
+ redo)
+ case $prev in
+ redo)
+ COMPREPLY=( $( compgen -W "force-reinstall
+ force-remove last" -- "$cur" ) )
+ _yum_transactions
+ ;;
+ reinstall|force-reinstall|remove|force-remove)
+ COMPREPLY=( $( compgen -W "last" -- "$cur" ) )
+ _yum_transactions
+ ;;
+ esac
;;
package-list|pkg|pkgs|pkg-list|pkgs-list|package|packages|\
- packages-list)
+ packages-list|pkg-info|pkgs-info|package-info|packages-info)
_yum_list available "$cur"
;;
info|list|summary)
- _yum_transactions
if [[ $subcmd != info ]] ; then
- COMPREPLY=( $( compgen -W "${COMPREPLY[@]} all" \
- -- "$cur" ) )
+ COMPREPLY=( $( compgen -W "all" -- "$cur" ) )
[[ $cur != all ]] && _yum_list available "$cur"
else
_yum_list available "$cur"
fi
+ _yum_transactions
+ ;;
+ sync|synchronize)
+ _yum_list installed "$cur"
;;
esac
return 0
@@ -288,42 +296,66 @@ _yum()
;;
install)
- _yum_binrpmfiles "$cur"
+ if ! _yum_atgroups "$cur" ; then
+ _yum_binrpmfiles "$cur"
+ _yum_list available "$cur"
+ fi
+ return 0
+ ;;
+
+ install-na)
_yum_list available "$cur"
return 0
;;
list)
- [ "$prev" = "$cmd" ] && \
+ [[ $prev == $cmd ]] && \
COMPREPLY=( $( compgen -W 'all available updates installed
extras obsoletes recent' -- "$cur" ) )
return 0
;;
+ load-transaction|load-ts)
+ COMPREPLY=( $( compgen -f -o plusdirs -X '!*.yumtx' -- "$cur" ) )
+ return 0
+ ;;
+
localinstall|localupdate)
_yum_binrpmfiles "$cur"
return 0
;;
+ provides|whatprovides)
+ COMPREPLY=( $( compgen -f -o plusdirs -- "$cur" ) )
+ return 0
+ ;;
+
repolist)
- [ "$prev" = "$cmd" ] && \
+ [[ $prev == $cmd ]] && \
COMPREPLY=( $( compgen -W 'all enabled disabled' -- "$cur" ) )
return 0
;;
+ search)
+ [[ $prev == $cmd ]] && COMPREPLY=( $( compgen -W 'all' -- "$cur" ) )
+ return 0
+ ;;
+
shell)
- [ "$prev" = "$cmd" ] && \
+ [[ $prev == $cmd ]] && \
COMPREPLY=( $( compgen -f -o plusdirs -- "$cur" ) )
return 0
;;
update|upgrade)
- _yum_binrpmfiles "$cur"
- _yum_list updates "$cur"
+ if ! _yum_atgroups "$cur" ; then
+ _yum_binrpmfiles "$cur"
+ _yum_list updates "$cur"
+ fi
return 0
;;
version)
- [ "$prev" = "$cmd" ] && \
+ [[ $prev == $cmd ]] && \
COMPREPLY=( $( compgen -W 'all installed available nogroups
grouplist groupinfo' -- "$cur" ) )
return 0
@@ -337,7 +369,11 @@ _yum()
$split && return 0
- COMPREPLY=( $( compgen -W '$( _yum_baseopts ) ${cmds[@]}' -- "$cur" ) )
+ if [[ $cur == -* ]] ; then
+ COMPREPLY=( $( compgen -W '$( _yum_baseopts )' -- "$cur" ) )
+ return 0
+ fi
+ COMPREPLY=( $( compgen -W '${cmds[@]}' -- "$cur" ) )
} &&
complete -F _yum -o filenames yum yummain.py
diff --git a/output.py b/output.py
index b6aa277..cf9e985 100755
--- a/output.py
+++ b/output.py
@@ -1,6 +1,6 @@
#!/usr/bin/python -t
-"""This handles actual output from the cli"""
+"""Handle actual output from the cli."""
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -29,7 +29,7 @@ import re # For YumTerm
from weakref import proxy as weakref
-from urlgrabber.progress import TextMeter
+from urlgrabber.progress import TextMeter, TextMultiFileMeter
import urlgrabber.progress
from urlgrabber.grabber import URLGrabError
from yum.misc import prco_tuple_to_string
@@ -47,6 +47,21 @@ import yum.history
from yum.i18n import utf8_width, utf8_width_fill, utf8_text_fill
+import locale
+
+try:
+ assert max(2, 4) == 4
+except:
+ # Python-2.4.x doesn't have min/max ... *sigh*
+ def min(x, *args):
+ for y in args:
+ if x > y: x = y
+ return x
+ def max(x, *args):
+ for y in args:
+ if x < y: x = y
+ return x
+
def _term_width():
""" Simple terminal width, limit to 20 chars. and make 0 == 80. """
if not hasattr(urlgrabber.progress, 'terminal_width_cached'):
@@ -60,17 +75,26 @@ def _term_width():
class YumTextMeter(TextMeter):
-
- """
- Text progress bar output.
- """
+ """A class to display text progress bar output."""
def update(self, amount_read, now=None):
+ """Update the status of the text progress bar
+
+ :param amount_read: the amount of data, in bytes, that has been read
+ :param now: the current time in seconds since the epoch. If
+ *now* is not given, the output of :func:`time.time()` will
+ be used.
+ """
checkSignals()
TextMeter.update(self, amount_read, now)
+class YumTextMultiFileMeter(TextMultiFileMeter):
+ def update_meter(self, meter, now):
+ checkSignals()
+ TextMultiFileMeter.update_meter(self, meter, now)
+
class YumTerm:
- """some terminal "UI" helpers based on curses"""
+ """A class to provide some terminal "UI" helpers based on curses."""
# From initial search for "terminfo and python" got:
# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/475116
@@ -145,6 +169,17 @@ class YumTerm:
self.BG_COLOR = self.__ansi_forced_BG_COLOR
def reinit(self, term_stream=None, color='auto'):
+ """Reinitializes the :class:`YumTerm`.
+
+ :param term_stream: the terminal stream that the
+ :class:`YumTerm` should be initialized to use. If
+ *term_stream* is not given, :attr:`sys.stdout` is used.
+ :param color: when to colorize output. Valid values are
+ 'always', 'auto', and 'never'. 'always' will use ANSI codes
+ to always colorize output, 'auto' will decide whether do
+ colorize depending on the terminal, and 'never' will never
+ colorize.
+ """
self.__enabled = True
if not hasattr(urlgrabber.progress, 'terminal_width_cached'):
self.columns = 80
@@ -255,6 +290,37 @@ class YumTerm:
return re.sub(r'\$<\d+>[/*]?', '', cap)
def sub(self, haystack, beg, end, needles, escape=None, ignore_case=False):
+ """Search the string *haystack* for all occurrences of any
+ string in the list *needles*. Prefix each occurrence with
+ *beg*, and postfix each occurrence with *end*, then return the
+ modified string. For example::
+
+ >>> yt = YumTerm()
+ >>> yt.sub('spam and eggs', 'x', 'z', ['and'])
+ 'spam xandz eggs'
+
+ This is particularly useful for emphasizing certain words
+ in output: for example, calling :func:`sub` with *beg* =
+ MODE['bold'] and *end* = MODE['normal'] will return a string
+ that when printed to the terminal will appear to be *haystack*
+ with each occurrence of the strings in *needles* in bold
+ face. Note, however, that the :func:`sub_mode`,
+ :func:`sub_bold`, :func:`sub_fg`, and :func:`sub_bg` methods
+ provide convenient ways to access this same emphasizing functionality.
+
+ :param haystack: the string to be modified
+ :param beg: the string to be prefixed onto matches
+ :param end: the string to be postfixed onto matches
+ :param needles: a list of strings to add the prefixes and
+ postfixes to
+ :param escape: a function that accepts a string and returns
+ the same string with problematic characters escaped. By
+ default, :func:`re.escape` is used.
+ :param ignore_case: whether case should be ignored when
+ searching for matches
+ :return: *haystack* with *beg* prefixing, and *end*
+ postfixing, occurrences of the strings in *needles*
+ """
if not self.__enabled:
return haystack
@@ -269,27 +335,106 @@ class YumTerm:
haystack = re.sub(pat, render, haystack)
return haystack
def sub_norm(self, haystack, beg, needles, **kwds):
+ """Search the string *haystack* for all occurrences of any
+ string in the list *needles*. Prefix each occurrence with
+ *beg*, and postfix each occurrence with self.MODE['normal'],
+ then return the modified string. If *beg* is an ANSI escape
+ code, such as given by self.MODE['bold'], this method will
+ return *haystack* with the formatting given by the code only
+ applied to the strings in *needles*.
+
+ :param haystack: the string to be modified
+ :param beg: the string to be prefixed onto matches
+ :param end: the string to be postfixed onto matches
+ :param needles: a list of strings to add the prefixes and
+ postfixes to
+ :return: *haystack* with *beg* prefixing, and self.MODE['normal']
+ postfixing, occurrences of the strings in *needles*
+ """
return self.sub(haystack, beg, self.MODE['normal'], needles, **kwds)
def sub_mode(self, haystack, mode, needles, **kwds):
+ """Search the string *haystack* for all occurrences of any
+ string in the list *needles*. Prefix each occurrence with
+ self.MODE[*mode*], and postfix each occurrence with
+ self.MODE['normal'], then return the modified string. This
+ will return a string that when printed to the terminal will
+ appear to be *haystack* with each occurrence of the strings in
+ *needles* in the given *mode*.
+
+ :param haystack: the string to be modified
+ :param mode: the mode to set the matches to be in. Valid
+ values are given by self.MODE.keys().
+ :param needles: a list of strings to add the prefixes and
+ postfixes to
+ :return: *haystack* with self.MODE[*mode*] prefixing, and
+ self.MODE['normal'] postfixing, occurrences of the strings
+ in *needles*
+ """
return self.sub_norm(haystack, self.MODE[mode], needles, **kwds)
def sub_bold(self, haystack, needles, **kwds):
+ """Search the string *haystack* for all occurrences of any
+ string in the list *needles*. Prefix each occurrence with
+ self.MODE['bold'], and postfix each occurrence with
+ self.MODE['normal'], then return the modified string. This
+ will return a string that when printed to the terminal will
+ appear to be *haystack* with each occurrence of the strings in
+ *needles* in bold face.
+
+ :param haystack: the string to be modified
+ :param needles: a list of strings to add the prefixes and
+ postfixes to
+ :return: *haystack* with self.MODE['bold'] prefixing, and
+ self.MODE['normal'] postfixing, occurrences of the strings
+ in *needles*
+ """
return self.sub_mode(haystack, 'bold', needles, **kwds)
def sub_fg(self, haystack, color, needles, **kwds):
+ """Search the string *haystack* for all occurrences of any
+ string in the list *needles*. Prefix each occurrence with
+ self.FG_COLOR[*color*], and postfix each occurrence with
+ self.MODE['normal'], then return the modified string. This
+ will return a string that when printed to the terminal will
+ appear to be *haystack* with each occurrence of the strings in
+ *needles* in the given color.
+
+ :param haystack: the string to be modified
+ :param color: the color to set the matches to be in. Valid
+ values are given by self.FG_COLOR.keys().
+ :param needles: a list of strings to add the prefixes and
+ postfixes to
+ :return: *haystack* with self.FG_COLOR[*color*] prefixing, and
+ self.MODE['normal'] postfixing, occurrences of the strings
+ in *needles*
+ """
return self.sub_norm(haystack, self.FG_COLOR[color], needles, **kwds)
def sub_bg(self, haystack, color, needles, **kwds):
+ """Search the string *haystack* for all occurrences of any
+ string in the list *needles*. Prefix each occurrence with
+ self.BG_COLOR[*color*], and postfix each occurrence with
+ self.MODE['normal'], then return the modified string. This
+ will return a string that when printed to the terminal will
+ appear to be *haystack* with each occurrence of the strings in
+ *needles* highlighted in the given background color.
+
+ :param haystack: the string to be modified
+ :param color: the background color to set the matches to be in. Valid
+ values are given by self.BG_COLOR.keys().
+ :param needles: a list of strings to add the prefixes and
+ postfixes to
+ :return: *haystack* with self.BG_COLOR[*color*] prefixing, and
+ self.MODE['normal'] postfixing, occurrences of the strings
+ in *needles*
+ """
return self.sub_norm(haystack, self.BG_COLOR[color], needles, **kwds)
class YumOutput:
-
- """
- Main output class for the yum command line.
- """
+ """Main output class for the yum command line."""
def __init__(self):
self.logger = logging.getLogger("yum.cli")
@@ -304,6 +449,12 @@ class YumOutput:
def printtime(self):
+ """Return a string representing the current time in the form::
+
+ Mon dd hh:mm:ss
+
+ :return: a string representing the current time
+ """
months = [_('Jan'), _('Feb'), _('Mar'), _('Apr'), _('May'), _('Jun'),
_('Jul'), _('Aug'), _('Sep'), _('Oct'), _('Nov'), _('Dec')]
now = time.localtime(time.time())
@@ -312,14 +463,27 @@ class YumOutput:
return ret
def failureReport(self, errobj):
- """failure output for failovers from urlgrabber"""
-
+ """Perform failure output for failovers from urlgrabber
+
+ :param errobj: :class:`urlgrabber.grabber.CallbackObject`
+ containing information about the error
+ :raises: *errobj*.exception
+ """
self.logger.error('%s: %s', errobj.url, errobj.exception)
self.logger.error(_('Trying other mirror.'))
raise errobj.exception
def simpleProgressBar(self, current, total, name=None):
+ """Output the current status to the terminal using a simple
+ status bar.
+
+ :param current: a number representing the amount of work
+ already done
+ :param total: a number representing the total amount of work
+ to be done
+ :param name: a name to label the progress bar with
+ """
progressbar(current, total, name)
def _highlight(self, highlight):
@@ -368,9 +532,29 @@ class YumOutput:
def calcColumns(self, data, columns=None, remainder_column=0,
total_width=None, indent=''):
- """ Dynamically calculate the width of the fields in the data, data is
- of the format [column-number][field_length] = rows. """
-
+ """Dynamically calculate the widths of the columns that the
+ fields in data should be placed into for output.
+
+ :param data: a list of dictionaries that represent the data to
+ be output. Each dictionary in the list corresponds to a
+ column of output. The keys of the dictionary are the
+ lengths of the items to be output, and the value associated
+ with a key is the number of items of that length.
+ :param columns: a list containing the minimum amount of space
+ that must be allocated for each row. This can be used to
+ ensure that there is space available in a column if, for
+ example, the actual lengths of the items being output
+ cannot be given in *data*
+ :param remainder_column: number of the column to receive a few
+ extra spaces that may remain after other allocation has
+ taken place
+ :param total_width: the total width of the output.
+ self.term.columns is used by default
+ :param indent: string that will be prefixed to a line of
+ output to create e.g. an indent
+ :return: a list of the widths of the columns that the fields
+ in data should be placed into for output
+ """
if total_width is None:
total_width = self.term.columns
@@ -473,10 +657,20 @@ class YumOutput:
return (val, width, hibeg, hiend)
def fmtColumns(self, columns, msg=u'', end=u'', text_width=utf8_width):
- """ Return a string for columns of data, which can overflow.
- text_width parameter finds the width of columns, this defaults to
- utf8 but can be changed to len() if you know it'll be fine. """
-
+ """Return a row of data formatted into a string for output.
+ Items can overflow their columns.
+
+ :param columns: a list of tuples containing the data to
+ output. Each tuple contains first the item to be output,
+ then the amount of space allocated for the column, and then
+ optionally a type of highlighting for the item
+ :param msg: a string to begin the line of output with
+ :param end: a string to end the line of output with
+ :param text_width: a function to find the width of the items
+ in the columns. This defaults to utf8 but can be changed
+ to len() if you know it'll be fine
+ :return: a row of data formatted into a string for output
+ """
total_width = len(msg)
data = []
for col_data in columns[:-1]:
@@ -495,9 +689,9 @@ class YumOutput:
# we can.
msg += u"%s%s%s%s "
if (align == u'-'):
- data.extend([hibeg, val, " " * (width - val_width), hiend])
+ data.extend([hibeg, val, hiend, " " * (width - val_width)])
else:
- data.extend([hibeg, " " * (width - val_width), val, hiend])
+ data.extend([" " * (width - val_width), hibeg, val, hiend])
else:
msg += u"%s%s%s\n" + " " * (total_width + width + 1)
data.extend([hibeg, val, hiend])
@@ -513,8 +707,18 @@ class YumOutput:
def simpleList(self, pkg, ui_overflow=False, indent='', highlight=False,
columns=None):
- """ Simple to use function to print a pkg as a line. """
-
+ """Print a package as a line.
+
+ :param pkg: the package to be printed
+ :param ui_overflow: unused
+ :param indent: string to be prefixed onto the line to provide
+ e.g. an indent
+ :param highlight: highlighting options for the name of the
+ package
+ :param colums: tuple containing the space allocated for each
+ column of output. The columns are the package name, version,
+ and repository
+ """
if columns is None:
columns = (-40, -22, -16) # Old default
ver = pkg.printVer()
@@ -526,9 +730,19 @@ class YumOutput:
def simpleEnvraList(self, pkg, ui_overflow=False,
indent='', highlight=False, columns=None):
- """ Simple to use function to print a pkg as a line, with the pkg
- itself in envra format so it can be pased to list/install/etc. """
-
+ """Print a package as a line, with the package itself in envra
+ format so it can be passed to list/install/etc.
+
+ :param pkg: the package to be printed
+ :param ui_overflow: unused
+ :param indent: string to be prefixed onto the line to provide
+ e.g. an indent
+ :param highlight: highlighting options for the name of the
+ package
+ :param colums: tuple containing the space allocated for each
+ column of output. The columns the are the package envra and
+ repository
+ """
if columns is None:
columns = (-63, -16) # Old default
envra = '%s%s' % (indent, str(pkg))
@@ -538,7 +752,13 @@ class YumOutput:
print self.fmtColumns(columns, text_width=len)
def fmtKeyValFill(self, key, val):
- """ Return a key value pair in the common two column output format. """
+ """Return a key value pair in the common two column output
+ format.
+
+ :param key: the key to be formatted
+ :param val: the value associated with *key*
+ :return: the key value pair formatted in two columns for output
+ """
val = to_str(val)
keylen = utf8_width(key)
cols = self.term.columns
@@ -553,6 +773,15 @@ class YumOutput:
return ret
def fmtSection(self, name, fill='='):
+ """Format and return a section header. The format of the
+ header is a line with *name* centred, and *fill* repeated on
+ either side to fill an entire line on the terminal.
+
+ :param name: the name of the section
+ :param fill: the character to repeat on either side of *name*
+ to fill an entire line. *fill* must be a single character.
+ :return: a string formatted to be a section header
+ """
name = to_str(name)
cols = self.term.columns - 2
name_len = utf8_width(name)
@@ -577,6 +806,12 @@ class YumOutput:
return to_unicode(s)
def infoOutput(self, pkg, highlight=False):
+ """Print information about the given package.
+
+ :param pkg: the package to print information about
+ :param hightlight: highlighting options for the name of the
+ package
+ """
(hibeg, hiend) = self._highlight(highlight)
print _("Name : %s%s%s") % (hibeg, to_unicode(pkg.name), hiend)
print _("Arch : %s") % to_unicode(pkg.arch)
@@ -585,7 +820,7 @@ class YumOutput:
print _("Version : %s") % to_unicode(pkg.version)
print _("Release : %s") % to_unicode(pkg.release)
print _("Size : %s") % self.format_number(float(pkg.size))
- print _("Repo : %s") % to_unicode(pkg.repoid)
+ print _("Repo : %s") % to_unicode(pkg.repo.ui_id)
if pkg.repoid == 'installed' and 'from_repo' in pkg.yumdb_info:
print _("From repo : %s") % to_unicode(pkg.yumdb_info.from_repo)
if self.verbose_logger.isEnabledFor(logginglevels.DEBUG_3):
@@ -616,11 +851,27 @@ class YumOutput:
print self.fmtKeyValFill(_("Description : "),self._enc(pkg.description))
print ""
- def updatesObsoletesList(self, uotup, changetype, columns=None):
- """takes an updates or obsoletes tuple of pkgobjects and
- returns a simple printed string of the output and a string
- explaining the relationship between the tuple members"""
+ def updatesObsoletesList(self, uotup, changetype, columns=None, repoid=None):
+ """Print a simple string that explains the relationship
+ between the members of an update or obsoletes tuple.
+
+ :param uotup: an update or obsoletes tuple. The first member
+ is the new package, and the second member is the old
+ package
+ :param changetype: a string indicating what the change between
+ the packages is, e.g. 'updates' or 'obsoletes'
+ :param columns: a tuple containing information about how to
+ format the columns of output. The absolute value of each
+ number in the tuple indicates how much space has been
+ allocated for the corresponding column. If the number is
+ negative, the text in the column will be left justified,
+ and if it is positive, the text will be right justified.
+ The columns of output are the package name, version, and repository
+ :param repoid: a repoid that the new package should belong to
+ """
(changePkg, instPkg) = uotup
+ if repoid and changePkg.repoid != repoid:
+ return
if columns is not None:
# New style, output all info. for both old/new with old indented
@@ -640,12 +891,45 @@ class YumOutput:
def listPkgs(self, lst, description, outputType, highlight_na={},
columns=None, highlight_modes={}):
- """outputs based on whatever outputType is. Current options:
- 'list' - simple pkg list
- 'info' - similar to rpm -qi output
- ...also highlight_na can be passed, and we'll highlight
- pkgs with (names, arch) in that set."""
-
+ """Prints information about the given list of packages.
+
+ :param lst: a list of packages to print information about
+ :param description: string describing what the list of
+ packages contains, e.g. 'Available Packages'
+ :param outputType: The type of information to be printed.
+ Current options::
+
+ 'list' - simple pkg list
+ 'info' - similar to rpm -qi output
+ :param highlight_na: a dictionary containing information about
+ packages that should be highlighted in the output. The
+ dictionary keys are (name, arch) tuples for the package,
+ and the associated values are the package objects
+ themselves.
+ :param columns: a tuple containing information about how to
+ format the columns of output. The absolute value of each
+ number in the tuple indicates how much space has been
+ allocated for the corresponding column. If the number is
+ negative, the text in the column will be left justified,
+ and if it is positive, the text will be right justified.
+ The columns of output are the package name, version, and
+ repository
+ :param highlight_modes: dictionary containing information
+ about to highlight the packages in *highlight_na*.
+ *highlight_modes* should contain the following keys::
+
+ 'not_in' - highlighting used for packages not in *highlight_na*
+ '=' - highlighting used when the package versions are equal
+ '<' - highlighting used when the package has a lower version number
+ '>' - highlighting used when the package has a higher version number
+ :return: (exit_code, [errors])
+
+ exit_code is::
+
+ 0 = we're done, exit
+ 1 = we've errored, exit with error string
+ """
+ kern_pkgtup = yum.misc.get_running_kernel_pkgtup(self.ts)
if outputType in ['list', 'info']:
thingslisted = 0
if len(lst) > 0:
@@ -654,7 +938,8 @@ class YumOutput:
for pkg in sorted(lst):
key = (pkg.name, pkg.arch)
highlight = False
- if False: pass
+ if pkg.pkgtup == kern_pkgtup:
+ highlight = highlight_modes.get('kern','bold,underline')
elif key not in highlight_na:
highlight = highlight_modes.get('not in', 'normal')
elif pkg.verEQ(highlight_na[key]):
@@ -676,17 +961,23 @@ class YumOutput:
return 1, ['No Packages to list']
return 0, []
-
-
- def userconfirm(self):
- """gets a yes or no from the user, defaults to No"""
+ def userconfirm(self, prompt=_('Is this ok [y/N]: '), extra={}):
+ """Get a yes or no from the user, and default to No, and maybe more.
+
+ :param extra: a dict of ui responses to a list of their inputs.
+ :return: the UI response or None for no. At it's simplest this is 'yes' or None
+ """
+
+ # Allow the one letter english versions in all langs.
+ yui = (u'y', to_unicode(_('y')), to_unicode(_('yes')))
+ nui = (u'n', to_unicode(_('n')), to_unicode(_('no')))
+ aui = set(yui + nui)
+ for xui in extra:
+ aui.update(extra[xui])
- 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]: '))
+ choice = raw_input(prompt)
except UnicodeEncodeError:
raise
except UnicodeDecodeError:
@@ -697,17 +988,19 @@ class YumOutput:
choice = choice.lower()
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 yui:
- return False
- else:
- return True
+ if not choice:
+ # Default, maybe configure this?
+ # Would need to never allow default=yes as that's really bad.
+ return None
+
+ if choice in yui:
+ return 'yes'
+ for xui in extra:
+ if choice in extra[xui]:
+ return xui
+
+ return None
def _cli_confirm_gpg_key_import(self, keydict):
# FIXME what should we be printing here?
@@ -739,27 +1032,58 @@ class YumOutput:
return ret
def _calcDataPkgColumns(self, data, pkg_names, pkg_names2pkgs,
- indent=' '):
+ indent=' ', igroup_data=None):
for item in pkg_names:
if item not in pkg_names2pkgs:
continue
for (apkg, ipkg) in pkg_names2pkgs[item]:
pkg = ipkg or apkg
envra = utf8_width(str(pkg)) + utf8_width(indent)
+ if igroup_data:
+ envra += 1
rid = len(pkg.ui_from_repo)
for (d, v) in (('envra', envra), ('rid', rid)):
data[d].setdefault(v, 0)
data[d][v] += 1
def _displayPkgsFromNames(self, pkg_names, verbose, pkg_names2pkgs,
- indent=' ', columns=None):
+ indent=' ', columns=None, igroup_data=None):
+
+ def _get_igrp_data(item, indent):
+ if not igroup_data:
+ return indent
+
+ assert item in igroup_data
+ if item not in igroup_data or igroup_data[item] == 'available':
+ indent += '+' # Group up/in will install i
+ elif igroup_data[item] == 'installed':
+ indent += '=' # Installed via. group
+ elif igroup_data[item] == 'blacklisted-installed':
+ if False: # Not sure it's worth listing these...
+ return None # On the other hand, there's mark-packages
+ indent += ' ' # Installed, not via. group
+ else:
+ assert igroup_data[item] == 'blacklisted-available'
+ if False: # Not sure it's worth listing these...
+ return None
+ indent += '-' # Not installed, and won't be
+ return indent
+
if not verbose:
for item in sorted(pkg_names):
- print '%s%s' % (indent, item)
+ pindent = _get_igrp_data(item, indent)
+ if pindent is None:
+ continue
+
+ print '%s%s' % (pindent, item)
else:
for item in sorted(pkg_names):
+ pindent = _get_igrp_data(item, indent)
+ if pindent is None:
+ continue
+
if item not in pkg_names2pkgs:
- print '%s%s' % (indent, item)
+ print '%s%s' % (pindent, item)
continue
for (apkg, ipkg) in sorted(pkg_names2pkgs[item],
key=lambda x: x[1] or x[0]):
@@ -770,18 +1094,38 @@ class YumOutput:
else:
highlight = False
self.simpleEnvraList(ipkg or apkg, ui_overflow=True,
- indent=indent, highlight=highlight,
+ indent=pindent, highlight=highlight,
columns=columns)
def displayPkgsInGroups(self, group):
+ """Output information about the packages in a given group
+
+ :param group: a Group object to output information about
+ """
print _('\nGroup: %s') % group.ui_name
verb = self.verbose_logger.isEnabledFor(logginglevels.DEBUG_3)
- if verb:
- print _(' Group-Id: %s') % to_unicode(group.groupid)
+ if True:
+ print _(' Group-Id: %s') % to_unicode(group.compsid)
+
+ igroup_data = self._groupInstalledData(group)
+ igrp_only = set()
+ for pkg_name in igroup_data:
+ if igroup_data[pkg_name] == 'installed':
+ igrp_only.add(pkg_name)
+ igrp_only.difference_update(group.packages)
+ all_pkgs = group.packages + list(igrp_only)
+
pkg_names2pkgs = None
if verb:
- pkg_names2pkgs = self._group_names2aipkgs(group.packages)
+ pkg_names2pkgs = self._group_names2aipkgs(all_pkgs)
+ else:
+ pkg_names2pkgs = {}
+ for ipkg in self.rpmdb.searchNames(all_pkgs):
+ if ipkg.name not in pkg_names2pkgs:
+ pkg_names2pkgs[ipkg.name] = []
+ pkg_names2pkgs[ipkg.name].append(ipkg)
+
if group.ui_description:
print _(' Description: %s') % to_unicode(group.ui_description)
if group.langonly:
@@ -795,7 +1139,8 @@ class YumOutput:
if verb:
data = {'envra' : {}, 'rid' : {}}
for (section_name, pkg_names) in sections:
- self._calcDataPkgColumns(data, pkg_names, pkg_names2pkgs)
+ self._calcDataPkgColumns(data, pkg_names, pkg_names2pkgs,
+ igroup_data=igroup_data)
data = [data['envra'], data['rid']]
columns = self.calcColumns(data)
columns = (-columns[0], -columns[1])
@@ -804,11 +1149,77 @@ class YumOutput:
if len(pkg_names) > 0:
print section_name
self._displayPkgsFromNames(pkg_names, verb, pkg_names2pkgs,
- columns=columns)
+ columns=columns,
+ igroup_data=igroup_data)
+ if igrp_only:
+ print _(' Installed Packages:')
+ self._displayPkgsFromNames(igrp_only, verb, pkg_names2pkgs,
+ columns=columns,
+ igroup_data=igroup_data)
+
+ def displayGrpsInEnvironments(self, evgroup):
+ """Output information about the groups in a given evgroup
+
+ :param group: an Environment object to output information about
+ """
+ print _('\nEnvironment Group: %s') % evgroup.ui_name
+ print _(' Environment-Id: %s') % to_unicode(evgroup.compsid)
+
+ igroup_data = self._groupInstalledEnvData(evgroup)
+ igrp_only = set()
+ for grp_name in igroup_data:
+ if igroup_data[grp_name] == 'installed':
+ igrp_only.add(grp_name)
+ igrp_only.difference_update(evgroup.allgroups)
+ all_grps = evgroup.allgroups + list(igrp_only)
+
+ if evgroup.ui_description:
+ print _(' Description: %s') % to_unicode(evgroup.ui_description)
+
+ def _get_igrp_data(item, indent):
+ if not igroup_data:
+ return indent
+
+ assert item in igroup_data
+ if item not in igroup_data or igroup_data[item] == 'available':
+ indent += '+' # Group up/in will install i
+ elif igroup_data[item] == 'installed':
+ indent += '=' # Installed via. group
+ elif igroup_data[item] == 'blacklisted-installed':
+ if False: # Not sure it's worth listing these...
+ return None # On the other hand, there's mark-packages
+ indent += ' ' # Installed, not via. group
+ else:
+ assert igroup_data[item] == 'blacklisted-available'
+ if False: # Not sure it's worth listing these...
+ return None
+ indent += '-' # Not installed, and won't be
+ return indent
+
+ sections = ((_(' Mandatory Groups:'), evgroup.groups),
+ (_(' Optional Groups:'), evgroup.options))
+
+ for (section_name, grp_names) in sections:
+ if len(grp_names) > 0:
+ print section_name
+ for grp_name in sorted(grp_names):
+ pindent = _get_igrp_data(grp_name, " ")
+ if pindent is None:
+ continue
+
+ print "%s%s" % (pindent, grp_name)
+
+ if igrp_only:
+ print _(' Installed Groups:')
+ for grp_name in sorted(igrp_only):
+ print "%s%s", " ", grp_name
def depListOutput(self, results):
- """take a list of findDeps results and 'pretty print' the output"""
-
+ """Format and output a list of findDeps results
+
+ :param results: a list of package dependency information as
+ returned by findDeps
+ """
verb = self.verbose_logger.isEnabledFor(logginglevels.DEBUG_3)
for pkg in sorted(results):
print _("package: %s") % pkg.compactPrint()
@@ -832,7 +1243,18 @@ class YumOutput:
print " provider: %s" % po.compactPrint()
def format_number(self, number, SI=0, space=' '):
- """Turn numbers into human-readable metric-like numbers"""
+ """Return a human-readable metric-like string representation
+ of a number.
+
+ :param number: the number to be converted to a human-readable form
+ :param SI: If is 0, this function will use the convention
+ that 1 kilobyte = 1024 bytes, otherwise, the convention
+ that 1 kilobyte = 1000 bytes will be used
+ :param space: string that will be placed between the number
+ and the SI prefix
+ :return: a human-readable metric-like string representation of
+ *number*
+ """
symbols = [ ' ', # (none)
'k', # kilo
'M', # mega
@@ -870,16 +1292,31 @@ class YumOutput:
@staticmethod
def format_time(seconds, use_hours=0):
+ """Return a human-readable string representation of a number
+ of seconds. The string will show seconds, minutes, and
+ optionally hours.
+
+ :param seconds: the number of seconds to convert to a
+ human-readable form
+ :param use_hours: If use_hours is 0, the representation will
+ be in minutes and seconds. Otherwise, it will be in hours,
+ minutes, and seconds
+ :return: a human-readable string representation of *seconds*
+ """
return urlgrabber.progress.format_time(seconds, use_hours)
def matchcallback(self, po, values, matchfor=None, verbose=None,
highlight=None):
- """ Output search/provides type callback matches. po is the pkg object,
- values are the things in the po that we've matched.
- If matchfor is passed, all the strings in that list will be
- highlighted within the output.
- verbose overrides logginglevel, if passed. """
-
+ """Output search/provides type callback matches.
+
+ :param po: the package object that matched the search
+ :param values: the information associated with *po* that
+ matched the search
+ :param matchfor: a list of strings to be highlighted in the
+ output
+ :param verbose: whether to output extra verbose information
+ :param highlight: highlighting options for the highlighted matches
+ """
if self.conf.showdupesfromrepos:
msg = '%s : ' % po
else:
@@ -923,7 +1360,15 @@ class YumOutput:
item = self._enc(item)
can_overflow = False
else:
- key = _("Other : ")
+ provs = []
+ for prov in po.provides:
+ if prov[0] == item:
+ provs.append(prov)
+ if provs:
+ key = _("Provides : ")
+ item = yum.misc.prco_tuple_to_string(sorted(provs)[0])
+ else:
+ key = _("Other : ")
if matchfor:
item = self._sub_highlight(item, highlight, matchfor,
@@ -935,14 +1380,34 @@ class YumOutput:
print '\n\n'
def matchcallback_verbose(self, po, values, matchfor=None):
+ """Output search/provides type callback matches. This will
+ output more information than :func:`matchcallback`.
+
+ :param po: the package object that matched the search
+ :param values: the information associated with *po* that
+ matched the search
+ :param matchfor: a list of strings to be highlighted in the
+ output
+ """
return self.matchcallback(po, values, matchfor, verbose=True)
def reportDownloadSize(self, packages, installonly=False):
- """Report the total download size for a set of packages"""
+ """Report the total download size for a set of packages
+
+ :param packages: a list of package objects
+ :param installonly: whether the transaction consists only of installations
+ """
totsize = 0
locsize = 0
insize = 0
error = False
+
+ def _call_log(*args):
+ if self.verbose_logger.isEnabledFor(yum.logginglevels.INFO_1):
+ self.verbose_logger.log(logginglevels.INFO_1, *args)
+ elif self.conf.assumeno or not self.conf.assumeyes:
+ self.logger.warn(logginglevels.INFO_1, *args)
+
for pkg in packages:
# Just to be on the safe side, if for some reason getting
# the package size fails, log the error and don't report download
@@ -971,18 +1436,18 @@ class YumOutput:
if (not error):
if locsize:
- self.verbose_logger.log(logginglevels.INFO_1, _("Total size: %s"),
- self.format_number(totsize))
+ _call_log(_("Total size: %s"), self.format_number(totsize))
if locsize != totsize:
- self.verbose_logger.log(logginglevels.INFO_1, _("Total download size: %s"),
- self.format_number(totsize - locsize))
+ _call_log(_("Total download size: %s"),
+ self.format_number(totsize - locsize))
if installonly:
- self.verbose_logger.log(logginglevels.INFO_1,
- _("Installed size: %s"),
- self.format_number(insize))
+ _call_log(_("Installed size: %s"), self.format_number(insize))
def reportRemoveSize(self, packages):
- """Report the total size of packages being removed. """
+ """Report the total size of packages being removed.
+
+ :param packages: a list of package objects
+ """
totsize = 0
error = False
for pkg in packages:
@@ -997,13 +1462,19 @@ class YumOutput:
self.logger.error(_('There was an error calculating installed size'))
break
if (not error):
- self.verbose_logger.log(logginglevels.INFO_1,
- _("Installed size: %s"),
- self.format_number(totsize))
+ if self.verbose_logger.isEnabledFor(yum.logginglevels.INFO_1):
+ self.verbose_logger.log(logginglevels.INFO_1,
+ _("Installed size: %s"),
+ self.format_number(totsize))
+ elif self.conf.assumeno or not self.conf.assumeyes:
+ self.logger.warn(logginglevels.INFO_1,
+ _("Installed size: %s"),
+ self.format_number(totsize))
def listTransaction(self):
- """returns a string rep of the transaction in an easy-to-read way."""
-
+ """Return a string representation of the transaction in an
+ easy-to-read format.
+ """
self.tsInfo.makelists(True, True)
pkglist_lines = []
data = {'n' : {}, 'v' : {}, 'r' : {}}
@@ -1032,8 +1503,7 @@ class YumOutput:
for (d, v) in (("n",len(n)), ("v",len(evr)), ("r",len(repoid))):
data[d].setdefault(v, 0)
data[d][v] += 1
- if a_wid < len(a): # max() is only in 2.5.z
- a_wid = len(a)
+ a_wid = max(a_wid, len(a))
return a_wid
for (action, pkglist) in [(_('Installing'), self.tsInfo.installed),
@@ -1102,19 +1572,72 @@ class YumOutput:
Transaction Summary
%s
""") % ('=' * self.term.columns))
- for action, count in (
- (_('Install'), len(self.tsInfo.installed) + len(self.tsInfo.depinstalled)),
- (_('Upgrade'), len(self.tsInfo.updated) + len(self.tsInfo.depupdated)),
- (_('Remove'), len(self.tsInfo.removed) + len(self.tsInfo.depremoved)),
- (_('Reinstall'), len(self.tsInfo.reinstalled)),
- (_('Downgrade'), len(self.tsInfo.downgraded)),
- ):
- if count: out.append('%-9s %5d %s\n' % (
- action, count, P_('Package', 'Packages', count),
- ))
+ summary_data = (
+ (_('Install'), len(self.tsInfo.installed),
+ len(self.tsInfo.depinstalled)),
+ (_('Upgrade'), len(self.tsInfo.updated),
+ len(self.tsInfo.depupdated)),
+ (_('Remove'), len(self.tsInfo.removed),
+ len(self.tsInfo.depremoved)),
+ (_('Reinstall'), len(self.tsInfo.reinstalled), 0),
+ (_('Downgrade'), len(self.tsInfo.downgraded), 0),
+ (_('Skipped (dependency problems)'), len(self.skipped_packages), 0),
+ (_('Not installed'), len(self._not_found_i.values()), 0),
+ (_('Not available'), len(self._not_found_a.values()), 0),
+ )
+ max_msg_action = 0
+ max_msg_count = 0
+ max_msg_pkgs = 0
+ max_msg_depcount = 0
+ for action, count, depcount in summary_data:
+ if not count and not depcount:
+ continue
+
+ msg_pkgs = P_('Package', 'Packages', count)
+ len_msg_action = utf8_width(action)
+ len_msg_count = utf8_width(str(count))
+ len_msg_pkgs = utf8_width(msg_pkgs)
+
+ if depcount:
+ len_msg_depcount = utf8_width(str(depcount))
+ else:
+ len_msg_depcount = 0
+
+ max_msg_action = max(len_msg_action, max_msg_action)
+ max_msg_count = max(len_msg_count, max_msg_count)
+ max_msg_pkgs = max(len_msg_pkgs, max_msg_pkgs)
+ max_msg_depcount = max(len_msg_depcount, max_msg_depcount)
+
+ for action, count, depcount in summary_data:
+ msg_pkgs = P_('Package', 'Packages', count)
+ if depcount:
+ msg_deppkgs = P_('Dependent package', 'Dependent packages',
+ depcount)
+ if count:
+ msg = '%s %*d %s (+%*d %s)\n'
+ out.append(msg % (utf8_width_fill(action, max_msg_action),
+ max_msg_count, count,
+ utf8_width_fill(msg_pkgs, max_msg_pkgs),
+ max_msg_depcount, depcount, msg_deppkgs))
+ else:
+ msg = '%s %*s %s ( %*d %s)\n'
+ out.append(msg % (utf8_width_fill(action, max_msg_action),
+ max_msg_count, '',
+ utf8_width_fill('', max_msg_pkgs),
+ max_msg_depcount, depcount, msg_deppkgs))
+ elif count:
+ msg = '%s %*d %s\n'
+ out.append(msg % (utf8_width_fill(action, max_msg_action),
+ max_msg_count, count, msg_pkgs))
return ''.join(out)
def postTransactionOutput(self):
+ """Returns a human-readable summary of the results of the
+ transaction.
+
+ :return: a string containing a human-readable summary of the
+ results of the transaction
+ """
out = ''
self.tsInfo.makelists()
@@ -1179,17 +1702,19 @@ Transaction Summary
return out
def setupProgressCallbacks(self):
- """sets up the progress callbacks and various
- output bars based on debug level"""
-
+ """Set up the progress callbacks and various
+ output bars based on debug level.
+ """
# if we're below 2 on the debug level we don't need to be outputting
# progress bars - this is hacky - I'm open to other options
# One of these is a download
if self.conf.debuglevel < 2 or not sys.stdout.isatty():
progressbar = None
+ multi_progressbar = None
callback = None
else:
progressbar = YumTextMeter(fo=sys.stdout)
+ multi_progressbar = YumTextMultiFileMeter(fo=sys.stdout)
callback = CacheProgressCallback()
# setup our failure report for failover
@@ -1200,13 +1725,14 @@ Transaction Summary
interrupt_callback = self.interrupt_callback
if hasattr(self, 'prerepoconf'):
self.prerepoconf.progressbar = progressbar
+ self.prerepoconf.multi_progressbar = multi_progressbar
self.prerepoconf.callback = callback
self.prerepoconf.failure_callback = failure_callback
self.prerepoconf.interrupt_callback = interrupt_callback
else:
# Just in case some API user decides to do self.repos before
# calling us.
- self.repos.setProgressBar(progressbar)
+ self.repos.setProgressBar(progressbar, multi_progressbar)
self.repos.callback = callback
self.repos.setFailureCallback(failure_callback)
self.repos.setInterruptCallback(interrupt_callback)
@@ -1216,10 +1742,12 @@ Transaction Summary
self.dsCallback = dscb
def setupProgessCallbacks(self):
- # api purposes only to protect the typo
+ """This function is for API purposes only to protect the typo."""
self.setupProgressCallbacks()
def setupKeyImportCallbacks(self):
+ """Set up callbacks to import and confirm gpg public keys."""
+
confirm_func = self._cli_confirm_gpg_key_import
gpg_import_func = self.getKeyForRepo
gpgca_import_func = self.getCAKeyForRepo
@@ -1233,14 +1761,12 @@ Transaction Summary
self.repos.gpgca_import_func = gpgca_import_func
def interrupt_callback(self, cbobj):
- '''Handle CTRL-C's during downloads
+ '''Handle CTRL-C's during downloads. If a CTRL-C occurs a
+ URLGrabError will be raised to push the download onto the next
+ mirror. If two CTRL-C's occur in quick succession then yum
+ will exit.
- If a CTRL-C occurs a URLGrabError will be raised to push the download
- onto the next mirror.
-
- If two CTRL-C's occur in quick succession then yum will exit.
-
- @param cbobj: urlgrabber callback obj
+ :param cbobj: :class:`urlgrabber.grabber.CallbackObject`
'''
delta_exit_chk = 2.0 # Delta between C-c's so we treat as exit
delta_exit_str = _("two") # Human readable version of above
@@ -1253,7 +1779,7 @@ Transaction Summary
# For translators: This is output like:
# Current download cancelled, interrupt (ctrl-c) again within two seconds
# to exit.
- # Where "interupt (ctrl-c) again" and "two" are highlighted.
+ # Where "interrupt (ctrl-c) again" and "two" are highlighted.
msg = _("""
Current download cancelled, %sinterrupt (ctrl-c) again%s within %s%s%s seconds
to exit.
@@ -1269,6 +1795,14 @@ to exit.
def download_callback_total_cb(self, remote_pkgs, remote_size,
download_start_timestamp):
+ """Outputs summary information about the download process.
+
+ :param remote_pkgs: a list of package objects that were downloaded
+ :param remote_size: the total amount of information that was
+ downloaded, in bytes
+ :param download_start_timestamp: the time when the download
+ process started, in seconds since the epoch
+ """
if len(remote_pkgs) <= 1:
return
if not hasattr(urlgrabber.progress, 'TerminalLine'):
@@ -1434,10 +1968,21 @@ to exit.
return tids, printall
def historyListCmd(self, extcmds):
- """ Shows the user a list of data about the history. """
+ """Output a list of information about the history of yum
+ transactions.
+
+ :param extcmds: list of extra command line arguments
+ :return: (exit_code, [errors])
+ exit_code is::
+
+ 0 = we're done, exit
+ 1 = we've errored, exit with error string
+ """
tids, printall = self._history_list_transactions(extcmds)
if tids is None:
+ if not extcmds: # This is not a real error...
+ return 0, ['No accessible history to list']
return 1, ['Failed history list']
limit = 20
@@ -1564,6 +2109,16 @@ to exit.
return old[0]
def historyInfoCmd(self, extcmds):
+ """Output information about a transaction in history
+
+ :param extcmds: list of extra command line arguments
+ :return: (exit_code, [errors])
+
+ exit_code is::
+
+ 0 = we're done, exit
+ 1 = we've errored, exit with error string
+ """
def str2int(x):
try:
return int(x)
@@ -1656,6 +2211,9 @@ to exit.
def _hpkg2from_repo(self, hpkg):
""" Given a pkg, find the ipkg.ui_from_repo ... if none, then
get an apkg. ... and put a ? in there. """
+ if 'from_repo' in hpkg.yumdb_info:
+ return hpkg.ui_from_repo
+
ipkgs = self.rpmdb.searchPkgTuple(hpkg.pkgtup)
if not ipkgs:
apkgs = self.pkgSack.searchPkgTuple(hpkg.pkgtup)
@@ -1672,13 +2230,12 @@ to exit.
'o' : _('Updated'), 'n' : _('Downgraded')}
_pkg_states_available = {'i' : _('Installed'), 'e' : _('Not installed'),
'o' : _('Older'), 'n' : _('Newer')}
- # max() only in 2.5.z
- maxlen = sorted([len(x) for x in (_pkg_states_installed.values() +
- _pkg_states_available.values())])[-1]
+ maxlen = max([len(x) for x in (_pkg_states_installed.values() +
+ _pkg_states_available.values())])
_pkg_states_installed['maxlen'] = maxlen
_pkg_states_available['maxlen'] = maxlen
def _simple_pkg(pkg, prefix_len, was_installed=False, highlight=False,
- pkg_max_len=0):
+ pkg_max_len=0, show_repo=True):
prefix = " " * prefix_len
if was_installed:
_pkg_states = _pkg_states_installed
@@ -1702,9 +2259,11 @@ to exit.
else:
(hibeg, hiend) = self._highlight('normal')
state = utf8_width_fill(state, _pkg_states['maxlen'])
+ ui_repo = ''
+ if show_repo:
+ ui_repo = self._hpkg2from_repo(hpkg)
print "%s%s%s%s %-*s %s" % (prefix, hibeg, state, hiend,
- pkg_max_len, hpkg,
- self._hpkg2from_repo(hpkg))
+ pkg_max_len, hpkg, ui_repo)
if type(old.tid) == type([]):
print _("Transaction ID :"), "%u..%u" % (old.tid[0], old.tid[-1])
@@ -1778,8 +2337,8 @@ to exit.
default_addons = set(['config-main', 'config-repos', 'saved_tx'])
non_default = set(addon_info).difference(default_addons)
if len(non_default) > 0:
- print _("Additional non-default information stored: %d"
- % len(non_default))
+ print _("Additional non-default information stored: %d"
+ % len(non_default))
if old.trans_with:
# This is _possible_, but not common
@@ -1794,7 +2353,9 @@ to exit.
print _("Packages Skipped:")
pkg_max_len = max((len(str(hpkg)) for hpkg in old.trans_skip))
for hpkg in old.trans_skip:
- _simple_pkg(hpkg, 4, pkg_max_len=pkg_max_len)
+ # Don't show the repo. here because we can't store it as they were,
+ # by definition, not installed.
+ _simple_pkg(hpkg, 4, pkg_max_len=pkg_max_len, show_repo=False)
if old.rpmdb_problems:
print _("Rpmdb Problems:")
@@ -1833,6 +2394,13 @@ to exit.
'Updated' : _('Updated'),
}
def historyInfoCmdPkgsAltered(self, old, pats=[]):
+ """Print information about how packages are altered in a transaction.
+
+ :param old: the :class:`history.YumHistoryTransaction` to
+ print information about
+ :param pats: a list of patterns. Packages that match a patten
+ in *pats* will be highlighted in the output
+ """
last = None
# Note that these don't use _simple_pkg() because we are showing what
# happened to them in the transaction ... not the difference between the
@@ -1886,6 +2454,10 @@ to exit.
self._hpkg2from_repo(hpkg))
def historySummaryCmd(self, extcmds):
+ """Print a summary of transactions in history.
+
+ :param extcmds: list of extra command line arguments
+ """
tids, printall = self._history_list_transactions(extcmds)
if tids is None:
return 1, ['Failed history info']
@@ -1946,6 +2518,10 @@ to exit.
utf8_width_fill(uiacts, 16, 16), count)
def historyAddonInfoCmd(self, extcmds):
+ """Print addon information about transaction in history.
+
+ :param extcmds: list of extra command line arguments
+ """
tid = None
if len(extcmds) > 1:
tid = extcmds[1]
@@ -1983,16 +2559,19 @@ to exit.
for item in extcmds[2:]:
if item in addon_info:
- print '%s:' % item
- print self.history.return_addon_data(hist_data.tid, item)
+ self.verbose_logger.log(logginglevels.INFO_2, '%s:', item)
+ print self.history.return_addon_data(hist_data.tid, item),
+ self.verbose_logger.log(logginglevels.INFO_2, '')
else:
print _('%s: No additional data found by this name') % item
-
- print ''
+ self.verbose_logger.log(logginglevels.INFO_2, '')
def historyPackageListCmd(self, extcmds):
- """ Shows the user a list of data about the history, from the point
- of a package(s) instead of via. transactions. """
+ """Print a list of information about transactions from history
+ that involve the given package or packages.
+
+ :param extcmds: list of extra command line arguments
+ """
tids = self.history.search(extcmds)
limit = None
if extcmds and not tids:
@@ -2078,9 +2657,94 @@ to exit.
if lastdbv.end_rpmdbversion != rpmdbv:
self._rpmdb_warn_checks()
+ def historyPackageInfoCmd(self, extcmds):
+ """Print information about packages in history transactions.
+
+ :param extcmds: list of extra command line arguments
+ """
+ tids = self.history.search(extcmds)
+ limit = None
+ if extcmds and not tids:
+ self.logger.critical(_('Bad transaction IDs, or package(s), given'))
+ return 1, ['Failed history packages-info']
+ if not tids:
+ limit = 20
+
+ all_uistates = self._history_state2uistate
+
+ num = 0
+ for old in self.history.old(tids, limit=limit):
+ if limit is not None and num and (num +len(old.trans_data)) > limit:
+ break
+
+ for hpkg in old.trans_data: # Find a pkg to go with each cmd...
+ if limit is None:
+ x,m,u = yum.packages.parsePackages([hpkg], extcmds)
+ if not x and not m:
+ continue
+
+ uistate = all_uistates.get(hpkg.state, hpkg.state)
+ if num:
+ print ""
+ print _("Transaction ID :"), old.tid
+ tm = time.ctime(old.beg_timestamp)
+ print _("Begin time :"), tm
+ print _("Package :"), hpkg.ui_nevra
+ print _("State :"), uistate
+ if hpkg.size is not None:
+ num = int(hpkg.size)
+ print _("Size :"), locale.format("%d", num, True)
+ if hpkg.buildhost is not None:
+ print _("Build host :"), hpkg.buildhost
+ if hpkg.buildtime is not None:
+ tm = time.ctime(int(hpkg.buildtime))
+ print _("Build time :"), tm
+ if hpkg.packager is not None:
+ print _("Packager :"), hpkg.packager
+ if hpkg.vendor is not None:
+ print _("Vendor :"), hpkg.vendor
+ if hpkg.license is not None:
+ print _("License :"), hpkg.license
+ if hpkg.url is not None:
+ print _("URL :"), hpkg.url
+ if hpkg.sourcerpm is not None:
+ print _("Source RPM :"), hpkg.sourcerpm
+ if hpkg.committime is not None:
+ tm = time.ctime(int(hpkg.committime))
+ print _("Commit Time :"), tm
+ if hpkg.committer is not None:
+ print _("Committer :"), hpkg.committer
+ if hpkg.yumdb_info.reason is not None:
+ print _("Reason :"), hpkg.yumdb_info.reason
+ if hpkg.yumdb_info.command_line is not None:
+ print _("Command Line :"), hpkg.yumdb_info.command_line
+ if hpkg.yumdb_info.from_repo is not None:
+ print _("From repo :"), hpkg.yumdb_info.from_repo
+ if hpkg.yumdb_info.installed_by is not None:
+ uid = int(hpkg.yumdb_info.installed_by)
+ name = self._pwd_ui_username(uid)
+ print _("Installed by :"), name
+ if hpkg.yumdb_info.changed_by is not None:
+ uid = int(hpkg.yumdb_info.changed_by)
+ name = self._pwd_ui_username(uid)
+ print _("Changed by :"), name
+
+ num += 1
+
+ # And, again, copy and paste...
+ lastdbv = self.history.last()
+ if lastdbv is None:
+ self._rpmdb_warn_checks(warn=False)
+ else:
+ # If this is the last transaction, is good and it doesn't
+ # match the current rpmdb ... then mark it as bad.
+ rpmdbv = self.rpmdb.simpleVersion(main_only=True)[0]
+ if lastdbv.end_rpmdbversion != rpmdbv:
+ self._rpmdb_warn_checks()
+
class DepSolveProgressCallBack:
- """provides text output callback functions for Dependency Solver callback"""
+ """A class to provide text output callback functions for Dependency Solver callback."""
def __init__(self, ayum=None):
"""requires yum-cli log and errorlog functions as arguments"""
@@ -2089,6 +2753,25 @@ class DepSolveProgressCallBack:
self.ayum = ayum
def pkgAdded(self, pkgtup, mode):
+ """Print information about a package being added to the
+ transaction set.
+
+ :param pkgtup: tuple containing the package name, arch,
+ version, and repository
+ :param mode: a short string indicating why the package is
+ being added to the transaction set.
+
+ Valid current values for *mode* are::
+
+ i = the package will be installed
+ u = the package will be an update
+ e = the package will be erased
+ r = the package will be reinstalled
+ d = the package will be a downgrade
+ o = the package will be obsoleting another package
+ ud = the package will be updated
+ od = the package will be obsoleted
+ """
modedict = { 'i': _('installed'),
'u': _('an update'),
'e': _('erased'),
@@ -2104,43 +2787,86 @@ class DepSolveProgressCallBack:
modeterm)
def start(self):
+ """Perform setup at the beginning of the dependency solving
+ process.
+ """
self.loops += 1
def tscheck(self):
+ """Output a message stating that a transaction check is beginning."""
self.verbose_logger.log(logginglevels.INFO_2, _('--> Running transaction check'))
def restartLoop(self):
+ """Output a message stating that dependency resolution is restarting."""
self.loops += 1
self.verbose_logger.log(logginglevels.INFO_2,
_('--> Restarting Dependency Resolution with new changes.'))
self.verbose_logger.debug('---> Loop Number: %d', self.loops)
def end(self):
+ """Output a message stating that dependency resolution has finished."""
self.verbose_logger.log(logginglevels.INFO_2,
_('--> Finished Dependency Resolution'))
def procReq(self, name, formatted_req):
+ """Output a message stating that the package *formatted_req*
+ is being processed as a dependency for the package *name*.
+
+ :param name: the name of the package that *formatted_req* is a
+ dependency of
+ :param formatted_req: a string representing the package that
+ is being processed as a dependency of *name*
+ """
self.verbose_logger.log(logginglevels.INFO_2,
_('--> Processing Dependency: %s for package: %s'), formatted_req,
name)
def procReqPo(self, po, formatted_req):
+ """Output a message stating that the package *formatted_req*
+ is being processed as a dependency for the package *po*.
+
+ :param po: the package object that *formatted_req* is a
+ dependency of
+ :param formatted_req: a string representing the package that
+ is being processed as a dependency of *po*
+ """
self.verbose_logger.log(logginglevels.INFO_2,
_('--> Processing Dependency: %s for package: %s'), formatted_req,
po)
- def groupRemoveReq(self, po, hits):
+ def removeReq(self, po, deppo, hits):
+ """Output a message stating that the given package will not be
+ removed. This method is used during leaf-only group remove, leaf-only
+ repo-pkg remove and normal remove commands to indicate that the
+ package will be kept.
+
+ :param po: the :class:`yum.packages.PackageObject` that will
+ not be removed
+ :param hits: unused
+ """
self.verbose_logger.log(logginglevels.INFO_2,
- _('---> Keeping package: %s'), po)
+ _('---> Keeping package: %s due to %s'), po, deppo)
def unresolved(self, msg):
+ """Output a message stating that there is an unresolved
+ dependency.
+
+ :param msg: string giving information about the unresolved
+ dependency
+ """
self.verbose_logger.log(logginglevels.INFO_2, _('--> Unresolved Dependency: %s'),
msg)
def format_missing_requires(self, reqPo, reqTup):
- """ Create a message for errorlist, non-cli users could also store this
- data somewhere and not print errorlist. """
+ """Return an error message stating that a package required to
+ fulfill a dependency is missing.
+
+ :param reqPo: the package object that has a dependency that
+ cannot be fulfilled
+ :param reqTup: the name, flags, and version of the package
+ needed to fulfil the dependency
+ """
needname, needflags, needversion = reqTup
yb = self.ayum
@@ -2164,6 +2890,18 @@ class DepSolveProgressCallBack:
done = True
msg += _('\n %s') % yum.misc.prco_tuple_to_string(pkgtup)
if not done:
+ nneedname = needname.translate(None, "0123456789")
+ if nneedname != needname:
+ # Sometimes things change numbers, so compare without.
+ # Eg. libXYZ.so.0() libXYZ.so.1()
+ for pkgtup in pkg.provides:
+ name = pkgtup[0]
+ name = name.translate(None, "0123456789")
+ if name == nneedname:
+ done = True
+ pkgtup = yum.misc.prco_tuple_to_string(pkgtup)
+ msg += _('\n ~%s') % pkgtup
+ if not done:
msg += _('\n Not found')
return msg
@@ -2225,46 +2963,106 @@ class DepSolveProgressCallBack:
return msg
def procConflict(self, name, confname):
+ """Print a message stating that two packages in the
+ transaction conflict.
+
+ :param name: the name of the first package involved in the
+ conflict
+ :param confname: the name of the second package involved in
+ the conflict
+ """
self.verbose_logger.log(logginglevels.INFO_2,
_('--> Processing Conflict: %s conflicts %s'),
name, confname)
def procConflictPo(self, po, confname):
+ """Print a message stating that two packages in the
+ transaction conflict.
+
+ :param name: the first package object involved in the
+ conflict
+ :param confname: the second package object involved in
+ the conflict
+ """
self.verbose_logger.log(logginglevels.INFO_2,
_('--> Processing Conflict: %s conflicts %s'),
po, confname)
def transactionPopulation(self):
+ """Output a message stating that the transaction set is being populated."""
+
self.verbose_logger.log(logginglevels.INFO_2, _('--> Populating transaction set '
'with selected packages. Please wait.'))
def downloadHeader(self, name):
+ """Output a message stating that the header for the given
+ package is being downloaded.
+
+ :param name: the name of the package
+ """
self.verbose_logger.log(logginglevels.INFO_2, _('---> Downloading header for %s '
'to pack into transaction set.'), name)
class CacheProgressCallback:
+ """A class to handle text output callbacks during metadata cache updates."""
- '''
- The class handles text output callbacks during metadata cache updates.
- '''
-
def __init__(self):
self.logger = logging.getLogger("yum.cli")
self.verbose_logger = logging.getLogger("yum.verbose.cli")
self.file_logger = logging.getLogger("yum.filelogging.cli")
def log(self, level, message):
+ """Output a log message.
+
+ :param level: the logging level for the message
+ :param message: the message
+ """
self.verbose_logger.log(level, message)
def errorlog(self, level, message):
+ """Output an errorlog message.
+
+ :param level: the logging level for the message
+ :param message: the message
+ """
self.logger.log(level, message)
def filelog(self, level, message):
+ """Output a file log message.
+
+ :param level: the logging level for the message
+ :param message: the message
+ """
self.file_logger.log(level, message)
def progressbar(self, current, total, name=None):
- progressbar(current, total, name)
+ """Output the current status to the terminal using a progress
+ status bar.
+
+ :param current: a number representing the amount of work
+ already done
+ :param total: a number representing the total amount of work
+ to be done
+ :param name: a name to label the progress bar with
+ """
+ # We can easily have 10k+ packages in a repo. and we don't want to
+ # output 80 * 10k lines to the screen, esp. when the user probably
+ # doesn't care about 10k updates ... some serial consoles also get
+ # really unhappy, as they can't deal with the IO fast enough.
+ num_outputs = 200
+ output = False
+ opc = total / num_outputs
+ if opc <= 1:
+ output = True
+ elif current <= 1:
+ output = True # output the beginning
+ elif current == total:
+ output = True # output the end
+ elif not (current % opc):
+ output = True
+ if output:
+ progressbar(current, total, name)
def _pkgname_ui(ayum, pkgname, ts_states=None):
""" Get more information on a simple pkgname, if we can. We need to search
@@ -2316,10 +3114,7 @@ def _pkgname_ui(ayum, pkgname, ts_states=None):
return pkgname
class YumCliRPMCallBack(RPMBaseCallback):
-
- """
- Yum specific callback class for RPM operations.
- """
+ """A Yum specific callback class for RPM operations."""
width = property(lambda x: _term_width())
@@ -2337,21 +3132,34 @@ class YumCliRPMCallBack(RPMBaseCallback):
# Installing things have pkg objects passed to the events, so only need to
# lookup for erased/obsoleted.
def pkgname_ui(self, pkgname, ts_states=('e', 'od', 'ud', None)):
- """ Get more information on a simple pkgname, if we can. """
+ """Return more information on a simple pkgname, if possible.
+
+ :param pkgname: the name of the package to find information about
+ :param ts_states: a tuple containing the states where the
+ package might be found
+ """
return _pkgname_ui(self.ayum, pkgname, ts_states)
def event(self, package, action, te_current, te_total, ts_current, ts_total):
- # this is where a progress bar would be called
+ """Output information about an rpm operation. This may
+ include a text progress bar.
+
+ :param package: the package involved in the event
+ :param action: the type of action that is taking place. Valid
+ values are given by
+ :func:`rpmtrans.RPMBaseCallback.action.keys()`
+ :param te_current: a number representing the amount of work
+ already done in the current transaction
+ :param te_total: a number representing the total amount of work
+ to be done in the current transaction
+ :param ts_current: the number of the current transaction in
+ transaction set
+ :param ts_total: the total number of transactions in the
+ transaction set
+ """
process = self.action[action]
- if not hasattr(self, '_max_action_wid'):
- wid1 = 0
- for val in self.action.values():
- wid_val = utf8_width(val)
- if wid1 < wid_val:
- wid1 = wid_val
- self._max_action_wid = wid1
- wid1 = self._max_action_wid
+ wid1 = self._max_action_width()
if type(package) not in types.StringTypes:
pkgname = str(package)
@@ -2363,9 +3171,25 @@ class YumCliRPMCallBack(RPMBaseCallback):
percent = 0
else:
percent = (te_current*100L)/te_total
-
+ self._out_event(te_current, te_total, ts_current, ts_total,
+ percent, process, pkgname, wid1)
+
+ def _max_action_width(self):
+ if not hasattr(self, '_max_action_wid_cache'):
+ wid1 = 0
+ for val in self.action.values():
+ wid_val = utf8_width(val)
+ if wid1 < wid_val:
+ wid1 = wid_val
+ self._max_action_wid_cache = wid1
+ wid1 = self._max_action_wid_cache
+ return wid1
+
+ def _out_event(self, te_current, te_total, ts_current, ts_total,
+ percent, process, pkgname, wid1):
if self.output and (sys.stdout.isatty() or te_current == te_total):
(fmt, wid1, wid2) = self._makefmt(percent, ts_current, ts_total,
+ progress=sys.stdout.isatty(),
pkgname=pkgname, wid1=wid1)
msg = fmt % (utf8_width_fill(process, wid1, wid1),
utf8_width_fill(pkgname, wid2, wid2))
@@ -2377,6 +3201,11 @@ class YumCliRPMCallBack(RPMBaseCallback):
print " "
def scriptout(self, package, msgs):
+ """Print messages originating from a package script.
+
+ :param package: unused
+ :param msgs: the messages coming from the script
+ """
if msgs:
sys.stdout.write(to_unicode(msgs))
sys.stdout.flush()
@@ -2396,7 +3225,7 @@ class YumCliRPMCallBack(RPMBaseCallback):
pnl = utf8_width(pkgname)
overhead = (2 * l) + 2 # Length of done, above
- overhead += 2+ wid1 +2 # Length of begining (" " action " :")
+ overhead += 2+ wid1 +2 # Length of beginning (" " action " :")
overhead += 1 # Space between pn and done
overhead += 2 # Ends for progress
overhead += 1 # Space for end
@@ -2429,8 +3258,30 @@ class YumCliRPMCallBack(RPMBaseCallback):
wid2 = pnl
return fmt, wid1, wid2
+ def verify_txmbr(self, base, txmbr, count):
+ " Callback for post transaction when we are in verifyTransaction(). "
+ te_current = count
+ te_total = len(base.tsInfo)
+ # self.event(txmbr.name, count, len(base.tsInfo), count, )
+
+ percent = 100 # (te_current*100L)/te_total
+ process = _('Verifying')
+ pkgname = str(txmbr.po)
+ wid1 = max(utf8_width(process), self._max_action_width())
+ self._out_event(100, 100, te_current, te_total,
+ percent, process, pkgname, wid1)
+
def progressbar(current, total, name=None):
+ """Output the current status to the terminal using a simple
+ text progress bar consisting of 50 # marks.
+
+ :param current: a number representing the amount of work
+ already done
+ :param total: a number representing the total amount of work
+ to be done
+ :param name: a name to label the progress bar with
+ """
"""simple progress bar 50 # marks"""
mark = '#'
diff --git a/po/bg.po b/po/bg.po
new file mode 100644
index 0000000..7889293
--- /dev/null
+++ b/po/bg.po
@@ -0,0 +1,3506 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Valentin Laskov <laskov@festa.bg>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: Yum\n"
+"Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n"
+"POT-Creation-Date: 2013-01-30 09:08-0500\n"
+"PO-Revision-Date: 2013-01-30 14:08+0000\n"
+"Last-Translator: james <james@fedoraproject.org>\n"
+"Language-Team: Bulgarian (http://www.transifex.com/projects/p/yum/language/bg/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: bg\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../callback.py:45 ../output.py:1502 ../yum/rpmtrans.py:73
+msgid "Updating"
+msgstr "Обновяване"
+
+#: ../callback.py:46 ../yum/rpmtrans.py:74
+msgid "Erasing"
+msgstr "Изтриване"
+
+#: ../callback.py:47 ../callback.py:48 ../callback.py:50 ../output.py:1501
+#: ../output.py:2922 ../yum/rpmtrans.py:75 ../yum/rpmtrans.py:76
+#: ../yum/rpmtrans.py:78
+msgid "Installing"
+msgstr "Инсталиране"
+
+#: ../callback.py:49 ../callback.py:55 ../output.py:2379 ../yum/rpmtrans.py:77
+msgid "Obsoleted"
+msgstr "Излязъл от употреба"
+
+#: ../callback.py:51 ../output.py:1670 ../output.py:2222 ../output.py:2386
+msgid "Updated"
+msgstr "Обновен"
+
+#: ../callback.py:52 ../output.py:2221
+msgid "Erased"
+msgstr "Изтрит"
+
+#: ../callback.py:53 ../callback.py:54 ../callback.py:56 ../output.py:1668
+#: ../output.py:2221 ../output.py:2223 ../output.py:2894
+msgid "Installed"
+msgstr "Инсталиран"
+
+#: ../callback.py:142
+msgid "No header - huh?"
+msgstr "Няма заглавна част, уф?"
+
+#: ../callback.py:180
+msgid "Repackage"
+msgstr "Препакетиране"
+
+#: ../callback.py:201
+#, python-format
+msgid "Error: invalid output state: %s for %s"
+msgstr "Грешка: невалидно изходно състояние: %s за %s"
+
+#: ../callback.py:224
+#, python-format
+msgid "Erased: %s"
+msgstr "Изтрит: %s"
+
+#: ../callback.py:229 ../output.py:1503 ../output.py:2897
+msgid "Removing"
+msgstr "Премахване"
+
+#: ../callback.py:231 ../yum/rpmtrans.py:79
+msgid "Cleanup"
+msgstr "Почистване"
+
+#: ../cli.py:122
+#, python-format
+msgid "Command \"%s\" already defined"
+msgstr "Командата \"%s\" е вече дефинирана"
+
+#: ../cli.py:137
+msgid "Setting up repositories"
+msgstr "Задаване на хранилища"
+
+#: ../cli.py:148
+msgid "Reading repository metadata in from local files"
+msgstr "Четене метаданни на хранилища от локални файлове"
+
+#: ../cli.py:273 ../cli.py:277 ../utils.py:320
+#, python-format
+msgid "Config Error: %s"
+msgstr "Грешка в конфига: %s"
+
+#: ../cli.py:280 ../cli.py:2206 ../utils.py:323
+#, python-format
+msgid "Options Error: %s"
+msgstr "Грешка в опции: %s"
+
+#: ../cli.py:327
+#, python-format
+msgid " Installed: %s-%s at %s"
+msgstr " Инсталирани: %s-%s на %s"
+
+#: ../cli.py:329
+#, python-format
+msgid " Built : %s at %s"
+msgstr " Построен : %s на %s"
+
+#: ../cli.py:331
+#, python-format
+msgid " Committed: %s at %s"
+msgstr " Подаден: %s на %s"
+
+#: ../cli.py:372
+msgid "You need to give some command"
+msgstr "Трябва да зададете някаква команда"
+
+#: ../cli.py:386
+#, python-format
+msgid "No such command: %s. Please use %s --help"
+msgstr "Няма такава команда: %s. Моля, ползвайте %s --help"
+
+#: ../cli.py:444
+msgid "Disk Requirements:\n"
+msgstr "Изисквания за пространство:\n"
+
+#: ../cli.py:446
+#, python-format
+msgid " At least %dMB more space needed on the %s filesystem.\n"
+msgid_plural " At least %dMB more space needed on the %s filesystem.\n"
+msgstr[0] " Поне още %dMB пространство е нужен във файловата система %s\n"
+msgstr[1] " Поне още %dMB пространство са нужни във файловата система %s\n"
+
+#. TODO: simplify the dependency errors?
+#. Fixup the summary
+#: ../cli.py:451
+msgid ""
+"Error Summary\n"
+"-------------\n"
+msgstr "Обобщение на грешките\n---------------------\n"
+
+#: ../cli.py:472
+msgid "Can't create lock file; exiting"
+msgstr "Не мога да създам заключващ файл; излизам"
+
+#: ../cli.py:479
+msgid ""
+"Another app is currently holding the yum lock; exiting as configured by "
+"exit_on_lock"
+msgstr "Друго приложение ползва и е заключило yum; излизам - конфигурирано е exit_on_lock"
+
+#: ../cli.py:532
+msgid "Trying to run the transaction but nothing to do. Exiting."
+msgstr "Опитвам да стартирам транзакцията, но няма нищо за правене. Излизам."
+
+#: ../cli.py:577
+msgid "future rpmdb ver mismatched saved transaction version,"
+msgstr ""
+
+#: ../cli.py:579 ../yum/__init__.py:6523
+msgid " ignoring, as requested."
+msgstr " игнорирам, както е зададено."
+
+#: ../cli.py:582 ../yum/__init__.py:6526 ../yum/__init__.py:6673
+msgid " aborting."
+msgstr " прекратявам."
+
+#: ../cli.py:588
+msgid "Exiting on user Command"
+msgstr "Излизане по команда от потребителя"
+
+#: ../cli.py:592
+msgid "Downloading Packages:"
+msgstr "Сваляне на пакети:"
+
+#: ../cli.py:597
+msgid "Error Downloading Packages:\n"
+msgstr "Грешка при сваляне на пакети:\n"
+
+#: ../cli.py:616 ../yum/__init__.py:6215
+msgid "Running Transaction Check"
+msgstr "Извършва се проверка на транзакцията"
+
+#: ../cli.py:625 ../yum/__init__.py:6224
+msgid "ERROR You need to update rpm to handle:"
+msgstr "ГРЕШКА трябва да обновите rpm за да обработя:"
+
+#: ../cli.py:627 ../yum/__init__.py:6227
+msgid "ERROR with transaction check vs depsolve:"
+msgstr "ГРЕШКА в проверката на транзакцията спрямо разрешаването на зависимостите:"
+
+#: ../cli.py:633
+msgid "RPM needs to be updated"
+msgstr "RPM трябва да се обнови"
+
+#: ../cli.py:634
+#, python-format
+msgid "Please report this error in %s"
+msgstr "Моля, докладвайте тази грешка в %s"
+
+#: ../cli.py:640
+msgid "Running Transaction Test"
+msgstr "Провежда се тестова транзакция"
+
+#: ../cli.py:652
+msgid "Transaction Check Error:\n"
+msgstr "Грешка в проверката на транзакция:\n"
+
+#: ../cli.py:659
+msgid "Transaction Test Succeeded"
+msgstr "Тестовата транзакция е успешна"
+
+#: ../cli.py:691
+msgid "Running Transaction"
+msgstr "Транзакцията е в ход"
+
+#: ../cli.py:724
+msgid ""
+"Refusing to automatically import keys when running unattended.\n"
+"Use \"-y\" to override."
+msgstr "Отказ от автоматичен импорт на ключове при работа без надзор.\nЗа пренебрегване, ползвайте \"-y\"."
+
+#: ../cli.py:743 ../cli.py:786
+msgid " * Maybe you meant: "
+msgstr " * Може би имате предвид: "
+
+#: ../cli.py:769 ../cli.py:777
+#, python-format
+msgid "Package(s) %s%s%s available, but not installed."
+msgstr "Пакет(и) %s%s%s са налични, но не са инсталирани."
+
+#: ../cli.py:783 ../cli.py:891 ../cli.py:1158
+#, python-format
+msgid "No package %s%s%s available."
+msgstr "Няма наличен пакет %s%s%s."
+
+#: ../cli.py:871 ../cli.py:881 ../cli.py:1101 ../cli.py:1111
+#, python-format
+msgid "Bad %s argument %s."
+msgstr ""
+
+#: ../cli.py:900 ../yumcommands.py:3331
+#, python-format
+msgid "%d package to install"
+msgid_plural "%d packages to install"
+msgstr[0] "%d пакет за инсталиране"
+msgstr[1] "%d пакета за инсталиране"
+
+#: ../cli.py:903 ../cli.py:904 ../cli.py:1169 ../cli.py:1170 ../cli.py:1224
+#: ../cli.py:1225 ../cli.py:1260 ../yumcommands.py:323 ../yumcommands.py:3419
+msgid "Nothing to do"
+msgstr "Нищо за правене"
+
+#: ../cli.py:953
+#, python-format
+msgid "%d package marked for Update"
+msgid_plural "%d packages marked for Update"
+msgstr[0] "%d пакет, маркиран за обновяване"
+msgstr[1] "%d пакета, маркирани за обновяване"
+
+#: ../cli.py:955
+msgid "No Packages marked for Update"
+msgstr "Няма пакети, маркирани за обновяване"
+
+#: ../cli.py:1067
+#, python-format
+msgid "%d package marked for Distribution Synchronization"
+msgid_plural "%d packages marked for Distribution Synchronization"
+msgstr[0] "%d пакет, маркиран за синхронизиране на дистрибуцията"
+msgstr[1] "%d пакета, маркирани за синхронизиране на дистрибуцията"
+
+#: ../cli.py:1069
+msgid "No Packages marked for Distribution Synchronization"
+msgstr "Няма пакети, маркирани за синхронизация на дистрибуцията"
+
+#: ../cli.py:1124
+#, python-format
+msgid "%d package marked for removal"
+msgid_plural "%d packages marked for removal"
+msgstr[0] "%d пакет, маркиран за премахване"
+msgstr[1] "%d пакета, маркирани за премахване"
+
+#: ../cli.py:1126
+msgid "No Packages marked for removal"
+msgstr "Няма пакети, маркирани за премахване"
+
+#: ../cli.py:1166
+#, python-format
+msgid "%d package to downgrade"
+msgid_plural "%d packages to downgrade"
+msgstr[0] "%d пакет за връщане към предишна версия"
+msgstr[1] "%d пакета за връщане към предишна версия"
+
+#: ../cli.py:1207
+#, python-format
+msgid " (from %s)"
+msgstr " (от %s)"
+
+#: ../cli.py:1208
+#, python-format
+msgid "Installed package %s%s%s%s not available."
+msgstr "Инсталираният пакет %s%s%s%s не е наличен."
+
+#: ../cli.py:1221
+#, python-format
+msgid "%d package to reinstall"
+msgid_plural "%d packages to reinstall"
+msgstr[0] "%d пакет за преинсталиране"
+msgstr[1] "%d пакета за преинсталиране"
+
+#: ../cli.py:1246
+msgid "No Packages Provided"
+msgstr "Няма осигурени пакети"
+
+#: ../cli.py:1259
+msgid "Package(s) to install"
+msgstr "Пакет(и) за инсталиране"
+
+#: ../cli.py:1367
+#, python-format
+msgid "N/S Matched: %s"
+msgstr "N/S Съвпадение: %s"
+
+#: ../cli.py:1384
+#, python-format
+msgid " Name and summary matches %sonly%s, use \"search all\" for everything."
+msgstr " Името и описанието съвпадат %sсамо%s, ползвайте \"search all\" за всичко."
+
+#: ../cli.py:1386
+#, python-format
+msgid ""
+" Full name and summary matches %sonly%s, use \"search all\" for everything."
+msgstr " Пълното име и описанието съвпадат %sсамо%s, ползвайте \"search all\" за всичко."
+
+#: ../cli.py:1404
+#, python-format
+msgid "Matched: %s"
+msgstr "Съвпадащ: %s"
+
+#: ../cli.py:1411
+#, python-format
+msgid " Name and summary matches %smostly%s, use \"search all\" for everything."
+msgstr " Името и описанието съвпадат %sпочти%s, ползвайте \"search all\" за всичко."
+
+#: ../cli.py:1415
+#, python-format
+msgid "Warning: No matches found for: %s"
+msgstr "Внимание: Не са намерени съвпадения за: %s"
+
+#: ../cli.py:1418
+msgid "No Matches found"
+msgstr "Не са намерени съвпадения"
+
+#: ../cli.py:1536
+#, python-format
+msgid ""
+"Error: No Packages found for:\n"
+" %s"
+msgstr "Грешка: Няма пакети, намерени за:\n %s"
+
+#: ../cli.py:1572
+msgid "Cleaning repos: "
+msgstr "Почиствам хранилища: "
+
+#: ../cli.py:1577
+msgid "Cleaning up Everything"
+msgstr "Почиствам всичко"
+
+#: ../cli.py:1593
+msgid "Cleaning up Headers"
+msgstr "Почиствам заглавните части"
+
+#: ../cli.py:1596
+msgid "Cleaning up Packages"
+msgstr "Почиствам пакети"
+
+#: ../cli.py:1599
+msgid "Cleaning up xml metadata"
+msgstr "Почиствам xml метаданни"
+
+#: ../cli.py:1602
+msgid "Cleaning up database cache"
+msgstr "Почиствам кеша на базата данни"
+
+#: ../cli.py:1605
+msgid "Cleaning up expire-cache metadata"
+msgstr "Почиствам от кеша остарели метаданни"
+
+#: ../cli.py:1608
+msgid "Cleaning up cached rpmdb data"
+msgstr "Почиствам от кеша rpmdb данни"
+
+#: ../cli.py:1611
+msgid "Cleaning up plugins"
+msgstr "Почиствам плъгини"
+
+#: ../cli.py:1727
+msgid "Installed Environment Groups:"
+msgstr ""
+
+#: ../cli.py:1728
+msgid "Available Environment Groups:"
+msgstr ""
+
+#: ../cli.py:1735
+msgid "Installed Groups:"
+msgstr "Инсталирани групи:"
+
+#: ../cli.py:1742
+msgid "Installed Language Groups:"
+msgstr "Инсталирани езикови групи:"
+
+#: ../cli.py:1749
+msgid "Available Groups:"
+msgstr "Налични групи:"
+
+#: ../cli.py:1756
+msgid "Available Language Groups:"
+msgstr "Достъпни езикови групи:"
+
+#: ../cli.py:1759
+#, python-format
+msgid "Warning: No Environments/Groups match: %s"
+msgstr ""
+
+#: ../cli.py:1763
+msgid "Done"
+msgstr "Готово"
+
+#: ../cli.py:1818
+#, python-format
+msgid "Warning: Group/Environment %s does not exist."
+msgstr ""
+
+#: ../cli.py:1859
+#, python-format
+msgid "Warning: Environment %s does not exist."
+msgstr ""
+
+#: ../cli.py:1873 ../cli.py:1879 ../yum/__init__.py:4254
+#, python-format
+msgid "Warning: Group %s does not exist."
+msgstr "Внимание: Група %s не съществува."
+
+#: ../cli.py:1883
+msgid "No packages in any requested group available to install or update"
+msgstr "В никоя от исканите групи няма налични за инсталиране или обновяване пакети "
+
+#: ../cli.py:1885
+#, python-format
+msgid "%d package to Install"
+msgid_plural "%d packages to Install"
+msgstr[0] "%d пакет за инсталиране"
+msgstr[1] "%d пакета за инсталиране"
+
+#: ../cli.py:1919 ../yum/__init__.py:3536 ../yum/__init__.py:3766
+#: ../yum/__init__.py:3824
+#, python-format
+msgid "No Environment named %s exists"
+msgstr ""
+
+#: ../cli.py:1935 ../yum/__init__.py:4282
+#, python-format
+msgid "No group named %s exists"
+msgstr "Група с име %s не съществува"
+
+#: ../cli.py:1945
+msgid "No packages to remove from groups"
+msgstr "Няма пакети за премахване от групите"
+
+#: ../cli.py:1947 ../yumcommands.py:3351
+#, python-format
+msgid "%d package to remove"
+msgid_plural "%d packages to remove"
+msgstr[0] "%d пакет за премахване"
+msgstr[1] "%d пакета за премахване"
+
+#: ../cli.py:1988
+#, python-format
+msgid "Package %s is already installed, skipping"
+msgstr "Пакетът %s е вече инсталиран, пропускам го"
+
+#: ../cli.py:1999
+#, python-format
+msgid "Discarding non-comparable pkg %s.%s"
+msgstr "Изоставям несравним pkg %s.%s"
+
+#. we've not got any installed that match n or n+a
+#: ../cli.py:2025
+#, python-format
+msgid "No other %s installed, adding to list for potential install"
+msgstr "Няма друг инсталиран %s, добавям към списъка за евентуално инсталиране"
+
+#: ../cli.py:2045
+msgid "Plugin Options"
+msgstr "Опции на плъгин"
+
+#: ../cli.py:2057
+#, python-format
+msgid "Command line error: %s"
+msgstr "Грешка в командния ред: %s"
+
+#: ../cli.py:2079
+#, python-format
+msgid ""
+"\n"
+"\n"
+"%s: %s option requires an argument"
+msgstr "\n\n%s: %s опцията изисква аргумент"
+
+#: ../cli.py:2147
+msgid "--color takes one of: auto, always, never"
+msgstr "--color приема едно от: auto, always, never"
+
+#. We have a relative installroot ... haha
+#: ../cli.py:2218
+#, python-format
+msgid "--installroot must be an absolute path: %s"
+msgstr "--installroot трябва да е абсолютен път: %s"
+
+#: ../cli.py:2272
+msgid "show this help message and exit"
+msgstr "показва този помощен текст и излиза"
+
+#: ../cli.py:2276
+msgid "be tolerant of errors"
+msgstr "бъди толерантен към грешки"
+
+#: ../cli.py:2279
+msgid "run entirely from system cache, don't update cache"
+msgstr "работи изцяло от системния кеш, не обновявай кеша"
+
+#: ../cli.py:2282
+msgid "config file location"
+msgstr "място на конфиг файла"
+
+#: ../cli.py:2285
+msgid "maximum command wait time"
+msgstr "максимално време на изчакване на команда"
+
+#: ../cli.py:2287
+msgid "debugging output level"
+msgstr "ниво извеждана инфо за отстраняване на грешки"
+
+#: ../cli.py:2291
+msgid "show duplicates, in repos, in list/search commands"
+msgstr "показвай дублиращи се, в repo-та, в list/search команди"
+
+#: ../cli.py:2296
+msgid "error output level"
+msgstr "ниво извеждана инфо при грешка"
+
+#: ../cli.py:2299
+msgid "debugging output level for rpm"
+msgstr "ниво извеждана инфо за rpm"
+
+#: ../cli.py:2302
+msgid "quiet operation"
+msgstr "работи без обяснения"
+
+#: ../cli.py:2304
+msgid "verbose operation"
+msgstr "работи с подробни обяснения"
+
+#: ../cli.py:2306
+msgid "answer yes for all questions"
+msgstr "отговаря с да на всички въпроси"
+
+#: ../cli.py:2308
+msgid "answer no for all questions"
+msgstr "отговор не на всички въпроси"
+
+#: ../cli.py:2312
+msgid "show Yum version and exit"
+msgstr "показва версията на Yum и излиза"
+
+#: ../cli.py:2313
+msgid "set install root"
+msgstr "задаване коренова директория"
+
+#: ../cli.py:2317
+msgid "enable one or more repositories (wildcards allowed)"
+msgstr "разрешава едно или повече хранилища (допуска wildcards)"
+
+#: ../cli.py:2321
+msgid "disable one or more repositories (wildcards allowed)"
+msgstr "забранява едно или повече хранилища (допуска wildcards)"
+
+#: ../cli.py:2324
+msgid "exclude package(s) by name or glob"
+msgstr "изключва пакет(и) по име или glob"
+
+#: ../cli.py:2326
+msgid "disable exclude from main, for a repo or for everything"
+msgstr "забранява изключването от главното, от друго или всички хранилища"
+
+#: ../cli.py:2329
+msgid "enable obsoletes processing during updates"
+msgstr "разрешава заместване на излезли от употреба при обновявания"
+
+#: ../cli.py:2331
+msgid "disable Yum plugins"
+msgstr "забранява Yum плъгини"
+
+#: ../cli.py:2333
+msgid "disable gpg signature checking"
+msgstr "забранява проверката на gpg сигнатура"
+
+#: ../cli.py:2335
+msgid "disable plugins by name"
+msgstr "забранява плъгини по име"
+
+#: ../cli.py:2338
+msgid "enable plugins by name"
+msgstr "разрешава плъгини по име"
+
+#: ../cli.py:2341
+msgid "skip packages with depsolving problems"
+msgstr "пропуска пакети с проблеми в разрешаването на зависимости"
+
+#: ../cli.py:2343
+msgid "control whether color is used"
+msgstr "контролира дали се използва цвят"
+
+#: ../cli.py:2345
+msgid "set value of $releasever in yum config and repo files"
+msgstr "задава стойност на $releasever в конфиг и repo файловете на yum"
+
+#: ../cli.py:2347
+msgid "don't update, just download"
+msgstr ""
+
+#: ../cli.py:2349
+msgid "specifies an alternate directory to store packages"
+msgstr ""
+
+#: ../cli.py:2351
+msgid "set arbitrary config and repo options"
+msgstr "задава други настройки и свойства на хранилище"
+
+#: ../output.py:458
+msgid "Jan"
+msgstr "Яну"
+
+#: ../output.py:458
+msgid "Feb"
+msgstr "Фев"
+
+#: ../output.py:458
+msgid "Mar"
+msgstr "Мар"
+
+#: ../output.py:458
+msgid "Apr"
+msgstr "Апр"
+
+#: ../output.py:458
+msgid "May"
+msgstr "Май"
+
+#: ../output.py:458
+msgid "Jun"
+msgstr "Юни"
+
+#: ../output.py:459
+msgid "Jul"
+msgstr "Юли"
+
+#: ../output.py:459
+msgid "Aug"
+msgstr "Авг"
+
+#: ../output.py:459
+msgid "Sep"
+msgstr "Сеп"
+
+#: ../output.py:459
+msgid "Oct"
+msgstr "Окт"
+
+#: ../output.py:459
+msgid "Nov"
+msgstr "Ное"
+
+#: ../output.py:459
+msgid "Dec"
+msgstr "Дек"
+
+#: ../output.py:473
+msgid "Trying other mirror."
+msgstr "Пробвам друг огледален сървър."
+
+#: ../output.py:816
+#, python-format
+msgid "Name : %s%s%s"
+msgstr "Име : %s%s%s"
+
+#: ../output.py:817
+#, python-format
+msgid "Arch : %s"
+msgstr "Архитект. : %s"
+
+#: ../output.py:819
+#, python-format
+msgid "Epoch : %s"
+msgstr "Период : %s"
+
+#: ../output.py:820
+#, python-format
+msgid "Version : %s"
+msgstr "Версия : %s"
+
+#: ../output.py:821
+#, python-format
+msgid "Release : %s"
+msgstr "Издание : %s"
+
+#: ../output.py:822
+#, python-format
+msgid "Size : %s"
+msgstr "Обем : %s"
+
+#: ../output.py:823 ../output.py:1329
+#, python-format
+msgid "Repo : %s"
+msgstr "Хранилище : %s"
+
+#: ../output.py:825
+#, python-format
+msgid "From repo : %s"
+msgstr "От хранилище: %s"
+
+#: ../output.py:827
+#, python-format
+msgid "Committer : %s"
+msgstr "Подател : %s"
+
+#: ../output.py:828
+#, python-format
+msgid "Committime : %s"
+msgstr "Час на подаване: %s"
+
+#: ../output.py:829
+#, python-format
+msgid "Buildtime : %s"
+msgstr "Час на създаване: %s"
+
+#: ../output.py:831
+#, python-format
+msgid "Install time: %s"
+msgstr "Час на инсталиране: %s"
+
+#: ../output.py:839
+#, python-format
+msgid "Installed by: %s"
+msgstr "Инсталиран от: %s"
+
+#: ../output.py:846
+#, python-format
+msgid "Changed by : %s"
+msgstr "Променен от : %s"
+
+#: ../output.py:847
+msgid "Summary : "
+msgstr "Обобщение : "
+
+#: ../output.py:849 ../output.py:1345
+#, python-format
+msgid "URL : %s"
+msgstr "URL : %s"
+
+#: ../output.py:850
+msgid "License : "
+msgstr "Лиценз : "
+
+#: ../output.py:851 ../output.py:1342
+msgid "Description : "
+msgstr "Описание : "
+
+#: ../output.py:969
+msgid "y"
+msgstr "y"
+
+#: ../output.py:969
+msgid "yes"
+msgstr "да"
+
+#: ../output.py:970
+msgid "n"
+msgstr "n"
+
+#: ../output.py:970
+msgid "no"
+msgstr "не"
+
+#: ../output.py:974
+msgid "Is this ok [y/N]: "
+msgstr "Така добре ли е [y/N]: "
+
+#: ../output.py:1097
+#, python-format
+msgid ""
+"\n"
+"Group: %s"
+msgstr "\nГрупа: %s"
+
+#: ../output.py:1101
+#, python-format
+msgid " Group-Id: %s"
+msgstr " Група-Id: %s"
+
+#: ../output.py:1122 ../output.py:1169
+#, python-format
+msgid " Description: %s"
+msgstr " Описание: %s"
+
+#: ../output.py:1124
+#, python-format
+msgid " Language: %s"
+msgstr " Език: %s"
+
+#: ../output.py:1126
+msgid " Mandatory Packages:"
+msgstr " Задължителни пакети:"
+
+#: ../output.py:1127
+msgid " Default Packages:"
+msgstr " Подразбиращи се пакети:"
+
+#: ../output.py:1128
+msgid " Optional Packages:"
+msgstr " Опционални пакети:"
+
+#: ../output.py:1129
+msgid " Conditional Packages:"
+msgstr " Условни пакети:"
+
+#: ../output.py:1147
+msgid " Installed Packages:"
+msgstr " Инсталирани пакети:"
+
+#: ../output.py:1157
+#, python-format
+msgid ""
+"\n"
+"Environment Group: %s"
+msgstr ""
+
+#: ../output.py:1158
+#, python-format
+msgid " Environment-Id: %s"
+msgstr ""
+
+#: ../output.py:1191
+msgid " Mandatory Groups:"
+msgstr ""
+
+#: ../output.py:1192
+msgid " Optional Groups:"
+msgstr ""
+
+#: ../output.py:1205
+msgid " Installed Groups:"
+msgstr ""
+
+#: ../output.py:1217
+#, python-format
+msgid "package: %s"
+msgstr "пакет: %s"
+
+#: ../output.py:1219
+msgid " No dependencies for this package"
+msgstr " Няма зависимости за този пакет"
+
+#: ../output.py:1224
+#, python-format
+msgid " dependency: %s"
+msgstr " зависимост: %s"
+
+#: ../output.py:1226
+msgid " Unsatisfied dependency"
+msgstr " Неудовлетворена зависимост"
+
+#: ../output.py:1337
+msgid "Matched from:"
+msgstr "Съвпадащ от:"
+
+#: ../output.py:1348
+#, python-format
+msgid "License : %s"
+msgstr "Лиценз : %s"
+
+#: ../output.py:1351
+#, python-format
+msgid "Filename : %s"
+msgstr "Име на файл : %s"
+
+#: ../output.py:1360
+msgid "Provides : "
+msgstr "Осигурява : "
+
+#: ../output.py:1363
+msgid "Other : "
+msgstr "Друго : "
+
+#: ../output.py:1426
+msgid "There was an error calculating total download size"
+msgstr "Имаше грешка при пресмятането на общия обем за сваляне"
+
+#: ../output.py:1431
+#, python-format
+msgid "Total size: %s"
+msgstr "Общ обем: %s"
+
+#: ../output.py:1433
+#, python-format
+msgid "Total download size: %s"
+msgstr "Общ обем за сваляне: %s"
+
+#: ../output.py:1436 ../output.py:1459 ../output.py:1463
+#, python-format
+msgid "Installed size: %s"
+msgstr "Инсталиран обем: %s"
+
+#: ../output.py:1454
+msgid "There was an error calculating installed size"
+msgstr "Имаше грешка при пресмятането на инсталирания обем"
+
+#: ../output.py:1504
+msgid "Reinstalling"
+msgstr "Преинсталиране"
+
+#: ../output.py:1505
+msgid "Downgrading"
+msgstr "Връщане на предишна версия"
+
+#: ../output.py:1506
+msgid "Installing for dependencies"
+msgstr "Инсталиране на зависимости"
+
+#: ../output.py:1507
+msgid "Updating for dependencies"
+msgstr "Обновяване на зависимости"
+
+#: ../output.py:1508
+msgid "Removing for dependencies"
+msgstr "Премахване на зависимости"
+
+#: ../output.py:1515 ../output.py:1576 ../output.py:1672
+msgid "Skipped (dependency problems)"
+msgstr "Пропуснат (проблеми в зависимости)"
+
+#: ../output.py:1517 ../output.py:1577 ../output.py:2223
+msgid "Not installed"
+msgstr "Не е инсталиран"
+
+#: ../output.py:1518 ../output.py:1578
+msgid "Not available"
+msgstr "Не е наличен"
+
+#: ../output.py:1540 ../output.py:1588 ../output.py:1604 ../output.py:2581
+msgid "Package"
+msgid_plural "Packages"
+msgstr[0] "Пакет"
+msgstr[1] "Пакети"
+
+#: ../output.py:1540
+msgid "Arch"
+msgstr "Архитектура"
+
+#: ../output.py:1541
+msgid "Version"
+msgstr "Версия"
+
+#: ../output.py:1541
+msgid "Repository"
+msgstr "Хранилище"
+
+#: ../output.py:1542
+msgid "Size"
+msgstr "Обем"
+
+#: ../output.py:1554
+#, python-format
+msgid " replacing %s%s%s.%s %s\n"
+msgstr " заместване %s%s%s.%s %s\n"
+
+#: ../output.py:1563
+#, python-format
+msgid ""
+"\n"
+"Transaction Summary\n"
+"%s\n"
+msgstr "\nОбобщение на транзакцията\n%s\n"
+
+#: ../output.py:1568 ../output.py:2376 ../output.py:2377
+msgid "Install"
+msgstr "Инсталирай"
+
+#: ../output.py:1570
+msgid "Upgrade"
+msgstr "Надгради"
+
+#: ../output.py:1572
+msgid "Remove"
+msgstr "Премахни"
+
+#: ../output.py:1574 ../output.py:2382
+msgid "Reinstall"
+msgstr "Преинсталирай"
+
+#: ../output.py:1575 ../output.py:2383
+msgid "Downgrade"
+msgstr "Връщане към предишна версия"
+
+#: ../output.py:1606
+msgid "Dependent package"
+msgid_plural "Dependent packages"
+msgstr[0] "Зависим пакет"
+msgstr[1] "Зависими пакета"
+
+#: ../output.py:1666
+msgid "Removed"
+msgstr "Премахнат"
+
+#: ../output.py:1667
+msgid "Dependency Removed"
+msgstr "Премахнати зависимости"
+
+#: ../output.py:1669
+msgid "Dependency Installed"
+msgstr "Инсталирани зависимости"
+
+#: ../output.py:1671
+msgid "Dependency Updated"
+msgstr "Обновени зависимости"
+
+#: ../output.py:1673
+msgid "Replaced"
+msgstr "Заместен"
+
+#: ../output.py:1674
+msgid "Failed"
+msgstr "Неуспял"
+
+#. Delta between C-c's so we treat as exit
+#: ../output.py:1764
+msgid "two"
+msgstr "две"
+
+#. For translators: This is output like:
+#. Current download cancelled, interrupt (ctrl-c) again within two seconds
+#. to exit.
+#. Where "interrupt (ctrl-c) again" and "two" are highlighted.
+#: ../output.py:1775
+#, python-format
+msgid ""
+"\n"
+" Current download cancelled, %sinterrupt (ctrl-c) again%s within %s%s%s seconds\n"
+"to exit.\n"
+msgstr "\n Свалянето е спряно, %sпрекъснете (ctrl-c) отново%s в рамките на %s%s%s секунди\nза изход.\n"
+
+#: ../output.py:1786
+msgid "user interrupt"
+msgstr "прекъсване от потребителя"
+
+#: ../output.py:1812
+msgid "Total"
+msgstr "Всичко"
+
+#: ../output.py:1834
+msgid "I"
+msgstr "I"
+
+#: ../output.py:1835
+msgid "O"
+msgstr "O"
+
+#: ../output.py:1836
+msgid "E"
+msgstr "E"
+
+#: ../output.py:1837
+msgid "R"
+msgstr "R"
+
+#: ../output.py:1838
+msgid "D"
+msgstr "D"
+
+#: ../output.py:1839
+msgid "U"
+msgstr "U"
+
+#: ../output.py:1853
+msgid "<unset>"
+msgstr "<незададено>"
+
+#: ../output.py:1854
+msgid "System"
+msgstr "Система"
+
+#: ../output.py:1923
+#, python-format
+msgid "Skipping merged transaction %d to %d, as it overlaps"
+msgstr "Пропускам добавената транзакция %d към %d, понеже я припокрива"
+
+#: ../output.py:1933 ../output.py:2125
+msgid "No transactions"
+msgstr "Няма транзакции"
+
+#: ../output.py:1958 ../output.py:2570 ../output.py:2660
+msgid "Bad transaction IDs, or package(s), given"
+msgstr "Даден е грешен пакет(и) или ID на транзакция"
+
+#: ../output.py:2007
+msgid "Command line"
+msgstr "Команден ред"
+
+#: ../output.py:2009 ../output.py:2458
+msgid "Login user"
+msgstr "Вход на потребител"
+
+#. REALLY Needs to use columns!
+#: ../output.py:2010 ../output.py:2579
+msgid "ID"
+msgstr "ID"
+
+#: ../output.py:2012
+msgid "Date and time"
+msgstr "Дата и час"
+
+#: ../output.py:2013 ../output.py:2460 ../output.py:2580
+msgid "Action(s)"
+msgstr "Действие(я)"
+
+#: ../output.py:2014 ../output.py:2461
+msgid "Altered"
+msgstr "Променен"
+
+#: ../output.py:2061
+msgid "No transaction ID given"
+msgstr "Не е даден ID на транзакция"
+
+#: ../output.py:2087 ../output.py:2526
+msgid "Bad transaction ID given"
+msgstr "Даден е грешен ID на транзакция"
+
+#: ../output.py:2092
+msgid "Not found given transaction ID"
+msgstr "Не е намерен дадения ID на транзакция"
+
+#: ../output.py:2100
+msgid "Found more than one transaction ID!"
+msgstr "Намерени са повече от един ID на транзакция!"
+
+#: ../output.py:2151 ../output.py:2534
+msgid "No transaction ID, or package, given"
+msgstr "Не е даден пакет или ID на транзакция"
+
+#: ../output.py:2222 ../output.py:2384
+msgid "Downgraded"
+msgstr "Върнат към предишна версия"
+
+#: ../output.py:2224
+msgid "Older"
+msgstr "По-стар"
+
+#: ../output.py:2224
+msgid "Newer"
+msgstr "Никога"
+
+#: ../output.py:2261 ../output.py:2263 ../output.py:2681
+msgid "Transaction ID :"
+msgstr "ID на транзакция:"
+
+#: ../output.py:2265 ../output.py:2683
+msgid "Begin time :"
+msgstr "Начален час :"
+
+#: ../output.py:2268 ../output.py:2270
+msgid "Begin rpmdb :"
+msgstr "Начало на rpmdb:"
+
+#: ../output.py:2286
+#, python-format
+msgid "(%u seconds)"
+msgstr "(%u секунди)"
+
+#: ../output.py:2288
+#, python-format
+msgid "(%u minutes)"
+msgstr "(%u минути)"
+
+#: ../output.py:2290
+#, python-format
+msgid "(%u hours)"
+msgstr "(%u часа)"
+
+#: ../output.py:2292
+#, python-format
+msgid "(%u days)"
+msgstr "(%u дни)"
+
+#: ../output.py:2293
+msgid "End time :"
+msgstr "Краен час :"
+
+#: ../output.py:2296 ../output.py:2298
+msgid "End rpmdb :"
+msgstr "Край на rpmdb :"
+
+#: ../output.py:2301 ../output.py:2303
+msgid "User :"
+msgstr "Потребител :"
+
+#: ../output.py:2307 ../output.py:2310 ../output.py:2312 ../output.py:2314
+#: ../output.py:2316
+msgid "Return-Code :"
+msgstr "Върнат код :"
+
+#: ../output.py:2307 ../output.py:2312
+msgid "Aborted"
+msgstr "Прекратен"
+
+#: ../output.py:2310
+msgid "Failures:"
+msgstr "Проблеми:"
+
+#: ../output.py:2314
+msgid "Failure:"
+msgstr "Неуспех:"
+
+#: ../output.py:2316
+msgid "Success"
+msgstr "Успех"
+
+#: ../output.py:2321 ../output.py:2323 ../output.py:2712
+msgid "Command Line :"
+msgstr "Команден ред :"
+
+#: ../output.py:2332
+#, python-format
+msgid "Additional non-default information stored: %d"
+msgstr "Записана допълнителна неподразбираща се информация: %d"
+
+#. This is _possible_, but not common
+#: ../output.py:2337
+msgid "Transaction performed with:"
+msgstr "Транзакцията осъществена с:"
+
+#: ../output.py:2341
+msgid "Packages Altered:"
+msgstr "Променени пакети:"
+
+#: ../output.py:2345
+msgid "Packages Skipped:"
+msgstr "Пропуснати пакети:"
+
+#: ../output.py:2353
+msgid "Rpmdb Problems:"
+msgstr "Rpmdb проблеми:"
+
+#: ../output.py:2364
+msgid "Scriptlet output:"
+msgstr "Резултат от скрипта:"
+
+#: ../output.py:2370
+msgid "Errors:"
+msgstr "Грешки:"
+
+#: ../output.py:2378
+msgid "Dep-Install"
+msgstr "Инсталиране зависимости"
+
+#: ../output.py:2380
+msgid "Obsoleting"
+msgstr "Замествам излязъл от употреба"
+
+#: ../output.py:2381
+msgid "Erase"
+msgstr "Изтрий"
+
+#: ../output.py:2385
+msgid "Update"
+msgstr "Обнови"
+
+#: ../output.py:2459
+msgid "Time"
+msgstr "Време"
+
+#: ../output.py:2485
+msgid "Last day"
+msgstr "Последния ден"
+
+#: ../output.py:2486
+msgid "Last week"
+msgstr "Последната седмица"
+
+#: ../output.py:2487
+msgid "Last 2 weeks"
+msgstr "Последните 2 седмици"
+
+#. US default :p
+#: ../output.py:2488
+msgid "Last 3 months"
+msgstr "Последните 3 месеца"
+
+#: ../output.py:2489
+msgid "Last 6 months"
+msgstr "Последните 6 месеца"
+
+#: ../output.py:2490
+msgid "Last year"
+msgstr "Последната година"
+
+#: ../output.py:2491
+msgid "Over a year ago"
+msgstr "Преди повече от година"
+
+#: ../output.py:2538
+#, python-format
+msgid "No Transaction %s found"
+msgstr "Транзакция %s не е намерена"
+
+#: ../output.py:2544
+msgid "Transaction ID:"
+msgstr "Транзакция с ID:"
+
+#: ../output.py:2545
+msgid "Available additional history information:"
+msgstr "Налична допълнителна историческа информация:"
+
+#: ../output.py:2558
+#, python-format
+msgid "%s: No additional data found by this name"
+msgstr "%s: Няма намерени допълнителни данни с това име"
+
+#: ../output.py:2684
+msgid "Package :"
+msgstr "Пакет :"
+
+#: ../output.py:2685
+msgid "State :"
+msgstr "Състояние :"
+
+#: ../output.py:2688
+msgid "Size :"
+msgstr "Големина :"
+
+#: ../output.py:2690
+msgid "Build host :"
+msgstr "Създаден на хост:"
+
+#: ../output.py:2693
+msgid "Build time :"
+msgstr "Създаден на :"
+
+#: ../output.py:2695
+msgid "Packager :"
+msgstr "Опаковал :"
+
+#: ../output.py:2697
+msgid "Vendor :"
+msgstr "Доставчик :"
+
+#: ../output.py:2699
+msgid "License :"
+msgstr "Лиценз :"
+
+#: ../output.py:2701
+msgid "URL :"
+msgstr "URL :"
+
+#: ../output.py:2703
+msgid "Source RPM :"
+msgstr "RPM източник :"
+
+#: ../output.py:2706
+msgid "Commit Time :"
+msgstr "Час на подаване:"
+
+#: ../output.py:2708
+msgid "Committer :"
+msgstr "Подал :"
+
+#: ../output.py:2710
+msgid "Reason :"
+msgstr "Причина :"
+
+#: ../output.py:2714
+msgid "From repo :"
+msgstr "От хранилище :"
+
+#: ../output.py:2718
+msgid "Installed by :"
+msgstr "Инсталиран от :"
+
+#: ../output.py:2722
+msgid "Changed by :"
+msgstr "Променен от :"
+
+#: ../output.py:2767
+msgid "installed"
+msgstr "инсталиран"
+
+#: ../output.py:2768
+msgid "an update"
+msgstr "обновление"
+
+#: ../output.py:2769
+msgid "erased"
+msgstr "изтрит"
+
+#: ../output.py:2770
+msgid "reinstalled"
+msgstr "преинсталиран"
+
+#: ../output.py:2771
+msgid "a downgrade"
+msgstr "връщане към предишна версия"
+
+#: ../output.py:2772
+msgid "obsoleting"
+msgstr "заместващ"
+
+#: ../output.py:2773
+msgid "updated"
+msgstr "обновен"
+
+#: ../output.py:2774
+msgid "obsoleted"
+msgstr "излязъл от употреба"
+
+#: ../output.py:2778
+#, python-format
+msgid "---> Package %s.%s %s:%s-%s will be %s"
+msgstr "---> Пакет %s.%s %s:%s-%s ще е %s"
+
+#: ../output.py:2789
+msgid "--> Running transaction check"
+msgstr "--> Извършвам проверка на транзакцията"
+
+#: ../output.py:2795
+msgid "--> Restarting Dependency Resolution with new changes."
+msgstr "--> Рестартирам определянето на зависимости с новите промени."
+
+#: ../output.py:2801
+msgid "--> Finished Dependency Resolution"
+msgstr "--> Завърших определянето на зависимости"
+
+#: ../output.py:2814 ../output.py:2827
+#, python-format
+msgid "--> Processing Dependency: %s for package: %s"
+msgstr "--> Обработвам зависимости: %s за пакет: %s"
+
+#: ../output.py:2841
+#, python-format
+msgid "---> Keeping package: %s due to %s"
+msgstr ""
+
+#: ../output.py:2850
+#, python-format
+msgid "--> Unresolved Dependency: %s"
+msgstr "--> Неудовлетворена зависимост: %s"
+
+#: ../output.py:2867
+#, python-format
+msgid "Package: %s"
+msgstr "Пакет: %s"
+
+#: ../output.py:2869
+#, python-format
+msgid ""
+"\n"
+" Requires: %s"
+msgstr "\n Изисква: %s"
+
+#: ../output.py:2878
+#, python-format
+msgid ""
+"\n"
+" %s: %s (%s)"
+msgstr "\n %s: %s (%s)"
+
+#: ../output.py:2883
+#, python-format
+msgid ""
+"\n"
+" %s"
+msgstr "\n %s"
+
+#: ../output.py:2885
+msgid ""
+"\n"
+" Not found"
+msgstr "\n Не е намерено"
+
+#. These should be the only three things we care about:
+#: ../output.py:2900
+msgid "Updated By"
+msgstr "Обновен от"
+
+#: ../output.py:2901
+msgid "Downgraded By"
+msgstr "Върнат към предишна версия от"
+
+#: ../output.py:2902
+msgid "Obsoleted By"
+msgstr "Заместен от"
+
+#: ../output.py:2920
+msgid "Available"
+msgstr "Наличен"
+
+#: ../output.py:2955 ../output.py:2968
+#, python-format
+msgid "--> Processing Conflict: %s conflicts %s"
+msgstr "--> Обработка на конфликт: %s е в конфликт с %s"
+
+#: ../output.py:2974
+msgid "--> Populating transaction set with selected packages. Please wait."
+msgstr "--> Окомплектовам транзакцията с избраните пакети. Моля изчакайте."
+
+#: ../output.py:2983
+#, python-format
+msgid "---> Downloading header for %s to pack into transaction set."
+msgstr "---> Свалям заглавната част на %s за включване в комплекта на транзакцията."
+
+#. self.event(txmbr.name, count, len(base.tsInfo), count, )
+#. (te_current*100L)/te_total
+#: ../output.py:3248
+msgid "Verifying"
+msgstr "Проверка"
+
+#: ../utils.py:123
+msgid "Running"
+msgstr "Работещ"
+
+#: ../utils.py:124
+msgid "Sleeping"
+msgstr "Спящ"
+
+#: ../utils.py:125
+msgid "Uninterruptible"
+msgstr "Непрекъсваем"
+
+#: ../utils.py:126
+msgid "Zombie"
+msgstr "Зомби"
+
+#: ../utils.py:127
+msgid "Traced/Stopped"
+msgstr "Трасиран/Спрян"
+
+#: ../utils.py:128 ../yumcommands.py:2193
+msgid "Unknown"
+msgstr "Неизвестно"
+
+#: ../utils.py:153
+msgid " The other application is: PackageKit"
+msgstr " Другото приложение е: PackageKit"
+
+#: ../utils.py:155
+#, python-format
+msgid " The other application is: %s"
+msgstr " Другото приложение е: %s"
+
+#: ../utils.py:158
+#, python-format
+msgid " Memory : %5s RSS (%5sB VSZ)"
+msgstr " Памет : %5s RSS (%5sB VSZ)"
+
+#: ../utils.py:163
+#, python-format
+msgid " Started: %s - %s ago"
+msgstr " Стартиран: %s - преди %s"
+
+#: ../utils.py:165
+#, python-format
+msgid " State : %s, pid: %d"
+msgstr " Състояние : %s, pid: %d"
+
+#: ../utils.py:194 ../yummain.py:43
+msgid ""
+"\n"
+"\n"
+"Exiting on user cancel"
+msgstr "\n\nИзход поради прекъсване от потребителя"
+
+#: ../utils.py:206 ../yummain.py:49
+msgid ""
+"\n"
+"\n"
+"Exiting on Broken Pipe"
+msgstr "\n\nИзход поради прекъсната последователност"
+
+#: ../utils.py:208 ../yummain.py:51
+#, python-format
+msgid ""
+"\n"
+"\n"
+"%s"
+msgstr "\n\n%s"
+
+#: ../utils.py:326
+#, python-format
+msgid "PluginExit Error: %s"
+msgstr "PluginExit грешка: %s"
+
+#: ../utils.py:329
+#, python-format
+msgid "Yum Error: %s"
+msgstr "Yum грешка: %s"
+
+#: ../utils.py:387 ../yummain.py:147 ../yummain.py:186
+#, python-format
+msgid "Error: %s"
+msgstr "Грешка: %s"
+
+#: ../utils.py:391 ../yummain.py:191
+msgid " You could try using --skip-broken to work around the problem"
+msgstr " Може да пробвате с --skip-broken за да заобиколите проблема"
+
+#: ../utils.py:393 ../yummain.py:87
+msgid " You could try running: rpm -Va --nofiles --nodigest"
+msgstr " Може да пробвате като стартирате: rpm -Va --nofiles --nodigest"
+
+#: ../utils.py:400 ../yummain.py:157 ../yummain.py:199
+#, python-format
+msgid "Unknown Error(s): Exit Code: %d:"
+msgstr "Непозната грешка: Код на изхода: %d:"
+
+#: ../utils.py:406 ../yummain.py:205
+msgid ""
+"\n"
+"Dependencies Resolved"
+msgstr "\nЗависимостите са удовлетворени"
+
+#: ../utils.py:422 ../yummain.py:237
+msgid "Complete!"
+msgstr "Завърших!"
+
+#: ../yumcommands.py:42
+msgid " Mini usage:\n"
+msgstr " Мини употреба:\n"
+
+#: ../yumcommands.py:52
+msgid "You need to be root to perform this command."
+msgstr "Трябва да сте root за да изпълните тази команда."
+
+#: ../yumcommands.py:67
+msgid ""
+"\n"
+"You have enabled checking of packages via GPG keys. This is a good thing. \n"
+"However, you do not have any GPG public keys installed. You need to download\n"
+"the keys for packages you wish to install and install them.\n"
+"You can do that by running the command:\n"
+" rpm --import public.gpg.key\n"
+"\n"
+"\n"
+"Alternatively you can specify the url to the key you would like to use\n"
+"for a repository in the 'gpgkey' option in a repository section and yum \n"
+"will install it for you.\n"
+"\n"
+"For more information contact your distribution or package provider.\n"
+msgstr "\nРазрешили сте проверката на пакети чрез GPG ключове. Това е добре. \nНямате, обаче, никакви инсталирани публични GPG ключове. Вие трябва да свалите\nключовете за пакетите, които желаете да инсталирате и да ги инсталирате.\nМожете да го направите като стартирате командата:\n rpm --import public.gpg.key\n\n\nИли пък може да посочите url към ключа, който искате да ползвате\nза хранилище в опцията 'gpgkey' в секцията за хранилища и yum \nще го инсталира вместо Вас.\n\nЗа повече информация вижте сайта на дистрибуцията или доставчика на пакета.\n"
+
+#: ../yumcommands.py:82
+#, python-format
+msgid "Problem repository: %s"
+msgstr "Проблем в хранилище: %s"
+
+#: ../yumcommands.py:96
+#, python-format
+msgid "Error: Need to pass a list of pkgs to %s"
+msgstr "Грешка: Нужно е да се подаде списък пакети на %s"
+
+#: ../yumcommands.py:114
+#, python-format
+msgid "Error: Need at least two packages to %s"
+msgstr ""
+
+#: ../yumcommands.py:129
+#, python-format
+msgid "Error: Need to pass a repoid. and command to %s"
+msgstr ""
+
+#: ../yumcommands.py:136 ../yumcommands.py:142
+#, python-format
+msgid "Error: Need to pass a single valid repoid. to %s"
+msgstr ""
+
+#: ../yumcommands.py:147
+#, python-format
+msgid "Error: Repo %s is not enabled"
+msgstr ""
+
+#: ../yumcommands.py:164
+msgid "Error: Need an item to match"
+msgstr "Грешка: Нужен е съвпадащ елемент"
+
+#: ../yumcommands.py:178
+msgid "Error: Need a group or list of groups"
+msgstr "Грешка: Нужна е група или списък групи"
+
+#: ../yumcommands.py:195
+#, python-format
+msgid "Error: clean requires an option: %s"
+msgstr "Грешка: почистването изисква опция: %s"
+
+#: ../yumcommands.py:201
+#, python-format
+msgid "Error: invalid clean argument: %r"
+msgstr "Грешка: невалиден аргумент за почистването: %r"
+
+#: ../yumcommands.py:216
+msgid "No argument to shell"
+msgstr "Няма аргумент към обвивката"
+
+#: ../yumcommands.py:218
+#, python-format
+msgid "Filename passed to shell: %s"
+msgstr "Име на файл, подаден към обвивката: %s"
+
+#: ../yumcommands.py:222
+#, python-format
+msgid "File %s given as argument to shell does not exist."
+msgstr "Файлът %s, даден като аргумент към командата не съществува."
+
+#: ../yumcommands.py:228
+msgid "Error: more than one file given as argument to shell."
+msgstr "Грешка: даден е повече от един файл като аргумент към командата."
+
+#: ../yumcommands.py:247
+msgid ""
+"There are no enabled repos.\n"
+" Run \"yum repolist all\" to see the repos you have.\n"
+" You can enable repos with yum-config-manager --enable <repo>"
+msgstr "Няма разрешени хранилища.\n Изпълнете \"yum repolist all\" за да видите хранилищата, които имате.\n Може да разрешите хранилища чрез yum-config-manager --enable <хран>"
+
+#: ../yumcommands.py:383
+msgid "PACKAGE..."
+msgstr "ПАКЕТ..."
+
+#: ../yumcommands.py:390
+msgid "Install a package or packages on your system"
+msgstr "Инсталира пакет или пакети на Вашата система"
+
+#: ../yumcommands.py:421
+msgid "Setting up Install Process"
+msgstr "Подготовка на инсталиращия процес"
+
+#: ../yumcommands.py:447 ../yumcommands.py:507
+msgid "[PACKAGE...]"
+msgstr "[ПАКЕТ...]"
+
+#: ../yumcommands.py:454
+msgid "Update a package or packages on your system"
+msgstr "Обновява пакет или пакети на Вашата система"
+
+#: ../yumcommands.py:483
+msgid "Setting up Update Process"
+msgstr "Подготовка на обновяващия процес"
+
+#: ../yumcommands.py:514
+msgid "Synchronize installed packages to the latest available versions"
+msgstr "Синхронизира инсталираните пакети с последните налични версии"
+
+#: ../yumcommands.py:543
+msgid "Setting up Distribution Synchronization Process"
+msgstr "Подготовка на процеса за синхронизиране на дистрибуцията "
+
+#: ../yumcommands.py:603
+msgid "Display details about a package or group of packages"
+msgstr "Показва детайли за пакет или група от пакети"
+
+#: ../yumcommands.py:672
+msgid "Installed Packages"
+msgstr "Инсталирани пакети"
+
+#: ../yumcommands.py:682
+msgid "Available Packages"
+msgstr "Налични пакети"
+
+#: ../yumcommands.py:687
+msgid "Extra Packages"
+msgstr "Допълнителни пакети"
+
+#: ../yumcommands.py:691
+msgid "Updated Packages"
+msgstr "Обновени пакети"
+
+#. This only happens in verbose mode
+#: ../yumcommands.py:699 ../yumcommands.py:706 ../yumcommands.py:1539
+msgid "Obsoleting Packages"
+msgstr "Излезли от употреба пакети"
+
+#: ../yumcommands.py:708
+msgid "Recently Added Packages"
+msgstr "Скоро добавени пакети"
+
+#: ../yumcommands.py:715
+msgid "No matching Packages to list"
+msgstr "Няма регистрирани съвпадащи пакети"
+
+#: ../yumcommands.py:766
+msgid "List a package or groups of packages"
+msgstr "Списък на пакети или групи от пакети"
+
+#: ../yumcommands.py:797
+msgid "Remove a package or packages from your system"
+msgstr "Премахва пакет или пакети от Вашата система"
+
+#: ../yumcommands.py:845
+msgid "Setting up Remove Process"
+msgstr "Подготовка процеса на премахване"
+
+#: ../yumcommands.py:906
+msgid "Display, or use, the groups information"
+msgstr "Показва или използва информацията за групите"
+
+#: ../yumcommands.py:909
+msgid "Setting up Group Process"
+msgstr "Подготовка за обработка на групата"
+
+#: ../yumcommands.py:915
+msgid "No Groups on which to run command"
+msgstr "Няма група, върху която да стартирам командата"
+
+#: ../yumcommands.py:985
+#, python-format
+msgid "Invalid groups sub-command, use: %s."
+msgstr "Невалидна групова подкоманда, ползвайте: %s."
+
+#: ../yumcommands.py:992
+msgid "There is no installed groups file."
+msgstr "Не е инсталиран файл с групи."
+
+#: ../yumcommands.py:994
+msgid "You don't have access to the groups DB."
+msgstr "Нямате достъп до базата данни на групите."
+
+#: ../yumcommands.py:1256
+msgid "Generate the metadata cache"
+msgstr "Генериране на кеш с метаданни"
+
+#: ../yumcommands.py:1282
+msgid "Making cache files for all metadata files."
+msgstr "Създаване на файлове в кеша за всички файлове с метаданни."
+
+#: ../yumcommands.py:1283
+msgid "This may take a while depending on the speed of this computer"
+msgstr "Може да отнеме време, зависещо от бързодействието на този компютър"
+
+#: ../yumcommands.py:1312
+msgid "Metadata Cache Created"
+msgstr "Кешът с метаданни е създаден"
+
+#: ../yumcommands.py:1350
+msgid "Remove cached data"
+msgstr "Премахни кешираните данни"
+
+#: ../yumcommands.py:1417
+msgid "Find what package provides the given value"
+msgstr "Търси кой от пакетите предоставя дадената стойност"
+
+#: ../yumcommands.py:1485
+msgid "Check for available package updates"
+msgstr "Проверка за налични обновявания на пакети"
+
+#: ../yumcommands.py:1587
+msgid "Search package details for the given string"
+msgstr "Търси детайли за пакета за дадения низ"
+
+#: ../yumcommands.py:1613
+msgid "Searching Packages: "
+msgstr "Търсене в пакети: "
+
+#: ../yumcommands.py:1666
+msgid "Update packages taking obsoletes into account"
+msgstr "Обновява пакети, имайки предвид излезлите от употреба"
+
+#: ../yumcommands.py:1696
+msgid "Setting up Upgrade Process"
+msgstr "Подготовка процеса на надграждане"
+
+#: ../yumcommands.py:1731
+msgid "Install a local RPM"
+msgstr "Инсталира локален пакет"
+
+#: ../yumcommands.py:1761
+msgid "Setting up Local Package Process"
+msgstr "Подготовка обработката на локалния пакет"
+
+#: ../yumcommands.py:1825
+msgid "Searching Packages for Dependency:"
+msgstr "Търсене на зависимости в пакетите:"
+
+#: ../yumcommands.py:1867
+msgid "Run an interactive yum shell"
+msgstr "Стартира интерактивен режим на yum"
+
+#: ../yumcommands.py:1893
+msgid "Setting up Yum Shell"
+msgstr "Настройка на Yum Shell"
+
+#: ../yumcommands.py:1936
+msgid "List a package's dependencies"
+msgstr "Показва списък на зависимостите на пакетите"
+
+#: ../yumcommands.py:1963
+msgid "Finding dependencies: "
+msgstr "Търсене на зависимости: "
+
+#: ../yumcommands.py:2005
+msgid "Display the configured software repositories"
+msgstr "Показва конфигурираните хранилища на софтуер"
+
+#: ../yumcommands.py:2094 ../yumcommands.py:2095
+msgid "enabled"
+msgstr "разрешен"
+
+#: ../yumcommands.py:2121 ../yumcommands.py:2122
+msgid "disabled"
+msgstr "забранен"
+
+#: ../yumcommands.py:2137
+msgid "Repo-id : "
+msgstr "Хранилище-id : "
+
+#: ../yumcommands.py:2138
+msgid "Repo-name : "
+msgstr "Хранилище-име : "
+
+#: ../yumcommands.py:2141
+msgid "Repo-status : "
+msgstr "Хранилище-статус : "
+
+#: ../yumcommands.py:2144
+msgid "Repo-revision: "
+msgstr "Хранилище-revision: "
+
+#: ../yumcommands.py:2148
+msgid "Repo-tags : "
+msgstr "Хранилище-етикети : "
+
+#: ../yumcommands.py:2154
+msgid "Repo-distro-tags: "
+msgstr "Хранилище-етикети на дистр.: "
+
+#: ../yumcommands.py:2159
+msgid "Repo-updated : "
+msgstr "Хранилище-обновено: "
+
+#: ../yumcommands.py:2161
+msgid "Repo-pkgs : "
+msgstr "Хранилище-пакети : "
+
+#: ../yumcommands.py:2162
+msgid "Repo-size : "
+msgstr "Хранилище-обем : "
+
+#: ../yumcommands.py:2169 ../yumcommands.py:2190
+msgid "Repo-baseurl : "
+msgstr "Хранилище-основен url : "
+
+#: ../yumcommands.py:2177
+msgid "Repo-metalink: "
+msgstr "Хранилище-мета връзка: "
+
+#: ../yumcommands.py:2181
+msgid " Updated : "
+msgstr " Обновено : "
+
+#: ../yumcommands.py:2184
+msgid "Repo-mirrors : "
+msgstr "Хранилище-огледала: "
+
+#: ../yumcommands.py:2199
+#, python-format
+msgid "Never (last: %s)"
+msgstr "Никога (последен: %s)"
+
+#: ../yumcommands.py:2201
+#, python-format
+msgid "Instant (last: %s)"
+msgstr "Моментен (последен: %s)"
+
+#: ../yumcommands.py:2204
+#, python-format
+msgid "%s second(s) (last: %s)"
+msgstr "%s секунда(и) (последен: %s)"
+
+#: ../yumcommands.py:2206
+msgid "Repo-expire : "
+msgstr "Хранилище-изтича : "
+
+#: ../yumcommands.py:2209
+msgid "Repo-exclude : "
+msgstr "Хранилище-изключва: "
+
+#: ../yumcommands.py:2213
+msgid "Repo-include : "
+msgstr "Хранилище-включва : "
+
+#: ../yumcommands.py:2217
+msgid "Repo-excluded: "
+msgstr "Хранилище-изключен: "
+
+#: ../yumcommands.py:2221
+msgid "Repo-filename: "
+msgstr "Файл на хранилище: "
+
+#. Work out the first (id) and last (enabled/disalbed/count),
+#. then chop the middle (name)...
+#: ../yumcommands.py:2230 ../yumcommands.py:2259
+msgid "repo id"
+msgstr "хранилище id"
+
+#: ../yumcommands.py:2247 ../yumcommands.py:2248 ../yumcommands.py:2266
+msgid "status"
+msgstr "статус"
+
+#: ../yumcommands.py:2260
+msgid "repo name"
+msgstr "име на хранилище"
+
+#: ../yumcommands.py:2332
+msgid "Display a helpful usage message"
+msgstr "Показва помощно за употребата съобщение"
+
+#: ../yumcommands.py:2374
+#, python-format
+msgid "No help available for %s"
+msgstr "Няма налична за %s помощ"
+
+#: ../yumcommands.py:2379
+msgid ""
+"\n"
+"\n"
+"aliases: "
+msgstr "\n\nсиноними: "
+
+#: ../yumcommands.py:2381
+msgid ""
+"\n"
+"\n"
+"alias: "
+msgstr "\n\nсиноним: "
+
+#: ../yumcommands.py:2466
+msgid "Setting up Reinstall Process"
+msgstr "Подготовка на преинсталиращия процес"
+
+#: ../yumcommands.py:2478
+msgid "reinstall a package"
+msgstr "преинсталира пакет"
+
+#: ../yumcommands.py:2541
+msgid "Setting up Downgrade Process"
+msgstr "Подготовка процеса на връщане към предишна версия"
+
+#: ../yumcommands.py:2552
+msgid "downgrade a package"
+msgstr "връща предишна версия на пакет"
+
+#: ../yumcommands.py:2591
+msgid "Display a version for the machine and/or available repos."
+msgstr "Показва версия за машината и/или наличните хранилища."
+
+#: ../yumcommands.py:2643
+msgid " Yum version groups:"
+msgstr " Yum версия групи:"
+
+#: ../yumcommands.py:2653
+msgid " Group :"
+msgstr " Група :"
+
+#: ../yumcommands.py:2654
+msgid " Packages:"
+msgstr " Пакети:"
+
+#: ../yumcommands.py:2683
+msgid "Installed:"
+msgstr "Инсталиран:"
+
+#: ../yumcommands.py:2691
+msgid "Group-Installed:"
+msgstr "Група-Инсталирана:"
+
+#: ../yumcommands.py:2700
+msgid "Available:"
+msgstr "Наличен:"
+
+#: ../yumcommands.py:2709
+msgid "Group-Available:"
+msgstr "Група-Налична:"
+
+#: ../yumcommands.py:2783
+msgid "Display, or use, the transaction history"
+msgstr "Покажи или използвай историята на транзакциите"
+
+#: ../yumcommands.py:2876 ../yumcommands.py:2880
+msgid "Transactions:"
+msgstr "Транзакции:"
+
+#: ../yumcommands.py:2881
+msgid "Begin time :"
+msgstr "Начален час :"
+
+#: ../yumcommands.py:2882
+msgid "End time :"
+msgstr "Час на завършване:"
+
+#: ../yumcommands.py:2883
+msgid "Counts :"
+msgstr "Количество :"
+
+#: ../yumcommands.py:2884
+msgid " NEVRAC :"
+msgstr " NEVRAC :"
+
+#: ../yumcommands.py:2885
+msgid " NEVRA :"
+msgstr " NEVRA :"
+
+#: ../yumcommands.py:2886
+msgid " NA :"
+msgstr " NA :"
+
+#: ../yumcommands.py:2887
+msgid " NEVR :"
+msgstr " NEVR :"
+
+#: ../yumcommands.py:2888
+msgid " rpm DB :"
+msgstr " rpm база данни :"
+
+#: ../yumcommands.py:2889
+msgid " yum DB :"
+msgstr " yum база данни :"
+
+#: ../yumcommands.py:2922
+#, python-format
+msgid "Invalid history sub-command, use: %s."
+msgstr "Невалидна подкоманда за история, ползвайте: %s."
+
+#: ../yumcommands.py:2929
+msgid "You don't have access to the history DB."
+msgstr "Вие нямате достъп до базата данни с историята."
+
+#: ../yumcommands.py:3036
+msgid "Check for problems in the rpmdb"
+msgstr "Проверява за проблеми в rpmdb"
+
+#: ../yumcommands.py:3102
+msgid "load a saved transaction from filename"
+msgstr "зарежда записана транзакция от файл с име"
+
+#: ../yumcommands.py:3119
+msgid "No saved transaction file specified."
+msgstr "Не е зададен файла със записана транзакция."
+
+#: ../yumcommands.py:3123
+#, python-format
+msgid "loading transaction from %s"
+msgstr "зареждам транзакция от %s"
+
+#: ../yumcommands.py:3129
+#, python-format
+msgid "Transaction loaded from %s with %s members"
+msgstr "Транзакцията е заредена от %s с %s члена"
+
+#: ../yumcommands.py:3169
+msgid "Simple way to swap packages, isntead of using shell"
+msgstr ""
+
+#: ../yumcommands.py:3264
+msgid ""
+"Treat a repo. as a group of packages, so we can install/remove all of them"
+msgstr ""
+
+#: ../yumcommands.py:3341
+#, python-format
+msgid "%d package to update"
+msgid_plural "%d packages to update"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../yumcommands.py:3370
+#, python-format
+msgid "%d package to remove/reinstall"
+msgid_plural "%d packages to remove/reinstall"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../yumcommands.py:3413
+#, python-format
+msgid "%d package to remove/sync"
+msgid_plural "%d packages to remove/sync"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../yumcommands.py:3417
+#, python-format
+msgid "Not a valid sub-command of %s"
+msgstr ""
+
+#. This is mainly for PackageSackError from rpmdb.
+#: ../yummain.py:84
+#, python-format
+msgid " Yum checks failed: %s"
+msgstr " Yum проверките не успяха: %s"
+
+#: ../yummain.py:98
+msgid "No read/execute access in current directory, moving to /"
+msgstr "Нямам права за четене/изпълнение в текущата директория, местя се в /"
+
+#: ../yummain.py:106
+msgid "No getcwd() access in current directory, moving to /"
+msgstr "Нямам getcwd() достъп в текущата директория, местя се в /"
+
+#. Depsolve stage
+#: ../yummain.py:164
+msgid "Resolving Dependencies"
+msgstr "Определяне на зависимостите"
+
+#: ../yummain.py:227 ../yummain.py:235
+#, python-format
+msgid ""
+"Your transaction was saved, rerun it with:\n"
+" yum load-transaction %s"
+msgstr "Транзакцията Ви беше записана, стартирайте я с:\n yum load-transaction %s"
+
+#: ../yummain.py:312
+msgid ""
+"\n"
+"\n"
+"Exiting on user cancel."
+msgstr "\n\nИзход поради прекъсване от потребителя."
+
+#: ../yum/depsolve.py:127
+msgid "doTsSetup() will go away in a future version of Yum.\n"
+msgstr "doTsSetup() ще бъде премахнат в бъдеща версия на Yum.\n"
+
+#: ../yum/depsolve.py:143
+msgid "Setting up TransactionSets before config class is up"
+msgstr "Задаване на комплектите в транзакцията преди включването на конфиг класа"
+
+#: ../yum/depsolve.py:200
+#, python-format
+msgid "Invalid tsflag in config file: %s"
+msgstr "Невалиден tsflag в конфигурационния файл: %s"
+
+#: ../yum/depsolve.py:218
+#, python-format
+msgid "Searching pkgSack for dep: %s"
+msgstr "Претърсване на pkgSack за зависимости: %s"
+
+#: ../yum/depsolve.py:269
+#, python-format
+msgid "Member: %s"
+msgstr "Част: %s"
+
+#: ../yum/depsolve.py:283 ../yum/depsolve.py:937
+#, python-format
+msgid "%s converted to install"
+msgstr "%s конвертиран за инсталиране"
+
+#: ../yum/depsolve.py:295
+#, python-format
+msgid "Adding Package %s in mode %s"
+msgstr "Добавям пакет %s в режим %s"
+
+#: ../yum/depsolve.py:311
+#, python-format
+msgid "Removing Package %s"
+msgstr "Премахвам пакет %s"
+
+#: ../yum/depsolve.py:333
+#, python-format
+msgid "%s requires: %s"
+msgstr "%s изисква: %s"
+
+#: ../yum/depsolve.py:374
+#, python-format
+msgid "%s requires %s"
+msgstr "%s изисква %s"
+
+#: ../yum/depsolve.py:401
+msgid "Needed Require has already been looked up, cheating"
+msgstr "Нужното изискване вече е намерено, измама"
+
+#: ../yum/depsolve.py:411
+#, python-format
+msgid "Needed Require is not a package name. Looking up: %s"
+msgstr "Нужното изискване не е име на пакет. Търсене: %s"
+
+#: ../yum/depsolve.py:419
+#, python-format
+msgid "Potential Provider: %s"
+msgstr "Потенциален доставчик: %s"
+
+#: ../yum/depsolve.py:442
+#, python-format
+msgid "Mode is %s for provider of %s: %s"
+msgstr "Режимът е %s за доставчик от %s: %s"
+
+#: ../yum/depsolve.py:446
+#, python-format
+msgid "Mode for pkg providing %s: %s"
+msgstr "Режим за пакет, предоставящ %s: %s"
+
+#. the thing it needs is being updated or obsoleted away
+#. try to update the requiring package in hopes that all this problem goes
+#. away :(
+#: ../yum/depsolve.py:451 ../yum/depsolve.py:486
+#, python-format
+msgid "Trying to update %s to resolve dep"
+msgstr "Опитвам да обновя %s за да удовлетворя зависимост"
+
+#: ../yum/depsolve.py:480
+#, python-format
+msgid "No update paths found for %s. Failure!"
+msgstr "Не е намерен обновяващ път за %s. Неуспех!"
+
+#: ../yum/depsolve.py:491
+#, python-format
+msgid "No update paths found for %s. Failure due to requirement: %s!"
+msgstr ""
+
+#: ../yum/depsolve.py:507
+#, python-format
+msgid "Update for %s. Doesn't fix requirement: %s!"
+msgstr ""
+
+#: ../yum/depsolve.py:514
+#, python-format
+msgid "TSINFO: %s package requiring %s marked as erase"
+msgstr "TSINFO: %s пакет, изискващ %s, е маркиран за изтриване"
+
+#: ../yum/depsolve.py:527
+#, python-format
+msgid "TSINFO: Obsoleting %s with %s to resolve dep."
+msgstr "TSINFO: Замествам %s с %s за да задоволя зависимост."
+
+#: ../yum/depsolve.py:530
+#, python-format
+msgid "TSINFO: Updating %s to resolve dep."
+msgstr "TSINFO: Обновявам %s за да задоволя зависимост."
+
+#: ../yum/depsolve.py:538
+#, python-format
+msgid "Cannot find an update path for dep for: %s"
+msgstr "Не мога да намеря път за обновяване за зависимост за: %s"
+
+#: ../yum/depsolve.py:569
+#, python-format
+msgid "Quick matched %s to require for %s"
+msgstr "Бързо подбран %s, задоволяващ %s"
+
+#. is it already installed?
+#: ../yum/depsolve.py:611
+#, python-format
+msgid "%s is in providing packages but it is already installed, removing."
+msgstr "%s е сред осигуряващите пакети и вече е инсталиран, премахвам го."
+
+#: ../yum/depsolve.py:627
+#, python-format
+msgid "Potential resolving package %s has newer instance in ts."
+msgstr "Потенциално удовлетворяващият пакет %s има по-нова инстанция в ts."
+
+#: ../yum/depsolve.py:638
+#, python-format
+msgid "Potential resolving package %s has newer instance installed."
+msgstr "Потенциално удовлетворяващият пакет %s има по-нова инсталирана инстанция."
+
+#: ../yum/depsolve.py:656
+#, python-format
+msgid "%s already in ts, skipping this one"
+msgstr "%s е вече в ts, пропускам го"
+
+#: ../yum/depsolve.py:705
+#, python-format
+msgid "TSINFO: Marking %s as update for %s"
+msgstr "TSINFO: Маркирам %s като обновление за %s"
+
+#: ../yum/depsolve.py:714
+#, python-format
+msgid "TSINFO: Marking %s as install for %s"
+msgstr "TSINFO: Маркирам %s като инсталиращ за %s"
+
+#: ../yum/depsolve.py:849 ../yum/depsolve.py:967
+msgid "Success - empty transaction"
+msgstr "Успех - празна транзакция"
+
+#: ../yum/depsolve.py:889 ../yum/depsolve.py:927
+msgid "Restarting Loop"
+msgstr "Рестартиране на цикъла"
+
+#: ../yum/depsolve.py:947
+msgid "Dependency Process ending"
+msgstr "Завършване процеса за определяне на зависимости"
+
+#: ../yum/depsolve.py:969
+msgid "Success - deps resolved"
+msgstr "Успех - зависимостите са удовлетворени"
+
+#: ../yum/depsolve.py:993
+#, python-format
+msgid "Checking deps for %s"
+msgstr "Проверка зависимостите за %s"
+
+#: ../yum/depsolve.py:1082
+#, python-format
+msgid "looking for %s as a requirement of %s"
+msgstr "търсене на %s като изискван от %s"
+
+#: ../yum/depsolve.py:1349
+#, python-format
+msgid "Running compare_providers() for %s"
+msgstr "Стартиране compare_providers() за %s"
+
+#: ../yum/depsolve.py:1376 ../yum/depsolve.py:1382
+#, python-format
+msgid "better arch in po %s"
+msgstr "по-добър arch в po %s"
+
+#: ../yum/depsolve.py:1496
+#, python-format
+msgid "%s obsoletes %s"
+msgstr "%s замества %s"
+
+#: ../yum/depsolve.py:1508
+#, python-format
+msgid ""
+"archdist compared %s to %s on %s\n"
+" Winner: %s"
+msgstr "archdist сравни %s с %s на %s\n Победител: %s"
+
+#: ../yum/depsolve.py:1516
+#, python-format
+msgid "common sourcerpm %s and %s"
+msgstr "общ rpm източник %s и %s"
+
+#: ../yum/depsolve.py:1520
+#, python-format
+msgid "base package %s is installed for %s"
+msgstr "основният пакет %s е инсталиран за %s"
+
+#: ../yum/depsolve.py:1526
+#, python-format
+msgid "common prefix of %s between %s and %s"
+msgstr "общ префикс на %s между %s и %s"
+
+#: ../yum/depsolve.py:1543
+#, python-format
+msgid "provides vercmp: %s"
+msgstr "предоставя vercmp: %s"
+
+#: ../yum/depsolve.py:1547 ../yum/depsolve.py:1581
+#, python-format
+msgid " Winner: %s"
+msgstr " Победител: %s"
+
+#: ../yum/depsolve.py:1577
+#, python-format
+msgid "requires minimal: %d"
+msgstr "изисква минимум: %d"
+
+#: ../yum/depsolve.py:1586
+#, python-format
+msgid " Loser(with %d): %s"
+msgstr " Губещ(с %d): %s"
+
+#: ../yum/depsolve.py:1602
+#, python-format
+msgid "Best Order: %s"
+msgstr "Най-добър ред: %s"
+
+#: ../yum/__init__.py:274
+msgid "doConfigSetup() will go away in a future version of Yum.\n"
+msgstr "doConfigSetup() ще бъде премахнат в бъдеща версия на Yum.\n"
+
+#: ../yum/__init__.py:553
+#, python-format
+msgid "Skipping unreadable repository %s"
+msgstr ""
+
+#: ../yum/__init__.py:572
+#, python-format
+msgid "Repository %r: Error parsing config: %s"
+msgstr "Хранилище %r: Грешка при разбор на конфигурацията: %s"
+
+#: ../yum/__init__.py:578
+#, python-format
+msgid "Repository %r is missing name in configuration, using id"
+msgstr "В конфигурацията липсва име на хранилище %r, ползвам id"
+
+#: ../yum/__init__.py:618
+msgid "plugins already initialised"
+msgstr "плъгините вече са инициализирани"
+
+#: ../yum/__init__.py:627
+msgid "doRpmDBSetup() will go away in a future version of Yum.\n"
+msgstr "doRpmDBSetup() ще бъде премахнат в бъдеща версия на Yum.\n"
+
+#: ../yum/__init__.py:638
+msgid "Reading Local RPMDB"
+msgstr "Чета локалната RPMDB"
+
+#: ../yum/__init__.py:668
+msgid "doRepoSetup() will go away in a future version of Yum.\n"
+msgstr "doRepoSetup() ще бъде премахнат в бъдеща версия на Yum.\n"
+
+#: ../yum/__init__.py:722
+msgid "doSackSetup() will go away in a future version of Yum.\n"
+msgstr "doSackSetup() ще бъде премахнат в бъдеща версия на Yum.\n"
+
+#: ../yum/__init__.py:752
+msgid "Setting up Package Sacks"
+msgstr "Задаване на сакове пакети"
+
+#: ../yum/__init__.py:797
+#, python-format
+msgid "repo object for repo %s lacks a _resetSack method\n"
+msgstr "в repo обекта за хранилище %s липсва метод _resetSack\n"
+
+#: ../yum/__init__.py:798
+msgid "therefore this repo cannot be reset.\n"
+msgstr "ето защо, това хранилище не може да бъде ресетнато.\n"
+
+#: ../yum/__init__.py:806
+msgid "doUpdateSetup() will go away in a future version of Yum.\n"
+msgstr "doUpdateSetup() ще бъде премахнат в бъдеща версия на Yum.\n"
+
+#: ../yum/__init__.py:818
+msgid "Building updates object"
+msgstr "Изграждам обекта с обновявания"
+
+#: ../yum/__init__.py:862
+msgid "doGroupSetup() will go away in a future version of Yum.\n"
+msgstr "doGroupSetup() ще бъде премахнат в бъдеща версия на Yum.\n"
+
+#: ../yum/__init__.py:887
+msgid "Getting group metadata"
+msgstr "Вземам метаданните на групата"
+
+#: ../yum/__init__.py:915
+#, python-format
+msgid "Adding group file from repository: %s"
+msgstr "Добавям файла на групата от хранилище: %s"
+
+#: ../yum/__init__.py:918
+#, python-format
+msgid "Failed to retrieve group file for repository: %s"
+msgstr ""
+
+#: ../yum/__init__.py:924
+#, python-format
+msgid "Failed to add groups file for repository: %s - %s"
+msgstr "Не успя добавянето на файла на групата за хранилище: %s - %s"
+
+#: ../yum/__init__.py:930
+msgid "No Groups Available in any repository"
+msgstr "Няма налични групи в което и да е хранилище"
+
+#: ../yum/__init__.py:945
+msgid "Getting pkgtags metadata"
+msgstr "Вземам pkgtags метаданните"
+
+#: ../yum/__init__.py:955
+#, python-format
+msgid "Adding tags from repository: %s"
+msgstr "Добавям тагове от хранилище: %s"
+
+#: ../yum/__init__.py:966
+#, python-format
+msgid "Failed to add Pkg Tags for repository: %s - %s"
+msgstr "Не успя добавянето тагове на пакети за хранилище: %s - %s"
+
+#: ../yum/__init__.py:1059
+msgid "Importing additional filelist information"
+msgstr "Импортирам допълнителна информация за списъка файлове"
+
+#: ../yum/__init__.py:1077
+#, python-format
+msgid "The program %s%s%s is found in the yum-utils package."
+msgstr "Програмата %s%s%s е намерена в пакета yum-utils."
+
+#: ../yum/__init__.py:1094
+msgid ""
+"There are unfinished transactions remaining. You might consider running yum-"
+"complete-transaction first to finish them."
+msgstr "Останаха недовършени транзакции. Помислете дали да не стартирате първо yum-complete-transaction за да ги довършите."
+
+#: ../yum/__init__.py:1111
+msgid "--> Finding unneeded leftover dependencies"
+msgstr "--> Търся ненужни останали зависимости"
+
+#: ../yum/__init__.py:1169
+#, python-format
+msgid "Protected multilib versions: %s != %s"
+msgstr "Защитени multilib версии: %s != %s"
+
+#. People are confused about protected mutilib ... so give
+#. them a nicer message.
+#: ../yum/__init__.py:1173
+#, python-format
+msgid ""
+" Multilib version problems found. This often means that the root\n"
+"cause is something else and multilib version checking is just\n"
+"pointing out that there is a problem. Eg.:\n"
+"\n"
+" 1. You have an upgrade for %(name)s which is missing some\n"
+" dependency that another package requires. Yum is trying to\n"
+" solve this by installing an older version of %(name)s of the\n"
+" different architecture. If you exclude the bad architecture\n"
+" yum will tell you what the root cause is (which package\n"
+" requires what). You can try redoing the upgrade with\n"
+" --exclude %(name)s.otherarch ... this should give you an error\n"
+" message showing the root cause of the problem.\n"
+"\n"
+" 2. You have multiple architectures of %(name)s installed, but\n"
+" yum can only see an upgrade for one of those arcitectures.\n"
+" If you don't want/need both architectures anymore then you\n"
+" can remove the one with the missing update and everything\n"
+" will work.\n"
+"\n"
+" 3. You have duplicate versions of %(name)s installed already.\n"
+" You can use \"yum check\" to get yum show these errors.\n"
+"\n"
+"...you can also use --setopt=protected_multilib=false to remove\n"
+"this checking, however this is almost never the correct thing to\n"
+"do as something else is very likely to go wrong (often causing\n"
+"much more problems).\n"
+"\n"
+msgstr ""
+
+#: ../yum/__init__.py:1257
+#, python-format
+msgid "Trying to remove \"%s\", which is protected"
+msgstr "Опитвам да премахна \"%s\", който е защитен"
+
+#: ../yum/__init__.py:1378
+msgid ""
+"\n"
+"Packages skipped because of dependency problems:"
+msgstr "\nПропуснати са пакети поради проблеми в зависимости:"
+
+#: ../yum/__init__.py:1382
+#, python-format
+msgid " %s from %s"
+msgstr " %s от %s"
+
+#. FIXME: _N()
+#: ../yum/__init__.py:1556
+#, python-format
+msgid "** Found %d pre-existing rpmdb problem(s), 'yum check' output follows:"
+msgstr "** Намерени %d предварително съществуващи rpmdb проблема, 'yum check' показа следното:"
+
+#: ../yum/__init__.py:1560
+msgid "Warning: RPMDB altered outside of yum."
+msgstr "Внимание: RPMDB е променена извън yum."
+
+#: ../yum/__init__.py:1572
+msgid "missing requires"
+msgstr "липсват изисквани"
+
+#: ../yum/__init__.py:1573
+msgid "installed conflict"
+msgstr "инсталиран конфликт"
+
+#: ../yum/__init__.py:1709
+msgid ""
+"Warning: scriptlet or other non-fatal errors occurred during transaction."
+msgstr "Внимание: scriptlet или други нефатални грешки възникнаха по време на транзакцията."
+
+#: ../yum/__init__.py:1719
+msgid "Transaction couldn't start:"
+msgstr "Транзакцията не можа да се стартира:"
+
+#. should this be 'to_unicoded'?
+#: ../yum/__init__.py:1722
+msgid "Could not run transaction."
+msgstr "Не можа да се стартира транзакцията"
+
+#: ../yum/__init__.py:1736
+#, python-format
+msgid "Failed to remove transaction file %s"
+msgstr "Не успя премахването файла на транзакцията %s"
+
+#. maybe a file log here, too
+#. but raising an exception is not going to do any good
+#: ../yum/__init__.py:1792
+#, python-format
+msgid "%s was supposed to be installed but is not!"
+msgstr "%s се предполагаше да е инсталиран, но не е!"
+
+#. maybe a file log here, too
+#. but raising an exception is not going to do any good
+#. Note: This actually triggers atm. because we can't
+#. always find the erased txmbr to set it when
+#. we should.
+#: ../yum/__init__.py:1869
+#, python-format
+msgid "%s was supposed to be removed but is not!"
+msgstr "%s се предполагаше да е премахнат, но не е!"
+
+#. Another copy seems to be running.
+#: ../yum/__init__.py:2004
+#, python-format
+msgid "Existing lock %s: another copy is running as pid %s."
+msgstr "Съществува lock %s: работи друго копие с pid %s."
+
+#. Whoa. What the heck happened?
+#: ../yum/__init__.py:2053
+#, python-format
+msgid "Could not create lock at %s: %s "
+msgstr "Не мога да създам lock на %s: %s "
+
+#: ../yum/__init__.py:2065
+#, python-format
+msgid "Could not open lock %s: %s"
+msgstr "Не мога да отворя lock %s: %s"
+
+#. The pid doesn't exist
+#. Whoa. What the heck happened?
+#: ../yum/__init__.py:2082
+#, python-format
+msgid "Unable to check if PID %s is active"
+msgstr "Не може да се провери дали PID %s е активен"
+
+#: ../yum/__init__.py:2132
+#, python-format
+msgid ""
+"Package does not match intended download. Suggestion: run yum "
+"--enablerepo=%s clean metadata"
+msgstr "Пакетът не съвпада с желаното за сваляне. Съвет: изпълнете yum --enablerepo=%s clean metadata"
+
+#: ../yum/__init__.py:2155
+msgid "Could not perform checksum"
+msgstr "Не мога да изчисля контролна сума"
+
+#: ../yum/__init__.py:2158
+msgid "Package does not match checksum"
+msgstr "Контролната сума не съвпада с тази на пакета"
+
+#: ../yum/__init__.py:2222
+#, python-format
+msgid "package fails checksum but caching is enabled for %s"
+msgstr "провали се контролната сума на пакета, но кеширането е разрешено за %s"
+
+#: ../yum/__init__.py:2225 ../yum/__init__.py:2268
+#, python-format
+msgid "using local copy of %s"
+msgstr "използвам локално копие на %s"
+
+#. caller handles errors
+#: ../yum/__init__.py:2342
+msgid "exiting because --downloadonly specified"
+msgstr ""
+
+#: ../yum/__init__.py:2371
+msgid "Header is not complete."
+msgstr "Заглавната част не е пълна."
+
+#: ../yum/__init__.py:2411
+#, python-format
+msgid ""
+"Header not in local cache and caching-only mode enabled. Cannot download %s"
+msgstr "Заглавната част не е в локалния кеш, а сме в режим caching-only. Не мога да сваля %s"
+
+#: ../yum/__init__.py:2471
+#, python-format
+msgid "Public key for %s is not installed"
+msgstr "Публичният ключ за %s не е инсталиран"
+
+#: ../yum/__init__.py:2475
+#, python-format
+msgid "Problem opening package %s"
+msgstr "Проблем при отварянето на пакет %s"
+
+#: ../yum/__init__.py:2483
+#, python-format
+msgid "Public key for %s is not trusted"
+msgstr "Публичният ключ за %s не е доверен"
+
+#: ../yum/__init__.py:2487
+#, python-format
+msgid "Package %s is not signed"
+msgstr "Пакетът %s не е подписан"
+
+#: ../yum/__init__.py:2529
+#, python-format
+msgid "Cannot remove %s"
+msgstr "Не мога да премахна %s"
+
+#: ../yum/__init__.py:2533
+#, python-format
+msgid "%s removed"
+msgstr "%s е премахнат"
+
+#: ../yum/__init__.py:2594
+#, python-format
+msgid "Cannot remove %s file %s"
+msgstr "Не мога да премахна %s файл %s"
+
+#: ../yum/__init__.py:2598
+#, python-format
+msgid "%s file %s removed"
+msgstr "%s файл %s е премахнат"
+
+#: ../yum/__init__.py:2600
+#, python-format
+msgid "%d %s file removed"
+msgid_plural "%d %s files removed"
+msgstr[0] "%d %s премахнат файл"
+msgstr[1] "%d %s премахнати файла"
+
+#: ../yum/__init__.py:2712
+#, python-format
+msgid "More than one identical match in sack for %s"
+msgstr "Повече от един идентично съвпадащ в сака за %s"
+
+#: ../yum/__init__.py:2718
+#, python-format
+msgid "Nothing matches %s.%s %s:%s-%s from update"
+msgstr "Нищо не съвпада с %s.%s %s:%s-%s от обновяването"
+
+#: ../yum/__init__.py:3096
+msgid ""
+"searchPackages() will go away in a future version of Yum."
+" Use searchGenerator() instead. \n"
+msgstr "searchPackages() ще бъде премахнат в бъдеща версия на Yum. Вместо това, ползвайте searchGenerator(). \n"
+
+#: ../yum/__init__.py:3149
+#, python-format
+msgid "Searching %d package"
+msgid_plural "Searching %d packages"
+msgstr[0] "Търся %d пакет"
+msgstr[1] "Търся %d пакета"
+
+#: ../yum/__init__.py:3153
+#, python-format
+msgid "searching package %s"
+msgstr "търся пакет %s"
+
+#: ../yum/__init__.py:3165
+msgid "searching in file entries"
+msgstr "търсене в списъка файлове"
+
+#: ../yum/__init__.py:3172
+msgid "searching in provides entries"
+msgstr "търсене в предоставяно съдържание"
+
+#: ../yum/__init__.py:3369
+msgid "No group data available for configured repositories"
+msgstr "Няма налични данни за групата за конфигурираните хранилища"
+
+#: ../yum/__init__.py:3466 ../yum/__init__.py:3500 ../yum/__init__.py:3576
+#: ../yum/__init__.py:3582 ../yum/__init__.py:3719 ../yum/__init__.py:3723
+#: ../yum/__init__.py:4298
+#, python-format
+msgid "No Group named %s exists"
+msgstr "Не съществува група с име %s"
+
+#: ../yum/__init__.py:3512 ../yum/__init__.py:3740
+#, python-format
+msgid "package %s was not marked in group %s"
+msgstr "пакет %s не беше маркиран в група %s"
+
+#. (upgrade and igroup_data[pkg] == 'available')):
+#: ../yum/__init__.py:3622
+#, python-format
+msgid "Skipping package %s from group %s"
+msgstr "Пропускам пакет %s от група %s"
+
+#: ../yum/__init__.py:3628
+#, python-format
+msgid "Adding package %s from group %s"
+msgstr "Добавяне на пакет %s от група %s"
+
+#: ../yum/__init__.py:3649
+#, python-format
+msgid "No package named %s available to be installed"
+msgstr "Няма наличен пакет за инсталиране с име %s"
+
+#: ../yum/__init__.py:3702
+#, python-format
+msgid "Warning: Group %s does not have any packages to install."
+msgstr ""
+
+#: ../yum/__init__.py:3704
+#, python-format
+msgid "Group %s does have %u conditional packages, which may get installed."
+msgstr "Групата %s съдържа %u условни пакета, които могат да бъдат инсталирани."
+
+#: ../yum/__init__.py:3794
+#, python-format
+msgid "Skipping group %s from environment %s"
+msgstr ""
+
+#. This can happen due to excludes after .up has
+#. happened.
+#: ../yum/__init__.py:3858
+#, python-format
+msgid "Package tuple %s could not be found in packagesack"
+msgstr "Кортежът на пакета %s не може да бъде намерен в сака на пакета"
+
+#: ../yum/__init__.py:3886
+#, python-format
+msgid "Package tuple %s could not be found in rpmdb"
+msgstr "Кортежът на пакета %s не може да бъде намерен в rpmdb"
+
+#: ../yum/__init__.py:3949 ../yum/__init__.py:4012
+#, python-format
+msgid "Invalid version flag from: %s"
+msgstr "Невалиден флаг за версия от: %s"
+
+#: ../yum/__init__.py:3973 ../yum/__init__.py:3979 ../yum/__init__.py:4036
+#: ../yum/__init__.py:4042
+#, python-format
+msgid "No Package found for %s"
+msgstr "Не беше намерен пакет за %s"
+
+#: ../yum/__init__.py:4245 ../yum/__init__.py:4274
+#, python-format
+msgid "Warning: Environment Group %s does not exist."
+msgstr ""
+
+#: ../yum/__init__.py:4397
+#, python-format
+msgid "Package: %s - can't co-install with %s"
+msgstr ""
+
+#: ../yum/__init__.py:4437
+msgid "Package Object was not a package object instance"
+msgstr "Package Object не беше package object instance"
+
+#: ../yum/__init__.py:4441
+msgid "Nothing specified to install"
+msgstr "Нищо не е определено за инсталиране"
+
+#: ../yum/__init__.py:4465 ../yum/__init__.py:5410
+#, python-format
+msgid "Checking for virtual provide or file-provide for %s"
+msgstr "Проверявам за virtual provide или file-provide за %s"
+
+#: ../yum/__init__.py:4542
+#, python-format
+msgid "Package %s installed and not available"
+msgstr "Пакет %s е инсталиран и недостъпен"
+
+#: ../yum/__init__.py:4545
+msgid "No package(s) available to install"
+msgstr "Няма пакет(и) достъпни за инсталиране"
+
+#: ../yum/__init__.py:4557
+#, python-format
+msgid "Package: %s - already in transaction set"
+msgstr "Пакет: %s - вече е в комплекта на транзакцията"
+
+#: ../yum/__init__.py:4589
+#, python-format
+msgid "Package %s is obsoleted by %s which is already installed"
+msgstr "Пакетът %s е излязъл от употреба и заместен от %s, който вече е инсталиран"
+
+#: ../yum/__init__.py:4594
+#, python-format
+msgid ""
+"Package %s is obsoleted by %s, but obsoleting package does not provide for "
+"requirements"
+msgstr "Пакетът %s е заместен от %s, но заместващият пакет не предоставя изискваното"
+
+#: ../yum/__init__.py:4597
+#, python-format
+msgid "Package %s is obsoleted by %s, trying to install %s instead"
+msgstr "Излезлият от употреба пакет %s е заместен от %s, вместо него пробвам да инсталирам %s"
+
+#: ../yum/__init__.py:4605
+#, python-format
+msgid "Package %s already installed and latest version"
+msgstr "Пакетът %s е вече инсталиран и е последна версия"
+
+#: ../yum/__init__.py:4619
+#, python-format
+msgid "Package matching %s already installed. Checking for update."
+msgstr "Съвпадащият пакет %s е вече инсталиран. Проверявам за обновления."
+
+#. update everything (the easy case)
+#: ../yum/__init__.py:4751
+msgid "Updating Everything"
+msgstr "Обновявам всичко"
+
+#: ../yum/__init__.py:4775 ../yum/__init__.py:4930 ../yum/__init__.py:4975
+#: ../yum/__init__.py:5011
+#, python-format
+msgid "Not Updating Package that is already obsoleted: %s.%s %s:%s-%s"
+msgstr "Не обновявам пакет, излязъл вече от употреба: %s.%s %s:%s-%s"
+
+#: ../yum/__init__.py:4830 ../yum/__init__.py:5072
+#, python-format
+msgid "%s"
+msgstr "%s"
+
+#: ../yum/__init__.py:4854 ../yum/__init__.py:5080 ../yum/__init__.py:5416
+#, python-format
+msgid "No Match for argument: %s"
+msgstr "Няма съвпадение за аргумент: %s"
+
+#: ../yum/__init__.py:4872
+#, python-format
+msgid "No package matched to upgrade: %s"
+msgstr "Няма съвпадащ пакет за надграждане: %s"
+
+#: ../yum/__init__.py:4919
+#, python-format
+msgid "Package is already obsoleted: %s.%s %s:%s-%s"
+msgstr "Пакетът вече е излязъл от употреба: %s.%s %s:%s-%s"
+
+#: ../yum/__init__.py:4970
+#, python-format
+msgid "Not Updating Package that is obsoleted: %s"
+msgstr "Не обновявам пакет, излязъл от употреба: %s"
+
+#: ../yum/__init__.py:4979 ../yum/__init__.py:5015
+#, python-format
+msgid "Not Updating Package that is already updated: %s.%s %s:%s-%s"
+msgstr "Не обновявам вече обновен пакет: %s.%s %s:%s-%s"
+
+#: ../yum/__init__.py:5093
+#, python-format
+msgid "No package matched to remove: %s"
+msgstr "Няма съвпадащ пакет за премахване: %s"
+
+#: ../yum/__init__.py:5099
+#, python-format
+msgid "Skipping the running kernel: %s"
+msgstr "Пропускам работещото ядро: %s"
+
+#: ../yum/__init__.py:5105
+#, python-format
+msgid "Removing %s from the transaction"
+msgstr "Премахвам %s от транзакцията"
+
+#: ../yum/__init__.py:5142
+#, python-format
+msgid "Cannot open: %s. Skipping."
+msgstr "Не мога да отворя: %s. Пропускам го."
+
+#: ../yum/__init__.py:5145 ../yum/__init__.py:5262 ../yum/__init__.py:5347
+#, python-format
+msgid "Examining %s: %s"
+msgstr "Проверявам %s: %s"
+
+#: ../yum/__init__.py:5149
+#, python-format
+msgid "Cannot localinstall deltarpm: %s. Skipping."
+msgstr "Не мога да инсталирам локално deltarpm: %s. Пропускам го."
+
+#: ../yum/__init__.py:5158 ../yum/__init__.py:5265 ../yum/__init__.py:5350
+#, python-format
+msgid ""
+"Cannot add package %s to transaction. Not a compatible architecture: %s"
+msgstr "Не мога да добавя пакета %s към транзакцията. Несъвместима архитектура: %s"
+
+#: ../yum/__init__.py:5164
+#, python-format
+msgid "Cannot install package %s. It is obsoleted by installed package %s"
+msgstr "Не мога да инсталирам пакета %s. Излязъл е от употреба и е заместен от пакета %s"
+
+#: ../yum/__init__.py:5172
+#, python-format
+msgid ""
+"Package %s not installed, cannot update it. Run yum install to install it "
+"instead."
+msgstr "Пакетът %s не е инсталиран, не мога да го обновя. Стартирайте yum install за да го инсталирате."
+
+#: ../yum/__init__.py:5191 ../yum/__init__.py:5198
+#, python-format
+msgid ""
+"Package %s.%s not installed, cannot update it. Run yum install to install it"
+" instead."
+msgstr "Пакетът %s.%s не е инсталиран и не мога да го обновя. Вместо това, стартирайте yum install за да го инсталирате."
+
+#: ../yum/__init__.py:5207 ../yum/__init__.py:5270 ../yum/__init__.py:5355
+#, python-format
+msgid "Excluding %s"
+msgstr "Изключвам %s"
+
+#: ../yum/__init__.py:5212
+#, python-format
+msgid "Marking %s to be installed"
+msgstr "Маркирам %s за инсталиране"
+
+#: ../yum/__init__.py:5218
+#, python-format
+msgid "Marking %s as an update to %s"
+msgstr "Маркирам %s като обновление към %s"
+
+#: ../yum/__init__.py:5225
+#, python-format
+msgid "%s: does not update installed package."
+msgstr "%s: не обнови инсталиран пакет."
+
+#: ../yum/__init__.py:5259 ../yum/__init__.py:5344
+#, python-format
+msgid "Cannot open file: %s. Skipping."
+msgstr "Не мога да отворя файл: %s. Пропускам го."
+
+#: ../yum/__init__.py:5299
+msgid "Problem in reinstall: no package matched to remove"
+msgstr "Проблем при преинсталиране: няма съвпадащ пакет за премахване"
+
+#: ../yum/__init__.py:5325
+#, python-format
+msgid "Problem in reinstall: no package %s matched to install"
+msgstr "Проблем при преинсталиране: няма съвпадащ пакет %s за инсталиране"
+
+#: ../yum/__init__.py:5438
+msgid "No package(s) available to downgrade"
+msgstr "Няма наличен пакет(и) за връщане към предишна версия"
+
+#: ../yum/__init__.py:5446
+#, python-format
+msgid "Package %s is allowed multiple installs, skipping"
+msgstr "На пакета %s е позволено многократно инсталиране, пропускам го"
+
+#: ../yum/__init__.py:5496
+#, python-format
+msgid "No Match for available package: %s"
+msgstr "Няма съвпадение за наличен пакет: %s"
+
+#: ../yum/__init__.py:5506
+#, python-format
+msgid "Only Upgrade available on package: %s"
+msgstr "Налично е само надграждане на пакет: %s"
+
+#: ../yum/__init__.py:5619 ../yum/__init__.py:5686
+#, python-format
+msgid "Failed to downgrade: %s"
+msgstr "Неуспех при връщане към предишна версия на: %s"
+
+#: ../yum/__init__.py:5636 ../yum/__init__.py:5692
+#, python-format
+msgid "Failed to upgrade: %s"
+msgstr "Неуспешно надграждане: %s"
+
+#: ../yum/__init__.py:5725
+#, python-format
+msgid "Retrieving key from %s"
+msgstr "Извличане на ключ от %s"
+
+#: ../yum/__init__.py:5743
+msgid "GPG key retrieval failed: "
+msgstr "Извличането на GPG ключ не успя: "
+
+#. if we decide we want to check, even though the sig failed
+#. here is where we would do that
+#: ../yum/__init__.py:5766
+#, python-format
+msgid "GPG key signature on key %s does not match CA Key for repo: %s"
+msgstr "GPG ключовата сигнатура на ключ %s не съвпада с CA ключа за хранилище: %s"
+
+#: ../yum/__init__.py:5768
+msgid "GPG key signature verified against CA Key(s)"
+msgstr "GPG ключовата сигнатура е проверена чрез CA ключ(ове)"
+
+#: ../yum/__init__.py:5776
+#, python-format
+msgid "Invalid GPG Key from %s: %s"
+msgstr "Невалиден GPG ключ от %s: %s"
+
+#: ../yum/__init__.py:5785
+#, python-format
+msgid "GPG key parsing failed: key does not have value %s"
+msgstr "Разборът на GPG ключ не успя: ключът няма стойност %s"
+
+#: ../yum/__init__.py:5801
+#, python-format
+msgid ""
+"Importing %s key 0x%s:\n"
+" Userid : \"%s\"\n"
+" Fingerprint: %s\n"
+" Package : %s (%s)\n"
+" From : %s"
+msgstr "Импортирам %s ключ 0x%s:\n Потреб.id : \"%s\"\n Пръстов отп.: %s\n Пакет : %s (%s)\n От : %s"
+
+#: ../yum/__init__.py:5811
+#, python-format
+msgid ""
+"Importing %s key 0x%s:\n"
+" Userid : \"%s\"\n"
+" Fingerprint: %s\n"
+" From : %s"
+msgstr "Импортирам %s ключ 0x%s:\n Потреб.id : \"%s\"\n Пръстов отп.: %s\n От : %s"
+
+#: ../yum/__init__.py:5839
+#, python-format
+msgid ""
+"\n"
+"\n"
+"\n"
+" Failing package is: %s\n"
+" GPG Keys are configured as: %s\n"
+msgstr "\n\n\n Проблемният пакет е: %s\n GPG ключовете са конфигурирани така: %s\n"
+
+#: ../yum/__init__.py:5853
+#, python-format
+msgid "GPG key at %s (0x%s) is already installed"
+msgstr "GPG ключът на %s (0x%s) е вече инсталиран"
+
+#: ../yum/__init__.py:5891
+#, python-format
+msgid "Key import failed (code %d)"
+msgstr "Импортирането на ключ не успя (код %d)"
+
+#: ../yum/__init__.py:5893 ../yum/__init__.py:5994
+msgid "Key imported successfully"
+msgstr "Ключът е успешно импортиран"
+
+#: ../yum/__init__.py:5897
+msgid "Didn't install any keys"
+msgstr "Не инсталирай никакви ключове"
+
+#: ../yum/__init__.py:5900
+#, 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-и на ключове."
+
+#: ../yum/__init__.py:5910
+msgid "Import of key(s) didn't help, wrong key(s)?"
+msgstr "Импортирането на ключ(ове) не помогна, грешен ключ(ове)?"
+
+#: ../yum/__init__.py:5932
+msgid "No"
+msgstr "Не"
+
+#: ../yum/__init__.py:5934
+msgid "Yes"
+msgstr "Да"
+
+#: ../yum/__init__.py:5935
+#, python-format
+msgid ""
+"\n"
+"\n"
+"\n"
+" CA Key: %s\n"
+" Failing repo is: %s\n"
+" GPG Keys are configured as: %s\n"
+msgstr "\n\n\n CA ключ: %s\n Проблемното хранилище е: %s\n GPG ключовете са конфигурирани така: %s\n"
+
+#: ../yum/__init__.py:5948
+#, python-format
+msgid "GPG key at %s (0x%s) is already imported"
+msgstr "GPG ключ на %s (0x%s) е вече импортиран"
+
+#: ../yum/__init__.py:5992
+#, python-format
+msgid "Key %s import failed"
+msgstr "Импортирането на ключ %s не успя"
+
+#: ../yum/__init__.py:6009
+#, python-format
+msgid "Didn't install any keys for repo %s"
+msgstr "Не инсталирай никакви ключове за хранилище %s"
+
+#: ../yum/__init__.py:6014
+#, python-format
+msgid ""
+"The GPG keys listed for the \"%s\" repository are already installed but they are not correct.\n"
+"Check that the correct key URLs are configured for this repository."
+msgstr "GPG ключовете, описани за хранилището \"%s\" са вече инсталирани, но не са коректни.\nПроверете дали за това хранилище са конфигурирани коректните URL-и на ключове."
+
+#: ../yum/__init__.py:6172
+msgid "Unable to find a suitable mirror."
+msgstr "Не мога да намеря подходящ огледален сървър."
+
+#: ../yum/__init__.py:6174
+msgid "Errors were encountered while downloading packages."
+msgstr "Възникнаха грешки при свалянето на пакети."
+
+#: ../yum/__init__.py:6229
+#, python-format
+msgid "Please report this error at %s"
+msgstr "Моля, докладвайте тази грешка на %s"
+
+#: ../yum/__init__.py:6246
+msgid "Test Transaction Errors: "
+msgstr "Грешки от теста на транзакцията: "
+
+#: ../yum/__init__.py:6358
+#, python-format
+msgid "Could not set cachedir: %s"
+msgstr "Не мога да задам cachedir: %s"
+
+#: ../yum/__init__.py:6420 ../yum/__init__.py:6422
+msgid "Dependencies not solved. Will not save unresolved transaction."
+msgstr "Зависимостите не са решени. Няма да запиша нерешена транзакция."
+
+#: ../yum/__init__.py:6455 ../yum/__init__.py:6457
+#, python-format
+msgid "Could not save transaction file %s: %s"
+msgstr "Не мога да запиша транзакционния файл %s: %s"
+
+#: ../yum/__init__.py:6483
+#, python-format
+msgid "Could not access/read saved transaction %s : %s"
+msgstr "Не мога да достъпя/прочета записана транзакция %s : %s"
+
+#: ../yum/__init__.py:6521
+msgid "rpmdb ver mismatched saved transaction version,"
+msgstr ""
+
+#: ../yum/__init__.py:6535
+msgid "cannot find tsflags or tsflags not integer."
+msgstr "не мога да намеря tsflags или те не са целочислени."
+
+#: ../yum/__init__.py:6584
+#, python-format
+msgid "Found txmbr in unknown current state: %s"
+msgstr "Намерен е txmbr в непознато текущо състояние: %s"
+
+#: ../yum/__init__.py:6588
+#, python-format
+msgid "Could not find txmbr: %s in state %s"
+msgstr "Не мога да намеря txmbr: %s в състояние %s"
+
+#: ../yum/__init__.py:6625 ../yum/__init__.py:6642
+#, python-format
+msgid "Could not find txmbr: %s from origin: %s"
+msgstr "Не мога да намеря txmbr: %s от произход: %s"
+
+#: ../yum/__init__.py:6667
+msgid "Transaction members, relations are missing or ts has been modified,"
+msgstr "Липсват връзки или членове на транзакцията, или тя е била променена,"
+
+#: ../yum/__init__.py:6670
+msgid " ignoring, as requested. You must redepsolve!"
+msgstr " игнорирам, както е зададено. Трябва отново определяне на зависимости!"
+
+#. Debugging output
+#: ../yum/__init__.py:6738 ../yum/__init__.py:6757
+#, python-format
+msgid "%s has been visited already and cannot be removed."
+msgstr "%s вече беше посетен и не може да бъде премахнат."
+
+#. Debugging output
+#: ../yum/__init__.py:6741
+#, python-format
+msgid "Examining revdeps of %s"
+msgstr "Изследване версиите на зависимости на %s"
+
+#. Debugging output
+#: ../yum/__init__.py:6762
+#, python-format
+msgid "%s has revdep %s which was user-installed."
+msgstr "%s има зависимост на версия %s, която е инсталирана от потребителя."
+
+#: ../yum/__init__.py:6773 ../yum/__init__.py:6779
+#, python-format
+msgid "%s is needed by a package to be installed."
+msgstr ""
+
+#. Debugging output
+#: ../yum/__init__.py:6793
+#, python-format
+msgid "%s has no user-installed revdeps."
+msgstr "%s няма инсталирани от потребителя зависимости на версии."
+
+#. Mostly copied from YumOutput._outKeyValFill()
+#: ../yum/plugins.py:212
+msgid "Loaded plugins: "
+msgstr "Заредени плъгини: "
+
+#: ../yum/plugins.py:226 ../yum/plugins.py:232
+#, python-format
+msgid "No plugin match for: %s"
+msgstr "Няма съвпадащ плъгин за: %s"
+
+#: ../yum/plugins.py:262
+#, python-format
+msgid "Not loading \"%s\" plugin, as it is disabled"
+msgstr "Не зареждам плъгина \"%s\", тъй като е забранен"
+
+#. Give full backtrace:
+#: ../yum/plugins.py:274
+#, python-format
+msgid "Plugin \"%s\" can't be imported"
+msgstr "Плъгинът \"%s\" не може да бъде импортиран"
+
+#: ../yum/plugins.py:281
+#, python-format
+msgid "Plugin \"%s\" doesn't specify required API version"
+msgstr "Плъгинът \"%s\" не указва изисквана API версия"
+
+#: ../yum/plugins.py:286
+#, python-format
+msgid "Plugin \"%s\" requires API %s. Supported API is %s."
+msgstr "Плъгинът \"%s\" изисква API %s. Поддържаният API е %s."
+
+#: ../yum/plugins.py:319
+#, python-format
+msgid "Loading \"%s\" plugin"
+msgstr "Зареждам плъгин \"%s\""
+
+#: ../yum/plugins.py:326
+#, python-format
+msgid "Two or more plugins with the name \"%s\" exist in the plugin search path"
+msgstr "В пътя за търсене съществуват два или повече плъгина с име \"%s\""
+
+#: ../yum/plugins.py:346
+#, python-format
+msgid "Configuration file %s not found"
+msgstr "Не е намерен конфигурационният файл %s"
+
+#. for
+#. Configuration files for the plugin not found
+#: ../yum/plugins.py:349
+#, python-format
+msgid "Unable to find configuration file for plugin %s"
+msgstr "Не мога да намеря конфигуриращ файл за плъгина %s"
+
+#: ../yum/plugins.py:553
+msgid "registration of commands not supported"
+msgstr "регистрация на команди не се поддържа"
+
+#: ../yum/rpmsack.py:159
+msgid "has missing requires of"
+msgstr "има липсващи изисквания на"
+
+#: ../yum/rpmsack.py:162
+msgid "has installed conflicts"
+msgstr "има инсталирани конфликти"
+
+#: ../yum/rpmsack.py:171
+#, python-format
+msgid "%s is a duplicate with %s"
+msgstr "%s се дублира с %s"
+
+#: ../yum/rpmsack.py:179
+#, python-format
+msgid "%s is obsoleted by %s"
+msgstr "%s е заместен от %s"
+
+#: ../yum/rpmsack.py:187
+#, python-format
+msgid "%s provides %s but it cannot be found"
+msgstr "%s осигурява %s, но не може да бъде намерен"
+
+#: ../yum/rpmtrans.py:80
+msgid "Repackaging"
+msgstr "Препакетиране"
+
+#: ../yum/rpmtrans.py:149
+#, python-format
+msgid "Verify: %u/%u: %s"
+msgstr "Провери: %u/%u: %s"
+
+#: ../yum/yumRepo.py:919
+#, python-format
+msgid ""
+"Insufficient space in download directory %s\n"
+" * free %s\n"
+" * needed %s"
+msgstr "Недостатъчно пространство в директорията за сваляне %s\n * свободно %s\n * необходимо %s"
+
+#: ../yum/yumRepo.py:986
+msgid "Package does not match intended download."
+msgstr ""
+
+#: ../rpmUtils/oldUtils.py:33
+#, python-format
+msgid "Header cannot be opened or does not match %s, %s."
+msgstr "Заглавната част не може да бъде отворена или не съвпада %s, %s."
+
+#: ../rpmUtils/oldUtils.py:53
+#, python-format
+msgid "RPM %s fails md5 check"
+msgstr "Не успя md5 проверката на RPM %s"
+
+#: ../rpmUtils/oldUtils.py:151
+msgid "Could not open RPM database for reading. Perhaps it is already in use?"
+msgstr "Не мога да отворя RPM базата данни за четене. Може би е вече в употреба?"
+
+#: ../rpmUtils/oldUtils.py:183
+msgid "Got an empty Header, something has gone wrong"
+msgstr "Намерена празна заглавна част, нещо се е объркало"
+
+#: ../rpmUtils/oldUtils.py:253 ../rpmUtils/oldUtils.py:260
+#: ../rpmUtils/oldUtils.py:263 ../rpmUtils/oldUtils.py:266
+#, python-format
+msgid "Damaged Header %s"
+msgstr "Повредена заглавна част %s"
+
+#: ../rpmUtils/oldUtils.py:281
+#, python-format
+msgid "Error opening rpm %s - error %s"
+msgstr "Грешка при отваряне на rpm %s - грешка %s"
diff --git a/po/bn_IN.po b/po/bn_IN.po
index f1f232a..fbec035 100644
--- a/po/bn_IN.po
+++ b/po/bn_IN.po
@@ -2,427 +2,506 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
msgid ""
msgstr ""
"Project-Id-Version: Yum\n"
-"Report-Msgid-Bugs-To: http://yum.baseurl.org/\n"
-"POT-Creation-Date: 2011-06-06 10:21-0400\n"
-"PO-Revision-Date: 2011-06-06 14:21+0000\n"
-"Last-Translator: skvidal <skvidal@fedoraproject.org>\n"
-"Language-Team: Bengali (India) (http://www.transifex.net/projects/p/yum/team/bn_IN/)\n"
+"Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n"
+"POT-Creation-Date: 2013-01-30 09:08-0500\n"
+"PO-Revision-Date: 2013-01-30 14:08+0000\n"
+"Last-Translator: james <james@fedoraproject.org>\n"
+"Language-Team: Bengali (India) (http://www.transifex.com/projects/p/yum/language/bn_IN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: bn_IN\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../callback.py:48 ../output.py:1037 ../yum/rpmtrans.py:73
+#: ../callback.py:45 ../output.py:1502 ../yum/rpmtrans.py:73
msgid "Updating"
msgstr ""
-#: ../callback.py:49 ../yum/rpmtrans.py:74
+#: ../callback.py:46 ../yum/rpmtrans.py:74
msgid "Erasing"
msgstr ""
-#: ../callback.py:50 ../callback.py:51 ../callback.py:53 ../output.py:1036
-#: ../output.py:2218 ../yum/rpmtrans.py:75 ../yum/rpmtrans.py:76
+#: ../callback.py:47 ../callback.py:48 ../callback.py:50 ../output.py:1501
+#: ../output.py:2922 ../yum/rpmtrans.py:75 ../yum/rpmtrans.py:76
#: ../yum/rpmtrans.py:78
msgid "Installing"
msgstr ""
-#: ../callback.py:52 ../callback.py:58 ../output.py:1840 ../yum/rpmtrans.py:77
+#: ../callback.py:49 ../callback.py:55 ../output.py:2379 ../yum/rpmtrans.py:77
msgid "Obsoleted"
msgstr ""
-#: ../callback.py:54 ../output.py:1169 ../output.py:1686 ../output.py:1847
+#: ../callback.py:51 ../output.py:1670 ../output.py:2222 ../output.py:2386
msgid "Updated"
msgstr ""
-#: ../callback.py:55 ../output.py:1685
+#: ../callback.py:52 ../output.py:2221
msgid "Erased"
msgstr ""
-#: ../callback.py:56 ../callback.py:57 ../callback.py:59 ../output.py:1167
-#: ../output.py:1685 ../output.py:1687 ../output.py:2190
+#: ../callback.py:53 ../callback.py:54 ../callback.py:56 ../output.py:1668
+#: ../output.py:2221 ../output.py:2223 ../output.py:2894
msgid "Installed"
msgstr ""
-#: ../callback.py:130
+#: ../callback.py:142
msgid "No header - huh?"
msgstr ""
-#: ../callback.py:168
+#: ../callback.py:180
msgid "Repackage"
msgstr ""
-#: ../callback.py:189
+#: ../callback.py:201
#, python-format
msgid "Error: invalid output state: %s for %s"
msgstr ""
-#: ../callback.py:212
+#: ../callback.py:224
#, python-format
msgid "Erased: %s"
msgstr ""
-#: ../callback.py:217 ../output.py:1038 ../output.py:2193
+#: ../callback.py:229 ../output.py:1503 ../output.py:2897
msgid "Removing"
msgstr ""
-#: ../callback.py:219 ../yum/rpmtrans.py:79
+#: ../callback.py:231 ../yum/rpmtrans.py:79
msgid "Cleanup"
msgstr ""
-#: ../cli.py:115
+#: ../cli.py:122
#, python-format
msgid "Command \"%s\" already defined"
msgstr ""
-#: ../cli.py:127
+#: ../cli.py:137
msgid "Setting up repositories"
msgstr ""
-#: ../cli.py:138
+#: ../cli.py:148
msgid "Reading repository metadata in from local files"
msgstr ""
-#: ../cli.py:245 ../utils.py:281
+#: ../cli.py:273 ../cli.py:277 ../utils.py:320
#, python-format
msgid "Config Error: %s"
msgstr ""
-#: ../cli.py:248 ../cli.py:1584 ../utils.py:284
+#: ../cli.py:280 ../cli.py:2206 ../utils.py:323
#, python-format
msgid "Options Error: %s"
msgstr ""
-#: ../cli.py:293
+#: ../cli.py:327
#, python-format
msgid " Installed: %s-%s at %s"
msgstr ""
-#: ../cli.py:295
+#: ../cli.py:329
#, python-format
msgid " Built : %s at %s"
msgstr ""
-#: ../cli.py:297
+#: ../cli.py:331
#, python-format
msgid " Committed: %s at %s"
msgstr ""
-#: ../cli.py:336
+#: ../cli.py:372
msgid "You need to give some command"
msgstr ""
-#: ../cli.py:350
+#: ../cli.py:386
#, python-format
msgid "No such command: %s. Please use %s --help"
msgstr ""
-#: ../cli.py:400
+#: ../cli.py:444
msgid "Disk Requirements:\n"
msgstr ""
-#: ../cli.py:402
+#: ../cli.py:446
#, python-format
msgid " At least %dMB more space needed on the %s filesystem.\n"
-msgstr ""
+msgid_plural " At least %dMB more space needed on the %s filesystem.\n"
+msgstr[0] ""
+msgstr[1] ""
#. TODO: simplify the dependency errors?
#. Fixup the summary
-#: ../cli.py:407
+#: ../cli.py:451
msgid ""
"Error Summary\n"
"-------------\n"
msgstr ""
-#: ../cli.py:450
+#: ../cli.py:472
+msgid "Can't create lock file; exiting"
+msgstr ""
+
+#: ../cli.py:479
+msgid ""
+"Another app is currently holding the yum lock; exiting as configured by "
+"exit_on_lock"
+msgstr ""
+
+#: ../cli.py:532
msgid "Trying to run the transaction but nothing to do. Exiting."
msgstr ""
-#: ../cli.py:497
+#: ../cli.py:577
+msgid "future rpmdb ver mismatched saved transaction version,"
+msgstr ""
+
+#: ../cli.py:579 ../yum/__init__.py:6523
+msgid " ignoring, as requested."
+msgstr ""
+
+#: ../cli.py:582 ../yum/__init__.py:6526 ../yum/__init__.py:6673
+msgid " aborting."
+msgstr ""
+
+#: ../cli.py:588
msgid "Exiting on user Command"
msgstr ""
-#: ../cli.py:501
+#: ../cli.py:592
msgid "Downloading Packages:"
msgstr ""
-#: ../cli.py:506
+#: ../cli.py:597
msgid "Error Downloading Packages:\n"
msgstr ""
-#: ../cli.py:525 ../yum/__init__.py:4967
+#: ../cli.py:616 ../yum/__init__.py:6215
msgid "Running Transaction Check"
msgstr ""
-#: ../cli.py:534 ../yum/__init__.py:4976
+#: ../cli.py:625 ../yum/__init__.py:6224
msgid "ERROR You need to update rpm to handle:"
msgstr ""
-#: ../cli.py:536 ../yum/__init__.py:4979
+#: ../cli.py:627 ../yum/__init__.py:6227
msgid "ERROR with transaction check vs depsolve:"
msgstr ""
-#: ../cli.py:542
+#: ../cli.py:633
msgid "RPM needs to be updated"
msgstr ""
-#: ../cli.py:543
+#: ../cli.py:634
#, python-format
msgid "Please report this error in %s"
msgstr ""
-#: ../cli.py:549
+#: ../cli.py:640
msgid "Running Transaction Test"
msgstr ""
-#: ../cli.py:561
+#: ../cli.py:652
msgid "Transaction Check Error:\n"
msgstr ""
-#: ../cli.py:568
+#: ../cli.py:659
msgid "Transaction Test Succeeded"
msgstr ""
-#: ../cli.py:600
+#: ../cli.py:691
msgid "Running Transaction"
msgstr ""
-#: ../cli.py:630
+#: ../cli.py:724
msgid ""
"Refusing to automatically import keys when running unattended.\n"
"Use \"-y\" to override."
msgstr ""
-#: ../cli.py:649 ../cli.py:692
+#: ../cli.py:743 ../cli.py:786
msgid " * Maybe you meant: "
msgstr ""
-#: ../cli.py:675 ../cli.py:683
+#: ../cli.py:769 ../cli.py:777
#, python-format
msgid "Package(s) %s%s%s available, but not installed."
msgstr ""
-#: ../cli.py:689 ../cli.py:722 ../cli.py:908
+#: ../cli.py:783 ../cli.py:891 ../cli.py:1158
#, python-format
msgid "No package %s%s%s available."
msgstr ""
-#: ../cli.py:729 ../cli.py:973
-msgid "Package(s) to install"
+#: ../cli.py:871 ../cli.py:881 ../cli.py:1101 ../cli.py:1111
+#, python-format
+msgid "Bad %s argument %s."
msgstr ""
-#: ../cli.py:732 ../cli.py:733 ../cli.py:914 ../cli.py:948 ../cli.py:974
-#: ../yumcommands.py:190
+#: ../cli.py:900 ../yumcommands.py:3331
+#, python-format
+msgid "%d package to install"
+msgid_plural "%d packages to install"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../cli.py:903 ../cli.py:904 ../cli.py:1169 ../cli.py:1170 ../cli.py:1224
+#: ../cli.py:1225 ../cli.py:1260 ../yumcommands.py:323 ../yumcommands.py:3419
msgid "Nothing to do"
msgstr ""
-#: ../cli.py:767
+#: ../cli.py:953
#, python-format
-msgid "%d packages marked for Update"
-msgstr ""
+msgid "%d package marked for Update"
+msgid_plural "%d packages marked for Update"
+msgstr[0] ""
+msgstr[1] ""
-#: ../cli.py:770
+#: ../cli.py:955
msgid "No Packages marked for Update"
msgstr ""
-#: ../cli.py:866
+#: ../cli.py:1067
#, python-format
-msgid "%d packages marked for Distribution Synchronization"
-msgstr ""
+msgid "%d package marked for Distribution Synchronization"
+msgid_plural "%d packages marked for Distribution Synchronization"
+msgstr[0] ""
+msgstr[1] ""
-#: ../cli.py:869
+#: ../cli.py:1069
msgid "No Packages marked for Distribution Synchronization"
msgstr ""
-#: ../cli.py:885
+#: ../cli.py:1124
#, python-format
-msgid "%d packages marked for removal"
-msgstr ""
+msgid "%d package marked for removal"
+msgid_plural "%d packages marked for removal"
+msgstr[0] ""
+msgstr[1] ""
-#: ../cli.py:888
+#: ../cli.py:1126
msgid "No Packages marked for removal"
msgstr ""
-#: ../cli.py:913
-msgid "Package(s) to downgrade"
-msgstr ""
+#: ../cli.py:1166
+#, python-format
+msgid "%d package to downgrade"
+msgid_plural "%d packages to downgrade"
+msgstr[0] ""
+msgstr[1] ""
-#: ../cli.py:938
+#: ../cli.py:1207
#, python-format
msgid " (from %s)"
msgstr ""
-#: ../cli.py:939
+#: ../cli.py:1208
#, python-format
msgid "Installed package %s%s%s%s not available."
msgstr ""
-#: ../cli.py:947
-msgid "Package(s) to reinstall"
-msgstr ""
+#: ../cli.py:1221
+#, python-format
+msgid "%d package to reinstall"
+msgid_plural "%d packages to reinstall"
+msgstr[0] ""
+msgstr[1] ""
-#: ../cli.py:960
+#: ../cli.py:1246
msgid "No Packages Provided"
msgstr ""
-#: ../cli.py:1058
+#: ../cli.py:1259
+msgid "Package(s) to install"
+msgstr ""
+
+#: ../cli.py:1367
#, python-format
msgid "N/S Matched: %s"
msgstr ""
-#: ../cli.py:1075
+#: ../cli.py:1384
#, python-format
msgid " Name and summary matches %sonly%s, use \"search all\" for everything."
msgstr ""
-#: ../cli.py:1077
+#: ../cli.py:1386
#, python-format
msgid ""
" Full name and summary matches %sonly%s, use \"search all\" for everything."
msgstr ""
-#: ../cli.py:1095
+#: ../cli.py:1404
#, python-format
msgid "Matched: %s"
msgstr ""
-#: ../cli.py:1102
+#: ../cli.py:1411
#, python-format
msgid " Name and summary matches %smostly%s, use \"search all\" for everything."
msgstr ""
-#: ../cli.py:1106
+#: ../cli.py:1415
#, python-format
msgid "Warning: No matches found for: %s"
msgstr ""
-#: ../cli.py:1109
+#: ../cli.py:1418
msgid "No Matches found"
msgstr ""
-#: ../cli.py:1174
+#: ../cli.py:1536
#, python-format
-msgid "No Package Found for %s"
+msgid ""
+"Error: No Packages found for:\n"
+" %s"
msgstr ""
-#: ../cli.py:1184
+#: ../cli.py:1572
msgid "Cleaning repos: "
msgstr ""
-#: ../cli.py:1189
+#: ../cli.py:1577
msgid "Cleaning up Everything"
msgstr ""
-#: ../cli.py:1205
+#: ../cli.py:1593
msgid "Cleaning up Headers"
msgstr ""
-#: ../cli.py:1208
+#: ../cli.py:1596
msgid "Cleaning up Packages"
msgstr ""
-#: ../cli.py:1211
+#: ../cli.py:1599
msgid "Cleaning up xml metadata"
msgstr ""
-#: ../cli.py:1214
+#: ../cli.py:1602
msgid "Cleaning up database cache"
msgstr ""
-#: ../cli.py:1217
+#: ../cli.py:1605
msgid "Cleaning up expire-cache metadata"
msgstr ""
-#: ../cli.py:1220
+#: ../cli.py:1608
msgid "Cleaning up cached rpmdb data"
msgstr ""
-#: ../cli.py:1223
+#: ../cli.py:1611
msgid "Cleaning up plugins"
msgstr ""
-#: ../cli.py:1247
-#, python-format
-msgid "Warning: No groups match: %s"
+#: ../cli.py:1727
+msgid "Installed Environment Groups:"
+msgstr ""
+
+#: ../cli.py:1728
+msgid "Available Environment Groups:"
msgstr ""
-#: ../cli.py:1264
+#: ../cli.py:1735
msgid "Installed Groups:"
msgstr ""
-#: ../cli.py:1270
+#: ../cli.py:1742
msgid "Installed Language Groups:"
msgstr ""
-#: ../cli.py:1276
+#: ../cli.py:1749
msgid "Available Groups:"
msgstr ""
-#: ../cli.py:1282
+#: ../cli.py:1756
msgid "Available Language Groups:"
msgstr ""
-#: ../cli.py:1285
+#: ../cli.py:1759
+#, python-format
+msgid "Warning: No Environments/Groups match: %s"
+msgstr ""
+
+#: ../cli.py:1763
msgid "Done"
msgstr ""
-#: ../cli.py:1296 ../cli.py:1314 ../cli.py:1320 ../yum/__init__.py:3313
+#: ../cli.py:1818
+#, python-format
+msgid "Warning: Group/Environment %s does not exist."
+msgstr ""
+
+#: ../cli.py:1859
+#, python-format
+msgid "Warning: Environment %s does not exist."
+msgstr ""
+
+#: ../cli.py:1873 ../cli.py:1879 ../yum/__init__.py:4254
#, python-format
msgid "Warning: Group %s does not exist."
msgstr ""
-#: ../cli.py:1324
+#: ../cli.py:1883
msgid "No packages in any requested group available to install or update"
msgstr ""
-#: ../cli.py:1326
+#: ../cli.py:1885
#, python-format
-msgid "%d Package(s) to Install"
+msgid "%d package to Install"
+msgid_plural "%d packages to Install"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../cli.py:1919 ../yum/__init__.py:3536 ../yum/__init__.py:3766
+#: ../yum/__init__.py:3824
+#, python-format
+msgid "No Environment named %s exists"
msgstr ""
-#: ../cli.py:1336 ../yum/__init__.py:3325
+#: ../cli.py:1935 ../yum/__init__.py:4282
#, python-format
msgid "No group named %s exists"
msgstr ""
-#: ../cli.py:1342
+#: ../cli.py:1945
msgid "No packages to remove from groups"
msgstr ""
-#: ../cli.py:1344
+#: ../cli.py:1947 ../yumcommands.py:3351
#, python-format
-msgid "%d Package(s) to remove"
-msgstr ""
+msgid "%d package to remove"
+msgid_plural "%d packages to remove"
+msgstr[0] ""
+msgstr[1] ""
-#: ../cli.py:1386
+#: ../cli.py:1988
#, python-format
msgid "Package %s is already installed, skipping"
msgstr ""
-#: ../cli.py:1397
+#: ../cli.py:1999
#, python-format
msgid "Discarding non-comparable pkg %s.%s"
msgstr ""
#. we've not got any installed that match n or n+a
-#: ../cli.py:1423
+#: ../cli.py:2025
#, python-format
msgid "No other %s installed, adding to list for potential install"
msgstr ""
-#: ../cli.py:1443
+#: ../cli.py:2045
msgid "Plugin Options"
msgstr ""
-#: ../cli.py:1451
+#: ../cli.py:2057
#, python-format
msgid "Command line error: %s"
msgstr ""
-#: ../cli.py:1467
+#: ../cli.py:2079
#, python-format
msgid ""
"\n"
@@ -430,438 +509,484 @@ msgid ""
"%s: %s option requires an argument"
msgstr ""
-#: ../cli.py:1521
+#: ../cli.py:2147
msgid "--color takes one of: auto, always, never"
msgstr ""
#. We have a relative installroot ... haha
-#: ../cli.py:1596
+#: ../cli.py:2218
#, python-format
msgid "--installroot must be an absolute path: %s"
msgstr ""
-#: ../cli.py:1642
+#: ../cli.py:2272
msgid "show this help message and exit"
msgstr ""
-#: ../cli.py:1646
+#: ../cli.py:2276
msgid "be tolerant of errors"
msgstr ""
-#: ../cli.py:1649
+#: ../cli.py:2279
msgid "run entirely from system cache, don't update cache"
msgstr ""
-#: ../cli.py:1652
+#: ../cli.py:2282
msgid "config file location"
msgstr ""
-#: ../cli.py:1655
+#: ../cli.py:2285
msgid "maximum command wait time"
msgstr ""
-#: ../cli.py:1657
+#: ../cli.py:2287
msgid "debugging output level"
msgstr ""
-#: ../cli.py:1661
+#: ../cli.py:2291
msgid "show duplicates, in repos, in list/search commands"
msgstr ""
-#: ../cli.py:1663
+#: ../cli.py:2296
msgid "error output level"
msgstr ""
-#: ../cli.py:1666
+#: ../cli.py:2299
msgid "debugging output level for rpm"
msgstr ""
-#: ../cli.py:1669
+#: ../cli.py:2302
msgid "quiet operation"
msgstr ""
-#: ../cli.py:1671
+#: ../cli.py:2304
msgid "verbose operation"
msgstr ""
-#: ../cli.py:1673
+#: ../cli.py:2306
msgid "answer yes for all questions"
msgstr ""
-#: ../cli.py:1675
+#: ../cli.py:2308
+msgid "answer no for all questions"
+msgstr ""
+
+#: ../cli.py:2312
msgid "show Yum version and exit"
msgstr ""
-#: ../cli.py:1676
+#: ../cli.py:2313
msgid "set install root"
msgstr ""
-#: ../cli.py:1680
+#: ../cli.py:2317
msgid "enable one or more repositories (wildcards allowed)"
msgstr ""
-#: ../cli.py:1684
+#: ../cli.py:2321
msgid "disable one or more repositories (wildcards allowed)"
msgstr ""
-#: ../cli.py:1687
+#: ../cli.py:2324
msgid "exclude package(s) by name or glob"
msgstr ""
-#: ../cli.py:1689
+#: ../cli.py:2326
msgid "disable exclude from main, for a repo or for everything"
msgstr ""
-#: ../cli.py:1692
+#: ../cli.py:2329
msgid "enable obsoletes processing during updates"
msgstr ""
-#: ../cli.py:1694
+#: ../cli.py:2331
msgid "disable Yum plugins"
msgstr ""
-#: ../cli.py:1696
+#: ../cli.py:2333
msgid "disable gpg signature checking"
msgstr ""
-#: ../cli.py:1698
+#: ../cli.py:2335
msgid "disable plugins by name"
msgstr ""
-#: ../cli.py:1701
+#: ../cli.py:2338
msgid "enable plugins by name"
msgstr ""
-#: ../cli.py:1704
+#: ../cli.py:2341
msgid "skip packages with depsolving problems"
msgstr ""
-#: ../cli.py:1706
+#: ../cli.py:2343
msgid "control whether color is used"
msgstr ""
-#: ../cli.py:1708
+#: ../cli.py:2345
msgid "set value of $releasever in yum config and repo files"
msgstr ""
-#: ../cli.py:1710
+#: ../cli.py:2347
+msgid "don't update, just download"
+msgstr ""
+
+#: ../cli.py:2349
+msgid "specifies an alternate directory to store packages"
+msgstr ""
+
+#: ../cli.py:2351
msgid "set arbitrary config and repo options"
msgstr ""
-#: ../output.py:307
+#: ../output.py:458
msgid "Jan"
msgstr ""
-#: ../output.py:307
+#: ../output.py:458
msgid "Feb"
msgstr ""
-#: ../output.py:307
+#: ../output.py:458
msgid "Mar"
msgstr ""
-#: ../output.py:307
+#: ../output.py:458
msgid "Apr"
msgstr ""
-#: ../output.py:307
+#: ../output.py:458
msgid "May"
msgstr ""
-#: ../output.py:307
+#: ../output.py:458
msgid "Jun"
msgstr ""
-#: ../output.py:308
+#: ../output.py:459
msgid "Jul"
msgstr ""
-#: ../output.py:308
+#: ../output.py:459
msgid "Aug"
msgstr ""
-#: ../output.py:308
+#: ../output.py:459
msgid "Sep"
msgstr ""
-#: ../output.py:308
+#: ../output.py:459
msgid "Oct"
msgstr ""
-#: ../output.py:308
+#: ../output.py:459
msgid "Nov"
msgstr ""
-#: ../output.py:308
+#: ../output.py:459
msgid "Dec"
msgstr ""
-#: ../output.py:318
+#: ../output.py:473
msgid "Trying other mirror."
msgstr ""
-#: ../output.py:581
+#: ../output.py:816
#, python-format
msgid "Name : %s%s%s"
msgstr ""
-#: ../output.py:582
+#: ../output.py:817
#, python-format
msgid "Arch : %s"
msgstr ""
-#: ../output.py:584
+#: ../output.py:819
#, python-format
msgid "Epoch : %s"
msgstr ""
-#: ../output.py:585
+#: ../output.py:820
#, python-format
msgid "Version : %s"
msgstr ""
-#: ../output.py:586
+#: ../output.py:821
#, python-format
msgid "Release : %s"
msgstr ""
-#: ../output.py:587
+#: ../output.py:822
#, python-format
msgid "Size : %s"
msgstr ""
-#: ../output.py:588 ../output.py:900
+#: ../output.py:823 ../output.py:1329
#, python-format
msgid "Repo : %s"
msgstr ""
-#: ../output.py:590
+#: ../output.py:825
#, python-format
msgid "From repo : %s"
msgstr ""
-#: ../output.py:592
+#: ../output.py:827
#, python-format
msgid "Committer : %s"
msgstr ""
-#: ../output.py:593
+#: ../output.py:828
#, python-format
msgid "Committime : %s"
msgstr ""
-#: ../output.py:594
+#: ../output.py:829
#, python-format
msgid "Buildtime : %s"
msgstr ""
-#: ../output.py:596
+#: ../output.py:831
#, python-format
msgid "Install time: %s"
msgstr ""
-#: ../output.py:604
+#: ../output.py:839
#, python-format
msgid "Installed by: %s"
msgstr ""
-#: ../output.py:611
+#: ../output.py:846
#, python-format
msgid "Changed by : %s"
msgstr ""
-#: ../output.py:612
+#: ../output.py:847
msgid "Summary : "
msgstr ""
-#: ../output.py:614 ../output.py:913
+#: ../output.py:849 ../output.py:1345
#, python-format
msgid "URL : %s"
msgstr ""
-#: ../output.py:615
+#: ../output.py:850
msgid "License : "
msgstr ""
-#: ../output.py:616 ../output.py:910
+#: ../output.py:851 ../output.py:1342
msgid "Description : "
msgstr ""
-#: ../output.py:684
+#: ../output.py:969
msgid "y"
msgstr ""
-#: ../output.py:684
+#: ../output.py:969
msgid "yes"
msgstr ""
-#: ../output.py:685
+#: ../output.py:970
msgid "n"
msgstr ""
-#: ../output.py:685
+#: ../output.py:970
msgid "no"
msgstr ""
-#: ../output.py:689
+#: ../output.py:974
msgid "Is this ok [y/N]: "
msgstr ""
-#: ../output.py:777
+#: ../output.py:1097
#, python-format
msgid ""
"\n"
"Group: %s"
msgstr ""
-#: ../output.py:781
+#: ../output.py:1101
#, python-format
msgid " Group-Id: %s"
msgstr ""
-#: ../output.py:786
+#: ../output.py:1122 ../output.py:1169
#, python-format
msgid " Description: %s"
msgstr ""
-#: ../output.py:788
+#: ../output.py:1124
#, python-format
msgid " Language: %s"
msgstr ""
-#: ../output.py:790
+#: ../output.py:1126
msgid " Mandatory Packages:"
msgstr ""
-#: ../output.py:791
+#: ../output.py:1127
msgid " Default Packages:"
msgstr ""
-#: ../output.py:792
+#: ../output.py:1128
msgid " Optional Packages:"
msgstr ""
-#: ../output.py:793
+#: ../output.py:1129
msgid " Conditional Packages:"
msgstr ""
-#: ../output.py:814
+#: ../output.py:1147
+msgid " Installed Packages:"
+msgstr ""
+
+#: ../output.py:1157
+#, python-format
+msgid ""
+"\n"
+"Environment Group: %s"
+msgstr ""
+
+#: ../output.py:1158
+#, python-format
+msgid " Environment-Id: %s"
+msgstr ""
+
+#: ../output.py:1191
+msgid " Mandatory Groups:"
+msgstr ""
+
+#: ../output.py:1192
+msgid " Optional Groups:"
+msgstr ""
+
+#: ../output.py:1205
+msgid " Installed Groups:"
+msgstr ""
+
+#: ../output.py:1217
#, python-format
msgid "package: %s"
msgstr ""
-#: ../output.py:816
+#: ../output.py:1219
msgid " No dependencies for this package"
msgstr ""
-#: ../output.py:821
+#: ../output.py:1224
#, python-format
msgid " dependency: %s"
msgstr ""
-#: ../output.py:823
+#: ../output.py:1226
msgid " Unsatisfied dependency"
msgstr ""
-#: ../output.py:901
+#: ../output.py:1337
msgid "Matched from:"
msgstr ""
-#: ../output.py:916
+#: ../output.py:1348
#, python-format
msgid "License : %s"
msgstr ""
-#: ../output.py:919
+#: ../output.py:1351
#, python-format
msgid "Filename : %s"
msgstr ""
-#: ../output.py:923
+#: ../output.py:1360
+msgid "Provides : "
+msgstr ""
+
+#: ../output.py:1363
msgid "Other : "
msgstr ""
-#: ../output.py:966
+#: ../output.py:1426
msgid "There was an error calculating total download size"
msgstr ""
-#: ../output.py:971
+#: ../output.py:1431
#, python-format
msgid "Total size: %s"
msgstr ""
-#: ../output.py:974
+#: ../output.py:1433
#, python-format
msgid "Total download size: %s"
msgstr ""
-#: ../output.py:978 ../output.py:998
+#: ../output.py:1436 ../output.py:1459 ../output.py:1463
#, python-format
msgid "Installed size: %s"
msgstr ""
-#: ../output.py:994
+#: ../output.py:1454
msgid "There was an error calculating installed size"
msgstr ""
-#: ../output.py:1039
+#: ../output.py:1504
msgid "Reinstalling"
msgstr ""
-#: ../output.py:1040
+#: ../output.py:1505
msgid "Downgrading"
msgstr ""
-#: ../output.py:1041
+#: ../output.py:1506
msgid "Installing for dependencies"
msgstr ""
-#: ../output.py:1042
+#: ../output.py:1507
msgid "Updating for dependencies"
msgstr ""
-#: ../output.py:1043
+#: ../output.py:1508
msgid "Removing for dependencies"
msgstr ""
-#: ../output.py:1050 ../output.py:1171
+#: ../output.py:1515 ../output.py:1576 ../output.py:1672
msgid "Skipped (dependency problems)"
msgstr ""
-#: ../output.py:1052 ../output.py:1687
+#: ../output.py:1517 ../output.py:1577 ../output.py:2223
msgid "Not installed"
msgstr ""
-#: ../output.py:1053
+#: ../output.py:1518 ../output.py:1578
msgid "Not available"
msgstr ""
-#: ../output.py:1075 ../output.py:2024
+#: ../output.py:1540 ../output.py:1588 ../output.py:1604 ../output.py:2581
msgid "Package"
-msgstr ""
+msgid_plural "Packages"
+msgstr[0] ""
+msgstr[1] ""
-#: ../output.py:1075
+#: ../output.py:1540
msgid "Arch"
msgstr ""
-#: ../output.py:1076
+#: ../output.py:1541
msgid "Version"
msgstr ""
-#: ../output.py:1076
+#: ../output.py:1541
msgid "Repository"
msgstr ""
-#: ../output.py:1077
+#: ../output.py:1542
msgid "Size"
msgstr ""
-#: ../output.py:1089
+#: ../output.py:1554
#, python-format
msgid " replacing %s%s%s.%s %s\n"
msgstr ""
-#: ../output.py:1098
+#: ../output.py:1563
#, python-format
msgid ""
"\n"
@@ -869,65 +994,66 @@ msgid ""
"%s\n"
msgstr ""
-#: ../output.py:1109
-#, python-format
-msgid "Install %5.5s Package(s)\n"
+#: ../output.py:1568 ../output.py:2376 ../output.py:2377
+msgid "Install"
msgstr ""
-#: ../output.py:1113
-#, python-format
-msgid "Upgrade %5.5s Package(s)\n"
+#: ../output.py:1570
+msgid "Upgrade"
msgstr ""
-#: ../output.py:1117
-#, python-format
-msgid "Remove %5.5s Package(s)\n"
+#: ../output.py:1572
+msgid "Remove"
msgstr ""
-#: ../output.py:1121
-#, python-format
-msgid "Reinstall %5.5s Package(s)\n"
+#: ../output.py:1574 ../output.py:2382
+msgid "Reinstall"
msgstr ""
-#: ../output.py:1125
-#, python-format
-msgid "Downgrade %5.5s Package(s)\n"
+#: ../output.py:1575 ../output.py:2383
+msgid "Downgrade"
msgstr ""
-#: ../output.py:1165
+#: ../output.py:1606
+msgid "Dependent package"
+msgid_plural "Dependent packages"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../output.py:1666
msgid "Removed"
msgstr ""
-#: ../output.py:1166
+#: ../output.py:1667
msgid "Dependency Removed"
msgstr ""
-#: ../output.py:1168
+#: ../output.py:1669
msgid "Dependency Installed"
msgstr ""
-#: ../output.py:1170
+#: ../output.py:1671
msgid "Dependency Updated"
msgstr ""
-#: ../output.py:1172
+#: ../output.py:1673
msgid "Replaced"
msgstr ""
-#: ../output.py:1173
+#: ../output.py:1674
msgid "Failed"
msgstr ""
#. Delta between C-c's so we treat as exit
-#: ../output.py:1260
+#: ../output.py:1764
msgid "two"
msgstr ""
#. For translators: This is output like:
#. Current download cancelled, interrupt (ctrl-c) again within two seconds
#. to exit.
-#. Where "interupt (ctrl-c) again" and "two" are highlighted.
-#: ../output.py:1271
+#. Where "interrupt (ctrl-c) again" and "two" are highlighted.
+#: ../output.py:1775
#, python-format
msgid ""
"\n"
@@ -935,484 +1061,542 @@ msgid ""
"to exit.\n"
msgstr ""
-#: ../output.py:1282
+#: ../output.py:1786
msgid "user interrupt"
msgstr ""
-#: ../output.py:1300
+#: ../output.py:1812
msgid "Total"
msgstr ""
-#: ../output.py:1322
+#: ../output.py:1834
msgid "I"
msgstr ""
-#: ../output.py:1323
+#: ../output.py:1835
msgid "O"
msgstr ""
-#: ../output.py:1324
+#: ../output.py:1836
msgid "E"
msgstr ""
-#: ../output.py:1325
+#: ../output.py:1837
msgid "R"
msgstr ""
-#: ../output.py:1326
+#: ../output.py:1838
msgid "D"
msgstr ""
-#: ../output.py:1327
+#: ../output.py:1839
msgid "U"
msgstr ""
-#: ../output.py:1341
+#: ../output.py:1853
msgid "<unset>"
msgstr ""
-#: ../output.py:1342
+#: ../output.py:1854
msgid "System"
msgstr ""
-#: ../output.py:1411
+#: ../output.py:1923
#, python-format
msgid "Skipping merged transaction %d to %d, as it overlaps"
msgstr ""
-#: ../output.py:1421 ../output.py:1592
+#: ../output.py:1933 ../output.py:2125
msgid "No transactions"
msgstr ""
-#: ../output.py:1446 ../output.py:2013
+#: ../output.py:1958 ../output.py:2570 ../output.py:2660
msgid "Bad transaction IDs, or package(s), given"
msgstr ""
-#: ../output.py:1484
+#: ../output.py:2007
msgid "Command line"
msgstr ""
-#: ../output.py:1486 ../output.py:1908
+#: ../output.py:2009 ../output.py:2458
msgid "Login user"
msgstr ""
#. REALLY Needs to use columns!
-#: ../output.py:1487 ../output.py:2022
+#: ../output.py:2010 ../output.py:2579
msgid "ID"
msgstr ""
-#: ../output.py:1489
+#: ../output.py:2012
msgid "Date and time"
msgstr ""
-#: ../output.py:1490 ../output.py:1910 ../output.py:2023
+#: ../output.py:2013 ../output.py:2460 ../output.py:2580
msgid "Action(s)"
msgstr ""
-#: ../output.py:1491 ../output.py:1911
+#: ../output.py:2014 ../output.py:2461
msgid "Altered"
msgstr ""
-#: ../output.py:1538
+#: ../output.py:2061
msgid "No transaction ID given"
msgstr ""
-#: ../output.py:1564 ../output.py:1972
+#: ../output.py:2087 ../output.py:2526
msgid "Bad transaction ID given"
msgstr ""
-#: ../output.py:1569
+#: ../output.py:2092
msgid "Not found given transaction ID"
msgstr ""
-#: ../output.py:1577
+#: ../output.py:2100
msgid "Found more than one transaction ID!"
msgstr ""
-#: ../output.py:1618 ../output.py:1980
+#: ../output.py:2151 ../output.py:2534
msgid "No transaction ID, or package, given"
msgstr ""
-#: ../output.py:1686 ../output.py:1845
+#: ../output.py:2222 ../output.py:2384
msgid "Downgraded"
msgstr ""
-#: ../output.py:1688
+#: ../output.py:2224
msgid "Older"
msgstr ""
-#: ../output.py:1688
+#: ../output.py:2224
msgid "Newer"
msgstr ""
-#: ../output.py:1724 ../output.py:1726
+#: ../output.py:2261 ../output.py:2263 ../output.py:2681
msgid "Transaction ID :"
msgstr ""
-#: ../output.py:1728
+#: ../output.py:2265 ../output.py:2683
msgid "Begin time :"
msgstr ""
-#: ../output.py:1731 ../output.py:1733
+#: ../output.py:2268 ../output.py:2270
msgid "Begin rpmdb :"
msgstr ""
-#: ../output.py:1749
+#: ../output.py:2286
#, python-format
msgid "(%u seconds)"
msgstr ""
-#: ../output.py:1751
+#: ../output.py:2288
#, python-format
msgid "(%u minutes)"
msgstr ""
-#: ../output.py:1753
+#: ../output.py:2290
#, python-format
msgid "(%u hours)"
msgstr ""
-#: ../output.py:1755
+#: ../output.py:2292
#, python-format
msgid "(%u days)"
msgstr ""
-#: ../output.py:1756
+#: ../output.py:2293
msgid "End time :"
msgstr ""
-#: ../output.py:1759 ../output.py:1761
+#: ../output.py:2296 ../output.py:2298
msgid "End rpmdb :"
msgstr ""
-#: ../output.py:1764 ../output.py:1766
+#: ../output.py:2301 ../output.py:2303
msgid "User :"
msgstr ""
-#: ../output.py:1770 ../output.py:1773 ../output.py:1775 ../output.py:1777
-#: ../output.py:1779
+#: ../output.py:2307 ../output.py:2310 ../output.py:2312 ../output.py:2314
+#: ../output.py:2316
msgid "Return-Code :"
msgstr ""
-#: ../output.py:1770 ../output.py:1775
+#: ../output.py:2307 ../output.py:2312
msgid "Aborted"
msgstr ""
-#: ../output.py:1773
+#: ../output.py:2310
msgid "Failures:"
msgstr ""
-#: ../output.py:1777
+#: ../output.py:2314
msgid "Failure:"
msgstr ""
-#: ../output.py:1779
+#: ../output.py:2316
msgid "Success"
msgstr ""
-#: ../output.py:1784 ../output.py:1786
+#: ../output.py:2321 ../output.py:2323 ../output.py:2712
msgid "Command Line :"
msgstr ""
-#: ../output.py:1795
+#: ../output.py:2332
#, python-format
msgid "Additional non-default information stored: %d"
msgstr ""
#. This is _possible_, but not common
-#: ../output.py:1800
+#: ../output.py:2337
msgid "Transaction performed with:"
msgstr ""
-#: ../output.py:1804
+#: ../output.py:2341
msgid "Packages Altered:"
msgstr ""
-#: ../output.py:1808
+#: ../output.py:2345
msgid "Packages Skipped:"
msgstr ""
-#: ../output.py:1814
+#: ../output.py:2353
msgid "Rpmdb Problems:"
msgstr ""
-#: ../output.py:1825
+#: ../output.py:2364
msgid "Scriptlet output:"
msgstr ""
-#: ../output.py:1831
+#: ../output.py:2370
msgid "Errors:"
msgstr ""
-#: ../output.py:1837 ../output.py:1838
-msgid "Install"
-msgstr ""
-
-#: ../output.py:1839
+#: ../output.py:2378
msgid "Dep-Install"
msgstr ""
-#: ../output.py:1841
+#: ../output.py:2380
msgid "Obsoleting"
msgstr ""
-#: ../output.py:1842
+#: ../output.py:2381
msgid "Erase"
msgstr ""
-#: ../output.py:1843
-msgid "Reinstall"
-msgstr ""
-
-#: ../output.py:1844
-msgid "Downgrade"
-msgstr ""
-
-#: ../output.py:1846
+#: ../output.py:2385
msgid "Update"
msgstr ""
-#: ../output.py:1909
+#: ../output.py:2459
msgid "Time"
msgstr ""
-#: ../output.py:1935
+#: ../output.py:2485
msgid "Last day"
msgstr ""
-#: ../output.py:1936
+#: ../output.py:2486
msgid "Last week"
msgstr ""
-#: ../output.py:1937
+#: ../output.py:2487
msgid "Last 2 weeks"
msgstr ""
#. US default :p
-#: ../output.py:1938
+#: ../output.py:2488
msgid "Last 3 months"
msgstr ""
-#: ../output.py:1939
+#: ../output.py:2489
msgid "Last 6 months"
msgstr ""
-#: ../output.py:1940
+#: ../output.py:2490
msgid "Last year"
msgstr ""
-#: ../output.py:1941
+#: ../output.py:2491
msgid "Over a year ago"
msgstr ""
-#: ../output.py:1984
+#: ../output.py:2538
#, python-format
msgid "No Transaction %s found"
msgstr ""
-#: ../output.py:1990
+#: ../output.py:2544
msgid "Transaction ID:"
msgstr ""
-#: ../output.py:1991
+#: ../output.py:2545
msgid "Available additional history information:"
msgstr ""
-#: ../output.py:2003
+#: ../output.py:2558
#, python-format
msgid "%s: No additional data found by this name"
msgstr ""
-#: ../output.py:2106
+#: ../output.py:2684
+msgid "Package :"
+msgstr ""
+
+#: ../output.py:2685
+msgid "State :"
+msgstr ""
+
+#: ../output.py:2688
+msgid "Size :"
+msgstr ""
+
+#: ../output.py:2690
+msgid "Build host :"
+msgstr ""
+
+#: ../output.py:2693
+msgid "Build time :"
+msgstr ""
+
+#: ../output.py:2695
+msgid "Packager :"
+msgstr ""
+
+#: ../output.py:2697
+msgid "Vendor :"
+msgstr ""
+
+#: ../output.py:2699
+msgid "License :"
+msgstr ""
+
+#: ../output.py:2701
+msgid "URL :"
+msgstr ""
+
+#: ../output.py:2703
+msgid "Source RPM :"
+msgstr ""
+
+#: ../output.py:2706
+msgid "Commit Time :"
+msgstr ""
+
+#: ../output.py:2708
+msgid "Committer :"
+msgstr ""
+
+#: ../output.py:2710
+msgid "Reason :"
+msgstr ""
+
+#: ../output.py:2714
+msgid "From repo :"
+msgstr ""
+
+#: ../output.py:2718
+msgid "Installed by :"
+msgstr ""
+
+#: ../output.py:2722
+msgid "Changed by :"
+msgstr ""
+
+#: ../output.py:2767
msgid "installed"
msgstr ""
-#: ../output.py:2107
+#: ../output.py:2768
msgid "an update"
msgstr ""
-#: ../output.py:2108
+#: ../output.py:2769
msgid "erased"
msgstr ""
-#: ../output.py:2109
+#: ../output.py:2770
msgid "reinstalled"
msgstr ""
-#: ../output.py:2110
+#: ../output.py:2771
msgid "a downgrade"
msgstr ""
-#: ../output.py:2111
+#: ../output.py:2772
msgid "obsoleting"
msgstr ""
-#: ../output.py:2112
+#: ../output.py:2773
msgid "updated"
msgstr ""
-#: ../output.py:2113
+#: ../output.py:2774
msgid "obsoleted"
msgstr ""
-#: ../output.py:2117
+#: ../output.py:2778
#, python-format
msgid "---> Package %s.%s %s:%s-%s will be %s"
msgstr ""
-#: ../output.py:2124
+#: ../output.py:2789
msgid "--> Running transaction check"
msgstr ""
-#: ../output.py:2129
+#: ../output.py:2795
msgid "--> Restarting Dependency Resolution with new changes."
msgstr ""
-#: ../output.py:2134
+#: ../output.py:2801
msgid "--> Finished Dependency Resolution"
msgstr ""
-#: ../output.py:2139 ../output.py:2144
+#: ../output.py:2814 ../output.py:2827
#, python-format
msgid "--> Processing Dependency: %s for package: %s"
msgstr ""
-#: ../output.py:2149
+#: ../output.py:2841
#, python-format
-msgid "---> Keeping package: %s"
+msgid "---> Keeping package: %s due to %s"
msgstr ""
-#: ../output.py:2152
+#: ../output.py:2850
#, python-format
msgid "--> Unresolved Dependency: %s"
msgstr ""
-#: ../output.py:2163
+#: ../output.py:2867
#, python-format
msgid "Package: %s"
msgstr ""
-#: ../output.py:2165
+#: ../output.py:2869
#, python-format
msgid ""
"\n"
" Requires: %s"
msgstr ""
-#: ../output.py:2174
+#: ../output.py:2878
#, python-format
msgid ""
"\n"
" %s: %s (%s)"
msgstr ""
-#: ../output.py:2179
+#: ../output.py:2883
#, python-format
msgid ""
"\n"
" %s"
msgstr ""
-#: ../output.py:2181
+#: ../output.py:2885
msgid ""
"\n"
" Not found"
msgstr ""
#. These should be the only three things we care about:
-#: ../output.py:2196
+#: ../output.py:2900
msgid "Updated By"
msgstr ""
-#: ../output.py:2197
+#: ../output.py:2901
msgid "Downgraded By"
msgstr ""
-#: ../output.py:2198
+#: ../output.py:2902
msgid "Obsoleted By"
msgstr ""
-#: ../output.py:2216
+#: ../output.py:2920
msgid "Available"
msgstr ""
-#: ../output.py:2243 ../output.py:2248
+#: ../output.py:2955 ../output.py:2968
#, python-format
msgid "--> Processing Conflict: %s conflicts %s"
msgstr ""
-#: ../output.py:2252
+#: ../output.py:2974
msgid "--> Populating transaction set with selected packages. Please wait."
msgstr ""
-#: ../output.py:2256
+#: ../output.py:2983
#, python-format
msgid "---> Downloading header for %s to pack into transaction set."
msgstr ""
-#: ../utils.py:99
+#. self.event(txmbr.name, count, len(base.tsInfo), count, )
+#. (te_current*100L)/te_total
+#: ../output.py:3248
+msgid "Verifying"
+msgstr ""
+
+#: ../utils.py:123
msgid "Running"
msgstr ""
-#: ../utils.py:100
+#: ../utils.py:124
msgid "Sleeping"
msgstr ""
-#: ../utils.py:101
+#: ../utils.py:125
msgid "Uninterruptible"
msgstr ""
-#: ../utils.py:102
+#: ../utils.py:126
msgid "Zombie"
msgstr ""
-#: ../utils.py:103
+#: ../utils.py:127
msgid "Traced/Stopped"
msgstr ""
-#: ../utils.py:104 ../yumcommands.py:994
+#: ../utils.py:128 ../yumcommands.py:2193
msgid "Unknown"
msgstr ""
-#: ../utils.py:115
+#: ../utils.py:153
msgid " The other application is: PackageKit"
msgstr ""
-#: ../utils.py:117
+#: ../utils.py:155
#, python-format
msgid " The other application is: %s"
msgstr ""
-#: ../utils.py:120
+#: ../utils.py:158
#, python-format
msgid " Memory : %5s RSS (%5sB VSZ)"
msgstr ""
-#: ../utils.py:125
+#: ../utils.py:163
#, python-format
msgid " Started: %s - %s ago"
msgstr ""
-#: ../utils.py:127
+#: ../utils.py:165
#, python-format
msgid " State : %s, pid: %d"
msgstr ""
-#: ../utils.py:170 ../yummain.py:43
+#: ../utils.py:194 ../yummain.py:43
msgid ""
"\n"
"\n"
"Exiting on user cancel"
msgstr ""
-#: ../utils.py:176 ../yummain.py:49
+#: ../utils.py:206 ../yummain.py:49
msgid ""
"\n"
"\n"
"Exiting on Broken Pipe"
msgstr ""
-#: ../utils.py:178 ../yummain.py:51
+#: ../utils.py:208 ../yummain.py:51
#, python-format
msgid ""
"\n"
@@ -1420,47 +1604,41 @@ msgid ""
"%s"
msgstr ""
-#: ../utils.py:228 ../yummain.py:123
-msgid ""
-"Another app is currently holding the yum lock; exiting as configured by "
-"exit_on_lock"
-msgstr ""
-
-#: ../utils.py:287
+#: ../utils.py:326
#, python-format
msgid "PluginExit Error: %s"
msgstr ""
-#: ../utils.py:290
+#: ../utils.py:329
#, python-format
msgid "Yum Error: %s"
msgstr ""
-#: ../utils.py:342 ../yummain.py:150 ../yummain.py:189
+#: ../utils.py:387 ../yummain.py:147 ../yummain.py:186
#, python-format
msgid "Error: %s"
msgstr ""
-#: ../utils.py:346 ../yummain.py:194
+#: ../utils.py:391 ../yummain.py:191
msgid " You could try using --skip-broken to work around the problem"
msgstr ""
-#: ../utils.py:348 ../yummain.py:87
+#: ../utils.py:393 ../yummain.py:87
msgid " You could try running: rpm -Va --nofiles --nodigest"
msgstr ""
-#: ../utils.py:355 ../yummain.py:160 ../yummain.py:202
+#: ../utils.py:400 ../yummain.py:157 ../yummain.py:199
#, python-format
msgid "Unknown Error(s): Exit Code: %d:"
msgstr ""
-#: ../utils.py:361 ../yummain.py:208
+#: ../utils.py:406 ../yummain.py:205
msgid ""
"\n"
"Dependencies Resolved"
msgstr ""
-#: ../utils.py:376 ../yummain.py:234
+#: ../utils.py:422 ../yummain.py:237
msgid "Complete!"
msgstr ""
@@ -1472,7 +1650,7 @@ msgstr ""
msgid "You need to be root to perform this command."
msgstr ""
-#: ../yumcommands.py:59
+#: ../yumcommands.py:67
msgid ""
"\n"
"You have enabled checking of packages via GPG keys. This is a good thing. \n"
@@ -1489,555 +1667,648 @@ msgid ""
"For more information contact your distribution or package provider.\n"
msgstr ""
-#: ../yumcommands.py:74
+#: ../yumcommands.py:82
#, python-format
msgid "Problem repository: %s"
msgstr ""
-#: ../yumcommands.py:80
+#: ../yumcommands.py:96
#, python-format
msgid "Error: Need to pass a list of pkgs to %s"
msgstr ""
-#: ../yumcommands.py:86
+#: ../yumcommands.py:114
+#, python-format
+msgid "Error: Need at least two packages to %s"
+msgstr ""
+
+#: ../yumcommands.py:129
+#, python-format
+msgid "Error: Need to pass a repoid. and command to %s"
+msgstr ""
+
+#: ../yumcommands.py:136 ../yumcommands.py:142
+#, python-format
+msgid "Error: Need to pass a single valid repoid. to %s"
+msgstr ""
+
+#: ../yumcommands.py:147
+#, python-format
+msgid "Error: Repo %s is not enabled"
+msgstr ""
+
+#: ../yumcommands.py:164
msgid "Error: Need an item to match"
msgstr ""
-#: ../yumcommands.py:92
+#: ../yumcommands.py:178
msgid "Error: Need a group or list of groups"
msgstr ""
-#: ../yumcommands.py:101
+#: ../yumcommands.py:195
#, python-format
msgid "Error: clean requires an option: %s"
msgstr ""
-#: ../yumcommands.py:106
+#: ../yumcommands.py:201
#, python-format
msgid "Error: invalid clean argument: %r"
msgstr ""
-#: ../yumcommands.py:119
+#: ../yumcommands.py:216
msgid "No argument to shell"
msgstr ""
-#: ../yumcommands.py:121
+#: ../yumcommands.py:218
#, python-format
msgid "Filename passed to shell: %s"
msgstr ""
-#: ../yumcommands.py:125
+#: ../yumcommands.py:222
#, python-format
msgid "File %s given as argument to shell does not exist."
msgstr ""
-#: ../yumcommands.py:131
+#: ../yumcommands.py:228
msgid "Error: more than one file given as argument to shell."
msgstr ""
-#: ../yumcommands.py:148
+#: ../yumcommands.py:247
msgid ""
"There are no enabled repos.\n"
" Run \"yum repolist all\" to see the repos you have.\n"
" You can enable repos with yum-config-manager --enable <repo>"
msgstr ""
-#: ../yumcommands.py:200
+#: ../yumcommands.py:383
msgid "PACKAGE..."
msgstr ""
-#: ../yumcommands.py:203
+#: ../yumcommands.py:390
msgid "Install a package or packages on your system"
msgstr ""
-#: ../yumcommands.py:212
+#: ../yumcommands.py:421
msgid "Setting up Install Process"
msgstr ""
-#: ../yumcommands.py:223 ../yumcommands.py:245
+#: ../yumcommands.py:447 ../yumcommands.py:507
msgid "[PACKAGE...]"
msgstr ""
-#: ../yumcommands.py:226
+#: ../yumcommands.py:454
msgid "Update a package or packages on your system"
msgstr ""
-#: ../yumcommands.py:234
+#: ../yumcommands.py:483
msgid "Setting up Update Process"
msgstr ""
-#: ../yumcommands.py:248
+#: ../yumcommands.py:514
msgid "Synchronize installed packages to the latest available versions"
msgstr ""
-#: ../yumcommands.py:256
+#: ../yumcommands.py:543
msgid "Setting up Distribution Synchronization Process"
msgstr ""
-#: ../yumcommands.py:299
+#: ../yumcommands.py:603
msgid "Display details about a package or group of packages"
msgstr ""
-#: ../yumcommands.py:348
+#: ../yumcommands.py:672
msgid "Installed Packages"
msgstr ""
-#: ../yumcommands.py:356
+#: ../yumcommands.py:682
msgid "Available Packages"
msgstr ""
-#: ../yumcommands.py:360
+#: ../yumcommands.py:687
msgid "Extra Packages"
msgstr ""
-#: ../yumcommands.py:364
+#: ../yumcommands.py:691
msgid "Updated Packages"
msgstr ""
#. This only happens in verbose mode
-#: ../yumcommands.py:372 ../yumcommands.py:379 ../yumcommands.py:667
+#: ../yumcommands.py:699 ../yumcommands.py:706 ../yumcommands.py:1539
msgid "Obsoleting Packages"
msgstr ""
-#: ../yumcommands.py:381
+#: ../yumcommands.py:708
msgid "Recently Added Packages"
msgstr ""
-#: ../yumcommands.py:388
+#: ../yumcommands.py:715
msgid "No matching Packages to list"
msgstr ""
-#: ../yumcommands.py:402
+#: ../yumcommands.py:766
msgid "List a package or groups of packages"
msgstr ""
-#: ../yumcommands.py:414
+#: ../yumcommands.py:797
msgid "Remove a package or packages from your system"
msgstr ""
-#: ../yumcommands.py:421
+#: ../yumcommands.py:845
msgid "Setting up Remove Process"
msgstr ""
-#: ../yumcommands.py:435
-msgid "Setting up Group Process"
+#: ../yumcommands.py:906
+msgid "Display, or use, the groups information"
msgstr ""
-#: ../yumcommands.py:441
-msgid "No Groups on which to run command"
+#: ../yumcommands.py:909
+msgid "Setting up Group Process"
msgstr ""
-#: ../yumcommands.py:454
-msgid "List available package groups"
+#: ../yumcommands.py:915
+msgid "No Groups on which to run command"
msgstr ""
-#: ../yumcommands.py:474
-msgid "Install the packages in a group on your system"
+#: ../yumcommands.py:985
+#, python-format
+msgid "Invalid groups sub-command, use: %s."
msgstr ""
-#: ../yumcommands.py:497
-msgid "Remove the packages in a group from your system"
+#: ../yumcommands.py:992
+msgid "There is no installed groups file."
msgstr ""
-#: ../yumcommands.py:525
-msgid "Display details about a package group"
+#: ../yumcommands.py:994
+msgid "You don't have access to the groups DB."
msgstr ""
-#: ../yumcommands.py:550
+#: ../yumcommands.py:1256
msgid "Generate the metadata cache"
msgstr ""
-#: ../yumcommands.py:556
+#: ../yumcommands.py:1282
msgid "Making cache files for all metadata files."
msgstr ""
-#: ../yumcommands.py:557
+#: ../yumcommands.py:1283
msgid "This may take a while depending on the speed of this computer"
msgstr ""
-#: ../yumcommands.py:578
+#: ../yumcommands.py:1312
msgid "Metadata Cache Created"
msgstr ""
-#: ../yumcommands.py:592
+#: ../yumcommands.py:1350
msgid "Remove cached data"
msgstr ""
-#: ../yumcommands.py:613
+#: ../yumcommands.py:1417
msgid "Find what package provides the given value"
msgstr ""
-#: ../yumcommands.py:633
+#: ../yumcommands.py:1485
msgid "Check for available package updates"
msgstr ""
-#: ../yumcommands.py:687
+#: ../yumcommands.py:1587
msgid "Search package details for the given string"
msgstr ""
-#: ../yumcommands.py:693
+#: ../yumcommands.py:1613
msgid "Searching Packages: "
msgstr ""
-#: ../yumcommands.py:710
+#: ../yumcommands.py:1666
msgid "Update packages taking obsoletes into account"
msgstr ""
-#: ../yumcommands.py:719
+#: ../yumcommands.py:1696
msgid "Setting up Upgrade Process"
msgstr ""
-#: ../yumcommands.py:737
+#: ../yumcommands.py:1731
msgid "Install a local RPM"
msgstr ""
-#: ../yumcommands.py:745
+#: ../yumcommands.py:1761
msgid "Setting up Local Package Process"
msgstr ""
-#: ../yumcommands.py:764
-msgid "Determine which package provides the given dependency"
-msgstr ""
-
-#: ../yumcommands.py:767
+#: ../yumcommands.py:1825
msgid "Searching Packages for Dependency:"
msgstr ""
-#: ../yumcommands.py:781
+#: ../yumcommands.py:1867
msgid "Run an interactive yum shell"
msgstr ""
-#: ../yumcommands.py:787
+#: ../yumcommands.py:1893
msgid "Setting up Yum Shell"
msgstr ""
-#: ../yumcommands.py:805
+#: ../yumcommands.py:1936
msgid "List a package's dependencies"
msgstr ""
-#: ../yumcommands.py:811
+#: ../yumcommands.py:1963
msgid "Finding dependencies: "
msgstr ""
-#: ../yumcommands.py:827
+#: ../yumcommands.py:2005
msgid "Display the configured software repositories"
msgstr ""
-#: ../yumcommands.py:893 ../yumcommands.py:894
+#: ../yumcommands.py:2094 ../yumcommands.py:2095
msgid "enabled"
msgstr ""
-#: ../yumcommands.py:920 ../yumcommands.py:921
+#: ../yumcommands.py:2121 ../yumcommands.py:2122
msgid "disabled"
msgstr ""
-#: ../yumcommands.py:937
+#: ../yumcommands.py:2137
msgid "Repo-id : "
msgstr ""
-#: ../yumcommands.py:938
+#: ../yumcommands.py:2138
msgid "Repo-name : "
msgstr ""
-#: ../yumcommands.py:941
+#: ../yumcommands.py:2141
msgid "Repo-status : "
msgstr ""
-#: ../yumcommands.py:944
+#: ../yumcommands.py:2144
msgid "Repo-revision: "
msgstr ""
-#: ../yumcommands.py:948
+#: ../yumcommands.py:2148
msgid "Repo-tags : "
msgstr ""
-#: ../yumcommands.py:954
+#: ../yumcommands.py:2154
msgid "Repo-distro-tags: "
msgstr ""
-#: ../yumcommands.py:959
+#: ../yumcommands.py:2159
msgid "Repo-updated : "
msgstr ""
-#: ../yumcommands.py:961
+#: ../yumcommands.py:2161
msgid "Repo-pkgs : "
msgstr ""
-#: ../yumcommands.py:962
+#: ../yumcommands.py:2162
msgid "Repo-size : "
msgstr ""
-#: ../yumcommands.py:969 ../yumcommands.py:990
+#: ../yumcommands.py:2169 ../yumcommands.py:2190
msgid "Repo-baseurl : "
msgstr ""
-#: ../yumcommands.py:977
+#: ../yumcommands.py:2177
msgid "Repo-metalink: "
msgstr ""
-#: ../yumcommands.py:981
+#: ../yumcommands.py:2181
msgid " Updated : "
msgstr ""
-#: ../yumcommands.py:984
+#: ../yumcommands.py:2184
msgid "Repo-mirrors : "
msgstr ""
-#: ../yumcommands.py:1000
+#: ../yumcommands.py:2199
#, python-format
msgid "Never (last: %s)"
msgstr ""
-#: ../yumcommands.py:1002
+#: ../yumcommands.py:2201
#, python-format
msgid "Instant (last: %s)"
msgstr ""
-#: ../yumcommands.py:1005
+#: ../yumcommands.py:2204
#, python-format
msgid "%s second(s) (last: %s)"
msgstr ""
-#: ../yumcommands.py:1007
+#: ../yumcommands.py:2206
msgid "Repo-expire : "
msgstr ""
-#: ../yumcommands.py:1010
+#: ../yumcommands.py:2209
msgid "Repo-exclude : "
msgstr ""
-#: ../yumcommands.py:1014
+#: ../yumcommands.py:2213
msgid "Repo-include : "
msgstr ""
-#: ../yumcommands.py:1018
+#: ../yumcommands.py:2217
msgid "Repo-excluded: "
msgstr ""
-#: ../yumcommands.py:1022
+#: ../yumcommands.py:2221
msgid "Repo-filename: "
msgstr ""
#. Work out the first (id) and last (enabled/disalbed/count),
#. then chop the middle (name)...
-#: ../yumcommands.py:1032 ../yumcommands.py:1061
+#: ../yumcommands.py:2230 ../yumcommands.py:2259
msgid "repo id"
msgstr ""
-#: ../yumcommands.py:1049 ../yumcommands.py:1050 ../yumcommands.py:1068
+#: ../yumcommands.py:2247 ../yumcommands.py:2248 ../yumcommands.py:2266
msgid "status"
msgstr ""
-#: ../yumcommands.py:1062
+#: ../yumcommands.py:2260
msgid "repo name"
msgstr ""
-#: ../yumcommands.py:1099
+#: ../yumcommands.py:2332
msgid "Display a helpful usage message"
msgstr ""
-#: ../yumcommands.py:1133
+#: ../yumcommands.py:2374
#, python-format
msgid "No help available for %s"
msgstr ""
-#: ../yumcommands.py:1138
+#: ../yumcommands.py:2379
msgid ""
"\n"
"\n"
"aliases: "
msgstr ""
-#: ../yumcommands.py:1140
+#: ../yumcommands.py:2381
msgid ""
"\n"
"\n"
"alias: "
msgstr ""
-#: ../yumcommands.py:1168
+#: ../yumcommands.py:2466
msgid "Setting up Reinstall Process"
msgstr ""
-#: ../yumcommands.py:1176
+#: ../yumcommands.py:2478
msgid "reinstall a package"
msgstr ""
-#: ../yumcommands.py:1195
+#: ../yumcommands.py:2541
msgid "Setting up Downgrade Process"
msgstr ""
-#: ../yumcommands.py:1202
+#: ../yumcommands.py:2552
msgid "downgrade a package"
msgstr ""
-#: ../yumcommands.py:1216
+#: ../yumcommands.py:2591
msgid "Display a version for the machine and/or available repos."
msgstr ""
-#: ../yumcommands.py:1255
+#: ../yumcommands.py:2643
msgid " Yum version groups:"
msgstr ""
-#: ../yumcommands.py:1265
+#: ../yumcommands.py:2653
msgid " Group :"
msgstr ""
-#: ../yumcommands.py:1266
+#: ../yumcommands.py:2654
msgid " Packages:"
msgstr ""
-#: ../yumcommands.py:1295
+#: ../yumcommands.py:2683
msgid "Installed:"
msgstr ""
-#: ../yumcommands.py:1303
+#: ../yumcommands.py:2691
msgid "Group-Installed:"
msgstr ""
-#: ../yumcommands.py:1312
+#: ../yumcommands.py:2700
msgid "Available:"
msgstr ""
-#: ../yumcommands.py:1321
+#: ../yumcommands.py:2709
msgid "Group-Available:"
msgstr ""
-#: ../yumcommands.py:1360
+#: ../yumcommands.py:2783
msgid "Display, or use, the transaction history"
msgstr ""
-#: ../yumcommands.py:1432
+#: ../yumcommands.py:2876 ../yumcommands.py:2880
+msgid "Transactions:"
+msgstr ""
+
+#: ../yumcommands.py:2881
+msgid "Begin time :"
+msgstr ""
+
+#: ../yumcommands.py:2882
+msgid "End time :"
+msgstr ""
+
+#: ../yumcommands.py:2883
+msgid "Counts :"
+msgstr ""
+
+#: ../yumcommands.py:2884
+msgid " NEVRAC :"
+msgstr ""
+
+#: ../yumcommands.py:2885
+msgid " NEVRA :"
+msgstr ""
+
+#: ../yumcommands.py:2886
+msgid " NA :"
+msgstr ""
+
+#: ../yumcommands.py:2887
+msgid " NEVR :"
+msgstr ""
+
+#: ../yumcommands.py:2888
+msgid " rpm DB :"
+msgstr ""
+
+#: ../yumcommands.py:2889
+msgid " yum DB :"
+msgstr ""
+
+#: ../yumcommands.py:2922
#, python-format
msgid "Invalid history sub-command, use: %s."
msgstr ""
-#: ../yumcommands.py:1439
+#: ../yumcommands.py:2929
msgid "You don't have access to the history DB."
msgstr ""
-#: ../yumcommands.py:1487
+#: ../yumcommands.py:3036
msgid "Check for problems in the rpmdb"
msgstr ""
-#: ../yumcommands.py:1514
+#: ../yumcommands.py:3102
msgid "load a saved transaction from filename"
msgstr ""
-#: ../yumcommands.py:1518
+#: ../yumcommands.py:3119
msgid "No saved transaction file specified."
msgstr ""
-#: ../yumcommands.py:1522
+#: ../yumcommands.py:3123
#, python-format
msgid "loading transaction from %s"
msgstr ""
-#: ../yumcommands.py:1528
+#: ../yumcommands.py:3129
#, python-format
msgid "Transaction loaded from %s with %s members"
msgstr ""
+#: ../yumcommands.py:3169
+msgid "Simple way to swap packages, isntead of using shell"
+msgstr ""
+
+#: ../yumcommands.py:3264
+msgid ""
+"Treat a repo. as a group of packages, so we can install/remove all of them"
+msgstr ""
+
+#: ../yumcommands.py:3341
+#, python-format
+msgid "%d package to update"
+msgid_plural "%d packages to update"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../yumcommands.py:3370
+#, python-format
+msgid "%d package to remove/reinstall"
+msgid_plural "%d packages to remove/reinstall"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../yumcommands.py:3413
+#, python-format
+msgid "%d package to remove/sync"
+msgid_plural "%d packages to remove/sync"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../yumcommands.py:3417
+#, python-format
+msgid "Not a valid sub-command of %s"
+msgstr ""
+
#. This is mainly for PackageSackError from rpmdb.
#: ../yummain.py:84
#, python-format
msgid " Yum checks failed: %s"
msgstr ""
-#: ../yummain.py:114
-msgid ""
-"Another app is currently holding the yum lock; waiting for it to exit..."
+#: ../yummain.py:98
+msgid "No read/execute access in current directory, moving to /"
msgstr ""
-#: ../yummain.py:120
-msgid "Can't create lock file; exiting"
+#: ../yummain.py:106
+msgid "No getcwd() access in current directory, moving to /"
msgstr ""
#. Depsolve stage
-#: ../yummain.py:167
+#: ../yummain.py:164
msgid "Resolving Dependencies"
msgstr ""
-#: ../yummain.py:230
+#: ../yummain.py:227 ../yummain.py:235
#, python-format
-msgid "Your transaction was saved, rerun it with: yum load-transaction %s"
+msgid ""
+"Your transaction was saved, rerun it with:\n"
+" yum load-transaction %s"
msgstr ""
-#: ../yummain.py:288
+#: ../yummain.py:312
msgid ""
"\n"
"\n"
"Exiting on user cancel."
msgstr ""
-#: ../yum/depsolve.py:84
+#: ../yum/depsolve.py:127
msgid "doTsSetup() will go away in a future version of Yum.\n"
msgstr ""
-#: ../yum/depsolve.py:99
+#: ../yum/depsolve.py:143
msgid "Setting up TransactionSets before config class is up"
msgstr ""
-#: ../yum/depsolve.py:153
+#: ../yum/depsolve.py:200
#, python-format
msgid "Invalid tsflag in config file: %s"
msgstr ""
-#: ../yum/depsolve.py:164
+#: ../yum/depsolve.py:218
#, python-format
msgid "Searching pkgSack for dep: %s"
msgstr ""
-#: ../yum/depsolve.py:207
+#: ../yum/depsolve.py:269
#, python-format
msgid "Member: %s"
msgstr ""
-#: ../yum/depsolve.py:221 ../yum/depsolve.py:793
+#: ../yum/depsolve.py:283 ../yum/depsolve.py:937
#, python-format
msgid "%s converted to install"
msgstr ""
-#: ../yum/depsolve.py:233
+#: ../yum/depsolve.py:295
#, python-format
msgid "Adding Package %s in mode %s"
msgstr ""
-#: ../yum/depsolve.py:249
+#: ../yum/depsolve.py:311
#, python-format
msgid "Removing Package %s"
msgstr ""
-#: ../yum/depsolve.py:271
+#: ../yum/depsolve.py:333
#, python-format
msgid "%s requires: %s"
msgstr ""
-#: ../yum/depsolve.py:312
+#: ../yum/depsolve.py:374
#, python-format
msgid "%s requires %s"
msgstr ""
-#: ../yum/depsolve.py:339
+#: ../yum/depsolve.py:401
msgid "Needed Require has already been looked up, cheating"
msgstr ""
-#: ../yum/depsolve.py:349
+#: ../yum/depsolve.py:411
#, python-format
msgid "Needed Require is not a package name. Looking up: %s"
msgstr ""
-#: ../yum/depsolve.py:357
+#: ../yum/depsolve.py:419
#, python-format
msgid "Potential Provider: %s"
msgstr ""
-#: ../yum/depsolve.py:380
+#: ../yum/depsolve.py:442
#, python-format
msgid "Mode is %s for provider of %s: %s"
msgstr ""
-#: ../yum/depsolve.py:384
+#: ../yum/depsolve.py:446
#, python-format
msgid "Mode for pkg providing %s: %s"
msgstr ""
@@ -2045,991 +2316,1140 @@ msgstr ""
#. the thing it needs is being updated or obsoleted away
#. try to update the requiring package in hopes that all this problem goes
#. away :(
-#: ../yum/depsolve.py:389 ../yum/depsolve.py:406
+#: ../yum/depsolve.py:451 ../yum/depsolve.py:486
#, python-format
msgid "Trying to update %s to resolve dep"
msgstr ""
-#: ../yum/depsolve.py:400 ../yum/depsolve.py:410
+#: ../yum/depsolve.py:480
#, python-format
msgid "No update paths found for %s. Failure!"
msgstr ""
-#: ../yum/depsolve.py:416
+#: ../yum/depsolve.py:491
+#, python-format
+msgid "No update paths found for %s. Failure due to requirement: %s!"
+msgstr ""
+
+#: ../yum/depsolve.py:507
+#, python-format
+msgid "Update for %s. Doesn't fix requirement: %s!"
+msgstr ""
+
+#: ../yum/depsolve.py:514
#, python-format
msgid "TSINFO: %s package requiring %s marked as erase"
msgstr ""
-#: ../yum/depsolve.py:429
+#: ../yum/depsolve.py:527
#, python-format
msgid "TSINFO: Obsoleting %s with %s to resolve dep."
msgstr ""
-#: ../yum/depsolve.py:432
+#: ../yum/depsolve.py:530
#, python-format
msgid "TSINFO: Updating %s to resolve dep."
msgstr ""
-#: ../yum/depsolve.py:440
+#: ../yum/depsolve.py:538
#, python-format
msgid "Cannot find an update path for dep for: %s"
msgstr ""
-#: ../yum/depsolve.py:471
+#: ../yum/depsolve.py:569
#, python-format
msgid "Quick matched %s to require for %s"
msgstr ""
#. is it already installed?
-#: ../yum/depsolve.py:513
+#: ../yum/depsolve.py:611
#, python-format
msgid "%s is in providing packages but it is already installed, removing."
msgstr ""
-#: ../yum/depsolve.py:529
+#: ../yum/depsolve.py:627
#, python-format
msgid "Potential resolving package %s has newer instance in ts."
msgstr ""
-#: ../yum/depsolve.py:540
+#: ../yum/depsolve.py:638
#, python-format
msgid "Potential resolving package %s has newer instance installed."
msgstr ""
-#: ../yum/depsolve.py:558
+#: ../yum/depsolve.py:656
#, python-format
msgid "%s already in ts, skipping this one"
msgstr ""
-#: ../yum/depsolve.py:607
+#: ../yum/depsolve.py:705
#, python-format
msgid "TSINFO: Marking %s as update for %s"
msgstr ""
-#: ../yum/depsolve.py:616
+#: ../yum/depsolve.py:714
#, python-format
msgid "TSINFO: Marking %s as install for %s"
msgstr ""
-#: ../yum/depsolve.py:727 ../yum/depsolve.py:819
+#: ../yum/depsolve.py:849 ../yum/depsolve.py:967
msgid "Success - empty transaction"
msgstr ""
-#: ../yum/depsolve.py:767 ../yum/depsolve.py:783
+#: ../yum/depsolve.py:889 ../yum/depsolve.py:927
msgid "Restarting Loop"
msgstr ""
-#: ../yum/depsolve.py:799
+#: ../yum/depsolve.py:947
msgid "Dependency Process ending"
msgstr ""
-#: ../yum/depsolve.py:821
+#: ../yum/depsolve.py:969
msgid "Success - deps resolved"
msgstr ""
-#: ../yum/depsolve.py:845
+#: ../yum/depsolve.py:993
#, python-format
msgid "Checking deps for %s"
msgstr ""
-#: ../yum/depsolve.py:931
+#: ../yum/depsolve.py:1082
#, python-format
msgid "looking for %s as a requirement of %s"
msgstr ""
-#: ../yum/depsolve.py:1169
+#: ../yum/depsolve.py:1349
#, python-format
msgid "Running compare_providers() for %s"
msgstr ""
-#: ../yum/depsolve.py:1196 ../yum/depsolve.py:1202
+#: ../yum/depsolve.py:1376 ../yum/depsolve.py:1382
#, python-format
msgid "better arch in po %s"
msgstr ""
-#: ../yum/depsolve.py:1298
+#: ../yum/depsolve.py:1496
#, python-format
msgid "%s obsoletes %s"
msgstr ""
-#: ../yum/depsolve.py:1310
+#: ../yum/depsolve.py:1508
#, python-format
msgid ""
"archdist compared %s to %s on %s\n"
" Winner: %s"
msgstr ""
-#: ../yum/depsolve.py:1318
+#: ../yum/depsolve.py:1516
#, python-format
msgid "common sourcerpm %s and %s"
msgstr ""
-#: ../yum/depsolve.py:1322
+#: ../yum/depsolve.py:1520
#, python-format
msgid "base package %s is installed for %s"
msgstr ""
-#: ../yum/depsolve.py:1328
+#: ../yum/depsolve.py:1526
#, python-format
msgid "common prefix of %s between %s and %s"
msgstr ""
-#: ../yum/depsolve.py:1359
+#: ../yum/depsolve.py:1543
#, python-format
-msgid "requires minimal: %d"
+msgid "provides vercmp: %s"
msgstr ""
-#: ../yum/depsolve.py:1363
+#: ../yum/depsolve.py:1547 ../yum/depsolve.py:1581
#, python-format
msgid " Winner: %s"
msgstr ""
-#: ../yum/depsolve.py:1368
+#: ../yum/depsolve.py:1577
+#, python-format
+msgid "requires minimal: %d"
+msgstr ""
+
+#: ../yum/depsolve.py:1586
#, python-format
msgid " Loser(with %d): %s"
msgstr ""
-#: ../yum/depsolve.py:1384
+#: ../yum/depsolve.py:1602
#, python-format
msgid "Best Order: %s"
msgstr ""
-#: ../yum/__init__.py:234
+#: ../yum/__init__.py:274
msgid "doConfigSetup() will go away in a future version of Yum.\n"
msgstr ""
-#: ../yum/__init__.py:482
+#: ../yum/__init__.py:553
+#, python-format
+msgid "Skipping unreadable repository %s"
+msgstr ""
+
+#: ../yum/__init__.py:572
#, python-format
msgid "Repository %r: Error parsing config: %s"
msgstr ""
-#: ../yum/__init__.py:488
+#: ../yum/__init__.py:578
#, python-format
msgid "Repository %r is missing name in configuration, using id"
msgstr ""
-#: ../yum/__init__.py:526
+#: ../yum/__init__.py:618
msgid "plugins already initialised"
msgstr ""
-#: ../yum/__init__.py:533
+#: ../yum/__init__.py:627
msgid "doRpmDBSetup() will go away in a future version of Yum.\n"
msgstr ""
-#: ../yum/__init__.py:544
+#: ../yum/__init__.py:638
msgid "Reading Local RPMDB"
msgstr ""
-#: ../yum/__init__.py:567
+#: ../yum/__init__.py:668
msgid "doRepoSetup() will go away in a future version of Yum.\n"
msgstr ""
-#: ../yum/__init__.py:630
+#: ../yum/__init__.py:722
msgid "doSackSetup() will go away in a future version of Yum.\n"
msgstr ""
-#: ../yum/__init__.py:660
+#: ../yum/__init__.py:752
msgid "Setting up Package Sacks"
msgstr ""
-#: ../yum/__init__.py:705
+#: ../yum/__init__.py:797
#, python-format
msgid "repo object for repo %s lacks a _resetSack method\n"
msgstr ""
-#: ../yum/__init__.py:706
+#: ../yum/__init__.py:798
msgid "therefore this repo cannot be reset.\n"
msgstr ""
-#: ../yum/__init__.py:711
+#: ../yum/__init__.py:806
msgid "doUpdateSetup() will go away in a future version of Yum.\n"
msgstr ""
-#: ../yum/__init__.py:723
+#: ../yum/__init__.py:818
msgid "Building updates object"
msgstr ""
-#: ../yum/__init__.py:765
+#: ../yum/__init__.py:862
msgid "doGroupSetup() will go away in a future version of Yum.\n"
msgstr ""
-#: ../yum/__init__.py:790
+#: ../yum/__init__.py:887
msgid "Getting group metadata"
msgstr ""
-#: ../yum/__init__.py:816
+#: ../yum/__init__.py:915
#, python-format
msgid "Adding group file from repository: %s"
msgstr ""
-#: ../yum/__init__.py:827
+#: ../yum/__init__.py:918
+#, python-format
+msgid "Failed to retrieve group file for repository: %s"
+msgstr ""
+
+#: ../yum/__init__.py:924
#, python-format
msgid "Failed to add groups file for repository: %s - %s"
msgstr ""
-#: ../yum/__init__.py:833
+#: ../yum/__init__.py:930
msgid "No Groups Available in any repository"
msgstr ""
-#: ../yum/__init__.py:845
+#: ../yum/__init__.py:945
msgid "Getting pkgtags metadata"
msgstr ""
-#: ../yum/__init__.py:855
+#: ../yum/__init__.py:955
#, python-format
msgid "Adding tags from repository: %s"
msgstr ""
-#: ../yum/__init__.py:866
+#: ../yum/__init__.py:966
#, python-format
msgid "Failed to add Pkg Tags for repository: %s - %s"
msgstr ""
-#: ../yum/__init__.py:944
+#: ../yum/__init__.py:1059
msgid "Importing additional filelist information"
msgstr ""
-#: ../yum/__init__.py:958
+#: ../yum/__init__.py:1077
#, python-format
msgid "The program %s%s%s is found in the yum-utils package."
msgstr ""
-#: ../yum/__init__.py:966
+#: ../yum/__init__.py:1094
msgid ""
"There are unfinished transactions remaining. You might consider running yum-"
"complete-transaction first to finish them."
msgstr ""
-#: ../yum/__init__.py:983
+#: ../yum/__init__.py:1111
msgid "--> Finding unneeded leftover dependencies"
msgstr ""
-#: ../yum/__init__.py:1041
+#: ../yum/__init__.py:1169
#, python-format
msgid "Protected multilib versions: %s != %s"
msgstr ""
-#: ../yum/__init__.py:1096
+#. People are confused about protected mutilib ... so give
+#. them a nicer message.
+#: ../yum/__init__.py:1173
+#, python-format
+msgid ""
+" Multilib version problems found. This often means that the root\n"
+"cause is something else and multilib version checking is just\n"
+"pointing out that there is a problem. Eg.:\n"
+"\n"
+" 1. You have an upgrade for %(name)s which is missing some\n"
+" dependency that another package requires. Yum is trying to\n"
+" solve this by installing an older version of %(name)s of the\n"
+" different architecture. If you exclude the bad architecture\n"
+" yum will tell you what the root cause is (which package\n"
+" requires what). You can try redoing the upgrade with\n"
+" --exclude %(name)s.otherarch ... this should give you an error\n"
+" message showing the root cause of the problem.\n"
+"\n"
+" 2. You have multiple architectures of %(name)s installed, but\n"
+" yum can only see an upgrade for one of those arcitectures.\n"
+" If you don't want/need both architectures anymore then you\n"
+" can remove the one with the missing update and everything\n"
+" will work.\n"
+"\n"
+" 3. You have duplicate versions of %(name)s installed already.\n"
+" You can use \"yum check\" to get yum show these errors.\n"
+"\n"
+"...you can also use --setopt=protected_multilib=false to remove\n"
+"this checking, however this is almost never the correct thing to\n"
+"do as something else is very likely to go wrong (often causing\n"
+"much more problems).\n"
+"\n"
+msgstr ""
+
+#: ../yum/__init__.py:1257
#, python-format
msgid "Trying to remove \"%s\", which is protected"
msgstr ""
-#: ../yum/__init__.py:1217
+#: ../yum/__init__.py:1378
msgid ""
"\n"
"Packages skipped because of dependency problems:"
msgstr ""
-#: ../yum/__init__.py:1221
+#: ../yum/__init__.py:1382
#, python-format
msgid " %s from %s"
msgstr ""
#. FIXME: _N()
-#: ../yum/__init__.py:1391
+#: ../yum/__init__.py:1556
#, python-format
msgid "** Found %d pre-existing rpmdb problem(s), 'yum check' output follows:"
msgstr ""
-#: ../yum/__init__.py:1395
+#: ../yum/__init__.py:1560
msgid "Warning: RPMDB altered outside of yum."
msgstr ""
-#: ../yum/__init__.py:1407
+#: ../yum/__init__.py:1572
msgid "missing requires"
msgstr ""
-#: ../yum/__init__.py:1408
+#: ../yum/__init__.py:1573
msgid "installed conflict"
msgstr ""
-#: ../yum/__init__.py:1525
+#: ../yum/__init__.py:1709
msgid ""
"Warning: scriptlet or other non-fatal errors occurred during transaction."
msgstr ""
-#: ../yum/__init__.py:1535
+#: ../yum/__init__.py:1719
msgid "Transaction couldn't start:"
msgstr ""
#. should this be 'to_unicoded'?
-#: ../yum/__init__.py:1538
+#: ../yum/__init__.py:1722
msgid "Could not run transaction."
msgstr ""
-#: ../yum/__init__.py:1552
+#: ../yum/__init__.py:1736
#, python-format
msgid "Failed to remove transaction file %s"
msgstr ""
#. maybe a file log here, too
#. but raising an exception is not going to do any good
-#: ../yum/__init__.py:1590
+#: ../yum/__init__.py:1792
#, python-format
msgid "%s was supposed to be installed but is not!"
msgstr ""
#. maybe a file log here, too
#. but raising an exception is not going to do any good
-#: ../yum/__init__.py:1651
+#. Note: This actually triggers atm. because we can't
+#. always find the erased txmbr to set it when
+#. we should.
+#: ../yum/__init__.py:1869
#, python-format
msgid "%s was supposed to be removed but is not!"
msgstr ""
-#: ../yum/__init__.py:1768
+#. Another copy seems to be running.
+#: ../yum/__init__.py:2004
#, python-format
-msgid "Could not open lock %s: %s"
+msgid "Existing lock %s: another copy is running as pid %s."
msgstr ""
#. Whoa. What the heck happened?
-#: ../yum/__init__.py:1785
+#: ../yum/__init__.py:2053
#, python-format
-msgid "Unable to check if PID %s is active"
+msgid "Could not create lock at %s: %s "
msgstr ""
-#. Another copy seems to be running.
-#: ../yum/__init__.py:1789
+#: ../yum/__init__.py:2065
#, python-format
-msgid "Existing lock %s: another copy is running as pid %s."
+msgid "Could not open lock %s: %s"
msgstr ""
+#. The pid doesn't exist
#. Whoa. What the heck happened?
-#: ../yum/__init__.py:1830
+#: ../yum/__init__.py:2082
#, python-format
-msgid "Could not create lock at %s: %s "
+msgid "Unable to check if PID %s is active"
msgstr ""
-#: ../yum/__init__.py:1875
+#: ../yum/__init__.py:2132
#, python-format
msgid ""
"Package does not match intended download. Suggestion: run yum "
"--enablerepo=%s clean metadata"
msgstr ""
-#: ../yum/__init__.py:1891
+#: ../yum/__init__.py:2155
msgid "Could not perform checksum"
msgstr ""
-#: ../yum/__init__.py:1894
+#: ../yum/__init__.py:2158
msgid "Package does not match checksum"
msgstr ""
-#: ../yum/__init__.py:1946
+#: ../yum/__init__.py:2222
#, python-format
msgid "package fails checksum but caching is enabled for %s"
msgstr ""
-#: ../yum/__init__.py:1949 ../yum/__init__.py:1979
+#: ../yum/__init__.py:2225 ../yum/__init__.py:2268
#, python-format
msgid "using local copy of %s"
msgstr ""
-#: ../yum/__init__.py:1991
-#, python-format
-msgid ""
-"Insufficient space in download directory %s\n"
-" * free %s\n"
-" * needed %s"
+#. caller handles errors
+#: ../yum/__init__.py:2342
+msgid "exiting because --downloadonly specified"
msgstr ""
-#: ../yum/__init__.py:2052
+#: ../yum/__init__.py:2371
msgid "Header is not complete."
msgstr ""
-#: ../yum/__init__.py:2089
+#: ../yum/__init__.py:2411
#, python-format
msgid ""
"Header not in local cache and caching-only mode enabled. Cannot download %s"
msgstr ""
-#: ../yum/__init__.py:2147
+#: ../yum/__init__.py:2471
#, python-format
msgid "Public key for %s is not installed"
msgstr ""
-#: ../yum/__init__.py:2151
+#: ../yum/__init__.py:2475
#, python-format
msgid "Problem opening package %s"
msgstr ""
-#: ../yum/__init__.py:2159
+#: ../yum/__init__.py:2483
#, python-format
msgid "Public key for %s is not trusted"
msgstr ""
-#: ../yum/__init__.py:2163
+#: ../yum/__init__.py:2487
#, python-format
msgid "Package %s is not signed"
msgstr ""
-#: ../yum/__init__.py:2202
+#: ../yum/__init__.py:2529
#, python-format
msgid "Cannot remove %s"
msgstr ""
-#: ../yum/__init__.py:2206
+#: ../yum/__init__.py:2533
#, python-format
msgid "%s removed"
msgstr ""
-#: ../yum/__init__.py:2252
+#: ../yum/__init__.py:2594
#, python-format
msgid "Cannot remove %s file %s"
msgstr ""
-#: ../yum/__init__.py:2256
+#: ../yum/__init__.py:2598
#, python-format
msgid "%s file %s removed"
msgstr ""
-#: ../yum/__init__.py:2258
+#: ../yum/__init__.py:2600
#, python-format
-msgid "%d %s files removed"
-msgstr ""
+msgid "%d %s file removed"
+msgid_plural "%d %s files removed"
+msgstr[0] ""
+msgstr[1] ""
-#: ../yum/__init__.py:2327
+#: ../yum/__init__.py:2712
#, python-format
msgid "More than one identical match in sack for %s"
msgstr ""
-#: ../yum/__init__.py:2333
+#: ../yum/__init__.py:2718
#, python-format
msgid "Nothing matches %s.%s %s:%s-%s from update"
msgstr ""
-#: ../yum/__init__.py:2632
+#: ../yum/__init__.py:3096
msgid ""
"searchPackages() will go away in a future version of Yum."
" Use searchGenerator() instead. \n"
msgstr ""
-#: ../yum/__init__.py:2675
+#: ../yum/__init__.py:3149
#, python-format
-msgid "Searching %d packages"
-msgstr ""
+msgid "Searching %d package"
+msgid_plural "Searching %d packages"
+msgstr[0] ""
+msgstr[1] ""
-#: ../yum/__init__.py:2679
+#: ../yum/__init__.py:3153
#, python-format
msgid "searching package %s"
msgstr ""
-#: ../yum/__init__.py:2691
+#: ../yum/__init__.py:3165
msgid "searching in file entries"
msgstr ""
-#: ../yum/__init__.py:2698
+#: ../yum/__init__.py:3172
msgid "searching in provides entries"
msgstr ""
-#: ../yum/__init__.py:2777
+#: ../yum/__init__.py:3369
msgid "No group data available for configured repositories"
msgstr ""
-#: ../yum/__init__.py:2808 ../yum/__init__.py:2827 ../yum/__init__.py:2858
-#: ../yum/__init__.py:2864 ../yum/__init__.py:2953 ../yum/__init__.py:2957
-#: ../yum/__init__.py:3339
+#: ../yum/__init__.py:3466 ../yum/__init__.py:3500 ../yum/__init__.py:3576
+#: ../yum/__init__.py:3582 ../yum/__init__.py:3719 ../yum/__init__.py:3723
+#: ../yum/__init__.py:4298
#, python-format
msgid "No Group named %s exists"
msgstr ""
-#: ../yum/__init__.py:2839 ../yum/__init__.py:2973
+#: ../yum/__init__.py:3512 ../yum/__init__.py:3740
#, python-format
msgid "package %s was not marked in group %s"
msgstr ""
-#: ../yum/__init__.py:2887
+#. (upgrade and igroup_data[pkg] == 'available')):
+#: ../yum/__init__.py:3622
+#, python-format
+msgid "Skipping package %s from group %s"
+msgstr ""
+
+#: ../yum/__init__.py:3628
#, python-format
msgid "Adding package %s from group %s"
msgstr ""
-#: ../yum/__init__.py:2891
+#: ../yum/__init__.py:3649
#, python-format
msgid "No package named %s available to be installed"
msgstr ""
-#: ../yum/__init__.py:2941
+#: ../yum/__init__.py:3702
#, python-format
-msgid "Warning: Group %s does not have any packages."
+msgid "Warning: Group %s does not have any packages to install."
msgstr ""
-#: ../yum/__init__.py:2943
+#: ../yum/__init__.py:3704
#, python-format
msgid "Group %s does have %u conditional packages, which may get installed."
msgstr ""
+#: ../yum/__init__.py:3794
+#, python-format
+msgid "Skipping group %s from environment %s"
+msgstr ""
+
#. This can happen due to excludes after .up has
#. happened.
-#: ../yum/__init__.py:3002
+#: ../yum/__init__.py:3858
#, python-format
msgid "Package tuple %s could not be found in packagesack"
msgstr ""
-#: ../yum/__init__.py:3022
+#: ../yum/__init__.py:3886
#, python-format
msgid "Package tuple %s could not be found in rpmdb"
msgstr ""
-#: ../yum/__init__.py:3079 ../yum/__init__.py:3129
+#: ../yum/__init__.py:3949 ../yum/__init__.py:4012
#, python-format
msgid "Invalid version flag from: %s"
msgstr ""
-#: ../yum/__init__.py:3096 ../yum/__init__.py:3101
+#: ../yum/__init__.py:3973 ../yum/__init__.py:3979 ../yum/__init__.py:4036
+#: ../yum/__init__.py:4042
#, python-format
msgid "No Package found for %s"
msgstr ""
-#: ../yum/__init__.py:3401
+#: ../yum/__init__.py:4245 ../yum/__init__.py:4274
+#, python-format
+msgid "Warning: Environment Group %s does not exist."
+msgstr ""
+
+#: ../yum/__init__.py:4397
+#, python-format
+msgid "Package: %s - can't co-install with %s"
+msgstr ""
+
+#: ../yum/__init__.py:4437
msgid "Package Object was not a package object instance"
msgstr ""
-#: ../yum/__init__.py:3405
+#: ../yum/__init__.py:4441
msgid "Nothing specified to install"
msgstr ""
-#: ../yum/__init__.py:3424 ../yum/__init__.py:4283
+#: ../yum/__init__.py:4465 ../yum/__init__.py:5410
#, python-format
msgid "Checking for virtual provide or file-provide for %s"
msgstr ""
-#: ../yum/__init__.py:3430 ../yum/__init__.py:3775 ../yum/__init__.py:3969
-#: ../yum/__init__.py:4289
-#, python-format
-msgid "No Match for argument: %s"
-msgstr ""
-
-#: ../yum/__init__.py:3507
+#: ../yum/__init__.py:4542
#, python-format
msgid "Package %s installed and not available"
msgstr ""
-#: ../yum/__init__.py:3510
+#: ../yum/__init__.py:4545
msgid "No package(s) available to install"
msgstr ""
-#: ../yum/__init__.py:3522
+#: ../yum/__init__.py:4557
#, python-format
msgid "Package: %s - already in transaction set"
msgstr ""
-#: ../yum/__init__.py:3550
+#: ../yum/__init__.py:4589
#, python-format
msgid "Package %s is obsoleted by %s which is already installed"
msgstr ""
-#: ../yum/__init__.py:3555
+#: ../yum/__init__.py:4594
#, python-format
msgid ""
"Package %s is obsoleted by %s, but obsoleting package does not provide for "
"requirements"
msgstr ""
-#: ../yum/__init__.py:3558
+#: ../yum/__init__.py:4597
#, python-format
msgid "Package %s is obsoleted by %s, trying to install %s instead"
msgstr ""
-#: ../yum/__init__.py:3566
+#: ../yum/__init__.py:4605
#, python-format
msgid "Package %s already installed and latest version"
msgstr ""
-#: ../yum/__init__.py:3580
+#: ../yum/__init__.py:4619
#, python-format
msgid "Package matching %s already installed. Checking for update."
msgstr ""
#. update everything (the easy case)
-#: ../yum/__init__.py:3684
+#: ../yum/__init__.py:4751
msgid "Updating Everything"
msgstr ""
-#: ../yum/__init__.py:3708 ../yum/__init__.py:3849 ../yum/__init__.py:3879
-#: ../yum/__init__.py:3915
+#: ../yum/__init__.py:4775 ../yum/__init__.py:4930 ../yum/__init__.py:4975
+#: ../yum/__init__.py:5011
#, python-format
msgid "Not Updating Package that is already obsoleted: %s.%s %s:%s-%s"
msgstr ""
-#: ../yum/__init__.py:3753 ../yum/__init__.py:3965
+#: ../yum/__init__.py:4830 ../yum/__init__.py:5072
#, python-format
msgid "%s"
msgstr ""
-#: ../yum/__init__.py:3838
+#: ../yum/__init__.py:4854 ../yum/__init__.py:5080 ../yum/__init__.py:5416
+#, python-format
+msgid "No Match for argument: %s"
+msgstr ""
+
+#: ../yum/__init__.py:4872
+#, python-format
+msgid "No package matched to upgrade: %s"
+msgstr ""
+
+#: ../yum/__init__.py:4919
#, python-format
msgid "Package is already obsoleted: %s.%s %s:%s-%s"
msgstr ""
-#: ../yum/__init__.py:3874
+#: ../yum/__init__.py:4970
#, python-format
msgid "Not Updating Package that is obsoleted: %s"
msgstr ""
-#: ../yum/__init__.py:3883 ../yum/__init__.py:3919
+#: ../yum/__init__.py:4979 ../yum/__init__.py:5015
#, python-format
msgid "Not Updating Package that is already updated: %s.%s %s:%s-%s"
msgstr ""
-#: ../yum/__init__.py:3982
-msgid "No package matched to remove"
+#: ../yum/__init__.py:5093
+#, python-format
+msgid "No package matched to remove: %s"
msgstr ""
-#: ../yum/__init__.py:3988
+#: ../yum/__init__.py:5099
#, python-format
msgid "Skipping the running kernel: %s"
msgstr ""
-#: ../yum/__init__.py:3994
+#: ../yum/__init__.py:5105
#, python-format
msgid "Removing %s from the transaction"
msgstr ""
-#: ../yum/__init__.py:4029
+#: ../yum/__init__.py:5142
#, python-format
msgid "Cannot open: %s. Skipping."
msgstr ""
-#: ../yum/__init__.py:4032 ../yum/__init__.py:4150 ../yum/__init__.py:4226
+#: ../yum/__init__.py:5145 ../yum/__init__.py:5262 ../yum/__init__.py:5347
#, python-format
msgid "Examining %s: %s"
msgstr ""
-#: ../yum/__init__.py:4036
+#: ../yum/__init__.py:5149
#, python-format
msgid "Cannot localinstall deltarpm: %s. Skipping."
msgstr ""
-#: ../yum/__init__.py:4045 ../yum/__init__.py:4153 ../yum/__init__.py:4229
+#: ../yum/__init__.py:5158 ../yum/__init__.py:5265 ../yum/__init__.py:5350
#, python-format
msgid ""
"Cannot add package %s to transaction. Not a compatible architecture: %s"
msgstr ""
-#: ../yum/__init__.py:4051
+#: ../yum/__init__.py:5164
#, python-format
msgid "Cannot install package %s. It is obsoleted by installed package %s"
msgstr ""
-#: ../yum/__init__.py:4059
+#: ../yum/__init__.py:5172
#, python-format
msgid ""
"Package %s not installed, cannot update it. Run yum install to install it "
"instead."
msgstr ""
-#: ../yum/__init__.py:4078 ../yum/__init__.py:4085
+#: ../yum/__init__.py:5191 ../yum/__init__.py:5198
#, python-format
msgid ""
"Package %s.%s not installed, cannot update it. Run yum install to install it"
" instead."
msgstr ""
-#: ../yum/__init__.py:4094 ../yum/__init__.py:4158 ../yum/__init__.py:4234
+#: ../yum/__init__.py:5207 ../yum/__init__.py:5270 ../yum/__init__.py:5355
#, python-format
msgid "Excluding %s"
msgstr ""
-#: ../yum/__init__.py:4099
+#: ../yum/__init__.py:5212
#, python-format
msgid "Marking %s to be installed"
msgstr ""
-#: ../yum/__init__.py:4105
+#: ../yum/__init__.py:5218
#, python-format
msgid "Marking %s as an update to %s"
msgstr ""
-#: ../yum/__init__.py:4112
+#: ../yum/__init__.py:5225
#, python-format
msgid "%s: does not update installed package."
msgstr ""
-#: ../yum/__init__.py:4147 ../yum/__init__.py:4223
+#: ../yum/__init__.py:5259 ../yum/__init__.py:5344
#, python-format
msgid "Cannot open file: %s. Skipping."
msgstr ""
-#: ../yum/__init__.py:4177
+#: ../yum/__init__.py:5299
msgid "Problem in reinstall: no package matched to remove"
msgstr ""
-#: ../yum/__init__.py:4203
+#: ../yum/__init__.py:5325
#, python-format
msgid "Problem in reinstall: no package %s matched to install"
msgstr ""
-#: ../yum/__init__.py:4311
+#: ../yum/__init__.py:5438
msgid "No package(s) available to downgrade"
msgstr ""
-#: ../yum/__init__.py:4319
+#: ../yum/__init__.py:5446
#, python-format
msgid "Package %s is allowed multiple installs, skipping"
msgstr ""
-#: ../yum/__init__.py:4365
+#: ../yum/__init__.py:5496
#, python-format
msgid "No Match for available package: %s"
msgstr ""
-#: ../yum/__init__.py:4372
+#: ../yum/__init__.py:5506
#, python-format
msgid "Only Upgrade available on package: %s"
msgstr ""
-#: ../yum/__init__.py:4442 ../yum/__init__.py:4479
+#: ../yum/__init__.py:5619 ../yum/__init__.py:5686
#, python-format
msgid "Failed to downgrade: %s"
msgstr ""
-#: ../yum/__init__.py:4516
+#: ../yum/__init__.py:5636 ../yum/__init__.py:5692
+#, python-format
+msgid "Failed to upgrade: %s"
+msgstr ""
+
+#: ../yum/__init__.py:5725
#, python-format
msgid "Retrieving key from %s"
msgstr ""
-#: ../yum/__init__.py:4534
+#: ../yum/__init__.py:5743
msgid "GPG key retrieval failed: "
msgstr ""
#. if we decide we want to check, even though the sig failed
#. here is where we would do that
-#: ../yum/__init__.py:4557
+#: ../yum/__init__.py:5766
#, python-format
msgid "GPG key signature on key %s does not match CA Key for repo: %s"
msgstr ""
-#: ../yum/__init__.py:4559
+#: ../yum/__init__.py:5768
msgid "GPG key signature verified against CA Key(s)"
msgstr ""
-#: ../yum/__init__.py:4567
+#: ../yum/__init__.py:5776
#, python-format
msgid "Invalid GPG Key from %s: %s"
msgstr ""
-#: ../yum/__init__.py:4576
+#: ../yum/__init__.py:5785
#, python-format
msgid "GPG key parsing failed: key does not have value %s"
msgstr ""
-#: ../yum/__init__.py:4592
+#: ../yum/__init__.py:5801
#, python-format
msgid ""
"Importing %s key 0x%s:\n"
-" Userid : %s\n"
-" Package: %s (%s)\n"
-" From : %s"
+" Userid : \"%s\"\n"
+" Fingerprint: %s\n"
+" Package : %s (%s)\n"
+" From : %s"
msgstr ""
-#: ../yum/__init__.py:4600
+#: ../yum/__init__.py:5811
#, python-format
msgid ""
"Importing %s key 0x%s:\n"
-" Userid: \"%s\"\n"
-" From : %s"
+" Userid : \"%s\"\n"
+" Fingerprint: %s\n"
+" From : %s"
msgstr ""
-#: ../yum/__init__.py:4634
+#: ../yum/__init__.py:5839
+#, python-format
+msgid ""
+"\n"
+"\n"
+"\n"
+" Failing package is: %s\n"
+" GPG Keys are configured as: %s\n"
+msgstr ""
+
+#: ../yum/__init__.py:5853
#, python-format
msgid "GPG key at %s (0x%s) is already installed"
msgstr ""
-#: ../yum/__init__.py:4671
+#: ../yum/__init__.py:5891
#, python-format
msgid "Key import failed (code %d)"
msgstr ""
-#: ../yum/__init__.py:4672 ../yum/__init__.py:4755
+#: ../yum/__init__.py:5893 ../yum/__init__.py:5994
msgid "Key imported successfully"
msgstr ""
-#: ../yum/__init__.py:4676
+#: ../yum/__init__.py:5897
msgid "Didn't install any keys"
msgstr ""
-#: ../yum/__init__.py:4680
+#: ../yum/__init__.py:5900
#, 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 ""
-#: ../yum/__init__.py:4689
+#: ../yum/__init__.py:5910
msgid "Import of key(s) didn't help, wrong key(s)?"
msgstr ""
-#: ../yum/__init__.py:4713
+#: ../yum/__init__.py:5932
+msgid "No"
+msgstr ""
+
+#: ../yum/__init__.py:5934
+msgid "Yes"
+msgstr ""
+
+#: ../yum/__init__.py:5935
+#, python-format
+msgid ""
+"\n"
+"\n"
+"\n"
+" CA Key: %s\n"
+" Failing repo is: %s\n"
+" GPG Keys are configured as: %s\n"
+msgstr ""
+
+#: ../yum/__init__.py:5948
#, python-format
msgid "GPG key at %s (0x%s) is already imported"
msgstr ""
-#: ../yum/__init__.py:4754
-msgid "Key import failed"
+#: ../yum/__init__.py:5992
+#, python-format
+msgid "Key %s import failed"
msgstr ""
-#: ../yum/__init__.py:4770
+#: ../yum/__init__.py:6009
#, python-format
msgid "Didn't install any keys for repo %s"
msgstr ""
-#: ../yum/__init__.py:4774
+#: ../yum/__init__.py:6014
#, python-format
msgid ""
"The GPG keys listed for the \"%s\" repository are already installed but they are not correct.\n"
"Check that the correct key URLs are configured for this repository."
msgstr ""
-#: ../yum/__init__.py:4924
+#: ../yum/__init__.py:6172
msgid "Unable to find a suitable mirror."
msgstr ""
-#: ../yum/__init__.py:4926
+#: ../yum/__init__.py:6174
msgid "Errors were encountered while downloading packages."
msgstr ""
-#: ../yum/__init__.py:4981
+#: ../yum/__init__.py:6229
#, python-format
msgid "Please report this error at %s"
msgstr ""
-#: ../yum/__init__.py:4998
+#: ../yum/__init__.py:6246
msgid "Test Transaction Errors: "
msgstr ""
-#: ../yum/__init__.py:5098
+#: ../yum/__init__.py:6358
#, python-format
msgid "Could not set cachedir: %s"
msgstr ""
-#: ../yum/__init__.py:5148 ../yum/__init__.py:5150
+#: ../yum/__init__.py:6420 ../yum/__init__.py:6422
msgid "Dependencies not solved. Will not save unresolved transaction."
msgstr ""
-#: ../yum/__init__.py:5179 ../yum/__init__.py:5181
+#: ../yum/__init__.py:6455 ../yum/__init__.py:6457
#, python-format
msgid "Could not save transaction file %s: %s"
msgstr ""
-#: ../yum/__init__.py:5195
+#: ../yum/__init__.py:6483
#, python-format
msgid "Could not access/read saved transaction %s : %s"
msgstr ""
-#: ../yum/__init__.py:5214
-msgid "rpmdb ver mismatched saved transaction version, "
-msgstr ""
-
-#: ../yum/__init__.py:5216
-msgid " ignoring, as requested."
-msgstr ""
-
-#: ../yum/__init__.py:5219 ../yum/__init__.py:5354
-msgid " aborting."
+#: ../yum/__init__.py:6521
+msgid "rpmdb ver mismatched saved transaction version,"
msgstr ""
-#: ../yum/__init__.py:5228
+#: ../yum/__init__.py:6535
msgid "cannot find tsflags or tsflags not integer."
msgstr ""
-#: ../yum/__init__.py:5267
+#: ../yum/__init__.py:6584
#, python-format
msgid "Found txmbr in unknown current state: %s"
msgstr ""
-#: ../yum/__init__.py:5271
+#: ../yum/__init__.py:6588
#, python-format
msgid "Could not find txmbr: %s in state %s"
msgstr ""
-#: ../yum/__init__.py:5307 ../yum/__init__.py:5324
+#: ../yum/__init__.py:6625 ../yum/__init__.py:6642
#, python-format
msgid "Could not find txmbr: %s from origin: %s"
msgstr ""
-#: ../yum/__init__.py:5349
+#: ../yum/__init__.py:6667
msgid "Transaction members, relations are missing or ts has been modified,"
msgstr ""
-#: ../yum/__init__.py:5351
+#: ../yum/__init__.py:6670
msgid " ignoring, as requested. You must redepsolve!"
msgstr ""
+#. Debugging output
+#: ../yum/__init__.py:6738 ../yum/__init__.py:6757
+#, python-format
+msgid "%s has been visited already and cannot be removed."
+msgstr ""
+
+#. Debugging output
+#: ../yum/__init__.py:6741
+#, python-format
+msgid "Examining revdeps of %s"
+msgstr ""
+
+#. Debugging output
+#: ../yum/__init__.py:6762
+#, python-format
+msgid "%s has revdep %s which was user-installed."
+msgstr ""
+
+#: ../yum/__init__.py:6773 ../yum/__init__.py:6779
+#, python-format
+msgid "%s is needed by a package to be installed."
+msgstr ""
+
+#. Debugging output
+#: ../yum/__init__.py:6793
+#, python-format
+msgid "%s has no user-installed revdeps."
+msgstr ""
+
#. Mostly copied from YumOutput._outKeyValFill()
-#: ../yum/plugins.py:209
+#: ../yum/plugins.py:212
msgid "Loaded plugins: "
msgstr ""
-#: ../yum/plugins.py:223 ../yum/plugins.py:229
+#: ../yum/plugins.py:226 ../yum/plugins.py:232
#, python-format
msgid "No plugin match for: %s"
msgstr ""
-#: ../yum/plugins.py:259
+#: ../yum/plugins.py:262
#, python-format
msgid "Not loading \"%s\" plugin, as it is disabled"
msgstr ""
#. Give full backtrace:
-#: ../yum/plugins.py:271
+#: ../yum/plugins.py:274
#, python-format
msgid "Plugin \"%s\" can't be imported"
msgstr ""
-#: ../yum/plugins.py:278
+#: ../yum/plugins.py:281
#, python-format
msgid "Plugin \"%s\" doesn't specify required API version"
msgstr ""
-#: ../yum/plugins.py:283
+#: ../yum/plugins.py:286
#, python-format
msgid "Plugin \"%s\" requires API %s. Supported API is %s."
msgstr ""
-#: ../yum/plugins.py:316
+#: ../yum/plugins.py:319
#, python-format
msgid "Loading \"%s\" plugin"
msgstr ""
-#: ../yum/plugins.py:323
+#: ../yum/plugins.py:326
#, python-format
msgid "Two or more plugins with the name \"%s\" exist in the plugin search path"
msgstr ""
-#: ../yum/plugins.py:343
+#: ../yum/plugins.py:346
#, python-format
msgid "Configuration file %s not found"
msgstr ""
#. for
#. Configuration files for the plugin not found
-#: ../yum/plugins.py:346
+#: ../yum/plugins.py:349
#, python-format
msgid "Unable to find configuration file for plugin %s"
msgstr ""
-#: ../yum/plugins.py:508
+#: ../yum/plugins.py:553
msgid "registration of commands not supported"
msgstr ""
-#: ../yum/rpmsack.py:148
+#: ../yum/rpmsack.py:159
msgid "has missing requires of"
msgstr ""
-#: ../yum/rpmsack.py:151
+#: ../yum/rpmsack.py:162
msgid "has installed conflicts"
msgstr ""
-#: ../yum/rpmsack.py:160
+#: ../yum/rpmsack.py:171
#, python-format
msgid "%s is a duplicate with %s"
msgstr ""
-#: ../yum/rpmsack.py:168
+#: ../yum/rpmsack.py:179
#, python-format
msgid "%s is obsoleted by %s"
msgstr ""
-#: ../yum/rpmsack.py:176
+#: ../yum/rpmsack.py:187
#, python-format
msgid "%s provides %s but it cannot be found"
msgstr ""
@@ -3038,6 +3458,23 @@ msgstr ""
msgid "Repackaging"
msgstr ""
+#: ../yum/rpmtrans.py:149
+#, python-format
+msgid "Verify: %u/%u: %s"
+msgstr ""
+
+#: ../yum/yumRepo.py:919
+#, python-format
+msgid ""
+"Insufficient space in download directory %s\n"
+" * free %s\n"
+" * needed %s"
+msgstr ""
+
+#: ../yum/yumRepo.py:986
+msgid "Package does not match intended download."
+msgstr ""
+
#: ../rpmUtils/oldUtils.py:33
#, python-format
msgid "Header cannot be opened or does not match %s, %s."
@@ -3066,5 +3503,3 @@ msgstr ""
#, python-format
msgid "Error opening rpm %s - error %s"
msgstr ""
-
-
diff --git a/po/ca.po b/po/ca.po
index cca37b7..6ab974e 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -2,1504 +2,1643 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
msgid ""
msgstr ""
"Project-Id-Version: Yum\n"
-"Report-Msgid-Bugs-To: http://yum.baseurl.org/\n"
-"POT-Creation-Date: 2011-06-06 10:21-0400\n"
-"PO-Revision-Date: 2011-06-06 14:21+0000\n"
-"Last-Translator: skvidal <skvidal@fedoraproject.org>\n"
+"Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n"
+"POT-Creation-Date: 2013-01-30 09:08-0500\n"
+"PO-Revision-Date: 2013-01-30 14:08+0000\n"
+"Last-Translator: james <james@fedoraproject.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ca\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../callback.py:48 ../output.py:1037 ../yum/rpmtrans.py:73
+#: ../callback.py:45 ../output.py:1502 ../yum/rpmtrans.py:73
msgid "Updating"
msgstr "Actualitzant"
-#: ../callback.py:49 ../yum/rpmtrans.py:74
+#: ../callback.py:46 ../yum/rpmtrans.py:74
msgid "Erasing"
msgstr "Suprimint"
-#: ../callback.py:50 ../callback.py:51 ../callback.py:53 ../output.py:1036
-#: ../output.py:2218 ../yum/rpmtrans.py:75 ../yum/rpmtrans.py:76
+#: ../callback.py:47 ../callback.py:48 ../callback.py:50 ../output.py:1501
+#: ../output.py:2922 ../yum/rpmtrans.py:75 ../yum/rpmtrans.py:76
#: ../yum/rpmtrans.py:78
msgid "Installing"
msgstr "Instal·lant"
-#: ../callback.py:52 ../callback.py:58 ../output.py:1840 ../yum/rpmtrans.py:77
+#: ../callback.py:49 ../callback.py:55 ../output.py:2379 ../yum/rpmtrans.py:77
msgid "Obsoleted"
msgstr "Obsolet"
-#: ../callback.py:54 ../output.py:1169 ../output.py:1686 ../output.py:1847
+#: ../callback.py:51 ../output.py:1670 ../output.py:2222 ../output.py:2386
msgid "Updated"
msgstr "Actualitzat"
-#: ../callback.py:55 ../output.py:1685
+#: ../callback.py:52 ../output.py:2221
msgid "Erased"
msgstr "Suprimit"
-#: ../callback.py:56 ../callback.py:57 ../callback.py:59 ../output.py:1167
-#: ../output.py:1685 ../output.py:1687 ../output.py:2190
+#: ../callback.py:53 ../callback.py:54 ../callback.py:56 ../output.py:1668
+#: ../output.py:2221 ../output.py:2223 ../output.py:2894
msgid "Installed"
msgstr "Instal·lat"
-#: ../callback.py:130
+#: ../callback.py:142
msgid "No header - huh?"
msgstr "No hi ha capçalera"
-#: ../callback.py:168
+#: ../callback.py:180
msgid "Repackage"
msgstr "Reempaqueta"
-#: ../callback.py:189
+#: ../callback.py:201
#, python-format
msgid "Error: invalid output state: %s for %s"
msgstr "Error: estat de sortida invàlid: %s per a %s"
-#: ../callback.py:212
+#: ../callback.py:224
#, python-format
msgid "Erased: %s"
msgstr "Suprimit: %s"
-#: ../callback.py:217 ../output.py:1038 ../output.py:2193
+#: ../callback.py:229 ../output.py:1503 ../output.py:2897
msgid "Removing"
msgstr "Suprimint"
-#: ../callback.py:219 ../yum/rpmtrans.py:79
+#: ../callback.py:231 ../yum/rpmtrans.py:79
msgid "Cleanup"
msgstr "Neteja"
-#: ../cli.py:115
+#: ../cli.py:122
#, python-format
msgid "Command \"%s\" already defined"
msgstr "L'ordre «%s» ja està definida"
-#: ../cli.py:127
+#: ../cli.py:137
msgid "Setting up repositories"
msgstr "Configurant repositoris"
-#: ../cli.py:138
+#: ../cli.py:148
msgid "Reading repository metadata in from local files"
msgstr "S'estan llegint les metadades de repositoris des de fitxers locals"
-#: ../cli.py:245 ../utils.py:281
+#: ../cli.py:273 ../cli.py:277 ../utils.py:320
#, python-format
msgid "Config Error: %s"
msgstr "Error de configuració: %s"
-#: ../cli.py:248 ../cli.py:1584 ../utils.py:284
+#: ../cli.py:280 ../cli.py:2206 ../utils.py:323
#, python-format
msgid "Options Error: %s"
msgstr "Error d'opcions: %s"
-#: ../cli.py:293
+#: ../cli.py:327
#, python-format
msgid " Installed: %s-%s at %s"
msgstr " Instal·lat: %s-%s a %s"
-#: ../cli.py:295
+#: ../cli.py:329
#, python-format
msgid " Built : %s at %s"
msgstr " Muntat : %s a %s"
-#: ../cli.py:297
+#: ../cli.py:331
#, python-format
msgid " Committed: %s at %s"
msgstr " Pujat: %s a %s"
-#: ../cli.py:336
+#: ../cli.py:372
msgid "You need to give some command"
msgstr "Cal que doneu alguna ordre"
-#: ../cli.py:350
+#: ../cli.py:386
#, python-format
msgid "No such command: %s. Please use %s --help"
msgstr ""
-#: ../cli.py:400
+#: ../cli.py:444
msgid "Disk Requirements:\n"
msgstr "Requeriments de disc:\n"
-#: ../cli.py:402
+#: ../cli.py:446
#, python-format
msgid " At least %dMB more space needed on the %s filesystem.\n"
-msgstr ""
+msgid_plural " At least %dMB more space needed on the %s filesystem.\n"
+msgstr[0] ""
+msgstr[1] ""
#. TODO: simplify the dependency errors?
#. Fixup the summary
-#: ../cli.py:407
+#: ../cli.py:451
msgid ""
"Error Summary\n"
"-------------\n"
+msgstr "Resum d'errors\n-------------\n"
+
+#: ../cli.py:472
+msgid "Can't create lock file; exiting"
+msgstr ""
+
+#: ../cli.py:479
+msgid ""
+"Another app is currently holding the yum lock; exiting as configured by "
+"exit_on_lock"
msgstr ""
-"Resum d'errors\n"
-"-------------\n"
-#: ../cli.py:450
+#: ../cli.py:532
msgid "Trying to run the transaction but nothing to do. Exiting."
+msgstr "S'ha intentat executar la transacció però no hi ha cap tasca a fer. S'està sortint."
+
+#: ../cli.py:577
+msgid "future rpmdb ver mismatched saved transaction version,"
msgstr ""
-"S'ha intentat executar la transacció però no hi ha cap tasca a fer. S'està "
-"sortint."
-#: ../cli.py:497
+#: ../cli.py:579 ../yum/__init__.py:6523
+msgid " ignoring, as requested."
+msgstr ""
+
+#: ../cli.py:582 ../yum/__init__.py:6526 ../yum/__init__.py:6673
+msgid " aborting."
+msgstr ""
+
+#: ../cli.py:588
msgid "Exiting on user Command"
msgstr "S'està sortint de l'ordre de l'usuari"
-#: ../cli.py:501
+#: ../cli.py:592
msgid "Downloading Packages:"
msgstr "S'estan baixant els següents paquets:"
-#: ../cli.py:506
+#: ../cli.py:597
msgid "Error Downloading Packages:\n"
msgstr "S'ha produït un error baixant els següents paquets:\n"
-#: ../cli.py:525 ../yum/__init__.py:4967
+#: ../cli.py:616 ../yum/__init__.py:6215
msgid "Running Transaction Check"
msgstr ""
-#: ../cli.py:534 ../yum/__init__.py:4976
+#: ../cli.py:625 ../yum/__init__.py:6224
msgid "ERROR You need to update rpm to handle:"
msgstr "S'ha produït un error. Necessiteu actualitzar el gestor rpm:"
-#: ../cli.py:536 ../yum/__init__.py:4979
+#: ../cli.py:627 ../yum/__init__.py:6227
msgid "ERROR with transaction check vs depsolve:"
msgstr ""
-#: ../cli.py:542
+#: ../cli.py:633
msgid "RPM needs to be updated"
msgstr "Cal actualitzar l'RPM"
-#: ../cli.py:543
+#: ../cli.py:634
#, python-format
msgid "Please report this error in %s"
msgstr "Siusplau, informeu d'aquest error a %s"
-#: ../cli.py:549
+#: ../cli.py:640
msgid "Running Transaction Test"
msgstr "S'està executant la transacció de prova"
-#: ../cli.py:561
+#: ../cli.py:652
msgid "Transaction Check Error:\n"
msgstr "S'ha produït un error en la transacció de prova:\n"
-#: ../cli.py:568
+#: ../cli.py:659
msgid "Transaction Test Succeeded"
msgstr "La transacció de prova ha acabat amb èxit"
-#: ../cli.py:600
+#: ../cli.py:691
msgid "Running Transaction"
msgstr "S'està executant la transacció"
-#: ../cli.py:630
+#: ../cli.py:724
msgid ""
"Refusing to automatically import keys when running unattended.\n"
"Use \"-y\" to override."
-msgstr ""
-"No s'importaran automàticament les claus en una execució desatesa.\n"
-"Feu servir \"-y\" per a importar les claus."
+msgstr "No s'importaran automàticament les claus en una execució desatesa.\nFeu servir \"-y\" per a importar les claus."
-#: ../cli.py:649 ../cli.py:692
+#: ../cli.py:743 ../cli.py:786
msgid " * Maybe you meant: "
msgstr " * Potser volíeu dir: "
-#: ../cli.py:675 ../cli.py:683
+#: ../cli.py:769 ../cli.py:777
#, python-format
msgid "Package(s) %s%s%s available, but not installed."
msgstr "Paquets %s%s%s disponibles, però no instal·lats."
-#: ../cli.py:689 ../cli.py:722 ../cli.py:908
+#: ../cli.py:783 ../cli.py:891 ../cli.py:1158
#, python-format
msgid "No package %s%s%s available."
msgstr "El paquet %s%s%s no està disponible."
-#: ../cli.py:729 ../cli.py:973
-msgid "Package(s) to install"
-msgstr "Paquets a instal·lar"
+#: ../cli.py:871 ../cli.py:881 ../cli.py:1101 ../cli.py:1111
+#, python-format
+msgid "Bad %s argument %s."
+msgstr ""
-#: ../cli.py:732 ../cli.py:733 ../cli.py:914 ../cli.py:948 ../cli.py:974
-#: ../yumcommands.py:190
+#: ../cli.py:900 ../yumcommands.py:3331
+#, python-format
+msgid "%d package to install"
+msgid_plural "%d packages to install"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../cli.py:903 ../cli.py:904 ../cli.py:1169 ../cli.py:1170 ../cli.py:1224
+#: ../cli.py:1225 ../cli.py:1260 ../yumcommands.py:323 ../yumcommands.py:3419
msgid "Nothing to do"
msgstr "Res a fer"
-#: ../cli.py:767
+#: ../cli.py:953
#, python-format
-msgid "%d packages marked for Update"
-msgstr "%d paquets marcats per a actualitzar"
+msgid "%d package marked for Update"
+msgid_plural "%d packages marked for Update"
+msgstr[0] ""
+msgstr[1] ""
-#: ../cli.py:770
+#: ../cli.py:955
msgid "No Packages marked for Update"
msgstr "No hi ha cap paquet marcat per a actualitzar"
-#: ../cli.py:866
+#: ../cli.py:1067
#, python-format
-msgid "%d packages marked for Distribution Synchronization"
-msgstr ""
+msgid "%d package marked for Distribution Synchronization"
+msgid_plural "%d packages marked for Distribution Synchronization"
+msgstr[0] ""
+msgstr[1] ""
-#: ../cli.py:869
+#: ../cli.py:1069
msgid "No Packages marked for Distribution Synchronization"
msgstr ""
-#: ../cli.py:885
+#: ../cli.py:1124
#, python-format
-msgid "%d packages marked for removal"
-msgstr "%d paquets marcats per a suprimir"
+msgid "%d package marked for removal"
+msgid_plural "%d packages marked for removal"
+msgstr[0] ""
+msgstr[1] ""
-#: ../cli.py:888
+#: ../cli.py:1126
msgid "No Packages marked for removal"
msgstr "No hi ha cap paquet marcat per a suprimir"
-#: ../cli.py:913
-msgid "Package(s) to downgrade"
-msgstr "Paquets per a desactualitzar"
+#: ../cli.py:1166
+#, python-format
+msgid "%d package to downgrade"
+msgid_plural "%d packages to downgrade"
+msgstr[0] ""
+msgstr[1] ""
-#: ../cli.py:938
+#: ../cli.py:1207
#, python-format
msgid " (from %s)"
msgstr " (des de %s)"
-#: ../cli.py:939
+#: ../cli.py:1208
#, python-format
msgid "Installed package %s%s%s%s not available."
msgstr "El paquet instal·lat %s%s%s%s no està disponible."
-#: ../cli.py:947
-msgid "Package(s) to reinstall"
-msgstr "Paquets a reinstal·lar"
+#: ../cli.py:1221
+#, python-format
+msgid "%d package to reinstall"
+msgid_plural "%d packages to reinstall"
+msgstr[0] ""
+msgstr[1] ""
-#: ../cli.py:960
+#: ../cli.py:1246
msgid "No Packages Provided"
msgstr "No s'ha proporcionat cap paquet"
-#: ../cli.py:1058
+#: ../cli.py:1259
+msgid "Package(s) to install"
+msgstr "Paquets a instal·lar"
+
+#: ../cli.py:1367
#, python-format
msgid "N/S Matched: %s"
msgstr ""
-#: ../cli.py:1075
+#: ../cli.py:1384
#, python-format
msgid " Name and summary matches %sonly%s, use \"search all\" for everything."
msgstr ""
-#: ../cli.py:1077
+#: ../cli.py:1386
#, python-format
msgid ""
" Full name and summary matches %sonly%s, use \"search all\" for everything."
msgstr ""
-#: ../cli.py:1095
+#: ../cli.py:1404
#, python-format
msgid "Matched: %s"
msgstr ""
-#: ../cli.py:1102
+#: ../cli.py:1411
#, python-format
msgid " Name and summary matches %smostly%s, use \"search all\" for everything."
msgstr ""
-#: ../cli.py:1106
+#: ../cli.py:1415
#, python-format
msgid "Warning: No matches found for: %s"
msgstr "Avís: no s'ha trobat cap coincidència per a: %s"
-#: ../cli.py:1109
+#: ../cli.py:1418
msgid "No Matches found"
msgstr "No s'ha trobat cap coincidència"
-#: ../cli.py:1174
+#: ../cli.py:1536
#, python-format
-msgid "No Package Found for %s"
-msgstr "No s'ha trobat cap paquet per a %s"
+msgid ""
+"Error: No Packages found for:\n"
+" %s"
+msgstr ""
-#: ../cli.py:1184
+#: ../cli.py:1572
msgid "Cleaning repos: "
msgstr ""
-#: ../cli.py:1189
+#: ../cli.py:1577
msgid "Cleaning up Everything"
msgstr "S'està netejant tot"
-#: ../cli.py:1205
+#: ../cli.py:1593
msgid "Cleaning up Headers"
msgstr "S'estan netejant les capçaleres"
-#: ../cli.py:1208
+#: ../cli.py:1596
msgid "Cleaning up Packages"
msgstr "S'estan netejant els paquets"
-#: ../cli.py:1211
+#: ../cli.py:1599
msgid "Cleaning up xml metadata"
msgstr "S'estan netejant les metadades xml"
-#: ../cli.py:1214
+#: ../cli.py:1602
msgid "Cleaning up database cache"
msgstr "S'està netejant la memòria cau de la base de dades"
-#: ../cli.py:1217
+#: ../cli.py:1605
msgid "Cleaning up expire-cache metadata"
msgstr "S'està netejant la memòria cau de metadades que han vençut"
-#: ../cli.py:1220
+#: ../cli.py:1608
msgid "Cleaning up cached rpmdb data"
msgstr ""
-#: ../cli.py:1223
+#: ../cli.py:1611
msgid "Cleaning up plugins"
msgstr "S'estan netejant els connectors"
-#: ../cli.py:1247
-#, python-format
-msgid "Warning: No groups match: %s"
+#: ../cli.py:1727
+msgid "Installed Environment Groups:"
msgstr ""
-#: ../cli.py:1264
+#: ../cli.py:1728
+msgid "Available Environment Groups:"
+msgstr ""
+
+#: ../cli.py:1735
msgid "Installed Groups:"
msgstr "Grups instal·lats:"
-#: ../cli.py:1270
+#: ../cli.py:1742
msgid "Installed Language Groups:"
msgstr ""
-#: ../cli.py:1276
+#: ../cli.py:1749
msgid "Available Groups:"
msgstr "Grups disponibles:"
-#: ../cli.py:1282
+#: ../cli.py:1756
msgid "Available Language Groups:"
msgstr ""
-#: ../cli.py:1285
+#: ../cli.py:1759
+#, python-format
+msgid "Warning: No Environments/Groups match: %s"
+msgstr ""
+
+#: ../cli.py:1763
msgid "Done"
msgstr "Fet"
-#: ../cli.py:1296 ../cli.py:1314 ../cli.py:1320 ../yum/__init__.py:3313
+#: ../cli.py:1818
+#, python-format
+msgid "Warning: Group/Environment %s does not exist."
+msgstr ""
+
+#: ../cli.py:1859
+#, python-format
+msgid "Warning: Environment %s does not exist."
+msgstr ""
+
+#: ../cli.py:1873 ../cli.py:1879 ../yum/__init__.py:4254
#, python-format
msgid "Warning: Group %s does not exist."
msgstr "Avís: El grup %s no existeix."
-#: ../cli.py:1324
+#: ../cli.py:1883
msgid "No packages in any requested group available to install or update"
-msgstr ""
-"No hi ha cap paquet disponible per a instal·lar o actualitzar en els grups "
-"sol·licitats"
+msgstr "No hi ha cap paquet disponible per a instal·lar o actualitzar en els grups sol·licitats"
+
+#: ../cli.py:1885
+#, python-format
+msgid "%d package to Install"
+msgid_plural "%d packages to Install"
+msgstr[0] ""
+msgstr[1] ""
-#: ../cli.py:1326
+#: ../cli.py:1919 ../yum/__init__.py:3536 ../yum/__init__.py:3766
+#: ../yum/__init__.py:3824
#, python-format
-msgid "%d Package(s) to Install"
-msgstr "%d paquets a instal·lar"
+msgid "No Environment named %s exists"
+msgstr ""
-#: ../cli.py:1336 ../yum/__init__.py:3325
+#: ../cli.py:1935 ../yum/__init__.py:4282
#, python-format
msgid "No group named %s exists"
msgstr "No existeix cap grup anomenat %s"
-#: ../cli.py:1342
+#: ../cli.py:1945
msgid "No packages to remove from groups"
msgstr "No hi ha cap paquet a suprimir dels grups"
-#: ../cli.py:1344
+#: ../cli.py:1947 ../yumcommands.py:3351
#, python-format
-msgid "%d Package(s) to remove"
-msgstr "%d paquets a suprimir"
+msgid "%d package to remove"
+msgid_plural "%d packages to remove"
+msgstr[0] ""
+msgstr[1] ""
-#: ../cli.py:1386
+#: ../cli.py:1988
#, python-format
msgid "Package %s is already installed, skipping"
msgstr "El paquet %s ja està instal·lat, s'ometrà"
-#: ../cli.py:1397
+#: ../cli.py:1999
#, python-format
msgid "Discarding non-comparable pkg %s.%s"
msgstr "S'està descartant el paquet no comparable %s.%s"
#. we've not got any installed that match n or n+a
-#: ../cli.py:1423
+#: ../cli.py:2025
#, python-format
msgid "No other %s installed, adding to list for potential install"
-msgstr ""
-"No hi ha cap altre %s instal·lat, s'afegeix a la llista per a una possible "
-"instal·lació"
+msgstr "No hi ha cap altre %s instal·lat, s'afegeix a la llista per a una possible instal·lació"
-#: ../cli.py:1443
+#: ../cli.py:2045
msgid "Plugin Options"
msgstr "Opcions del connector"
-#: ../cli.py:1451
+#: ../cli.py:2057
#, python-format
msgid "Command line error: %s"
msgstr "Error en la línia d'ordres: %s"
-#: ../cli.py:1467
+#: ../cli.py:2079
#, python-format
msgid ""
"\n"
"\n"
"%s: %s option requires an argument"
-msgstr ""
-"\n"
-"\n"
-"%s: l'opció %s necessita un argument"
+msgstr "\n\n%s: l'opció %s necessita un argument"
-#: ../cli.py:1521
+#: ../cli.py:2147
msgid "--color takes one of: auto, always, never"
msgstr "--color pren un valor d'entre: auto, always, never"
#. We have a relative installroot ... haha
-#: ../cli.py:1596
+#: ../cli.py:2218
#, python-format
msgid "--installroot must be an absolute path: %s"
msgstr ""
-#: ../cli.py:1642
+#: ../cli.py:2272
msgid "show this help message and exit"
msgstr "mostra el missatge d'ajuda i surt"
-#: ../cli.py:1646
+#: ../cli.py:2276
msgid "be tolerant of errors"
msgstr "sigues tolerant amb els errors"
-#: ../cli.py:1649
+#: ../cli.py:2279
msgid "run entirely from system cache, don't update cache"
msgstr ""
-#: ../cli.py:1652
+#: ../cli.py:2282
msgid "config file location"
msgstr "ubicació del fitxer de configuració"
-#: ../cli.py:1655
+#: ../cli.py:2285
msgid "maximum command wait time"
msgstr "temps màxim d'espera d'ordres"
-#: ../cli.py:1657
+#: ../cli.py:2287
msgid "debugging output level"
msgstr "nivell de sortida de depuració"
-#: ../cli.py:1661
+#: ../cli.py:2291
msgid "show duplicates, in repos, in list/search commands"
msgstr "mostra duplicats, en repositoris, en les ordres per llistar i cercar"
-#: ../cli.py:1663
+#: ../cli.py:2296
msgid "error output level"
msgstr "nivell de sortida d'error"
-#: ../cli.py:1666
+#: ../cli.py:2299
msgid "debugging output level for rpm"
msgstr ""
-#: ../cli.py:1669
+#: ../cli.py:2302
msgid "quiet operation"
msgstr "operació silenciosa"
-#: ../cli.py:1671
+#: ../cli.py:2304
msgid "verbose operation"
msgstr "operació descriptiva"
-#: ../cli.py:1673
+#: ../cli.py:2306
msgid "answer yes for all questions"
msgstr "respon sí a totes les preguntes"
-#: ../cli.py:1675
+#: ../cli.py:2308
+msgid "answer no for all questions"
+msgstr ""
+
+#: ../cli.py:2312
msgid "show Yum version and exit"
msgstr "mostra la versió del Yum i surt"
-#: ../cli.py:1676
+#: ../cli.py:2313
msgid "set install root"
msgstr "estableix l'arrel de la instal·lació"
-#: ../cli.py:1680
+#: ../cli.py:2317
msgid "enable one or more repositories (wildcards allowed)"
-msgstr ""
-"habilita un o més repositoris (es permeten caràcters de reemplaçament)"
+msgstr "habilita un o més repositoris (es permeten caràcters de reemplaçament)"
-#: ../cli.py:1684
+#: ../cli.py:2321
msgid "disable one or more repositories (wildcards allowed)"
-msgstr ""
-"deshabilita un o més repositoris (es permeten caràcters de reemplaçament)"
+msgstr "deshabilita un o més repositoris (es permeten caràcters de reemplaçament)"
-#: ../cli.py:1687
+#: ../cli.py:2324
msgid "exclude package(s) by name or glob"
msgstr "exclou els paquets per nom o expressió regular del glob"
-#: ../cli.py:1689
+#: ../cli.py:2326
msgid "disable exclude from main, for a repo or for everything"
msgstr "inhabilita l'exclusió des de l'inici, per a un repositori o per a tot"
-#: ../cli.py:1692
+#: ../cli.py:2329
msgid "enable obsoletes processing during updates"
msgstr "habilita el processament d'obsolets durant les actualitzacions"
-#: ../cli.py:1694
+#: ../cli.py:2331
msgid "disable Yum plugins"
msgstr "inhabilita els connectors de Yum"
-#: ../cli.py:1696
+#: ../cli.py:2333
msgid "disable gpg signature checking"
msgstr "inhabilita la comprobació de signatures gpg"
-#: ../cli.py:1698
+#: ../cli.py:2335
msgid "disable plugins by name"
msgstr "inhabilita els connectors pel seu nom"
-#: ../cli.py:1701
+#: ../cli.py:2338
msgid "enable plugins by name"
msgstr "habilita els connectors pel seu nom"
-#: ../cli.py:1704
+#: ../cli.py:2341
msgid "skip packages with depsolving problems"
msgstr "omet paquets amb problemes de resolució de dependències"
-#: ../cli.py:1706
+#: ../cli.py:2343
msgid "control whether color is used"
msgstr "controla sempre que s'usi color"
-#: ../cli.py:1708
+#: ../cli.py:2345
msgid "set value of $releasever in yum config and repo files"
msgstr ""
-#: ../cli.py:1710
+#: ../cli.py:2347
+msgid "don't update, just download"
+msgstr ""
+
+#: ../cli.py:2349
+msgid "specifies an alternate directory to store packages"
+msgstr ""
+
+#: ../cli.py:2351
msgid "set arbitrary config and repo options"
msgstr ""
-#: ../output.py:307
+#: ../output.py:458
msgid "Jan"
msgstr "Gen"
-#: ../output.py:307
+#: ../output.py:458
msgid "Feb"
msgstr "Feb"
-#: ../output.py:307
+#: ../output.py:458
msgid "Mar"
msgstr "Mar"
-#: ../output.py:307
+#: ../output.py:458
msgid "Apr"
msgstr "Abr"
-#: ../output.py:307
+#: ../output.py:458
msgid "May"
msgstr "Mai"
-#: ../output.py:307
+#: ../output.py:458
msgid "Jun"
msgstr "Jun"
-#: ../output.py:308
+#: ../output.py:459
msgid "Jul"
msgstr "Jul"
-#: ../output.py:308
+#: ../output.py:459
msgid "Aug"
msgstr "Ago"
-#: ../output.py:308
+#: ../output.py:459
msgid "Sep"
msgstr "Set"
-#: ../output.py:308
+#: ../output.py:459
msgid "Oct"
msgstr "Oct"
-#: ../output.py:308
+#: ../output.py:459
msgid "Nov"
msgstr "Nov"
-#: ../output.py:308
+#: ../output.py:459
msgid "Dec"
msgstr "Des"
-#: ../output.py:318
+#: ../output.py:473
msgid "Trying other mirror."
msgstr "S'està intentant un altre servidor rèplica."
-#: ../output.py:581
+#: ../output.py:816
#, python-format
msgid "Name : %s%s%s"
msgstr ""
-#: ../output.py:582
+#: ../output.py:817
#, python-format
msgid "Arch : %s"
msgstr ""
-#: ../output.py:584
+#: ../output.py:819
#, python-format
msgid "Epoch : %s"
msgstr ""
-#: ../output.py:585
+#: ../output.py:820
#, python-format
msgid "Version : %s"
msgstr ""
-#: ../output.py:586
+#: ../output.py:821
#, python-format
msgid "Release : %s"
msgstr ""
-#: ../output.py:587
+#: ../output.py:822
#, python-format
msgid "Size : %s"
msgstr ""
-#: ../output.py:588 ../output.py:900
+#: ../output.py:823 ../output.py:1329
#, python-format
msgid "Repo : %s"
msgstr "Repo : %s"
-#: ../output.py:590
+#: ../output.py:825
#, python-format
msgid "From repo : %s"
msgstr ""
-#: ../output.py:592
+#: ../output.py:827
#, python-format
msgid "Committer : %s"
msgstr ""
-#: ../output.py:593
+#: ../output.py:828
#, python-format
msgid "Committime : %s"
msgstr ""
-#: ../output.py:594
+#: ../output.py:829
#, python-format
msgid "Buildtime : %s"
msgstr ""
-#: ../output.py:596
+#: ../output.py:831
#, python-format
msgid "Install time: %s"
msgstr ""
-#: ../output.py:604
+#: ../output.py:839
#, python-format
msgid "Installed by: %s"
msgstr ""
-#: ../output.py:611
+#: ../output.py:846
#, python-format
msgid "Changed by : %s"
msgstr ""
-#: ../output.py:612
+#: ../output.py:847
msgid "Summary : "
msgstr ""
-#: ../output.py:614 ../output.py:913
+#: ../output.py:849 ../output.py:1345
#, python-format
msgid "URL : %s"
msgstr "URL : %s"
-#: ../output.py:615
+#: ../output.py:850
msgid "License : "
msgstr ""
-#: ../output.py:616 ../output.py:910
+#: ../output.py:851 ../output.py:1342
msgid "Description : "
msgstr "Descripció : "
-#: ../output.py:684
+#: ../output.py:969
msgid "y"
msgstr "s"
-#: ../output.py:684
+#: ../output.py:969
msgid "yes"
msgstr "sí"
-#: ../output.py:685
+#: ../output.py:970
msgid "n"
msgstr "n"
-#: ../output.py:685
+#: ../output.py:970
msgid "no"
msgstr "no"
-#: ../output.py:689
+#: ../output.py:974
msgid "Is this ok [y/N]: "
msgstr "És correcte [s/N]: "
-#: ../output.py:777
+#: ../output.py:1097
#, python-format
msgid ""
"\n"
"Group: %s"
-msgstr ""
-"\n"
-"Grup: %s"
+msgstr "\nGrup: %s"
-#: ../output.py:781
+#: ../output.py:1101
#, python-format
msgid " Group-Id: %s"
msgstr " Id de Grup: %s"
-#: ../output.py:786
+#: ../output.py:1122 ../output.py:1169
#, python-format
msgid " Description: %s"
msgstr " Descripció: %s"
-#: ../output.py:788
+#: ../output.py:1124
#, python-format
msgid " Language: %s"
msgstr ""
-#: ../output.py:790
+#: ../output.py:1126
msgid " Mandatory Packages:"
msgstr " Paquets obligatoris:"
-#: ../output.py:791
+#: ../output.py:1127
msgid " Default Packages:"
msgstr " Paquets per defecte:"
-#: ../output.py:792
+#: ../output.py:1128
msgid " Optional Packages:"
msgstr " Paquets opcionals:"
-#: ../output.py:793
+#: ../output.py:1129
msgid " Conditional Packages:"
msgstr " Paquets condicionals:"
-#: ../output.py:814
+#: ../output.py:1147
+msgid " Installed Packages:"
+msgstr ""
+
+#: ../output.py:1157
+#, python-format
+msgid ""
+"\n"
+"Environment Group: %s"
+msgstr ""
+
+#: ../output.py:1158
+#, python-format
+msgid " Environment-Id: %s"
+msgstr ""
+
+#: ../output.py:1191
+msgid " Mandatory Groups:"
+msgstr ""
+
+#: ../output.py:1192
+msgid " Optional Groups:"
+msgstr ""
+
+#: ../output.py:1205
+msgid " Installed Groups:"
+msgstr ""
+
+#: ../output.py:1217
#, python-format
msgid "package: %s"
msgstr "paquet: %s"
-#: ../output.py:816
+#: ../output.py:1219
msgid " No dependencies for this package"
msgstr " No hi ha dependències per a aquest paquet"
-#: ../output.py:821
+#: ../output.py:1224
#, python-format
msgid " dependency: %s"
msgstr " dependència: %s"
-#: ../output.py:823
+#: ../output.py:1226
msgid " Unsatisfied dependency"
msgstr " Dependència insatisfeta"
-#: ../output.py:901
+#: ../output.py:1337
msgid "Matched from:"
msgstr "Coincidències amb:"
-#: ../output.py:916
+#: ../output.py:1348
#, python-format
msgid "License : %s"
msgstr "Llicència : %s"
-#: ../output.py:919
+#: ../output.py:1351
#, python-format
msgid "Filename : %s"
msgstr "Fitxer : %s"
-#: ../output.py:923
+#: ../output.py:1360
+msgid "Provides : "
+msgstr ""
+
+#: ../output.py:1363
msgid "Other : "
msgstr "Altre : "
-#: ../output.py:966
+#: ../output.py:1426
msgid "There was an error calculating total download size"
msgstr "S'ha produït un error en calcular la mida total de la descàrrega"
-#: ../output.py:971
+#: ../output.py:1431
#, python-format
msgid "Total size: %s"
msgstr "Mida total: %s"
-#: ../output.py:974
+#: ../output.py:1433
#, python-format
msgid "Total download size: %s"
msgstr "Mida total de la descàrrega: %s"
-#: ../output.py:978 ../output.py:998
+#: ../output.py:1436 ../output.py:1459 ../output.py:1463
#, python-format
msgid "Installed size: %s"
msgstr ""
-#: ../output.py:994
+#: ../output.py:1454
msgid "There was an error calculating installed size"
msgstr ""
-#: ../output.py:1039
+#: ../output.py:1504
msgid "Reinstalling"
msgstr "Tornant a instal·lar"
-#: ../output.py:1040
+#: ../output.py:1505
msgid "Downgrading"
msgstr "Desfent l'actualització"
-#: ../output.py:1041
+#: ../output.py:1506
msgid "Installing for dependencies"
msgstr "S'està instal·lant per dependències"
-#: ../output.py:1042
+#: ../output.py:1507
msgid "Updating for dependencies"
msgstr "S'està actualitzant degut a les dependències"
-#: ../output.py:1043
+#: ../output.py:1508
msgid "Removing for dependencies"
msgstr "S'està suprimint degut a les dependències"
-#: ../output.py:1050 ../output.py:1171
+#: ../output.py:1515 ../output.py:1576 ../output.py:1672
msgid "Skipped (dependency problems)"
msgstr "Ignorat degut a problemes de dependències:"
-#: ../output.py:1052 ../output.py:1687
+#: ../output.py:1517 ../output.py:1577 ../output.py:2223
msgid "Not installed"
msgstr ""
-#: ../output.py:1053
+#: ../output.py:1518 ../output.py:1578
msgid "Not available"
msgstr ""
-#: ../output.py:1075 ../output.py:2024
+#: ../output.py:1540 ../output.py:1588 ../output.py:1604 ../output.py:2581
msgid "Package"
-msgstr "Paquet"
+msgid_plural "Packages"
+msgstr[0] ""
+msgstr[1] "Paquet"
-#: ../output.py:1075
+#: ../output.py:1540
msgid "Arch"
msgstr "Arq"
-#: ../output.py:1076
+#: ../output.py:1541
msgid "Version"
msgstr "Versió"
-#: ../output.py:1076
+#: ../output.py:1541
msgid "Repository"
msgstr "Repositori"
-#: ../output.py:1077
+#: ../output.py:1542
msgid "Size"
msgstr "Mida"
-#: ../output.py:1089
+#: ../output.py:1554
#, python-format
msgid " replacing %s%s%s.%s %s\n"
msgstr ""
-#: ../output.py:1098
+#: ../output.py:1563
#, python-format
msgid ""
"\n"
"Transaction Summary\n"
"%s\n"
-msgstr ""
-"\n"
-"Resum de la transacció\n"
-"%s\n"
+msgstr "\nResum de la transacció\n%s\n"
-#: ../output.py:1109
-#, python-format
-msgid "Install %5.5s Package(s)\n"
+#: ../output.py:1568 ../output.py:2376 ../output.py:2377
+msgid "Install"
msgstr ""
-#: ../output.py:1113
-#, python-format
-msgid "Upgrade %5.5s Package(s)\n"
+#: ../output.py:1570
+msgid "Upgrade"
msgstr ""
-#: ../output.py:1117
-#, python-format
-msgid "Remove %5.5s Package(s)\n"
+#: ../output.py:1572
+msgid "Remove"
msgstr ""
-#: ../output.py:1121
-#, python-format
-msgid "Reinstall %5.5s Package(s)\n"
+#: ../output.py:1574 ../output.py:2382
+msgid "Reinstall"
msgstr ""
-#: ../output.py:1125
-#, python-format
-msgid "Downgrade %5.5s Package(s)\n"
+#: ../output.py:1575 ../output.py:2383
+msgid "Downgrade"
msgstr ""
-#: ../output.py:1165
+#: ../output.py:1606
+msgid "Dependent package"
+msgid_plural "Dependent packages"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../output.py:1666
msgid "Removed"
msgstr "Suprimit"
-#: ../output.py:1166
+#: ../output.py:1667
msgid "Dependency Removed"
msgstr "Dependència suprimida"
-#: ../output.py:1168
+#: ../output.py:1669
msgid "Dependency Installed"
msgstr "Dependència instal·lada"
-#: ../output.py:1170
+#: ../output.py:1671
msgid "Dependency Updated"
msgstr "Dependència actualitzada"
-#: ../output.py:1172
+#: ../output.py:1673
msgid "Replaced"
msgstr "Reemplaçat"
-#: ../output.py:1173
+#: ../output.py:1674
msgid "Failed"
msgstr "Ha fallat"
#. Delta between C-c's so we treat as exit
-#: ../output.py:1260
+#: ../output.py:1764
msgid "two"
msgstr "dos"
#. For translators: This is output like:
#. Current download cancelled, interrupt (ctrl-c) again within two seconds
#. to exit.
-#. Where "interupt (ctrl-c) again" and "two" are highlighted.
-#: ../output.py:1271
+#. Where "interrupt (ctrl-c) again" and "two" are highlighted.
+#: ../output.py:1775
#, python-format
msgid ""
"\n"
" Current download cancelled, %sinterrupt (ctrl-c) again%s within %s%s%s seconds\n"
"to exit.\n"
-msgstr ""
-"\n"
-" S'ha cancel·lat la descàrrega actual, %sinterromp (crtl-c) de nou%s en %s%s%s segons\n"
-"per a sortir.\n"
+msgstr "\n S'ha cancel·lat la descàrrega actual, %sinterromp (crtl-c) de nou%s en %s%s%s segons\nper a sortir.\n"
-#: ../output.py:1282
+#: ../output.py:1786
msgid "user interrupt"
msgstr "interrupció de l'usuari"
-#: ../output.py:1300
+#: ../output.py:1812
msgid "Total"
msgstr "Total"
-#: ../output.py:1322
+#: ../output.py:1834
msgid "I"
msgstr ""
-#: ../output.py:1323
+#: ../output.py:1835
msgid "O"
msgstr ""
-#: ../output.py:1324
+#: ../output.py:1836
msgid "E"
msgstr ""
-#: ../output.py:1325
+#: ../output.py:1837
msgid "R"
msgstr ""
-#: ../output.py:1326
+#: ../output.py:1838
msgid "D"
msgstr ""
-#: ../output.py:1327
+#: ../output.py:1839
msgid "U"
msgstr ""
-#: ../output.py:1341
+#: ../output.py:1853
msgid "<unset>"
msgstr ""
-#: ../output.py:1342
+#: ../output.py:1854
msgid "System"
msgstr ""
-#: ../output.py:1411
+#: ../output.py:1923
#, python-format
msgid "Skipping merged transaction %d to %d, as it overlaps"
msgstr ""
-#: ../output.py:1421 ../output.py:1592
+#: ../output.py:1933 ../output.py:2125
msgid "No transactions"
msgstr ""
-#: ../output.py:1446 ../output.py:2013
+#: ../output.py:1958 ../output.py:2570 ../output.py:2660
msgid "Bad transaction IDs, or package(s), given"
msgstr ""
-#: ../output.py:1484
+#: ../output.py:2007
msgid "Command line"
msgstr ""
-#: ../output.py:1486 ../output.py:1908
+#: ../output.py:2009 ../output.py:2458
msgid "Login user"
msgstr ""
#. REALLY Needs to use columns!
-#: ../output.py:1487 ../output.py:2022
+#: ../output.py:2010 ../output.py:2579
msgid "ID"
msgstr ""
-#: ../output.py:1489
+#: ../output.py:2012
msgid "Date and time"
msgstr ""
-#: ../output.py:1490 ../output.py:1910 ../output.py:2023
+#: ../output.py:2013 ../output.py:2460 ../output.py:2580
msgid "Action(s)"
msgstr ""
-#: ../output.py:1491 ../output.py:1911
+#: ../output.py:2014 ../output.py:2461
msgid "Altered"
msgstr ""
-#: ../output.py:1538
+#: ../output.py:2061
msgid "No transaction ID given"
msgstr ""
-#: ../output.py:1564 ../output.py:1972
+#: ../output.py:2087 ../output.py:2526
msgid "Bad transaction ID given"
msgstr ""
-#: ../output.py:1569
+#: ../output.py:2092
msgid "Not found given transaction ID"
msgstr ""
-#: ../output.py:1577
+#: ../output.py:2100
msgid "Found more than one transaction ID!"
msgstr ""
-#: ../output.py:1618 ../output.py:1980
+#: ../output.py:2151 ../output.py:2534
msgid "No transaction ID, or package, given"
msgstr ""
-#: ../output.py:1686 ../output.py:1845
+#: ../output.py:2222 ../output.py:2384
msgid "Downgraded"
msgstr ""
-#: ../output.py:1688
+#: ../output.py:2224
msgid "Older"
msgstr ""
-#: ../output.py:1688
+#: ../output.py:2224
msgid "Newer"
msgstr ""
-#: ../output.py:1724 ../output.py:1726
+#: ../output.py:2261 ../output.py:2263 ../output.py:2681
msgid "Transaction ID :"
msgstr ""
-#: ../output.py:1728
+#: ../output.py:2265 ../output.py:2683
msgid "Begin time :"
msgstr ""
-#: ../output.py:1731 ../output.py:1733
+#: ../output.py:2268 ../output.py:2270
msgid "Begin rpmdb :"
msgstr ""
-#: ../output.py:1749
+#: ../output.py:2286
#, python-format
msgid "(%u seconds)"
msgstr ""
-#: ../output.py:1751
+#: ../output.py:2288
#, python-format
msgid "(%u minutes)"
msgstr ""
-#: ../output.py:1753
+#: ../output.py:2290
#, python-format
msgid "(%u hours)"
msgstr ""
-#: ../output.py:1755
+#: ../output.py:2292
#, python-format
msgid "(%u days)"
msgstr ""
-#: ../output.py:1756
+#: ../output.py:2293
msgid "End time :"
msgstr ""
-#: ../output.py:1759 ../output.py:1761
+#: ../output.py:2296 ../output.py:2298
msgid "End rpmdb :"
msgstr ""
-#: ../output.py:1764 ../output.py:1766
+#: ../output.py:2301 ../output.py:2303
msgid "User :"
msgstr ""
-#: ../output.py:1770 ../output.py:1773 ../output.py:1775 ../output.py:1777
-#: ../output.py:1779
+#: ../output.py:2307 ../output.py:2310 ../output.py:2312 ../output.py:2314
+#: ../output.py:2316
msgid "Return-Code :"
msgstr ""
-#: ../output.py:1770 ../output.py:1775
+#: ../output.py:2307 ../output.py:2312
msgid "Aborted"
msgstr ""
-#: ../output.py:1773
+#: ../output.py:2310
msgid "Failures:"
msgstr ""
-#: ../output.py:1777
+#: ../output.py:2314
msgid "Failure:"
msgstr ""
-#: ../output.py:1779
+#: ../output.py:2316
msgid "Success"
msgstr ""
-#: ../output.py:1784 ../output.py:1786
+#: ../output.py:2321 ../output.py:2323 ../output.py:2712
msgid "Command Line :"
msgstr ""
-#: ../output.py:1795
+#: ../output.py:2332
#, python-format
msgid "Additional non-default information stored: %d"
msgstr ""
#. This is _possible_, but not common
-#: ../output.py:1800
+#: ../output.py:2337
msgid "Transaction performed with:"
msgstr ""
-#: ../output.py:1804
+#: ../output.py:2341
msgid "Packages Altered:"
msgstr ""
-#: ../output.py:1808
+#: ../output.py:2345
msgid "Packages Skipped:"
msgstr ""
-#: ../output.py:1814
+#: ../output.py:2353
msgid "Rpmdb Problems:"
msgstr ""
-#: ../output.py:1825
+#: ../output.py:2364
msgid "Scriptlet output:"
msgstr ""
-#: ../output.py:1831
+#: ../output.py:2370
msgid "Errors:"
msgstr ""
-#: ../output.py:1837 ../output.py:1838
-msgid "Install"
-msgstr ""
-
-#: ../output.py:1839
+#: ../output.py:2378
msgid "Dep-Install"
msgstr ""
-#: ../output.py:1841
+#: ../output.py:2380
msgid "Obsoleting"
msgstr ""
-#: ../output.py:1842
+#: ../output.py:2381
msgid "Erase"
msgstr ""
-#: ../output.py:1843
-msgid "Reinstall"
-msgstr ""
-
-#: ../output.py:1844
-msgid "Downgrade"
-msgstr ""
-
-#: ../output.py:1846
+#: ../output.py:2385
msgid "Update"
msgstr ""
-#: ../output.py:1909
+#: ../output.py:2459
msgid "Time"
msgstr ""
-#: ../output.py:1935
+#: ../output.py:2485
msgid "Last day"
msgstr ""
-#: ../output.py:1936
+#: ../output.py:2486
msgid "Last week"
msgstr ""
-#: ../output.py:1937
+#: ../output.py:2487
msgid "Last 2 weeks"
msgstr ""
#. US default :p
-#: ../output.py:1938
+#: ../output.py:2488
msgid "Last 3 months"
msgstr ""
-#: ../output.py:1939
+#: ../output.py:2489
msgid "Last 6 months"
msgstr ""
-#: ../output.py:1940
+#: ../output.py:2490
msgid "Last year"
msgstr ""
-#: ../output.py:1941
+#: ../output.py:2491
msgid "Over a year ago"
msgstr ""
-#: ../output.py:1984
+#: ../output.py:2538
#, python-format
msgid "No Transaction %s found"
msgstr ""
-#: ../output.py:1990
+#: ../output.py:2544
msgid "Transaction ID:"
msgstr ""
-#: ../output.py:1991
+#: ../output.py:2545
msgid "Available additional history information:"
msgstr ""
-#: ../output.py:2003
+#: ../output.py:2558
#, python-format
msgid "%s: No additional data found by this name"
msgstr ""
-#: ../output.py:2106
+#: ../output.py:2684
+msgid "Package :"
+msgstr ""
+
+#: ../output.py:2685
+msgid "State :"
+msgstr ""
+
+#: ../output.py:2688
+msgid "Size :"
+msgstr ""
+
+#: ../output.py:2690
+msgid "Build host :"
+msgstr ""
+
+#: ../output.py:2693
+msgid "Build time :"
+msgstr ""
+
+#: ../output.py:2695
+msgid "Packager :"
+msgstr ""
+
+#: ../output.py:2697
+msgid "Vendor :"
+msgstr ""
+
+#: ../output.py:2699
+msgid "License :"
+msgstr ""
+
+#: ../output.py:2701
+msgid "URL :"
+msgstr ""
+
+#: ../output.py:2703
+msgid "Source RPM :"
+msgstr ""
+
+#: ../output.py:2706
+msgid "Commit Time :"
+msgstr ""
+
+#: ../output.py:2708
+msgid "Committer :"
+msgstr ""
+
+#: ../output.py:2710
+msgid "Reason :"
+msgstr ""
+
+#: ../output.py:2714
+msgid "From repo :"
+msgstr ""
+
+#: ../output.py:2718
+msgid "Installed by :"
+msgstr ""
+
+#: ../output.py:2722
+msgid "Changed by :"
+msgstr ""
+
+#: ../output.py:2767
msgid "installed"
msgstr "instal·lat"
-#: ../output.py:2107
+#: ../output.py:2768
msgid "an update"
msgstr ""
-#: ../output.py:2108
+#: ../output.py:2769
msgid "erased"
msgstr "suprimit"
-#: ../output.py:2109
+#: ../output.py:2770
msgid "reinstalled"
msgstr ""
-#: ../output.py:2110
+#: ../output.py:2771
msgid "a downgrade"
msgstr ""
-#: ../output.py:2111
+#: ../output.py:2772
msgid "obsoleting"
msgstr ""
-#: ../output.py:2112
+#: ../output.py:2773
msgid "updated"
msgstr "actualitzat"
-#: ../output.py:2113
+#: ../output.py:2774
msgid "obsoleted"
msgstr "obsolet"
-#: ../output.py:2117
+#: ../output.py:2778
#, python-format
msgid "---> Package %s.%s %s:%s-%s will be %s"
msgstr ""
-#: ../output.py:2124
+#: ../output.py:2789
msgid "--> Running transaction check"
msgstr "--> S'està executant la transacció de prova"
-#: ../output.py:2129
+#: ../output.py:2795
msgid "--> Restarting Dependency Resolution with new changes."
-msgstr ""
-"--> Tornant a calcular la resolució de dependències amb els nous canvis."
+msgstr "--> Tornant a calcular la resolució de dependències amb els nous canvis."
-#: ../output.py:2134
+#: ../output.py:2801
msgid "--> Finished Dependency Resolution"
msgstr "--> Ha finalitzat la resolució de dependències"
-#: ../output.py:2139 ../output.py:2144
+#: ../output.py:2814 ../output.py:2827
#, python-format
msgid "--> Processing Dependency: %s for package: %s"
msgstr "--> S'està processant la dependència %s per al paquet: %s"
-#: ../output.py:2149
+#: ../output.py:2841
#, python-format
-msgid "---> Keeping package: %s"
+msgid "---> Keeping package: %s due to %s"
msgstr ""
-#: ../output.py:2152
+#: ../output.py:2850
#, python-format
msgid "--> Unresolved Dependency: %s"
msgstr "--> Dependència no resolta: %s"
-#: ../output.py:2163
+#: ../output.py:2867
#, python-format
msgid "Package: %s"
msgstr ""
-#: ../output.py:2165
+#: ../output.py:2869
#, python-format
msgid ""
"\n"
" Requires: %s"
msgstr ""
-#: ../output.py:2174
+#: ../output.py:2878
#, python-format
msgid ""
"\n"
" %s: %s (%s)"
msgstr ""
-#: ../output.py:2179
+#: ../output.py:2883
#, python-format
msgid ""
"\n"
" %s"
msgstr ""
-#: ../output.py:2181
+#: ../output.py:2885
msgid ""
"\n"
" Not found"
msgstr ""
#. These should be the only three things we care about:
-#: ../output.py:2196
+#: ../output.py:2900
msgid "Updated By"
msgstr ""
-#: ../output.py:2197
+#: ../output.py:2901
msgid "Downgraded By"
msgstr ""
-#: ../output.py:2198
+#: ../output.py:2902
msgid "Obsoleted By"
msgstr ""
-#: ../output.py:2216
+#: ../output.py:2920
msgid "Available"
msgstr ""
-#: ../output.py:2243 ../output.py:2248
+#: ../output.py:2955 ../output.py:2968
#, python-format
msgid "--> Processing Conflict: %s conflicts %s"
msgstr "--> S'està processant el conflicte: %s té un conflicte amb %s"
-#: ../output.py:2252
+#: ../output.py:2974
msgid "--> Populating transaction set with selected packages. Please wait."
-msgstr ""
-"--> S'està poblant la transacció amb els paquets sel·leccionats. Si us plau,"
-" espereu."
+msgstr "--> S'està poblant la transacció amb els paquets sel·leccionats. Si us plau, espereu."
-#: ../output.py:2256
+#: ../output.py:2983
#, python-format
msgid "---> Downloading header for %s to pack into transaction set."
+msgstr "---> S'està baixant la capçalera per a %s per a empaquetar dins de la transacció de prova."
+
+#. self.event(txmbr.name, count, len(base.tsInfo), count, )
+#. (te_current*100L)/te_total
+#: ../output.py:3248
+msgid "Verifying"
msgstr ""
-"---> S'està baixant la capçalera per a %s per a empaquetar dins de la "
-"transacció de prova."
-#: ../utils.py:99
+#: ../utils.py:123
msgid "Running"
msgstr "S'està executant"
-#: ../utils.py:100
+#: ../utils.py:124
msgid "Sleeping"
msgstr "Està dormint"
-#: ../utils.py:101
+#: ../utils.py:125
msgid "Uninterruptible"
msgstr ""
-#: ../utils.py:102
+#: ../utils.py:126
msgid "Zombie"
msgstr "Zombi"
-#: ../utils.py:103
+#: ../utils.py:127
msgid "Traced/Stopped"
msgstr "Traçat/aturat"
-#: ../utils.py:104 ../yumcommands.py:994
+#: ../utils.py:128 ../yumcommands.py:2193
msgid "Unknown"
msgstr "Desconegut"
-#: ../utils.py:115
+#: ../utils.py:153
msgid " The other application is: PackageKit"
msgstr " L'altre aplicatiu és: PackageKit"
-#: ../utils.py:117
+#: ../utils.py:155
#, python-format
msgid " The other application is: %s"
msgstr " L'altre aplicatiu és: %s"
-#: ../utils.py:120
+#: ../utils.py:158
#, python-format
msgid " Memory : %5s RSS (%5sB VSZ)"
msgstr " Memòria : %5s RSS (%5sB VSZ)"
-#: ../utils.py:125
+#: ../utils.py:163
#, python-format
msgid " Started: %s - %s ago"
msgstr " Iniciat: fa %s-%s"
-#: ../utils.py:127
+#: ../utils.py:165
#, python-format
msgid " State : %s, pid: %d"
msgstr " Estat : %s, pid: %d"
-#: ../utils.py:170 ../yummain.py:43
+#: ../utils.py:194 ../yummain.py:43
msgid ""
"\n"
"\n"
"Exiting on user cancel"
-msgstr ""
-"\n"
-"\n"
-"S'està sortint per la cancel·lació de l'usuari"
+msgstr "\n\nS'està sortint per la cancel·lació de l'usuari"
-#: ../utils.py:176 ../yummain.py:49
+#: ../utils.py:206 ../yummain.py:49
msgid ""
"\n"
"\n"
"Exiting on Broken Pipe"
-msgstr ""
-"\n"
-"\n"
-"S'està sortint en trobar la canonada trencada"
+msgstr "\n\nS'està sortint en trobar la canonada trencada"
-#: ../utils.py:178 ../yummain.py:51
+#: ../utils.py:208 ../yummain.py:51
#, python-format
msgid ""
"\n"
"\n"
"%s"
-msgstr ""
-"\n"
-"\n"
-"%s"
-
-#: ../utils.py:228 ../yummain.py:123
-msgid ""
-"Another app is currently holding the yum lock; exiting as configured by "
-"exit_on_lock"
-msgstr ""
+msgstr "\n\n%s"
-#: ../utils.py:287
+#: ../utils.py:326
#, python-format
msgid "PluginExit Error: %s"
msgstr ""
-#: ../utils.py:290
+#: ../utils.py:329
#, python-format
msgid "Yum Error: %s"
msgstr ""
-#: ../utils.py:342 ../yummain.py:150 ../yummain.py:189
+#: ../utils.py:387 ../yummain.py:147 ../yummain.py:186
#, python-format
msgid "Error: %s"
msgstr "Error: %s"
-#: ../utils.py:346 ../yummain.py:194
+#: ../utils.py:391 ../yummain.py:191
msgid " You could try using --skip-broken to work around the problem"
msgstr " Hauríeu de provar utilitzant --skip-broken per evitar el problema"
-#: ../utils.py:348 ../yummain.py:87
+#: ../utils.py:393 ../yummain.py:87
msgid " You could try running: rpm -Va --nofiles --nodigest"
msgstr ""
-#: ../utils.py:355 ../yummain.py:160 ../yummain.py:202
+#: ../utils.py:400 ../yummain.py:157 ../yummain.py:199
#, python-format
msgid "Unknown Error(s): Exit Code: %d:"
msgstr "Errors desconeguts: Codi de sortida: %d:"
-#: ../utils.py:361 ../yummain.py:208
+#: ../utils.py:406 ../yummain.py:205
msgid ""
"\n"
"Dependencies Resolved"
-msgstr ""
-"\n"
-"Dependències resoltes"
+msgstr "\nDependències resoltes"
-#: ../utils.py:376 ../yummain.py:234
+#: ../utils.py:422 ../yummain.py:237
msgid "Complete!"
msgstr "Completat!"
@@ -1511,7 +1650,7 @@ msgstr ""
msgid "You need to be root to perform this command."
msgstr "Heu de ser root per a executar aquesta ordre."
-#: ../yumcommands.py:59
+#: ../yumcommands.py:67
msgid ""
"\n"
"You have enabled checking of packages via GPG keys. This is a good thing. \n"
@@ -1526,587 +1665,650 @@ msgid ""
"will install it for you.\n"
"\n"
"For more information contact your distribution or package provider.\n"
-msgstr ""
-"\n"
-"Heu habilitat la comprovació de paquets utilitzant claus GPG. És una bona opció. \n"
-"No obstant, no teniu cap clau pública GPG instal·lada. Necessiteu baixar\n"
-"les claus per als paquets que desitgeu instal·lar i instal·lar-les.\n"
-"Podeu fer-ho executant l'ordre:\n"
-" rpm --import clau.pública.gpg\n"
-"\n"
-"\n"
-"També podeu especificar la url de la clau que voleu utilitzar\n"
-"per a un repositori en l'opció 'gpgkey' en la secció d'un repositori i yum \n"
-"la instal·larà per vosaltres.\n"
-"\n"
-"Per a més informació contacteu el vostre distribuïdor o proveïdor de paquets.\n"
+msgstr "\nHeu habilitat la comprovació de paquets utilitzant claus GPG. És una bona opció. \nNo obstant, no teniu cap clau pública GPG instal·lada. Necessiteu baixar\nles claus per als paquets que desitgeu instal·lar i instal·lar-les.\nPodeu fer-ho executant l'ordre:\n rpm --import clau.pública.gpg\n\n\nTambé podeu especificar la url de la clau que voleu utilitzar\nper a un repositori en l'opció 'gpgkey' en la secció d'un repositori i yum \nla instal·larà per vosaltres.\n\nPer a més informació contacteu el vostre distribuïdor o proveïdor de paquets.\n"
-#: ../yumcommands.py:74
+#: ../yumcommands.py:82
#, python-format
msgid "Problem