-------------------------------------------------------------------
+Fri Sep 17 10:41:56 CEST 2021 - ma@suse.de
+
+- Make sure to keep states alives while transitioning
+ (bsc#1190199)
+- May set techpreview variables for testing in /etc/zypp/zypp.conf.
+ If environment variables are unhandy one may enable the desired
+ techpreview in zypp.conf as well:
+ [main]
+ techpreview.ZYPP_SINGLE_RPMTRANS=1
+ techpreview.ZYPP_MEDIANETWORK=1
+- version 17.28.4 (22)
+
+-------------------------------------------------------------------
Fri Sep 3 14:34:19 CEST 2021 - ma@suse.de
- CMake/spec: Add option to force SINGLE_RPMTRANS as default for
"Project-Id-Version: YaST (@memory@)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-07-26 11:04+0200\n"
-"PO-Revision-Date: 2021-06-17 15:58+0000\n"
+"PO-Revision-Date: 2021-09-04 16:11+0000\n"
"Last-Translator: Kukuh Syafaat <syafaatkukuh@gmail.com>\n"
"Language-Team: Indonesian <https://l10n.opensuse.org/projects/libzypp/master/"
"id/>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.6.2\n"
+"X-Generator: Weblate 4.7.1\n"
#: zypp/CountryCode.cc:50
msgid "Unknown country: "
"install %1% from vendor %2%\n"
" replacing %3% from vendor %4%"
msgstr ""
+"pasang %1% dari vendor %2%\n"
+" menggantikan %3% dari vendor %4%"
#: zypp/solver/detail/SATResolver.cc:1507
#, boost-format
#: zypp/target/TargetImpl.cc:2619
msgid "Executing the transaction failed because of the following problems:"
-msgstr ""
+msgstr "Mengeksekusi transaksi gagal karena masalah berikut:"
#. TranslatorExplanation after semicolon is error message
#. TranslatorExplanation the colon is followed by an error message
#: zypp-core/zyppng/io/forkspawnengine.cc:111
#: zypp-core/zyppng/io/forkspawnengine.cc:359
msgid "Invalid spawn arguments given."
-msgstr ""
+msgstr "Argumen spawn yang diberikan tidak valid."
#: zypp-core/zyppng/io/forkspawnengine.cc:174
msgid "Unable to create control pipe."
-msgstr ""
+msgstr "Tidak dapat membuat pipa kontrol."
#: zypp-core/zyppng/io/forkspawnengine.cc:240
#, c-format, boost-format
#: zypp-core/zyppng/io/forkspawnengine.cc:306
#, c-format, boost-format
msgid "Can't exec '%s', chdir failed (%s)."
-msgstr ""
+msgstr "Tak bisa eksekusi '%s', chdir gagal (%s)."
#: zypp-core/zyppng/io/forkspawnengine.cc:309
#, c-format, boost-format
msgid "Can't exec '%s', chroot failed (%s)."
-msgstr ""
+msgstr "Tak bisa eksekusi '%s', chroot gagal (%s)."
#: zypp-core/zyppng/io/forkspawnengine.cc:312
#, c-format, boost-format
msgid "Can't exec '%s', exec failed (%s)."
-msgstr ""
+msgstr "Tak bisa eksekusi '%s', eksekusi gagal (%s)."
#: zypp-core/zyppng/io/forkspawnengine.cc:316
#, c-format, boost-format
msgid "Can't exec '%s', unexpected error."
-msgstr ""
+msgstr "Tak bisa eksekusi '%s', kesalahan tak terduga."
#~ msgid "%s does not belong to a distupgrade repository"
#~ msgstr "%s bukan milik repositori distupgrade"
static constexpr bool isFinal = State::isFinal;
void enter( ) {
- return _ptr->enter( );
+ // keep the pointer around, for we might transition to the next state immediately
+ auto keepAlive = _ptr;
+ return keepAlive->enter( );
}
void exit( ) {
- return _ptr->exit( );
+ // keep the pointer around, for we might transition to the next state immediately
+ auto keepAlive = _ptr;
+ return keepAlive->exit( );
}
std::shared_ptr<State> wrappedState () {
if ( _state.index() == 0 || _isInFinalState ) {
_previousState.reset();
_isInFinalState = false;
+ _emittedFinalSig = false;
enterState( FState( static_cast<Derived &>(*this) ) );
}
}
// handle final state things
if constexpr ( NewState::isFinal ) {
_isInFinalState = true;
+ _emittedFinalSig = false;
}
// let the outside world know whats going on
// call enter on the state as the last thing to do, it might emit a transition event right away
std::get< std::decay_t<NewState> >( _state ).enter();
- if ( _isInFinalState )
+ // emit the final signal, but only if it was not already emitted by a subsequent transition
+ if ( _isInFinalState && !_emittedFinalSig ) {
+ _emittedFinalSig = true;
_sigFinished.emit();
+ }
+
}
template <typename State, typename Transition>
private:
bool _isInFinalState = false;
+ bool _emittedFinalSig = false; //< Flag to make sure the finished signals is only emitted once
Signal <void ( StateId )> _sigStateChanged;
Signal <void ()> _sigFinished;
StateSet _state = _InitialState();