On Sun, Mar 03, 2019 at 05:04:59PM +0100, SZEDER Gábor wrote: > > > - && chains in test helper functions; we must make sure that the > > > tracing is restored even in case of a failure. > > Actually, the && chain is not really an issue, because we can simply > break the && chain at the very end: > > test_func () { > { disable_tracing ; } 2>/dev/null 4>&2 > do this && > do that > restore_tracing > } > > and make restore_tracing exit with $? (like you did above in pop_x()). Yeah, good point. > > Yeah, there is no "goto out" to help give a common exit point from the > > function. You could probably do it with a wrapper, like: > > Yeah, the wrapper works. > There are only a few test helper functions with multiple 'return' > statements, and refactoring them to have a single 'return $ret' at the > end worked, too. Yeah, that might be less sneaky than this wrapper business. Or we could just do a few basic wrappers. The non-portable bit in my wrapper suggestion was the renaming of the old function. But if we accept just: real_foo() { ... do stuff with multiple returns ... } disable_function_tracing real_foo foo then that is pretty trivial to do with an eval. It does disallow your "wrap all functions at once", but I think that is OK. We might want to only do a subset anyway. > We should also be careful and don't switch on tracing when returning > from test helper functions invoked outside of tests, e.g. > 'test_create_repo' while initializing the trash directory or > 'test_set_port' while sourcing a daemon-specific lib. Yeah, it would probably make sense in the "push" half to check that we are actually tracing at that moment. > On a mostly unrelated note, but I just noticed it while playing around > with this: 't0000'-basic.sh' runs its internal tests with $SHELL_PATH > instead of $TEST_SHELL_PATH. I'm not sure whether that's right or > wrong. I'd say probably wrong, though it likely doesn't matter that much in practice. -Peff