bits-807 released with these changes:

  • Support a configurable set of operations in batch mode

    The batch option in bits-cfg.txt now takes a list of keywords for different batch-mode operations. "test" runs the full BITS testsuite as the previous batch mode did. The new "acpi" and "smbios" keywords dump all structures of the corresponding type.

  • Add a Python implementation of readline

    Implements most of the standard line-editing keybindings, as well as history, and a stub completer interface for compatibility with the Python readline module.

    Also add a new "pager" module with context managers to enable and disable the pager, needed as part of readline (which handles the characters<->screen mapping itself).

  • Use the new Python readline as the default readline for raw_input()

    Note that Python will only invoke this readline from raw_input() if sys.stdin and sys.stdout refer to the screen directly. By default, BITS captures stdout to the log, causing Python to ignore this readline and use its own, which does not support line editing, echo characters to the screen, or respond to the enter key (use ctrl-J). To use this readline implementation, wrap the code invoking raw_input in a "with redirect.nolog():" context manager block.

  • Include the Python debugger, pdb, and supporting modules bdb and cmd.

    Try using"statement") or pdb.runeval("expression") from the command line. If running as part of a function, pass globals=globals() and locals=locals() to use the current context rather than the default top-level context of the Python interpreter.

    You will need to wrap invocations of pdb in "with redirect.nolog():" to allow pdb to use readline.

  • Add menu entry to dump all ACPI tables directly to the log

  • Python API changes:

    • New context managers redirect.nolog(), redirect.logonly(), and redirect.log() to select whether output goes to the screen only, log only, or both. Sending output only to the log makes sense for large info dumps, such as decoding every structure of a certain type. Sending output only to the screen makes sense for status and progress messages.

    • Add a bits.pyfs_add_static helper to simplify defining static files in the (python) filesystem. bits.pyfs_add allows adding arbitrary dynamically generated files, but the new pyfs_add_static simplifies the case where the file will never need to change, allowing the caller to supply the contents as a string, rather than a pair of callbacks.

  • Update to ACPICA version 20130418

  • Fix -Wmaybe-uninitialized warnings, which show up by default with newer versions of GCC, and which GRUB's use of -Werror turns into build failures.

    • Turn off -Wmaybe-uninitialized for Python
    • Backport upstream GRUB patch to avoid -Wmaybe-uninitialized warnings
  • Fix a bug that broke batch mode.