Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package libzypp for openSUSE:Factory checked 
in at 2022-03-28 17:00:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libzypp (Old)
 and      /work/SRC/openSUSE:Factory/.libzypp.new.1900 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libzypp"

Mon Mar 28 17:00:17 2022 rev:458 rq:964915 version:17.30.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/libzypp/libzypp.changes  2022-03-15 
19:04:49.888944515 +0100
+++ /work/SRC/openSUSE:Factory/.libzypp.new.1900/libzypp.changes        
2022-03-28 17:01:08.385016534 +0200
@@ -1,0 +2,13 @@
+Fri Mar 25 17:08:46 CET 2022 - m...@suse.de
+
+- ZConfig: Update solver settings if target changes (bsc#1196368)
+- version 17.30.0 (22)
+
+-------------------------------------------------------------------
+Mon Mar 21 09:04:36 CET 2022 - m...@suse.de
+
+- Fix possible hang in singletrans mode (bsc#1197134)
+- Do 2 retries if mount is still busy.
+- version 17.29.7 (22)
+
+-------------------------------------------------------------------
@@ -4 +17 @@
-- Fix package signature check (bsc#184501)
+- Fix package signature check (bsc#1184501)

Old:
----
  libzypp-17.29.6.tar.bz2

New:
----
  libzypp-17.30.0.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libzypp.spec ++++++
--- /var/tmp/diff_new_pack.ruYcw3/_old  2022-03-28 17:01:08.985017349 +0200
+++ /var/tmp/diff_new_pack.ruYcw3/_new  2022-03-28 17:01:08.993017360 +0200
@@ -43,7 +43,7 @@
 %bcond_with enable_preview_single_rpmtrans_as_default_for_zypper
 
 Name:           libzypp
-Version:        17.29.6
+Version:        17.30.0
 Release:        0
 License:        GPL-2.0-or-later
 URL:            https://github.com/openSUSE/libzypp

++++++ libzypp-17.29.6.tar.bz2 -> libzypp-17.30.0.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.29.6/VERSION.cmake 
new/libzypp-17.30.0/VERSION.cmake
--- old/libzypp-17.29.6/VERSION.cmake   2022-03-14 15:43:14.000000000 +0100
+++ new/libzypp-17.30.0/VERSION.cmake   2022-03-25 17:18:36.000000000 +0100
@@ -60,9 +60,9 @@
 #
 SET(LIBZYPP_MAJOR "17")
 SET(LIBZYPP_COMPATMINOR "22")
-SET(LIBZYPP_MINOR "29")
-SET(LIBZYPP_PATCH "6")
+SET(LIBZYPP_MINOR "30")
+SET(LIBZYPP_PATCH "0")
 #
-# LAST RELEASED: 17.29.6 (22)
+# LAST RELEASED: 17.30.0 (22)
 # (The number in parenthesis is LIBZYPP_COMPATMINOR)
 #=======
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.29.6/package/libzypp.changes 
new/libzypp-17.30.0/package/libzypp.changes
--- old/libzypp-17.29.6/package/libzypp.changes 2022-03-14 15:43:14.000000000 
+0100
+++ new/libzypp-17.30.0/package/libzypp.changes 2022-03-25 17:18:36.000000000 
+0100
@@ -1,7 +1,20 @@
 -------------------------------------------------------------------
+Fri Mar 25 17:08:46 CET 2022 - m...@suse.de
+
+- ZConfig: Update solver settings if target changes (bsc#1196368)
+- version 17.30.0 (22)
+
+-------------------------------------------------------------------
+Mon Mar 21 09:04:36 CET 2022 - m...@suse.de
+
+- Fix possible hang in singletrans mode (bsc#1197134)
+- Do 2 retries if mount is still busy.
+- version 17.29.7 (22)
+
+-------------------------------------------------------------------
 Mon Mar 14 15:40:04 CET 2022 - m...@suse.de
 
-- Fix package signature check (bsc#184501)
+- Fix package signature check (bsc#1184501)
   Pay attention that header and payload are secured by a valid
   signature and report more detailed which signature is missing.
 - Retry umount if device is busy (bsc#1196061, closes #381)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.29.6/po/ca.po new/libzypp-17.30.0/po/ca.po
--- old/libzypp-17.29.6/po/ca.po        2022-03-14 15:26:34.000000000 +0100
+++ new/libzypp-17.30.0/po/ca.po        2022-03-14 23:14:06.000000000 +0100
@@ -9,7 +9,7 @@
 "Project-Id-Version: YaST (@memory@)\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-03-14 15:21+0100\n"
-"PO-Revision-Date: 2022-02-24 20:12+0000\n"
+"PO-Revision-Date: 2022-03-14 22:12+0000\n"
 "Last-Translator: David Medina <medi...@gmail.com>\n"
 "Language-Team: Catalan <https://l10n.opensuse.org/projects/libzypp/master/ca/";
 ">\n"
@@ -5004,11 +5004,11 @@
 
 #: zypp/target/rpm/RpmDb.cc:1271
 msgid "Package header is not signed!"
-msgstr ""
+msgstr "La cap??alera del paquet no est?? signada!"
 
 #: zypp/target/rpm/RpmDb.cc:1273
 msgid "Package payload is not signed!"
-msgstr ""
+msgstr "El contingut del paquet no est?? signat!"
 
 #. Translator: %s = name of an rpm package. A list of diffs follows
 #. this message.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.29.6/po/es.po new/libzypp-17.30.0/po/es.po
--- old/libzypp-17.29.6/po/es.po        2022-03-14 15:26:34.000000000 +0100
+++ new/libzypp-17.30.0/po/es.po        2022-03-19 03:16:19.000000000 +0100
@@ -17,8 +17,8 @@
 "Project-Id-Version: zypp\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-03-14 15:21+0100\n"
-"PO-Revision-Date: 2022-03-03 20:12+0000\n"
-"Last-Translator: Antonio Sim??n <anto...@trans-mission.com>\n"
+"PO-Revision-Date: 2022-03-19 02:12+0000\n"
+"Last-Translator: Mat??as Silva Bustos <matias...@gmail.com>\n"
 "Language-Team: Spanish <https://l10n.opensuse.org/projects/libzypp/master/es/";
 ">\n"
 "Language: es\n"
@@ -4644,11 +4644,11 @@
 
 #: zypp/target/rpm/RpmDb.cc:1271
 msgid "Package header is not signed!"
-msgstr ""
+msgstr "??Cabecera del paquete sin firmar!"
 
 #: zypp/target/rpm/RpmDb.cc:1273
 msgid "Package payload is not signed!"
-msgstr ""
+msgstr "??Contenido del paquete sin firmar!"
 
 #
 # modules/Mail.ycp:458
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.29.6/po/fi.po new/libzypp-17.30.0/po/fi.po
--- old/libzypp-17.29.6/po/fi.po        2022-03-14 15:26:34.000000000 +0100
+++ new/libzypp-17.30.0/po/fi.po        2022-03-16 01:13:39.000000000 +0100
@@ -20,7 +20,7 @@
 "Project-Id-Version: zypp.fi\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-03-14 15:21+0100\n"
-"PO-Revision-Date: 2022-03-10 15:12+0000\n"
+"PO-Revision-Date: 2022-03-16 00:12+0000\n"
 "Last-Translator: Tommi Nieminen <softw...@legisign.org>\n"
 "Language-Team: Finnish <https://l10n.opensuse.org/projects/libzypp/master/fi/";
 ">\n"
@@ -4816,11 +4816,11 @@
 
 #: zypp/target/rpm/RpmDb.cc:1271
 msgid "Package header is not signed!"
-msgstr ""
+msgstr "Paketin otsaketta ei ole allekirjoitettu!"
 
 #: zypp/target/rpm/RpmDb.cc:1273
 msgid "Package payload is not signed!"
-msgstr ""
+msgstr "Paketin sis??lt???? ei ole allekirjoitettu!"
 
 #. Translator: %s = name of an rpm package. A list of diffs follows
 #. this message.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.29.6/po/ja.po new/libzypp-17.30.0/po/ja.po
--- old/libzypp-17.29.6/po/ja.po        2022-03-14 15:26:34.000000000 +0100
+++ new/libzypp-17.30.0/po/ja.po        2022-03-15 13:16:32.000000000 +0100
@@ -11,7 +11,7 @@
 "Project-Id-Version: zypp\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-03-14 15:21+0100\n"
-"PO-Revision-Date: 2022-02-25 01:12+0000\n"
+"PO-Revision-Date: 2022-03-15 12:12+0000\n"
 "Last-Translator: Yasuhiko Kamata <belphe...@belbel.or.jp>\n"
 "Language-Team: Japanese <https://l10n.opensuse.org/projects/libzypp/master/";
 "ja/>\n"
@@ -4612,11 +4612,11 @@
 
 #: zypp/target/rpm/RpmDb.cc:1271
 msgid "Package header is not signed!"
-msgstr ""
+msgstr "??????????????????????????????????????????????????????"
 
 #: zypp/target/rpm/RpmDb.cc:1273
 msgid "Package payload is not signed!"
-msgstr ""
+msgstr "????????????????????????????????????????????????????????????"
 
 #. Translator: %s = name of an rpm package. A list of diffs follows
 #. this message.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.29.6/po/nl.po new/libzypp-17.30.0/po/nl.po
--- old/libzypp-17.29.6/po/nl.po        2022-03-14 15:26:34.000000000 +0100
+++ new/libzypp-17.30.0/po/nl.po        2022-03-15 13:16:32.000000000 +0100
@@ -16,10 +16,10 @@
 "Project-Id-Version: zypp.nl\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-03-14 15:21+0100\n"
-"PO-Revision-Date: 2022-02-25 01:12+0000\n"
+"PO-Revision-Date: 2022-03-15 12:12+0000\n"
 "Last-Translator: Freek de Kruijf <fr...@opensuse.org>\n"
-"Language-Team: Dutch <https://l10n.opensuse.org/projects/libzypp/master/nl/";
-">\n"
+"Language-Team: Dutch <https://l10n.opensuse.org/projects/libzypp/master/nl/>"
+"\n"
 "Language: nl\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -4628,11 +4628,11 @@
 
 #: zypp/target/rpm/RpmDb.cc:1271
 msgid "Package header is not signed!"
-msgstr ""
+msgstr "Header van pakket is niet ondertekend!"
 
 #: zypp/target/rpm/RpmDb.cc:1273
 msgid "Package payload is not signed!"
-msgstr ""
+msgstr "Inhoud van pakket is niet ondertekend!"
 
 #. Translator: %s = name of an rpm package. A list of diffs follows
 #. this message.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.29.6/po/ru.po new/libzypp-17.30.0/po/ru.po
--- old/libzypp-17.29.6/po/ru.po        2022-03-14 15:26:34.000000000 +0100
+++ new/libzypp-17.30.0/po/ru.po        2022-03-16 01:13:39.000000000 +0100
@@ -14,8 +14,8 @@
 "Project-Id-Version: zypp.ru\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-03-14 15:21+0100\n"
-"PO-Revision-Date: 2021-01-04 16:37+0000\n"
-"Last-Translator: Alex Minton <alex...@gmail.com>\n"
+"PO-Revision-Date: 2022-03-16 00:12+0000\n"
+"Last-Translator: Sergey Mashkov <cy6erg...@gmail.com>\n"
 "Language-Team: Russian <https://l10n.opensuse.org/projects/libzypp/master/ru/";
 ">\n"
 "Language: ru\n"
@@ -24,7 +24,7 @@
 "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 3.6.1\n"
+"X-Generator: Weblate 4.9.1\n"
 
 #: zypp/CountryCode.cc:50
 msgid "Unknown country: "
@@ -4053,6 +4053,8 @@
 #, boost-format
 msgid "Expected medium %1%/%2% identified by file '%3%' with content:"
 msgstr ""
+"?????????????????? ???????????????? %1%/%2% 
???????????????????????????????????? ?? ?????????? '%3%' ???? 
?????????????????? "
+"????????????????????:"
 
 #. [lhs][rhs] 0 = installed; 1 = to be installed
 #. TranslatorExplanation %1%(filename) %2%(package1) %3%(package2)
@@ -4220,27 +4222,30 @@
 "the installed %1% does not belong to a distupgrade repository and must be "
 "replaced"
 msgstr ""
+"?????????????????????????? ?????????? %1% ???? ???????????????????? ?? 
?????????????????????? ???????????????????? ?? ???????????? ???????? "
+"??????????????"
 
 #. just in case
 #: zypp/solver/detail/SATResolver.cc:1091
 #, boost-format
 msgid "the to be installed %1% does not belong to a distupgrade repository"
 msgstr ""
+"?????????????????????????? ?????????? %1% ???? ?????????????????????? 
?????????????????????? ???????????????????? ????????????????????????"
 
 #: zypp/solver/detail/SATResolver.cc:1095
 #, boost-format
 msgid "the installed %1% has inferior architecture"
-msgstr ""
+msgstr "?????????????????????????? %1% ?????????? ???????????? 
??????????????????????"
 
 #: zypp/solver/detail/SATResolver.cc:1097
 #, boost-format
 msgid "the to be installed %1% has inferior architecture"
-msgstr ""
+msgstr "?????????? ???????????????????? %1% ?? ???????????? 
????????????????????????"
 
 #: zypp/solver/detail/SATResolver.cc:1100
 #, boost-format
 msgid "problem with the installed %1%"
-msgstr ""
+msgstr "???????????????? ?? ?????????????????????????? %1%"
 
 #: zypp/solver/detail/SATResolver.cc:1103
 msgid "conflicting requests"
@@ -4253,17 +4258,17 @@
 #: zypp/solver/detail/SATResolver.cc:1109
 #, boost-format
 msgid "nothing provides the requested '%1%'"
-msgstr ""
+msgstr "?????????? ???? ?????????????????????????? ?????????????????????? 
'%1%'"
 
 #: zypp/solver/detail/SATResolver.cc:1110
 #: zypp/solver/detail/SATResolver.cc:1114
 msgid "Have you enabled all the required repositories?"
-msgstr ""
+msgstr "???? ???????????????? ?????? ?????????????????????? 
???????????????????????"
 
 #: zypp/solver/detail/SATResolver.cc:1113
 #, boost-format
 msgid "the requested package %1% does not exist"
-msgstr ""
+msgstr "?????????????????????? ?????????? %1% ???? ????????????????????"
 
 #: zypp/solver/detail/SATResolver.cc:1117
 msgid "unsupported request"
@@ -4272,88 +4277,90 @@
 #: zypp/solver/detail/SATResolver.cc:1120
 #, boost-format
 msgid "'%1%' is provided by the system and cannot be erased"
-msgstr ""
+msgstr "'%1' ???????????????????????? ?????? ?????????? ?????????????? ?? ???? 
?????????? ???????? ????????????"
 
 #: zypp/solver/detail/SATResolver.cc:1123
 #, boost-format
 msgid "%1% is not installable"
-msgstr ""
+msgstr "%1% ???? ?????????? ???????? ????????????????????"
 
 #: zypp/solver/detail/SATResolver.cc:1128
 #, boost-format
 msgid "nothing provides '%1%' needed by the installed %2%"
-msgstr ""
+msgstr "?????????? ???? ?????????????????????????? '%1' ?????????????????? 
?????? ???????????????????????????? %2%"
 
 #: zypp/solver/detail/SATResolver.cc:1130
 #, boost-format
 msgid "nothing provides '%1%' needed by the to be installed %2%"
-msgstr ""
+msgstr "?????????? ???? ?????????????????????????? '%1%' ?????????????????? 
?????? ?????????????????? %2%"
 
 #: zypp/solver/detail/SATResolver.cc:1133
 #, boost-format
 msgid "cannot install both %1% and %2%"
-msgstr ""
+msgstr "???????????????????? ???????????????????? ?????? %1% ?? %2%"
 
 #: zypp/solver/detail/SATResolver.cc:1138
 #, boost-format
 msgid "the installed %1% conflicts with '%2%' provided by the installed %3%"
-msgstr ""
+msgstr "?????????????????????????? %1% ?????????????????????? ?? '%2%' 
?????????????????????????????? %3%"
 
 #: zypp/solver/detail/SATResolver.cc:1140
 #, boost-format
 msgid ""
 "the installed %1% conflicts with '%2%' provided by the to be installed %3%"
-msgstr ""
+msgstr "?????????????????????????? %1% ?????????????????????? ?? '%2%', 
?????????????????? ?????? ?????????????????? %3%"
 
 #: zypp/solver/detail/SATResolver.cc:1144
 #, boost-format
 msgid ""
 "the to be installed %1% conflicts with '%2%' provided by the installed %3%"
 msgstr ""
+"?????????????????????????????? %1% ?????????????????????? ?? '%2%' 
?????????????????? ?????? ???????????????????????????? %3%"
 
 #: zypp/solver/detail/SATResolver.cc:1146
 #, boost-format
 msgid ""
 "the to be installed %1% conflicts with '%2%' provided by the to be installed "
 "%3%"
-msgstr ""
+msgstr "?????????????????????????????? %1% ?????????????????????? ?? '%2%' 
?????????????????? ?????? ?????????????????? %3%"
 
 #: zypp/solver/detail/SATResolver.cc:1153
 #, boost-format
 msgid "the installed %1% obsoletes '%2%' provided by the installed %3%"
-msgstr ""
+msgstr "?????????????????????????? %1% ???????????????? '%2%', 
?????????????????? ?????? ???????????????????????????? %3%"
 
 #: zypp/solver/detail/SATResolver.cc:1155
 #, boost-format
 msgid "the installed %1% obsoletes '%2%' provided by the to be installed %3%"
-msgstr ""
+msgstr "?????????????????????????? %1% ???????????????? '%2%' 
?????????????????? ?????? ?????????????????? %3%"
 
 #: zypp/solver/detail/SATResolver.cc:1159
 #, boost-format
 msgid "the to be installed %1% obsoletes '%2%' provided by the installed %3%"
-msgstr ""
+msgstr "?????????????????????????????? %1% ???????????????? '%2%' 
?????????????????? ?????? ???????????????????????????? %3%"
 
 #: zypp/solver/detail/SATResolver.cc:1161
 #, boost-format
 msgid ""
 "the to be installed %1% obsoletes '%2%' provided by the to be installed %3%"
-msgstr ""
+msgstr "?????????????????????????????? %1% ???????????????? %2% 
?????????????????? ?????? ???????????????????????????? %3%"
 
 #: zypp/solver/detail/SATResolver.cc:1166
 #, boost-format
 msgid "the installed %1% conflicts with '%2%' provided by itself"
-msgstr ""
+msgstr "?????????????????????????? %1% ?????????????????????? ?? '%2%' 
?????????????????????????????? ?????????? ??????????"
 
 #: zypp/solver/detail/SATResolver.cc:1168
 #, boost-format
 msgid "the to be installed %1% conflicts with '%2%' provided by itself"
-msgstr ""
+msgstr "?????????????????????????????? %1% ?????????????????????? ?? '%2%', 
?????????????? ???????????????????? ??????"
 
 #: zypp/solver/detail/SATResolver.cc:1200
 #, boost-format
 msgid ""
 "the installed %1% requires '%2%', but this requirement cannot be provided"
 msgstr ""
+"?????????????????????????? %1% ?????????????? '%2%', ???? ?????? 
???????????????????? ???? ?????????? ???????? ??????????????????"
 
 #: zypp/solver/detail/SATResolver.cc:1202
 #, boost-format
@@ -4361,6 +4368,7 @@
 "the to be installed %1% requires '%2%', but this requirement cannot be "
 "provided"
 msgstr ""
+"?????????????????????????????? %1% ?????????????? '%2%', ???? ?????? 
???????????????????? ???? ?????????? ???????? ??????????????????"
 
 #: zypp/solver/detail/SATResolver.cc:1204
 msgid "deleted providers: "
@@ -4382,45 +4390,46 @@
 #: zypp/solver/detail/SATResolver.cc:1253
 #, boost-format
 msgid "%1% is not yet fully integrated into %2%."
-msgstr ""
+msgstr "%1% ?????? ???? ?????????????????? ???????????????????????? ?? %2%."
 
 #: zypp/solver/detail/SATResolver.cc:1254
 msgid ""
 "Typically you want to keep the PTF and choose to not install the maintenance "
 "patches."
 msgstr ""
+"???????????? ?????????? ???? ???????????????? ???????????????? PTF ?? 
???????????? ???? ?????????????????????????? ??????????????????????."
 
 #. translator: %1% is the name of a PTF.
 #: zypp/solver/detail/SATResolver.cc:1259
 #, boost-format
 msgid "The installed %1% blocks the desired action."
-msgstr ""
+msgstr "?????????????????????????? %1% ???? ?????????????????? 
?????????????????? ???????????????? ????????????????."
 
 #: zypp/solver/detail/SATResolver.cc:1260
 msgid "Typically you want to keep the PTF and choose to cancel the action."
-msgstr ""
+msgstr "???????????? ?????????? ???? ???????????? ???????????????? PTF ?? 
???????????? ???????????????? ????????????????."
 
 #: zypp/solver/detail/SATResolver.cc:1316
 #, boost-format
 msgid "remove lock to allow removal of %1%"
-msgstr ""
+msgstr "?????????? ???????????????????? ?????????? ?????????????????? 
???????????????? %1%"
 
 #: zypp/solver/detail/SATResolver.cc:1321
 #: zypp/solver/detail/SATResolver.cc:1359
 #, boost-format
 msgid "do not install %1%"
-msgstr ""
+msgstr "???? ?????????????????????????? %1%"
 
 #: zypp/solver/detail/SATResolver.cc:1338
 #: zypp/solver/detail/SATResolver.cc:1380
 #, boost-format
 msgid "keep %1%"
-msgstr ""
+msgstr "???????????????? %1%"
 
 #: zypp/solver/detail/SATResolver.cc:1343
 #, boost-format
 msgid "remove lock to allow installation of %1%"
-msgstr ""
+msgstr "?????????? ???????????????????? ?????????? ?????????????????? 
?????????????????? %1%"
 
 #: zypp/solver/detail/SATResolver.cc:1394
 #: zypp/solver/detail/SATResolver.cc:1415
@@ -4435,37 +4444,37 @@
 #: zypp/solver/detail/SATResolver.cc:1400
 #, boost-format
 msgid "do not ask to install a solvable providing %1%"
-msgstr ""
+msgstr "???? ?????????????? ???????????????????? ??????????????, 
?????????????? ?????????????????????????? %1%"
 
 #: zypp/solver/detail/SATResolver.cc:1422
 #, boost-format
 msgid "do not ask to delete all solvables providing %1%"
-msgstr ""
+msgstr "???? ?????????????? ?????????????? ?????? ??????????????, 
?????????????????????????????? %1%"
 
 #: zypp/solver/detail/SATResolver.cc:1435
 #, boost-format
 msgid "do not install most recent version of %1%"
-msgstr ""
+msgstr "???? ?????????????????????????? ?????????? ?????????????????? 
???????????? %1"
 
 #: zypp/solver/detail/SATResolver.cc:1456
 #, boost-format
 msgid "keep %1% despite the inferior architecture"
-msgstr ""
+msgstr "???????????????? %1% ???? ???????????? ???? ???????????? 
??????????????????????"
 
 #: zypp/solver/detail/SATResolver.cc:1461
 #, boost-format
 msgid "install %1% despite the inferior architecture"
-msgstr ""
+msgstr "???????????????????? %1% ???? ???????????? ???? ???????????? 
??????????????????????"
 
 #: zypp/solver/detail/SATResolver.cc:1470
 #, boost-format
 msgid "keep obsolete %1%"
-msgstr ""
+msgstr "???????????????? ???????????????????? %1%"
 
 #: zypp/solver/detail/SATResolver.cc:1475
 #, boost-format
 msgid "install %1% from excluded repository"
-msgstr ""
+msgstr "???????????????????? %1% ???? ???????????????????????? 
??????????????????????"
 
 #. translator: %1% is a package name
 #: zypp/solver/detail/SATResolver.cc:1489
@@ -4488,12 +4497,12 @@
 #: zypp/solver/detail/SATResolver.cc:1515
 #, boost-format
 msgid "downgrade of %1% to %2%"
-msgstr ""
+msgstr "???????????????? ???????????? %1% ???? %2%"
 
 #: zypp/solver/detail/SATResolver.cc:1522
 #, boost-format
 msgid "architecture change of %1% to %2%"
-msgstr ""
+msgstr "???????????????? ?????????????????????? %1% ???? %2%"
 
 #. FIXME? Actually .ident() must be eq. But the more verbose 'else' isn't bad 
either.
 #: zypp/solver/detail/SATResolver.cc:1533
@@ -4502,6 +4511,8 @@
 "install %1% (with vendor change)\n"
 "  %2%  -->  %3%"
 msgstr ""
+"???????????????????? %1% (???? ???????????? ????????????????????)\n"
+"  %2%  -->  %3%"
 
 #: zypp/solver/detail/SATResolver.cc:1538
 #, boost-format
@@ -4509,16 +4520,18 @@
 "install %1% from vendor %2%\n"
 "  replacing %3% from vendor %4%"
 msgstr ""
+"???????????????????? %1% ???? ???????????????????? %2%\n"
+"  ???????????????????? %3% ???? ???????????????????? %4%"
 
 #: zypp/solver/detail/SATResolver.cc:1547
 #, boost-format
 msgid "replacement of %1% with %2%"
-msgstr ""
+msgstr "???????????? %1% ???? %2%"
 
 #: zypp/solver/detail/SATResolver.cc:1558
 #, boost-format
 msgid "deinstallation of %1%"
-msgstr ""
+msgstr "???????????????? %1%"
 
 #: zypp/target/RpmPostTransCollector.cc:98
 #, boost-format
@@ -4567,7 +4580,7 @@
 
 #: zypp/target/TargetImpl.cc:2688
 msgid "Executing the transaction failed because of the following problems:"
-msgstr ""
+msgstr "???????????????????? ???? ?????????????? ????-???? ?????????????????? 
??????????????:"
 
 #. TranslatorExplanation after semicolon is error message
 #. TranslatorExplanation the colon is followed by an error message
@@ -4590,11 +4603,11 @@
 
 #: zypp/target/rpm/RpmDb.cc:1271
 msgid "Package header is not signed!"
-msgstr ""
+msgstr "?????????????????? ???????????? ???? ????????????????!"
 
 #: zypp/target/rpm/RpmDb.cc:1273
 msgid "Package payload is not signed!"
-msgstr ""
+msgstr "???????????????????? ???????????? ???? ??????????????????!"
 
 #. Translator: %s = name of an rpm package. A list of diffs follows
 #. this message.
@@ -4824,11 +4837,11 @@
 #: zypp-core/zyppng/io/forkspawnengine.cc:150
 #: zypp-core/zyppng/io/forkspawnengine.cc:392
 msgid "Invalid spawn arguments given."
-msgstr ""
+msgstr "???????????? ???????????????? ?????????????????? ??????????????."
 
 #: zypp-core/zyppng/io/forkspawnengine.cc:206
 msgid "Unable to create control pipe."
-msgstr ""
+msgstr "???????????????????? ?????????????? ???????????????????????????? 
??????????."
 
 #: zypp-core/zyppng/io/forkspawnengine.cc:272
 #, c-format, boost-format
@@ -4860,22 +4873,22 @@
 #: zypp-core/zyppng/io/forkspawnengine.cc:338
 #, c-format, boost-format
 msgid "Can't exec '%s', chdir failed (%s)."
-msgstr ""
+msgstr "???????????????????? ?????????????????? '%s', chdir ???? 
?????????????? (%s)."
 
 #: zypp-core/zyppng/io/forkspawnengine.cc:341
 #, c-format, boost-format
 msgid "Can't exec '%s', chroot failed (%s)."
-msgstr ""
+msgstr "???????????????????? ?????????????????? '%s', chroot ???? 
?????????????? (%s)."
 
 #: zypp-core/zyppng/io/forkspawnengine.cc:344
 #, c-format, boost-format
 msgid "Can't exec '%s', exec failed (%s)."
-msgstr ""
+msgstr "???????????????????? ?????????????????? '%s', exec ???? ???????????? 
(%s)."
 
 #: zypp-core/zyppng/io/forkspawnengine.cc:348
 #, c-format, boost-format
 msgid "Can't exec '%s', unexpected error."
-msgstr ""
+msgstr "???????????????????? ?????????????????? '%s': ?????????????????????? 
????????????."
 
 #: zypp-media/mediaexception.cc:33
 #, c-format, boost-format
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.29.6/po/sk.po new/libzypp-17.30.0/po/sk.po
--- old/libzypp-17.29.6/po/sk.po        2022-03-14 15:26:34.000000000 +0100
+++ new/libzypp-17.30.0/po/sk.po        2022-03-14 18:15:22.000000000 +0100
@@ -6,10 +6,10 @@
 "Project-Id-Version: libzypp\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-03-14 15:21+0100\n"
-"PO-Revision-Date: 2022-02-25 21:12+0000\n"
+"PO-Revision-Date: 2022-03-14 17:12+0000\n"
 "Last-Translator: Ferdinand Galko <galko.ferdin...@gmail.com>\n"
-"Language-Team: Slovak <https://l10n.opensuse.org/projects/libzypp/master/sk/";
-">\n"
+"Language-Team: Slovak <https://l10n.opensuse.org/projects/libzypp/master/sk/>"
+"\n"
 "Language: sk\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -4607,11 +4607,11 @@
 
 #: zypp/target/rpm/RpmDb.cc:1271
 msgid "Package header is not signed!"
-msgstr ""
+msgstr "Hlavi??ka bal??ka nie je podp??san??!"
 
 #: zypp/target/rpm/RpmDb.cc:1273
 msgid "Package payload is not signed!"
-msgstr ""
+msgstr "Pr??loha bal??ka nie je podp??san??!"
 
 #. Translator: %s = name of an rpm package. A list of diffs follows
 #. this message.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.29.6/po/zh_CN.po 
new/libzypp-17.30.0/po/zh_CN.po
--- old/libzypp-17.29.6/po/zh_CN.po     2022-03-14 15:26:34.000000000 +0100
+++ new/libzypp-17.30.0/po/zh_CN.po     2022-03-15 16:50:31.000000000 +0100
@@ -12,7 +12,7 @@
 "Project-Id-Version: YaST (@memory@)\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-03-14 15:21+0100\n"
-"PO-Revision-Date: 2022-02-28 12:12+0000\n"
+"PO-Revision-Date: 2022-03-15 15:12+0000\n"
 "Last-Translator: Marguerite Su <i...@marguerite.su>\n"
 "Language-Team: Chinese (China) <https://l10n.opensuse.org/projects/libzypp/";
 "master/zh_CN/>\n"
@@ -4573,11 +4573,11 @@
 
 #: zypp/target/rpm/RpmDb.cc:1271
 msgid "Package header is not signed!"
-msgstr ""
+msgstr "???????????????????????????"
 
 #: zypp/target/rpm/RpmDb.cc:1273
 msgid "Package payload is not signed!"
-msgstr ""
+msgstr "??????????????????????????????"
 
 #. Translator: %s = name of an rpm package. A list of diffs follows
 #. this message.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libzypp-17.29.6/tests/zyppng/io/AsyncDataSource_test.cc 
new/libzypp-17.30.0/tests/zyppng/io/AsyncDataSource_test.cc
--- old/libzypp-17.29.6/tests/zyppng/io/AsyncDataSource_test.cc 2021-08-26 
18:56:18.000000000 +0200
+++ new/libzypp-17.30.0/tests/zyppng/io/AsyncDataSource_test.cc 2022-03-21 
08:56:20.000000000 +0100
@@ -29,6 +29,7 @@
 
   BOOST_REQUIRE( dataSource->open( pipeFds[0] ) );
   BOOST_REQUIRE( dataSource->canRead() );
+  BOOST_REQUIRE( dataSource->readFdOpen() );
 
   dataSource->connectFunc( &zyppng::AsyncDataSource::sigReadyRead, [&](){
     std::cout <<"Got read"<<std::endl;
@@ -49,6 +50,8 @@
   loop->run();
   writer.join();
 
+  BOOST_REQUIRE ( !dataSource->readFdOpen() );
+
   ::close( pipeFds[0] );
   BOOST_REQUIRE_EQUAL( std::string_view( readData.data(), readData.size() ), 
text );
   BOOST_REQUIRE ( gotClosed );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.29.6/zypp/Resolver.cc 
new/libzypp-17.30.0/zypp/Resolver.cc
--- old/libzypp-17.29.6/zypp/Resolver.cc        2021-08-26 18:56:18.000000000 
+0200
+++ new/libzypp-17.30.0/zypp/Resolver.cc        2022-03-25 16:36:15.000000000 
+0100
@@ -50,6 +50,9 @@
   //   Resolver interface forwarded to implementation
   //
   ///////////////////////////////////////////////////////////////////
+  void Resolver::setDefaultSolverFlags( bool all_r )
+  { return _pimpl->setDefaultSolverFlags( all_r ); }
+
   sat::detail::CSolver * Resolver::get() const
   { return _pimpl->get(); }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.29.6/zypp/Resolver.h 
new/libzypp-17.30.0/zypp/Resolver.h
--- old/libzypp-17.29.6/zypp/Resolver.h 2022-01-05 14:06:20.000000000 +0100
+++ new/libzypp-17.30.0/zypp/Resolver.h 2022-03-25 16:36:15.000000000 +0100
@@ -51,6 +51,19 @@
     virtual ~Resolver();
 
     /**
+     * Reset all solver flags to the systems default (e.g. from zypp.conf).
+     *
+     * Call this to discard all settings you explicitly applied here. All flags
+     * are adjusted to follow the current systems default. If you want to reset
+     * just a specific flag, call its 'setDefault...' method.
+     *
+     * Calling the method with \a all_r is set to \c false, is used internally.
+     * It updates only those flags which were not explicitly changed. E.g after
+     * switching to a target which uses different defaults in its zypp.conf..
+     */
+    void setDefaultSolverFlags( bool all_r = true );
+
+    /**
      * Resolve package dependencies:
      *
      * Enter \ref systemVerification mode to monitor and repair dependencies
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.29.6/zypp/ZConfig.cc 
new/libzypp-17.30.0/zypp/ZConfig.cc
--- old/libzypp-17.29.6/zypp/ZConfig.cc 2021-12-21 18:21:22.000000000 +0100
+++ new/libzypp-17.30.0/zypp/ZConfig.cc 2022-03-25 16:36:15.000000000 +0100
@@ -21,6 +21,7 @@
 }
 #include <iostream>
 #include <fstream>
+#include <optional>
 #include <zypp/base/LogTools.h>
 #include <zypp/base/IOStream.h>
 #include <zypp-core/base/InputStream>
@@ -315,9 +316,85 @@
   {
     typedef std::set<std::string> MultiversionSpec;
 
+    /// Settings that follow a changed Target
+    struct TargetDefaults
+    {
+      TargetDefaults()
+      : solver_focus                        ( ResolverFocus::Default )
+      , solver_onlyRequires                 ( false )
+      , solver_allowVendorChange            ( false )
+      , solver_dupAllowDowngrade            ( true )
+      , solver_dupAllowNameChange           ( true )
+      , solver_dupAllowArchChange           ( true )
+      , solver_dupAllowVendorChange         ( true )
+      , solver_cleandepsOnRemove            ( false )
+      , solver_upgradeTestcasesToKeep       ( 2 )
+      , solverUpgradeRemoveDroppedPackages  ( true )
+      {}
+
+      bool consume( const std::string & entry, const std::string & value )
+      {
+        if ( entry == "solver.focus" )
+        {
+          fromString( value, solver_focus );
+        }
+        else if ( entry == "solver.onlyRequires" )
+        {
+          solver_onlyRequires.set( str::strToBool( value, solver_onlyRequires 
) );
+        }
+        else if ( entry == "solver.allowVendorChange" )
+        {
+          solver_allowVendorChange.set( str::strToBool( value, 
solver_allowVendorChange ) );
+        }
+        else if ( entry == "solver.dupAllowDowngrade" )
+        {
+          solver_dupAllowDowngrade.set( str::strToBool( value, 
solver_dupAllowDowngrade ) );
+        }
+        else if ( entry == "solver.dupAllowNameChange" )
+        {
+          solver_dupAllowNameChange.set( str::strToBool( value, 
solver_dupAllowNameChange ) );
+        }
+        else if ( entry == "solver.dupAllowArchChange" )
+        {
+          solver_dupAllowArchChange.set( str::strToBool( value, 
solver_dupAllowArchChange ) );
+        }
+        else if ( entry == "solver.dupAllowVendorChange" )
+        {
+          solver_dupAllowVendorChange.set( str::strToBool( value, 
solver_dupAllowVendorChange ) );
+        }
+        else if ( entry == "solver.cleandepsOnRemove" )
+        {
+          solver_cleandepsOnRemove.set( str::strToBool( value, 
solver_cleandepsOnRemove ) );
+        }
+        else if ( entry == "solver.upgradeTestcasesToKeep" )
+        {
+          solver_upgradeTestcasesToKeep.set( str::strtonum<unsigned>( value ) 
);
+        }
+        else if ( entry == "solver.upgradeRemoveDroppedPackages" )
+        {
+          solverUpgradeRemoveDroppedPackages.restoreToDefault( str::strToBool( 
value, solverUpgradeRemoveDroppedPackages.getDefault() ) );
+        }
+        else
+          return false;
+
+        return true;
+      }
+
+      ResolverFocus       solver_focus;
+      Option<bool>        solver_onlyRequires;
+      Option<bool>        solver_allowVendorChange;
+      Option<bool>        solver_dupAllowDowngrade;
+      Option<bool>        solver_dupAllowNameChange;
+      Option<bool>        solver_dupAllowArchChange;
+      Option<bool>        solver_dupAllowVendorChange;
+      Option<bool>        solver_cleandepsOnRemove;
+      Option<unsigned>    solver_upgradeTestcasesToKeep;
+      DefaultOption<bool> solverUpgradeRemoveDroppedPackages;
+    };
+
     public:
-      Impl( const Pathname & override_r = Pathname() )
-        : _parsedZyppConf              ( override_r )
+      Impl()
+        : _parsedZyppConf              ( _autodetectZyppConfPath() )
         , cfg_arch                     ( defaultSystemArchitecture() )
         , cfg_textLocale               ( defaultTextLocale() )
         , cfg_cache_path               { "/var/cache/zypp" }
@@ -336,36 +413,10 @@
         , gpgCheck                     ( true )
         , repoGpgCheck                 ( indeterminate )
         , pkgGpgCheck                  ( indeterminate )
-        , solver_focus                 ( ResolverFocus::Default )
-        , solver_onlyRequires          ( false )
-        , solver_allowVendorChange     ( false )
-        , solver_dupAllowDowngrade     ( true )
-        , solver_dupAllowNameChange    ( true )
-        , solver_dupAllowArchChange    ( true )
-        , solver_dupAllowVendorChange  ( true )
-        , solver_cleandepsOnRemove     ( false )
-        , solver_upgradeTestcasesToKeep        ( 2 )
-        , solverUpgradeRemoveDroppedPackages( true )
         , apply_locks_file             ( true )
         , pluginsPath                  ( "/usr/lib/zypp/plugins" )
       {
         MIL << "libzypp: " LIBZYPP_VERSION_STRING << endl;
-        // override_r has higest prio
-        // ZYPP_CONF might override /etc/zypp/zypp.conf
-        if ( _parsedZyppConf.empty() )
-        {
-          _parsedZyppConf = _autodetectZyppConfPath();
-        }
-        else
-        {
-          // Inject this into ZConfig. Be shure this is
-          // allocated via new.
-          // ma: override_r might not be needed anymore since the
-          //     Vendor_test is now able to initialize VendorAttr directly.
-          INT << "Reconfigure to " << _parsedZyppConf << endl;
-          ZConfig::instance()._pimpl.reset( this );
-        }
-
         if ( PathInfo(_parsedZyppConf).isExist() )
         {
           parser::IniDict dict( _parsedZyppConf );
@@ -388,6 +439,9 @@
               //DBG << (*it).first << "=" << (*it).second << endl;
               if ( section == "main" )
               {
+                if ( _initialTargetDefaults.consume( entry, value ) )
+                  continue;
+
                 if ( entry == "arch" )
                 {
                   Arch carch( value );
@@ -492,46 +546,6 @@
                 {
                   cfg_kernel_keep_spec = value;
                 }
-                else if ( entry == "solver.focus" )
-                {
-                  fromString( value, solver_focus );
-                }
-                else if ( entry == "solver.onlyRequires" )
-                {
-                  solver_onlyRequires.set( str::strToBool( value, 
solver_onlyRequires ) );
-                }
-                else if ( entry == "solver.allowVendorChange" )
-                {
-                  solver_allowVendorChange.set( str::strToBool( value, 
solver_allowVendorChange ) );
-                }
-                else if ( entry == "solver.dupAllowDowngrade" )
-                {
-                  solver_dupAllowDowngrade.set( str::strToBool( value, 
solver_dupAllowDowngrade ) );
-                }
-                else if ( entry == "solver.dupAllowNameChange" )
-                {
-                  solver_dupAllowNameChange.set( str::strToBool( value, 
solver_dupAllowNameChange ) );
-                }
-                else if ( entry == "solver.dupAllowArchChange" )
-                {
-                  solver_dupAllowArchChange.set( str::strToBool( value, 
solver_dupAllowArchChange ) );
-                }
-                else if ( entry == "solver.dupAllowVendorChange" )
-                {
-                  solver_dupAllowVendorChange.set( str::strToBool( value, 
solver_dupAllowVendorChange ) );
-                }
-                else if ( entry == "solver.cleandepsOnRemove" )
-                {
-                  solver_cleandepsOnRemove.set( str::strToBool( value, 
solver_cleandepsOnRemove ) );
-                }
-                else if ( entry == "solver.upgradeTestcasesToKeep" )
-                {
-                  solver_upgradeTestcasesToKeep.set( str::strtonum<unsigned>( 
value ) );
-                }
-                else if ( entry == "solver.upgradeRemoveDroppedPackages" )
-                {
-                  solverUpgradeRemoveDroppedPackages.restoreToDefault( 
str::strToBool( value, solverUpgradeRemoveDroppedPackages.getDefault() ) );
-                }
                 else if ( entry == "solver.checkSystemFile" )
                 {
                   solver_checkSystemFile = Pathname(value);
@@ -591,8 +605,6 @@
               }
             }
           }
-          //
-
         }
         else
         {
@@ -616,6 +628,30 @@
       ~Impl()
       {}
 
+      void notifyTargetChanged()
+      {
+        Pathname newRoot { _autodetectSystemRoot() };
+        MIL << "notifyTargetChanged (" << newRoot << ")" << endl;
+
+        if ( newRoot.emptyOrRoot() ) {
+          _currentTargetDefaults.reset(); // to initial settigns from /
+        }
+        else {
+          _currentTargetDefaults = TargetDefaults();
+
+          Pathname newConf { newRoot/_autodetectZyppConfPath() };
+          if ( PathInfo(newConf).isExist() ) {
+            parser::IniDict dict( newConf );
+            for ( const auto & [entry,value] : dict.entries( "main" ) ) {
+              (*_currentTargetDefaults).consume( entry, value );
+            }
+          }
+          else {
+            MIL << _parsedZyppConf << " not found, using defaults." << endl;
+          }
+        }
+      }
+
     public:
     /** Remember any parsed zypp.conf. */
     Pathname _parsedZyppConf;
@@ -660,17 +696,6 @@
     DefaultOption<TriBool>     repoGpgCheck;
     DefaultOption<TriBool>     pkgGpgCheck;
 
-    ResolverFocus      solver_focus;
-    Option<bool>       solver_onlyRequires;
-    Option<bool>       solver_allowVendorChange;
-    Option<bool>       solver_dupAllowDowngrade;
-    Option<bool>       solver_dupAllowNameChange;
-    Option<bool>       solver_dupAllowArchChange;
-    Option<bool>       solver_dupAllowVendorChange;
-    Option<bool>       solver_cleandepsOnRemove;
-    Option<unsigned>   solver_upgradeTestcasesToKeep;
-    DefaultOption<bool> solverUpgradeRemoveDroppedPackages;
-
     Pathname solver_checkSystemFile;
     Pathname solver_checkSystemFileDir;
 
@@ -690,6 +715,14 @@
     /* Other config singleton instances */
     MediaConfig &_mediaConf = MediaConfig::instance();
 
+
+  public:
+    const TargetDefaults & targetDefaults() const { return 
_currentTargetDefaults ? *_currentTargetDefaults : _initialTargetDefaults; }
+    TargetDefaults &       targetDefaults()       { return 
_currentTargetDefaults ? *_currentTargetDefaults : _initialTargetDefaults; }
+  private:
+    TargetDefaults                _initialTargetDefaults; ///< Initial 
TargetDefaults from /
+    std::optional<TargetDefaults> _currentTargetDefaults; ///< TargetDefaults 
while --root
+
   private:
     // HACK for bnc#906096: let pool re-evaluate multiversion spec
     // if target root changes. ZConfig returns data sensitive to
@@ -812,10 +845,12 @@
   ZConfig::~ZConfig( )
   {}
 
+  void ZConfig::notifyTargetChanged()
+  { return _pimpl->notifyTargetChanged(); }
+
   Pathname ZConfig::systemRoot() const
   { return _autodetectSystemRoot(); }
 
-
   Pathname ZConfig::repoManagerRoot() const
   {
     return ( _pimpl->cfg_repo_mgr_root_path.empty()
@@ -1074,21 +1109,21 @@
   void ZConfig::resetRepoGpgCheck()                    { 
_pimpl->repoGpgCheck.restoreToDefault(); }
   void ZConfig::resetPkgGpgCheck()                     { 
_pimpl->pkgGpgCheck.restoreToDefault(); }
 
-  ResolverFocus ZConfig::solver_focus() const          { return 
_pimpl->solver_focus; }
-
-  bool ZConfig::solver_onlyRequires() const
-  { return _pimpl->solver_onlyRequires; }
 
-  bool ZConfig::solver_allowVendorChange() const
-  { return _pimpl->solver_allowVendorChange; }
+  ResolverFocus ZConfig::solver_focus() const           { return 
_pimpl->targetDefaults().solver_focus; }
+  bool ZConfig::solver_onlyRequires() const             { return 
_pimpl->targetDefaults().solver_onlyRequires; }
+  bool ZConfig::solver_allowVendorChange() const        { return 
_pimpl->targetDefaults().solver_allowVendorChange; }
+  bool ZConfig::solver_dupAllowDowngrade() const        { return 
_pimpl->targetDefaults().solver_dupAllowDowngrade; }
+  bool ZConfig::solver_dupAllowNameChange() const       { return 
_pimpl->targetDefaults().solver_dupAllowNameChange; }
+  bool ZConfig::solver_dupAllowArchChange() const       { return 
_pimpl->targetDefaults().solver_dupAllowArchChange; }
+  bool ZConfig::solver_dupAllowVendorChange() const     { return 
_pimpl->targetDefaults().solver_dupAllowVendorChange; }
+  bool ZConfig::solver_cleandepsOnRemove() const        { return 
_pimpl->targetDefaults().solver_cleandepsOnRemove; }
+  unsigned ZConfig::solver_upgradeTestcasesToKeep() const { return 
_pimpl->targetDefaults().solver_upgradeTestcasesToKeep; }
+
+  bool ZConfig::solverUpgradeRemoveDroppedPackages() const          { return 
_pimpl->targetDefaults().solverUpgradeRemoveDroppedPackages; }
+  void ZConfig::setSolverUpgradeRemoveDroppedPackages( bool val_r ) { 
_pimpl->targetDefaults().solverUpgradeRemoveDroppedPackages.set( val_r ); }
+  void ZConfig::resetSolverUpgradeRemoveDroppedPackages()           { 
_pimpl->targetDefaults().solverUpgradeRemoveDroppedPackages.restoreToDefault(); 
}
 
-  bool ZConfig::solver_dupAllowDowngrade() const       { return 
_pimpl->solver_dupAllowDowngrade; }
-  bool ZConfig::solver_dupAllowNameChange() const      { return 
_pimpl->solver_dupAllowNameChange; }
-  bool ZConfig::solver_dupAllowArchChange() const      { return 
_pimpl->solver_dupAllowArchChange; }
-  bool ZConfig::solver_dupAllowVendorChange() const    { return 
_pimpl->solver_dupAllowVendorChange; }
-
-  bool ZConfig::solver_cleandepsOnRemove() const
-  { return _pimpl->solver_cleandepsOnRemove; }
 
   Pathname ZConfig::solver_checkSystemFile() const
   { return ( _pimpl->solver_checkSystemFile.empty()
@@ -1098,12 +1133,6 @@
   { return ( _pimpl->solver_checkSystemFileDir.empty()
       ? (configPath()/"systemCheck.d") : _pimpl->solver_checkSystemFileDir ); }
 
-  unsigned ZConfig::solver_upgradeTestcasesToKeep() const
-  { return _pimpl->solver_upgradeTestcasesToKeep; }
-
-  bool ZConfig::solverUpgradeRemoveDroppedPackages() const             { 
return _pimpl->solverUpgradeRemoveDroppedPackages; }
-  void ZConfig::setSolverUpgradeRemoveDroppedPackages( bool val_r )    { 
_pimpl->solverUpgradeRemoveDroppedPackages.set( val_r ); }
-  void ZConfig::resetSolverUpgradeRemoveDroppedPackages()              { 
_pimpl->solverUpgradeRemoveDroppedPackages.restoreToDefault(); }
 
   namespace
   {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.29.6/zypp/ZConfig.h 
new/libzypp-17.30.0/zypp/ZConfig.h
--- old/libzypp-17.29.6/zypp/ZConfig.h  2022-01-05 14:06:20.000000000 +0100
+++ new/libzypp-17.30.0/zypp/ZConfig.h  2022-03-25 16:36:15.000000000 +0100
@@ -550,6 +550,8 @@
       class Impl;
       /** Dtor */
       ~ZConfig();
+      void notifyTargetChanged();  ///< internal
+
   private:
       friend class RepoManager;
       /** The builtin config file value. */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.29.6/zypp/solver/detail/Resolver.cc 
new/libzypp-17.30.0/zypp/solver/detail/Resolver.cc
--- old/libzypp-17.29.6/zypp/solver/detail/Resolver.cc  2021-10-18 
12:19:44.000000000 +0200
+++ new/libzypp-17.30.0/zypp/solver/detail/Resolver.cc  2022-03-25 
17:18:36.000000000 +0100
@@ -79,13 +79,25 @@
     : _pool(pool)
     , _satResolver(NULL)
     , _poolchanged(_pool.serial() )
-    , _upgradeMode             (false)
-    , _updateMode              (false)
-    , _verifying               (false)
-    , _onlyRequires            ( ZConfig::instance().solver_onlyRequires() )
-    , _solveSrcPackages                ( false )
-    , _cleandepsOnRemove       ( 
ZConfig::instance().solver_cleandepsOnRemove() )
-    , _ignoreAlreadyRecommended        ( true )
+    , _upgradeMode              ( false )
+    , _updateMode               ( false )
+    , _verifying                ( false )
+    , _onlyRequires             ( ZConfig::instance().solver_onlyRequires() )
+    , _solveSrcPackages         ( false )
+    , _cleandepsOnRemove        ( 
ZConfig::instance().solver_cleandepsOnRemove() )
+    , _ignoreAlreadyRecommended ( true )
+    , _applyDefault_focus                ( true )
+    , _applyDefault_forceResolve         ( true )
+    , _applyDefault_cleandepsOnRemove    ( true )
+    , _applyDefault_onlyRequires         ( true )
+    , _applyDefault_allowDowngrade       ( true )
+    , _applyDefault_allowNameChange      ( true )
+    , _applyDefault_allowArchChange      ( true )
+    , _applyDefault_allowVendorChange    ( true )
+    , _applyDefault_dupAllowDowngrade    ( true )
+    , _applyDefault_dupAllowNameChange   ( true )
+    , _applyDefault_dupAllowArchChange   ( true )
+    , _applyDefault_dupAllowVendorChange ( true )
 {
     sat::Pool satPool( sat::Pool::instance() );
     _satResolver = new SATResolver(_pool, satPool.get());
@@ -100,44 +112,73 @@
 sat::detail::CSolver * Resolver::get() const
 { return _satResolver->get(); }
 
-//---------------------------------------------------------------------------
-// forward flags too SATResolver
 
-void Resolver::setFocus( ResolverFocus focus_r )       { _satResolver->_focus 
= ( focus_r == ResolverFocus::Default ) ? ZConfig::instance().solver_focus() : 
focus_r; }
-ResolverFocus Resolver::focus() const                  { return 
_satResolver->_focus; }
-
-#define ZOLV_FLAG_TRIBOOL( ZSETTER, ZGETTER, ZVARNAME, ZVARDEFAULT )           
        \
-    void Resolver::ZSETTER( TriBool state_r )                                  
        \
-    { _satResolver->ZVARNAME = indeterminate(state_r) ? ZVARDEFAULT : 
bool(state_r); } \
-    bool Resolver::ZGETTER() const                                             
        \
-    { return _satResolver->ZVARNAME; }                                         
        \
+void Resolver::setDefaultSolverFlags( bool all_r )
+{
+  MIL << "setDefaultSolverFlags all=" << all_r << endl;
 
-// NOTE: ZVARDEFAULT must be in sync with SATResolver ctor
-ZOLV_FLAG_TRIBOOL( setForceResolve,            forceResolve,           
_allowuninstall,        false )
+  if ( all_r || _applyDefault_focus ) setFocus( ResolverFocus::Default );
 
-ZOLV_FLAG_TRIBOOL( setAllowDowngrade,          allowDowngrade,         
_allowdowngrade,        false )
-ZOLV_FLAG_TRIBOOL( setAllowNameChange,         allowNameChange,        
_allownamechange,       true )  // bsc#1071466
-ZOLV_FLAG_TRIBOOL( setAllowArchChange,         allowArchChange,        
_allowarchchange,       false )
-ZOLV_FLAG_TRIBOOL( setAllowVendorChange,       allowVendorChange,      
_allowvendorchange,     ZConfig::instance().solver_allowVendorChange() )
-
-ZOLV_FLAG_TRIBOOL( dupSetAllowDowngrade,       dupAllowDowngrade,      
_dup_allowdowngrade,    ZConfig::instance().solver_dupAllowDowngrade() )
-ZOLV_FLAG_TRIBOOL( dupSetAllowNameChange,      dupAllowNameChange,     
_dup_allownamechange,   ZConfig::instance().solver_dupAllowNameChange() )
-ZOLV_FLAG_TRIBOOL( dupSetAllowArchChange,      dupAllowArchChange,     
_dup_allowarchchange,   ZConfig::instance().solver_dupAllowArchChange() )
-ZOLV_FLAG_TRIBOOL( dupSetAllowVendorChange,    dupAllowVendorChange,   
_dup_allowvendorchange, ZConfig::instance().solver_dupAllowVendorChange() )
+#define ZOLV_FLAG_DEFAULT( ZSETTER, ZGETTER )        \
+  if ( all_r || _applyDefault_##ZGETTER ) ZSETTER( indeterminate )
 
+  ZOLV_FLAG_DEFAULT( setForceResolve         ,forceResolve         );
+  ZOLV_FLAG_DEFAULT( setCleandepsOnRemove    ,cleandepsOnRemove    );
+  ZOLV_FLAG_DEFAULT( setOnlyRequires         ,onlyRequires         );
+  ZOLV_FLAG_DEFAULT( setAllowDowngrade       ,allowDowngrade       );
+  ZOLV_FLAG_DEFAULT( setAllowNameChange      ,allowNameChange      );
+  ZOLV_FLAG_DEFAULT( setAllowArchChange      ,allowArchChange      );
+  ZOLV_FLAG_DEFAULT( setAllowVendorChange    ,allowVendorChange    );
+  ZOLV_FLAG_DEFAULT( dupSetAllowDowngrade    ,dupAllowDowngrade    );
+  ZOLV_FLAG_DEFAULT( dupSetAllowNameChange   ,dupAllowNameChange   );
+  ZOLV_FLAG_DEFAULT( dupSetAllowArchChange   ,dupAllowArchChange   );
+  ZOLV_FLAG_DEFAULT( dupSetAllowVendorChange ,dupAllowVendorChange );
 #undef ZOLV_FLAG_TRIBOOL
+}
 //---------------------------------------------------------------------------
-
-void Resolver::setOnlyRequires( TriBool state_r )
-{
-  _onlyRequires = indeterminate(state_r) ? 
ZConfig::instance().solver_onlyRequires() : bool(state_r);
+// forward flags too SATResolver
+void Resolver::setFocus( ResolverFocus focus_r )       {
+  _applyDefault_focus = ( focus_r == ResolverFocus::Default );
+  _satResolver->_focus = _applyDefault_focus ? 
ZConfig::instance().solver_focus() : focus_r;
 }
+ResolverFocus Resolver::focus() const                  { return 
_satResolver->_focus; }
 
-void Resolver::setCleandepsOnRemove( TriBool state_r )
-{
-  _cleandepsOnRemove = indeterminate(state_r) ? 
ZConfig::instance().solver_cleandepsOnRemove() : bool(state_r);
-}
+#define ZOLV_FLAG_TRIBOOL( ZSETTER, ZGETTER, ZVARDEFAULT, ZVARNAME )           
        \
+    void Resolver::ZSETTER( TriBool state_r )                                  
        \
+    { _applyDefault_##ZGETTER = indeterminate(state_r);                        
                \
+      bool newval = _applyDefault_##ZGETTER ? ZVARDEFAULT : bool(state_r);     
        \
+      if ( ZVARNAME != newval ) {                                              
        \
+        DBG << #ZGETTER << ": changed from " << (bool)ZVARNAME << " to " << 
newval << endl;\
+        ZVARNAME = newval;                                                     
        \
+      }                                                                        
                \
+    }                                                                          
        \
+    bool Resolver::ZGETTER() const                                             
        \
+    { return ZVARNAME; }                                                       
        \
+
+// Flags stored here follow the naming convention,...
+// TODO: But why do we need them here? Probably too many layers and they can
+// go to _satResolver too.
+#define ZOLV_FLAG_LOCALTB( ZSETTER, ZGETTER, ZVARDEFAULT )                     
        \
+    ZOLV_FLAG_TRIBOOL( ZSETTER, ZGETTER, ZVARDEFAULT, _##ZGETTER )
+// Flags down in _satResolver don't (yet).
+#define ZOLV_FLAG_SATSOLV( ZSETTER, ZGETTER, ZVARDEFAULT, ZVARNAME )           
        \
+    ZOLV_FLAG_TRIBOOL( ZSETTER, ZGETTER, ZVARDEFAULT, _satResolver->ZVARNAME )
 
+// NOTE: ZVARDEFAULT must be in sync with SATResolver ctor
+ZOLV_FLAG_SATSOLV( setForceResolve         ,forceResolve         ,false        
                                     ,_allowuninstall        )
+ZOLV_FLAG_LOCALTB( setCleandepsOnRemove    ,cleandepsOnRemove    
,ZConfig::instance().solver_cleandepsOnRemove()    )
+ZOLV_FLAG_LOCALTB( setOnlyRequires         ,onlyRequires         
,ZConfig::instance().solver_onlyRequires()         )
+ZOLV_FLAG_SATSOLV( setAllowDowngrade       ,allowDowngrade       ,false        
                                     ,_allowdowngrade        )
+ZOLV_FLAG_SATSOLV( setAllowNameChange      ,allowNameChange      ,true 
/*bsc#1071466*/                              ,_allownamechange       )
+ZOLV_FLAG_SATSOLV( setAllowArchChange      ,allowArchChange      ,false        
                                     ,_allowarchchange       )
+ZOLV_FLAG_SATSOLV( setAllowVendorChange    ,allowVendorChange    
,ZConfig::instance().solver_allowVendorChange()    ,_allowvendorchange     )
+ZOLV_FLAG_SATSOLV( dupSetAllowDowngrade    ,dupAllowDowngrade    
,ZConfig::instance().solver_dupAllowDowngrade()    ,_dup_allowdowngrade    )
+ZOLV_FLAG_SATSOLV( dupSetAllowNameChange   ,dupAllowNameChange   
,ZConfig::instance().solver_dupAllowNameChange()   ,_dup_allownamechange   )
+ZOLV_FLAG_SATSOLV( dupSetAllowArchChange   ,dupAllowArchChange   
,ZConfig::instance().solver_dupAllowArchChange()   ,_dup_allowarchchange   )
+ZOLV_FLAG_SATSOLV( dupSetAllowVendorChange ,dupAllowVendorChange 
,ZConfig::instance().solver_dupAllowVendorChange() ,_dup_allowvendorchange )
+#undef ZOLV_FLAG_SATSOLV
+#undef ZOLV_FLAG_LOCALTB
+#undef ZOLV_FLAG_TRIBOOL
 //---------------------------------------------------------------------------
 
 ResPool Resolver::pool() const
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.29.6/zypp/solver/detail/Resolver.h 
new/libzypp-17.30.0/zypp/solver/detail/Resolver.h
--- old/libzypp-17.29.6/zypp/solver/detail/Resolver.h   2021-08-26 
18:56:18.000000000 +0200
+++ new/libzypp-17.30.0/zypp/solver/detail/Resolver.h   2022-03-25 
17:18:36.000000000 +0100
@@ -77,16 +77,32 @@
 
     /** \name Solver flags */
     //@{
-    bool _upgradeMode;            // Resolver has been called with doUpgrade
-    bool _updateMode;            // Resolver has been called with doUpdate
-    bool _verifying;              // The system will be checked
-    bool _onlyRequires;          // do install required resolvables only
-                                  // no recommended resolvables, language
-                                  // packages, hardware packages (modalias)
-    bool _solveSrcPackages;    // whether to generate solver jobs for selected 
source packges.
-    bool _cleandepsOnRemove;   // whether removing a package should also 
remove no longer needed requirements
+    bool _upgradeMode:1;              // Resolver has been called with 
doUpgrade
+    bool _updateMode:1;               // Resolver has been called with doUpdate
+    bool _verifying:1;                // The system will be checked
+    bool _onlyRequires:1;             // do install required resolvables only
+    bool _solveSrcPackages:1;         // whether to generate solver jobs for 
selected source packges.
+    bool _cleandepsOnRemove:1;        // whether removing a package should 
also remove no longer needed requirements
+    bool _ignoreAlreadyRecommended:1; // ignore recommended packages that have 
already been recommended by the installed packages
+    //@}
 
-    bool _ignoreAlreadyRecommended;   //ignore recommended packages that have 
already been recommended by the installed packages
+    /** \name applyDefaults
+     * Remember whether global default or explicit settings are applied to 
SATResolver.
+     * Global defaults may change with the Target, explicit settings not.
+     */
+    //@{
+    bool _applyDefault_focus:1;
+    bool _applyDefault_forceResolve:1;
+    bool _applyDefault_cleandepsOnRemove:1;
+    bool _applyDefault_onlyRequires:1;
+    bool _applyDefault_allowDowngrade:1;
+    bool _applyDefault_allowNameChange:1;
+    bool _applyDefault_allowArchChange:1;
+    bool _applyDefault_allowVendorChange:1;
+    bool _applyDefault_dupAllowDowngrade:1;
+    bool _applyDefault_dupAllowNameChange:1;
+    bool _applyDefault_dupAllowArchChange:1;
+    bool _applyDefault_dupAllowVendorChange:1;
     //@}
 
     // Additional QueueItems which has to be regarded by the solver
@@ -127,6 +143,17 @@
     ResPool pool() const;
     void setPool( const ResPool & pool ) { _pool = pool; }
 
+    /**
+     * Reset all solver flags to the systems default (e.g. from zypp.conf).
+     *
+     * The information whether a \ref SATResolver setting was explicitly set 
or follows
+     * the targets default (zypp.conf) is stored here in the \ref Resolver.
+     * If \a all_r is \c false, only those settings are updated, which still 
follow
+     * the target defaults (e.g. after the target has changed). Otherwise all 
explicit
+     * settings are discarded and the defaults are applied.
+     */
+    void setDefaultSolverFlags( bool all_r );
+
     void addUpgradeRepo( Repository repo_r )           { if ( repo_r && ! 
repo_r.isSystemRepo() ) _upgradeRepos.insert( repo_r ); }
     bool upgradingRepo( Repository repo_r ) const      { return( 
_upgradeRepos.find( repo_r ) != _upgradeRepos.end() ); }
     void removeUpgradeRepo( Repository repo_r )                { 
_upgradeRepos.erase( repo_r ); }
@@ -159,9 +186,6 @@
     bool ignoreAlreadyRecommended() const      { return 
_ignoreAlreadyRecommended; }
     void setIgnoreAlreadyRecommended( bool yesno_r ) { 
_ignoreAlreadyRecommended = yesno_r; }
 
-    bool onlyRequires () const                 { return _onlyRequires; }
-    void setOnlyRequires( TriBool state_r );
-
     bool isUpgradeMode() const                         { return _upgradeMode; 
}// Resolver has been called with doUpgrade
     void setUpgradeMode( bool yesno_r )                { _upgradeMode = 
yesno_r; }
 
@@ -173,9 +197,6 @@
 
     bool solveSrcPackages() const              { return _solveSrcPackages; }
     void setSolveSrcPackages( TriBool state_r )        { _solveSrcPackages = 
indeterminate(state_r) ? false : bool(state_r); }
-
-    bool cleandepsOnRemove() const             { return _cleandepsOnRemove; }
-    void setCleandepsOnRemove( TriBool state_r );
     //@}
 
     void setFocus( ResolverFocus focus_r );
@@ -185,18 +206,17 @@
     void ZSETTER( TriBool state_r );           \
     bool ZGETTER() const;                      \
 
-    ZOLV_FLAG_TRIBOOL( setForceResolve,                forceResolve )
-
-    ZOLV_FLAG_TRIBOOL( setAllowDowngrade,      allowDowngrade )
-    ZOLV_FLAG_TRIBOOL( setAllowNameChange,     allowNameChange )
-    ZOLV_FLAG_TRIBOOL( setAllowArchChange,     allowArchChange )
-    ZOLV_FLAG_TRIBOOL( setAllowVendorChange,   allowVendorChange )
-
-    ZOLV_FLAG_TRIBOOL( dupSetAllowDowngrade,   dupAllowDowngrade )
-    ZOLV_FLAG_TRIBOOL( dupSetAllowNameChange,  dupAllowNameChange )
-    ZOLV_FLAG_TRIBOOL( dupSetAllowArchChange,  dupAllowArchChange )
-    ZOLV_FLAG_TRIBOOL( dupSetAllowVendorChange,        dupAllowVendorChange )
-
+    ZOLV_FLAG_TRIBOOL( setForceResolve          ,forceResolve         )
+    ZOLV_FLAG_TRIBOOL( setCleandepsOnRemove     ,cleandepsOnRemove    )
+    ZOLV_FLAG_TRIBOOL( setOnlyRequires          ,onlyRequires         )
+    ZOLV_FLAG_TRIBOOL( setAllowDowngrade        ,allowDowngrade       )
+    ZOLV_FLAG_TRIBOOL( setAllowNameChange       ,allowNameChange      )
+    ZOLV_FLAG_TRIBOOL( setAllowArchChange       ,allowArchChange      )
+    ZOLV_FLAG_TRIBOOL( setAllowVendorChange     ,allowVendorChange    )
+    ZOLV_FLAG_TRIBOOL( dupSetAllowDowngrade     ,dupAllowDowngrade    )
+    ZOLV_FLAG_TRIBOOL( dupSetAllowNameChange    ,dupAllowNameChange   )
+    ZOLV_FLAG_TRIBOOL( dupSetAllowArchChange    ,dupAllowArchChange   )
+    ZOLV_FLAG_TRIBOOL( dupSetAllowVendorChange  ,dupAllowVendorChange )
 #undef ZOLV_FLAG_TRIBOOL
 
     ResolverProblemList problems() const;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.29.6/zypp/target/TargetImpl.cc 
new/libzypp-17.30.0/zypp/target/TargetImpl.cc
--- old/libzypp-17.29.6/zypp/target/TargetImpl.cc       2022-03-10 
15:31:24.000000000 +0100
+++ new/libzypp-17.30.0/zypp/target/TargetImpl.cc       2022-03-21 
08:56:20.000000000 +0100
@@ -2162,7 +2162,7 @@
           processDataFromScriptFd();
 
           // end of script is always sent by zypp-rpm, we need to wait for it 
to keep order
-          while ( scriptSource->canRead() && !gotEndOfScript ) {
+          while ( scriptSource->readFdOpen() && scriptSource->canRead() && 
!gotEndOfScript ) {
             // readyRead will trigger processDataFromScriptFd so no need to 
call it again
             // we still got nothing, lets wait for more
             scriptSource->waitForReadyRead( 100 );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.29.6/zypp/target/TargetImpl.h 
new/libzypp-17.30.0/zypp/target/TargetImpl.h
--- old/libzypp-17.29.6/zypp/target/TargetImpl.h        2021-10-18 
12:19:44.000000000 +0200
+++ new/libzypp-17.30.0/zypp/target/TargetImpl.h        2022-03-25 
16:36:15.000000000 +0100
@@ -134,9 +134,7 @@
 
       /** Overload to realize stream output. */
       virtual std::ostream & dumpOn( std::ostream & str ) const
-      {
-        return str << "TargetImpl";
-      }
+      { return str << "Target(" << root() << ")"; }
 
       /** The RPM database */
       rpm::RpmDb & rpm();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.29.6/zypp/zypp_detail/ZYppImpl.cc 
new/libzypp-17.30.0/zypp/zypp_detail/ZYppImpl.cc
--- old/libzypp-17.29.6/zypp/zypp_detail/ZYppImpl.cc    2021-10-18 
12:19:44.000000000 +0200
+++ new/libzypp-17.30.0/zypp/zypp_detail/ZYppImpl.cc    2022-03-25 
16:36:15.000000000 +0100
@@ -116,7 +116,14 @@
       if (! _target)
         ZYPP_THROW(Exception("Target not initialized."));
       return _target;
-     }
+    }
+
+    void ZYppImpl::changeTargetTo( Target_Ptr newtarget_r )
+    {
+      _target = newtarget_r;
+      ZConfig::instance().notifyTargetChanged();
+      resolver()->setDefaultSolverFlags( /*all_r*/false );  // just changed 
defaults
+    }
 
     void ZYppImpl::initializeTarget( const Pathname & root, bool doRebuild_r )
     {
@@ -126,11 +133,9 @@
               MIL << "Repeated call to initializeTarget()" << endl;
               return;
           }
-
           _target->unload();
-
       }
-      _target = new Target( root, doRebuild_r );
+      changeTargetTo( new Target( root, doRebuild_r ) );
       _target->buildCache();
     }
 
@@ -139,7 +144,7 @@
       if (_target)
           _target->unload();
 
-      _target = nullptr;
+      changeTargetTo( nullptr );
     }
 
     //------------------------------------------------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.29.6/zypp/zypp_detail/ZYppImpl.h 
new/libzypp-17.30.0/zypp/zypp_detail/ZYppImpl.h
--- old/libzypp-17.29.6/zypp/zypp_detail/ZYppImpl.h     2021-08-26 
18:56:18.000000000 +0200
+++ new/libzypp-17.30.0/zypp/zypp_detail/ZYppImpl.h     2022-03-25 
16:36:15.000000000 +0100
@@ -109,6 +109,10 @@
       void setPartitions(const DiskUsageCounter::MountPointSet &mp);
       DiskUsageCounter::MountPointSet getPartitions() const;
 
+    public:
+      /** Hook for actions to trigger if the Target changes 
(initialize/finish) */
+      void changeTargetTo( Target_Ptr newtarget_r );
+
     private:
       /** */
       Target_Ptr _target;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libzypp-17.29.6/zypp-core/zyppng/io/asyncdatasource.cpp 
new/libzypp-17.30.0/zypp-core/zyppng/io/asyncdatasource.cpp
--- old/libzypp-17.29.6/zypp-core/zyppng/io/asyncdatasource.cpp 2021-08-26 
18:56:18.000000000 +0200
+++ new/libzypp-17.30.0/zypp-core/zyppng/io/asyncdatasource.cpp 2022-03-21 
08:56:20.000000000 +0100
@@ -239,8 +239,8 @@
       gotRR = true;
     }) );
 
-    // we can only wait if we are open for reading
-    while ( canRead() && !gotRR ) {
+    // we can only wait if we are open for reading and still have a valid fd
+    while ( readFdOpen() && canRead() && !gotRR ) {
       int rEvents = 0;
       if ( EventDispatcher::waitForFdEvent( d->_readFd,  
AbstractEventSource::Read | AbstractEventSource::Error , rEvents, timeout ) ) {
         //simulate signal from read notifier
@@ -267,4 +267,9 @@
   {
     return d_func()->_sigBytesWritten;
   }
+
+  bool AsyncDataSource::readFdOpen() const
+  {
+    return ( d_func()->_readNotifier && d_func()->_readFd >= 0 );
+  }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libzypp-17.29.6/zypp-core/zyppng/io/asyncdatasource.h 
new/libzypp-17.30.0/zypp-core/zyppng/io/asyncdatasource.h
--- old/libzypp-17.29.6/zypp-core/zyppng/io/asyncdatasource.h   2021-12-10 
09:26:26.000000000 +0100
+++ new/libzypp-17.30.0/zypp-core/zyppng/io/asyncdatasource.h   2022-03-21 
08:56:20.000000000 +0100
@@ -54,6 +54,11 @@
      */
     SignalProxy< void (std::size_t)> sigBytesWritten ();
 
+    /*!
+     * Returns true as long as the read channel was not closed ( e.g. 
sigReadFdClosed was emitted )
+     */
+    bool readFdOpen () const;
+
   protected:
     AsyncDataSource (  );
     off_t writeData(const char *data, off_t count) override;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-17.29.6/zypp-media/mount.cc 
new/libzypp-17.30.0/zypp-media/mount.cc
--- old/libzypp-17.29.6/zypp-media/mount.cc     2022-03-11 19:53:13.000000000 
+0100
+++ new/libzypp-17.30.0/zypp-media/mount.cc     2022-03-15 16:50:31.000000000 
+0100
@@ -122,7 +122,7 @@
   unsigned numRetry = 2;
   do {
     if ( doRetry ) {
-      if ( --numRetry ) {
+      if ( numRetry-- ) {
         WAR << "umount " << path << ": " << exitCode << ": " << err << " - 
retrying in 1 sec." << endl;
         sleep( 1 );
         err.clear();

Reply via email to