Version 0.8.0 The machine interface was completely overhauled. Please read the [migration guide](https://tbot.tools/migration.html) for more info. == Added == - `@tbot.with_lab`, `@tbot.with_uboot`, and `@tbot.with_linux` decorators to make writing testcase much simpler - `linux.RedirStdout(f)` & `linux.RedirStderr(f)`: Redirect stdout and stderr symbols - `Machine.init()` hook to call custom code after the machine was initialized. This can be used, for example, to init network manually in U-Boot. - `tc.shell.check_for_tool()` testcase - `tbot.skip()`: Skip a testcase - `Machine.clone()`: Attempt creating a copy of a machine. The two copies allow parallel interaction with the same host. == Changed == - `linux.BuildMachine` is now a mixin called `linux.Builder` - `linux.LabHost` is now a mixin called `linux.Lab` - `linux.LinuxMachine` should be replaced by `linux.LinuxShell` - `LabHost.new_channel()` was removed in favor of `LinuxShell.open_channel()`. `open_channel()` consumes the machine it is called on which means the equivalent to `new_channel()` now is: with mach.clone() as cl: chan = cl.open_channel("telnet", "192.0.2.1") == Removed == - `exec0(stdout=f)`: Redirection should be done using `RedirStdout`. - `linux.Env(var)`: Environment-Variable substitution is hard to control. It is much easier to just use `mach.env(var)`. == Fixed == - `Path.__fspath__()` erroneously returning a result, even though the contract that is assumed with this method cannot be upheld by tbot.