diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3320a46 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*~ +*.mo +urpm-tools.pot \ No newline at end of file diff --git a/docs/urpm-repodiff.1 b/docs/urpm-repodiff.1 index 3b3b02b..aa4c4ff 100644 --- a/docs/urpm-repodiff.1 +++ b/docs/urpm-repodiff.1 @@ -16,6 +16,8 @@ repositories. "New" repository or list of "new" repositories if several present. .IP "\fB\-\-quiet, -q\fP" Quiet mode: hide service messages. +.IP "\fB\-\-no-release, -r\fP" +Ignore release during package compare. .PP .SH "USUAL OUTPUT OPTIONS" .IP "\fB\-\-size, -s\fP" @@ -33,6 +35,15 @@ If \fB--output, -o\fP option is not present, page will be output to file 'repodi .SH "OUTPUT OPTION" .IP "\fB\-\-output, -o OUTPUT_FILE\fP" Change standart output to OUTPUT_FILE. +.SH "FILTER OPTION" +.IP "\fB\-\-show-new, -N\fP" +Show new packages. +.IP "\fB\-\-show-removed, -R\fP" +Show removed packages. +.IP "\fB\-\-show-updated, -U\fP" +Show updated packages. +.IP "\fB\-\-show-downgraded, -D\fP" +Show downgraded packages. .SH "EXAMPLES" .IP "Compare packages in two local repositories:" \fBurpm-repodiff --old /tmp/repo-old --new /tmp/repo-new\fP diff --git a/locale/ru/LC_MESSAGES/urpm-tools.po b/locale/ru/LC_MESSAGES/urpm-tools.po index 046ea84..67e0028 100644 --- a/locale/ru/LC_MESSAGES/urpm-tools.po +++ b/locale/ru/LC_MESSAGES/urpm-tools.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-21 16:34+0400\n" +"POT-Creation-Date: 2012-09-21 14:33+0400\n" "PO-Revision-Date: 2012-08-21 16:35+0300\n" "Last-Translator: Anton Kirilenko \n" "Language-Team: RUSSIAN\n" @@ -16,959 +16,304 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#. if not fatal_fails, do nothing. Caller have to deal with that himself -#. rpm return code is not 0 -#: urpm-reposync.py:64 -#: urpm-downloader.py:156 -#: urpm-downloader.py:546 -msgid "Error while calling command" -msgstr "Ошибка при выполнении команды" - -#: urpm-reposync.py:66 -#: urpm-downloader.py:158 -msgid "Error message: \n" -msgstr "Сообщение об ошибке: \n" - -#: urpm-reposync.py:74 -msgid "reposync is used to synchronize a set of packages on the local computer with the remote repository." -msgstr "Инструмент reposync используется для синхронизации установленных на компьютере пакетов с удаленным репозиторием." - -#: urpm-reposync.py:76 -#: urpm-downloader.py:104 -msgid "Use only selected URPM media" -msgstr "Использовать только указанные источники" - -#: urpm-reposync.py:77 -#: urpm-downloader.py:105 -msgid "Do not use selected URPM media" -msgstr "Не использовать указанные источники" - -#. arg_parser.add_argument('-x', '--exclude-packages', action='store',nargs = '+', help="Exclude package(s) by regex") -#: urpm-reposync.py:79 -#: urpm-downloader.py:102 -msgid "Verbose (print additional info)" -msgstr "Выводить при исполнении отладочную информацию" - -#: urpm-reposync.py:80 -msgid "Quiet operation. Senseless without --auto." -msgstr "Ничего не выводить на экран. Не используется без --auto." - -#: urpm-reposync.py:81 -msgid "Do not ask questions, just do it!" -msgstr "Выполнять все действия без вопросов" - -#: urpm-reposync.py:82 -msgid "Only print the list of actions to be done and do nothing more!" -msgstr "Только вывести список планируемых действий и выйти." - -#: urpm-reposync.py:83 -msgid "Only download the rpm files, but install or remove nothing." -msgstr "Только скачать пакеты, но ничего не устанавливать и не удалять." - -#. arg_parser.add_argument('-n', '--noremove', action='store_true', help=_("Do not remove packages at all. If some installed package prevent another package from beeing updated - do not update it.")) -#: urpm-reposync.py:85 -msgid "Remove all the packages which do not present in repository. By default, only some of them would be removed." -msgstr "Удалять все пакеты, которых нет в репозитории. По умолчанию инструмент пытается сохранить их, если возможно." - -#: urpm-reposync.py:86 -msgid "Download packages and check wether they can be installed to your system, but do not install them." -msgstr "Скачать пакеты и проверить, могут ли они быть установлены на текущую систему. Пакеты не будут установлены." - -#: urpm-reposync.py:87 -msgid "Do nothing with kernels." -msgstr "Ничего не делать с ядрами." - -#: urpm-reposync.py:88 -msgid "Run self-tests end exit." -msgstr "Запустить самопроверку." - -#: urpm-reposync.py:89 -msgid "Show detailed information about packages are going to be removed or installed (why does it have to be done)" -msgstr "Показывать детальную информацию о пакетах, которые будут удалены и установлены (будут объяснены решения по каждому пакету)." - -#: urpm-reposync.py:93 -msgid "It's senseless to use --quiet without --auto!" -msgstr "Использование --quiet без --auto лишено смысла!" - -#: urpm-reposync.py:305 -msgid "Loading the list of installed packages..." -msgstr "Загрузка списка установленных пакетов..." - -#: urpm-reposync.py:319 -msgid "Duplicating " -msgstr "Дублирующийся пакет " - -#: urpm-reposync.py:320 -msgid "Already found: " -msgstr "Уже найдено: " - -#. print synthesis_list -#: urpm-reposync.py:396 -msgid "Processing medium " -msgstr "Обработка источника " - -#: urpm-reposync.py:414 -#, python-format -msgid "Could not read synthesis file. (File %s not found)" -msgstr "Файл %s не найден. Невозможно обработать synthesis файл." - -#: urpm-reposync.py:484 -msgid "File can not be processed! Url: " -msgstr "Не удалось обработать файл! Url: " - -#: urpm-reposync.py:579 -#, python-format -msgid "Removing %s" -msgstr "Удаление %s" - -#: urpm-reposync.py:586 -msgid "urpm-reposync: error in package %s. Data: %(data)s" -msgstr "urpm-reposync: ошибка при работе с пакетом %s. Данные: %(data)s" - -#: urpm-reposync.py:683 -#, python-format -msgid "\tRequires %s, which will not be installed." -msgstr "\tТребует пакет %s, который не будет установлен." - -#: urpm-reposync.py:689 -#, python-format -msgid "\t%s conflicts with it" -msgstr "\t%s конфликтует с этим пакетом" - -#: urpm-reposync.py:694 -#, python-format -msgid "\tIt conflicts with %s" -msgstr "\tКонфликтует с %s" - -#: urpm-reposync.py:768 -msgid "Some packages can not be installed dew to unresolved dependencies: " -msgstr "Некоторые пакеты не могут быть установлены из-за неразрешенных зависимостей:" - -#: urpm-reposync.py:771 -msgid "Contact repository maintaiers and send them this information, please." -msgstr "Пожалуйста, отправьте разработчикам дистрибутива эту информацию." - -#: urpm-reposync.py:777 -msgid "Downloading files..." -msgstr "Скачивание файлов..." - -#: urpm-reposync.py:807 -msgid "Generating transaction..." -msgstr "Создание транзакции..." - -#: urpm-reposync.py:825 -msgid "Checking dependencies..." -msgstr "Проверка зависимостей..." - -#: urpm-reposync.py:830 -msgid "requires" -msgstr "требует" - -#: urpm-reposync.py:832 -msgid "conflicts with" -msgstr "конфликтует с" - -#: urpm-reposync.py:848 -#, python-format -msgid "Package %(name)s-%(ver)s-%(rel)s %(t)s %(namereq)s%(verreq)s" -msgstr "Пакет %(name)s-%(ver)s-%(rel)s %(t)s %(namereq)s%(verreq)s" - -#: urpm-reposync.py:854 -msgid "There are some unresolved dependencies: " -msgstr "Найдены неразрешенные зависимости: " - -#: urpm-reposync.py:857 -msgid "Packages can not be installed. Please, contact urpm-tools developers and provide this output." -msgstr "Пакеты не могут быть установлены. Пожалуйста, отправьте разработчику весь вывод программы." - -#: urpm-reposync.py:859 -msgid "No errors found in transaction" -msgstr "Ошибок не найдено" - -#: urpm-reposync.py:864 -msgid "Running transaction..." -msgstr "Запуск транзакции..." - -#: urpm-reposync.py:905 -msgid "WARNING: Some libraries are going to be removed because there are only the packages with the other architecture in the repository. Maybe you missed media with the correct architecture?" -msgstr "ПРЕДУПРЕЖДЕНИЕ: Некоторые библиотеки будут удалены, потому что в репозитории присутствуют только эти библиотеки с другой архитектурой. Может быть, нужно добавить источники с правильными архитектурами?" - -#: urpm-reposync.py:946 -#: urpm-reposync.py:981 -#: urpm-reposync.py:1003 -#: urpm-reposync.py:1016 -msgid "Package Name" -msgstr "Имя пакета" - -#: urpm-reposync.py:946 -#: urpm-reposync.py:1003 -#: urpm-reposync.py:1016 -msgid "Current Version" -msgstr "Текущая версия" - -#: urpm-reposync.py:946 -msgid "New Version" -msgstr "Новая версия" - -#: urpm-reposync.py:946 -#: urpm-reposync.py:981 -#: urpm-reposync.py:1003 -#: urpm-reposync.py:1016 -msgid "Arch" -msgstr "Архитектура" - -#: urpm-reposync.py:948 -msgid "medium" -msgstr "источник " - -#: urpm-reposync.py:970 -msgid "The following packages are going to be upgraded:" -msgstr "Следующие пакеты будут обновлены:" - -#: urpm-reposync.py:975 -msgid "The following packages are going to be downgraded:" -msgstr "Версии следующих пакетов будут понижены:" - -#: urpm-reposync.py:980 -msgid "Additional packages are going to be installed:" -msgstr "Дополнительные пакеты будут установлены:" - -#: urpm-reposync.py:981 -msgid "Version" -msgstr "Версия" - -#: urpm-reposync.py:997 -#, python-format -msgid "\tRequired by %s" -msgstr "\tТребуется для %s" - -#: urpm-reposync.py:1002 -msgid "The following packages are going to be removed:" -msgstr "Следующие пакеты будут удалены:" - -#: urpm-reposync.py:1015 -msgid "Packages which do not present in repositories, but do not have to be removed (will be saved):" -msgstr "Пакеты, которые отсутствуют в репозитории, но могут быть сохранены:" - -#: urpm-reposync.py:1022 -#, python-format -msgid "%d packages are going to be downloaded and installed." -msgstr "Пакетов будет скачано и установлено: %d." - -#: urpm-reposync.py:1023 -#, python-format -msgid "%d packages are going to be removed." -msgstr "Пакетов будет удалено: %d." - -#: urpm-reposync.py:1024 -#, python-format -msgid "%s will be downloaded." -msgstr "Данных будет скачано: %s." - -#: urpm-reposync.py:1080 -#, python-format -msgid "\tForced to be removed dew to \"%s\" policy." -msgstr "\tДолжен быть удален из-за правила \"%s\"." - -#: urpm-reposync.py:1108 -msgid "Nothing to do" -msgstr "В системе не требуются изменения" - -#: urpm-reposync.py:1121 -msgid "Do you want to proceed? (y/n): " -msgstr "Хотите продолжить? (д/н): " - -#: urpm-reposync.py:1126 -msgid "y" -msgstr "д" - -#: urpm-reposync.py:1126 -msgid "yes" -msgstr "да" - -#: urpm-reposync.py:1128 -msgid "n" -msgstr "н" - -#: urpm-reposync.py:1128 -msgid "no" -msgstr "нет" - -#: urpm-repograph.py:86 -msgid "Tool for generating dependency graph for REPOSITORY packages." -msgstr "Инструмент для создания графа зависимостей для пакетов из репозитория." - -#: urpm-repograph.py:90 -msgid "Search for cross-repository references in CROSS_REPO(s) repositories." -msgstr "Искать зывисимости между репозиториями в репозиториями CROSS_REPO" - -#: urpm-repograph.py:93 -msgid "Hide service messages. (About progress status etc.)" -msgstr "Не показывать служебные сообщения. (О прогрессе и т. д.)" - -#: urpm-repograph.py:95 -msgid "Show warnings. (About unprovided packages etc.)" -msgstr "Показывать предупреждения (О зависимостях, не предоставляемых ни одним пакетом из репозитория и т. д.)" - -#: urpm-repograph.py:98 -msgid "Process \"requires\" package dependencies. Used by default." -msgstr "Обрабатывать \"requires\" пакетные зависимости. Используется по умолчанию." - -#: urpm-repograph.py:100 -msgid "Process \"suggests\" package dependencies. If used without --requires then only suggests dependencies are processed." -msgstr "Обрабатывать \"suggests\" пакетные зависимости. Если используется без --requires, то будут обрабатываться только мягкие зависимости." - -#: urpm-repograph.py:103 -msgid "Process file dependencies." -msgstr "Обработка зависимостей по файлам..." - -#: urpm-repograph.py:105 -msgid "Show unprovided dependencies." -msgstr "Показать зависимости, не предоставленные ни одним пакетом из репозитория." - -#: urpm-repograph.py:109 -msgid "Search for packages, which are required by package PKG (PKG is a file name or package name)" -msgstr "Искать пакеты, которые нужны пакету PKG. (PKG - это имя пакета или файла)" - -#: urpm-repograph.py:111 -msgid "Search for packages, which requires package PKG (PKG is a file name or package name)" -msgstr "Искать пакеты, которым нужен пакет PKG. (PKG - это имя пакета или файла)" - -#: urpm-repograph.py:115 -msgid "Search for all simple loops of package dependecies." -msgstr "Поиск всех простых циклов в пакетных зависимостях." - -#: urpm-repograph.py:117 -msgid "Search for alternative packages providing the same feature." -msgstr "Поиск альтернативных пакетов, предоставляющих одну и ту же зависимость." - -#: urpm-repograph.py:119 -msgid "Search for all broken packages and anything beetween them" -msgstr "Искать все пакеты с нарушенными зависимостями и цепочки пакетов между ними" - -#: urpm-repograph.py:121 -msgid "Output each loop or each alternative in different file. Ignored if --loops or --alternatives options are not present. OUTPUT_FILE (if present) is tracted as folder name for new files in that case." -msgstr "Выводить каждый цикл или каждую альтернативу в отдельный файл. Игнорируется, если указано --loops или --alternatives. OUTPUT_FILE (если указан) в этом случае рассматривается как имя директории для новых файлов." - -#: urpm-repograph.py:127 -msgid "Change graph output to \"OUTPUT_FILE\". STDOUT by default." -msgstr "Перенаправить вывод графа в файл \"OUTPUT_FILE\". По умолчанию используется STDOUT." - -#: urpm-repograph.py:129 -msgid "Do not output graph. Tool will not start working if --quiet, --nograph are present and --verbose is not. (If there is nothing to output - then nothing has to be done.)" -msgstr "Не выводить граф. Инструмент не будет ничего делать, если включены --quiet и --nograph, а verbose нет. (Если ничего не надо выводить, то и не надо ничего делать.)" - -#: urpm-repograph.py:157 -#: urpm-repodiff.py:125 -#, python-format -msgid "Error: URL to repository \"%s\" is incorrect" -msgstr "Ошибка: Неверный URL репозитория \"%s\"" - -#: urpm-repograph.py:179 -#: urpm-repodiff.py:147 -#, python-format -msgid "Error: directory %s does not exist" -msgstr "Ошибка: директория %s не существует" - -#: urpm-repograph.py:189 -#: urpm-repodiff.py:157 -#, python-format -msgid "Error: \"%s\" is not correct url, path or name of repository" -msgstr "Ошибка: \"%s\" не является корректным URL, путем или именем репозитория" - -#: urpm-repograph.py:216 -#, python-format -msgid "Error: directory %s already exists" -msgstr "Ошибка: директория %s уже существует" - -#: urpm-repograph.py:222 -#: urpm-repograph.py:237 -#: urpm-repodiff.py:183 -#, python-format -msgid "Error: File %s already exists" -msgstr "Ошибка: Файл %s уже существует" - -#: urpm-repograph.py:229 -#, python-format -msgid "Error: directory %s was not created" -msgstr "Ошибка: директория %s не была создана" - -#: urpm-repograph.py:246 -#: urpm-repodiff.py:192 -#, python-format -msgid "Error: File %s cannot be created" -msgstr "Ошибка: Не удалось создать файл %s" - -#: urpm-repograph.py:250 -#: urpm-repodiff.py:196 -#, python-format -msgid "Error: Path %s does not exist." -msgstr "Ошибка: Путь %s не существует." - -#: urpm-repograph.py:262 -#: urpm-repodiff.py:218 -#, python-format -msgid "getting file %s from " -msgstr "получение файла %s из " - -#: urpm-repograph.py:267 -#: urpm-repodiff.py:223 -#, python-format -msgid "Error: file %s was not copied" -msgstr "Ошибка: файл %s был скопирован" - -#: urpm-repograph.py:275 -#: urpm-repodiff.py:231 -#, python-format -msgid "Error: file %(from)s was not downloaded to %(to)s" -msgstr "Ошибка: файл %(from)s не был скачан в %(to)s" - -#: urpm-repograph.py:288 -#: urpm-repodiff.py:272 -msgid "Error: file not found: " -msgstr "Ошибка: файл не найден: " - -#: urpm-repograph.py:293 -#: urpm-repodiff.py:277 -#, python-format -msgid "Error: cannot rename file %(from)s to %(to)s" -msgstr "Ошибка: не удалось переименовать файл %(from)s в %(to)s" - -#: urpm-repograph.py:297 -#: urpm-repograph.py:313 -#: urpm-repograph.py:543 -#: urpm-repodiff.py:281 -#, python-format -msgid "Error: file %s is missing." -msgstr "Ошибка: файл %s отсутствует." - -#: urpm-repograph.py:301 -#: urpm-repodiff.py:285 -#, python-format -msgid "file %(from)s was renamed to %(to)s" -msgstr "файл %(from)s был переименован в %(to)s" - -#: urpm-repograph.py:311 -#: urpm-repograph.py:541 -#: urpm-repodiff.py:294 -#: urpm-repodiff.py:297 -msgid "unpacking file " -msgstr "распаковка файла " - -#: urpm-repograph.py:371 -#: urpm-repodiff.py:410 -msgid "REPODIFF-Warning: strange : " -msgstr "REPODIFF-Предупреждение: необычное поле : " - -#: urpm-repograph.py:406 -#: urpm-repodiff.py:351 -#, python-format -msgid "Error: Synthesis file %s was not found." -msgstr "Ошибка: Synthesis файл %s не найден." - -#: urpm-repograph.py:409 -msgid "Parsing synthesis." -msgstr "Обработка synthesis файла." - -#: urpm-repograph.py:435 -#, python-format -msgid "Warning: Unexpected sign %(sign)s in 'provides' section of %(of)s" -msgstr "Предупреждение: неожиданный знак %(sign)s в 'provides' секции %(of)s" - -#: urpm-repograph.py:451 -#: urpm-repodiff.py:380 -msgid "Error: Failed to open synthesis file " -msgstr "Ошибка: Не удалось открыть synthesis файл" - -#: urpm-repograph.py:555 -msgid "Reading fileslist" -msgstr "Чтение файла со списком" - -#: urpm-repograph.py:557 -msgid "Error: Can't find fileslist " -msgstr "Ошибка: Не удалось найти файл со списком" - -#: urpm-repograph.py:561 -msgid "Error: Can't read fileslist " -msgstr "Ошибка: Не удалось прочитать файл со списком" - -#: urpm-repograph.py:565 -msgid "Error: Wrong fileslist." -msgstr "Ошибка: Неправильный файл со списком." - -#: urpm-repograph.py:578 -msgid "Error: Corrupted fileslist" -msgstr "Ошибка: Поврежденный файл со списком" - -#: urpm-repograph.py:608 -msgid "Warning: cross-repository dependency: " -msgstr "Предупреждение: пакет из одного репозиттория зависит от пакета из другого: " - -#: urpm-repograph.py:612 -#: urpm-repograph.py:662 -msgid "Warning: package has self-dependecies: " -msgstr "Предупреждение: пакет зависит от себя: " - -#: urpm-repograph.py:658 -#, python-format -msgid "" -"Warning: cross-repository dependency:\n" -" package %(pkg)s is dependent from\n" -" <- %(from)s located in another repository" -msgstr "" -"Предупреждение: зависимость между репозиториями:\n" -" пакет %(pkg)s зависит от\n" -" <- %(from)s, расположенного в другом репозитории" - -#: urpm-repograph.py:691 -#, python-format -msgid "Warning: needed version is absent <%(ver)s> %(rel)s required by package" -msgstr "Предупреждение: отсутствует версия <%(ver)s> %(rel)s, требуемая пакетом" - -#: urpm-repograph.py:708 -#, python-format -msgid "Warning: Package %(pkg)s unprovided by %(by)s" -msgstr "Предупреждение: Файл %(by)s требуется пакету %(pkg)s, но не предоставляется ни одним пакетом" - -#: urpm-repograph.py:740 -msgid "Finding dependencies." -msgstr "Поиск зависимостей." - -#: urpm-repograph.py:749 -#, python-format -msgid "" -"Warning: can't find <%(ask)s> required by package\n" -" <%(pkg)s>" -msgstr "" -"Предупреждение: не удалось найти <%(ask)s>, требуемый пакетом\n" -" <%(pkg)s>" - -#: urpm-repograph.py:812 -msgid "Total cross-referenced packages: " -msgstr "Всего пакетов с кросс-платформенными зависимостями: " - -#: urpm-repograph.py:816 -msgid "Total unprovided packages: " -msgstr " Всего пакетов с ничем не предоставленными зависимостями: " - -#: urpm-repograph.py:833 -msgid "Calculating colors." -msgstr "Вычисление цветов." - -#: urpm-repograph.py:1112 -msgid "Non-cycle nodes removed: " -msgstr "Нецикличных узлов удалено: " - -#: urpm-repograph.py:1113 -msgid "Cyclic packages: " -msgstr "Зацикленных пакетов осталось: " - -#: urpm-repograph.py:1130 -#, python-format -msgid "Worktime: %s seconds" -msgstr "Время работы: %s секунд" - -#: urpm-repograph.py:1136 -msgid "Searching loops." -msgstr "Поиск циклов." - -#: urpm-repograph.py:1140 -#: urpm-repograph.py:1188 -msgid "End of search." -msgstr "Конец поиска." - -#: urpm-repograph.py:1141 -#, python-format -msgid "Loops search: %s seconds" -msgstr "Поиск циклов: %s секунд" - -#: urpm-repograph.py:1145 -#, python-format -msgid "Total: %s loops." -msgstr "Всего: %s циклов." - -#: urpm-repograph.py:1151 -msgid "Loop " -msgstr "Цикл " - -#: urpm-repograph.py:1168 -msgid "Searching alternatives." -msgstr "Поиск альтернатив." - -#: urpm-repograph.py:1180 -#, python-format -msgid "Total: %d alternatives." -msgstr "Всего: %d альтернатив." - -#: urpm-repograph.py:1182 -msgid "Alternative " -msgstr "Альтернатива " - -#: urpm-repograph.py:1182 -msgid " is provided by:" -msgstr " предоставляется:" - -#: urpm-repograph.py:1260 -msgid "Searching for broken packages." -msgstr "Поиск нарушенных зависимостей." - -#: urpm-repograph.py:1266 -msgid "Searching for packages REQUIRED by " -msgstr "Поиск пакетов, требуемых " - -#: urpm-repograph.py:1268 -msgid "Searching for packages that REQUIRE " -msgstr "Поиск пакетов, требующих " - -#: urpm-repograph.py:1276 -#, python-format -msgid "Level %d dependency." -msgstr "Зависимость уровня %d." - -#: urpm-repograph.py:1355 -msgid "Remaking structures." -msgstr "Пересоздание структур." - -#: urpm-repograph.py:1367 -msgid "Error: can't find package name or filename \"" -msgstr "Ошибка: Не удалось найти имя пакета или файла \"" - -#: urpm-repograph.py:1401 -msgid "Do not use -q/--quiet and -n/--nograph without -v/--verbose together." -msgstr "Не используйте -q/--quiet совместно с -n/--nograph без -v/--verbose." - -#: urpm-repograph.py:1402 -msgid "That way there is no information to output anywhere. Nothing will be done." -msgstr "В этом случае нет информации, которую можно вывести. Ничего не будет сделано." - -#: urpm-repograph.py:1405 -msgid "Do not use -u/--unprovided and -b/--broken options together." -msgstr "Не используйте -u/--unprovided и -b/--broken вместе." - -#: urpm-repograph.py:1406 -msgid "-b does everything that do -u and a little more." -msgstr "-b делает все то же, что и -u, и немного больше." - -#: urpm-downloader.py:91 -msgid "A tool for downloading RPMs and SRPMs from URPM-based linux repositories" -msgstr "Инструмент, позволяющий скачивать RPM и SRPM пакеты из URPM репозиториев" - -#: urpm-downloader.py:92 -msgid "If none of the options -b, -s, -d turned on, it will be treated as -b" -msgstr "Если ни одна из опций -b, -s или -d не указана, то по умолчанию включается -b" - -#: urpm-downloader.py:93 -msgid "Package name(s) to download. It can contain not only package names, but (S)RPM files too. In this case package name extracted from this file will be used" -msgstr "Имена пакетов для скачивания. Можно так же использовать имена существующих (S)RPM файлов, в этом случае информация об имени пакета будет извлечена из них." - -#: urpm-downloader.py:94 -msgid "Instead of downloading files, list the URLs that would be processed" -msgstr "Выводить их URL файлов, но не скачивать их (в случае использования совместно с -a или -r src.rpm файл все равно будет скачан, так как без этого невозможно разрешить сборочные зависимости)" - -#: urpm-downloader.py:95 -msgid "When downloading RPMs, resolve dependencies and also download the required packages, if they are not already installed" -msgstr "При скачивании пакета разрешать зависимости и скачивать все необходимые пакеты, но только если они не установлены в системе." - -#: urpm-downloader.py:96 -msgid "When downloading RPMs, resolve dependencies and also download the required packages, even if they are already installed" -msgstr "При скачивании пакета разрешать зависимости и скачивать все необходимые пакеты, даже если они уже установлены в системе." - -#: urpm-downloader.py:97 -msgid "Download binary RPMs" -msgstr "Скачивать бинарные пакеты (RPM)" - -#: urpm-downloader.py:98 -msgid "Download the source RPMs (SRPMs)" -msgstr "Скачать пакеты с исходными кодами (SRPM)" - -#: urpm-downloader.py:99 -msgid "Download debug RPMs" -msgstr "Скачать пакеты с отладочной информацией" - -#: urpm-downloader.py:100 -msgid "Download debug RPMs and install" -msgstr "Скачать пакеты с отладочной информацией и установить" - -#: urpm-downloader.py:103 -msgid "Quiet operation." -msgstr "Ничего не печатать в консоль" - -#: urpm-downloader.py:106 -msgid "Exclude package(s) by regex" -msgstr "Исключить пакеты по регулярному выражению" - -#: urpm-downloader.py:107 -msgid "Try to continue when error occurs" -msgstr "Пытаться игнорировать ошибки" - -#: urpm-downloader.py:108 -msgid "If the file already exists, download it again and overwrite the old one" -msgstr "Если файл уже существует, скачать его заново и заменить." - -#: urpm-downloader.py:109 -msgid "If package dependency can be satisfied by several packages, download all of them (by default, only the first one is downloaded)" -msgstr "Скачивать все пакеты, которые могут удовлетворить зависимости для данного пакета (по умолчанию скачивается лишь один)." - -#: urpm-downloader.py:110 -msgid "If different versions of package present in repository, process them all" -msgstr "Если в репозитории присутствует несколько версий пакета, обработать их все." - -#. arg_parser.add_argument('--self-test', action='store_true', help="Test urpm-downloader end exit") -#: urpm-downloader.py:113 -msgid "Specify a destination directory for the download" -msgstr "Директория, в которую будут помещены скачаные файлы" - -#: urpm-downloader.py:130 -msgid "Use of --verbose with --quiet is senseless. Turning verbose mode off." -msgstr "Использование --verbose совместно с --quiet лишено смысла. Опция --verbose будет проигнорирована." - -#: urpm-downloader.py:134 -msgid "Note that resolving of SRPM dependencies is not possible until SRPM downloaded. So, it will be done despite --urls" -msgstr "Помните, что разрешение сборочных зависимостей SRPM невозможно без скачивания этого файла, поэтому SRPM файл все равно будет скачан несмотря на --urls" - -#: urpm-downloader.py:375 -msgid "* Downloaded: " -msgstr "* Скачано: " - -#: urpm-downloader.py:377 -msgid "* File exists, skipping: " -msgstr "* Файл существует, пропускаю: " - -#: urpm-downloader.py:476 -msgid "Can not download SRPM for package" -msgstr "Не удалось скачать SRPM файл для пакета" - -#: urpm-downloader.py:499 -#: urpm-downloader.py:532 -msgid "Can not download RPM" -msgstr "Не удалось скачать RPM файл" - -#: urpm-downloader.py:504 -msgid "Resolving debug-info packages..." -msgstr "Поиск пакетов с отладочной информацией..." - -#. urpmq output. RU: Нет пакета с названием -#: urpm-downloader.py:509 -msgid "No package named " -msgstr "Нет пакета с именем " - -#: urpm-downloader.py:533 -msgid "Maybe you need to update urpmi database (urpmi.update -a)?" -msgstr "Может быть, нужно обновить базу urpmi (urpmi.update -a)?" - -#: urpm-downloader.py:542 -msgid "Installing " -msgstr "Установка " - -#. return code is not 0 -#: urpm-downloader.py:553 -#, python-format -msgid "Debug package for '%s' not found" -msgstr "Для пакета %s не найдено пакета с отладочной информацией." - -#: urpm-downloader.py:602 -msgid "Parameters that end with '.rpm' seem to be local files, but the folowing files do not exist: " -msgstr "Параметры, заканчивающиеся на '.rpm' расцениваются как файлы, но следующие файлы не существуют: " - -#: urpm-downloader.py:627 -msgid "Searching src.rpm file(s) in repository..." -msgstr "Поиск подходящих src.rpm файлов в репозитории..." - -#: urpm-downloader.py:629 -msgid "Downloading src.rpm file(s)..." -msgstr "Скачивание src.rpm файлов..." - -#: urpm-downloader.py:659 -msgid "Resolving build dependencies..." -msgstr "Разрешение сборочных зависимостей..." - -#: urpm-downloader.py:661 -msgid "Resolving dependencies..." -msgstr "Разрешение зависимостей..." - -#: urpm-downloader.py:663 -#, python-format -msgid "Resolved %d packages" -msgstr "Найдено пакетов: %d" - -#: urpm-downloader.py:665 -msgid "Nothing to download" -msgstr "Нечего скачивать" - -#: urpm-repomanage.py:56 -#, python-format -msgid "Error accessing directory %(path)s, %(e)s" -msgstr "Ошибка доступа к директории %(path)s: %(e)s" - -#: urpm-repomanage.py:86 -msgid "manage a directory of rpm packages and report newest or oldest packages" -msgstr "Обработать директорию с rpm пакетами и сообщить о наиболее новых и старых версиях" - -#: urpm-repomanage.py:92 -msgid "path to directory with rpm packages" -msgstr "путь к директории с rpm пакетами" - -#: urpm-repomanage.py:95 -msgid "print the older packages" -msgstr "напечатать более старые пакеты" - -#: urpm-repomanage.py:97 -msgid "print the newest packages (this is the default behavior)" -msgstr "напечатать наиболее новые пакеты (поведение по умолчанию)" - -#: urpm-repomanage.py:99 -msgid "remove older packages" -msgstr "удалить более старые пакеты" - -#: urpm-repomanage.py:101 -msgid "space separated output, not newline" -msgstr "вывод разделяется пробелами, а не переводами строки" - -#: urpm-repomanage.py:103 -msgid "number of newest packages to keep - defaults to 1" -msgstr "количество наиболее новых пакетов, которые надо оставить - по умолчанию 1" - -#: urpm-repomanage.py:105 -msgid "do not check package payload signatures/digests" -msgstr "не проверять встроенные подписи пакетов" - -#: urpm-repomanage.py:108 -msgid "be completely quiet" -msgstr "ничего не печатать" - -#: urpm-repomanage.py:110 -msgid "be verbose - say which packages are decided to be old and why (this info is dumped to STDERR)" -msgstr "показывать дополнительную информацию - какие пакеты выбраны наиболее новыми и почему (информация выводится в STDERR)" - -#: urpm-repomanage.py:131 -msgid "No files to process" -msgstr "Нет файлов для обработки" - -#: urpm-repomanage.py:144 -#, python-format -msgid "Error opening pkg %(pkg)s: %(err)s" -msgstr "Ошибка открытия файла: %(pkg)s: %(err)s" - -#: urpm-repomanage.py:195 -#: urpm-repomanage.py:221 -msgid "Dropped " -msgstr "Убран " - -#: urpm-repomanage.py:196 -#: urpm-repomanage.py:222 -msgid " superseded by: " -msgstr " заменен на: " - -#: urpm-repodiff.py:83 +#: urpm-repodiff.py:83 urpm-tools/urpm-repodiff.py:83 msgid "Tool for comparing sets of repositories." msgstr "Инструмент для сравнения наборов репозиториев." +#: urpm-repodiff.py:84 +msgid "global parameters" +msgstr "глобальные параметры" + #: urpm-repodiff.py:85 +msgid "Parameters used in all cases." +msgstr "Параметры, используемые во всех случаях." + +#: urpm-repodiff.py:87 urpm-tools/urpm-repodiff.py:85 msgid "URL or PATH to old repositories" msgstr "URL или пути к старым репозиториям" -#: urpm-repodiff.py:87 +#: urpm-repodiff.py:89 urpm-tools/urpm-repodiff.py:87 msgid "URL or PATH to new repositories" msgstr "URL или пути к новым репозиториям" -#: urpm-repodiff.py:89 -msgid "Show differences in package sizes." -msgstr "Показывать различия в размерах пакетов." - -#: urpm-repodiff.py:91 -msgid "Simple output format." -msgstr "Упрощенный формат вывода." - -#: urpm-repodiff.py:93 +#: urpm-repodiff.py:91 urpm-tools/urpm-repodiff.py:93 msgid "Hide service messages." msgstr "Не показывать служебные сообщения." +#: urpm-repodiff.py:93 +msgid "Ignore release during package compare." +msgstr "Не учитывать релиз при сравнении пакетов." + #: urpm-repodiff.py:95 +msgid "Output summary." +msgstr "" + +#: urpm-repodiff.py:97 urpm-tools/urpm-repodiff.py:101 +msgid "Change standart output to \"OUTPUT_FILE\"." +msgstr "Перенаправить вывод в \"OUTPUT_FILE\"" + +#: urpm-repodiff.py:99 +#, fuzzy +msgid "File with list of ignored packages" +msgstr "Загрузка списка установленных пакетов..." + +#: urpm-repodiff.py:100 +msgid "text mode parameters" +msgstr "" + +#: urpm-repodiff.py:101 +msgid "Parameters used only in text mode. (--html not present)" +msgstr "" + +#: urpm-repodiff.py:103 urpm-tools/urpm-repodiff.py:89 +msgid "Show differences in package sizes." +msgstr "Показывать различия в размерах пакетов." + +#: urpm-repodiff.py:105 urpm-tools/urpm-repodiff.py:91 +msgid "Simple output format." +msgstr "Упрощенный формат вывода." + +#: urpm-repodiff.py:107 urpm-tools/urpm-repodiff.py:95 msgid "Show changelog difference." msgstr "Показывать разницу списков изменений." -#: urpm-repodiff.py:97 +#: urpm-repodiff.py:108 +msgid "HTML mode parameters" +msgstr "" + +#: urpm-repodiff.py:109 +msgid "Parameters used only in HTML mode. (--html is present)" +msgstr "" + +#: urpm-repodiff.py:111 urpm-tools/urpm-repodiff.py:97 #, python-format msgid "Output in HTML format, if --output is not present \"%s\" will be created in current directory. --size, --simple and --changelog options are ignored." msgstr "Вывод в формате HTML. Если --output не указан, то файл \"%s\" будет создан в текущей директории. Опции --size, --simple и --changelog будут игнорироваться." -#: urpm-repodiff.py:101 -msgid "Change standart output to \"OUTPUT_FILE\"." -msgstr "Перенаправить вывод в \"OUTPUT_FILE\"" +#: urpm-repodiff.py:115 +#, fuzzy +msgid "Repository names for output." +msgstr "Формат вывода." -#: urpm-repodiff.py:174 +#: urpm-repodiff.py:116 +msgid "Filters" +msgstr "" + +#: urpm-repodiff.py:117 +msgid "Filters for output. If none selected then every type will\t\t be shown" +msgstr "" + +#: urpm-repodiff.py:120 +#, fuzzy +msgid "Show new packages" +msgstr "Новый пакет: " + +#: urpm-repodiff.py:122 +#, fuzzy +msgid "Show removed packages" +msgstr "удалить более старые пакеты" + +#: urpm-repodiff.py:124 +#, fuzzy +msgid "Show updated packages" +msgstr " Всего обновлено пакетов: " + +#: urpm-repodiff.py:126 +#, fuzzy +msgid "Show downgraded packages" +msgstr " Всего пакетов с пониженной версией: " + +#: urpm-repodiff.py:150 urpm-repograph.py:157 urpm-tools/urpm-repodiff.py:125 +#: urpm-tools/urpm-repograph.py:157 +#, python-format +msgid "Error: URL to repository \"%s\" is incorrect" +msgstr "Ошибка: Неверный URL репозитория \"%s\"" + +#: urpm-repodiff.py:172 urpm-repograph.py:179 urpm-tools/urpm-repodiff.py:147 +#: urpm-tools/urpm-repograph.py:179 +#, python-format +msgid "Error: directory %s does not exist" +msgstr "Ошибка: директория %s не существует" + +#: urpm-repodiff.py:182 urpm-repograph.py:189 urpm-tools/urpm-repodiff.py:157 +#: urpm-tools/urpm-repograph.py:189 +#, python-format +msgid "Error: \"%s\" is not correct url, path or name of repository" +msgstr "Ошибка: \"%s\" не является корректным URL, путем или именем репозитория" + +#: urpm-repodiff.py:199 urpm-tools/urpm-repodiff.py:174 #, python-format msgid "Error: Cannot open %s for writing." msgstr "Ошибка: Не удалось открыть %s для записи." -#: urpm-repodiff.py:354 +#: urpm-repodiff.py:208 urpm-repograph.py:222 urpm-repograph.py:237 +#: urpm-tools/urpm-repodiff.py:183 urpm-tools/urpm-repograph.py:222 +#: urpm-tools/urpm-repograph.py:237 +#, python-format +msgid "Error: File %s already exists" +msgstr "Ошибка: Файл %s уже существует" + +#: urpm-repodiff.py:217 urpm-repograph.py:246 urpm-tools/urpm-repodiff.py:192 +#: urpm-tools/urpm-repograph.py:246 +#, python-format +msgid "Error: File %s cannot be created" +msgstr "Ошибка: Не удалось создать файл %s" + +#: urpm-repodiff.py:221 urpm-repograph.py:250 urpm-tools/urpm-repodiff.py:196 +#: urpm-tools/urpm-repograph.py:250 +#, python-format +msgid "Error: Path %s does not exist." +msgstr "Ошибка: Путь %s не существует." + +#: urpm-repodiff.py:235 +#, python-format +msgid "Error: number of REPONAME's(%s) are not equal to number of groups(%s)" +msgstr "" + +#: urpm-repodiff.py:249 urpm-repograph.py:262 urpm-tools/urpm-repodiff.py:218 +#: urpm-tools/urpm-repograph.py:262 +#, python-format +msgid "getting file %s from " +msgstr "получение файла %s из " + +#: urpm-repodiff.py:254 urpm-repograph.py:267 urpm-tools/urpm-repodiff.py:223 +#: urpm-tools/urpm-repograph.py:267 +#, python-format +msgid "Error: file %s was not copied" +msgstr "Ошибка: файл %s был скопирован" + +#: urpm-repodiff.py:262 urpm-repograph.py:275 urpm-tools/urpm-repodiff.py:231 +#: urpm-tools/urpm-repograph.py:275 +#, python-format +msgid "Error: file %(from)s was not downloaded to %(to)s" +msgstr "Ошибка: файл %(from)s не был скачан в %(to)s" + +#: urpm-repodiff.py:301 +#, fuzzy, python-format +msgid "Error: file %s does not exist." +msgstr "Ошибка: Путь %s не существует." + +#: urpm-repodiff.py:314 +#, fuzzy, python-format +msgid "Error: file %s cannot be read." +msgstr "Ошибка: Не удалось создать файл %s" + +#: urpm-repodiff.py:354 urpm-repograph.py:288 urpm-tools/urpm-repodiff.py:272 +#: urpm-tools/urpm-repograph.py:288 +msgid "Error: file not found: " +msgstr "Ошибка: файл не найден: " + +#: urpm-repodiff.py:359 urpm-repograph.py:293 urpm-tools/urpm-repodiff.py:277 +#: urpm-tools/urpm-repograph.py:293 +#, python-format +msgid "Error: cannot rename file %(from)s to %(to)s" +msgstr "Ошибка: не удалось переименовать файл %(from)s в %(to)s" + +#: urpm-repodiff.py:363 urpm-repograph.py:297 urpm-repograph.py:313 +#: urpm-repograph.py:543 urpm-tools/urpm-repodiff.py:281 +#: urpm-tools/urpm-repograph.py:297 urpm-tools/urpm-repograph.py:313 +#: urpm-tools/urpm-repograph.py:543 +#, python-format +msgid "Error: file %s is missing." +msgstr "Ошибка: файл %s отсутствует." + +#: urpm-repodiff.py:367 urpm-repograph.py:301 urpm-tools/urpm-repodiff.py:285 +#: urpm-tools/urpm-repograph.py:301 +#, python-format +msgid "file %(from)s was renamed to %(to)s" +msgstr "файл %(from)s был переименован в %(to)s" + +#: urpm-repodiff.py:376 urpm-repodiff.py:379 urpm-repograph.py:311 +#: urpm-repograph.py:541 urpm-tools/urpm-repodiff.py:294 +#: urpm-tools/urpm-repodiff.py:297 urpm-tools/urpm-repograph.py:311 +#: urpm-tools/urpm-repograph.py:541 +msgid "unpacking file " +msgstr "распаковка файла " + +#: urpm-repodiff.py:434 urpm-repograph.py:406 urpm-tools/urpm-repodiff.py:351 +#: urpm-tools/urpm-repograph.py:406 +#, python-format +msgid "Error: Synthesis file %s was not found." +msgstr "Ошибка: Synthesis файл %s не найден." + +#: urpm-repodiff.py:437 urpm-tools/urpm-repodiff.py:354 msgid "Parsing synthesis" msgstr "Чтение synthesis файла" -#: urpm-repodiff.py:389 +#: urpm-repodiff.py:466 urpm-repograph.py:451 urpm-tools/urpm-repodiff.py:380 +#: urpm-tools/urpm-repograph.py:451 +msgid "Error: Failed to open synthesis file " +msgstr "Ошибка: Не удалось открыть synthesis файл" + +#: urpm-repodiff.py:475 urpm-tools/urpm-repodiff.py:389 msgid "REPODIFF-Warning: strange format of or : " msgstr "REPODIFF-Предупреждение: необычный формат или : " -#: urpm-repodiff.py:527 +#: urpm-repodiff.py:496 urpm-repograph.py:371 urpm-tools/urpm-repodiff.py:410 +#: urpm-tools/urpm-repograph.py:371 +msgid "REPODIFF-Warning: strange : " +msgstr "REPODIFF-Предупреждение: необычное поле : " + +#: urpm-repodiff.py:626 urpm-tools/urpm-repodiff.py:527 msgid "New package: " msgstr "Новый пакет: " -#: urpm-repodiff.py:542 +#: urpm-repodiff.py:641 urpm-tools/urpm-repodiff.py:542 msgid "Generating obsoleted list." msgstr "Создание списка устаревших пакетов." -#: urpm-repodiff.py:601 +#: urpm-repodiff.py:700 urpm-tools/urpm-repodiff.py:601 msgid "Removed package: " msgstr "Удален пакет: " -#: urpm-repodiff.py:609 +#: urpm-repodiff.py:708 urpm-tools/urpm-repodiff.py:609 msgid " Obsoleted by " msgstr " Устарел из-за добавления " -#: urpm-repodiff.py:630 +#: urpm-repodiff.py:730 urpm-tools/urpm-repodiff.py:630 msgid "Reading changelog" msgstr "Чтение списка изменений" -#: urpm-repodiff.py:632 +#: urpm-repodiff.py:732 urpm-tools/urpm-repodiff.py:632 msgid "Error: Can't find changelog " msgstr "Ошибка: Не удалось найти список изменений " -#: urpm-repodiff.py:636 +#: urpm-repodiff.py:736 urpm-tools/urpm-repodiff.py:636 msgid "Error: Can't read changelog " msgstr "Ошибка: Не удалось прочитать список изменений " -#: urpm-repodiff.py:640 +#: urpm-repodiff.py:740 urpm-tools/urpm-repodiff.py:640 msgid "Error: Wrong changelog." msgstr "Ошибка: Неправильный список изменений." -#: urpm-repodiff.py:662 +#: urpm-repodiff.py:762 urpm-tools/urpm-repodiff.py:662 msgid "Error: Corrupted changelog" msgstr "Ошибка: Поврежденный список изменений" -#: urpm-repodiff.py:756 +#: urpm-repodiff.py:861 urpm-tools/urpm-repodiff.py:756 msgid "Generating changes list." msgstr "Создание списка изменений." -#: urpm-repodiff.py:770 -#: urpm-repodiff.py:773 +#: urpm-repodiff.py:877 urpm-repodiff.py:880 urpm-tools/urpm-repodiff.py:770 +#: urpm-tools/urpm-repodiff.py:773 #, python-format msgid "REPODIFF-Warning: Package %s was not described in changelogs.xml" msgstr "REPODIFF-Предупреждение: Пакет %s не описан в changelogs.xml" -#: urpm-repodiff.py:771 +#: urpm-repodiff.py:878 urpm-tools/urpm-repodiff.py:771 msgid "REPODIFF-Warning: Changelogs of a package are absent in \"new\" repository." msgstr "REPODIFF-Предупреждение: В репозитории \"новый\" отсутствует список изменений пакета." -#: urpm-repodiff.py:774 +#: urpm-repodiff.py:881 urpm-tools/urpm-repodiff.py:774 msgid "REPODIFF-Warning: Changelogs of a package are absent." msgstr "REPODIFF-Предупреждение: У пакета отсутствует список изменений." -#: urpm-repodiff.py:800 +#: urpm-repodiff.py:910 urpm-tools/urpm-repodiff.py:800 #, python-format msgid "Package %s has no changelog info\n" msgstr "Пакет %s не имеет списка изменений\n" -#: urpm-repodiff.py:818 +#: urpm-repodiff.py:930 urpm-tools/urpm-repodiff.py:818 msgid "" "\n" "\n" @@ -980,11 +325,11 @@ msgstr "" "Обновленные пакеты:\n" "\n" -#: urpm-repodiff.py:825 +#: urpm-repodiff.py:938 urpm-tools/urpm-repodiff.py:825 msgid " ***DOWNGRADED***\n" msgstr " ***УСТАНОВЛЕНА ПРЕДЫДУЩАЯ ВЕРСИЯ***\n" -#: urpm-repodiff.py:834 +#: urpm-repodiff.py:956 urpm-tools/urpm-repodiff.py:834 #, python-format msgid "" "Size Change: %d bytes\n" @@ -993,161 +338,912 @@ msgstr "" "Размер изменен: %d байт\n" "\n" -#: urpm-repodiff.py:844 +#: urpm-repodiff.py:971 +msgid "Summary:" +msgstr "" + +#: urpm-repodiff.py:979 urpm-tools/urpm-repodiff.py:844 msgid " Total added packages: " msgstr " Всего добавлено пакетов: " -#: urpm-repodiff.py:847 +#: urpm-repodiff.py:983 urpm-tools/urpm-repodiff.py:847 msgid " Total removed packages: " msgstr " Всего удалено пакетов: " -#: urpm-repodiff.py:856 +#: urpm-repodiff.py:994 urpm-tools/urpm-repodiff.py:856 msgid " Total updated packages: " msgstr " Всего обновлено пакетов: " -#: urpm-repodiff.py:858 +#: urpm-repodiff.py:997 urpm-tools/urpm-repodiff.py:858 msgid " Total downgraded packages: " msgstr " Всего пакетов с пониженной версией: " -#: urpm-repodiff.py:1316 +#: urpm-repodiff.py:1498 urpm-tools/urpm-repodiff.py:1316 msgid "Creating HTML file." msgstr "Создание HTML файла." -#: urpm-package-cleanup.py:58 +#: urpm-repomanage.py:56 urpm-tools/urpm-repomanage.py:56 +#, python-format +msgid "Error accessing directory %(path)s, %(e)s" +msgstr "Ошибка доступа к директории %(path)s: %(e)s" + +#: urpm-repomanage.py:86 urpm-tools/urpm-repomanage.py:86 +msgid "manage a directory of rpm packages and report newest or oldest packages" +msgstr "Обработать директорию с rpm пакетами и сообщить о наиболее новых и старых версиях" + +#: urpm-repomanage.py:92 urpm-tools/urpm-repomanage.py:92 +msgid "path to directory with rpm packages" +msgstr "путь к директории с rpm пакетами" + +#: urpm-repomanage.py:95 urpm-tools/urpm-repomanage.py:95 +msgid "print the older packages" +msgstr "напечатать более старые пакеты" + +#: urpm-repomanage.py:97 urpm-tools/urpm-repomanage.py:97 +msgid "print the newest packages (this is the default behavior)" +msgstr "напечатать наиболее новые пакеты (поведение по умолчанию)" + +#: urpm-repomanage.py:99 urpm-tools/urpm-repomanage.py:99 +msgid "remove older packages" +msgstr "удалить более старые пакеты" + +#: urpm-repomanage.py:101 urpm-tools/urpm-repomanage.py:101 +msgid "space separated output, not newline" +msgstr "вывод разделяется пробелами, а не переводами строки" + +#: urpm-repomanage.py:103 urpm-tools/urpm-repomanage.py:103 +msgid "number of newest packages to keep - defaults to 1" +msgstr "количество наиболее новых пакетов, которые надо оставить - по умолчанию 1" + +#: urpm-repomanage.py:105 urpm-tools/urpm-repomanage.py:105 +msgid "do not check package payload signatures/digests" +msgstr "не проверять встроенные подписи пакетов" + +#: urpm-repomanage.py:108 urpm-tools/urpm-repomanage.py:108 +msgid "be completely quiet" +msgstr "ничего не печатать" + +#: urpm-repomanage.py:110 urpm-tools/urpm-repomanage.py:110 +msgid "be verbose - say which packages are decided to be old and why (this info is dumped to STDERR)" +msgstr "показывать дополнительную информацию - какие пакеты выбраны наиболее новыми и почему (информация выводится в STDERR)" + +#: urpm-repomanage.py:131 urpm-tools/urpm-repomanage.py:131 +msgid "No files to process" +msgstr "Нет файлов для обработки" + +#: urpm-repomanage.py:144 urpm-tools/urpm-repomanage.py:144 +#, python-format +msgid "Error opening pkg %(pkg)s: %(err)s" +msgstr "Ошибка открытия файла: %(pkg)s: %(err)s" + +#: urpm-repomanage.py:195 urpm-repomanage.py:221 +#: urpm-tools/urpm-repomanage.py:195 urpm-tools/urpm-repomanage.py:221 +msgid "Dropped " +msgstr "Убран " + +#: urpm-repomanage.py:196 urpm-repomanage.py:222 +#: urpm-tools/urpm-repomanage.py:196 urpm-tools/urpm-repomanage.py:222 +msgid " superseded by: " +msgstr " заменен на: " + +#. if not fatal_fails, do nothing. Caller have to deal with that himself +#. rpm return code is not 0 +#. if not fatal_fails, do nothing. Caller have to deal with that himself +#. rpm return code is not 0 +#: urpm-reposync.py:64 urpm-downloader.py:156 urpm-downloader.py:546 +#: urpm-tools/urpm-reposync.py:64 urpm-tools/urpm-downloader.py:156 +#: urpm-tools/urpm-downloader.py:546 +msgid "Error while calling command" +msgstr "Ошибка при выполнении команды" + +#: urpm-reposync.py:66 urpm-downloader.py:158 urpm-tools/urpm-reposync.py:66 +#: urpm-tools/urpm-downloader.py:158 +msgid "Error message: \n" +msgstr "Сообщение об ошибке: \n" + +#: urpm-reposync.py:74 urpm-tools/urpm-reposync.py:74 +msgid "reposync is used to synchronize a set of packages on the local computer with the remote repository." +msgstr "Инструмент reposync используется для синхронизации установленных на компьютере пакетов с удаленным репозиторием." + +#: urpm-reposync.py:76 urpm-downloader.py:104 urpm-tools/urpm-reposync.py:76 +#: urpm-tools/urpm-downloader.py:104 +msgid "Use only selected URPM media" +msgstr "Использовать только указанные источники" + +#: urpm-reposync.py:77 urpm-downloader.py:105 urpm-tools/urpm-reposync.py:77 +#: urpm-tools/urpm-downloader.py:105 +msgid "Do not use selected URPM media" +msgstr "Не использовать указанные источники" + +#. arg_parser.add_argument('-x', '--exclude-packages', action='store',nargs = '+', help="Exclude package(s) by regex") +#: urpm-reposync.py:79 urpm-downloader.py:102 urpm-tools/urpm-reposync.py:79 +#: urpm-tools/urpm-downloader.py:102 +msgid "Verbose (print additional info)" +msgstr "Выводить при исполнении отладочную информацию" + +#: urpm-reposync.py:80 urpm-tools/urpm-reposync.py:80 +msgid "Quiet operation. Senseless without --auto." +msgstr "Ничего не выводить на экран. Не используется без --auto." + +#: urpm-reposync.py:81 urpm-tools/urpm-reposync.py:81 +msgid "Do not ask questions, just do it!" +msgstr "Выполнять все действия без вопросов" + +#: urpm-reposync.py:82 urpm-tools/urpm-reposync.py:82 +msgid "Only print the list of actions to be done and do nothing more!" +msgstr "Только вывести список планируемых действий и выйти." + +#: urpm-reposync.py:83 urpm-tools/urpm-reposync.py:83 +msgid "Only download the rpm files, but install or remove nothing." +msgstr "Только скачать пакеты, но ничего не устанавливать и не удалять." + +#. arg_parser.add_argument('-n', '--noremove', action='store_true', help=_("Do not remove packages at all. If some installed package prevent another package from beeing updated - do not update it.")) +#: urpm-reposync.py:85 urpm-tools/urpm-reposync.py:85 +msgid "Remove all the packages which do not present in repository. By default, only some of them would be removed." +msgstr "Удалять все пакеты, которых нет в репозитории. По умолчанию инструмент пытается сохранить их, если возможно." + +#: urpm-reposync.py:86 urpm-tools/urpm-reposync.py:86 +msgid "Download packages and check wether they can be installed to your system, but do not install them." +msgstr "Скачать пакеты и проверить, могут ли они быть установлены на текущую систему. Пакеты не будут установлены." + +#: urpm-reposync.py:87 urpm-tools/urpm-reposync.py:87 +msgid "Do nothing with kernels." +msgstr "Ничего не делать с ядрами." + +#: urpm-reposync.py:88 urpm-tools/urpm-reposync.py:88 +msgid "Run self-tests end exit." +msgstr "Запустить самопроверку." + +#: urpm-reposync.py:89 urpm-tools/urpm-reposync.py:89 +msgid "Show detailed information about packages are going to be removed or installed (why does it have to be done)" +msgstr "Показывать детальную информацию о пакетах, которые будут удалены и установлены (будут объяснены решения по каждому пакету)." + +#: urpm-reposync.py:93 urpm-tools/urpm-reposync.py:93 +msgid "It's senseless to use --quiet without --auto!" +msgstr "Использование --quiet без --auto лишено смысла!" + +#: urpm-reposync.py:306 urpm-tools/urpm-reposync.py:305 +msgid "Loading the list of installed packages..." +msgstr "Загрузка списка установленных пакетов..." + +#: urpm-reposync.py:320 urpm-tools/urpm-reposync.py:319 +msgid "Duplicating " +msgstr "Дублирующийся пакет " + +#: urpm-reposync.py:321 urpm-tools/urpm-reposync.py:320 +msgid "Already found: " +msgstr "Уже найдено: " + +#. print synthesis_list +#: urpm-reposync.py:397 urpm-tools/urpm-reposync.py:396 +msgid "Processing medium " +msgstr "Обработка источника " + +#: urpm-reposync.py:415 urpm-tools/urpm-reposync.py:414 +#, python-format +msgid "Could not read synthesis file. (File %s not found)" +msgstr "Файл %s не найден. Невозможно обработать synthesis файл." + +#: urpm-reposync.py:494 urpm-tools/urpm-reposync.py:484 +msgid "File can not be processed! Url: " +msgstr "Не удалось обработать файл! Url: " + +#: urpm-reposync.py:589 urpm-tools/urpm-reposync.py:579 +#, python-format +msgid "Removing %s" +msgstr "Удаление %s" + +#: urpm-reposync.py:596 urpm-tools/urpm-reposync.py:586 +msgid "urpm-reposync: error in package %s. Data: %(data)s" +msgstr "urpm-reposync: ошибка при работе с пакетом %s. Данные: %(data)s" + +#: urpm-reposync.py:773 urpm-tools/urpm-reposync.py:683 +#, python-format +msgid "\tRequires %s, which will not be installed." +msgstr "\tТребует пакет %s, который не будет установлен." + +#: urpm-reposync.py:779 urpm-tools/urpm-reposync.py:689 +#, python-format +msgid "\t%s conflicts with it" +msgstr "\t%s конфликтует с этим пакетом" + +#: urpm-reposync.py:784 urpm-tools/urpm-reposync.py:694 +#, python-format +msgid "\tIt conflicts with %s" +msgstr "\tКонфликтует с %s" + +#: urpm-reposync.py:877 +#, fuzzy +msgid ">>> Contact repository maintaiers and send them this information, please." +msgstr "Пожалуйста, отправьте разработчикам дистрибутива эту информацию." + +#: urpm-reposync.py:883 urpm-tools/urpm-reposync.py:777 +msgid "Downloading files..." +msgstr "Скачивание файлов..." + +#: urpm-reposync.py:913 urpm-tools/urpm-reposync.py:807 +msgid "Generating transaction..." +msgstr "Создание транзакции..." + +#: urpm-reposync.py:931 urpm-tools/urpm-reposync.py:825 +msgid "Checking dependencies..." +msgstr "Проверка зависимостей..." + +#: urpm-reposync.py:936 urpm-tools/urpm-reposync.py:830 +msgid "requires" +msgstr "требует" + +#: urpm-reposync.py:938 urpm-tools/urpm-reposync.py:832 +msgid "conflicts with" +msgstr "конфликтует с" + +#: urpm-reposync.py:954 urpm-tools/urpm-reposync.py:848 +#, python-format +msgid "Package %(name)s-%(ver)s-%(rel)s %(t)s %(namereq)s%(verreq)s" +msgstr "Пакет %(name)s-%(ver)s-%(rel)s %(t)s %(namereq)s%(verreq)s" + +#: urpm-reposync.py:960 urpm-tools/urpm-reposync.py:854 +msgid "There are some unresolved dependencies: " +msgstr "Найдены неразрешенные зависимости: " + +#: urpm-reposync.py:963 urpm-tools/urpm-reposync.py:857 +msgid "Packages can not be installed. Please, contact urpm-tools developers and provide this output." +msgstr "Пакеты не могут быть установлены. Пожалуйста, отправьте разработчику весь вывод программы." + +#: urpm-reposync.py:965 urpm-tools/urpm-reposync.py:859 +msgid "No errors found in transaction" +msgstr "Ошибок не найдено" + +#: urpm-reposync.py:970 urpm-tools/urpm-reposync.py:864 +msgid "Running transaction..." +msgstr "Запуск транзакции..." + +#: urpm-reposync.py:1011 urpm-tools/urpm-reposync.py:905 +msgid "WARNING: Some libraries are going to be removed because there are only the packages with the other architecture in the repository. Maybe you missed media with the correct architecture?" +msgstr "ПРЕДУПРЕЖДЕНИЕ: Некоторые библиотеки будут удалены, потому что в репозитории присутствуют только эти библиотеки с другой архитектурой. Может быть, нужно добавить источники с правильными архитектурами?" + +#: urpm-reposync.py:1052 urpm-reposync.py:1087 urpm-reposync.py:1109 +#: urpm-reposync.py:1122 urpm-tools/urpm-reposync.py:946 +#: urpm-tools/urpm-reposync.py:981 urpm-tools/urpm-reposync.py:1003 +#: urpm-tools/urpm-reposync.py:1016 +msgid "Package Name" +msgstr "Имя пакета" + +#: urpm-reposync.py:1052 urpm-reposync.py:1109 urpm-reposync.py:1122 +#: urpm-tools/urpm-reposync.py:946 urpm-tools/urpm-reposync.py:1003 +#: urpm-tools/urpm-reposync.py:1016 +msgid "Current Version" +msgstr "Текущая версия" + +#: urpm-reposync.py:1052 urpm-tools/urpm-reposync.py:946 +msgid "New Version" +msgstr "Новая версия" + +#: urpm-reposync.py:1052 urpm-reposync.py:1087 urpm-reposync.py:1109 +#: urpm-reposync.py:1122 urpm-tools/urpm-reposync.py:946 +#: urpm-tools/urpm-reposync.py:981 urpm-tools/urpm-reposync.py:1003 +#: urpm-tools/urpm-reposync.py:1016 +msgid "Arch" +msgstr "Архитектура" + +#: urpm-reposync.py:1054 urpm-tools/urpm-reposync.py:948 +msgid "medium" +msgstr "источник " + +#: urpm-reposync.py:1076 urpm-tools/urpm-reposync.py:970 +msgid "The following packages are going to be upgraded:" +msgstr "Следующие пакеты будут обновлены:" + +#: urpm-reposync.py:1081 urpm-tools/urpm-reposync.py:975 +msgid "The following packages are going to be downgraded:" +msgstr "Версии следующих пакетов будут понижены:" + +#: urpm-reposync.py:1086 urpm-tools/urpm-reposync.py:980 +msgid "Additional packages are going to be installed:" +msgstr "Дополнительные пакеты будут установлены:" + +#: urpm-reposync.py:1087 urpm-tools/urpm-reposync.py:981 +msgid "Version" +msgstr "Версия" + +#: urpm-reposync.py:1103 urpm-tools/urpm-reposync.py:997 +#, python-format +msgid "\tRequired by %s" +msgstr "\tТребуется для %s" + +#: urpm-reposync.py:1108 urpm-tools/urpm-reposync.py:1002 +msgid "The following packages are going to be removed:" +msgstr "Следующие пакеты будут удалены:" + +#: urpm-reposync.py:1121 urpm-tools/urpm-reposync.py:1015 +msgid "Packages which do not present in repositories, but do not have to be removed (will be saved):" +msgstr "Пакеты, которые отсутствуют в репозитории, но могут быть сохранены:" + +#: urpm-reposync.py:1128 urpm-tools/urpm-reposync.py:1022 +#, python-format +msgid "%d packages are going to be downloaded and installed." +msgstr "Пакетов будет скачано и установлено: %d." + +#: urpm-reposync.py:1129 urpm-tools/urpm-reposync.py:1023 +#, python-format +msgid "%d packages are going to be removed." +msgstr "Пакетов будет удалено: %d." + +#: urpm-reposync.py:1130 urpm-tools/urpm-reposync.py:1024 +#, python-format +msgid "%s will be downloaded." +msgstr "Данных будет скачано: %s." + +#: urpm-reposync.py:1189 urpm-tools/urpm-reposync.py:1080 +#, python-format +msgid "\tForced to be removed dew to \"%s\" policy." +msgstr "\tДолжен быть удален из-за правила \"%s\"." + +#: urpm-reposync.py:1217 urpm-tools/urpm-reposync.py:1108 +msgid "Nothing to do" +msgstr "В системе не требуются изменения" + +#: urpm-reposync.py:1230 urpm-tools/urpm-reposync.py:1121 +msgid "Do you want to proceed? (y/n): " +msgstr "Хотите продолжить? (д/н): " + +#: urpm-reposync.py:1235 urpm-tools/urpm-reposync.py:1126 +msgid "y" +msgstr "д" + +#: urpm-reposync.py:1235 urpm-tools/urpm-reposync.py:1126 +msgid "yes" +msgstr "да" + +#: urpm-reposync.py:1237 urpm-tools/urpm-reposync.py:1128 +msgid "n" +msgstr "н" + +#: urpm-reposync.py:1237 urpm-tools/urpm-reposync.py:1128 +msgid "no" +msgstr "нет" + +#: urpm-package-cleanup.py:58 urpm-tools/urpm-package-cleanup.py:58 msgid "Find problems in the rpmdb of system and correct them" msgstr "Найти проблемы в локальной базе RPM и исправить их" -#: urpm-package-cleanup.py:62 +#: urpm-package-cleanup.py:62 urpm-tools/urpm-package-cleanup.py:62 msgid "Query format to use for output." msgstr "Формат вывода." -#: urpm-package-cleanup.py:65 +#: urpm-package-cleanup.py:65 urpm-tools/urpm-package-cleanup.py:65 msgid "Use non-interactive mode" msgstr "Работать в неинтерактивном режиме" -#: urpm-package-cleanup.py:68 +#: urpm-package-cleanup.py:68 urpm-tools/urpm-package-cleanup.py:68 msgid "Orphans Options" msgstr "Осиротевшие пакеты" -#: urpm-package-cleanup.py:71 +#: urpm-package-cleanup.py:71 urpm-tools/urpm-package-cleanup.py:71 msgid "List installed packages which are not available from currently configured repositories" msgstr "Перечислить пакеты, недоступные в настроенных на текущий момент репозиториях" -#: urpm-package-cleanup.py:75 +#: urpm-package-cleanup.py:75 urpm-tools/urpm-package-cleanup.py:75 msgid "Use only update media. This means that urpmq will search and resolve dependencies only in media marked as containing updates (e.g. which have been created with \"urpmi.addmedia --update\")." msgstr "Ипользовать только источники обновлений. Это означает, что urpmq будет искать и разрешать зависимости только используя источники, помеченные как источники обновлений (например, которые были добавлены при помощи \"urpmi.addmedia --update\")" -#: urpm-package-cleanup.py:80 +#: urpm-package-cleanup.py:80 urpm-tools/urpm-package-cleanup.py:80 msgid "Select specific media to be used, instead of defaulting to all available media (or all update media if --update is used). No rpm will be found in other media." msgstr "Выбрать особые источники вместо того чтобы использовать все доступные по умолчанию источники (или все источники обновлений, если указан флаг --update). В других источниках пакеты искаться не будут." -#: urpm-package-cleanup.py:85 +#: urpm-package-cleanup.py:85 urpm-tools/urpm-package-cleanup.py:85 msgid "Do not use the specified media." msgstr "Не использовать указанные источники." -#: urpm-package-cleanup.py:87 +#: urpm-package-cleanup.py:87 urpm-tools/urpm-package-cleanup.py:87 msgid "Dependency Problems Options" msgstr "Проблемы с зависимостями" -#: urpm-package-cleanup.py:90 +#: urpm-package-cleanup.py:90 urpm-tools/urpm-package-cleanup.py:90 msgid "List dependency problems in the local RPM database" msgstr "Перечислить проблемы с зависимостями в локальной базе RPM" -#: urpm-package-cleanup.py:93 +#: urpm-package-cleanup.py:93 urpm-tools/urpm-package-cleanup.py:93 msgid "List missing suggestions of installed packages" msgstr "Перечислить список мягких зависимостей установленных пакетов" -#: urpm-package-cleanup.py:96 +#: urpm-package-cleanup.py:96 urpm-tools/urpm-package-cleanup.py:96 msgid "Duplicate Package Options" msgstr "Дублирующиеся пакеты" -#: urpm-package-cleanup.py:99 +#: urpm-package-cleanup.py:99 urpm-tools/urpm-package-cleanup.py:99 msgid "Scan for duplicates in your rpmdb" msgstr "Найти дубликаты в локальной базе RPM" -#: urpm-package-cleanup.py:102 +#: urpm-package-cleanup.py:102 urpm-tools/urpm-package-cleanup.py:102 msgid "Scan for duplicates in your rpmdb and remove older " msgstr "Найти дубликаты в локальной базе RPM и удалить более старые" -#: urpm-package-cleanup.py:105 +#: urpm-package-cleanup.py:105 urpm-tools/urpm-package-cleanup.py:105 msgid "disable rpm scriptlets from running when cleaning duplicates" msgstr "отключить скриптлеты rpm при очистке дубликатов" -#: urpm-package-cleanup.py:107 +#: urpm-package-cleanup.py:107 urpm-tools/urpm-package-cleanup.py:107 msgid "Leaf Node Options" msgstr "Листовые узлы" -#: urpm-package-cleanup.py:110 +#: urpm-package-cleanup.py:110 urpm-tools/urpm-package-cleanup.py:110 msgid "List leaf nodes in the local RPM database" msgstr "Перечислить листовые узлы в локальной базе RPM" -#: urpm-package-cleanup.py:113 +#: urpm-package-cleanup.py:113 urpm-tools/urpm-package-cleanup.py:113 msgid "list all packages leaf nodes that do not match leaf-regex" msgstr "перечислить все пакеты-листовые узлы, имя которых не подходить под регулярное выражение" -#: urpm-package-cleanup.py:117 +#: urpm-package-cleanup.py:117 urpm-tools/urpm-package-cleanup.py:117 msgid "A package name that matches this regular expression (case insensitively) is a leaf" msgstr "Считать листовым узлом пакет, имя которого подходит по регулярному выражению (регистронезависимо)." -#: urpm-package-cleanup.py:121 +#: urpm-package-cleanup.py:121 urpm-tools/urpm-package-cleanup.py:121 msgid "do not list development packages as leaf nodes" msgstr "не считать devel пакеты листовыми узлами" -#: urpm-package-cleanup.py:124 +#: urpm-package-cleanup.py:124 urpm-tools/urpm-package-cleanup.py:124 msgid "do not list packages with files in a bin dirs as leaf nodes" msgstr "не считать пакеты, имеющие файлы в bin директориях, листовыми узлами" -#: urpm-package-cleanup.py:127 +#: urpm-package-cleanup.py:127 urpm-tools/urpm-package-cleanup.py:127 msgid "Old Kernel Options" msgstr "Старые ядра" -#: urpm-package-cleanup.py:130 +#: urpm-package-cleanup.py:130 urpm-tools/urpm-package-cleanup.py:130 msgid "Remove old kernel and kernel-devel packages" msgstr "Удалить старые ядра и их devel пакеты." -#: urpm-package-cleanup.py:133 +#: urpm-package-cleanup.py:133 urpm-tools/urpm-package-cleanup.py:133 msgid "Number of kernel packages to keep on the system (default 2)" msgstr "Количество пакетов с ядрами, которые надо сохранить в системе (по умолчанию 2)" -#: urpm-package-cleanup.py:137 +#: urpm-package-cleanup.py:137 urpm-tools/urpm-package-cleanup.py:137 msgid "Do not remove kernel-devel packages when removing kernels" msgstr "Не удалять kernel-devel пакеты при удалении ядер" -#: urpm-package-cleanup.py:306 +#: urpm-package-cleanup.py:306 urpm-tools/urpm-package-cleanup.py:306 #, python-format msgid "Warning: neither single nor multi lib arch: %s " msgstr "Некорректная архитектура: %s " -#: urpm-package-cleanup.py:417 +#: urpm-package-cleanup.py:417 urpm-tools/urpm-package-cleanup.py:417 #, python-format msgid "Not removing kernel %(kver)s-%(krel)s because it is the running kernel" msgstr "Невозможно удалить пакет %(kver)s-%(krel)s, потому что это запущенное ядро" -#: urpm-package-cleanup.py:447 +#: urpm-package-cleanup.py:447 urpm-tools/urpm-package-cleanup.py:447 #, python-format msgid "Package %(qf)s %(prob)s" msgstr "Пакет %(qf)s %(prob)s" -#: urpm-package-cleanup.py:450 +#: urpm-package-cleanup.py:450 urpm-tools/urpm-package-cleanup.py:450 msgid "Missing suggests:" msgstr "Недостающие мягкие зависимости:" -#: urpm-package-cleanup.py:458 +#: urpm-package-cleanup.py:458 urpm-tools/urpm-package-cleanup.py:458 msgid "No Problems Found" msgstr "Проблем не найдено" -#: urpm-package-cleanup.py:473 +#: urpm-package-cleanup.py:473 urpm-tools/urpm-package-cleanup.py:473 msgid "Error: Cannot remove kernels as a user, must be root" msgstr "Ошибка: Невозможно удалить ядро, нужны права root." -#: urpm-package-cleanup.py:476 +#: urpm-package-cleanup.py:476 urpm-tools/urpm-package-cleanup.py:476 msgid "Error: should keep at least 1 kernel!" msgstr "Ошибка: нужно оставить хотя бы одно ядро!" -#: urpm-package-cleanup.py:529 +#: urpm-package-cleanup.py:529 urpm-tools/urpm-package-cleanup.py:529 msgid "Error: Cannot remove packages as a user, must be root" msgstr "Ошибка: невозможно удалить пакет, нужны права root." +#: urpm-downloader.py:91 urpm-tools/urpm-downloader.py:91 +msgid "A tool for downloading RPMs and SRPMs from URPM-based linux repositories" +msgstr "Инструмент, позволяющий скачивать RPM и SRPM пакеты из URPM репозиториев" + +#: urpm-downloader.py:92 urpm-tools/urpm-downloader.py:92 +msgid "If none of the options -b, -s, -d turned on, it will be treated as -b" +msgstr "Если ни одна из опций -b, -s или -d не указана, то по умолчанию включается -b" + +#: urpm-downloader.py:93 urpm-tools/urpm-downloader.py:93 +msgid "Package name(s) to download. It can contain not only package names, but (S)RPM files too. In this case package name extracted from this file will be used" +msgstr "Имена пакетов для скачивания. Можно так же использовать имена существующих (S)RPM файлов, в этом случае информация об имени пакета будет извлечена из них." + +#: urpm-downloader.py:94 urpm-tools/urpm-downloader.py:94 +msgid "Instead of downloading files, list the URLs that would be processed" +msgstr "Выводить их URL файлов, но не скачивать их (в случае использования совместно с -a или -r src.rpm файл все равно будет скачан, так как без этого невозможно разрешить сборочные зависимости)" + +#: urpm-downloader.py:95 urpm-tools/urpm-downloader.py:95 +msgid "When downloading RPMs, resolve dependencies and also download the required packages, if they are not already installed" +msgstr "При скачивании пакета разрешать зависимости и скачивать все необходимые пакеты, но только если они не установлены в системе." + +#: urpm-downloader.py:96 urpm-tools/urpm-downloader.py:96 +msgid "When downloading RPMs, resolve dependencies and also download the required packages, even if they are already installed" +msgstr "При скачивании пакета разрешать зависимости и скачивать все необходимые пакеты, даже если они уже установлены в системе." + +#: urpm-downloader.py:97 urpm-tools/urpm-downloader.py:97 +msgid "Download binary RPMs" +msgstr "Скачивать бинарные пакеты (RPM)" + +#: urpm-downloader.py:98 urpm-tools/urpm-downloader.py:98 +msgid "Download the source RPMs (SRPMs)" +msgstr "Скачать пакеты с исходными кодами (SRPM)" + +#: urpm-downloader.py:99 urpm-tools/urpm-downloader.py:99 +msgid "Download debug RPMs" +msgstr "Скачать пакеты с отладочной информацией" + +#: urpm-downloader.py:100 urpm-tools/urpm-downloader.py:100 +msgid "Download debug RPMs and install" +msgstr "Скачать пакеты с отладочной информацией и установить" + +#: urpm-downloader.py:103 urpm-tools/urpm-downloader.py:103 +msgid "Quiet operation." +msgstr "Ничего не печатать в консоль" + +#: urpm-downloader.py:106 urpm-tools/urpm-downloader.py:106 +msgid "Exclude package(s) by regex" +msgstr "Исключить пакеты по регулярному выражению" + +#: urpm-downloader.py:107 urpm-tools/urpm-downloader.py:107 +msgid "Try to continue when error occurs" +msgstr "Пытаться игнорировать ошибки" + +#: urpm-downloader.py:108 urpm-tools/urpm-downloader.py:108 +msgid "If the file already exists, download it again and overwrite the old one" +msgstr "Если файл уже существует, скачать его заново и заменить." + +#: urpm-downloader.py:109 urpm-tools/urpm-downloader.py:109 +msgid "If package dependency can be satisfied by several packages, download all of them (by default, only the first one is downloaded)" +msgstr "Скачивать все пакеты, которые могут удовлетворить зависимости для данного пакета (по умолчанию скачивается лишь один)." + +#: urpm-downloader.py:110 urpm-tools/urpm-downloader.py:110 +msgid "If different versions of package present in repository, process them all" +msgstr "Если в репозитории присутствует несколько версий пакета, обработать их все." + +#. arg_parser.add_argument('--self-test', action='store_true', help="Test urpm-downloader end exit") +#: urpm-downloader.py:113 urpm-tools/urpm-downloader.py:113 +msgid "Specify a destination directory for the download" +msgstr "Директория, в которую будут помещены скачаные файлы" + +#: urpm-downloader.py:130 urpm-tools/urpm-downloader.py:130 +msgid "Use of --verbose with --quiet is senseless. Turning verbose mode off." +msgstr "Использование --verbose совместно с --quiet лишено смысла. Опция --verbose будет проигнорирована." + +#: urpm-downloader.py:134 urpm-tools/urpm-downloader.py:134 +msgid "Note that resolving of SRPM dependencies is not possible until SRPM downloaded. So, it will be done despite --urls" +msgstr "Помните, что разрешение сборочных зависимостей SRPM невозможно без скачивания этого файла, поэтому SRPM файл все равно будет скачан несмотря на --urls" + +#: urpm-downloader.py:375 urpm-tools/urpm-downloader.py:375 +msgid "* Downloaded: " +msgstr "* Скачано: " + +#: urpm-downloader.py:377 urpm-tools/urpm-downloader.py:377 +msgid "* File exists, skipping: " +msgstr "* Файл существует, пропускаю: " + +#: urpm-downloader.py:476 urpm-tools/urpm-downloader.py:476 +msgid "Can not download SRPM for package" +msgstr "Не удалось скачать SRPM файл для пакета" + +#: urpm-downloader.py:499 urpm-downloader.py:532 +#: urpm-tools/urpm-downloader.py:499 urpm-tools/urpm-downloader.py:532 +msgid "Can not download RPM" +msgstr "Не удалось скачать RPM файл" + +#: urpm-downloader.py:504 urpm-tools/urpm-downloader.py:504 +msgid "Resolving debug-info packages..." +msgstr "Поиск пакетов с отладочной информацией..." + +#. urpmq output. RU: Нет пакета с названием +#: urpm-downloader.py:509 urpm-tools/urpm-downloader.py:509 +msgid "No package named " +msgstr "Нет пакета с именем " + +#: urpm-downloader.py:533 urpm-tools/urpm-downloader.py:533 +msgid "Maybe you need to update urpmi database (urpmi.update -a)?" +msgstr "Может быть, нужно обновить базу urpmi (urpmi.update -a)?" + +#: urpm-downloader.py:542 urpm-tools/urpm-downloader.py:542 +msgid "Installing " +msgstr "Установка " + +#. return code is not 0 +#: urpm-downloader.py:553 urpm-tools/urpm-downloader.py:553 +#, python-format +msgid "Debug package for '%s' not found" +msgstr "Для пакета %s не найдено пакета с отладочной информацией." + +#: urpm-downloader.py:602 urpm-tools/urpm-downloader.py:602 +msgid "Parameters that end with '.rpm' seem to be local files, but the folowing files do not exist: " +msgstr "Параметры, заканчивающиеся на '.rpm' расцениваются как файлы, но следующие файлы не существуют: " + +#: urpm-downloader.py:627 urpm-tools/urpm-downloader.py:627 +msgid "Searching src.rpm file(s) in repository..." +msgstr "Поиск подходящих src.rpm файлов в репозитории..." + +#: urpm-downloader.py:629 urpm-tools/urpm-downloader.py:629 +msgid "Downloading src.rpm file(s)..." +msgstr "Скачивание src.rpm файлов..." + +#: urpm-downloader.py:659 urpm-tools/urpm-downloader.py:659 +msgid "Resolving build dependencies..." +msgstr "Разрешение сборочных зависимостей..." + +#: urpm-downloader.py:661 urpm-tools/urpm-downloader.py:661 +msgid "Resolving dependencies..." +msgstr "Разрешение зависимостей..." + +#: urpm-downloader.py:663 urpm-tools/urpm-downloader.py:663 +#, python-format +msgid "Resolved %d packages" +msgstr "Найдено пакетов: %d" + +#: urpm-downloader.py:665 urpm-tools/urpm-downloader.py:665 +msgid "Nothing to download" +msgstr "Нечего скачивать" + +#: urpm-repograph.py:86 urpm-tools/urpm-repograph.py:86 +msgid "Tool for generating dependency graph for REPOSITORY packages." +msgstr "Инструмент для создания графа зависимостей для пакетов из репозитория." + +#: urpm-repograph.py:90 urpm-tools/urpm-repograph.py:90 +msgid "Search for cross-repository references in CROSS_REPO(s) repositories." +msgstr "Искать зывисимости между репозиториями в репозиториями CROSS_REPO" + +#: urpm-repograph.py:93 urpm-tools/urpm-repograph.py:93 +msgid "Hide service messages. (About progress status etc.)" +msgstr "Не показывать служебные сообщения. (О прогрессе и т. д.)" + +#: urpm-repograph.py:95 urpm-tools/urpm-repograph.py:95 +msgid "Show warnings. (About unprovided packages etc.)" +msgstr "Показывать предупреждения (О зависимостях, не предоставляемых ни одним пакетом из репозитория и т. д.)" + +#: urpm-repograph.py:98 urpm-tools/urpm-repograph.py:98 +msgid "Process \"requires\" package dependencies. Used by default." +msgstr "Обрабатывать \"requires\" пакетные зависимости. Используется по умолчанию." + +#: urpm-repograph.py:100 urpm-tools/urpm-repograph.py:100 +msgid "Process \"suggests\" package dependencies. If used without --requires then only suggests dependencies are processed." +msgstr "Обрабатывать \"suggests\" пакетные зависимости. Если используется без --requires, то будут обрабатываться только мягкие зависимости." + +#: urpm-repograph.py:103 urpm-tools/urpm-repograph.py:103 +msgid "Process file dependencies." +msgstr "Обработка зависимостей по файлам..." + +#: urpm-repograph.py:105 urpm-tools/urpm-repograph.py:105 +msgid "Show unprovided dependencies." +msgstr "Показать зависимости, не предоставленные ни одним пакетом из репозитория." + +#: urpm-repograph.py:109 urpm-tools/urpm-repograph.py:109 +msgid "Search for packages, which are required by package PKG (PKG is a file name or package name)" +msgstr "Искать пакеты, которые нужны пакету PKG. (PKG - это имя пакета или файла)" + +#: urpm-repograph.py:111 urpm-tools/urpm-repograph.py:111 +msgid "Search for packages, which requires package PKG (PKG is a file name or package name)" +msgstr "Искать пакеты, которым нужен пакет PKG. (PKG - это имя пакета или файла)" + +#: urpm-repograph.py:115 urpm-tools/urpm-repograph.py:115 +msgid "Search for all simple loops of package dependecies." +msgstr "Поиск всех простых циклов в пакетных зависимостях." + +#: urpm-repograph.py:117 urpm-tools/urpm-repograph.py:117 +msgid "Search for alternative packages providing the same feature." +msgstr "Поиск альтернативных пакетов, предоставляющих одну и ту же зависимость." + +#: urpm-repograph.py:119 urpm-tools/urpm-repograph.py:119 +msgid "Search for all broken packages and anything beetween them" +msgstr "Искать все пакеты с нарушенными зависимостями и цепочки пакетов между ними" + +#: urpm-repograph.py:121 urpm-tools/urpm-repograph.py:121 +msgid "Output each loop or each alternative in different file. Ignored if --loops or --alternatives options are not present. OUTPUT_FILE (if present) is tracted as folder name for new files in that case." +msgstr "Выводить каждый цикл или каждую альтернативу в отдельный файл. Игнорируется, если указано --loops или --alternatives. OUTPUT_FILE (если указан) в этом случае рассматривается как имя директории для новых файлов." + +#: urpm-repograph.py:127 urpm-tools/urpm-repograph.py:127 +msgid "Change graph output to \"OUTPUT_FILE\". STDOUT by default." +msgstr "Перенаправить вывод графа в файл \"OUTPUT_FILE\". По умолчанию используется STDOUT." + +#: urpm-repograph.py:129 urpm-tools/urpm-repograph.py:129 +msgid "Do not output graph. Tool will not start working if --quiet, --nograph are present and --verbose is not. (If there is nothing to output - then nothing has to be done.)" +msgstr "Не выводить граф. Инструмент не будет ничего делать, если включены --quiet и --nograph, а verbose нет. (Если ничего не надо выводить, то и не надо ничего делать.)" + +#: urpm-repograph.py:216 urpm-tools/urpm-repograph.py:216 +#, python-format +msgid "Error: directory %s already exists" +msgstr "Ошибка: директория %s уже существует" + +#: urpm-repograph.py:229 urpm-tools/urpm-repograph.py:229 +#, python-format +msgid "Error: directory %s was not created" +msgstr "Ошибка: директория %s не была создана" + +#: urpm-repograph.py:409 urpm-tools/urpm-repograph.py:409 +msgid "Parsing synthesis." +msgstr "Обработка synthesis файла." + +#: urpm-repograph.py:435 urpm-tools/urpm-repograph.py:435 +#, python-format +msgid "Warning: Unexpected sign %(sign)s in 'provides' section of %(of)s" +msgstr "Предупреждение: неожиданный знак %(sign)s в 'provides' секции %(of)s" + +#: urpm-repograph.py:555 urpm-tools/urpm-repograph.py:555 +msgid "Reading fileslist" +msgstr "Чтение файла со списком" + +#: urpm-repograph.py:557 urpm-tools/urpm-repograph.py:557 +msgid "Error: Can't find fileslist " +msgstr "Ошибка: Не удалось найти файл со списком" + +#: urpm-repograph.py:561 urpm-tools/urpm-repograph.py:561 +msgid "Error: Can't read fileslist " +msgstr "Ошибка: Не удалось прочитать файл со списком" + +#: urpm-repograph.py:565 urpm-tools/urpm-repograph.py:565 +msgid "Error: Wrong fileslist." +msgstr "Ошибка: Неправильный файл со списком." + +#: urpm-repograph.py:578 urpm-tools/urpm-repograph.py:578 +msgid "Error: Corrupted fileslist" +msgstr "Ошибка: Поврежденный файл со списком" + +#: urpm-repograph.py:608 urpm-tools/urpm-repograph.py:608 +msgid "Warning: cross-repository dependency: " +msgstr "Предупреждение: пакет из одного репозиттория зависит от пакета из другого: " + +#: urpm-repograph.py:612 urpm-repograph.py:662 +#: urpm-tools/urpm-repograph.py:612 urpm-tools/urpm-repograph.py:662 +msgid "Warning: package has self-dependecies: " +msgstr "Предупреждение: пакет зависит от себя: " + +#: urpm-repograph.py:658 urpm-tools/urpm-repograph.py:658 +#, python-format +msgid "" +"Warning: cross-repository dependency:\n" +" package %(pkg)s is dependent from\n" +" <- %(from)s located in another repository" +msgstr "" +"Предупреждение: зависимость между репозиториями:\n" +" пакет %(pkg)s зависит от\n" +" <- %(from)s, расположенного в другом репозитории" + +#: urpm-repograph.py:691 urpm-tools/urpm-repograph.py:691 +#, python-format +msgid "Warning: needed version is absent <%(ver)s> %(rel)s required by package" +msgstr "Предупреждение: отсутствует версия <%(ver)s> %(rel)s, требуемая пакетом" + +#: urpm-repograph.py:708 urpm-tools/urpm-repograph.py:708 +#, python-format +msgid "Warning: Package %(pkg)s unprovided by %(by)s" +msgstr "Предупреждение: Файл %(by)s требуется пакету %(pkg)s, но не предоставляется ни одним пакетом" + +#: urpm-repograph.py:740 urpm-tools/urpm-repograph.py:740 +msgid "Finding dependencies." +msgstr "Поиск зависимостей." + +#: urpm-repograph.py:749 urpm-tools/urpm-repograph.py:749 +#, python-format +msgid "" +"Warning: can't find <%(ask)s> required by package\n" +" <%(pkg)s>" +msgstr "" +"Предупреждение: не удалось найти <%(ask)s>, требуемый пакетом\n" +" <%(pkg)s>" + +#: urpm-repograph.py:812 urpm-tools/urpm-repograph.py:812 +msgid "Total cross-referenced packages: " +msgstr "Всего пакетов с кросс-платформенными зависимостями: " + +#: urpm-repograph.py:816 urpm-tools/urpm-repograph.py:816 +msgid "Total unprovided packages: " +msgstr " Всего пакетов с ничем не предоставленными зависимостями: " + +#: urpm-repograph.py:833 urpm-tools/urpm-repograph.py:833 +msgid "Calculating colors." +msgstr "Вычисление цветов." + +#: urpm-repograph.py:1112 urpm-tools/urpm-repograph.py:1112 +msgid "Non-cycle nodes removed: " +msgstr "Нецикличных узлов удалено: " + +#: urpm-repograph.py:1113 urpm-tools/urpm-repograph.py:1113 +msgid "Cyclic packages: " +msgstr "Зацикленных пакетов осталось: " + +#: urpm-repograph.py:1130 urpm-tools/urpm-repograph.py:1130 +#, python-format +msgid "Worktime: %s seconds" +msgstr "Время работы: %s секунд" + +#: urpm-repograph.py:1136 urpm-tools/urpm-repograph.py:1136 +msgid "Searching loops." +msgstr "Поиск циклов." + +#: urpm-repograph.py:1140 urpm-repograph.py:1188 +#: urpm-tools/urpm-repograph.py:1140 urpm-tools/urpm-repograph.py:1188 +msgid "End of search." +msgstr "Конец поиска." + +#: urpm-repograph.py:1141 urpm-tools/urpm-repograph.py:1141 +#, python-format +msgid "Loops search: %s seconds" +msgstr "Поиск циклов: %s секунд" + +#: urpm-repograph.py:1145 urpm-tools/urpm-repograph.py:1145 +#, python-format +msgid "Total: %s loops." +msgstr "Всего: %s циклов." + +#: urpm-repograph.py:1151 urpm-tools/urpm-repograph.py:1151 +msgid "Loop " +msgstr "Цикл " + +#: urpm-repograph.py:1168 urpm-tools/urpm-repograph.py:1168 +msgid "Searching alternatives." +msgstr "Поиск альтернатив." + +#: urpm-repograph.py:1180 urpm-tools/urpm-repograph.py:1180 +#, python-format +msgid "Total: %d alternatives." +msgstr "Всего: %d альтернатив." + +#: urpm-repograph.py:1182 urpm-tools/urpm-repograph.py:1182 +msgid "Alternative " +msgstr "Альтернатива " + +#: urpm-repograph.py:1182 urpm-tools/urpm-repograph.py:1182 +msgid " is provided by:" +msgstr " предоставляется:" + +#: urpm-repograph.py:1260 urpm-tools/urpm-repograph.py:1260 +msgid "Searching for broken packages." +msgstr "Поиск нарушенных зависимостей." + +#: urpm-repograph.py:1266 urpm-tools/urpm-repograph.py:1266 +msgid "Searching for packages REQUIRED by " +msgstr "Поиск пакетов, требуемых " + +#: urpm-repograph.py:1268 urpm-tools/urpm-repograph.py:1268 +msgid "Searching for packages that REQUIRE " +msgstr "Поиск пакетов, требующих " + +#: urpm-repograph.py:1276 urpm-tools/urpm-repograph.py:1276 +#, python-format +msgid "Level %d dependency." +msgstr "Зависимость уровня %d." + +#: urpm-repograph.py:1355 urpm-tools/urpm-repograph.py:1355 +msgid "Remaking structures." +msgstr "Пересоздание структур." + +#: urpm-repograph.py:1367 urpm-tools/urpm-repograph.py:1367 +msgid "Error: can't find package name or filename \"" +msgstr "Ошибка: Не удалось найти имя пакета или файла \"" + +#: urpm-repograph.py:1401 urpm-tools/urpm-repograph.py:1401 +msgid "Do not use -q/--quiet and -n/--nograph without -v/--verbose together." +msgstr "Не используйте -q/--quiet совместно с -n/--nograph без -v/--verbose." + +#: urpm-repograph.py:1402 urpm-tools/urpm-repograph.py:1402 +msgid "That way there is no information to output anywhere. Nothing will be done." +msgstr "В этом случае нет информации, которую можно вывести. Ничего не будет сделано." + +#: urpm-repograph.py:1405 urpm-tools/urpm-repograph.py:1405 +msgid "Do not use -u/--unprovided and -b/--broken options together." +msgstr "Не используйте -u/--unprovided и -b/--broken вместе." + +#: urpm-repograph.py:1406 urpm-tools/urpm-repograph.py:1406 +msgid "-b does everything that do -u and a little more." +msgstr "-b делает все то же, что и -u, и немного больше." + +#: urpm-tools/urpm-reposync.py:768 +msgid "Some packages can not be installed dew to unresolved dependencies: " +msgstr "Некоторые пакеты не могут быть установлены из-за неразрешенных зависимостей:" + +#: urpm-tools/urpm-reposync.py:771 +msgid "Contact repository maintaiers and send them this information, please." +msgstr "Пожалуйста, отправьте разработчикам дистрибутива эту информацию." + #~ msgid "Running trunsaction..." #~ msgstr "Запуск транзакции..." @@ -1180,243 +1276,3 @@ msgstr "Ошибка: невозможно удалить пакет, нужны #~ msgid "usage: " #~ msgstr "ssdgfdf" - -#~ msgid "" -#~ "URPM Repos Closure Checker [_1] for Mandriva Linux\n" -#~ "A tool for checking closure of a set of RPM packages\n" -#~ "Copyright (C) 2012 ROSA Laboratory\n" -#~ "License: GNU GPL\n" -#~ "\n" -#~ "Usage: [_2] [options]\n" -#~ "Example: [_2] --hdlist=hdlist.txt\n" -#~ "\n" -#~ "More info: [_2] --help\n" -#~ msgstr "" -#~ "URPM Repos Closure Checker [_1] для Mandriva Linux\n" -#~ "Инструмент для определения замкнутости набора RPM пакетов\n" -#~ "Copyright (C) 2012 Лаборатория РОСА\n" -#~ "Лицензия: GNU GPL\n" -#~ "\n" -#~ "Использование: [_2] [options]\n" -#~ "Пример: [_2] --hdlist=hdlist.txt\n" -#~ "\n" -#~ "Больше информации: [_2] --help\n" - -#~ msgid "" -#~ "\n" -#~ "NAME:\n" -#~ " URPM Repos Closure Checker 1.0 for Mandriva Linux\n" -#~ " A tool for checking closure of a set of RPM packages\n" -#~ "\n" -#~ "USAGE:\n" -#~ " [_1] --hdlist=hdlist.txt\n" -#~ " [_1] --hdlist=http://mirror.yandex.ru/mandriva/.../synthesis.hdlist.cz\n" -#~ " [_1] --dir=rpms/ --static --file-deps=file-deps.txt\n" -#~ " [_1] --list=list.txt --dynamic\n" -#~ "\n" -#~ "OPTIONS:\n" -#~ " -h|-help\n" -#~ " Print this help.\n" -#~ "\n" -#~ " -v|-version\n" -#~ " Print version information.\n" -#~ "\n" -#~ " -hdlist \n" -#~ " Path or URL of HDlist (synthesis) to check.\n" -#~ "\n" -#~ " -d|-dir \n" -#~ " The directory with RPM packages to check.\n" -#~ "\n" -#~ " -l|-list \n" -#~ " The list of packages to check.\n" -#~ "\n" -#~ " -add|-update \n" -#~ " The directory with RPM packages that should\n" -#~ " be added to the repository or updated.\n" -#~ "\n" -#~ " -file-deps \n" -#~ " Read file-deps to ignore some unresolved\n" -#~ " dependencies.\n" -#~ "\n" -#~ " -s|-static\n" -#~ " Check statically if all required dependencies are\n" -#~ " satisfied by provided dependencies in the set of\n" -#~ " RPM packages.\n" -#~ "\n" -#~ " -dynamic\n" -#~ " Install a set of RPM packages to the local chroot\n" -#~ " and check if extra packages were installed.\n" -#~ "\n" -#~ " -r|-check-release\n" -#~ " Check installation media (DVD).\n" -#~ "\n" -#~ " -sign|-check-signature\n" -#~ " Validate package signatures.\n" -#~ "\n" -#~ " -noclean\n" -#~ " Do not clean urpmi cache.\n" -#~ "\n" -#~ " -root \n" -#~ " Where to install packages.\n" -#~ " Default:\n" -#~ " /tmp/...\n" -#~ "\n" -#~ "EXIT CODES:\n" -#~ " 0 - Suceess. The tool has run without any errors\n" -#~ " non-zero - Failed or the tool has run with errors. In particular:\n" -#~ " 1 - Failed to run the tool\n" -#~ " 2 - Discovered dependency problems\n" -#~ " \n" -#~ "\n" -#~ msgstr "" -#~ "\n" -#~ "ИМЯ:\n" -#~ " URPM Repos Closure Checker 1.0 для Mandriva Linux\n" -#~ " Инструмент для определения замкнутости набора RPM пакетов\n" -#~ "\n" -#~ "ИСПОЛЬЗОВАНИЕ:\n" -#~ " [_1] --hdlist=hdlist.txt\n" -#~ " [_1] --hdlist=http://mirror.yandex.ru/mandriva/.../synthesis.hdlist.cz\n" -#~ " [_1] --dir=rpms/ --static --file-deps=file-deps.txt\n" -#~ " [_1] --list=list.txt --dynamic\n" -#~ "\n" -#~ "ОПЦИИ:\n" -#~ " -h|-help\n" -#~ " Показать это сообщение.\n" -#~ "\n" -#~ " -v|-version\n" -#~ " Показать информацию о версии программы.\n" -#~ "\n" -#~ " -hdlist <путь>\n" -#~ " Путь к HDlist (synthesis), который надо проверить.\n" -#~ "\n" -#~ " -d|-dir <путь>\n" -#~ " Директория с RPM пакетами, которую надо проверить.\n" -#~ "\n" -#~ " -l|-list <путь>\n" -#~ " Список пакетов, который надо проверить.\n" -#~ "\n" -#~ " -add|-update <путь>\n" -#~ " Директория с RPM пакетами которые\n" -#~ " надо добавить в репозиторий или обновить.\n" -#~ "\n" -#~ " -file-deps <путь>\n" -#~ " Использовать файл file-deps для игнорирования\n" -#~ " некоторых зависимостей.\n" -#~ "\n" -#~ " -s|-static\n" -#~ " Статический анализ зависимостей.\n" -#~ "\n" -#~ " -dynamic\n" -#~ " Динамический анализ зависимостей (через установку пакетов).\n" -#~ "\n" -#~ " -r|-check-release\n" -#~ " Проверить установочный диск (CD/DVD).\n" -#~ "\n" -#~ " -sign|-check-signature\n" -#~ " Проверить сигнатуры пакетов.\n" -#~ "\n" -#~ " -noclean\n" -#~ " Не очищать кэш инструментария URPM.\n" -#~ "\n" -#~ " -root <путь>\n" -#~ " Куда устанавливать пакеты.\n" -#~ " Путь по-умолчанию:\n" -#~ " /tmp/...\n" -#~ "\n" -#~ "КОДЫ ОШИБОК:\n" -#~ " 0 - Успех. Набор пакетов замкнут. Ошибок не произошло.\n" -#~ " 1 - Ошибки во время выполнения программы.\n" -#~ " 2 - Набор пакетов не замкнут.\n" -#~ " \n" -#~ "\n" - -#~ msgid "can't open file '[_1]': [_2]\n" -#~ msgstr "не удалось открыть файл '[_1]': [_2]\n" - -#~ msgid "ERROR: you should be root\n" -#~ msgstr "ОШИБКА: требуются права администратора\n" - -#~ msgid "ERROR: cannot access '[_1]'\n" -#~ msgstr "ОШИБКА: не удалось найти '[_1]'\n" - -#~ msgid "ERROR: the list of packages is empty\n" -#~ msgstr "ОШИБКА: список пакетов пуст\n" - -#~ msgid "ERROR: file '[_1]' is not RPM package\n" -#~ msgstr "ОШИБКА: файл '[_1]' не является RPM пакетом\n" - -#~ msgid "ERROR: --dir or --list option should be specified\n" -#~ msgstr "ОШИБКА: одна из следующих опций должна быть предоставлена: --dir или --list\n" - -#~ msgid "" -#~ "Extra Packages:\n" -#~ "\n" -#~ msgstr "" -#~ "Дополнительные Пакеты:\n" -#~ "\n" - -#~ msgid " (required by: [_1])" -#~ msgstr " (требуется в: [_1])" - -#~ msgid "" -#~ "Broken Packages:\n" -#~ "\n" -#~ msgstr "" -#~ "Сломанные Пакеты:\n" -#~ "\n" - -#~ msgid "Report has been generated to:" -#~ msgstr "Отчет создан:" - -#~ msgid "Checking RPMs ...\n" -#~ msgstr "Проверка RPM пакетов ...\n" - -#~ msgid "Checking [_1]\n" -#~ msgstr "Проверка [_1]\n" - -#~ msgid " FAILED: invalid signature\n" -#~ msgstr " ОШИБКА: некорректная сигнатура\n" - -#~ msgid "" -#~ "Broken Signature:\n" -#~ "\n" -#~ msgstr "" -#~ "Некорректные сигнатуры:\n" -#~ "\n" - -#~ msgid "ERROR: --hdlist, --dir or --list option should be specified\n" -#~ msgstr "ОШИБКА: одна из следующих опций должна быть предоставлена: --hdlist, --dir or --list\n" - -#~ msgid "Downloading HDlist ...\n" -#~ msgstr "Загрузка HDlist-файла ...\n" - -#~ msgid "ERROR: cannot extract '[_1]'\n" -#~ msgstr "ОШИБКА: не удалось распаковать '[_1]'\n" - -#~ msgid "ERROR: unknown format of hdlist\n" -#~ msgstr "ОШИБКА: неизвестный формат HDlist-файла\n" - -#~ msgid "Checking HDlist ...\n" -#~ msgstr "Проверка HDlist-файла ...\n" - -#~ msgid "Unresolved \"Required\" Dependencies ([_1]):" -#~ msgstr "Сломанные \"Requires\" Зависимости ([_1]):" - -#~ msgid "Unresolved \"Suggested\" Dependencies ([_1]):" -#~ msgstr "Сломанные \"Suggests\" Зависимости ([_1]):" - -#~ msgid "Broken Packages ([_1]):" -#~ msgstr "Сломанные Пакеты ([_1]):" - -#~ msgid "" -#~ "URPM Repos Closure Checker [_1] for Mandriva Linux\n" -#~ "Copyright (C) 2012 ROSA Laboratory\n" -#~ "License: GPL \n" -#~ "This program is free software: you can redistribute it and/or modify it.\n" -#~ "\n" -#~ "Written by Andrey Ponomarenko.\n" -#~ msgstr "" -#~ "URPM Repos Closure Checker [_1] для Mandriva Linux\n" -#~ "Copyright (C) 2012 Лаборатория РОСА\n" -#~ "Лицензия: GPL \n" diff --git a/urpm-repoclosure.pl b/urpm-repoclosure.pl index 1689c6d..0d909f0 100755 --- a/urpm-repoclosure.pl +++ b/urpm-repoclosure.pl @@ -1,14 +1,14 @@ #!/usr/bin/perl ######################################################## -# URPM Repos Closure Checker 1.3.1 for Linux +# URPM Repo Closure Checker 1.5.1 for Linux # A tool for checking closure of a set of RPM packages # -# Copyright (C) 2012 ROSA Laboratory +# Copyright (C) 2011-2012 ROSA Laboratory # Written by Andrey Ponomarenko # # PLATFORMS # ========= -# Linux (ROSA, Mandriva) +# Linux (ROSA, Mandriva, Mageia) # # REQUIREMENTS # ============ @@ -31,46 +31,30 @@ use Getopt::Long; Getopt::Long::Configure ("posix_default", "no_ignore_case"); use Cwd qw(abs_path cwd); +use POSIX qw(strftime); use File::Path qw(mkpath rmtree); use File::Temp qw(tempdir); use File::Copy qw(copy move); use Data::Dumper; -use Locale::gettext; use strict; -my $TOOL_VERSION = "1.3.1"; +my $TOOL_VERSION = "1.5.1"; my $CmdName = get_filename($0); my ($Help, $ShowVersion, $RPMlist, $RPMdir, $StaticMode, -$DynamicMode, $CheckRelease, $CheckSignature, $SelectRepos, -$NoClean, $Root, $HDlist, $FileDeps, $ResDir, $AddRPMs); +$DynamicMode, $NoClean, $HDlist, $FileDeps, $ReportDir, +$AddRPMs, $RTitle, $DepHDlists, $UpdateHDlists, $Profile, +$Target, $ExtInfo); -textdomain("urpm-tools"); - -sub gettext_(@) -{ - my ($Str, @Params) = @_; - if(not $Str) { - return ""; - } - $Str = gettext($Str); - foreach my $N (1 .. $#Params+1) - { - my $P = $Params[$N-1]; - $Str=~s/\[_$N\]/$P/g; - } - return $Str; -} - -my $ShortUsage = gettext_("URPM Repos Closure Checker [_1] for Mandriva Linux +my $ShortUsage = "URPM Repo Closure Checker $TOOL_VERSION A tool for checking closure of a set of RPM packages Copyright (C) 2012 ROSA Laboratory License: GNU GPL -Usage: [_2] [options] -Example: [_2] --hdlist=hdlist.txt +Usage: $CmdName [options] +Example: $CmdName --hdlist=hdlist.txt -More info: [_2] --help\n", $TOOL_VERSION, $CmdName); +More info: $CmdName --help\n"; if($#ARGV==-1) { print $ShortUsage."\n"; @@ -86,12 +70,14 @@ GetOptions("h|help!" => \$Help, "file-deps=s" => \$FileDeps, "s|static!" => \$StaticMode, "dynamic!" => \$DynamicMode, - "r|check-release!" => \$CheckRelease, - "sign|check-signature!" => \$CheckSignature, - "media=s" => \$SelectRepos, "noclean!" => \$NoClean, - "root=s" => \$Root, - "o|res=s" => \$ResDir + "report-dir=s" => \$ReportDir, + "title=s" => \$RTitle, + "dep-hdlists=s" => \$DepHDlists, + "update-hdlists=s" => \$UpdateHDlists, + "profile=s" => \$Profile, + "target=s" => \$Target, + "info=s" => \$ExtInfo ) or ERR_MESSAGE(); my %EXIT_CODES = ( @@ -100,16 +86,15 @@ my %EXIT_CODES = ( "FAILED" => 2 ); -my $HelpMessage = gettext_(" +my $HelpMessage = " NAME: - URPM Repos Closure Checker 1.0 for Mandriva Linux + URPM Repo Closure Checker $TOOL_VERSION A tool for checking closure of a set of RPM packages USAGE: - [_1] --hdlist=hdlist.txt - [_1] --hdlist=http://mirror.yandex.ru/mandriva/.../synthesis.hdlist.cz - [_1] --dir=rpms/ --static --file-deps=file-deps.txt - [_1] --list=list.txt --dynamic + $CmdName --hdlist=http://mirror.yandex.ru/mandriva/.../synthesis.hdlist.cz + $CmdName --dir=rpms/ --static --file-deps=file-deps.txt + $CmdName --list=list.txt --dynamic OPTIONS: -h|-help @@ -127,9 +112,8 @@ OPTIONS: -l|-list The list of packages to check. - -add|-update - The directory with RPM packages that should - be added to the repository or updated. + -updates + The directory with updated RPM packages. -file-deps Read file-deps to ignore some unresolved @@ -144,19 +128,73 @@ OPTIONS: Install a set of RPM packages to the local chroot and check if extra packages were installed. - -r|-check-release - Check installation media (DVD). - - -sign|-check-signature - Validate package signatures. - -noclean Do not clean urpmi cache. + + -report-dir + The directory where to generate report(s). + + -title + Name of the repository in the title of HTML report. + + -dep-hdlists + The list of HDlists that will + be used to resolve dependencies. + + -update-hdlists + The list of HDlists from update repositories. + + -profile + Profile of the test run. + + -target + Run particular test described in the profile. + + -info + The list of paths to info.xml.lzma files. + +PROFILE FORMAT: + + + + 2012lts + + + + ROSA 2012 LTS + + + + i586 + + +
+ contrib +
+ + + http://abf.rosalinux.ru/downloads/rosa2012lts/repository/i586/contrib/release/media_info/synthesis.hdlist.cz + + + + http://abf.rosalinux.ru/downloads/rosa2012lts/repository/i586/contrib/updates/media_info/synthesis.hdlist.cz + + + + http://abf.rosalinux.ru/downloads/rosa2012lts/repository/i586/main/release/media_info/synthesis.hdlist.cz + http://abf.rosalinux.ru/downloads/rosa2012lts/repository/i586/main/updates/media_info/synthesis.hdlist.cz + + + + http://abf.rosalinux.ru/downloads/rosa2012lts/repository/i586/contrib/release/media_info/info.xml.lzma + http://abf.rosalinux.ru/downloads/rosa2012lts/repository/i586/contrib/updates/media_info/info.xml.lzma + +
+ + + ... + - -root - Where to install packages. - Default: - /tmp/... EXIT CODES: 0 - Suceess. The tool has run without any errors @@ -164,7 +202,7 @@ EXIT CODES: 1 - Failed to run the tool 2 - Discovered dependency problems -\n", $CmdName); +\n"; sub HELP_MESSAGE() { print $HelpMessage; @@ -181,12 +219,43 @@ my $RPM_CACHE = "/var/cache/urpmi/rpms"; my $TMP_DIR = tempdir(CLEANUP=>1); my %InstalledPackage; my %RequiredBy; -my $TEST_MEDIA = "test_media"; my %Packages; my %BrokenSignature; my %InstallFailed; my $RESULTS_DIR = "repoclosure_reports"; +sub parseTag(@) +{ + my $CodeRef = shift(@_); + my $Tag = shift(@_); + if(not $Tag or not $CodeRef) { + return undef; + } + my $Sp = 0; + if(@_) { + $Sp = shift(@_); + } + my $Start = index(${$CodeRef}, "<$Tag>"); + if($Start!=-1) + { + my $End = index(${$CodeRef}, ""); + if($End!=-1) + { + my $TS = length($Tag)+3; + my $Content = substr(${$CodeRef}, $Start, $End-$Start+$TS, ""); + substr($Content, 0, $TS-1, ""); # cut start tag + substr($Content, -$TS, $TS, ""); # cut end tag + if(not $Sp) + { + $Content=~s/\A\s+//g; + $Content=~s/\s+\Z//g; + } + return $Content; + } + } + return undef; +} + sub appendFile($$) { my ($Path, $Content) = @_; @@ -194,7 +263,7 @@ sub appendFile($$) if(my $Dir = get_dirname($Path)) { mkpath($Dir); } - open(FILE, ">>".$Path) || die gettext_("can't open file \'[_1]\': [_2]\n", $Path, $!); + open(FILE, ">>".$Path) || die "can't open file \'$Path\': $!\n"; print FILE $Content; close(FILE); } @@ -206,7 +275,7 @@ sub writeFile($$) if(my $Dir = get_dirname($Path)) { mkpath($Dir); } - open (FILE, ">".$Path) || die gettext_("can't open file \'[_1]\': [_2]\n", $Path, $!); + open (FILE, ">".$Path) || die "can't open file \'$Path\': $!\n"; print FILE $Content; close(FILE); } @@ -248,55 +317,16 @@ sub searchRPMs($) return sort {lc($a) cmp lc($b)} @RPMs; } -sub addMedia($) -{ - my $Dir = $_[0]; - if(not $Dir or not -d $Dir) { - return; - } - my %Media = map {$_=>1} split(/\n+/, `urpmq --list-media`); - if($Media{$TEST_MEDIA}) { - removeMedia(); - } - $Dir = abs_path($Dir); - system("/usr/sbin/urpmi.addmedia $TEST_MEDIA $Dir"); - system("/usr/sbin/urpmi.update $TEST_MEDIA"); -} - -sub removeMedia() { - system("/usr/sbin/urpmi.removemedia $TEST_MEDIA"); -} - sub installPackage($) { my $Package = $_[0]; my $Cmd = "/usr/sbin/urpmi"; - if($CheckRelease) - { # from CD or DVD - $Cmd .= " --media=$TEST_MEDIA"; - } - elsif($SelectRepos) - { - if(-d $SelectRepos) { - $Cmd .= " --media=$TEST_MEDIA"; - } - else { - $Cmd .= " --media=$SelectRepos"; - } - } # create root where to install packages if(not -d $TMP_DIR."/root") { mkpath($TMP_DIR."/root"); } - if(not $CheckRelease) { - $Cmd .= " --no-install"; - } - if($Root) { - $Cmd .= " --root=\"$Root\""; - } - else { - $Cmd .= " --root=\"$TMP_DIR/root\""; - } + $Cmd .= " --no-install"; + $Cmd .= " --root=\"$TMP_DIR/root\""; $Cmd .= " --noclean --auto --force"; $Cmd .= " $Package"; print "Running $Cmd\n"; @@ -311,22 +341,12 @@ sub installPackage($) $InstallFailed{getPName($Package)}=1; print " FAILED: due to $Reason $Dep\n"; } - if($CheckRelease) - { # installed - while($Log=~s/(installing\s+)([^\/\s]+\.rpm)(\s|\Z)/$1/) - { - my $RpmName = $2; - print " $RpmName\n"; - } - } - else - { # downloaded - while($Log=~s/(\/)([^\/\s]+\.rpm)(\s|\Z)/$1$3/) - { - my $RpmName = $2; - print " $RpmName\n"; - $RequiredBy{getPName($RPM_CACHE."/".$RpmName)}=getPName($Package); - } + # downloaded + while($Log=~s/(\/)([^\/\s]+\.rpm)(\s|\Z)/$1$3/) + { + my $RpmName = $2; + print " $RpmName\n"; + $RequiredBy{getPName($RPM_CACHE."/".$RpmName)} = getPName($Package); } } @@ -525,7 +545,7 @@ sub checkSignature($) sub checkRoot() { if(not -w "/usr") { - print STDERR gettext_("ERROR: you should be root\n"); + print STDERR "ERROR: you should be root\n"; exit(1); } } @@ -535,12 +555,12 @@ sub readRPMlist($$) my ($Path, $Type) = @_; if(not -f $Path) { - print STDERR gettext_("ERROR: cannot access \'[_1]\'\n", $Path); + print STDERR "ERROR: cannot access \'$Path\'\n"; exit(1); } my @RPMs = split(/\s+/, readFile($Path)); if($#RPMs==-1) { - print STDERR gettext_("ERROR: the list of packages is empty\n"); + print STDERR "ERROR: the list of packages is empty\n"; exit(1); } if($Type eq "RPMs") @@ -549,12 +569,12 @@ sub readRPMlist($$) { if($P!~/\.rpm\Z/) { - print STDERR gettext_("ERROR: file \'[_1]\' is not RPM package\n", $P); + print STDERR "ERROR: file \'$P\' is not RPM package\n"; exit(1); } elsif(not -f $P) { - print STDERR gettext_("ERROR: cannot access \'[_1]\'\n", $P); + print STDERR "ERROR: cannot access \'$P\'\n"; exit(1); } } @@ -562,55 +582,12 @@ sub readRPMlist($$) return @RPMs; } -sub checkRelease() -{ - checkRoot(); - if(not $RPMdir and not $RPMlist) - { - print STDERR gettext_("ERROR: --dir or --list option should be specified\n"); - exit(1); - } - clearCache(); - my @RPMs = (); - if($RPMlist) - { - @RPMs = readRPMlist($RPMlist, "RPMs"); - $RPMdir = get_dirname($RPMs[0]); - if(not $RPMdir) { - $RPMdir = "."; - } - } - else - { - if(not -d $RPMdir) - { - print STDERR gettext_("ERROR: cannot access \'[_1]\'\n", $RPMdir); - exit(1); - } - @RPMs = searchRPMs($RPMdir); - } - addMedia($RPMdir); - foreach my $Path (@RPMs) - { # add to cache - if(not -f $RPM_CACHE."/".get_filename($Path)) { - # copy($Path, $RPM_CACHE); - } - } - foreach my $Path (@RPMs) - { - installPackage($Path); - $Packages{get_filename($Path)} = 1; - } - removeMedia(); - checkResult(); -} - sub dynamicCheck() { checkRoot(); if(not $RPMdir and not $RPMlist) { - print STDERR gettext_("ERROR: --dir or --list option should be specified\n"); + print STDERR "ERROR: --dir or --list option should be specified\n"; exit(1); } clearCache(); @@ -619,7 +596,7 @@ sub dynamicCheck() { # --dir option if(not -d $RPMdir) { - print STDERR gettext_("ERROR: cannot access \'[_1]\'\n", $RPMdir); + print STDERR "ERROR: cannot access \'$RPMdir\'\n"; exit(1); } @RPMs = searchRPMs($RPMdir); @@ -627,33 +604,21 @@ sub dynamicCheck() { # add to cache copy($Path, $RPM_CACHE); } - if(-d $SelectRepos) { - addMedia($SelectRepos); - } foreach my $Path (@RPMs) { installPackage($Path); $Packages{get_RPMname($Path)} = 1; $Packages{get_filename($Path)} = 1; } - if(-d $SelectRepos) { - removeMedia(); - } } elsif($RPMlist) { @RPMs = readRPMlist($RPMlist, "Names"); - if(-d $SelectRepos) { - addMedia($SelectRepos); - } foreach my $Name (@RPMs) { installPackage($Name); $Packages{$Name} = 1; } - if(-d $SelectRepos) { - removeMedia(); - } } checkResult(); } @@ -677,10 +642,8 @@ sub isInstalled($) if($InstallFailed{$Name}) { return 0; } - if(not $CheckRelease) { - if(not $InstalledPackage{$Name}) { - return 0; - } + if(not $InstalledPackage{$Name}) { + return 0; } return 1; } @@ -704,12 +667,12 @@ sub checkResult() } if(my @Names = sort {lc($a) cmp lc($b)} keys(%ExtraPackages)) { - my $Report = gettext_("Extra Packages:\n\n"); + my $Report = "Extra Packages:\n\n"; foreach my $Name (@Names) { $Report .= $Name; if(my $Req = $RequiredBy{$Name}) { - $Report .= gettext_(" (required by: [_1])", $Req); + $Report .= " (required by: $Req)"; } $Report .= "\n"; } @@ -718,14 +681,14 @@ sub checkResult() } if(my @Names = sort {lc($a) cmp lc($b)} keys(%BrokenPackages)) { - my $Report = gettext_("Broken Packages:\n\n"); + my $Report = "Broken Packages:\n\n"; foreach my $Name (@Names) { $Report .= "$Name\n"; } print $Report; writeFile("$RESULTS_DIR/broken-packages.txt", $Report); } - print gettext_("Report has been generated to:"); + print "Report has been generated to:"; print "\n $RESULTS_DIR/extra-packages.txt\n $RESULTS_DIR/broken-packages.txt\n"; if(keys(%ExtraPackages) or keys(%BrokenPackages)) { @@ -736,53 +699,6 @@ sub checkResult() } } -sub sigCheck() -{ - if(not $RPMdir and not $RPMlist) - { - print STDERR gettext_("ERROR: --dir or --list option should be specified\n"); - exit(1); - } - print gettext_("Checking RPMs ...\n"); - my @RPMs = (); - if($RPMdir) - { - if(not -d $RPMdir) - { - print STDERR gettext_("ERROR: cannot access \'[_1]\'\n", $RPMdir); - exit(1); - } - @RPMs = searchRPMs($RPMdir); - } - elsif($RPMlist) { - @RPMs = readRPMlist($RPMlist, "RPMs"); - } - foreach my $Path (@RPMs) - { - print gettext_("Checking [_1]\n", get_filename($Path)); - if(not checkSignature($Path)) { - print gettext_(" FAILED: invalid signature\n"); - } - } - if(my @Names = sort {lc($a) cmp lc($b)} keys(%BrokenSignature)) - { - my $Report = gettext_("Broken Signature:\n\n"); - foreach my $Name (@Names) { - $Report .= "$Name\n"; - } - print $Report; - writeFile("$RESULTS_DIR/report.txt", $Report); - } - print gettext_("Report has been generated to:"); - print "\n $RESULTS_DIR/report.txt\n"; - if(keys(%BrokenSignature)) { - exit($EXIT_CODES{"FAILED"}); - } - else { - exit($EXIT_CODES{"SUCCESS"}); - } -} - sub readLineNum($$) { my ($Path, $Num) = @_; @@ -833,19 +749,207 @@ sub readDeps($$$) } } +sub downloadFile($) +{ + my $Path = $_[0]; + my $DownloadTo = $TMP_DIR."/extract/".get_filename($Path); + $DownloadTo=~s/\.cz/\.gz/g; # cz == gz + my $Dir = get_dirname($DownloadTo); + mkdir($Dir); + system("wget -U '' --no-check-certificate \"$Path\" --connect-timeout=5 --tries=1 --output-document=\"$DownloadTo\" >/dev/null 2>&1"); + if(not -f $DownloadTo + or not -s $DownloadTo) + { + print STDERR "ERROR: cannot access \'$Path\'\n"; + exit(1); + } + + my %Extract = ( + "xz"=>"unxz", + "lzma"=>"unlzma", + "gz"=>"gunzip" + ); + if($DownloadTo=~/\.(gz|xz|lzma)\Z/) + { + my ($Format, $Cmd) = ($1, $Extract{$1}); + if($Cmd) { + system("cd $Dir && $Cmd $DownloadTo"); + } + my @Files = cmd_find($Dir, "f", "", ""); + if(not @Files) + { + print STDERR "ERROR: cannot extract \'$Path\'\n"; + exit(1); + } + unlink($DownloadTo); + $DownloadTo = $Files[0]; + } + return $DownloadTo; +} + +sub readInfo($$) +{ + my ($Path, $Info) = @_; + my $Content = ""; + if($Path=~/(http|https|ftp):\/\//) + { + print "Downloading Info ...\n"; + $Path = downloadFile($Path); + } + else + { + if(not -f $Path) + { + print STDERR "ERROR: cannot access \'$Path\'\n"; + exit(1); + } + } + + my $RPM = ""; + open(INFO, $Path) || die "can't open file \'$Path\': $!\n"; + while() + { + if(index($_, "fn=")!=-1) + { + if(/fn=\"(.+?)\"/) { + $RPM = $1; + } + else { + $RPM = ""; + } + } + if($RPM) + { + if(index($_, "sourcerpm=")!=-1) + { + if(/sourcerpm=\'(.+?)\'/) + { + my $SRPM = $1; + $SRPM=~s/\.src\.rpm//g; + $SRPM=~s/\.srpm//g; + $Info->{$RPM}{"SRPM"} = $SRPM; + } + else { + $RPM = ""; + } + } + } + } + close(INFO); + rmtree($TMP_DIR."/extract/"); +} + +sub readHDlist($$$$$) +{ + my ($Path, $Dep, $RPMdep, $Registered, $Kind) = @_; + + my $Content = ""; + if($Path=~/(http|https|ftp):\/\//) + { + print "Downloading $Kind HDlist ...\n"; + my $DownloadTo = downloadFile($Path); + if(my $Line = readLineNum($DownloadTo, 1)) + { + if($Line!~/\A\@\w+\@/) + { + print STDERR "ERROR: unknown format of hdlist\n"; + exit(1); + } + } + $Content = readFile($DownloadTo); + } + else + { + if(not -f $Path) + { + print STDERR "ERROR: cannot access \'$Path\'\n"; + exit(1); + } + $Content = readFile($Path); + } + print "Reading $Kind HDlist ...\n"; + + my $TKind = $Kind; + if($TKind eq "Update") { + $TKind = "Target"; + } + + my %PkgName = (); + my $Name = ""; + foreach (reverse(split(/\n/, $Content))) + { + $_=~s/\A\@//g; + my @Parts = split("\@", $_); + my $Type = shift(@Parts); + if($Type eq "info") + { + if($Kind eq "Update") + { + if($Name) + { # register previous + $Registered->{$TKind}{$PkgName{$Name}} = 1; + } + } + $Name = $Parts[0]; + next; + } + if(my $PName = parse_RPMname($Name)) + { + $PkgName{$Name} = $PName; + if($Kind eq "Target") + { + if($Registered->{$TKind}{$PName}) + { # already added + next; + } + } + } + + if($Type=~/\A(requires|provides|suggests)\Z/) + { + foreach my $D (@Parts) + { + my ($N, $O, $V) = sepDep($D); + $N=~s/\[\*\]//g; # /sbin/ldconfig[*] + $Dep->{$Type}{$N}{$O}{$V} = $Name; + $RPMdep->{$Type}{$Name}{$D} = 1; + } + } + } + if($Kind eq "Update") + { + if($Name) + { # register last + $Registered->{$TKind}{$PkgName{$Name}} = 1; + } + } + rmtree($TMP_DIR."/extract/"); +} + sub staticCheck() { if(not $RPMdir and not $HDlist and not $RPMlist) { - print STDERR gettext_("ERROR: --hdlist, --dir or --list option should be specified\n"); + print STDERR "ERROR: --hdlist, --dir or --list option should be specified\n"; exit(1); } - my (%Dep, %RPMdep, %AddedRPMs) = (); + + my %AddInfo = (); + + if($ExtInfo) + { + foreach my $Url (split(/\s+/, readFile($ExtInfo))) { + readInfo($Url, \%AddInfo); + } + } + + my (%Dep, %RPMdep, %Registered) = (); + my (%Dep_D, %RPMdep_D) = (); if($AddRPMs) { if(not -d $AddRPMs) { - print STDERR gettext_("ERROR: cannot access \'[_1]\'\n", $AddRPMs); + print STDERR "ERROR: cannot access \'$AddRPMs\'\n"; exit(1); } if(my @AddedRPMs = searchRPMs($AddRPMs)) @@ -854,20 +958,32 @@ sub staticCheck() { readDeps($Path, \%Dep, \%RPMdep); if(my $Name = get_RPMname($Path)) { - $AddedRPMs{$Name}=1; + $Registered{$Name} = 1; } } } } + if($UpdateHDlists) + { + if(not -f $UpdateHDlists) + { + print STDERR "ERROR: cannot access \'$UpdateHDlists\'\n"; + exit(1); + } + foreach my $Url (split(/\s+/, readFile($UpdateHDlists))) { + readHDlist($Url, \%Dep, \%RPMdep, \%Registered, "Update"); + } + + } if($RPMdir or $RPMlist) { - print gettext_("Checking RPMs ...\n"); + print "Checking RPMs ...\n"; my @RPMs = (); if($RPMdir) { if(not -d $RPMdir) { - print STDERR gettext_("ERROR: cannot access \'[_1]\'\n", $RPMdir); + print STDERR "ERROR: cannot access \'$RPMdir\'\n"; exit(1); } @RPMs = searchRPMs($RPMdir); @@ -877,112 +993,38 @@ sub staticCheck() } foreach my $Path (@RPMs) { - if($AddRPMs) + if(my $Name = get_RPMname($Path)) { - if(my $Name = get_RPMname($Path)) - { - if($AddedRPMs{$Name}) - { # already added - next; - } + if($Registered{$Name}) + { # already added + next; } } readDeps($Path, \%Dep, \%RPMdep); } } - elsif($HDlist) + elsif($HDlist) { + readHDlist($HDlist, \%Dep, \%RPMdep, \%Registered, "Target"); + } + + if($DepHDlists) { - my $Content = readFile($HDlist); - if($HDlist=~/(http|https|ftp):\/\//) + if(not -f $DepHDlists) { - print gettext_("Downloading HDlist ...\n"); - my $DownloadTo = $TMP_DIR."/extract/".get_filename($HDlist); - $DownloadTo=~s/\.cz/\.gz/g; # cz == gz - my $Dir = get_dirname($DownloadTo); - mkdir($Dir); - system("wget -U '' --no-check-certificate \"$HDlist\" --connect-timeout=5 --tries=1 --output-document=\"$DownloadTo\" >/dev/null 2>&1"); - if(not -f $DownloadTo - or not -s $DownloadTo) { - print STDERR gettext_("ERROR: cannot access \'[_1]\'\n", $HDlist); - exit(1); - } - - my %Extract = ( - "xz"=>"unxz", - "lzma"=>"unlzma", - "gz"=>"gunzip" - ); - if($DownloadTo=~/\.(gz|xz|lzma)\Z/) - { - my ($Format, $Cmd) = ($1, $Extract{$1}); - if($Cmd) { - system("cd $Dir && $Cmd $DownloadTo"); - } - my @Files = cmd_find($Dir, "f", "", ""); - if(not @Files) { - print STDERR gettext_("ERROR: cannot extract \'[_1]\'\n", $HDlist); - exit(1); - } - $DownloadTo = $Files[0]; - } - if(my $Line = readLineNum($DownloadTo, 1)) - { - if($Line!~/\A\@\w+\@/) { - print STDERR gettext_("ERROR: unknown format of hdlist\n"); - exit(1); - } - } - $Content = readFile($DownloadTo); + print STDERR "ERROR: cannot access \'$DepHDlists\'\n"; + exit(1); } - else - { - if(not -f $HDlist) - { - print STDERR gettext_("ERROR: cannot access \'[_1]\'\n", $HDlist); - exit(1); - } - $Content = readFile($HDlist); - } - print gettext_("Checking HDlist ...\n"); - my $Name = ""; - foreach (reverse(split(/\n/, $Content))) - { - $_=~s/\A\@//g; - my @Parts = split("\@", $_); - my $Type = shift(@Parts); - if($Type eq "info") - { - $Name = $Parts[0]; - next; - } - if($AddRPMs) - { - if(my $PName = parse_RPMname($Name)) - { - if($AddedRPMs{$PName}) - { # already added - next; - } - } - } - if($Type=~/\A(requires|provides|suggests)\Z/) - { - foreach my $D (@Parts) - { - my ($N, $O, $V) = sepDep($D); - $N=~s/\[\*\]//g;# /sbin/ldconfig[*] - $Dep{$Type}{$N}{$O}{$V}=$Name; - $RPMdep{$Type}{$Name}{$D} = 1; - } - } + foreach my $Url (split(/\s+/, readFile($DepHDlists))) { + readHDlist($Url, \%Dep_D, \%RPMdep_D, \%Registered, "Dep"); } } + my %IgnoreDeps = (); if($FileDeps) { if(not -f $FileDeps) { - print STDERR gettext_("ERROR: cannot access \'[_1]\'\n", $FileDeps); + print STDERR "ERROR: cannot access \'$FileDeps\'\n"; exit(1); } %IgnoreDeps = map {$_=>1} split(/\s+/, readFile($FileDeps)); @@ -994,8 +1036,10 @@ sub staticCheck() { foreach my $V (keys(%{$Dep{"requires"}{$N}{$O}})) { - if(not defined $Dep{"provides"}{$N} + if((not defined $Dep{"provides"}{$N} or not checkDeps($N, $O, $V, $Dep{"provides"}{$N})) + and (not defined $Dep_D{"provides"}{$N} + or not checkDeps($N, $O, $V, $Dep_D{"provides"}{$N}))) { # unresolved if($N=~/\A(rpmlib|executable)\(.+\)\Z/) { # rpmlib(PayloadIsLzma), ... @@ -1017,55 +1061,324 @@ sub staticCheck() } } } - my $Report = ""; + + my $TotalPkgs = keys(%{$RPMdep{"requires"}}); + my $TotalDeps = keys(%{$Dep{"requires"}}); + + my ($Report, $VReport) = (); + + $VReport = "URPM-repoclosure report"; + if($RTitle) { + # $VReport .= " for $RTitle"; + } + $VReport = "

$VReport

\n"; + $VReport .= "This report has been generated"; + if($HDlist) { + $VReport .= " for this hdlist"; + } + + $VReport .= " on ".strftime("%b %e %H:%M %Y", localtime(time))."."; + $VReport .= "
\n"; + + $VReport .= "

Test Info

\n"; + #$VReport .= "
\n"; + $VReport .= "\n"; + + if($RTitle) { + $VReport .= "\n"; + } + + my $UnresolvedLink = "0 (0.0%)"; + if(my $Num = keys(%Unresolved)) { + $UnresolvedLink = "".$Num.""." (".show_number($Num*100/$TotalDeps)."%)"; + } + $VReport .= "\n"; + my $BrokenLink = "0 (0.0%)"; + if(my $Num = keys(%Broken)) { + $BrokenLink = "".$Num.""." (".show_number($Num*100/$TotalPkgs)."%)"; + } + $VReport .= "\n"; + $VReport .= "
Repository$RTitle
Unresolved
Dependencies
$UnresolvedLink
Broken
Packages
$BrokenLink
\n"; + + $VReport .= "
\n"; + $VReport .= "
\n"; + if(my @Ns = sort {lc($a) cmp lc($b)} keys(%Unresolved)) { - $Report .= "\n".gettext_("Unresolved \"Required\" Dependencies ([_1]):", $#Ns+1)."\n\n"; + my $Title = "Unresolved Dependencies (".($#Ns+1).")"; + $Report .= "\n$Title:\n\n"; + + $VReport .= "\n"; + $VReport .= "\n"; + $VReport .= ""; + $VReport .= ""; + + if($ExtInfo) { + $VReport .= ""; + } + + $VReport .= "\n"; + + my $Num = 1; + foreach my $N (@Ns) { - foreach my $O (keys(%{$Unresolved{$N}})) + foreach my $O (sort keys(%{$Unresolved{$N}})) { - foreach my $V (keys(%{$Unresolved{$N}{$O}})) + foreach my $V (sort keys(%{$Unresolved{$N}{$O}})) { - $Report .= showDep($N, $O, $V)." (".gettext_("required by [_1]", $Unresolved{$N}{$O}{$V}).")\n"; + my $Dep = showDep($N, $O, $V); + my $Pkg = $Unresolved{$N}{$O}{$V}; + $Report .= $Dep." (required by $Pkg)\n"; + my $Class = " class='even'"; + $Class = "" if($Num++ % 2 != 0); + $VReport .= ""; + $VReport .= ""; + if($ExtInfo) { + $VReport .= ""; + } + $VReport .= "\n"; } } } + + $VReport .= "
Dependency (".($#Ns+1).")RPMSRPM
".htmlSpecChars($Dep)."$Pkg".$AddInfo{$Pkg}{"SRPM"}."
"; } if(my @Ns = sort {lc($a) cmp lc($b)} keys(%UnresolvedSuggested)) + { + if($Report) + { + $Report .= "\n"; + $VReport .= "
\n"; + } + + my $Title = "Unresolved Suggests (".($#Ns+1).")"; + $Report .= "\n$Title:\n\n"; + + $VReport .= "\n"; + $VReport .= ""; + $VReport .= ""; + + if($ExtInfo) { + $VReport .= ""; + } + + $VReport .= "\n"; + + my $Num = 1; + + foreach my $N (@Ns) + { + foreach my $O (sort keys(%{$UnresolvedSuggested{$N}})) + { + foreach my $V (sort keys(%{$UnresolvedSuggested{$N}{$O}})) + { + my $Dep = showDep($N, $O, $V); + my $Pkg = $UnresolvedSuggested{$N}{$O}{$V}; + $Report .= $Dep." (required by $Pkg)\n"; + my $Class = " class='even'"; + $Class = "" if($Num++ % 2 != 0); + $VReport .= ""; + $VReport .= ""; + if($ExtInfo) { + $VReport .= ""; + } + $VReport .= "\n"; + } + } + } + + $VReport .= "
Suggestion (".($#Ns+1).")RPMSRPM
".htmlSpecChars($Dep)."$Pkg".$AddInfo{$Pkg}{"SRPM"}."
"; + } + + $VReport .= "
\n"; + + if(my @Ns = sort {lc($a) cmp lc($b)} keys(%Broken)) { if($Report) { $Report .= "\n"; } - $Report .= "\n".gettext_("Unresolved \"Suggested\" Dependencies ([_1]):", $#Ns+1)."\n\n"; + + my $Title = "Broken Packages (".($#Ns+1).")"; + $Report .= "\n$Title:\n\n"; + + $VReport .= "\n"; + $VReport .= "\n"; + $VReport .= "\n"; + + my $Num = 1; + foreach my $N (@Ns) { - foreach my $O (keys(%{$UnresolvedSuggested{$N}})) + my $Name = parse_RPMname($N); + $Report .= $Name."\n"; + my $Class = " class='even'"; + $Class = "" if($Num++ % 2 != 0); + $VReport .= "\n"; + } + + $VReport .= "
Broken Packages (".($#Ns+1).")
$Name
"; + } + + my $Styles = " + body { + margin: 1.5em; + color:Black; + } + h1 { + font-size: 2em; + margin-bottom:5px; + } + h2 { + font-size: 1.5em; + margin-bottom:0px; + } + hr { + color:Black; + background-color:Black; + height:1px; + border:0; + } + table.summary { + border-collapse:collapse; + border:1px outset black; + } + table.summary th { + background-color:#EEEEEE; + font-weight:100; + text-align:left; + border:1px inset gray; + padding: 3px; + } + table.summary td { + text-align:right; + border:1px inset gray; + padding: 3px 5px 3px 10px; + } + tr.even { + background-color:#CCCCCC; + } + table.report th { + border-bottom-style:double; + font-weight:bold; + text-align:center; + font-size: 1.3em; + padding:3px; + cursor:pointer; + } + table.report td { + text-align:left; + padding-right:15px; + }"; + + my $Footer = "
Generated on ".(localtime time); + $Footer .= " by URPM-repoclosure $TOOL_VERSION  
"; + + my $Scripts = " + function sort(el) + { + var col_sort = el.innerHTML; + var tr = el.parentNode; + var table = tr.parentNode; + var td, col_sort_num; + for (var i=0; (td = tr.getElementsByTagName('th').item(i)); i++) + { + if(td.innerHTML == col_sort) { - foreach my $V (keys(%{$UnresolvedSuggested{$N}{$O}})) + col_sort_num = i; + if(td.prevsort == 'y') { + el.up = Number(!el.up); + } + else if(td.prevsort == 'n') { + td.prevsort = 'y'; + el.up = 0; + } + else { - $Report .= showDep($N, $O, $V)." (required by ".$UnresolvedSuggested{$N}{$O}{$V}.")\n"; + if(col_sort_num==0) + { // already sorted + td.prevsort = 'n'; + el.up = 1; + } + else + { + td.prevsort = 'y'; + el.up = 0; + } + } + } + else + { + if(td.prevsort == 'y') { + td.prevsort = 'n'; } } } - } - if(my @Ns = sort {lc($a) cmp lc($b)} keys(%Broken)) - { - $Report .= "\n".gettext_("Broken Packages ([_1]):", $#Ns+1)."\n\n"; - foreach my $N (@Ns) { - $Report .= parse_RPMname($N)."\n"; + + var a = new Array(); + for(i=1; i < table.rows.length; i++) + { + a[i-1] = new Array(); + a[i-1][0] = table.rows[i].getElementsByTagName('td').item(col_sort_num).innerHTML; + a[i-1][1] = table.rows[i]; + } + a.sort(sort_array); + if(el.up) a.reverse(); + for(i=0; i < a.length; i++) + table.appendChild(a[i][1]); + + for (var i = 1, row; row = table.rows[i]; i++) + { + if(i % 2 == 0) { + row.className = 'even'; + + } + else { + row.className = ''; + } } } - if($Report) + + function sort_array(a,b) { - print $Report."\n"; + a = a[0].toLowerCase(); + b = b[0].toLowerCase(); + if( a == b) return 0; + if( a > b) return 1; + return -1; + }"; + + + my $Title = "URPM-repoclosure report"; + my $Keywords = "URPM, repository, closure, report"; + my $Description = "URPM-repoclosure report"; + + $VReport = composeHTML_Head($Title, $Keywords, $Description, $Styles, $Scripts)."".$VReport."\n".$Footer."\n\n"; + + # report + if($Report or $VReport) + { + print $Report."\n"; # on the screen + writeFile("$RESULTS_DIR/report.html", $VReport); writeFile("$RESULTS_DIR/report.txt", $Report); } - writeFile("$RESULTS_DIR/debug/rpm-provides.txt", Dumper($RPMdep{"provides"})); - writeFile("$RESULTS_DIR/debug/rpm-requires.txt", Dumper($RPMdep{"requires"})); - writeFile("$RESULTS_DIR/debug/rpm-suggests.txt", Dumper($RPMdep{"suggests"})); - print gettext_("Report has been generated to:"); - print "\n $RESULTS_DIR/report.txt\n"; + + # debug info + writeFile("$RESULTS_DIR/debug/target/rpm-provides.txt", Dumper($RPMdep{"provides"})); + writeFile("$RESULTS_DIR/debug/target/rpm-requires.txt", Dumper($RPMdep{"requires"})); + writeFile("$RESULTS_DIR/debug/target/rpm-suggests.txt", Dumper($RPMdep{"suggests"})); + + if(keys(%RPMdep_D)) + { + writeFile("$RESULTS_DIR/debug/deps/rpm-provides.txt", Dumper($RPMdep_D{"provides"})); + writeFile("$RESULTS_DIR/debug/deps/rpm-requires.txt", Dumper($RPMdep_D{"requires"})); + writeFile("$RESULTS_DIR/debug/deps/rpm-suggests.txt", Dumper($RPMdep_D{"suggests"})); + } + + print "Report has been generated to:"; + print "\n $RESULTS_DIR/report.txt (html)\n\n"; + + # exit code if(keys(%Unresolved)) { exit($EXIT_CODES{"FAILED"}); } @@ -1074,6 +1387,87 @@ sub staticCheck() } } +sub composeHTML_Head($$$$$) +{ + my ($Title, $Keywords, $Description, $Styles, $Scripts) = @_; + return " + + + + + + + $Title + + + + "; +} + +sub htmlSpecChars($) +{ + my $Str = $_[0]; + $Str=~s/\&([^#]|\Z)/&$1/g; + $Str=~s//>/g; + return $Str; +} + +sub show_number($) +{ + if($_[0]) + { + my $Num = cut_off_number($_[0], 2, 0); + if($Num eq "0") + { + foreach my $P (3 .. 7) + { + $Num = cut_off_number($_[0], $P, 1); + if($Num ne "0") { + last; + } + } + } + if($Num eq "0") { + $Num = $_[0]; + } + return $Num; + } + return $_[0]; +} + +sub cut_off_number($$$) +{ + my ($num, $digs_to_cut, $z) = @_; + if($num!~/\./) + { + $num .= "."; + foreach (1 .. $digs_to_cut-1) { + $num .= "0"; + } + } + elsif($num=~/\.(.+)\Z/ and length($1)<$digs_to_cut-1) + { + foreach (1 .. $digs_to_cut - 1 - length($1)) { + $num .= "0"; + } + } + elsif($num=~/\d+\.(\d){$digs_to_cut,}/) { + $num=sprintf("%.".($digs_to_cut-1)."f", $num); + } + $num=~s/\.[0]+\Z//g; + if($z) { + $num=~s/(\.[1-9]+)[0]+\Z/$1/g; + } + return $num; +} + sub parse_RPMname($) { my $Name = $_[0]; @@ -1100,6 +1494,183 @@ sub clearCache() } } +sub checkProfile() +{ + if(not -f $Profile) + { + print STDERR "ERROR: can't access \'$Profile\'\n"; + exit(1); + } + my $Content = readFile($Profile); + my %Index = (); + my (%Order, %Order_S) = (); + my $Num = 0; + while(my $Repos = parseTag(\$Content, "repos")) + { + my %Info = (); + foreach my $Tag ("distr", "name", "arch", "section", "hdlist", "updates", "deps", "info") { + $Info{$Tag} = parseTag(\$Repos, $Tag); + } + + my $Dir = $Info{"distr"}."/".$Info{"arch"}."/".$Info{"section"}; + + if(defined $Target and $Target ne $Dir) { + next; + } + + writeFile("dep.hdlists", $Info{"deps"}); + writeFile("update.hdlists", $Info{"updates"}); + writeFile("info.hdlists", $Info{"info"}); + + my $Cmd = "perl urpm-repoclosure.pl"; + $Cmd .= " --hdlist=".$Info{"hdlist"}; + if($Info{"name"}) { + $Cmd .= " --title=\"".$Info{"name"}."/".$Info{"arch"}."-".$Info{"section"}."\""; + } + if($Info{"deps"}) { + $Cmd .= " --dep-hdlists=dep.hdlists"; + } + if($Info{"updates"}) { + $Cmd .= " --update-hdlists=update.hdlists"; + } + if($Info{"info"}) { + $Cmd .= " --info=info.hdlists"; + } + $Cmd .= " --file-deps=file-deps.txt"; + + print "Running $Cmd\n"; + + system($Cmd." >/dev/null"); + + $Info{"HTML"} = $Dir."/report.html"; + $Info{"TXT"} = $Dir."/report.txt"; + + mkpath($Dir); + move($RESULTS_DIR."/static/report.html", $Info{"HTML"}); + move($RESULTS_DIR."/static/report.txt", $Info{"TXT"}); + + if(not defined $Target) { + rmtree($RESULTS_DIR); + } + unlink("dep.hdlists"); + unlink("update.hdlists"); + + $Index{$Info{"name"}}{$Info{"arch"}}{$Info{"section"}} = \%Info; + $Order{$Info{"name"}} = $Num++; + $Order_S{$Info{"name"}}{$Info{"section"}} = $Num++; + $Order_S{$Info{"name"}}{$Info{"arch"}} = $Num++; + } + + my $Styles = " + body { + margin: 1.5em; + color:Black; + } + h1 { + font-size: 2em; + margin-bottom:5px; + } + h2 { + font-size: 1.5em; + margin-bottom:10px; + } + table.contents { + border-collapse:collapse; + border:1px Black solid; + margin-left:15px; + font-family:\"Times New Roman\"; + } + table.contents td { + padding:5px; + font-size:16px; + } + table.summary { + border-collapse:collapse; + border:1px Black solid; + margin-left:20px; + } + table.summary th { + background-color:#F2F2F2; + text-align:center; + font-weight:100; + padding: 3px; + border:1px Black solid; + } + table.summary td { + text-align:center; + padding: 3px; + border:1px Black solid; + }"; + + my $INDEX = "

URPM-repoclosure report

"; + $INDEX .= "This report has been updated on ".strftime("%b %e %H:%M %Y", localtime(time)).".\n"; + + $INDEX .= "
\n"; + + # contents + my $Contents = "
\n\n"; + $Contents .= "\n"; + foreach my $Name (sort {$Order{$a}<=>$Order{$b}} keys(%Index)) + { + my $Anchor = $Name; + $Anchor=~s/\s+/_/g; + $Contents .= "\n"; + } + $Contents .= "
Contents
$Name
\n"; + + if(keys(%Index)>=3) + { + $INDEX .= $Contents; + $INDEX .= "
\n"; + } + + foreach my $Name (sort {$Order{$a}<=>$Order{$b}} keys(%Index)) + { + my $Anchor = $Name; + $Anchor=~s/\s+/_/g; + $INDEX .= "\n"; + $INDEX .= "

$Name

\n"; + $INDEX .= "\n"; + $INDEX .= "\n"; + $INDEX .= "\n"; + foreach my $Arch (sort {$Order_S{$Name}{$a}<=>$Order_S{$Name}{$b}} keys(%{$Index{$Name}})) + { + foreach my $Section (sort {$Order_S{$Name}{$a}<=>$Order_S{$Name}{$b}} keys(%{$Index{$Name}{$Arch}})) + { + $INDEX .= "\n"; + } + last; + } + $INDEX .= "\n"; + foreach my $Arch (sort {$Order_S{$Name}{$a}<=>$Order_S{$Name}{$b}} keys(%{$Index{$Name}})) + { + $INDEX .= "\n"; + $INDEX .= "\n"; + foreach my $Section (sort {$Order_S{$Name}{$a}<=>$Order_S{$Name}{$b}} keys(%{$Index{$Name}{$Arch}})) + { + my %Info = %{$Index{$Name}{$Arch}{$Section}}; + $INDEX .= "\n"; # (txt) + } + $INDEX .= "\n"; + } + $INDEX .= "
$Section
$ArchReport (txt)
\n"; + } + + if(keys(%Index)>=3) + { + $INDEX .= "
\n"; + } + + my $Title = "URPM-repoclosure report"; + my $Keywords = "URPM, repository, closure, report"; + my $Description = "URPM-repoclosure report"; + + $INDEX = composeHTML_Head($Title, $Keywords, $Description, $Styles, "")."".$INDEX."\n\n"; + + writeFile("index.html", $INDEX); + print "index.html has been created\n"; +} + sub scenario() { if($Help) @@ -1109,53 +1680,35 @@ sub scenario() } if($ShowVersion) { - print gettext_("URPM Repos Closure Checker [_1] for Mandriva Linux\nCopyright (C) 2012 ROSA Laboratory\nLicense: GPL \nThis program is free software: you can redistribute it and/or modify it.\n\nWritten by Andrey Ponomarenko.\n", $TOOL_VERSION); + print "URPM Repo Closure Checker $TOOL_VERSION\nCopyright (C) 2012 ROSA Laboratory\nLicense: GPL \nThis program is free software: you can redistribute it and/or modify it.\n\nWritten by Andrey Ponomarenko.\n"; exit(0); } + + if($Profile) + { + checkProfile(); + exit(0); + } + if($HDlist) { $StaticMode = 1; } - if($Root) - { - if(not -d $Root) { - print STDERR gettext_("ERROR: cannot access \'[_1]\'\n", $Root); - exit(1); - } + if($ReportDir) { + $RESULTS_DIR = $ReportDir; } - if($ResDir) { - $RESULTS_DIR = $ResDir; - } - if(-d $RESULTS_DIR) - { - # print "Removing old $RESULTS_DIR directory\n"; + if(-d $RESULTS_DIR) { rmtree($RESULTS_DIR); } - if($CheckSignature) - { - if(not $ResDir) { - $RESULTS_DIR .= "/signature"; - } - sigCheck(); - exit(0); - } if($StaticMode) { - if(not $ResDir) { + if(not $ReportDir) { $RESULTS_DIR .= "/static"; } staticCheck(); } - if($CheckRelease) - { - if(not $ResDir) { - $RESULTS_DIR .= "/release"; - } - checkRelease(); - exit(0); - } if($DynamicMode) { - if(not $ResDir) { + if(not $ReportDir) { $RESULTS_DIR .= "/dynamic"; } dynamicCheck(); diff --git a/urpm-repodiff.py b/urpm-repodiff.py index bd0b836..6f8f126 100755 --- a/urpm-repodiff.py +++ b/urpm-repodiff.py @@ -75,30 +75,55 @@ timeout = 5 def ParseCommandLine(): """Parse arguments. - + Parse arguments from command line. Return these arguments. """ parser = argparse.ArgumentParser( description=_("Tool for comparing sets of repositories.")) - parser.add_argument("--old", "-o", action="store", nargs='+', required="True", + group = parser.add_argument_group(_('global parameters'), + description=_("Parameters used in all cases.")) + group.add_argument("--old", "-o", action="append", nargs='+', required="True", metavar="OLD_REPO", help=_("URL or PATH to old repositories")) - parser.add_argument("--new", "-n", action="store", nargs='+', required="True", + group.add_argument("--new", "-n", action="append", nargs='+', required="True", metavar="NEW_REPO", help=_("URL or PATH to new repositories")) - parser.add_argument("--size", "-s", action="store_true", - help=_("Show differences in package sizes.")) - parser.add_argument("--simple", action="store_false", - help=_("Simple output format.")) - parser.add_argument("--quiet", "-q", action="store_false", + group.add_argument("--quiet", "-q", action="store_false", help=_("Hide service messages.")) - parser.add_argument("--changelog", "-c", action="store_true", + group.add_argument("--no-release", "-r", action="store_true", + help=_("Ignore release during package compare.")) + group.add_argument("--show-summary", action="store_true", + help=_("Output summary.")) + group.add_argument("--output", "-out", action="store", nargs=1, default='', + metavar="OUTPUT_FILE", help=_("Change standart output to \"OUTPUT_FILE\".")) + group.add_argument("--ignore", "-i", action="store", nargs=1, default='', + metavar="IGNORELIST", help=_("File with list of ignored packages")) + group = parser.add_argument_group(_('text mode parameters'), + description=_("Parameters used only in text mode. (--html not present)")) + group.add_argument("--size", "-s", action="store_true", + help=_("Show differences in package sizes.")) + group.add_argument("--simple", action="store_false", + help=_("Simple output format.")) + group.add_argument("--changelog", "-c", action="store_true", help=_("Show changelog difference.")) - parser.add_argument("--html", action="store_true", + group = parser.add_argument_group(_('HTML mode parameters'), + description=_("Parameters used only in HTML mode. (--html is present)")) + group.add_argument("--html", action="store_true", help=_("Output in HTML format, if --output is not present\ \"%s\" will be created in current directory. \ --size, --simple and --changelog options are ignored.") % htmlname) - parser.add_argument("--output", "-out", action="store", nargs=1, default='', - metavar="OUTPUT_FILE", help=_("Change standart output to \"OUTPUT_FILE\".")) + group.add_argument("--reponames", action="store", nargs='+', default='', + metavar="REPONAME", help=_("Repository names for output.")) + group = parser.add_argument_group(_('Filters'), + description=_("Filters for output. If none selected then every type will\ + be shown")) + group.add_argument("--show-new", "-N", action="store_true", + help=_("Show new packages")) + group.add_argument("--show-removed", "-R", action="store_true", + help=_("Show removed packages")) + group.add_argument("--show-updated", "-U", action="store_true", + help=_("Show updated packages")) + group.add_argument("--show-downgraded", "-D", action="store_true", + help=_("Show downgraded packages")) return parser.parse_args() def exit_proc(arg): @@ -116,7 +141,7 @@ def exit_proc(arg): def CheckURL(url, arg): """URL check. - + Check that URL is gettable. """ try: @@ -127,7 +152,7 @@ def CheckURL(url, arg): def CheckArgs(urlpath, arg): """Trivial checks. - + Check that url or path is correct. """ if (urlpath.startswith("http://") or urlpath.startswith("ftp://")): @@ -157,15 +182,15 @@ def CheckArgs(urlpath, arg): print _("Error: \"%s\" is not correct url, path or name of repository") % urlpath exit_proc(arg) return urlpath - + def CheckOutput(arg): """Check output file. - + Check if the file can be created and redirect standart output to this file. """ file_output = arg.output ifhtml = arg.html - + if (file_output == default_output): if(ifhtml): try: @@ -177,7 +202,7 @@ def CheckOutput(arg): else: arg.output = sys.stdout return - + if(file_output != ''): if(os.path.isfile(file_output)): print _("Error: File %s already exists") % file_output @@ -199,19 +224,25 @@ def CheckOutput(arg): def CheckParam(arg): """Check parameters. - - Ignore some parameters in HTML-case. + + Ignore some parameters in HTML-mode. Ignore some parameters in text-mode. """ if arg.html: arg.size = 0 arg.simple = 0 arg.changelog = 0 + if (arg.reponames != '') and (len(arg.old) + len(arg.new) != len(arg.reponames)): + print _("Error: number of REPONAME's(%s) are not equal to number of groups(%s)") % \ + (str(len(arg.reponames)), str(len(arg.old) + len(arg.new))) + exit_proc(arg) + else: + arg.repnames = '' def GetFile(urlpath, filename, localdir, arg): """Donwload archive. """ ifnotquiet = arg.quiet - + if not os.path.isdir(localdir): os.makedirs(os.path.realpath(localdir)) if ifnotquiet: @@ -241,33 +272,84 @@ def GetFiles(arg): file_name = [] file_path = [] for i in range(len(arg.old)): - file_name.append(synthesis_arch) - file_dir.append(arg.temp_old[i]) - file_path.append(arg.old[i] + "media_info/") - if ifchangelog: - file_name.append(changelog_arch) - file_dir.append(arg.temp_old[i]) - file_path.append(arg.old[i] + "media_info/") + for j in range(len(arg.old[i])): + file_name.append(synthesis_arch) + file_dir.append(arg.temp_old[i][j]) + file_path.append(arg.old[i][j] + "media_info/") + if ifchangelog: + file_name.append(changelog_arch) + file_dir.append(arg.temp_old[i][j]) + file_path.append(arg.old[i][j] + "media_info/") for i in range(len(arg.new)): - file_name.append(synthesis_arch) - file_dir.append(arg.temp_new[i]) - file_path.append(arg.new[i] + "media_info/") - if ifchangelog: - file_name.append(changelog_arch) - file_dir.append(arg.temp_new[i]) - file_path.append(arg.new[i] + "media_info/") + for j in range(len(arg.new[i])): + file_name.append(synthesis_arch) + file_dir.append(arg.temp_new[i][j]) + file_path.append(arg.new[i][j] + "media_info/") + if ifchangelog: + file_name.append(changelog_arch) + file_dir.append(arg.temp_new[i][j]) + file_path.append(arg.new[i][j] + "media_info/") for i in range(len(file_name)): GetFile(file_path[i], file_name[i], file_dir[i], arg) - + +def ReadIgnoreList(arg): + ignorefile = arg.ignore + ignorelist = [] + if not os.path.isfile(ignorefile): + print _("Error: file %s does not exist.") % ignorefile + exit_proc(arg) + try: + ifile = open(ignorefile) + for string in ifile: + if string == '\n': + continue + if string.endswith('\n'): + string = string[:-1] + ignorelist.append(string) + ifile.close() + ignorelist.sort() + except: + print _("Error: file %s cannot be read.") % ignorefile + exit_proc(arg) + return ignorelist + +def RemoveIgnored(dict_in, ignorelist): + dict_out = {} + sorted_list = sorted(dict_in) + i = 0 + imax = len(sorted_list) + j = 0 + jmax = len(ignorelist) + while (i < imax) and (j < jmax): + if ignorelist[j].endswith('*'): + comp_str = ignorelist[j][:-1] + while (i < imax) and (sorted_list[i] < comp_str): + dict_out[sorted_list[i]] = dict_in[sorted_list[i]] + i = i + 1 + while (i < imax) and sorted_list[i].startswith(comp_str): + i = i + 1 + else: + comp_str = ignorelist[j] + while (i < imax) and (sorted_list[i] < comp_str): + dict_out[sorted_list[i]] = dict_in[sorted_list[i]] + i = i + 1 + if (i < imax) and (sorted_list[i] == comp_str): + i = i + 1 + j = j + 1 + if (i < imax) and (j == jmax): + for i in range(i, imax): + dict_out[sorted_list[i]] = dict_in[sorted_list[i]] + return dict_out + def RenameSynthFile(localdir, arg): """Rename. - + Rename Synthesis file so zgip can understand format. """ ifnotquiet = arg.quiet - + if not os.path.isfile(localdir + synthesis_arch): print _("Error: file not found: ") + localdir + synthesis_arch exit_proc(arg) @@ -275,7 +357,7 @@ def RenameSynthFile(localdir, arg): os.rename(localdir + synthesis_arch, localdir + synthesis_arch_renamed) except OSError: print _("Error: cannot rename file %(from)s to %(to)s") % {"from": synthesis_arch, "to": synthesis_arch_renamed} - + exit_proc(arg) if not os.path.isfile(localdir + synthesis_arch_renamed): print _("Error: file %s is missing.") % (localdir + synthesis_arch_renamed) @@ -283,10 +365,10 @@ def RenameSynthFile(localdir, arg): else: if ifnotquiet: print _("file %(from)s was renamed to %(to)s") % {"from": synthesis_arch, "to": synthesis_arch_renamed} - + def UnpackFiles(files_dir, ifchangelog, ifnotquiet): """Unpack. - + Unpack needed files in selected directory. """ if ifchangelog: @@ -299,7 +381,7 @@ def UnpackFiles(files_dir, ifchangelog, ifnotquiet): def ParseVersion(names_list): """Parse version info is present. - + Parse version information from the field. e.g. provided_name[>= 1.2.3-4.5.6] is parsed to (provided_name, sign, (epoch, version, release)) """ @@ -333,9 +415,9 @@ def ParseVersion(names_list): def ParseSynthesis(synthfile, pkgdict, arg): """Collect info about packages. - + Parse synthesis.hdlist file (or add new entries to pkgdict). - + pkgdict is a dictionary with format: pkgdict[name]=(verrel,(s0,s1,s2)) where: @@ -346,6 +428,7 @@ def ParseSynthesis(synthfile, pkgdict, arg): s2[] - is list of obsoleted packages """ ifnotquiet = arg.quiet + ifreleaseignore = arg.no_release if not os.path.isfile(synthfile): print _("Error: Synthesis file %s was not found.") % synthfile @@ -356,6 +439,8 @@ def ParseSynthesis(synthfile, pkgdict, arg): synth = open(synthfile) tmp = ['', '', ''] for synthline in synth: + if not synthline.startswith('@'): + continue if synthline.endswith('\n'): synthline = synthline[:-1] tmpline = synthline.split('@') @@ -366,9 +451,10 @@ def ParseSynthesis(synthfile, pkgdict, arg): tmp[1] = '@'.join(tmpline[2:]) elif tag == synthtags[6]: tmp[0] = tmpline[2:] - disttagepoch = ChkTagEpoch(tmp[0]) + disttagepoch = ChkTagEpoch(tmp[0]) #disttag + distepoch tmp[2] = ParseVersion(tmp[2]) - (name, version, release) = RPMNameFilter(tmp[0][0], disttagepoch) #disttag + distepoch + (name, version, release) = RPMNameFilter(tmp[0][0], + disttagepoch, ifreleaseignore) verrel = (version, release, tmp[0][1]) if(not name in pkgdict): pkgdict[name]=(verrel, (tmp[0], tmp[1], tmp[2])) @@ -382,16 +468,16 @@ def ParseSynthesis(synthfile, pkgdict, arg): def ChkDist(disttag, distepoch): """No minus in tag and epoch. - + Trivial check that tag and epoch hasn't got '-' in their name """ if minus_check.search(disttag) or minus_check.search(distepoch): print _("REPODIFF-Warning: strange format of or : ") +\ disttag + distepoch - + def ChkTagEpoch(i): """No minus in tag and epoch. - + Trivial check that tag and epoch hasn't got '-' in their name """ if len(i) == 4: @@ -409,18 +495,22 @@ def ChkTagEpoch(i): else: print _("REPODIFF-Warning: strange : ") + str(i) -def RPMNameFilter(rpmname, disttagepoch): +def RPMNameFilter(rpmname, disttagepoch, ifreleaseignore): """Parse name and verrel. - + Function that parses name, version and release of a package. """ string = rpmname.split('-') lastpart = string.pop() tmp = lastpart.split('.') - tmp.pop() + issrc = (tmp.pop() == "src") + ismageia = 0 + if tmp[-1].startswith("mga"): + tmp.pop() + ismageia = 1 lastpart = '.'.join(tmp) if (lastpart[0].isdigit() or (not lastpart.startswith(disttagepoch))) and\ - (not lastpart.isdigit()): + ((not lastpart.isdigit()) or issrc or ismageia): name = '-'.join(string[:-1]) ver = string[-1] rel = lastpart @@ -428,11 +518,13 @@ def RPMNameFilter(rpmname, disttagepoch): name = '-'.join(string[:-2]) ver = string[-2] rel = string[-1] + if ifreleaseignore: + rel = "" return (name, ver, rel) - + def compare_versions(first_entry, second_entry): """Compare two verrel tuples. - + dict_entry and comp_entry are verrel tuples verrel = (version, release, epoch). Return 1 if the first argument is higher. @@ -443,7 +535,7 @@ def compare_versions(first_entry, second_entry): (version2, release2, second_epoch) = second_entry return(rpm.labelCompare((first_epoch, version1, release1), (second_epoch, version2, release2))) - + def ParsePackage(arg): """Processing files, parsing synthesis, getting pkgdict. @@ -458,24 +550,31 @@ def ParsePackage(arg): """ ifchangelog = arg.changelog ifnotquiet = arg.quiet + ignorelist = arg.ignorelist pkgdict_old = {} - for directory in arg.temp_old: - RenameSynthFile(directory, arg) - UnpackFiles(directory, ifchangelog, ifnotquiet) - ParseSynthesis(directory + synthesis_file, pkgdict_old, arg) + for tmp_list in arg.temp_old: + for directory in tmp_list: + RenameSynthFile(directory, arg) + UnpackFiles(directory, ifchangelog, ifnotquiet) + ParseSynthesis(directory + synthesis_file, pkgdict_old, arg) pkgdict_new = {} - for directory in arg.temp_new: - RenameSynthFile(directory, arg) - UnpackFiles(directory, ifchangelog, ifnotquiet) - ParseSynthesis(directory + synthesis_file, pkgdict_new, arg) + for tmp_list in arg.temp_new: + for directory in tmp_list: + RenameSynthFile(directory, arg) + UnpackFiles(directory, ifchangelog, ifnotquiet) + ParseSynthesis(directory + synthesis_file, pkgdict_new, arg) + pkgdict_old = RemoveIgnored(pkgdict_old, ignorelist) + pdkdict_new = RemoveIgnored(pkgdict_new, ignorelist) + ignorelist = "" + arg.ignorelist = "" return pkgdict_old, pkgdict_new - + def CreateDicts(dict_old, dict_new): """Creating dictionaries. - + Creating dictionaries for new, updated and removed(deleted) packages from two dictionaries: old and new, for old and new repositories. - + dict_old, dict_new are dictionaries with format: pkgdict[name]=(verrel,(s0,s1,s2)) where: @@ -484,7 +583,7 @@ def CreateDicts(dict_old, dict_new): s0[] - is package info s1 - is package summary s2[] - is list of obsoleted packages - + dict_new_packages and dict_del_packages have the same format. dict_upd_packages has format: dict_upd_packages[name]=((verrel_old,(so0,so1,so2)), @@ -495,7 +594,7 @@ def CreateDicts(dict_old, dict_new): dict_new_packages = {} dict_del_packages = {} dict_upd_packages = {} - + for name in dict_new: if(name in dict_old): #updated or downgraded compare_result = compare_versions(dict_new[name][0], @@ -513,7 +612,7 @@ def CreateDicts(dict_old, dict_new): def ProcessNewPackages(dict_new_packages, file_output): """Processing newly added packages. - + dict_new_packages[name]=(verrel,(s0,s1,s2)) where: name - is package name parsed from package filename @@ -529,7 +628,7 @@ def ProcessNewPackages(dict_new_packages, file_output): def GenerateDictObsoleted(dict_new, ifnotquiet): """Generate Dictionary of obsoleted packages. - + pkgdict[name]=(verrel,(s0,s1,s2)) where: name - is package name parsed from package filename @@ -583,7 +682,7 @@ def compare_verrel(verrel1, sign, verrel2): def ProcessDelPackages(dict_del_packages, dict_obsoleted, file_output): """Process deleted packages. - + Printing every deleted package. Show if package is obsoleted. pkgdict[name]=(verrel,(s0,s1,s2)) where: @@ -592,7 +691,7 @@ def ProcessDelPackages(dict_del_packages, dict_obsoleted, file_output): s0[] - is package info s1 - is package summary s2[] - is list of obsoleted packages - + dict_obsoleted is dictionary dict_obsoleted[name]=[obs1, ...] """ @@ -610,21 +709,22 @@ def ProcessDelPackages(dict_del_packages, dict_obsoleted, file_output): def ParseLogfile(dict_log, logfile, dict_upd_packages, mode, arg): """Parse Changelog. - + mode == 0 - for old changelog: we search only for 1st entry in changelog mode == 1 - for new changelog: we collect entries from changelog untill we find remembered entry from changelog - + Parse changelog.xml to compare changes between updated packages. dict_log - is dictionary with format: dict_log[name] = [(verrel, (time,name,text)), (verrel,[(time,name,text),...])] - + dict_upd_packages[name] = [old_pkg[name],new_pkg[name],ifdowngraded] or dict_upd_packages[name] = [(verler,(s0,s1,s2)),(verrel,(s0,s1,s2)),ifdowngraded] """ ifnotquiet = arg.quiet + ifreleaseignore = arg.no_release if ifnotquiet: print _("Reading changelog") @@ -645,7 +745,7 @@ def ParseLogfile(dict_log, logfile, dict_upd_packages, mode, arg): if(tag_changelog.name != "changelogs"): tag_changelog = tag_changelog.next continue - + tag_property = tag_changelog.properties pkgname = '' disttag = '' @@ -665,7 +765,7 @@ def ParseLogfile(dict_log, logfile, dict_upd_packages, mode, arg): disttagepoch = disttag + distepoch if (disttagepoch == ''): disttagepoch = '-' - (result_key, version, release) = RPMNameFilter(pkgname, disttagepoch) + (result_key, version, release) = RPMNameFilter(pkgname, disttagepoch, ifreleaseignore) verrel = (version, release, "-1") # skip entry if it wasn't updated if result_key not in dict_upd_packages: @@ -680,26 +780,21 @@ def ParseLogfile(dict_log, logfile, dict_upd_packages, mode, arg): if(result_key in dict_log) and (dict_log[result_key][mode]): tag_changelog = tag_changelog.next continue - # if "old" repository do not have changelog of the package - if(mode == 1) and (not result_key in dict_log): - dict_log[result_key] = [] - dict_log[result_key].append([]) - dict_log[result_key].append([]) - dict_log[result_key][0] = (verrel, []) - + log_current = tag_changelog.children result_changelog = [] while(log_current): if(log_current.name != "log"): log_current = log_current.next continue - + if(log_current.properties.name == "time"): entry_time = log_current.properties.content else: entry_time = 0 - - if(mode == 1) and (not ifdowngraded) and\ + + if(mode == 1) and (not ifdowngraded) and\ + (result_key in dict_log) and\ (entry_time <= dict_log[result_key][0][1][0]): break log_child = log_current.children @@ -710,6 +805,16 @@ def ParseLogfile(dict_log, logfile, dict_upd_packages, mode, arg): entry_text = log_child.content log_child = log_child.next result_changelog.append((entry_time, entry_name, entry_text)) + # if "old" repository do not have changelog of the package + if(mode == 1) and (not result_key in dict_log): + dict_log[result_key] = [] + dict_log[result_key].append([]) + dict_log[result_key].append([]) + dict_log[result_key][0] = (verrel, []) + if not ifdowngraded: + dict_log[result_key][0] = (verrel, result_changelog[0]) + else: + dict_log[result_key][0] = (verrel, result_changelog) if(mode == ifdowngraded): break log_current = log_current.next @@ -740,10 +845,10 @@ def ParseLogfile(dict_log, logfile, dict_upd_packages, mode, arg): dict_log[result_key][1] = (verrel, new_result) tag_changelog = tag_changelog.next doc.freeDoc() - + def GenerateLogfileDiff(dict_upd_packages, arg): """Changelog difference list. - + Generate changelog difference list. dict_upd_packages[name] = [old_pkg[name],new_pkg[name],ifdowngraded] or dict_upd_packages[name] = [(verler,(s0,s1,s2)),(verrel,(s0,s1,s2)),ifdowngraded] @@ -756,12 +861,14 @@ def GenerateLogfileDiff(dict_upd_packages, arg): print _("Generating changes list.") dict_logfile_diff = {} dict_log = {} - - for old_dir in temp_old: - ParseLogfile(dict_log, old_dir + changelog_file, dict_upd_packages, 0, arg) - for new_dir in temp_new: - ParseLogfile(dict_log, new_dir + changelog_file, dict_upd_packages, 1, arg) - + + for i in temp_old: + for old_dir in temp_old[i]: + ParseLogfile(dict_log, old_dir + changelog_file, dict_upd_packages, 0, arg) + for i in temp_new: + for new_dir in temp_new[i]: + ParseLogfile(dict_log, new_dir + changelog_file, dict_upd_packages, 1, arg) + for name in dict_upd_packages: if(name in dict_log): if dict_log[name][1]: @@ -773,23 +880,26 @@ def GenerateLogfileDiff(dict_upd_packages, arg): print _("REPODIFF-Warning: Package %s was not described in changelogs.xml") % name entry = [(0, '', _("REPODIFF-Warning: Changelogs of a package are absent."))] dict_logfile_diff[name] = entry - + return dict_logfile_diff def ChangelogPrint(changes_list, file_output): """Changelog difference. - + Output changes in changelog. changes_list is list with format: changes_list = [(time,author,text)] """ - for entry in changes_list: - file_output.write("* " + str(date.fromtimestamp(float(entry[0]))) +\ - " " + entry[1] + '\n' + entry[2] + '\n\n') - + if len(changes_list) > 0: + for entry in changes_list: + file_output.write("* " + str(date.fromtimestamp(float(entry[0]))) +\ + " " + entry[1] + '\n' + entry[2] + '\n\n') + else: + file_output.write('\n') + def PrintLogfileDiff(package_name, dict_logfile_diff, file_output): """Changelog difference. - + Output changes in changelog. dict_logfile_diff is dictionary with format: dict_logfile_diff[name] = [(time,author,text)] @@ -801,7 +911,7 @@ def PrintLogfileDiff(package_name, dict_logfile_diff, file_output): def ProcessUpdPackages(dict_upd_packages, dict_logfile_diff, arg): """Process updated packages. - + ifsizes - is indicator: should we (1) or should we not (0) print difference in package sizes. ifnotsimple - is indicator: should we (0) or shoudl we not (1) print @@ -814,17 +924,29 @@ def ProcessUpdPackages(dict_upd_packages, dict_logfile_diff, arg): file_output = arg.output ifchangelog = arg.changelog ifsizes = arg.size + ifup = arg.show_updated + ifdown = arg.show_downgraded file_output.write(_("\n\nUpdated packages:\n\n")) sorted_list = sorted(dict_upd_packages) for name in sorted_list: package = dict_upd_packages[name][1][1][0][0] if ifnotsimple: - file_output.write(package + '\n' + '-'*len(package) + '\n') - if dict_upd_packages[name][2]: - file_output.write(_(" ***DOWNGRADED***\n")) + if dict_upd_packages[name][2]: + if ifdown: + file_output.write(package + '\n' + '-'*len(package) + '\n') + file_output.write(_(" ***DOWNGRADED***\n")) + else: + continue + else: + if ifup: + file_output.write(package + '\n' + '-'*len(package) + '\n') + else: + continue if ifchangelog: PrintLogfileDiff(name, dict_logfile_diff, file_output) + else: + file_output.write('\n') else: old_package = dict_upd_packages[name][0][1][0][0] file_output.write(name + ": " + old_package + " -> " + package + '\n') @@ -833,74 +955,101 @@ def ProcessUpdPackages(dict_upd_packages, dict_logfile_diff, arg): int(dict_upd_packages[name][0][1][0][2]) file_output.write(_("Size Change: %d bytes\n\n") % sizediff) -def PrintSummary(dict_new_packages, dict_del_packages, dict_upd_packages, file_output): +def PrintSummary(dict_new_packages, dict_del_packages, dict_upd_packages, arg): """Output summary. - + Output summary: numbers of new/removew/updated packages at all. """ - file_output.write("Summary:\n") - length = len(dict_new_packages) - if length: - file_output.write(_(" Total added packages: ") + str(length) + '\n') - length = len(dict_del_packages) - if length: - file_output.write(_(" Total removed packages: ") + str(length) + '\n') - length = 0 - length_d = 0 - for packagename in dict_upd_packages: - if dict_upd_packages[packagename][2] == 0: - length = length + 1 - else: - length_d = length_d + 1 - if length: - file_output.write(_(" Total updated packages: ") + str(length) + '\n') - if length_d: - file_output.write(_(" Total downgraded packages: ") + str(length_d) + '\n') + file_output = arg.output + ifhtml = arg.html + + if ifhtml: + endstr = '
' + else: + endstr = '\n' + + tmp_str = _("Summary:") + if ifhtml: + tmp_str = '

' + tmp_str + '

' + else: + tmp_str = tmp_str + endstr + if arg.show_new: + length = len(dict_new_packages) + if length: + tmp_str = tmp_str + (_(" Total added packages: ") + str(length) + endstr) + if arg.show_removed: + length = len(dict_del_packages) + if length: + tmp_str = tmp_str + (_(" Total removed packages: ") + str(length) + endstr) + if arg.show_updated or arg.show_downgraded: + length = 0 + length_d = 0 + for packagename in dict_upd_packages: + if dict_upd_packages[packagename][2] == 0: + length = length + 1 + else: + length_d = length_d + 1 + if arg.show_updated: + if length: + tmp_str = tmp_str + (_(" Total updated packages: ") + str(length) + endstr) + if arg.show_downgraded: + if length_d: + tmp_str = tmp_str + (_(" Total downgraded packages: ") + str(length_d) + endstr) + + if ifhtml: + return tmp_str + else: + file_ouput.write(tmp_str) def HTML_ParsePackage(arg): """Parse hdlist. - + HTML-specific ParsePackage(). Calls for ParsePackage """ ifchangelog = arg.changelog ifnotquiet = arg.quiet + ignorelist = arg.ignorelist html_old_dict_list = [] html_new_dict_list = [] - for directory in arg.temp_old: + for tmp_list in arg.temp_old: tmp_dict = {} - RenameSynthFile(directory, arg) - UnpackFiles(directory, 0, ifnotquiet) - ParseSynthesis(directory + synthesis_file, tmp_dict, arg) - html_old_dict_list.append(tmp_dict) - for directory in arg.temp_new: - tmp_dict = {} - RenameSynthFile(directory, arg) - UnpackFiles(directory, 0, ifnotquiet) - ParseSynthesis(directory + synthesis_file, tmp_dict, arg) - html_new_dict_list.append(tmp_dict) + for directory in tmp_list: + RenameSynthFile(directory, arg) + UnpackFiles(directory, 0, ifnotquiet) + ParseSynthesis(directory + synthesis_file, tmp_dict, arg) + html_old_dict_list.append(RemoveIgnored(tmp_dict, ignorelist)) + for tmp_list in arg.temp_new: + tmp_dict = {} + for directory in tmp_list: + RenameSynthFile(directory, arg) + UnpackFiles(directory, 0, ifnotquiet) + ParseSynthesis(directory + synthesis_file, tmp_dict, arg) + html_new_dict_list.append(RemoveIgnored(tmp_dict, ignorelist)) + ignorelist = "" + arg.ignorelist = "" return html_old_dict_list, html_new_dict_list -def HTML_UniteOld(list_dict_old): +def HTML_UniteDicts(list_dict): """Union of dictionaries. - + HTML-specific. """ - dict_old = list_dict_old[0] - i = 1 - while(i < len(list_dict_old)): - for name in list_dict_old[i]: - if name not in dict_old: - dict_old[name] = list_dict_old[i][name] - elif(compare_versions(dict_old[name][0], list_dict_old[i][name][0]) == -1): - dict_old[name] = list_dict_old[i][name] + dict_all = {} + i = 0 + while(i < len(list_dict)): + for name in list_dict[i]: + if name not in dict_all: + dict_all[name] = list_dict[i][name] + elif(compare_versions(dict_all[name][0], list_dict[i][name][0]) == -1): + dict_all[name] = list_dict[i][name] i = i + 1 - return dict_old - + return dict_all + def HTML_CreateDicts(dict_old, list_dict_new): """Create dictionary of packages. - + Dictionary of packages and types of changes. """ dict_packages = {} @@ -927,7 +1076,7 @@ def HTML_CreateDicts(dict_old, list_dict_new): def CssOutput(): """Output style. - + Output contents of style tag or to .css file. """ csscontent = '\nbody {\nfont-size: 1em;\nmargin: 1em;\ncolor: black;\nbackground-color: white;\n}\n' +\ @@ -947,7 +1096,7 @@ def CssOutput(): def JavaScriptOutput(): """Output scripts. - + Output javascript to script tag or to .js file. """ javacontent = """ @@ -1015,7 +1164,7 @@ TableSorter.prototype.sort = function (col, type) { if (this.lastSortOrderAsc == false) { newRows.reverse(); } - + var count = 0; var newclass; for (i = 0; i < newRows.length; i++) { @@ -1111,85 +1260,105 @@ function sort_diff(col, type) { } """ return javacontent - + def HTML_OutputHead(file_output): """Output beginning of the document. - + Outputs static text. """ file_output.write('\n' +\ '\n' +\ '\n' + '\n' +\ - 'Differences between Mandriva / Rosa releases\n' +\ - '\n' +\ - '\n' +\ + 'Differences between repositories\n' +\ + '\n' +\ + '\n' +\ '\n' +\ '\n' +\ - '\n' +\ '\n' +\ '\n\n') -def GetRepoInfo(dict_packages, packagename, lenold, lennew, list_dict_old, list_dict_new): +def GetRepoInfo(dict_packages, packagename, lenold, lennew, list_dict_old, + list_dict_new, ifreleaseignore): """Generate package-specific information. - + Generates class and name to be displayed in the table. """ result1 = [] result2 = [] flag = 0 + show_filter = [0,0,0,0] + tmpstr = "" for i in range(lenold): if packagename in list_dict_old[i]: - result1.append(list_dict_old[i][packagename][0][0] + '-' +\ - list_dict_old[i][packagename][0][1]) + tmpstr = list_dict_old[i][packagename][0][0] + if not ifreleaseignore: + tmpstr = tmpstr + '-' + list_dict_old[i][packagename][0][1] + result1.append(tmpstr) else: result1.append("N/A") result2.append('') - + tmplist = dict_packages[packagename] tmpdict = {} for (entry, reponum, entry_type) in dict_packages[packagename]: - tmpdict[reponum] = (entry[0][0] + '-' + entry[0][1], entry_type) - + tmpstr = entry[0][0] + if not ifreleaseignore: + tmpstr = tmpstr + '-' + entry[0][1] + tmpdict[reponum] = (tmpstr, entry_type) + for i in range(lennew): if(i not in tmpdict): if(packagename not in list_dict_new[i]): result1.append("N/A") result2.append("") else: - result1.append(list_dict_new[i][packagename][0][0] + '-' +\ - list_dict_new[i][packagename][0][1]) + tmpstr = list_dict_new[i][packagename][0][0] + if not ifreleaseignore: + tmpstr = tmpstr + '-' + list_dict_new[i][packagename][0][1] + result1.append(tmpstr) result2.append("") else: (name, entry_type) = tmpdict[i] if entry_type == 1: result1.append(name) result2.append('class = "new"') + show_filter[0] = 1 elif entry_type == 2: result1.append("Removed") result2.append('class = "removed"') flag = 1 + show_filter[1] = 1 elif entry_type == 3: result1.append(name) result2.append('class = "updated"') + show_filter[2] = 1 elif entry_type == 4: result1.append(name) result2.append('class = "downgraded"') - - return (result1, result2, flag) + show_filter[3] = 1 + + return (result1, result2, flag, show_filter) def HTML_OutputBody(dict_packages, list_dict_old, list_dict_new, arg): """Output table. - + Outputs table in HTML format. """ old = arg.old new = arg.new file_output = arg.output + ifreleaseignore = arg.no_release + reponames = arg.reponames + show_summary = arg.show_summary + show_mask = [arg.show_new, arg.show_removed, arg.show_updated, arg.show_downgraded] file_output.write('

Difference between repositories.

\n' +\ '

The use of color coding in tables:

\n' +\ @@ -1198,59 +1367,70 @@ def HTML_OutputBody(dict_packages, list_dict_old, list_dict_new, arg): 'Updated\n' +\ 'Downgraded\n' +\ 'Removed\n' +\ - '\n\n') + '\n\n' +\ + '
' + arg.summary + '
\n') repo_list = [] all_list = [] - all_list.extend(old) - all_list.extend(new) + for tmp_list in old: + all_list.extend(tmp_list) + for tmp_list in new: + all_list.extend(tmp_list) lenold = len(old) lennew = len(new) length = lenold + lennew - - reptext = 'repositories' if lenold > 1 else 'repository' - tmp_string = '

Old ' + reptext + ':

\n
    \n' - for i in range(lenold): - tmp_string = tmp_string + '
  • Repository ' + str(i) + ' : ' + old[i] + '
  • \n' - tmp_string = tmp_string + '
\n' - file_output.write(tmp_string) - reptext = 'repositories' if lennew > 1 else 'repository' - tmp_string = '

New ' + reptext + ':

\n
    \n' - for k in range(lennew): + i = 0 + for k in range(lenold): + if reponames == '': + tmp_string = 'Repository group A' + str(i) + else: + tmp_string = reponames[i] + tmp_string = '

    ' + tmp_string + ':

    \n
      \n' + for z in range(len(old[k])): + tmp_string = tmp_string + '
    • ' + old[k][z] + '
    • \n' + tmp_string = tmp_string + '
    \n' + file_output.write(tmp_string) i = i + 1 - tmp_string = tmp_string + '
  • Repository ' + str(i) + ' : ' + new[k] + '
  • \n' - tmp_string = tmp_string + '
\n' - file_output.write(tmp_string) - tmp_string = '

Difference between ' + i = 0 + for k in range(lennew): + if reponames == '': + tmp_string = 'Repository group B' + str(i) + else: + tmp_string = reponames[i + lenold] + tmp_string = '

' + tmp_string + ':

\n
    \n' + for z in range(len(new[k])): + tmp_string = tmp_string + '
  • ' + new[k][z] + '
  • \n' + tmp_string = tmp_string + '
\n' + file_output.write(tmp_string) + i = i + 1 + i = 0 while(i < length): - if(i < length - 2): - delimeter = " , " - elif(i == length - 2): - delimeter = " and " - else: - delimeter = '' - temp = '' + \ - 'Repository ' + str(i) + '' if i < lenold: - repo_list.append('Repository ' + str(i) + '') + if reponames == '': + temp = 'Group A' + str(i) + else: + temp = reponames[i] + repo_list.append('' + temp + '') else: ii = i + 1 - repo_list.append('Repository '+str(i)+'') - tmp_string = tmp_string + temp + delimeter + if reponames == '': + temp = 'Group B' + str(i - lenold) + else: + temp = reponames[i] + repo_list.append(''+temp+'') i = i + 1 - tmp_string = tmp_string + ".\n" - file_output.write(tmp_string) - + tmp_string = '\n\n' for reponame in repo_list: tmp_string = tmp_string + reponame tmp_string = tmp_string + '\n' - + file_output.write(tmp_string) + strnum = 1 resrange = [] for i in range(lennew): @@ -1258,55 +1438,57 @@ def HTML_OutputBody(dict_packages, list_dict_old, list_dict_new, arg): sorted_list = sorted(dict_packages, key=str.lower) for packagename in sorted_list: - if strnum % 2: - strtype = "odd" - else: - strtype = "even" - tmp_string = tmp_string + '' - tmp_string = tmp_string + '' - (repo_name, repo_class, flag) = GetRepoInfo(dict_packages, packagename, - lenold, lennew, list_dict_old, list_dict_new) + (repo_name, repo_class, flag, show_filter) = GetRepoInfo(dict_packages, packagename, + lenold, lennew, list_dict_old, list_dict_new, ifreleaseignore) + res = 0 + for i in range(4): + if show_filter[i]*show_mask[i] == 1: + res = 1 + if res == 0: + continue + if flag: - if(repo_name[lenold] == "Removed"): - res = 0 - for k in resrange: - if(repo_name[k] != "Removed"): - res = 1 - if res: - for k in resrange: - if(repo_name[k] == "Removed"): - repo_name[k] = "N/A" - repo_class[k] = '' - else: + res = 0 + for k in resrange: + if(repo_name[k] != "Removed"): + res = 1 + if res: for k in resrange: if(repo_name[k] == "Removed"): repo_name[k] = "N/A" repo_class[k] = '' - + + if strnum % 2: + strtype = "odd" + else: + strtype = "even" + tmp_string = '' + tmp_string = tmp_string + '' for i in range(length): tmp_string = tmp_string + '' tmp_string = tmp_string + '\n' + file_output.write(tmp_string) strnum = strnum + 1 - tmp_string = tmp_string + '\n
Package name
' + packagename + '
' + packagename + '' +\ repo_name[i] + '
\n' - - file_output.write(tmp_string) - + file_output.write('\n\n') + def HTML_OutputTail(file_output): """Output end of document. - + Outputs static text. """ file_output.write(''' - '''); file_output.write('\n\n') - + def HTML_Output(dict_packages, list_dict_old, list_dict_new, arg): """Output HTML file. - + Generates HTML file. """ ifnotquiet = arg.quiet @@ -1316,7 +1498,7 @@ def HTML_Output(dict_packages, list_dict_old, list_dict_new, arg): print _("Creating HTML file.") HTML_OutputHead(file_output) HTML_OutputBody(dict_packages, list_dict_old, list_dict_new, arg) - HTML_OutputTail(file_output) + HTML_OutputTail(file_output) def main(args): arg = ParseCommandLine() @@ -1329,13 +1511,19 @@ def main(args): tmp_output = arg.output[0] else: tmp_output = default_output + if (arg.ignore): + arg.ignore = arg.ignore[0] arg.output = None; for i in range(len(arg.old)): - arg.old[i] = CheckArgs(arg.old[i], arg) - arg.temp_old.append(head_old + str(i) + '/') + arg.temp_old.append([]) + for j in range(len(arg.old[i])): + arg.old[i][j] = CheckArgs(arg.old[i][j], arg) + arg.temp_old[i].append(head_old + str(i) + '-' + str(j) + '/') for i in range(len(arg.new)): - arg.new[i] = CheckArgs(arg.new[i], arg) - arg.temp_new.append(head_new + str(i) + '/') + arg.temp_new.append([]) + for j in range(len(arg.new[i])): + arg.new[i][j] = CheckArgs(arg.new[i][j], arg) + arg.temp_new[i].append(head_new + str(i) + '-' + str(j) + '/') arg.output = tmp_output CheckOutput(arg) CheckParam(arg) @@ -1346,33 +1534,58 @@ def main(args): ifnotquiet = arg.quiet ifhtml = arg.html ifchangelog = arg.changelog + if (not arg.show_new) and (not arg.show_removed) and\ + (not arg.show_updated) and (not arg.show_downgraded): + arg.show_new=True + arg.show_removed=True + arg.show_updated=True + arg.show_downgraded=True + + if arg.ignore: + arg.ignorelist = ReadIgnoreList(arg) + else: + arg.ignorelist = [] - GetFiles(arg) if not ifhtml: (dict_old, dict_new) = ParsePackage(arg) - + (dict_new_packages, dict_del_packages, dict_upd_packages) = CreateDicts( dict_old, dict_new) - + dict_old = '' + dict_obsoleted = GenerateDictObsoleted(dict_new, ifnotquiet) + dict_new = '' if(dict_upd_packages) and (ifnotsimple) and (ifchangelog): dict_logfile_diff = GenerateLogfileDiff(dict_upd_packages, arg) if not ifnotsimple or not ifchangelog: dict_logfile_diff = {} - - ProcessNewPackages(dict_new_packages, arg.output) - ProcessDelPackages(dict_del_packages, dict_obsoleted, arg.output) - if dict_upd_packages: + + if arg.show_new: + ProcessNewPackages(dict_new_packages, arg.output) + if arg.show_removed: + ProcessDelPackages(dict_del_packages, dict_obsoleted, arg.output) + if dict_upd_packages and (arg.show_updated or arg.show_downgraded): ProcessUpdPackages(dict_upd_packages, dict_logfile_diff, arg) - PrintSummary(dict_new_packages, dict_del_packages, dict_upd_packages, arg.output) + if arg.show_summary: + PrintSummary(dict_new_packages, dict_del_packages, dict_upd_packages, arg) else: (list_dict_old, list_dict_new) = HTML_ParsePackage(arg) - dict_old = HTML_UniteOld(list_dict_old) + dict_old = HTML_UniteDicts(list_dict_old) + if arg.show_summary: + dict_new = HTML_UniteDicts(list_dict_new) + (dict_new_packages, dict_del_packages, dict_upd_packages) = CreateDicts( + dict_old, dict_new) + arg.summary = PrintSummary(dict_new_packages, dict_del_packages, dict_upd_packages, arg) + dict_new = '' + dict_new_packages = '' + dict_del_packages = '' + dict_upd_packages = '' dict_packages = HTML_CreateDicts(dict_old, list_dict_new) + dict_old = '' HTML_Output(dict_packages, list_dict_old, list_dict_new, arg) - + exit_proc(arg) if __name__ == "__main__": diff --git a/urpm-repomanage.py b/urpm-repomanage.py index 7437f3a..8fdcdec 100755 --- a/urpm-repomanage.py +++ b/urpm-repomanage.py @@ -188,7 +188,7 @@ def main(args): for dropped in evrlist[:keepnum]: (e,v,r,d) = dropped pkg = str(verfile[(n,a,e,v,r,d)]).replace("['","").replace("']","") - subprocess.call(["rm", pkg]) + subprocess.call(["rm", "-f", pkg]) if options.verbose: for dropped in evrlist[:keepnum]: (e,v,r,d) = dropped diff --git a/urpm-tools.pot b/urpm-tools.pot deleted file mode 100644 index 58ddc58..0000000 --- a/urpm-tools.pot +++ /dev/null @@ -1,1101 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-21 16:34+0400\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#. if not fatal_fails, do nothing. Caller have to deal with that himself -#. rpm return code is not 0 -#: urpm-reposync.py:64 urpm-downloader.py:156 urpm-downloader.py:546 -msgid "Error while calling command" -msgstr "" - -#: urpm-reposync.py:66 urpm-downloader.py:158 -msgid "Error message: \n" -msgstr "" - -#: urpm-reposync.py:74 -msgid "reposync is used to synchronize a set of packages on the local computer with the remote repository." -msgstr "" - -#: urpm-reposync.py:76 urpm-downloader.py:104 -msgid "Use only selected URPM media" -msgstr "" - -#: urpm-reposync.py:77 urpm-downloader.py:105 -msgid "Do not use selected URPM media" -msgstr "" - -#. arg_parser.add_argument('-x', '--exclude-packages', action='store',nargs = '+', help="Exclude package(s) by regex") -#: urpm-reposync.py:79 urpm-downloader.py:102 -msgid "Verbose (print additional info)" -msgstr "" - -#: urpm-reposync.py:80 -msgid "Quiet operation. Senseless without --auto." -msgstr "" - -#: urpm-reposync.py:81 -msgid "Do not ask questions, just do it!" -msgstr "" - -#: urpm-reposync.py:82 -msgid "Only print the list of actions to be done and do nothing more!" -msgstr "" - -#: urpm-reposync.py:83 -msgid "Only download the rpm files, but install or remove nothing." -msgstr "" - -#. arg_parser.add_argument('-n', '--noremove', action='store_true', help=_("Do not remove packages at all. If some installed package prevent another package from beeing updated - do not update it.")) -#: urpm-reposync.py:85 -msgid "Remove all the packages which do not present in repository. By default, only some of them would be removed." -msgstr "" - -#: urpm-reposync.py:86 -msgid "Download packages and check wether they can be installed to your system, but do not install them." -msgstr "" - -#: urpm-reposync.py:87 -msgid "Do nothing with kernels." -msgstr "" - -#: urpm-reposync.py:88 -msgid "Run self-tests end exit." -msgstr "" - -#: urpm-reposync.py:89 -msgid "Show detailed information about packages are going to be removed or installed (why does it have to be done)" -msgstr "" - -#: urpm-reposync.py:93 -msgid "It's senseless to use --quiet without --auto!" -msgstr "" - -#: urpm-reposync.py:305 -msgid "Loading the list of installed packages..." -msgstr "" - -#: urpm-reposync.py:319 -msgid "Duplicating " -msgstr "" - -#: urpm-reposync.py:320 -msgid "Already found: " -msgstr "" - -#. print synthesis_list -#: urpm-reposync.py:396 -msgid "Processing medium " -msgstr "" - -#: urpm-reposync.py:414 -#, python-format -msgid "Could not read synthesis file. (File %s not found)" -msgstr "" - -#: urpm-reposync.py:484 -msgid "File can not be processed! Url: " -msgstr "" - -#: urpm-reposync.py:579 -#, python-format -msgid "Removing %s" -msgstr "" - -#: urpm-reposync.py:586 -msgid "urpm-reposync: error in package %s. Data: %(data)s" -msgstr "" - -#: urpm-reposync.py:683 -#, python-format -msgid "\tRequires %s, which will not be installed." -msgstr "" - -#: urpm-reposync.py:689 -#, python-format -msgid "\t%s conflicts with it" -msgstr "" - -#: urpm-reposync.py:694 -#, python-format -msgid "\tIt conflicts with %s" -msgstr "" - -#: urpm-reposync.py:768 -msgid "Some packages can not be installed dew to unresolved dependencies: " -msgstr "" - -#: urpm-reposync.py:771 -msgid "Contact repository maintaiers and send them this information, please." -msgstr "" - -#: urpm-reposync.py:777 -msgid "Downloading files..." -msgstr "" - -#: urpm-reposync.py:807 -msgid "Generating transaction..." -msgstr "" - -#: urpm-reposync.py:825 -msgid "Checking dependencies..." -msgstr "" - -#: urpm-reposync.py:830 -msgid "requires" -msgstr "" - -#: urpm-reposync.py:832 -msgid "conflicts with" -msgstr "" - -#: urpm-reposync.py:848 -#, python-format -msgid "Package %(name)s-%(ver)s-%(rel)s %(t)s %(namereq)s%(verreq)s" -msgstr "" - -#: urpm-reposync.py:854 -msgid "There are some unresolved dependencies: " -msgstr "" - -#: urpm-reposync.py:857 -msgid "Packages can not be installed. Please, contact urpm-tools developers and provide this output." -msgstr "" - -#: urpm-reposync.py:859 -msgid "No errors found in transaction" -msgstr "" - -#: urpm-reposync.py:864 -msgid "Running transaction..." -msgstr "" - -#: urpm-reposync.py:905 -msgid "WARNING: Some libraries are going to be removed because there are only the packages with the other architecture in the repository. Maybe you missed media with the correct architecture?" -msgstr "" - -#: urpm-reposync.py:946 urpm-reposync.py:981 urpm-reposync.py:1003 -#: urpm-reposync.py:1016 -msgid "Package Name" -msgstr "" - -#: urpm-reposync.py:946 urpm-reposync.py:1003 urpm-reposync.py:1016 -msgid "Current Version" -msgstr "" - -#: urpm-reposync.py:946 -msgid "New Version" -msgstr "" - -#: urpm-reposync.py:946 urpm-reposync.py:981 urpm-reposync.py:1003 -#: urpm-reposync.py:1016 -msgid "Arch" -msgstr "" - -#: urpm-reposync.py:948 -msgid "medium" -msgstr "" - -#: urpm-reposync.py:970 -msgid "The following packages are going to be upgraded:" -msgstr "" - -#: urpm-reposync.py:975 -msgid "The following packages are going to be downgraded:" -msgstr "" - -#: urpm-reposync.py:980 -msgid "Additional packages are going to be installed:" -msgstr "" - -#: urpm-reposync.py:981 -msgid "Version" -msgstr "" - -#: urpm-reposync.py:997 -#, python-format -msgid "\tRequired by %s" -msgstr "" - -#: urpm-reposync.py:1002 -msgid "The following packages are going to be removed:" -msgstr "" - -#: urpm-reposync.py:1015 -msgid "Packages which do not present in repositories, but do not have to be removed (will be saved):" -msgstr "" - -#: urpm-reposync.py:1022 -#, python-format -msgid "%d packages are going to be downloaded and installed." -msgstr "" - -#: urpm-reposync.py:1023 -#, python-format -msgid "%d packages are going to be removed." -msgstr "" - -#: urpm-reposync.py:1024 -#, python-format -msgid "%s will be downloaded." -msgstr "" - -#: urpm-reposync.py:1080 -#, python-format -msgid "\tForced to be removed dew to \"%s\" policy." -msgstr "" - -#: urpm-reposync.py:1108 -msgid "Nothing to do" -msgstr "" - -#: urpm-reposync.py:1121 -msgid "Do you want to proceed? (y/n): " -msgstr "" - -#: urpm-reposync.py:1126 -msgid "y" -msgstr "" - -#: urpm-reposync.py:1126 -msgid "yes" -msgstr "" - -#: urpm-reposync.py:1128 -msgid "n" -msgstr "" - -#: urpm-reposync.py:1128 -msgid "no" -msgstr "" - -#: urpm-repograph.py:86 -msgid "Tool for generating dependency graph for REPOSITORY packages." -msgstr "" - -#: urpm-repograph.py:90 -msgid "Search for cross-repository references in CROSS_REPO(s) repositories." -msgstr "" - -#: urpm-repograph.py:93 -msgid "Hide service messages. (About progress status etc.)" -msgstr "" - -#: urpm-repograph.py:95 -msgid "Show warnings. (About unprovided packages etc.)" -msgstr "" - -#: urpm-repograph.py:98 -msgid "Process \"requires\" package dependencies. Used by default." -msgstr "" - -#: urpm-repograph.py:100 -msgid "Process \"suggests\" package dependencies. If used without --requires then only suggests dependencies are processed." -msgstr "" - -#: urpm-repograph.py:103 -msgid "Process file dependencies." -msgstr "" - -#: urpm-repograph.py:105 -msgid "Show unprovided dependencies." -msgstr "" - -#: urpm-repograph.py:109 -msgid "Search for packages, which are required by package PKG (PKG is a file name or package name)" -msgstr "" - -#: urpm-repograph.py:111 -msgid "Search for packages, which requires package PKG (PKG is a file name or package name)" -msgstr "" - -#: urpm-repograph.py:115 -msgid "Search for all simple loops of package dependecies." -msgstr "" - -#: urpm-repograph.py:117 -msgid "Search for alternative packages providing the same feature." -msgstr "" - -#: urpm-repograph.py:119 -msgid "Search for all broken packages and anything beetween them" -msgstr "" - -#: urpm-repograph.py:121 -msgid "Output each loop or each alternative in different file. Ignored if --loops or --alternatives options are not present. OUTPUT_FILE (if present) is tracted as folder name for new files in that case." -msgstr "" - -#: urpm-repograph.py:127 -msgid "Change graph output to \"OUTPUT_FILE\". STDOUT by default." -msgstr "" - -#: urpm-repograph.py:129 -msgid "Do not output graph. Tool will not start working if --quiet, --nograph are present and --verbose is not. (If there is nothing to output - then nothing has to be done.)" -msgstr "" - -#: urpm-repograph.py:157 urpm-repodiff.py:125 -#, python-format -msgid "Error: URL to repository \"%s\" is incorrect" -msgstr "" - -#: urpm-repograph.py:179 urpm-repodiff.py:147 -#, python-format -msgid "Error: directory %s does not exist" -msgstr "" - -#: urpm-repograph.py:189 urpm-repodiff.py:157 -#, python-format -msgid "Error: \"%s\" is not correct url, path or name of repository" -msgstr "" - -#: urpm-repograph.py:216 -#, python-format -msgid "Error: directory %s already exists" -msgstr "" - -#: urpm-repograph.py:222 urpm-repograph.py:237 urpm-repodiff.py:183 -#, python-format -msgid "Error: File %s already exists" -msgstr "" - -#: urpm-repograph.py:229 -#, python-format -msgid "Error: directory %s was not created" -msgstr "" - -#: urpm-repograph.py:246 urpm-repodiff.py:192 -#, python-format -msgid "Error: File %s cannot be created" -msgstr "" - -#: urpm-repograph.py:250 urpm-repodiff.py:196 -#, python-format -msgid "Error: Path %s does not exist." -msgstr "" - -#: urpm-repograph.py:262 urpm-repodiff.py:218 -#, python-format -msgid "getting file %s from " -msgstr "" - -#: urpm-repograph.py:267 urpm-repodiff.py:223 -#, python-format -msgid "Error: file %s was not copied" -msgstr "" - -#: urpm-repograph.py:275 urpm-repodiff.py:231 -#, python-format -msgid "Error: file %(from)s was not downloaded to %(to)s" -msgstr "" - -#: urpm-repograph.py:288 urpm-repodiff.py:272 -msgid "Error: file not found: " -msgstr "" - -#: urpm-repograph.py:293 urpm-repodiff.py:277 -#, python-format -msgid "Error: cannot rename file %(from)s to %(to)s" -msgstr "" - -#: urpm-repograph.py:297 urpm-repograph.py:313 urpm-repograph.py:543 -#: urpm-repodiff.py:281 -#, python-format -msgid "Error: file %s is missing." -msgstr "" - -#: urpm-repograph.py:301 urpm-repodiff.py:285 -#, python-format -msgid "file %(from)s was renamed to %(to)s" -msgstr "" - -#: urpm-repograph.py:311 urpm-repograph.py:541 urpm-repodiff.py:294 -#: urpm-repodiff.py:297 -msgid "unpacking file " -msgstr "" - -#: urpm-repograph.py:371 urpm-repodiff.py:410 -msgid "REPODIFF-Warning: strange : " -msgstr "" - -#: urpm-repograph.py:406 urpm-repodiff.py:351 -#, python-format -msgid "Error: Synthesis file %s was not found." -msgstr "" - -#: urpm-repograph.py:409 -msgid "Parsing synthesis." -msgstr "" - -#: urpm-repograph.py:435 -#, python-format -msgid "Warning: Unexpected sign %(sign)s in 'provides' section of %(of)s" -msgstr "" - -#: urpm-repograph.py:451 urpm-repodiff.py:380 -msgid "Error: Failed to open synthesis file " -msgstr "" - -#: urpm-repograph.py:555 -msgid "Reading fileslist" -msgstr "" - -#: urpm-repograph.py:557 -msgid "Error: Can't find fileslist " -msgstr "" - -#: urpm-repograph.py:561 -msgid "Error: Can't read fileslist " -msgstr "" - -#: urpm-repograph.py:565 -msgid "Error: Wrong fileslist." -msgstr "" - -#: urpm-repograph.py:578 -msgid "Error: Corrupted fileslist" -msgstr "" - -#: urpm-repograph.py:608 -msgid "Warning: cross-repository dependency: " -msgstr "" - -#: urpm-repograph.py:612 urpm-repograph.py:662 -msgid "Warning: package has self-dependecies: " -msgstr "" - -#: urpm-repograph.py:658 -#, python-format -msgid "" -"Warning: cross-repository dependency:\n" -" package %(pkg)s is dependent from\n" -" <- %(from)s located in another repository" -msgstr "" - -#: urpm-repograph.py:691 -#, python-format -msgid "Warning: needed version is absent <%(ver)s> %(rel)s required by package" -msgstr "" - -#: urpm-repograph.py:708 -#, python-format -msgid "Warning: Package %(pkg)s unprovided by %(by)s" -msgstr "" - -#: urpm-repograph.py:740 -msgid "Finding dependencies." -msgstr "" - -#: urpm-repograph.py:749 -#, python-format -msgid "" -"Warning: can't find <%(ask)s> required by package\n" -" <%(pkg)s>" -msgstr "" - -#: urpm-repograph.py:812 -msgid "Total cross-referenced packages: " -msgstr "" - -#: urpm-repograph.py:816 -msgid "Total unprovided packages: " -msgstr "" - -#: urpm-repograph.py:833 -msgid "Calculating colors." -msgstr "" - -#: urpm-repograph.py:1112 -msgid "Non-cycle nodes removed: " -msgstr "" - -#: urpm-repograph.py:1113 -msgid "Cyclic packages: " -msgstr "" - -#: urpm-repograph.py:1130 -#, python-format -msgid "Worktime: %s seconds" -msgstr "" - -#: urpm-repograph.py:1136 -msgid "Searching loops." -msgstr "" - -#: urpm-repograph.py:1140 urpm-repograph.py:1188 -msgid "End of search." -msgstr "" - -#: urpm-repograph.py:1141 -#, python-format -msgid "Loops search: %s seconds" -msgstr "" - -#: urpm-repograph.py:1145 -#, python-format -msgid "Total: %s loops." -msgstr "" - -#: urpm-repograph.py:1151 -msgid "Loop " -msgstr "" - -#: urpm-repograph.py:1168 -msgid "Searching alternatives." -msgstr "" - -#: urpm-repograph.py:1180 -#, python-format -msgid "Total: %d alternatives." -msgstr "" - -#: urpm-repograph.py:1182 -msgid "Alternative " -msgstr "" - -#: urpm-repograph.py:1182 -msgid " is provided by:" -msgstr "" - -#: urpm-repograph.py:1260 -msgid "Searching for broken packages." -msgstr "" - -#: urpm-repograph.py:1266 -msgid "Searching for packages REQUIRED by " -msgstr "" - -#: urpm-repograph.py:1268 -msgid "Searching for packages that REQUIRE " -msgstr "" - -#: urpm-repograph.py:1276 -#, python-format -msgid "Level %d dependency." -msgstr "" - -#: urpm-repograph.py:1355 -msgid "Remaking structures." -msgstr "" - -#: urpm-repograph.py:1367 -msgid "Error: can't find package name or filename \"" -msgstr "" - -#: urpm-repograph.py:1401 -msgid "Do not use -q/--quiet and -n/--nograph without -v/--verbose together." -msgstr "" - -#: urpm-repograph.py:1402 -msgid "That way there is no information to output anywhere. Nothing will be done." -msgstr "" - -#: urpm-repograph.py:1405 -msgid "Do not use -u/--unprovided and -b/--broken options together." -msgstr "" - -#: urpm-repograph.py:1406 -msgid "-b does everything that do -u and a little more." -msgstr "" - -#: urpm-downloader.py:91 -msgid "A tool for downloading RPMs and SRPMs from URPM-based linux repositories" -msgstr "" - -#: urpm-downloader.py:92 -msgid "If none of the options -b, -s, -d turned on, it will be treated as -b" -msgstr "" - -#: urpm-downloader.py:93 -msgid "Package name(s) to download. It can contain not only package names, but (S)RPM files too. In this case package name extracted from this file will be used" -msgstr "" - -#: urpm-downloader.py:94 -msgid "Instead of downloading files, list the URLs that would be processed" -msgstr "" - -#: urpm-downloader.py:95 -msgid "When downloading RPMs, resolve dependencies and also download the required packages, if they are not already installed" -msgstr "" - -#: urpm-downloader.py:96 -msgid "When downloading RPMs, resolve dependencies and also download the required packages, even if they are already installed" -msgstr "" - -#: urpm-downloader.py:97 -msgid "Download binary RPMs" -msgstr "" - -#: urpm-downloader.py:98 -msgid "Download the source RPMs (SRPMs)" -msgstr "" - -#: urpm-downloader.py:99 -msgid "Download debug RPMs" -msgstr "" - -#: urpm-downloader.py:100 -msgid "Download debug RPMs and install" -msgstr "" - -#: urpm-downloader.py:103 -msgid "Quiet operation." -msgstr "" - -#: urpm-downloader.py:106 -msgid "Exclude package(s) by regex" -msgstr "" - -#: urpm-downloader.py:107 -msgid "Try to continue when error occurs" -msgstr "" - -#: urpm-downloader.py:108 -msgid "If the file already exists, download it again and overwrite the old one" -msgstr "" - -#: urpm-downloader.py:109 -msgid "If package dependency can be satisfied by several packages, download all of them (by default, only the first one is downloaded)" -msgstr "" - -#: urpm-downloader.py:110 -msgid "If different versions of package present in repository, process them all" -msgstr "" - -#. arg_parser.add_argument('--self-test', action='store_true', help="Test urpm-downloader end exit") -#: urpm-downloader.py:113 -msgid "Specify a destination directory for the download" -msgstr "" - -#: urpm-downloader.py:130 -msgid "Use of --verbose with --quiet is senseless. Turning verbose mode off." -msgstr "" - -#: urpm-downloader.py:134 -msgid "Note that resolving of SRPM dependencies is not possible until SRPM downloaded. So, it will be done despite --urls" -msgstr "" - -#: urpm-downloader.py:375 -msgid "* Downloaded: " -msgstr "" - -#: urpm-downloader.py:377 -msgid "* File exists, skipping: " -msgstr "" - -#: urpm-downloader.py:476 -msgid "Can not download SRPM for package" -msgstr "" - -#: urpm-downloader.py:499 urpm-downloader.py:532 -msgid "Can not download RPM" -msgstr "" - -#: urpm-downloader.py:504 -msgid "Resolving debug-info packages..." -msgstr "" - -#. urpmq output. RU: Нет пакета с названием -#: urpm-downloader.py:509 -msgid "No package named " -msgstr "" - -#: urpm-downloader.py:533 -msgid "Maybe you need to update urpmi database (urpmi.update -a)?" -msgstr "" - -#: urpm-downloader.py:542 -msgid "Installing " -msgstr "" - -#. return code is not 0 -#: urpm-downloader.py:553 -#, python-format -msgid "Debug package for '%s' not found" -msgstr "" - -#: urpm-downloader.py:602 -msgid "Parameters that end with '.rpm' seem to be local files, but the folowing files do not exist: " -msgstr "" - -#: urpm-downloader.py:627 -msgid "Searching src.rpm file(s) in repository..." -msgstr "" - -#: urpm-downloader.py:629 -msgid "Downloading src.rpm file(s)..." -msgstr "" - -#: urpm-downloader.py:659 -msgid "Resolving build dependencies..." -msgstr "" - -#: urpm-downloader.py:661 -msgid "Resolving dependencies..." -msgstr "" - -#: urpm-downloader.py:663 -#, python-format -msgid "Resolved %d packages" -msgstr "" - -#: urpm-downloader.py:665 -msgid "Nothing to download" -msgstr "" - -#: urpm-repomanage.py:56 -#, python-format -msgid "Error accessing directory %(path)s, %(e)s" -msgstr "" - -#: urpm-repomanage.py:86 -msgid "manage a directory of rpm packages and report newest or oldest packages" -msgstr "" - -#: urpm-repomanage.py:92 -msgid "path to directory with rpm packages" -msgstr "" - -#: urpm-repomanage.py:95 -msgid "print the older packages" -msgstr "" - -#: urpm-repomanage.py:97 -msgid "print the newest packages (this is the default behavior)" -msgstr "" - -#: urpm-repomanage.py:99 -msgid "remove older packages" -msgstr "" - -#: urpm-repomanage.py:101 -msgid "space separated output, not newline" -msgstr "" - -#: urpm-repomanage.py:103 -msgid "number of newest packages to keep - defaults to 1" -msgstr "" - -#: urpm-repomanage.py:105 -msgid "do not check package payload signatures/digests" -msgstr "" - -#: urpm-repomanage.py:108 -msgid "be completely quiet" -msgstr "" - -#: urpm-repomanage.py:110 -msgid "be verbose - say which packages are decided to be old and why (this info is dumped to STDERR)" -msgstr "" - -#: urpm-repomanage.py:131 -msgid "No files to process" -msgstr "" - -#: urpm-repomanage.py:144 -#, python-format -msgid "Error opening pkg %(pkg)s: %(err)s" -msgstr "" - -#: urpm-repomanage.py:195 urpm-repomanage.py:221 -msgid "Dropped " -msgstr "" - -#: urpm-repomanage.py:196 urpm-repomanage.py:222 -msgid " superseded by: " -msgstr "" - -#: urpm-repodiff.py:83 -msgid "Tool for comparing sets of repositories." -msgstr "" - -#: urpm-repodiff.py:85 -msgid "URL or PATH to old repositories" -msgstr "" - -#: urpm-repodiff.py:87 -msgid "URL or PATH to new repositories" -msgstr "" - -#: urpm-repodiff.py:89 -msgid "Show differences in package sizes." -msgstr "" - -#: urpm-repodiff.py:91 -msgid "Simple output format." -msgstr "" - -#: urpm-repodiff.py:93 -msgid "Hide service messages." -msgstr "" - -#: urpm-repodiff.py:95 -msgid "Show changelog difference." -msgstr "" - -#: urpm-repodiff.py:97 -#, python-format -msgid "Output in HTML format, if --output is not present \"%s\" will be created in current directory. --size, --simple and --changelog options are ignored." -msgstr "" - -#: urpm-repodiff.py:101 -msgid "Change standart output to \"OUTPUT_FILE\"." -msgstr "" - -#: urpm-repodiff.py:174 -#, python-format -msgid "Error: Cannot open %s for writing." -msgstr "" - -#: urpm-repodiff.py:354 -msgid "Parsing synthesis" -msgstr "" - -#: urpm-repodiff.py:389 -msgid "REPODIFF-Warning: strange format of or : " -msgstr "" - -#: urpm-repodiff.py:527 -msgid "New package: " -msgstr "" - -#: urpm-repodiff.py:542 -msgid "Generating obsoleted list." -msgstr "" - -#: urpm-repodiff.py:601 -msgid "Removed package: " -msgstr "" - -#: urpm-repodiff.py:609 -msgid " Obsoleted by " -msgstr "" - -#: urpm-repodiff.py:630 -msgid "Reading changelog" -msgstr "" - -#: urpm-repodiff.py:632 -msgid "Error: Can't find changelog " -msgstr "" - -#: urpm-repodiff.py:636 -msgid "Error: Can't read changelog " -msgstr "" - -#: urpm-repodiff.py:640 -msgid "Error: Wrong changelog." -msgstr "" - -#: urpm-repodiff.py:662 -msgid "Error: Corrupted changelog" -msgstr "" - -#: urpm-repodiff.py:756 -msgid "Generating changes list." -msgstr "" - -#: urpm-repodiff.py:770 urpm-repodiff.py:773 -#, python-format -msgid "REPODIFF-Warning: Package %s was not described in changelogs.xml" -msgstr "" - -#: urpm-repodiff.py:771 -msgid "REPODIFF-Warning: Changelogs of a package are absent in \"new\" repository." -msgstr "" - -#: urpm-repodiff.py:774 -msgid "REPODIFF-Warning: Changelogs of a package are absent." -msgstr "" - -#: urpm-repodiff.py:800 -#, python-format -msgid "Package %s has no changelog info\n" -msgstr "" - -#: urpm-repodiff.py:818 -msgid "" -"\n" -"\n" -"Updated packages:\n" -"\n" -msgstr "" - -#: urpm-repodiff.py:825 -msgid " ***DOWNGRADED***\n" -msgstr "" - -#: urpm-repodiff.py:834 -#, python-format -msgid "" -"Size Change: %d bytes\n" -"\n" -msgstr "" - -#: urpm-repodiff.py:844 -msgid " Total added packages: " -msgstr "" - -#: urpm-repodiff.py:847 -msgid " Total removed packages: " -msgstr "" - -#: urpm-repodiff.py:856 -msgid " Total updated packages: " -msgstr "" - -#: urpm-repodiff.py:858 -msgid " Total downgraded packages: " -msgstr "" - -#: urpm-repodiff.py:1316 -msgid "Creating HTML file." -msgstr "" - -#: urpm-package-cleanup.py:58 -msgid "Find problems in the rpmdb of system and correct them" -msgstr "" - -#: urpm-package-cleanup.py:62 -msgid "Query format to use for output." -msgstr "" - -#: urpm-package-cleanup.py:65 -msgid "Use non-interactive mode" -msgstr "" - -#: urpm-package-cleanup.py:68 -msgid "Orphans Options" -msgstr "" - -#: urpm-package-cleanup.py:71 -msgid "List installed packages which are not available from currently configured repositories" -msgstr "" - -#: urpm-package-cleanup.py:75 -msgid "Use only update media. This means that urpmq will search and resolve dependencies only in media marked as containing updates (e.g. which have been created with \"urpmi.addmedia --update\")." -msgstr "" - -#: urpm-package-cleanup.py:80 -msgid "Select specific media to be used, instead of defaulting to all available media (or all update media if --update is used). No rpm will be found in other media." -msgstr "" - -#: urpm-package-cleanup.py:85 -msgid "Do not use the specified media." -msgstr "" - -#: urpm-package-cleanup.py:87 -msgid "Dependency Problems Options" -msgstr "" - -#: urpm-package-cleanup.py:90 -msgid "List dependency problems in the local RPM database" -msgstr "" - -#: urpm-package-cleanup.py:93 -msgid "List missing suggestions of installed packages" -msgstr "" - -#: urpm-package-cleanup.py:96 -msgid "Duplicate Package Options" -msgstr "" - -#: urpm-package-cleanup.py:99 -msgid "Scan for duplicates in your rpmdb" -msgstr "" - -#: urpm-package-cleanup.py:102 -msgid "Scan for duplicates in your rpmdb and remove older " -msgstr "" - -#: urpm-package-cleanup.py:105 -msgid "disable rpm scriptlets from running when cleaning duplicates" -msgstr "" - -#: urpm-package-cleanup.py:107 -msgid "Leaf Node Options" -msgstr "" - -#: urpm-package-cleanup.py:110 -msgid "List leaf nodes in the local RPM database" -msgstr "" - -#: urpm-package-cleanup.py:113 -msgid "list all packages leaf nodes that do not match leaf-regex" -msgstr "" - -#: urpm-package-cleanup.py:117 -msgid "A package name that matches this regular expression (case insensitively) is a leaf" -msgstr "" - -#: urpm-package-cleanup.py:121 -msgid "do not list development packages as leaf nodes" -msgstr "" - -#: urpm-package-cleanup.py:124 -msgid "do not list packages with files in a bin dirs as leaf nodes" -msgstr "" - -#: urpm-package-cleanup.py:127 -msgid "Old Kernel Options" -msgstr "" - -#: urpm-package-cleanup.py:130 -msgid "Remove old kernel and kernel-devel packages" -msgstr "" - -#: urpm-package-cleanup.py:133 -msgid "Number of kernel packages to keep on the system (default 2)" -msgstr "" - -#: urpm-package-cleanup.py:137 -msgid "Do not remove kernel-devel packages when removing kernels" -msgstr "" - -#: urpm-package-cleanup.py:306 -#, python-format -msgid "Warning: neither single nor multi lib arch: %s " -msgstr "" - -#: urpm-package-cleanup.py:417 -#, python-format -msgid "Not removing kernel %(kver)s-%(krel)s because it is the running kernel" -msgstr "" - -#: urpm-package-cleanup.py:447 -#, python-format -msgid "Package %(qf)s %(prob)s" -msgstr "" - -#: urpm-package-cleanup.py:450 -msgid "Missing suggests:" -msgstr "" - -#: urpm-package-cleanup.py:458 -msgid "No Problems Found" -msgstr "" - -#: urpm-package-cleanup.py:473 -msgid "Error: Cannot remove kernels as a user, must be root" -msgstr "" - -#: urpm-package-cleanup.py:476 -msgid "Error: should keep at least 1 kernel!" -msgstr "" - -#: urpm-package-cleanup.py:529 -msgid "Error: Cannot remove packages as a user, must be root" -msgstr "" diff --git a/urpm-tools/locale/ru/LC_MESSAGES/urpm-tools.mo b/urpm-tools/locale/ru/LC_MESSAGES/urpm-tools.mo new file mode 100644 index 0000000..8af0793 Binary files /dev/null and b/urpm-tools/locale/ru/LC_MESSAGES/urpm-tools.mo differ diff --git a/urpm-tools/locale/ru/LC_MESSAGES/urpm-tools.po b/urpm-tools/locale/ru/LC_MESSAGES/urpm-tools.po new file mode 100644 index 0000000..74dfa19 --- /dev/null +++ b/urpm-tools/locale/ru/LC_MESSAGES/urpm-tools.po @@ -0,0 +1,1518 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2012 +# This file is distributed under the same license as the urpm-tools package. +# Anton Kirilenko , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: 1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-09-21 14:33+0400\n" +"PO-Revision-Date: 2012-08-21 16:35+0300\n" +"Last-Translator: Anton Kirilenko \n" +"Language-Team: RUSSIAN\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: urpm-repodiff.py:83 urpm-tools/urpm-repodiff.py:83 +msgid "Tool for comparing sets of repositories." +msgstr "Инструмент для сравнения наборов репозиториев." + +#: urpm-repodiff.py:84 +msgid "global parameters" +msgstr "" + +#: urpm-repodiff.py:85 +msgid "Parameters used in all cases." +msgstr "" + +#: urpm-repodiff.py:87 urpm-tools/urpm-repodiff.py:85 +msgid "URL or PATH to old repositories" +msgstr "URL или пути к старым репозиториям" + +#: urpm-repodiff.py:89 urpm-tools/urpm-repodiff.py:87 +msgid "URL or PATH to new repositories" +msgstr "URL или пути к новым репозиториям" + +#: urpm-repodiff.py:91 urpm-tools/urpm-repodiff.py:93 +msgid "Hide service messages." +msgstr "Не показывать служебные сообщения." + +#: urpm-repodiff.py:93 +msgid "Ignore release during package compare." +msgstr "" + +#: urpm-repodiff.py:95 +msgid "Output summary." +msgstr "Отобразить итог." + +#: urpm-repodiff.py:97 urpm-tools/urpm-repodiff.py:101 +msgid "Change standart output to \"OUTPUT_FILE\"." +msgstr "Перенаправить вывод в \"OUTPUT_FILE\"" + +#: urpm-repodiff.py:99 +#, fuzzy +msgid "File with list of ignored packages" +msgstr "Загрузка списка установленных пакетов..." + +#: urpm-repodiff.py:100 +msgid "text mode parameters" +msgstr "" + +#: urpm-repodiff.py:101 +msgid "Parameters used only in text mode. (--html not present)" +msgstr "" + +#: urpm-repodiff.py:103 urpm-tools/urpm-repodiff.py:89 +msgid "Show differences in package sizes." +msgstr "Показывать различия в размерах пакетов." + +#: urpm-repodiff.py:105 urpm-tools/urpm-repodiff.py:91 +msgid "Simple output format." +msgstr "Упрощенный формат вывода." + +#: urpm-repodiff.py:107 urpm-tools/urpm-repodiff.py:95 +msgid "Show changelog difference." +msgstr "Показывать разницу списков изменений." + +#: urpm-repodiff.py:108 +msgid "HTML mode parameters" +msgstr "" + +#: urpm-repodiff.py:109 +msgid "Parameters used only in HTML mode. (--html is present)" +msgstr "" + +#: urpm-repodiff.py:111 urpm-tools/urpm-repodiff.py:97 +#, python-format +msgid "Output in HTML format, if --output is not present \"%s\" will be created in current directory. --size, --simple and --changelog options are ignored." +msgstr "Вывод в формате HTML. Если --output не указан, то файл \"%s\" будет создан в текущей директории. Опции --size, --simple и --changelog будут игнорироваться." + +#: urpm-repodiff.py:115 +#, fuzzy +msgid "Repository names for output." +msgstr "Формат вывода." + +#: urpm-repodiff.py:116 +msgid "Filters" +msgstr "" + +#: urpm-repodiff.py:117 +msgid "Filters for output. If none selected then every type will\t\t be shown" +msgstr "" + +#: urpm-repodiff.py:120 +#, fuzzy +msgid "Show new packages" +msgstr "Новый пакет: " + +#: urpm-repodiff.py:122 +#, fuzzy +msgid "Show removed packages" +msgstr "удалить более старые пакеты" + +#: urpm-repodiff.py:124 +#, fuzzy +msgid "Show updated packages" +msgstr " Всего обновлено пакетов: " + +#: urpm-repodiff.py:126 +#, fuzzy +msgid "Show downgraded packages" +msgstr " Всего пакетов с пониженной версией: " + +#: urpm-repodiff.py:150 urpm-repograph.py:157 urpm-tools/urpm-repodiff.py:125 +#: urpm-tools/urpm-repograph.py:157 +#, python-format +msgid "Error: URL to repository \"%s\" is incorrect" +msgstr "Ошибка: Неверный URL репозитория \"%s\"" + +#: urpm-repodiff.py:172 urpm-repograph.py:179 urpm-tools/urpm-repodiff.py:147 +#: urpm-tools/urpm-repograph.py:179 +#, python-format +msgid "Error: directory %s does not exist" +msgstr "Ошибка: директория %s не существует" + +#: urpm-repodiff.py:182 urpm-repograph.py:189 urpm-tools/urpm-repodiff.py:157 +#: urpm-tools/urpm-repograph.py:189 +#, python-format +msgid "Error: \"%s\" is not correct url, path or name of repository" +msgstr "Ошибка: \"%s\" не является корректным URL, путем или именем репозитория" + +#: urpm-repodiff.py:199 urpm-tools/urpm-repodiff.py:174 +#, python-format +msgid "Error: Cannot open %s for writing." +msgstr "Ошибка: Не удалось открыть %s для записи." + +#: urpm-repodiff.py:208 urpm-repograph.py:222 urpm-repograph.py:237 +#: urpm-tools/urpm-repodiff.py:183 urpm-tools/urpm-repograph.py:222 +#: urpm-tools/urpm-repograph.py:237 +#, python-format +msgid "Error: File %s already exists" +msgstr "Ошибка: Файл %s уже существует" + +#: urpm-repodiff.py:217 urpm-repograph.py:246 urpm-tools/urpm-repodiff.py:192 +#: urpm-tools/urpm-repograph.py:246 +#, python-format +msgid "Error: File %s cannot be created" +msgstr "Ошибка: Не удалось создать файл %s" + +#: urpm-repodiff.py:221 urpm-repograph.py:250 urpm-tools/urpm-repodiff.py:196 +#: urpm-tools/urpm-repograph.py:250 +#, python-format +msgid "Error: Path %s does not exist." +msgstr "Ошибка: Путь %s не существует." + +#: urpm-repodiff.py:235 +#, python-format +msgid "Error: number of REPONAME's(%s) are not equal to number of groups(%s)" +msgstr "" + +#: urpm-repodiff.py:249 urpm-repograph.py:262 urpm-tools/urpm-repodiff.py:218 +#: urpm-tools/urpm-repograph.py:262 +#, python-format +msgid "getting file %s from " +msgstr "получение файла %s из " + +#: urpm-repodiff.py:254 urpm-repograph.py:267 urpm-tools/urpm-repodiff.py:223 +#: urpm-tools/urpm-repograph.py:267 +#, python-format +msgid "Error: file %s was not copied" +msgstr "Ошибка: файл %s был скопирован" + +#: urpm-repodiff.py:262 urpm-repograph.py:275 urpm-tools/urpm-repodiff.py:231 +#: urpm-tools/urpm-repograph.py:275 +#, python-format +msgid "Error: file %(from)s was not downloaded to %(to)s" +msgstr "Ошибка: файл %(from)s не был скачан в %(to)s" + +#: urpm-repodiff.py:301 +#, fuzzy, python-format +msgid "Error: file %s does not exist." +msgstr "Ошибка: Путь %s не существует." + +#: urpm-repodiff.py:314 +#, fuzzy, python-format +msgid "Error: file %s cannot be read." +msgstr "Ошибка: Не удалось создать файл %s" + +#: urpm-repodiff.py:354 urpm-repograph.py:288 urpm-tools/urpm-repodiff.py:272 +#: urpm-tools/urpm-repograph.py:288 +msgid "Error: file not found: " +msgstr "Ошибка: файл не найден: " + +#: urpm-repodiff.py:359 urpm-repograph.py:293 urpm-tools/urpm-repodiff.py:277 +#: urpm-tools/urpm-repograph.py:293 +#, python-format +msgid "Error: cannot rename file %(from)s to %(to)s" +msgstr "Ошибка: не удалось переименовать файл %(from)s в %(to)s" + +#: urpm-repodiff.py:363 urpm-repograph.py:297 urpm-repograph.py:313 +#: urpm-repograph.py:543 urpm-tools/urpm-repodiff.py:281 +#: urpm-tools/urpm-repograph.py:297 urpm-tools/urpm-repograph.py:313 +#: urpm-tools/urpm-repograph.py:543 +#, python-format +msgid "Error: file %s is missing." +msgstr "Ошибка: файл %s отсутствует." + +#: urpm-repodiff.py:367 urpm-repograph.py:301 urpm-tools/urpm-repodiff.py:285 +#: urpm-tools/urpm-repograph.py:301 +#, python-format +msgid "file %(from)s was renamed to %(to)s" +msgstr "файл %(from)s был переименован в %(to)s" + +#: urpm-repodiff.py:376 urpm-repodiff.py:379 urpm-repograph.py:311 +#: urpm-repograph.py:541 urpm-tools/urpm-repodiff.py:294 +#: urpm-tools/urpm-repodiff.py:297 urpm-tools/urpm-repograph.py:311 +#: urpm-tools/urpm-repograph.py:541 +msgid "unpacking file " +msgstr "распаковка файла " + +#: urpm-repodiff.py:434 urpm-repograph.py:406 urpm-tools/urpm-repodiff.py:351 +#: urpm-tools/urpm-repograph.py:406 +#, python-format +msgid "Error: Synthesis file %s was not found." +msgstr "Ошибка: Synthesis файл %s не найден." + +#: urpm-repodiff.py:437 urpm-tools/urpm-repodiff.py:354 +msgid "Parsing synthesis" +msgstr "Чтение synthesis файла" + +#: urpm-repodiff.py:466 urpm-repograph.py:451 urpm-tools/urpm-repodiff.py:380 +#: urpm-tools/urpm-repograph.py:451 +msgid "Error: Failed to open synthesis file " +msgstr "Ошибка: Не удалось открыть synthesis файл" + +#: urpm-repodiff.py:475 urpm-tools/urpm-repodiff.py:389 +msgid "REPODIFF-Warning: strange format of or : " +msgstr "REPODIFF-Предупреждение: необычный формат или : " + +#: urpm-repodiff.py:496 urpm-repograph.py:371 urpm-tools/urpm-repodiff.py:410 +#: urpm-tools/urpm-repograph.py:371 +msgid "REPODIFF-Warning: strange : " +msgstr "REPODIFF-Предупреждение: необычное поле : " + +#: urpm-repodiff.py:626 urpm-tools/urpm-repodiff.py:527 +msgid "New package: " +msgstr "Новый пакет: " + +#: urpm-repodiff.py:641 urpm-tools/urpm-repodiff.py:542 +msgid "Generating obsoleted list." +msgstr "Создание списка устаревших пакетов." + +#: urpm-repodiff.py:700 urpm-tools/urpm-repodiff.py:601 +msgid "Removed package: " +msgstr "Удален пакет: " + +#: urpm-repodiff.py:708 urpm-tools/urpm-repodiff.py:609 +msgid " Obsoleted by " +msgstr " Устарел из-за добавления " + +#: urpm-repodiff.py:730 urpm-tools/urpm-repodiff.py:630 +msgid "Reading changelog" +msgstr "Чтение списка изменений" + +#: urpm-repodiff.py:732 urpm-tools/urpm-repodiff.py:632 +msgid "Error: Can't find changelog " +msgstr "Ошибка: Не удалось найти список изменений " + +#: urpm-repodiff.py:736 urpm-tools/urpm-repodiff.py:636 +msgid "Error: Can't read changelog " +msgstr "Ошибка: Не удалось прочитать список изменений " + +#: urpm-repodiff.py:740 urpm-tools/urpm-repodiff.py:640 +msgid "Error: Wrong changelog." +msgstr "Ошибка: Неправильный список изменений." + +#: urpm-repodiff.py:762 urpm-tools/urpm-repodiff.py:662 +msgid "Error: Corrupted changelog" +msgstr "Ошибка: Поврежденный список изменений" + +#: urpm-repodiff.py:861 urpm-tools/urpm-repodiff.py:756 +msgid "Generating changes list." +msgstr "Создание списка изменений." + +#: urpm-repodiff.py:877 urpm-repodiff.py:880 urpm-tools/urpm-repodiff.py:770 +#: urpm-tools/urpm-repodiff.py:773 +#, python-format +msgid "REPODIFF-Warning: Package %s was not described in changelogs.xml" +msgstr "REPODIFF-Предупреждение: Пакет %s не описан в changelogs.xml" + +#: urpm-repodiff.py:878 urpm-tools/urpm-repodiff.py:771 +msgid "REPODIFF-Warning: Changelogs of a package are absent in \"new\" repository." +msgstr "REPODIFF-Предупреждение: В репозитории \"новый\" отсутствует список изменений пакета." + +#: urpm-repodiff.py:881 urpm-tools/urpm-repodiff.py:774 +msgid "REPODIFF-Warning: Changelogs of a package are absent." +msgstr "REPODIFF-Предупреждение: У пакета отсутствует список изменений." + +#: urpm-repodiff.py:910 urpm-tools/urpm-repodiff.py:800 +#, python-format +msgid "Package %s has no changelog info\n" +msgstr "Пакет %s не имеет списка изменений\n" + +#: urpm-repodiff.py:930 urpm-tools/urpm-repodiff.py:818 +msgid "" +"\n" +"\n" +"Updated packages:\n" +"\n" +msgstr "" +"\n" +"\n" +"Обновленные пакеты:\n" +"\n" + +#: urpm-repodiff.py:938 urpm-tools/urpm-repodiff.py:825 +msgid " ***DOWNGRADED***\n" +msgstr " ***УСТАНОВЛЕНА ПРЕДЫДУЩАЯ ВЕРСИЯ***\n" + +#: urpm-repodiff.py:956 urpm-tools/urpm-repodiff.py:834 +#, python-format +msgid "" +"Size Change: %d bytes\n" +"\n" +msgstr "" +"Размер изменен: %d байт\n" +"\n" + +#: urpm-repodiff.py:971 +msgid "Summary:" +msgstr "" + +#: urpm-repodiff.py:979 urpm-tools/urpm-repodiff.py:844 +msgid " Total added packages: " +msgstr " Всего добавлено пакетов: " + +#: urpm-repodiff.py:983 urpm-tools/urpm-repodiff.py:847 +msgid " Total removed packages: " +msgstr " Всего удалено пакетов: " + +#: urpm-repodiff.py:994 urpm-tools/urpm-repodiff.py:856 +msgid " Total updated packages: " +msgstr " Всего обновлено пакетов: " + +#: urpm-repodiff.py:997 urpm-tools/urpm-repodiff.py:858 +msgid " Total downgraded packages: " +msgstr " Всего пакетов с пониженной версией: " + +#: urpm-repodiff.py:1498 urpm-tools/urpm-repodiff.py:1316 +msgid "Creating HTML file." +msgstr "Создание HTML файла." + +#: urpm-repomanage.py:56 urpm-tools/urpm-repomanage.py:56 +#, python-format +msgid "Error accessing directory %(path)s, %(e)s" +msgstr "Ошибка доступа к директории %(path)s: %(e)s" + +#: urpm-repomanage.py:86 urpm-tools/urpm-repomanage.py:86 +msgid "manage a directory of rpm packages and report newest or oldest packages" +msgstr "Обработать директорию с rpm пакетами и сообщить о наиболее новых и старых версиях" + +#: urpm-repomanage.py:92 urpm-tools/urpm-repomanage.py:92 +msgid "path to directory with rpm packages" +msgstr "путь к директории с rpm пакетами" + +#: urpm-repomanage.py:95 urpm-tools/urpm-repomanage.py:95 +msgid "print the older packages" +msgstr "напечатать более старые пакеты" + +#: urpm-repomanage.py:97 urpm-tools/urpm-repomanage.py:97 +msgid "print the newest packages (this is the default behavior)" +msgstr "напечатать наиболее новые пакеты (поведение по умолчанию)" + +#: urpm-repomanage.py:99 urpm-tools/urpm-repomanage.py:99 +msgid "remove older packages" +msgstr "удалить более старые пакеты" + +#: urpm-repomanage.py:101 urpm-tools/urpm-repomanage.py:101 +msgid "space separated output, not newline" +msgstr "вывод разделяется пробелами, а не переводами строки" + +#: urpm-repomanage.py:103 urpm-tools/urpm-repomanage.py:103 +msgid "number of newest packages to keep - defaults to 1" +msgstr "количество наиболее новых пакетов, которые надо оставить - по умолчанию 1" + +#: urpm-repomanage.py:105 urpm-tools/urpm-repomanage.py:105 +msgid "do not check package payload signatures/digests" +msgstr "не проверять встроенные подписи пакетов" + +#: urpm-repomanage.py:108 urpm-tools/urpm-repomanage.py:108 +msgid "be completely quiet" +msgstr "ничего не печатать" + +#: urpm-repomanage.py:110 urpm-tools/urpm-repomanage.py:110 +msgid "be verbose - say which packages are decided to be old and why (this info is dumped to STDERR)" +msgstr "показывать дополнительную информацию - какие пакеты выбраны наиболее новыми и почему (информация выводится в STDERR)" + +#: urpm-repomanage.py:131 urpm-tools/urpm-repomanage.py:131 +msgid "No files to process" +msgstr "Нет файлов для обработки" + +#: urpm-repomanage.py:144 urpm-tools/urpm-repomanage.py:144 +#, python-format +msgid "Error opening pkg %(pkg)s: %(err)s" +msgstr "Ошибка открытия файла: %(pkg)s: %(err)s" + +#: urpm-repomanage.py:195 urpm-repomanage.py:221 +#: urpm-tools/urpm-repomanage.py:195 urpm-tools/urpm-repomanage.py:221 +msgid "Dropped " +msgstr "Убран " + +#: urpm-repomanage.py:196 urpm-repomanage.py:222 +#: urpm-tools/urpm-repomanage.py:196 urpm-tools/urpm-repomanage.py:222 +msgid " superseded by: " +msgstr " заменен на: " + +#. if not fatal_fails, do nothing. Caller have to deal with that himself +#. rpm return code is not 0 +#. if not fatal_fails, do nothing. Caller have to deal with that himself +#. rpm return code is not 0 +#: urpm-reposync.py:64 urpm-downloader.py:156 urpm-downloader.py:546 +#: urpm-tools/urpm-reposync.py:64 urpm-tools/urpm-downloader.py:156 +#: urpm-tools/urpm-downloader.py:546 +msgid "Error while calling command" +msgstr "Ошибка при выполнении команды" + +#: urpm-reposync.py:66 urpm-downloader.py:158 urpm-tools/urpm-reposync.py:66 +#: urpm-tools/urpm-downloader.py:158 +msgid "Error message: \n" +msgstr "Сообщение об ошибке: \n" + +#: urpm-reposync.py:74 urpm-tools/urpm-reposync.py:74 +msgid "reposync is used to synchronize a set of packages on the local computer with the remote repository." +msgstr "Инструмент reposync используется для синхронизации установленных на компьютере пакетов с удаленным репозиторием." + +#: urpm-reposync.py:76 urpm-downloader.py:104 urpm-tools/urpm-reposync.py:76 +#: urpm-tools/urpm-downloader.py:104 +msgid "Use only selected URPM media" +msgstr "Использовать только указанные источники" + +#: urpm-reposync.py:77 urpm-downloader.py:105 urpm-tools/urpm-reposync.py:77 +#: urpm-tools/urpm-downloader.py:105 +msgid "Do not use selected URPM media" +msgstr "Не использовать указанные источники" + +#. arg_parser.add_argument('-x', '--exclude-packages', action='store',nargs = '+', help="Exclude package(s) by regex") +#: urpm-reposync.py:79 urpm-downloader.py:102 urpm-tools/urpm-reposync.py:79 +#: urpm-tools/urpm-downloader.py:102 +msgid "Verbose (print additional info)" +msgstr "Выводить при исполнении отладочную информацию" + +#: urpm-reposync.py:80 urpm-tools/urpm-reposync.py:80 +msgid "Quiet operation. Senseless without --auto." +msgstr "Ничего не выводить на экран. Не используется без --auto." + +#: urpm-reposync.py:81 urpm-tools/urpm-reposync.py:81 +msgid "Do not ask questions, just do it!" +msgstr "Выполнять все действия без вопросов" + +#: urpm-reposync.py:82 urpm-tools/urpm-reposync.py:82 +msgid "Only print the list of actions to be done and do nothing more!" +msgstr "Только вывести список планируемых действий и выйти." + +#: urpm-reposync.py:83 urpm-tools/urpm-reposync.py:83 +msgid "Only download the rpm files, but install or remove nothing." +msgstr "Только скачать пакеты, но ничего не устанавливать и не удалять." + +#. arg_parser.add_argument('-n', '--noremove', action='store_true', help=_("Do not remove packages at all. If some installed package prevent another package from beeing updated - do not update it.")) +#: urpm-reposync.py:85 urpm-tools/urpm-reposync.py:85 +msgid "Remove all the packages which do not present in repository. By default, only some of them would be removed." +msgstr "Удалять все пакеты, которых нет в репозитории. По умолчанию инструмент пытается сохранить их, если возможно." + +#: urpm-reposync.py:86 urpm-tools/urpm-reposync.py:86 +msgid "Download packages and check wether they can be installed to your system, but do not install them." +msgstr "Скачать пакеты и проверить, могут ли они быть установлены на текущую систему. Пакеты не будут установлены." + +#: urpm-reposync.py:87 urpm-tools/urpm-reposync.py:87 +msgid "Do nothing with kernels." +msgstr "Ничего не делать с ядрами." + +#: urpm-reposync.py:88 urpm-tools/urpm-reposync.py:88 +msgid "Run self-tests end exit." +msgstr "Запустить самопроверку." + +#: urpm-reposync.py:89 urpm-tools/urpm-reposync.py:89 +msgid "Show detailed information about packages are going to be removed or installed (why does it have to be done)" +msgstr "Показывать детальную информацию о пакетах, которые будут удалены и установлены (будут объяснены решения по каждому пакету)." + +#: urpm-reposync.py:93 urpm-tools/urpm-reposync.py:93 +msgid "It's senseless to use --quiet without --auto!" +msgstr "Использование --quiet без --auto лишено смысла!" + +#: urpm-reposync.py:306 urpm-tools/urpm-reposync.py:305 +msgid "Loading the list of installed packages..." +msgstr "Загрузка списка установленных пакетов..." + +#: urpm-reposync.py:320 urpm-tools/urpm-reposync.py:319 +msgid "Duplicating " +msgstr "Дублирующийся пакет " + +#: urpm-reposync.py:321 urpm-tools/urpm-reposync.py:320 +msgid "Already found: " +msgstr "Уже найдено: " + +#. print synthesis_list +#: urpm-reposync.py:397 urpm-tools/urpm-reposync.py:396 +msgid "Processing medium " +msgstr "Обработка источника " + +#: urpm-reposync.py:415 urpm-tools/urpm-reposync.py:414 +#, python-format +msgid "Could not read synthesis file. (File %s not found)" +msgstr "Файл %s не найден. Невозможно обработать synthesis файл." + +#: urpm-reposync.py:494 urpm-tools/urpm-reposync.py:484 +msgid "File can not be processed! Url: " +msgstr "Не удалось обработать файл! Url: " + +#: urpm-reposync.py:589 urpm-tools/urpm-reposync.py:579 +#, python-format +msgid "Removing %s" +msgstr "Удаление %s" + +#: urpm-reposync.py:596 urpm-tools/urpm-reposync.py:586 +msgid "urpm-reposync: error in package %s. Data: %(data)s" +msgstr "urpm-reposync: ошибка при работе с пакетом %s. Данные: %(data)s" + +#: urpm-reposync.py:773 urpm-tools/urpm-reposync.py:683 +#, python-format +msgid "\tRequires %s, which will not be installed." +msgstr "\tТребует пакет %s, который не будет установлен." + +#: urpm-reposync.py:779 urpm-tools/urpm-reposync.py:689 +#, python-format +msgid "\t%s conflicts with it" +msgstr "\t%s конфликтует с этим пакетом" + +#: urpm-reposync.py:784 urpm-tools/urpm-reposync.py:694 +#, python-format +msgid "\tIt conflicts with %s" +msgstr "\tКонфликтует с %s" + +#: urpm-reposync.py:877 +#, fuzzy +msgid ">>> Contact repository maintaiers and send them this information, please." +msgstr "Пожалуйста, отправьте разработчикам дистрибутива эту информацию." + +#: urpm-reposync.py:883 urpm-tools/urpm-reposync.py:777 +msgid "Downloading files..." +msgstr "Скачивание файлов..." + +#: urpm-reposync.py:913 urpm-tools/urpm-reposync.py:807 +msgid "Generating transaction..." +msgstr "Создание транзакции..." + +#: urpm-reposync.py:931 urpm-tools/urpm-reposync.py:825 +msgid "Checking dependencies..." +msgstr "Проверка зависимостей..." + +#: urpm-reposync.py:936 urpm-tools/urpm-reposync.py:830 +msgid "requires" +msgstr "требует" + +#: urpm-reposync.py:938 urpm-tools/urpm-reposync.py:832 +msgid "conflicts with" +msgstr "конфликтует с" + +#: urpm-reposync.py:954 urpm-tools/urpm-reposync.py:848 +#, python-format +msgid "Package %(name)s-%(ver)s-%(rel)s %(t)s %(namereq)s%(verreq)s" +msgstr "Пакет %(name)s-%(ver)s-%(rel)s %(t)s %(namereq)s%(verreq)s" + +#: urpm-reposync.py:960 urpm-tools/urpm-reposync.py:854 +msgid "There are some unresolved dependencies: " +msgstr "Найдены неразрешенные зависимости: " + +#: urpm-reposync.py:963 urpm-tools/urpm-reposync.py:857 +msgid "Packages can not be installed. Please, contact urpm-tools developers and provide this output." +msgstr "Пакеты не могут быть установлены. Пожалуйста, отправьте разработчику весь вывод программы." + +#: urpm-reposync.py:965 urpm-tools/urpm-reposync.py:859 +msgid "No errors found in transaction" +msgstr "Ошибок не найдено" + +#: urpm-reposync.py:970 urpm-tools/urpm-reposync.py:864 +msgid "Running transaction..." +msgstr "Запуск транзакции..." + +#: urpm-reposync.py:1011 urpm-tools/urpm-reposync.py:905 +msgid "WARNING: Some libraries are going to be removed because there are only the packages with the other architecture in the repository. Maybe you missed media with the correct architecture?" +msgstr "ПРЕДУПРЕЖДЕНИЕ: Некоторые библиотеки будут удалены, потому что в репозитории присутствуют только эти библиотеки с другой архитектурой. Может быть, нужно добавить источники с правильными архитектурами?" + +#: urpm-reposync.py:1052 urpm-reposync.py:1087 urpm-reposync.py:1109 +#: urpm-reposync.py:1122 urpm-tools/urpm-reposync.py:946 +#: urpm-tools/urpm-reposync.py:981 urpm-tools/urpm-reposync.py:1003 +#: urpm-tools/urpm-reposync.py:1016 +msgid "Package Name" +msgstr "Имя пакета" + +#: urpm-reposync.py:1052 urpm-reposync.py:1109 urpm-reposync.py:1122 +#: urpm-tools/urpm-reposync.py:946 urpm-tools/urpm-reposync.py:1003 +#: urpm-tools/urpm-reposync.py:1016 +msgid "Current Version" +msgstr "Текущая версия" + +#: urpm-reposync.py:1052 urpm-tools/urpm-reposync.py:946 +msgid "New Version" +msgstr "Новая версия" + +#: urpm-reposync.py:1052 urpm-reposync.py:1087 urpm-reposync.py:1109 +#: urpm-reposync.py:1122 urpm-tools/urpm-reposync.py:946 +#: urpm-tools/urpm-reposync.py:981 urpm-tools/urpm-reposync.py:1003 +#: urpm-tools/urpm-reposync.py:1016 +msgid "Arch" +msgstr "Архитектура" + +#: urpm-reposync.py:1054 urpm-tools/urpm-reposync.py:948 +msgid "medium" +msgstr "источник " + +#: urpm-reposync.py:1076 urpm-tools/urpm-reposync.py:970 +msgid "The following packages are going to be upgraded:" +msgstr "Следующие пакеты будут обновлены:" + +#: urpm-reposync.py:1081 urpm-tools/urpm-reposync.py:975 +msgid "The following packages are going to be downgraded:" +msgstr "Версии следующих пакетов будут понижены:" + +#: urpm-reposync.py:1086 urpm-tools/urpm-reposync.py:980 +msgid "Additional packages are going to be installed:" +msgstr "Дополнительные пакеты будут установлены:" + +#: urpm-reposync.py:1087 urpm-tools/urpm-reposync.py:981 +msgid "Version" +msgstr "Версия" + +#: urpm-reposync.py:1103 urpm-tools/urpm-reposync.py:997 +#, python-format +msgid "\tRequired by %s" +msgstr "\tТребуется для %s" + +#: urpm-reposync.py:1108 urpm-tools/urpm-reposync.py:1002 +msgid "The following packages are going to be removed:" +msgstr "Следующие пакеты будут удалены:" + +#: urpm-reposync.py:1121 urpm-tools/urpm-reposync.py:1015 +msgid "Packages which do not present in repositories, but do not have to be removed (will be saved):" +msgstr "Пакеты, которые отсутствуют в репозитории, но могут быть сохранены:" + +#: urpm-reposync.py:1128 urpm-tools/urpm-reposync.py:1022 +#, python-format +msgid "%d packages are going to be downloaded and installed." +msgstr "Пакетов будет скачано и установлено: %d." + +#: urpm-reposync.py:1129 urpm-tools/urpm-reposync.py:1023 +#, python-format +msgid "%d packages are going to be removed." +msgstr "Пакетов будет удалено: %d." + +#: urpm-reposync.py:1130 urpm-tools/urpm-reposync.py:1024 +#, python-format +msgid "%s will be downloaded." +msgstr "Данных будет скачано: %s." + +#: urpm-reposync.py:1189 urpm-tools/urpm-reposync.py:1080 +#, python-format +msgid "\tForced to be removed dew to \"%s\" policy." +msgstr "\tДолжен быть удален из-за правила \"%s\"." + +#: urpm-reposync.py:1217 urpm-tools/urpm-reposync.py:1108 +msgid "Nothing to do" +msgstr "В системе не требуются изменения" + +#: urpm-reposync.py:1230 urpm-tools/urpm-reposync.py:1121 +msgid "Do you want to proceed? (y/n): " +msgstr "Хотите продолжить? (д/н): " + +#: urpm-reposync.py:1235 urpm-tools/urpm-reposync.py:1126 +msgid "y" +msgstr "д" + +#: urpm-reposync.py:1235 urpm-tools/urpm-reposync.py:1126 +msgid "yes" +msgstr "да" + +#: urpm-reposync.py:1237 urpm-tools/urpm-reposync.py:1128 +msgid "n" +msgstr "н" + +#: urpm-reposync.py:1237 urpm-tools/urpm-reposync.py:1128 +msgid "no" +msgstr "нет" + +#: urpm-package-cleanup.py:58 urpm-tools/urpm-package-cleanup.py:58 +msgid "Find problems in the rpmdb of system and correct them" +msgstr "Найти проблемы в локальной базе RPM и исправить их" + +#: urpm-package-cleanup.py:62 urpm-tools/urpm-package-cleanup.py:62 +msgid "Query format to use for output." +msgstr "Формат вывода." + +#: urpm-package-cleanup.py:65 urpm-tools/urpm-package-cleanup.py:65 +msgid "Use non-interactive mode" +msgstr "Работать в неинтерактивном режиме" + +#: urpm-package-cleanup.py:68 urpm-tools/urpm-package-cleanup.py:68 +msgid "Orphans Options" +msgstr "Осиротевшие пакеты" + +#: urpm-package-cleanup.py:71 urpm-tools/urpm-package-cleanup.py:71 +msgid "List installed packages which are not available from currently configured repositories" +msgstr "Перечислить пакеты, недоступные в настроенных на текущий момент репозиториях" + +#: urpm-package-cleanup.py:75 urpm-tools/urpm-package-cleanup.py:75 +msgid "Use only update media. This means that urpmq will search and resolve dependencies only in media marked as containing updates (e.g. which have been created with \"urpmi.addmedia --update\")." +msgstr "Ипользовать только источники обновлений. Это означает, что urpmq будет искать и разрешать зависимости только используя источники, помеченные как источники обновлений (например, которые были добавлены при помощи \"urpmi.addmedia --update\")" + +#: urpm-package-cleanup.py:80 urpm-tools/urpm-package-cleanup.py:80 +msgid "Select specific media to be used, instead of defaulting to all available media (or all update media if --update is used). No rpm will be found in other media." +msgstr "Выбрать особые источники вместо того чтобы использовать все доступные по умолчанию источники (или все источники обновлений, если указан флаг --update). В других источниках пакеты искаться не будут." + +#: urpm-package-cleanup.py:85 urpm-tools/urpm-package-cleanup.py:85 +msgid "Do not use the specified media." +msgstr "Не использовать указанные источники." + +#: urpm-package-cleanup.py:87 urpm-tools/urpm-package-cleanup.py:87 +msgid "Dependency Problems Options" +msgstr "Проблемы с зависимостями" + +#: urpm-package-cleanup.py:90 urpm-tools/urpm-package-cleanup.py:90 +msgid "List dependency problems in the local RPM database" +msgstr "Перечислить проблемы с зависимостями в локальной базе RPM" + +#: urpm-package-cleanup.py:93 urpm-tools/urpm-package-cleanup.py:93 +msgid "List missing suggestions of installed packages" +msgstr "Перечислить список мягких зависимостей установленных пакетов" + +#: urpm-package-cleanup.py:96 urpm-tools/urpm-package-cleanup.py:96 +msgid "Duplicate Package Options" +msgstr "Дублирующиеся пакеты" + +#: urpm-package-cleanup.py:99 urpm-tools/urpm-package-cleanup.py:99 +msgid "Scan for duplicates in your rpmdb" +msgstr "Найти дубликаты в локальной базе RPM" + +#: urpm-package-cleanup.py:102 urpm-tools/urpm-package-cleanup.py:102 +msgid "Scan for duplicates in your rpmdb and remove older " +msgstr "Найти дубликаты в локальной базе RPM и удалить более старые" + +#: urpm-package-cleanup.py:105 urpm-tools/urpm-package-cleanup.py:105 +msgid "disable rpm scriptlets from running when cleaning duplicates" +msgstr "отключить скриптлеты rpm при очистке дубликатов" + +#: urpm-package-cleanup.py:107 urpm-tools/urpm-package-cleanup.py:107 +msgid "Leaf Node Options" +msgstr "Листовые узлы" + +#: urpm-package-cleanup.py:110 urpm-tools/urpm-package-cleanup.py:110 +msgid "List leaf nodes in the local RPM database" +msgstr "Перечислить листовые узлы в локальной базе RPM" + +#: urpm-package-cleanup.py:113 urpm-tools/urpm-package-cleanup.py:113 +msgid "list all packages leaf nodes that do not match leaf-regex" +msgstr "перечислить все пакеты-листовые узлы, имя которых не подходить под регулярное выражение" + +#: urpm-package-cleanup.py:117 urpm-tools/urpm-package-cleanup.py:117 +msgid "A package name that matches this regular expression (case insensitively) is a leaf" +msgstr "Считать листовым узлом пакет, имя которого подходит по регулярному выражению (регистронезависимо)." + +#: urpm-package-cleanup.py:121 urpm-tools/urpm-package-cleanup.py:121 +msgid "do not list development packages as leaf nodes" +msgstr "не считать devel пакеты листовыми узлами" + +#: urpm-package-cleanup.py:124 urpm-tools/urpm-package-cleanup.py:124 +msgid "do not list packages with files in a bin dirs as leaf nodes" +msgstr "не считать пакеты, имеющие файлы в bin директориях, листовыми узлами" + +#: urpm-package-cleanup.py:127 urpm-tools/urpm-package-cleanup.py:127 +msgid "Old Kernel Options" +msgstr "Старые ядра" + +#: urpm-package-cleanup.py:130 urpm-tools/urpm-package-cleanup.py:130 +msgid "Remove old kernel and kernel-devel packages" +msgstr "Удалить старые ядра и их devel пакеты." + +#: urpm-package-cleanup.py:133 urpm-tools/urpm-package-cleanup.py:133 +msgid "Number of kernel packages to keep on the system (default 2)" +msgstr "Количество пакетов с ядрами, которые надо сохранить в системе (по умолчанию 2)" + +#: urpm-package-cleanup.py:137 urpm-tools/urpm-package-cleanup.py:137 +msgid "Do not remove kernel-devel packages when removing kernels" +msgstr "Не удалять kernel-devel пакеты при удалении ядер" + +#: urpm-package-cleanup.py:306 urpm-tools/urpm-package-cleanup.py:306 +#, python-format +msgid "Warning: neither single nor multi lib arch: %s " +msgstr "Некорректная архитектура: %s " + +#: urpm-package-cleanup.py:417 urpm-tools/urpm-package-cleanup.py:417 +#, python-format +msgid "Not removing kernel %(kver)s-%(krel)s because it is the running kernel" +msgstr "Невозможно удалить пакет %(kver)s-%(krel)s, потому что это запущенное ядро" + +#: urpm-package-cleanup.py:447 urpm-tools/urpm-package-cleanup.py:447 +#, python-format +msgid "Package %(qf)s %(prob)s" +msgstr "Пакет %(qf)s %(prob)s" + +#: urpm-package-cleanup.py:450 urpm-tools/urpm-package-cleanup.py:450 +msgid "Missing suggests:" +msgstr "Недостающие мягкие зависимости:" + +#: urpm-package-cleanup.py:458 urpm-tools/urpm-package-cleanup.py:458 +msgid "No Problems Found" +msgstr "Проблем не найдено" + +#: urpm-package-cleanup.py:473 urpm-tools/urpm-package-cleanup.py:473 +msgid "Error: Cannot remove kernels as a user, must be root" +msgstr "Ошибка: Невозможно удалить ядро, нужны права root." + +#: urpm-package-cleanup.py:476 urpm-tools/urpm-package-cleanup.py:476 +msgid "Error: should keep at least 1 kernel!" +msgstr "Ошибка: нужно оставить хотя бы одно ядро!" + +#: urpm-package-cleanup.py:529 urpm-tools/urpm-package-cleanup.py:529 +msgid "Error: Cannot remove packages as a user, must be root" +msgstr "Ошибка: невозможно удалить пакет, нужны права root." + +#: urpm-downloader.py:91 urpm-tools/urpm-downloader.py:91 +msgid "A tool for downloading RPMs and SRPMs from URPM-based linux repositories" +msgstr "Инструмент, позволяющий скачивать RPM и SRPM пакеты из URPM репозиториев" + +#: urpm-downloader.py:92 urpm-tools/urpm-downloader.py:92 +msgid "If none of the options -b, -s, -d turned on, it will be treated as -b" +msgstr "Если ни одна из опций -b, -s или -d не указана, то по умолчанию включается -b" + +#: urpm-downloader.py:93 urpm-tools/urpm-downloader.py:93 +msgid "Package name(s) to download. It can contain not only package names, but (S)RPM files too. In this case package name extracted from this file will be used" +msgstr "Имена пакетов для скачивания. Можно так же использовать имена существующих (S)RPM файлов, в этом случае информация об имени пакета будет извлечена из них." + +#: urpm-downloader.py:94 urpm-tools/urpm-downloader.py:94 +msgid "Instead of downloading files, list the URLs that would be processed" +msgstr "Выводить их URL файлов, но не скачивать их (в случае использования совместно с -a или -r src.rpm файл все равно будет скачан, так как без этого невозможно разрешить сборочные зависимости)" + +#: urpm-downloader.py:95 urpm-tools/urpm-downloader.py:95 +msgid "When downloading RPMs, resolve dependencies and also download the required packages, if they are not already installed" +msgstr "При скачивании пакета разрешать зависимости и скачивать все необходимые пакеты, но только если они не установлены в системе." + +#: urpm-downloader.py:96 urpm-tools/urpm-downloader.py:96 +msgid "When downloading RPMs, resolve dependencies and also download the required packages, even if they are already installed" +msgstr "При скачивании пакета разрешать зависимости и скачивать все необходимые пакеты, даже если они уже установлены в системе." + +#: urpm-downloader.py:97 urpm-tools/urpm-downloader.py:97 +msgid "Download binary RPMs" +msgstr "Скачивать бинарные пакеты (RPM)" + +#: urpm-downloader.py:98 urpm-tools/urpm-downloader.py:98 +msgid "Download the source RPMs (SRPMs)" +msgstr "Скачать пакеты с исходными кодами (SRPM)" + +#: urpm-downloader.py:99 urpm-tools/urpm-downloader.py:99 +msgid "Download debug RPMs" +msgstr "Скачать пакеты с отладочной информацией" + +#: urpm-downloader.py:100 urpm-tools/urpm-downloader.py:100 +msgid "Download debug RPMs and install" +msgstr "Скачать пакеты с отладочной информацией и установить" + +#: urpm-downloader.py:103 urpm-tools/urpm-downloader.py:103 +msgid "Quiet operation." +msgstr "Ничего не печатать в консоль" + +#: urpm-downloader.py:106 urpm-tools/urpm-downloader.py:106 +msgid "Exclude package(s) by regex" +msgstr "Исключить пакеты по регулярному выражению" + +#: urpm-downloader.py:107 urpm-tools/urpm-downloader.py:107 +msgid "Try to continue when error occurs" +msgstr "Пытаться игнорировать ошибки" + +#: urpm-downloader.py:108 urpm-tools/urpm-downloader.py:108 +msgid "If the file already exists, download it again and overwrite the old one" +msgstr "Если файл уже существует, скачать его заново и заменить." + +#: urpm-downloader.py:109 urpm-tools/urpm-downloader.py:109 +msgid "If package dependency can be satisfied by several packages, download all of them (by default, only the first one is downloaded)" +msgstr "Скачивать все пакеты, которые могут удовлетворить зависимости для данного пакета (по умолчанию скачивается лишь один)." + +#: urpm-downloader.py:110 urpm-tools/urpm-downloader.py:110 +msgid "If different versions of package present in repository, process them all" +msgstr "Если в репозитории присутствует несколько версий пакета, обработать их все." + +#. arg_parser.add_argument('--self-test', action='store_true', help="Test urpm-downloader end exit") +#: urpm-downloader.py:113 urpm-tools/urpm-downloader.py:113 +msgid "Specify a destination directory for the download" +msgstr "Директория, в которую будут помещены скачаные файлы" + +#: urpm-downloader.py:130 urpm-tools/urpm-downloader.py:130 +msgid "Use of --verbose with --quiet is senseless. Turning verbose mode off." +msgstr "Использование --verbose совместно с --quiet лишено смысла. Опция --verbose будет проигнорирована." + +#: urpm-downloader.py:134 urpm-tools/urpm-downloader.py:134 +msgid "Note that resolving of SRPM dependencies is not possible until SRPM downloaded. So, it will be done despite --urls" +msgstr "Помните, что разрешение сборочных зависимостей SRPM невозможно без скачивания этого файла, поэтому SRPM файл все равно будет скачан несмотря на --urls" + +#: urpm-downloader.py:375 urpm-tools/urpm-downloader.py:375 +msgid "* Downloaded: " +msgstr "* Скачано: " + +#: urpm-downloader.py:377 urpm-tools/urpm-downloader.py:377 +msgid "* File exists, skipping: " +msgstr "* Файл существует, пропускаю: " + +#: urpm-downloader.py:476 urpm-tools/urpm-downloader.py:476 +msgid "Can not download SRPM for package" +msgstr "Не удалось скачать SRPM файл для пакета" + +#: urpm-downloader.py:499 urpm-downloader.py:532 +#: urpm-tools/urpm-downloader.py:499 urpm-tools/urpm-downloader.py:532 +msgid "Can not download RPM" +msgstr "Не удалось скачать RPM файл" + +#: urpm-downloader.py:504 urpm-tools/urpm-downloader.py:504 +msgid "Resolving debug-info packages..." +msgstr "Поиск пакетов с отладочной информацией..." + +#. urpmq output. RU: Нет пакета с названием +#: urpm-downloader.py:509 urpm-tools/urpm-downloader.py:509 +msgid "No package named " +msgstr "Нет пакета с именем " + +#: urpm-downloader.py:533 urpm-tools/urpm-downloader.py:533 +msgid "Maybe you need to update urpmi database (urpmi.update -a)?" +msgstr "Может быть, нужно обновить базу urpmi (urpmi.update -a)?" + +#: urpm-downloader.py:542 urpm-tools/urpm-downloader.py:542 +msgid "Installing " +msgstr "Установка " + +#. return code is not 0 +#: urpm-downloader.py:553 urpm-tools/urpm-downloader.py:553 +#, python-format +msgid "Debug package for '%s' not found" +msgstr "Для пакета %s не найдено пакета с отладочной информацией." + +#: urpm-downloader.py:602 urpm-tools/urpm-downloader.py:602 +msgid "Parameters that end with '.rpm' seem to be local files, but the folowing files do not exist: " +msgstr "Параметры, заканчивающиеся на '.rpm' расцениваются как файлы, но следующие файлы не существуют: " + +#: urpm-downloader.py:627 urpm-tools/urpm-downloader.py:627 +msgid "Searching src.rpm file(s) in repository..." +msgstr "Поиск подходящих src.rpm файлов в репозитории..." + +#: urpm-downloader.py:629 urpm-tools/urpm-downloader.py:629 +msgid "Downloading src.rpm file(s)..." +msgstr "Скачивание src.rpm файлов..." + +#: urpm-downloader.py:659 urpm-tools/urpm-downloader.py:659 +msgid "Resolving build dependencies..." +msgstr "Разрешение сборочных зависимостей..." + +#: urpm-downloader.py:661 urpm-tools/urpm-downloader.py:661 +msgid "Resolving dependencies..." +msgstr "Разрешение зависимостей..." + +#: urpm-downloader.py:663 urpm-tools/urpm-downloader.py:663 +#, python-format +msgid "Resolved %d packages" +msgstr "Найдено пакетов: %d" + +#: urpm-downloader.py:665 urpm-tools/urpm-downloader.py:665 +msgid "Nothing to download" +msgstr "Нечего скачивать" + +#: urpm-repograph.py:86 urpm-tools/urpm-repograph.py:86 +msgid "Tool for generating dependency graph for REPOSITORY packages." +msgstr "Инструмент для создания графа зависимостей для пакетов из репозитория." + +#: urpm-repograph.py:90 urpm-tools/urpm-repograph.py:90 +msgid "Search for cross-repository references in CROSS_REPO(s) repositories." +msgstr "Искать зывисимости между репозиториями в репозиториями CROSS_REPO" + +#: urpm-repograph.py:93 urpm-tools/urpm-repograph.py:93 +msgid "Hide service messages. (About progress status etc.)" +msgstr "Не показывать служебные сообщения. (О прогрессе и т. д.)" + +#: urpm-repograph.py:95 urpm-tools/urpm-repograph.py:95 +msgid "Show warnings. (About unprovided packages etc.)" +msgstr "Показывать предупреждения (О зависимостях, не предоставляемых ни одним пакетом из репозитория и т. д.)" + +#: urpm-repograph.py:98 urpm-tools/urpm-repograph.py:98 +msgid "Process \"requires\" package dependencies. Used by default." +msgstr "Обрабатывать \"requires\" пакетные зависимости. Используется по умолчанию." + +#: urpm-repograph.py:100 urpm-tools/urpm-repograph.py:100 +msgid "Process \"suggests\" package dependencies. If used without --requires then only suggests dependencies are processed." +msgstr "Обрабатывать \"suggests\" пакетные зависимости. Если используется без --requires, то будут обрабатываться только мягкие зависимости." + +#: urpm-repograph.py:103 urpm-tools/urpm-repograph.py:103 +msgid "Process file dependencies." +msgstr "Обработка зависимостей по файлам..." + +#: urpm-repograph.py:105 urpm-tools/urpm-repograph.py:105 +msgid "Show unprovided dependencies." +msgstr "Показать зависимости, не предоставленные ни одним пакетом из репозитория." + +#: urpm-repograph.py:109 urpm-tools/urpm-repograph.py:109 +msgid "Search for packages, which are required by package PKG (PKG is a file name or package name)" +msgstr "Искать пакеты, которые нужны пакету PKG. (PKG - это имя пакета или файла)" + +#: urpm-repograph.py:111 urpm-tools/urpm-repograph.py:111 +msgid "Search for packages, which requires package PKG (PKG is a file name or package name)" +msgstr "Искать пакеты, которым нужен пакет PKG. (PKG - это имя пакета или файла)" + +#: urpm-repograph.py:115 urpm-tools/urpm-repograph.py:115 +msgid "Search for all simple loops of package dependecies." +msgstr "Поиск всех простых циклов в пакетных зависимостях." + +#: urpm-repograph.py:117 urpm-tools/urpm-repograph.py:117 +msgid "Search for alternative packages providing the same feature." +msgstr "Поиск альтернативных пакетов, предоставляющих одну и ту же зависимость." + +#: urpm-repograph.py:119 urpm-tools/urpm-repograph.py:119 +msgid "Search for all broken packages and anything beetween them" +msgstr "Искать все пакеты с нарушенными зависимостями и цепочки пакетов между ними" + +#: urpm-repograph.py:121 urpm-tools/urpm-repograph.py:121 +msgid "Output each loop or each alternative in different file. Ignored if --loops or --alternatives options are not present. OUTPUT_FILE (if present) is tracted as folder name for new files in that case." +msgstr "Выводить каждый цикл или каждую альтернативу в отдельный файл. Игнорируется, если указано --loops или --alternatives. OUTPUT_FILE (если указан) в этом случае рассматривается как имя директории для новых файлов." + +#: urpm-repograph.py:127 urpm-tools/urpm-repograph.py:127 +msgid "Change graph output to \"OUTPUT_FILE\". STDOUT by default." +msgstr "Перенаправить вывод графа в файл \"OUTPUT_FILE\". По умолчанию используется STDOUT." + +#: urpm-repograph.py:129 urpm-tools/urpm-repograph.py:129 +msgid "Do not output graph. Tool will not start working if --quiet, --nograph are present and --verbose is not. (If there is nothing to output - then nothing has to be done.)" +msgstr "Не выводить граф. Инструмент не будет ничего делать, если включены --quiet и --nograph, а verbose нет. (Если ничего не надо выводить, то и не надо ничего делать.)" + +#: urpm-repograph.py:216 urpm-tools/urpm-repograph.py:216 +#, python-format +msgid "Error: directory %s already exists" +msgstr "Ошибка: директория %s уже существует" + +#: urpm-repograph.py:229 urpm-tools/urpm-repograph.py:229 +#, python-format +msgid "Error: directory %s was not created" +msgstr "Ошибка: директория %s не была создана" + +#: urpm-repograph.py:409 urpm-tools/urpm-repograph.py:409 +msgid "Parsing synthesis." +msgstr "Обработка synthesis файла." + +#: urpm-repograph.py:435 urpm-tools/urpm-repograph.py:435 +#, python-format +msgid "Warning: Unexpected sign %(sign)s in 'provides' section of %(of)s" +msgstr "Предупреждение: неожиданный знак %(sign)s в 'provides' секции %(of)s" + +#: urpm-repograph.py:555 urpm-tools/urpm-repograph.py:555 +msgid "Reading fileslist" +msgstr "Чтение файла со списком" + +#: urpm-repograph.py:557 urpm-tools/urpm-repograph.py:557 +msgid "Error: Can't find fileslist " +msgstr "Ошибка: Не удалось найти файл со списком" + +#: urpm-repograph.py:561 urpm-tools/urpm-repograph.py:561 +msgid "Error: Can't read fileslist " +msgstr "Ошибка: Не удалось прочитать файл со списком" + +#: urpm-repograph.py:565 urpm-tools/urpm-repograph.py:565 +msgid "Error: Wrong fileslist." +msgstr "Ошибка: Неправильный файл со списком." + +#: urpm-repograph.py:578 urpm-tools/urpm-repograph.py:578 +msgid "Error: Corrupted fileslist" +msgstr "Ошибка: Поврежденный файл со списком" + +#: urpm-repograph.py:608 urpm-tools/urpm-repograph.py:608 +msgid "Warning: cross-repository dependency: " +msgstr "Предупреждение: пакет из одного репозиттория зависит от пакета из другого: " + +#: urpm-repograph.py:612 urpm-repograph.py:662 +#: urpm-tools/urpm-repograph.py:612 urpm-tools/urpm-repograph.py:662 +msgid "Warning: package has self-dependecies: " +msgstr "Предупреждение: пакет зависит от себя: " + +#: urpm-repograph.py:658 urpm-tools/urpm-repograph.py:658 +#, python-format +msgid "" +"Warning: cross-repository dependency:\n" +" package %(pkg)s is dependent from\n" +" <- %(from)s located in another repository" +msgstr "" +"Предупреждение: зависимость между репозиториями:\n" +" пакет %(pkg)s зависит от\n" +" <- %(from)s, расположенного в другом репозитории" + +#: urpm-repograph.py:691 urpm-tools/urpm-repograph.py:691 +#, python-format +msgid "Warning: needed version is absent <%(ver)s> %(rel)s required by package" +msgstr "Предупреждение: отсутствует версия <%(ver)s> %(rel)s, требуемая пакетом" + +#: urpm-repograph.py:708 urpm-tools/urpm-repograph.py:708 +#, python-format +msgid "Warning: Package %(pkg)s unprovided by %(by)s" +msgstr "Предупреждение: Файл %(by)s требуется пакету %(pkg)s, но не предоставляется ни одним пакетом" + +#: urpm-repograph.py:740 urpm-tools/urpm-repograph.py:740 +msgid "Finding dependencies." +msgstr "Поиск зависимостей." + +#: urpm-repograph.py:749 urpm-tools/urpm-repograph.py:749 +#, python-format +msgid "" +"Warning: can't find <%(ask)s> required by package\n" +" <%(pkg)s>" +msgstr "" +"Предупреждение: не удалось найти <%(ask)s>, требуемый пакетом\n" +" <%(pkg)s>" + +#: urpm-repograph.py:812 urpm-tools/urpm-repograph.py:812 +msgid "Total cross-referenced packages: " +msgstr "Всего пакетов с кросс-платформенными зависимостями: " + +#: urpm-repograph.py:816 urpm-tools/urpm-repograph.py:816 +msgid "Total unprovided packages: " +msgstr " Всего пакетов с ничем не предоставленными зависимостями: " + +#: urpm-repograph.py:833 urpm-tools/urpm-repograph.py:833 +msgid "Calculating colors." +msgstr "Вычисление цветов." + +#: urpm-repograph.py:1112 urpm-tools/urpm-repograph.py:1112 +msgid "Non-cycle nodes removed: " +msgstr "Нецикличных узлов удалено: " + +#: urpm-repograph.py:1113 urpm-tools/urpm-repograph.py:1113 +msgid "Cyclic packages: " +msgstr "Зацикленных пакетов осталось: " + +#: urpm-repograph.py:1130 urpm-tools/urpm-repograph.py:1130 +#, python-format +msgid "Worktime: %s seconds" +msgstr "Время работы: %s секунд" + +#: urpm-repograph.py:1136 urpm-tools/urpm-repograph.py:1136 +msgid "Searching loops." +msgstr "Поиск циклов." + +#: urpm-repograph.py:1140 urpm-repograph.py:1188 +#: urpm-tools/urpm-repograph.py:1140 urpm-tools/urpm-repograph.py:1188 +msgid "End of search." +msgstr "Конец поиска." + +#: urpm-repograph.py:1141 urpm-tools/urpm-repograph.py:1141 +#, python-format +msgid "Loops search: %s seconds" +msgstr "Поиск циклов: %s секунд" + +#: urpm-repograph.py:1145 urpm-tools/urpm-repograph.py:1145 +#, python-format +msgid "Total: %s loops." +msgstr "Всего: %s циклов." + +#: urpm-repograph.py:1151 urpm-tools/urpm-repograph.py:1151 +msgid "Loop " +msgstr "Цикл " + +#: urpm-repograph.py:1168 urpm-tools/urpm-repograph.py:1168 +msgid "Searching alternatives." +msgstr "Поиск альтернатив." + +#: urpm-repograph.py:1180 urpm-tools/urpm-repograph.py:1180 +#, python-format +msgid "Total: %d alternatives." +msgstr "Всего: %d альтернатив." + +#: urpm-repograph.py:1182 urpm-tools/urpm-repograph.py:1182 +msgid "Alternative " +msgstr "Альтернатива " + +#: urpm-repograph.py:1182 urpm-tools/urpm-repograph.py:1182 +msgid " is provided by:" +msgstr " предоставляется:" + +#: urpm-repograph.py:1260 urpm-tools/urpm-repograph.py:1260 +msgid "Searching for broken packages." +msgstr "Поиск нарушенных зависимостей." + +#: urpm-repograph.py:1266 urpm-tools/urpm-repograph.py:1266 +msgid "Searching for packages REQUIRED by " +msgstr "Поиск пакетов, требуемых " + +#: urpm-repograph.py:1268 urpm-tools/urpm-repograph.py:1268 +msgid "Searching for packages that REQUIRE " +msgstr "Поиск пакетов, требующих " + +#: urpm-repograph.py:1276 urpm-tools/urpm-repograph.py:1276 +#, python-format +msgid "Level %d dependency." +msgstr "Зависимость уровня %d." + +#: urpm-repograph.py:1355 urpm-tools/urpm-repograph.py:1355 +msgid "Remaking structures." +msgstr "Пересоздание структур." + +#: urpm-repograph.py:1367 urpm-tools/urpm-repograph.py:1367 +msgid "Error: can't find package name or filename \"" +msgstr "Ошибка: Не удалось найти имя пакета или файла \"" + +#: urpm-repograph.py:1401 urpm-tools/urpm-repograph.py:1401 +msgid "Do not use -q/--quiet and -n/--nograph without -v/--verbose together." +msgstr "Не используйте -q/--quiet совместно с -n/--nograph без -v/--verbose." + +#: urpm-repograph.py:1402 urpm-tools/urpm-repograph.py:1402 +msgid "That way there is no information to output anywhere. Nothing will be done." +msgstr "В этом случае нет информации, которую можно вывести. Ничего не будет сделано." + +#: urpm-repograph.py:1405 urpm-tools/urpm-repograph.py:1405 +msgid "Do not use -u/--unprovided and -b/--broken options together." +msgstr "Не используйте -u/--unprovided и -b/--broken вместе." + +#: urpm-repograph.py:1406 urpm-tools/urpm-repograph.py:1406 +msgid "-b does everything that do -u and a little more." +msgstr "-b делает все то же, что и -u, и немного больше." + +#: urpm-tools/urpm-reposync.py:768 +msgid "Some packages can not be installed dew to unresolved dependencies: " +msgstr "Некоторые пакеты не могут быть установлены из-за неразрешенных зависимостей:" + +#: urpm-tools/urpm-reposync.py:771 +msgid "Contact repository maintaiers and send them this information, please." +msgstr "Пожалуйста, отправьте разработчикам дистрибутива эту информацию." + +#~ msgid "Running trunsaction..." +#~ msgstr "Запуск транзакции..." + +#~ msgid "Downloading packages..." +#~ msgstr "Скачивание пакетов..." + +#~ msgid "Could not download packages. Urpm-download output: " +#~ msgstr "Не удалось скачать пакеты. Вывод urpm-downloader: " + +#~ msgid "Output in HTML format, if --output is not present HTML will be created in current directory. --size and --simple options are ignored." +#~ msgstr "Вывод в формате HTML. Если --output не указан, то HTML файл будет создан в текущей директории. Опции --size и --simple будут игнорироваться." + +#~ msgid "input is not correct url, path or name of repository" +#~ msgstr "Введенная строка не является корректным URL, путем или именем репозитория" + +#~ msgid "getting file %s from" +#~ msgstr "получение файла %s из" + +#~ msgid "Error: file %s was not downloaded" +#~ msgstr "Ошибка: файл %s не был скачан" + +#~ msgid "file %(from) was renamed to %(to)s" +#~ msgstr "файл %(from)s был переименован в %(to)s" + +#~ msgid "Error: cannot rename file %(from)s to %(from)s" +#~ msgstr "Ошибка: не удалось переименовать файл %(from)s в %(to)s" + +#~ msgid "Output in HTML format, if --output is not present" +#~ msgstr "Вывод в формате HTML, если --output не " + +#~ msgid "usage: " +#~ msgstr "ssdgfdf" + +#~ msgid "" +#~ "URPM Repos Closure Checker [_1] for Mandriva Linux\n" +#~ "A tool for checking closure of a set of RPM packages\n" +#~ "Copyright (C) 2012 ROSA Laboratory\n" +#~ "License: GNU GPL\n" +#~ "\n" +#~ "Usage: [_2] [options]\n" +#~ "Example: [_2] --hdlist=hdlist.txt\n" +#~ "\n" +#~ "More info: [_2] --help\n" +#~ msgstr "" +#~ "URPM Repos Closure Checker [_1] для Mandriva Linux\n" +#~ "Инструмент для определения замкнутости набора RPM пакетов\n" +#~ "Copyright (C) 2012 Лаборатория РОСА\n" +#~ "Лицензия: GNU GPL\n" +#~ "\n" +#~ "Использование: [_2] [options]\n" +#~ "Пример: [_2] --hdlist=hdlist.txt\n" +#~ "\n" +#~ "Больше информации: [_2] --help\n" + +#~ msgid "" +#~ "\n" +#~ "NAME:\n" +#~ " URPM Repos Closure Checker 1.0 for Mandriva Linux\n" +#~ " A tool for checking closure of a set of RPM packages\n" +#~ "\n" +#~ "USAGE:\n" +#~ " [_1] --hdlist=hdlist.txt\n" +#~ " [_1] --hdlist=http://mirror.yandex.ru/mandriva/.../synthesis.hdlist.cz\n" +#~ " [_1] --dir=rpms/ --static --file-deps=file-deps.txt\n" +#~ " [_1] --list=list.txt --dynamic\n" +#~ "\n" +#~ "OPTIONS:\n" +#~ " -h|-help\n" +#~ " Print this help.\n" +#~ "\n" +#~ " -v|-version\n" +#~ " Print version information.\n" +#~ "\n" +#~ " -hdlist \n" +#~ " Path or URL of HDlist (synthesis) to check.\n" +#~ "\n" +#~ " -d|-dir \n" +#~ " The directory with RPM packages to check.\n" +#~ "\n" +#~ " -l|-list \n" +#~ " The list of packages to check.\n" +#~ "\n" +#~ " -add|-update \n" +#~ " The directory with RPM packages that should\n" +#~ " be added to the repository or updated.\n" +#~ "\n" +#~ " -file-deps \n" +#~ " Read file-deps to ignore some unresolved\n" +#~ " dependencies.\n" +#~ "\n" +#~ " -s|-static\n" +#~ " Check statically if all required dependencies are\n" +#~ " satisfied by provided dependencies in the set of\n" +#~ " RPM packages.\n" +#~ "\n" +#~ " -dynamic\n" +#~ " Install a set of RPM packages to the local chroot\n" +#~ " and check if extra packages were installed.\n" +#~ "\n" +#~ " -r|-check-release\n" +#~ " Check installation media (DVD).\n" +#~ "\n" +#~ " -sign|-check-signature\n" +#~ " Validate package signatures.\n" +#~ "\n" +#~ " -noclean\n" +#~ " Do not clean urpmi cache.\n" +#~ "\n" +#~ " -root \n" +#~ " Where to install packages.\n" +#~ " Default:\n" +#~ " /tmp/...\n" +#~ "\n" +#~ "EXIT CODES:\n" +#~ " 0 - Suceess. The tool has run without any errors\n" +#~ " non-zero - Failed or the tool has run with errors. In particular:\n" +#~ " 1 - Failed to run the tool\n" +#~ " 2 - Discovered dependency problems\n" +#~ " \n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "ИМЯ:\n" +#~ " URPM Repos Closure Checker 1.0 для Mandriva Linux\n" +#~ " Инструмент для определения замкнутости набора RPM пакетов\n" +#~ "\n" +#~ "ИСПОЛЬЗОВАНИЕ:\n" +#~ " [_1] --hdlist=hdlist.txt\n" +#~ " [_1] --hdlist=http://mirror.yandex.ru/mandriva/.../synthesis.hdlist.cz\n" +#~ " [_1] --dir=rpms/ --static --file-deps=file-deps.txt\n" +#~ " [_1] --list=list.txt --dynamic\n" +#~ "\n" +#~ "ОПЦИИ:\n" +#~ " -h|-help\n" +#~ " Показать это сообщение.\n" +#~ "\n" +#~ " -v|-version\n" +#~ " Показать информацию о версии программы.\n" +#~ "\n" +#~ " -hdlist <путь>\n" +#~ " Путь к HDlist (synthesis), который надо проверить.\n" +#~ "\n" +#~ " -d|-dir <путь>\n" +#~ " Директория с RPM пакетами, которую надо проверить.\n" +#~ "\n" +#~ " -l|-list <путь>\n" +#~ " Список пакетов, который надо проверить.\n" +#~ "\n" +#~ " -add|-update <путь>\n" +#~ " Директория с RPM пакетами которые\n" +#~ " надо добавить в репозиторий или обновить.\n" +#~ "\n" +#~ " -file-deps <путь>\n" +#~ " Использовать файл file-deps для игнорирования\n" +#~ " некоторых зависимостей.\n" +#~ "\n" +#~ " -s|-static\n" +#~ " Статический анализ зависимостей.\n" +#~ "\n" +#~ " -dynamic\n" +#~ " Динамический анализ зависимостей (через установку пакетов).\n" +#~ "\n" +#~ " -r|-check-release\n" +#~ " Проверить установочный диск (CD/DVD).\n" +#~ "\n" +#~ " -sign|-check-signature\n" +#~ " Проверить сигнатуры пакетов.\n" +#~ "\n" +#~ " -noclean\n" +#~ " Не очищать кэш инструментария URPM.\n" +#~ "\n" +#~ " -root <путь>\n" +#~ " Куда устанавливать пакеты.\n" +#~ " Путь по-умолчанию:\n" +#~ " /tmp/...\n" +#~ "\n" +#~ "КОДЫ ОШИБОК:\n" +#~ " 0 - Успех. Набор пакетов замкнут. Ошибок не произошло.\n" +#~ " 1 - Ошибки во время выполнения программы.\n" +#~ " 2 - Набор пакетов не замкнут.\n" +#~ " \n" +#~ "\n" + +#~ msgid "can't open file '[_1]': [_2]\n" +#~ msgstr "не удалось открыть файл '[_1]': [_2]\n" + +#~ msgid "ERROR: you should be root\n" +#~ msgstr "ОШИБКА: требуются права администратора\n" + +#~ msgid "ERROR: cannot access '[_1]'\n" +#~ msgstr "ОШИБКА: не удалось найти '[_1]'\n" + +#~ msgid "ERROR: the list of packages is empty\n" +#~ msgstr "ОШИБКА: список пакетов пуст\n" + +#~ msgid "ERROR: file '[_1]' is not RPM package\n" +#~ msgstr "ОШИБКА: файл '[_1]' не является RPM пакетом\n" + +#~ msgid "ERROR: --dir or --list option should be specified\n" +#~ msgstr "ОШИБКА: одна из следующих опций должна быть предоставлена: --dir или --list\n" + +#~ msgid "" +#~ "Extra Packages:\n" +#~ "\n" +#~ msgstr "" +#~ "Дополнительные Пакеты:\n" +#~ "\n" + +#~ msgid " (required by: [_1])" +#~ msgstr " (требуется в: [_1])" + +#~ msgid "" +#~ "Broken Packages:\n" +#~ "\n" +#~ msgstr "" +#~ "Сломанные Пакеты:\n" +#~ "\n" + +#~ msgid "Report has been generated to:" +#~ msgstr "Отчет создан:" + +#~ msgid "Checking RPMs ...\n" +#~ msgstr "Проверка RPM пакетов ...\n" + +#~ msgid "Checking [_1]\n" +#~ msgstr "Проверка [_1]\n" + +#~ msgid " FAILED: invalid signature\n" +#~ msgstr " ОШИБКА: некорректная сигнатура\n" + +#~ msgid "" +#~ "Broken Signature:\n" +#~ "\n" +#~ msgstr "" +#~ "Некорректные сигнатуры:\n" +#~ "\n" + +#~ msgid "ERROR: --hdlist, --dir or --list option should be specified\n" +#~ msgstr "ОШИБКА: одна из следующих опций должна быть предоставлена: --hdlist, --dir or --list\n" + +#~ msgid "Downloading HDlist ...\n" +#~ msgstr "Загрузка HDlist-файла ...\n" + +#~ msgid "ERROR: cannot extract '[_1]'\n" +#~ msgstr "ОШИБКА: не удалось распаковать '[_1]'\n" + +#~ msgid "ERROR: unknown format of hdlist\n" +#~ msgstr "ОШИБКА: неизвестный формат HDlist-файла\n" + +#~ msgid "Checking HDlist ...\n" +#~ msgstr "Проверка HDlist-файла ...\n" + +#~ msgid "Unresolved \"Required\" Dependencies ([_1]):" +#~ msgstr "Сломанные \"Requires\" Зависимости ([_1]):" + +#~ msgid "Unresolved \"Suggested\" Dependencies ([_1]):" +#~ msgstr "Сломанные \"Suggests\" Зависимости ([_1]):" + +#~ msgid "Broken Packages ([_1]):" +#~ msgstr "Сломанные Пакеты ([_1]):" + +#~ msgid "" +#~ "URPM Repos Closure Checker [_1] for Mandriva Linux\n" +#~ "Copyright (C) 2012 ROSA Laboratory\n" +#~ "License: GPL \n" +#~ "This program is free software: you can redistribute it and/or modify it.\n" +#~ "\n" +#~ "Written by Andrey Ponomarenko.\n" +#~ msgstr "" +#~ "URPM Repos Closure Checker [_1] для Mandriva Linux\n" +#~ "Copyright (C) 2012 Лаборатория РОСА\n" +#~ "Лицензия: GPL \n"