)]}'
{
  "commit": "e30422e49f54170374cf38941207bc8a4f2de463",
  "tree": "45c2f18c7d48817bd9519ea533a3280d8bdb724b",
  "parents": [
    "081d235ae2ec99e3ef2b8b7847ee1930896e77cf"
  ],
  "author": {
    "name": "Michael Brown",
    "email": "mcb30@ipxe.org",
    "time": "Thu Jul 16 15:01:57 2026 +0100"
  },
  "committer": {
    "name": "Michael Brown",
    "email": "mcb30@ipxe.org",
    "time": "Thu Jul 16 16:33:45 2026 +0100"
  },
  "message": "[dmesg] Add an in-memory ring buffer console\n\nAdd a trivial ring buffer console that can be used to extract the most\nrecent 8kB of (non-UI) console output as the ${dmesg} setting.\n\nThis allows previous console output to be displayed after the screen\nhas been cleared, such as when a background picture has been loaded.\nFor example:\n\n    #!ipxe\n    console -p http://boot.ipxe.org/ipxe.png\n    show -q dmesg\n\nIt also allows console output to be captured and sent as part of an\nHTTP POST, to allow for remote diagnostics.  For example:\n\n    #!ipxe\n    params\n    param dmesg ${dmesg:base64}\n    imgfetch http://192.168.0.1/api/diags##params\n\nThe recorded console output may be cleared if necessary by clearing\nthe setting:\n\n    clear builtin/dmesg\n\nThe name ${dmesg} is chosen as being unlikely to collide with any\nexisting variables used in end-user scripts.  A separate \"dmesg\"\ncommand is not provided, but could easily be added if useful.\n\nNote that iPXE supports recursive variable expansion in shell\ncommands.  Typing an interactive command such as \"echo ${dmesg}\" or\n\"param dmesg ${dmesg}\" is therefore a great way to exercise the memory\nallocator to the point of exhaustion.  Use \"show -q dmesg\" to show the\nring buffer contents.\n\nSigned-off-by: Michael Brown \u003cmcb30@ipxe.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "563f85d674f691a32830269ad05ac6b16f4749d0",
      "old_mode": 33188,
      "old_path": "src/config/config.c",
      "new_id": "1995b8cd466d1f524ce6823319fe4dc23b2c7887",
      "new_mode": 33188,
      "new_path": "src/config/config.c"
    },
    {
      "type": "modify",
      "old_id": "60d7aa838e75d43611e0f3174d7b991ce9ff027d",
      "old_mode": 33188,
      "old_path": "src/config/console.h",
      "new_id": "a6285481d6dfb3ebf2595b18698363130930f643",
      "new_mode": 33188,
      "new_path": "src/config/console.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "66f9607f3faaa805bfcec86db23ee3eeb72430b6",
      "new_mode": 33188,
      "new_path": "src/core/dmesg.c"
    },
    {
      "type": "modify",
      "old_id": "035358009a788c4bd666afe3530e52a0dd41fda6",
      "old_mode": 33188,
      "old_path": "src/include/ipxe/errfile.h",
      "new_id": "6faf79d3263a4ca15b8d904d3b801a1372abf11e",
      "new_mode": 33188,
      "new_path": "src/include/ipxe/errfile.h"
    }
  ]
}
