)]}'
{
  "commit": "563fac5f3b416fcb1e6f8d4976d814fa5dda6ef2",
  "tree": "fd0ef0e649bc87097b2727de14bf51df0fe89c65",
  "parents": [
    "6874fb8ce24e2768d6adecd339f37cd4dd037f84"
  ],
  "author": {
    "name": "Nicolas Hillegeer",
    "email": "aktau@google.com",
    "time": "Mon Mar 02 05:58:29 2026 -0800"
  },
  "committer": {
    "name": "Gopher Robot",
    "email": "gobot@golang.org",
    "time": "Mon Mar 09 09:19:41 2026 -0700"
  },
  "message": "internal/gocore: move core of runReachable to Process.Reachable\n\n...and turn it into an iteration so that we can later offer the option\nto printe more (all) paths.\n\nHaving Process.Reachable also makes it easier to write a test for some\nupcoming functionality (defer/panic as roots). In all, it seems like a\nnicer separation of concerns.\n\nI tested the main functionality by comparing the output pre- and\npost-this CL. It looks identical:\n\n    $ ~/gob/go/debug-readonly/viewcore  ~/tmp/viewcore/core.server_test.3024 --exe ~/tmp/viewcore/server_test --base ~/src/server reachable 203cbbf287e8 2\u003e/dev/null\n    rpc.NewStreamImpl.func1\n    rpc.(*eventQueue).pop.q →\n    203cbc0dba40 rpc.eventQueue .list.ptr →\n    203cbbf287e8 *rpc.clientEvent\n\nThe output of the test is the more similar to the way I\u0027d like to show\nthis output in the end:\n\n    gocore_test.go:475: [goroutine]\n    gocore_test.go:481: 0x55a36e513aa8 main.main.func1.gowrap7\n    gocore_test.go:481: 0x55a36e512ed4 main.complicatedRetain\n    gocore_test.go:512:         unk     [SP+0x108] 0xc000047fa0 (unsafe.Pointer) → 0xc00009a0a0 (main.myObj)\n    gocore_test.go:475: [goroutine]\n    gocore_test.go:481: 0x55a36e513aa8 main.main.func1.gowrap7\n    gocore_test.go:481: 0x55a36e512ed4 main.complicatedRetain\n    gocore_test.go:512:         unk     [SP+0xe8] 0xc000047f80 (unsafe.Pointer) → 0xc00009a0a0 (main.myObj)\n    gocore_test.go:475: [goroutine]\n    gocore_test.go:481: 0x55a36e513aa8 main.main.func1.gowrap7\n    gocore_test.go:481: 0x55a36e512ed4 main.complicatedRetain\n    gocore_test.go:512:         unk     [SP+0xc8] 0xc000047f60 (unsafe.Pointer) → 0xc00009a0a0 (main.myObj)\n    gocore_test.go:475: [goroutine]\n    gocore_test.go:481: 0x55a36e513aa8 main.main.func1.gowrap7\n    gocore_test.go:481: 0x55a36e512ed4 main.complicatedRetain\n    gocore_test.go:512:         unk     [SP+0x50] 0xc000047ee8 (unsafe.Pointer) → 0xc00009a0a0 (main.myObj)\n    gocore_test.go:475: [goroutine]\n    gocore_test.go:481: 0x55a36e513aa8 main.main.func1.gowrap7\n    gocore_test.go:481: 0x55a36e512ed4 main.complicatedRetain\n    gocore_test.go:512:         ref     [SP+0x120] 0xc000047fb8 (*main.myObj) → 0xc00009a0a0 (main.myObj)\n    gocore_test.go:475: [goroutine]\n    gocore_test.go:481: 0x55a36e513b08 main.main.func1.gowrap6\n    gocore_test.go:481: 0x55a36e5135c8 main.hardAliasRetain\n    gocore_test.go:512:         otherRef        [SP+0x20] 0xc000047790 (*main.myObj) → 0xc00009a0a0 (main.myObj)\n    gocore_test.go:475: [goroutine]\n    gocore_test.go:481: 0x55a36e513b08 main.main.func1.gowrap6\n    gocore_test.go:481: 0x55a36e5135c8 main.hardAliasRetain\n    gocore_test.go:512:         ref     [SP+0x48] 0xc0000477b8 (*main.myObj) → 0xc00009a0a0 (main.myObj)\n    gocore_test.go:475: [goroutine]\n    gocore_test.go:481: 0x55a36e513b68 main.main.func1.gowrap5\n    gocore_test.go:481: 0x55a36e5134d7 main.aliasRetain\n    gocore_test.go:512:         otherRef        [SP+0x30] 0xc000046fb8 (*main.myObj) → 0xc00009a0a0 (main.myObj)\n    gocore_test.go:475: [goroutine]\n    gocore_test.go:481: 0x55a36e513b68 main.main.func1.gowrap5\n    gocore_test.go:481: 0x55a36e5134d7 main.aliasRetain\n    gocore_test.go:512:         ref     [SP+0x30] 0xc000046fb8 (*main.myObj) → 0xc00009a0a0 (main.myObj)\n    gocore_test.go:475: [goroutine]\n    gocore_test.go:481: 0x55a36e513bc8 main.main.func1.gowrap4\n    gocore_test.go:481: 0x55a36e513347 main.hardRenameRetain\n    gocore_test.go:512:         otherRef        [SP+0x18] 0xc000046798 (*main.myObj) → 0xc00009a0a0 (main.myObj)\n    gocore_test.go:475: [goroutine]\n    gocore_test.go:481: 0x55a36e513c28 main.main.func1.gowrap3\n    gocore_test.go:481: 0x55a36e513273 main.renameRetain\n    gocore_test.go:512:         otherRef        [SP+0x30] 0xc000045fb8 (*main.myObj) → 0xc00009a0a0 (main.myObj)\n    gocore_test.go:475: [goroutine]\n    gocore_test.go:481: 0x55a36e513c28 main.main.func1.gowrap3\n    gocore_test.go:481: 0x55a36e513273 main.renameRetain\n    gocore_test.go:512:         ref     [SP+0x30] 0xc000045fb8 (*main.myObj) → 0xc00009a0a0 (main.myObj)\n    gocore_test.go:475: [goroutine]\n    gocore_test.go:481: 0x55a36e513c88 main.main.func1.gowrap2\n    gocore_test.go:481: 0x55a36e5133f3 main.multiFrame1Retain\n    gocore_test.go:481: 0x55a36e513433 main.multiFrame2Retain\n    gocore_test.go:481: 0x55a36e513473 main.multiFrame3Retain\n    gocore_test.go:481: 0x55a36e5131b3 main.retain\n    gocore_test.go:512:         ref     [SP+0x30] 0xc000045740 (*main.myObj) → 0xc00009a0a0 (main.myObj)\n    gocore_test.go:475: [goroutine]\n    gocore_test.go:481: 0x55a36e513ce8 main.main.func1.gowrap1\n    gocore_test.go:481: 0x55a36e5131b3 main.retain\n    gocore_test.go:512:         ref     [SP+0x30] 0xc000044fb8 (*main.myObj) → 0xc00009a0a0 (main.myObj)\n    gocore_test.go:473: [global]\n    gocore_test.go:512:         main.gPlainMyObj         0x55a36e65d080 (*main.myObj) → 0xc00009a0a0 (main.myObj)\n\nChange-Id: I953e39fc0c3357c7c636144e80c42a6fd2d737b2\nReviewed-on: https://go-review.googlesource.com/c/debug/+/750481\nReviewed-by: Keith Randall \u003ckhr@golang.org\u003e\nAuto-Submit: Nicolas Hillegeer \u003caktau@google.com\u003e\nReviewed-by: Keith Randall \u003ckhr@google.com\u003e\nLUCI-TryBot-Result: Go LUCI \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5180514f7dd048b768ca70faf71f73d849fa39c4",
      "old_mode": 33188,
      "old_path": "cmd/viewcore/html.go",
      "new_id": "d67e20c0f8fe496a93484de1be0e9a6b920a06da",
      "new_mode": 33188,
      "new_path": "cmd/viewcore/html.go"
    },
    {
      "type": "modify",
      "old_id": "8386507ac3fcab26b3a2a3e7c2e617f1228ac311",
      "old_mode": 33188,
      "old_path": "cmd/viewcore/main.go",
      "new_id": "024458926e6b24d59d36580c25a272a4d219ac5b",
      "new_mode": 33188,
      "new_path": "cmd/viewcore/main.go"
    },
    {
      "type": "modify",
      "old_id": "268fbd7026d9cdc740452a38f819eff1118537df",
      "old_mode": 33188,
      "old_path": "internal/gocore/gocore_test.go",
      "new_id": "fc4d09185cf886d60c415f186567c46f5bc639d1",
      "new_mode": 33188,
      "new_path": "internal/gocore/gocore_test.go"
    },
    {
      "type": "modify",
      "old_id": "bb611b2494a4af25d8983bde7c3e5292f6646777",
      "old_mode": 33188,
      "old_path": "internal/gocore/reverse.go",
      "new_id": "43e0e50dac2c84c7f51a543cb8325c83a11e3b2b",
      "new_mode": 33188,
      "new_path": "internal/gocore/reverse.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2496298ff27204926a4d73da5b969e25a5343a69",
      "new_mode": 33188,
      "new_path": "internal/gocore/testdata/testprogs/reachable.go"
    }
  ]
}
