)]}'
{
  "commit": "df570c7a65663164568d1f2d346ea4c1182dd8ed",
  "tree": "bf1d1b9c8a5c72798b50ff776e30115101d8a1c2",
  "parents": [
    "12c78e6028971ce526b8076baa5f94439337c16b"
  ],
  "author": {
    "name": "Jonathan Amsterdam",
    "email": "jba@google.com",
    "time": "Fri Nov 03 18:04:40 2023 -0400"
  },
  "committer": {
    "name": "Jonathan Amsterdam",
    "email": "jba@google.com",
    "time": "Mon Nov 13 15:11:35 2023 +0000"
  },
  "message": "_content/doc: convert most release notes to Markdown\n\nAdd Markdown conversions for all release notes except the first to the\ncontent for the go.dev site. Because the site prefers .md to .html\nfiles, these files will be served even though the .html files still\nexist.\n\nThis CL omits the first release notes file (go1.html) because it is a\ntemplate. None of the others need template expansion. We will convert\ngo1.html in a followup CL.\n\nThe goal in this CL was to minimize diffs. We compared the rendering\nof each Markdown file with the live site using cmd/screentest\nto make sure there were no major differences. Later CLs can make\nchanges to the formatting, for example by replacing definition\nlists with level-4 headings, but we found it was easier to find\nserious conversion issues this way.\n\nTo get the diffs, run\n    go run ./cmd/screentest ./cmd/screentest/testdata/relnotes.txt\nfrom the repo root.\n\nSome diffs still exist:\n\n- The Markdown renderer used by the site replaces characters like \"\n  and \u0027 with their \"fancier\" forms outside of code. The original HTML\n  files used the ASCII characters. Most of the differences are due\n  to this.\n\n- The Markdown renderer expands tabs to 4 spaces, where the browser\n  (at least Chrome) formats them with 8. The difference can be\n  seen in code blocks (which look better in Markdown).\n\n- In go1.18, there is a very slight bit of extra space in the HTML\n  that produces what looks like a large diff. There was no easy\n  way to fix the spacing.\n\nWe converted the files using a slightly modified version of\ngithub.com/rsc/tmp/html2md. We then sometimes hand-edited the files\nwhen it didn\u0027t seem worth writing code to address the diff.\n\nWe had to change the \"id\" attribute for a heading in seven places,\nbecause the attribute value contained a \u0027/\u0027 or \u0027 \u0027 and the Markdown\nrenderer doesn\u0027t accept \"id\"s with those characters. We replaced the\noffending characters with \u0027_\u0027. The change means that if we deploy\nfrom this CL, links to those headings will break temporarily. Fixing\nthis now would involve forking all or a part of Goldmark, and we have\na better solution. Russ Cox has written a much smaller and simpler\nmarkdown parser and renderer. Since we control it, we can have it\nhandle \"id\" attributes with spaces and slashes. We will replace\nGoldmark with it eventually. But first we have to replace definition\nlists with headings, because Russ\u0027s parser doesn\u0027t handle definition\nlists. (None of the other Markdown files on the site use them.)\n\nFor reference, the altered heading IDs are:\n\n- go1.13: crypto/ed25519\n- go1.14: hash/maphash\n- go1.15: time/tzdata\n- go1.17: runtime/cgo\n- go1.17: go run\n- go1.18: debug/buildinfo\n- go1.20: crypto/ecdh\n\nChange-Id: Ibe02c8af2604908c3fd47a9674a4df01b128ff57\nReviewed-on: https://go-review.googlesource.com/c/website/+/539755\nTryBot-Result: Gopher Robot \u003cgobot@golang.org\u003e\nRun-TryBot: Jonathan Amsterdam \u003cjba@google.com\u003e\nReviewed-by: Heschi Kreinick \u003cheschi@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "57138c8dd9045caf54c77a7776735c012810540d",
      "new_mode": 33188,
      "new_path": "_content/doc/go1.1.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "03ea3fc76b452c592143771f3b33bc9b55193739",
      "new_mode": 33188,
      "new_path": "_content/doc/go1.10.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ab3548b452cd0b3eec9a14d7bdeab1af4f843970",
      "new_mode": 33188,
      "new_path": "_content/doc/go1.11.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6253a12ee3d0d52660bfe03463b23f79f1970e5d",
      "new_mode": 33188,
      "new_path": "_content/doc/go1.12.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ad907015edc26faac3d221b777ddef5b3945ea6d",
      "new_mode": 33188,
      "new_path": "_content/doc/go1.13.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1a0c852ffecc972cba3a001c0f5bbb5be48ef3ba",
      "new_mode": 33188,
      "new_path": "_content/doc/go1.14.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c3604e2a4bd150f33df9c16336205450d6dab0c0",
      "new_mode": 33188,
      "new_path": "_content/doc/go1.15.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "74e33b496ef97491f97a57dc18090cfcbfd288f6",
      "new_mode": 33188,
      "new_path": "_content/doc/go1.16.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a14710887c35c52fe02960753ba87b17bf08c113",
      "new_mode": 33188,
      "new_path": "_content/doc/go1.17.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "951c9596a2903dc77f9232a2b5a2776b6075fd90",
      "new_mode": 33188,
      "new_path": "_content/doc/go1.18.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6e505cd55e6c707b9647141a80a75c2732203bf0",
      "new_mode": 33188,
      "new_path": "_content/doc/go1.19.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "05c8593d52fe3ae82bc9985f71bcbeee267c2627",
      "new_mode": 33188,
      "new_path": "_content/doc/go1.2.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5229808345502797d0218625571d37d8a508922b",
      "new_mode": 33188,
      "new_path": "_content/doc/go1.20.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "58d425df37f7b6d877bcb4aca5c184afdaff7603",
      "new_mode": 33188,
      "new_path": "_content/doc/go1.21.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f4a112ff18c45233bfa89d43afed1ebcb5650711",
      "new_mode": 33188,
      "new_path": "_content/doc/go1.3.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "75024d30772aedaf87f2f4be9aa03c8534981a7a",
      "new_mode": 33188,
      "new_path": "_content/doc/go1.4.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ec52f176588efb47948d2c5b30f226c92c605f23",
      "new_mode": 33188,
      "new_path": "_content/doc/go1.5.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "62a6555c3e9da5ec83a393515bc9ade8fb541a74",
      "new_mode": 33188,
      "new_path": "_content/doc/go1.6.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c9cf7a8503745c1cceecc1b5d0bdf247b53dd3af",
      "new_mode": 33188,
      "new_path": "_content/doc/go1.7.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d064f7e89b580381177b13437dd6b428ce1e5193",
      "new_mode": 33188,
      "new_path": "_content/doc/go1.8.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4b0879c49f4f9557b6a93873100e31d16d24be73",
      "new_mode": 33188,
      "new_path": "_content/doc/go1.9.md"
    }
  ]
}
