"Project-Id-Version: zypp.ru\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-12-01 07:26+0100\n"
-"PO-Revision-Date: 2017-10-09 20:13+0000\n"
-"Last-Translator: Alex Minton <alex239@gmail.com>\n"
-"Language-Team: Russian <https://l10n.opensuse.org/projects/libzypp/master/ru/"
-">\n"
+"PO-Revision-Date: 2017-12-20 18:05+0000\n"
+"Last-Translator: Nikita Maynagashev <maynagashev@palex.ru>\n"
+"Language-Team: Russian "
+"<https://l10n.opensuse.org/projects/libzypp/master/ru/>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 2.13.1\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<="
+"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 2.17.1\n"
#: zypp/target/hal/HalException.h:46 zypp/target/hal/HalException.h:55
#: zypp/target/hal/HalException.h:64
#: zypp/CheckSum.cc:136
#, c-format, boost-format
msgid "Dubious type '%s' for %u byte checksum '%s'"
-msgstr "Подозрительный тип '%s' байта номер %u контрольной суммы '%s'"
+msgstr "Подозрительный тип \"%s\" байта номер %u контрольной суммы \"%s\""
#: zypp/CountryCode.cc:50
msgid "Unknown country: "
#. :AND:020:
#: zypp/CountryCode.cc:159
msgid "United Arab Emirates"
-msgstr "Объединённые Арабские Эмираты"
+msgstr "Объединенные Арабские Эмираты"
#. :ARE:784:
#: zypp/CountryCode.cc:160
#. :CHE:756:
#: zypp/CountryCode.cc:200
msgid "Cote D'Ivoire"
-msgstr "Кот-д'Ивуар"
+msgstr "Кот-д\"Ивуар"
#. :CIV:384:
#: zypp/CountryCode.cc:201
#. :SWZ:748:
#: zypp/CountryCode.cc:368
msgid "Turks and Caicos Islands"
-msgstr "Тёркс и Кайкос"
+msgstr "Теркс и Кайкос"
#. :TCA:796:
#: zypp/CountryCode.cc:369
msgstr "Попытка импорта несуществующего ключа %s в хранилище ключей %s"
#: zypp/KeyRing.cc:583
-#, fuzzy
msgid "Failed to import key."
-msgstr "Ð\9dе Ñ\83далоÑ\81Ñ\8c импоÑ\80Ñ\82иÑ\80оваÑ\82Ñ\8c пÑ\83блиÑ\87нÑ\8bй клÑ\8eÑ\87 %1%"
+msgstr "Ð\9dе Ñ\83далоÑ\81Ñ\8c импоÑ\80Ñ\82иÑ\80оваÑ\82Ñ\8c клÑ\8eÑ\87 %1%."
#: zypp/KeyRing.cc:606
msgid "Failed to delete key."
#. language code: und
#: zypp/LanguageCode.cc:1091
msgid "Undetermined"
-msgstr "Неопределённый"
+msgstr "Неопределенный"
#. language code: urd ur
#: zypp/LanguageCode.cc:1093
#: zypp/PublicKey.cc:65
#, boost-format
msgid "expired: %1%"
-msgstr "истёк: %1%"
+msgstr "истек: %1%"
#. translators: an annotation to a gpg keys expiry date: "expires: 2111-04-12"
#: zypp/PublicKey.cc:70
#: zypp/RepoManager.cc:364
msgid "Service alias cannot start with dot."
-msgstr "Ð\9fÑ\81евдоним Ñ\81лÑ\83жбÑ\8b не может начинаться с точки."
+msgstr "Ð\9fÑ\81евдоним Ñ\81еÑ\80виÑ\81 не может начинаться с точки."
#. TranslatorExplanation '%s' is a filename
#: zypp/RepoManager.cc:744 zypp/RepoManager.cc:1659 zypp/RepoManager.cc:1725
#: zypp/RepoManager.cc:1098
msgid "Valid metadata not found at specified URL"
msgid_plural "Valid metadata not found at specified URLs"
-msgstr[0] "Ð\9fо Ñ\83казанномÑ\83 URL-адÑ\80еÑ\81Ñ\83 не найдено дейÑ\81Ñ\82виÑ\82елÑ\8cных метаданных"
-msgstr[1] "Ð\9fо Ñ\83казаннÑ\8bм URL-адÑ\80еÑ\81ам не найдено дейÑ\81Ñ\82виÑ\82елÑ\8cных метаданных"
-msgstr[2] "Ð\9fо Ñ\83казаннÑ\8bм URL-адÑ\80еÑ\81ам не найдено дейÑ\81Ñ\82виÑ\82елÑ\8cных метаданных"
+msgstr[0] "Ð\9fо Ñ\83казанномÑ\83 URL-адÑ\80еÑ\81Ñ\83 не найдено допÑ\83Ñ\81Ñ\82имых метаданных"
+msgstr[1] "Ð\9fо Ñ\83казаннÑ\8bм URL-адÑ\80еÑ\81ам не найдено допÑ\83Ñ\81Ñ\82имых метаданных"
+msgstr[2] "Ð\9fо Ñ\83казаннÑ\8bм URL-адÑ\80еÑ\81ам не найдено допÑ\83Ñ\81Ñ\82имых метаданных"
#: zypp/RepoManager.cc:1146 zypp/RepoManager.cc:1258 zypp/RepoManager.cc:1314
#, c-format, boost-format
#: zypp/RepoManager.cc:1711
#, c-format, boost-format
msgid "Invalid repo file name at '%s'"
-msgstr "Ð\9dевеÑ\80ное имя файла репозитория в \"%s\""
+msgstr "Ð\9dедопÑ\83Ñ\81Ñ\82имое имя файла репозитория в \"%s\""
#: zypp/RepoManager.cc:1752
#, c-format, boost-format
#: zypp/Url.cc:153
#, c-format, boost-format
msgid "Invalid LDAP URL query parameter '%s'"
-msgstr "Недопустимый параметр запроса LDAP в URL-адресе: '%s'"
+msgstr "Недопустимый параметр запроса LDAP в URL-адресе: \"%s\""
#: zypp/Url.cc:300
msgid "Unable to clone Url object"
#: zypp/Url.cc:326 zypp/Url.cc:340
msgid "Unable to parse Url components"
-msgstr "Не удалось выполнить анализ компонентов URL-адреса"
+msgstr "Не удалось выполнить анализ синтаксиса компонентов URL-адреса"
#: zypp/VendorSupportOptions.cc:14
msgid "unknown"
#: zypp/VendorSupportOptions.cc:39
msgid "The level of support is unspecified"
-msgstr "Уровень поддержки не определён"
+msgstr "Уровень поддержки не определен"
#: zypp/VendorSupportOptions.cc:42
msgid "The vendor does not provide support."
#: zypp/base/StrMatcher.cc:152
#, c-format, boost-format
msgid "Unknown match mode '%s'"
-msgstr "Неизвестный режим сопоставления '%s'"
+msgstr "Неизвестный режим сопоставления \"%s\""
#: zypp/base/StrMatcher.cc:153
#, c-format, boost-format
msgid "Unknown match mode '%s' for pattern '%s'"
-msgstr "Неизвестный режим сопоставления '%s' для шаблона '%s'"
+msgstr "Неизвестный режим сопоставления \"%s\" для шаблона \"%s\""
#: zypp/base/StrMatcher.cc:157
#, c-format, boost-format
msgid "Invalid regular expression '%s': regcomp returned %d"
-msgstr "Ð\9dевеÑ\80ное Ñ\80егÑ\83лÑ\8fÑ\80ное вÑ\8bÑ\80ажение '%s': regcomp вернул %d"
+msgstr "Ð\9dедопÑ\83Ñ\81Ñ\82имое Ñ\80егÑ\83лÑ\8fÑ\80ное вÑ\8bÑ\80ажение \"%s\": regcomp вернул %d"
#: zypp/base/StrMatcher.cc:158
#, c-format, boost-format
msgid "Invalid regular expression '%s'"
-msgstr "Ð\9dевеÑ\80ное Ñ\80егÑ\83лÑ\8fÑ\80ное вÑ\8bÑ\80ажение '%s'"
+msgstr "Ð\9dедопÑ\83Ñ\81Ñ\82имое Ñ\80егÑ\83лÑ\8fÑ\80ное вÑ\8bÑ\80ажение \"%s\""
#. !\todo add comma to the message for the next release
#: zypp/media/MediaCIFS.cc:427 zypp/media/MediaCurl.cc:1726
#, c-format, boost-format
msgid "Authentication required for '%s'"
-msgstr "Необходима аутентификация для '%s'"
+msgstr "Необходима аутентификация для \"%s\""
#: zypp/media/MediaCurl.cc:1109
msgid ""
#: zypp/media/MediaException.cc:51
#, c-format, boost-format
msgid "Medium not opened when trying to perform action '%s'."
-msgstr "При попытке произведения действия '%s' не был открыт носитель."
+msgstr "При попытке произведения действия \"%s\" не был открыт носитель."
#: zypp/media/MediaException.cc:56
#, c-format, boost-format
msgid "File '%s' not found on medium '%s'"
-msgstr "Файл '%s' не найден на носителе '%s'"
+msgstr "Файл \"%s\" не найден на носителе \"%s\""
#: zypp/media/MediaException.cc:61
#, c-format, boost-format
msgid "Cannot write file '%s'."
-msgstr "Невозможно записать файл '%s'."
+msgstr "Невозможно записать файл \"%s\"."
#: zypp/media/MediaException.cc:66
msgid "Medium not attached"
-msgstr "Носитель не присоединён"
+msgstr "Носитель не присоединен"
#: zypp/media/MediaException.cc:71
msgid "Bad media attach point"
#: zypp/media/MediaException.cc:77
#, c-format, boost-format
msgid "Download (curl) initialization failed for '%s'"
-msgstr "Сбой инициализации загрузки (curl) для '%s'"
+msgstr "Сбой инициализации загрузки (curl) для \"%s\""
#: zypp/media/MediaException.cc:82
#, c-format, boost-format
msgid "System exception '%s' on medium '%s'."
-msgstr "Системное исключение '%s' на носителе '%s'."
+msgstr "Системное исключение \"%s\" на носителе \"%s\"."
#: zypp/media/MediaException.cc:87
#, c-format, boost-format
msgid "Path '%s' on medium '%s' is not a file."
-msgstr "Путь '%s' на носителе '%s' не является файлом."
+msgstr "Путь \"%s\" на носителе \"%s\" не является файлом."
#: zypp/media/MediaException.cc:92
#, c-format, boost-format
msgid "Path '%s' on medium '%s' is not a directory."
-msgstr "Путь '%s' на носителе '%s' не является каталогом."
+msgstr "Путь \"%s\" на носителе \"%s\" не является каталогом."
#: zypp/media/MediaException.cc:99
msgid "Malformed URI"
#: zypp/media/MediaException.cc:109
msgid "Empty host name in URI"
-msgstr "Ð\9fÑ\83Ñ\81Ñ\82ое имÑ\8f Ñ\83зла в URI-адресе"
+msgstr "Ð\9fÑ\83Ñ\81Ñ\82ое имÑ\8f Ñ\85оÑ\81Ñ\82а в URI-адресе"
#: zypp/media/MediaException.cc:114
msgid "Empty filesystem in URI"
#: zypp/media/MediaException.cc:124
#, c-format, boost-format
msgid "Unsupported URI scheme in '%s'."
-msgstr "Неподдерживаемая схема URI-адреса в '%s'."
+msgstr "Неподдерживаемая схема URI-адреса в \"%s\"."
#: zypp/media/MediaException.cc:129
msgid "Operation not supported by medium"
"Error code: %s\n"
"Error message: %s\n"
msgstr ""
-"Ошибка загрузки (curl) '%s':\n"
+"Ошибка загрузки (curl) \"%s\":\n"
"Код ошибки: %s\n"
"Сообщение об ошибке: %s\n"
#: zypp/media/MediaException.cc:144
#, c-format, boost-format
msgid "Error occurred while setting download (curl) options for '%s':"
-msgstr "Произошла ошибка при установке параметров загрузки (curl) для '%s':"
+msgstr "Произошла ошибка при установке параметров загрузки (curl) для \"%s\":"
#: zypp/media/MediaException.cc:151
#, c-format, boost-format
msgid "Media source '%s' does not contain the desired medium"
-msgstr "Источник носителей '%s' не содержит желаемого носителя"
+msgstr "Источник носителей \"%s\" не содержит желаемого носителя"
#: zypp/media/MediaException.cc:156
#, c-format, boost-format
msgid "Medium '%s' is in use by another instance"
-msgstr "Носитель'%s' используется другим экземпляром"
+msgstr "Носитель\"%s\" используется другим экземпляром"
#: zypp/media/MediaException.cc:162
msgid "Cannot eject any media"
#: zypp/media/MediaException.cc:164
#, c-format, boost-format
msgid "Cannot eject media '%s'"
-msgstr "Невозможно извлечь носитель '%s'"
+msgstr "Невозможно извлечь носитель \"%s\""
#: zypp/media/MediaException.cc:179
#, c-format, boost-format
msgid "Permission to access '%s' denied."
-msgstr "Доступ к '%s' запрещён."
+msgstr "Доступ к \"%s\" запрещен."
#: zypp/media/MediaException.cc:187
#, c-format, boost-format
msgid "Timeout exceeded when accessing '%s'."
-msgstr "Превышено время ожидания при попытке доступа к '%s'."
+msgstr "Превышено время ожидания при попытке доступа к \"%s\"."
#: zypp/media/MediaException.cc:195
#, c-format, boost-format
msgid "Location '%s' is temporarily unaccessible."
-msgstr "Расположение '%s' временно недоступно."
+msgstr "Расположение \"%s\" временно недоступно."
#: zypp/media/MediaException.cc:203
#, c-format, boost-format
msgid " SSL certificate problem, verify that the CA cert is OK for '%s'."
msgstr ""
-" Проблема с сертификатом SSL, проверьте, всё ли в порядке с удостоверяющим "
-"центром сертификата '%s'."
+" Проблема с сертификатом SSL, проверьте, все ли в порядке с удостоверяющим "
+"центром сертификата \"%s\"."
#: zypp/media/MediaHandler.cc:370
msgid ""
#: zypp/media/MediaUserAuth.cc:136
#, c-format, boost-format
msgid "Unsupported HTTP authentication method '%s'"
-msgstr "Неподдерживаемый метод HTTP-аутентификации '%s'"
+msgstr "Неподдерживаемый метод HTTP-аутентификации \"%s\""
#: zypp/misc/CheckAccessDeleted.cc:281
msgid "Please install package 'lsof' first."
-msgstr "Сначала установите пакет 'lsof'."
+msgstr "Сначала установите пакет \"lsof\"."
#: zypp/parser/RepoindexFileReader.cc:197
#, c-format, boost-format
msgid "Required attribute '%s' is missing."
-msgstr "Необходимый атрибут '%s' отсутствует."
+msgstr "Необходимый атрибут \"%s\" отсутствует."
#: zypp/parser/RepoindexFileReader.cc:209
#, c-format, boost-format
msgid "One or both of '%s' or '%s' attributes is required."
-msgstr "Требуются один или оба атрибута '%s' или '%s'."
+msgstr "Требуются один или оба атрибута \"%s\" или \"%s\"."
#: zypp/repo/PackageProvider.cc:216
msgid "Signature verification failed"
"Package %s seems to be corrupted during transfer. Do you want to retry "
"retrieval?"
msgstr ""
-"Похоже, что пакет %s повреждён при передаче. Попробовать получить ещё раз?"
+"Похоже, что пакет %s поврежден при передаче. Попробовать получить еще раз?"
#. TranslatorExplanation %s = name of the package being processed.
#: zypp/repo/PackageProvider.cc:413
#, c-format, boost-format
msgid "Failed to provide Package %s. Do you want to retry retrieval?"
-msgstr "Не удалось предоставить пакет %s. Попробовать получить ещё раз?"
+msgstr "Не удалось предоставить пакет %s. Попробовать получить еще раз?"
#: zypp/repo/PackageProvider.cc:549
msgid "applydeltarpm check failed."
#: zypp/repo/RepoException.cc:129
msgid "Service plugin does not support changing an attribute."
-msgstr "Ð\9cодÑ\83лÑ\8c Ñ\81лÑ\83жбÑ\8b не поддерживает изменение атрибута."
+msgstr "Ð\9cодÑ\83лÑ\8c Ñ\81еÑ\80виÑ\81а не поддерживает изменение атрибута."
#: zypp/repo/RepoProvideFile.cc:261
#, c-format, boost-format
msgid "Can't provide file '%s' from repository '%s'"
-msgstr "Невозможно предоставить файл '%s' из репозитория '%s'"
+msgstr "Невозможно предоставить файл \"%s\" из репозитория \"%s\""
#: zypp/repo/RepoProvideFile.cc:267
msgid "No url in repository."
#: zypp/solver/detail/SATResolver.cc:1007
#, c-format, boost-format
msgid "%s is provided by the system and cannot be erased"
-msgstr "%s предоставляется системой и не может быть удалён"
+msgstr "%s предоставляется системой и не может быть удален"
#: zypp/solver/detail/SATResolver.cc:1011
#, c-format, boost-format
#: zypp/solver/detail/SATResolver.cc:1021
#, c-format, boost-format
msgid "cannot install both %s and %s"
-msgstr "Не удаётся установить оба %s и %s"
+msgstr "Не удается установить оба %s и %s"
#: zypp/solver/detail/SATResolver.cc:1026
#, c-format, boost-format
#: zypp/solver/detail/SATResolver.cc:1074
msgid "deleted providers: "
-msgstr "удалённые поставщики: "
+msgstr "удаленные поставщики: "
#. translators: 'uninstallable' == 'not installable'
#: zypp/solver/detail/SATResolver.cc:1085
#: zypp/solver/detail/SATResolver.cc:1302
#, c-format, boost-format
msgid "install %s from excluded repository"
-msgstr "установить %s из исключённого репозитория"
+msgstr "установить %s из исключенного репозитория"
#: zypp/solver/detail/SATResolver.cc:1322
#, c-format, boost-format
#: zypp/target/hal/HalContext.cc:229
msgid "Unable to create dbus connection"
-msgstr "Ð\9dе Ñ\83далоÑ\81Ñ\8c Ñ\81оздаÑ\82Ñ\8c подклÑ\8eÑ\87ение к dbus"
+msgstr "Ð\9dе Ñ\83далоÑ\81Ñ\8c Ñ\83Ñ\81Ñ\82ановиÑ\82Ñ\8c Ñ\81оединение Ñ\81 dbus"
#: zypp/target/hal/HalContext.cc:242
msgid "libhal_ctx_new: Can't create libhal context"
#: zypp/target/hal/HalContext.cc:257
msgid "libhal_set_dbus_connection: Can't set dbus connection"
-msgstr "libhal_set_dbus_connection: не удалось установить подключение к dbus"
+msgstr "libhal_set_dbus_connection: не удалось установить соединение с dbus"
#: zypp/target/hal/HalContext.cc:272
msgid "Unable to initalize HAL context -- hald not running?"
#: zypp/target/rpm/RpmDb.cc:1147
#, boost-format
msgid "Failed to import public key %1%"
-msgstr "Ð\9dе Ñ\83далоÑ\81Ñ\8c импоÑ\80Ñ\82иÑ\80оваÑ\82Ñ\8c пÑ\83блиÑ\87ный ключ %1%"
+msgstr "Ð\9dе Ñ\83далоÑ\81Ñ\8c импоÑ\80Ñ\82иÑ\80оваÑ\82Ñ\8c оÑ\82кÑ\80Ñ\8bÑ\82ый ключ %1%"
#. Translator: %1% is a gpg public key
#: zypp/target/rpm/RpmDb.cc:1217
#, boost-format
msgid "Failed to remove public key %1%"
-msgstr "Ð\9dе Ñ\83далоÑ\81Ñ\8c Ñ\83далиÑ\82Ñ\8c пÑ\83блиÑ\87ный ключ %1%"
+msgstr "Ð\9dе Ñ\83далоÑ\81Ñ\8c Ñ\83далиÑ\82Ñ\8c оÑ\82кÑ\80Ñ\8bÑ\82ый ключ %1%"
#: zypp/target/rpm/RpmDb.cc:1596
msgid "Package is not signed!"
#: zypp/target/rpm/RpmDb.cc:1896
#, c-format, boost-format
msgid "Changed configuration files for %s:"
-msgstr "Измененные файлы конфигурации для %s:"
+msgstr "Измененные конфигурационные файлы для %s:"
#. %s = filenames
#: zypp/target/rpm/RpmDb.cc:2071
#: zypp/url/UrlBase.cc:830
#, c-format, boost-format
msgid "Invalid Url scheme '%s'"
-msgstr "Ð\9dевеÑ\80наÑ\8f Ñ\81Ñ\85ема URL-адÑ\80еÑ\81а '%s'"
+msgstr "Ð\9dедопÑ\83Ñ\81Ñ\82имаÑ\8f Ñ\81Ñ\85ема URL-адÑ\80еÑ\81а \"%s\""
#: zypp/url/UrlBase.cc:949
msgid "Url scheme does not allow a username"
#: zypp/url/UrlBase.cc:1012
msgid "Url scheme requires a host component"
-msgstr "СÑ\85ема URL-адÑ\80еÑ\81а Ñ\82Ñ\80ебÑ\83еÑ\82 Ñ\83казаниÑ\8f компоненÑ\82а Ñ\83зла"
+msgstr "СÑ\85ема URL-адÑ\80еÑ\81а Ñ\82Ñ\80ебÑ\83еÑ\82 Ñ\83казаниÑ\8f компоненÑ\82а Ñ\85оÑ\81Ñ\82а"
#: zypp/url/UrlBase.cc:1022
msgid "Url scheme does not allow a host component"
-msgstr "СÑ\85ема URL-адÑ\80еÑ\81а не позволÑ\8fеÑ\82 иÑ\81полÑ\8cзоваÑ\82Ñ\8c компоненÑ\82 Ñ\83зла"
+msgstr "СÑ\85ема URL-адÑ\80еÑ\81а не позволÑ\8fеÑ\82 иÑ\81полÑ\8cзоваÑ\82Ñ\8c компоненÑ\82 Ñ\85оÑ\81Ñ\82а"
#: zypp/url/UrlBase.cc:1049
#, c-format, boost-format
msgid "Invalid host component '%s'"
-msgstr "Ð\9dевеÑ\80нÑ\8bй компоненÑ\82 Ñ\83зла \"%s\""
+msgstr "Ð\9dедопÑ\83Ñ\81Ñ\82имÑ\8bй компоненÑ\82 Ñ\85оÑ\81Ñ\82а \"%s\""
#: zypp/url/UrlBase.cc:1070
msgid "Url scheme does not allow a port"
#: zypp/url/UrlBase.cc:1081
#, c-format, boost-format
msgid "Invalid port component '%s'"
-msgstr "Ð\9dевеÑ\80нÑ\8bй компоненÑ\82 поÑ\80Ñ\82а '%s'"
+msgstr "Ð\9dедопÑ\83Ñ\81Ñ\82имÑ\8bй компоненÑ\82 поÑ\80Ñ\82а \"%s\""
#: zypp/url/UrlBase.cc:1098
msgid "Url scheme requires path name"
#: zypp/url/UrlUtils.cc:173
msgid "Invalid parameter array split separator character"
-msgstr "Ð\9dевеÑ\80ный символ разделителя для разбиения массива параметров"
+msgstr "Ð\9dедопÑ\83Ñ\81Ñ\82имый символ разделителя для разбиения массива параметров"
#: zypp/url/UrlUtils.cc:213
msgid "Invalid parameter map split separator character"
-msgstr "Ð\9dевеÑ\80ный символ разделителя для разбиения отображения параметров"
+msgstr "Ð\9dедопÑ\83Ñ\81Ñ\82имый символ разделителя для разбиения отображения параметров"
#: zypp/url/UrlUtils.cc:283
msgid "Invalid parameter array join separator character"
-msgstr "Ð\9dевеÑ\80ный символ разделителя для объединения массива параметров"
+msgstr "Ð\9dедопÑ\83Ñ\81Ñ\82имый символ разделителя для объединения массива параметров"
#~ msgid "Failed to import public key from file %s: %s"
#~ msgstr "Не удалось импортировать публичный ключ из файла %s: %s"
#include "zypp/base/Regex.h"
#include "zypp/base/String.h"
-#include "zypp/base/Logger.h"
+#include "zypp/base/LogTools.h"
#include "zypp/base/IOStream.h"
#include "zypp/PoolItem.h"
#include "zypp/PoolQueryUtil.tcc"
return _instance;
}
+typedef std::set<PoolQuery> LockSet;
+
+template <typename TPredicate>
+void remove_if( LockSet & lockset_r, TPredicate pred_r )
+{
+ LockSet::iterator first = lockset_r.begin();
+ LockSet::iterator last = lockset_r.end();
+ while ( first != last )
+ {
+ LockSet::iterator next = first;
+ ++next;
+ if ( pred_r( *first ) )
+ lockset_r.erase( first );
+ first = next;
+ }
+}
+
class Locks::Impl
{
public:
- LockList locks;
- LockList toAdd;
- LockList toRemove;
+ LockSet toAdd;
+ LockSet toRemove;
bool locksDirty;
bool mergeList(callback::SendReport<SavingLocksReport>& report);
- Impl():locksDirty(false){}
+ Impl()
+ : locksDirty( false )
+ , _APIdirty( false )
+ {}
+
+
+ // need to control manip locks _locks to maintain the legacy API LockList::iterator begin/end
+
+ const LockSet & locks() const
+ { return _locks; }
+
+ LockSet & MANIPlocks()
+ { if ( !_APIdirty ) _APIdirty = true; return _locks; }
+
+ const LockList & APIlocks() const
+ {
+ if ( _APIdirty )
+ {
+ _APIlocks.clear();
+ _APIlocks.insert( _APIlocks.end(), _locks.begin(), _locks.end() );
+ _APIdirty = false;
+ }
+ return _APIlocks;
+ }
+
+private:
+ // need to control manip in ordert to maintain the legacy API LockList::iterator begin/end
+ LockSet _locks;
+ mutable LockList _APIlocks;
+ mutable bool _APIdirty;
};
Locks::Locks() : _pimpl(new Impl){}
Locks::const_iterator Locks::begin() const
-{ return _pimpl->locks.begin(); }
+{ return _pimpl->APIlocks().begin(); }
Locks::const_iterator Locks::end() const
-{ return _pimpl->locks.end(); }
+{ return _pimpl->APIlocks().end(); }
Locks::LockList::size_type Locks::size() const
-{ return _pimpl->locks.size(); }
+{ return _pimpl->locks().size(); }
bool Locks::empty() const
-{ return _pimpl->locks.empty(); }
+{ return _pimpl->locks().empty(); }
struct ApplyLock
{
PathInfo pinfo(file);
if ( pinfo.isExist() )
{
- std::insert_iterator<LockList> ii( _pimpl->locks, _pimpl->locks.end() );
- LockingOutputIterator<std::insert_iterator<LockList> > lout(ii);
+ std::insert_iterator<LockSet> ii( _pimpl->MANIPlocks(), _pimpl->MANIPlocks().end() );
+ LockingOutputIterator<std::insert_iterator<LockSet> > lout(ii);
readPoolQueriesFromFile( file, boost::make_function_output_iterator(lout) );
}
else
- MIL << "file not exist(or cannot be stat), no lock added." << endl;
+ MIL << "file does not exist(or cannot be stat), no lock added." << endl;
}
MIL << "read locks from "<<file << endl;
PathInfo pinfo(file);
if ( pinfo.isExist() )
- readPoolQueriesFromFile( file, std::insert_iterator<LockList>(_pimpl->locks, _pimpl->locks.end()) );
+ readPoolQueriesFromFile( file, std::insert_iterator<LockSet>(_pimpl->MANIPlocks(), _pimpl->MANIPlocks().end()) );
else
- MIL << "file not exist(or cannot be stat), no lock added." << endl;
+ MIL << "file does not exist(or cannot be stat), no lock added." << endl;
}
void Locks::apply() const
{
DBG << "apply locks" << endl;
- for_each(begin(), end(), ApplyLock());
+ for_each(_pimpl->locks().begin(), _pimpl->locks().end(), ApplyLock());
}
PoolItem item(*it);
item.status().setLock(true,ResStatus::USER);
}
- LockList::iterator i = find(_pimpl->toRemove.begin(),
- _pimpl->toRemove.end(), query);
- if ( i != _pimpl->toRemove.end() )
+ if ( _pimpl->toRemove.erase( query ) )
{
DBG << "query removed from toRemove" << endl;
- _pimpl->toRemove.erase(i);
}
else
{
DBG << "query added as new" << endl;
- _pimpl->toAdd.push_back( query );
+ _pimpl->toAdd.insert( query );
}
}
item.status().setLock(false,ResStatus::USER);
}
- LockList::iterator i = find(_pimpl->toAdd.begin(),
- _pimpl->toAdd.end(), query);
- if ( i != _pimpl->toAdd.end() )
+ if ( _pimpl->toAdd.erase( query ) )
{
DBG << "query removed from added" << endl;
- _pimpl->toAdd.erase(i);
}
else
{
- DBG << "needed remove some old lock" << endl;
- _pimpl->toRemove.push_back( query );
+ DBG << "need to remove some old lock" << endl;
+ _pimpl->toRemove.insert( query );
}
}
q.setMatchExact();
q.setCaseSensitive(true);
q.requireAll();
- DBG << "remove lock by selectactable" << endl;
+ DBG << "remove lock by Selectable" << endl;
removeLock(q);
}
bool Locks::existEmpty() const
{
- for_( it, _pimpl->locks.begin(), _pimpl->locks.end() )
+ for_( it, _pimpl->locks().begin(), _pimpl->locks().end() )
{
if( it->empty() )
return true;
bool aborted(){ return skip_rest; }
- bool operator()(PoolQuery& q)
+ bool operator()( const PoolQuery & q )
{
if( skip_rest )
return false;
case CleanEmptyLocksReport::IGNORE:
return false;
default:
- WAR << "Unknown returned value. Callback have more value then"
- << " this switch. Need correct handle all enum values." << std::endl;
+ INT << "Unexpected return value from callback. Need to adapt switch statement." << std::endl;
}
return false;
void Locks::removeEmpty()
{
- MIL << "cleaning of locks" << endl;
+ MIL << "clean of locks" << endl;
callback::SendReport<CleanEmptyLocksReport> report;
report->start();
- size_t sum = _pimpl->locks.size();
+ size_t sum = _pimpl->locks().size();
LocksCleanPredicate p(sum, report);
- _pimpl->locks.remove_if(p);
+ remove_if( _pimpl->MANIPlocks(), p );
if( p.aborted() )
{
}
- if ( sum != _pimpl->locks.size() ) //some locks has been removed
+ if ( sum != _pimpl->locks().size() ) //some locks has been removed
_pimpl->locksDirty = true;
}
DBG << "skip lock" << endl;
return false;
}
- WAR << "should not reached, some state is missing" << endl;
+ INT << "Unexpected return value from callback. Need to adapt switch statement." << std::endl;
return false;
}
bool Locks::Impl::mergeList(callback::SendReport<SavingLocksReport>& report)
{
- MIL << "merging list old: " << locks.size()
+ MIL << "merge list old: " << locks().size()
<< " to add: " << toAdd.size() << "to remove: " << toRemove.size() << endl;
for_(it,toRemove.begin(),toRemove.end())
{
std::set<sat::Solvable> s(it->begin(),it->end());
- locks.remove_if(LocksRemovePredicate(s,*it, report));
+ remove_if( MANIPlocks(), LocksRemovePredicate(s,*it, report) );
}
if (!report->progress())
return false;
- for_( it, toAdd.begin(), toAdd.end() )
- {
- if( std::find( locks.begin(), locks.end(), *it ) == locks.end() )
- locks.push_back( *it );
- }
+ MANIPlocks().insert( toAdd.begin(), toAdd.end() );
toAdd.clear();
toRemove.clear();
}
}
- DBG << "writed "<< _pimpl->locks.size() << "locks" << endl;
- writePoolQueriesToFile( file, _pimpl->locks.begin(), _pimpl->locks.end() );
+ DBG << "wrote "<< _pimpl->locks().size() << "locks" << endl;
+ writePoolQueriesToFile( file, _pimpl->locks().begin(), _pimpl->locks().end() );
report->finish(SavingLocksReport::NO_ERROR);
}
void Locks::removeDuplicates()
-{
- size_type sum = size();
- for_(it,_pimpl->locks.begin(),_pimpl->locks.end())
- {
- if ( find(_pimpl->locks.begin(),it,*it) != it )
- _pimpl->locks.erase(it--); //-- to avoid using break iterator
- }
-
- if (sum!=size())
- _pimpl->locksDirty = true;
-}
+{ /* NOP since implementation uses std::set */ }
} // ns zypp