)]}'
{
  "log": [
    {
      "commit": "57c41f4cb9849a2e83cdbd7644b31e6d7a7e2586",
      "tree": "3d545e152d9f1386c187dcdc77bc83803741164f",
      "parents": [
        "feac9063ea7ba9c2e2333eab878b9e7dc605566c",
        "db9db176c6a74af65e1002af042768191acb141b"
      ],
      "author": {
        "name": "Sergi Mansilla",
        "email": "sergi@edgeimpulse.com",
        "time": "Thu Jun 05 16:18:22 2025"
      },
      "committer": {
        "name": "Sergi Mansilla",
        "email": "sergi@edgeimpulse.com",
        "time": "Thu Jun 05 16:18:22 2025"
      },
      "message": "Merge branch \u0027iambus-master\u0027\n"
    },
    {
      "commit": "feac9063ea7ba9c2e2333eab878b9e7dc605566c",
      "tree": "8071bc5b903a4666bfd681b193647f5e429d3088",
      "parents": [
        "5b0b94c5c0d3d261e044521f7f46479ef869cf76",
        "4ebce9caa45902d8ca5f63a242d53e1e5c6072d3"
      ],
      "author": {
        "name": "Sergi Mansilla",
        "email": "sergi.mansilla@gmail.com",
        "time": "Thu Jun 05 15:58:42 2025"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 05 15:58:42 2025"
      },
      "message": "Merge pull request #139 from michaelcheah/fix_newline_diffs_colored_text\n\nFix colored display for diffs with newlines"
    },
    {
      "commit": "5b0b94c5c0d3d261e044521f7f46479ef869cf76",
      "tree": "cd36bfa06c14e7c7a8bd1bd2367f7cf66d4178d7",
      "parents": [
        "facec63e78161d6d31a9c552a679e2287e925949",
        "a674b3095807a3679f154c5a4a6df738aeffdfdf"
      ],
      "author": {
        "name": "Sergi Mansilla",
        "email": "sergi.mansilla@gmail.com",
        "time": "Wed Aug 02 21:04:24 2023"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 02 21:04:24 2023"
      },
      "message": "Merge pull request #136 from kdarkhan/master\n\nFix line diff by using rune index without a separator"
    },
    {
      "commit": "4ebce9caa45902d8ca5f63a242d53e1e5c6072d3",
      "tree": "4d2b624b90d38cde942c32886d9b734d3653ada1",
      "parents": [
        "facec63e78161d6d31a9c552a679e2287e925949"
      ],
      "author": {
        "name": "michaelcheah",
        "email": "20640150+michaelcheah@users.noreply.github.com",
        "time": "Fri Mar 24 19:37:54 2023"
      },
      "committer": {
        "name": "michaelcheah",
        "email": "20640150+michaelcheah@users.noreply.github.com",
        "time": "Fri Mar 24 19:37:54 2023"
      },
      "message": "fix: colored display for diffs with newlines\n"
    },
    {
      "commit": "a674b3095807a3679f154c5a4a6df738aeffdfdf",
      "tree": "cd36bfa06c14e7c7a8bd1bd2367f7cf66d4178d7",
      "parents": [
        "74798f5aa5d5c9720e7ff8895fee08e19db05cc7"
      ],
      "author": {
        "name": "Darkhan Kubigenov",
        "email": "darkhanu@gmail.com",
        "time": "Sat Jan 21 23:12:39 2023"
      },
      "committer": {
        "name": "Darkhan Kubigenov",
        "email": "darkhanu@gmail.com",
        "time": "Mon Jan 23 23:37:06 2023"
      },
      "message": "Fix line diff by using runes without separators\n\n[The suggested approach](https://github.com/google/diff-match-patch/wiki/Line-or-Word-Diffs#line-mode\n) for doing line level diffing is the following set of steps:\n\n1. `ti1, ti2, linesIdx \u003d DiffLinesToChars(t1, t2)`\n2. `diffs \u003d DiffMain(ti1, ti2)`\n3. `DiffCharsToLines(diff, linesIdx)`\n\nThe original implementation in `google/diff-match-patch` uses\nunicode codepoints for storing indices in `ti1` and `ti2` joined by an empty string.\nCurrent implementation in this repo stores them as integers joined by a\ncomma. While this implementation makes `ti1` and `ti2` more readable, it\nintroduces bugs when trying to rely on it when doing line level diffing\nwith `DiffMain`. The root cause of the issue is that an integer line\nindex might span more than one character/rune, and `DiffMain` can assume\nthat two different lines having the same index prefix match partially. For\nexample, indices 123 and 129 will have partial match `12`. In that\nexample, the diff will show lines 3 and 9 which is not correct. A simple\nfailing test case demonstrating this issue is available at\n`TestDiffPartialLineIndex`.\n\nIn this PR I am adjusting the algorithm to use the same approach as in\n[diff-match-patch](https://github.com/google/diff-match-patch/blob/62f2e689f498f9c92dbc588c58750addec9b1654/javascript/diff_match_patch_uncompressed.js#L508-L510\n) by storing each line index as a rune.\nWhile a rune in Golang is a type alias to uint32, not every uint32\ncan be a valid rune. During string to rune slice conversion invalid runes will\nbe replaced with `utf.RuneError`.\n\nThe integer to rune generation logic is based on the table in https://en.wikipedia.org/wiki/UTF-8#Encoding\n\nThe first 127 lines will work the fastest as they are represented as a\nsingle bytes. Higher numbers are represented as 2-4 bytes.\n\nIn addition to that, the range `U+D800 - U+DFFF` contains\n[invalid codepoints](https://en.wikipedia.org/wiki/UTF-8#Invalid_sequences_and_error_handling).\nand all codepoints higher or equal to `0xD800` are incremented by\n`0xDFFF - 0xD800`.\n\nThe maximum representable integer using this approach is 1\u0027112\u0027060.\nThis improves on Javascript implementation which currently\n[bails out](https://github.com/google/diff-match-patch/blob/62f2e689f498f9c92dbc588c58750addec9b1654/javascript/diff_match_patch_uncompressed.js#L503-L505\n) when files have more than 65535 lines.\n"
    },
    {
      "commit": "74798f5aa5d5c9720e7ff8895fee08e19db05cc7",
      "tree": "c7a5a1b1e9923a535267d6c607520537e3a2aaca",
      "parents": [
        "facec63e78161d6d31a9c552a679e2287e925949"
      ],
      "author": {
        "name": "Darkhan Kubigenov",
        "email": "darkhanu@gmail.com",
        "time": "Sun Jan 22 01:50:45 2023"
      },
      "committer": {
        "name": "Darkhan Kubigenov",
        "email": "darkhanu@gmail.com",
        "time": "Sun Jan 22 02:00:12 2023"
      },
      "message": "Add a failing line diff test case\n\nCurrent implementation produces wrong result because\nit calls `DiffMain` on the following 2 arguments:\n\n* `1,2,3,4,5,6,7,8,9,10`\n* `1,2,3,4,5,6,7,8,9,11`\n\nThis numbers represent indices into the lines array.\nThe algorithm finds that equal part of those\nstrings is `1,2,3,4,5,6,7,8,9,1` and which is followed\nby `Delete 0` and `Insert `1`.\n"
    },
    {
      "commit": "db9db176c6a74af65e1002af042768191acb141b",
      "tree": "10c144a25683497f7011a0c07a3262bcdbd2325a",
      "parents": [
        "ff0d34ba8093cd989afb5ead57451452a16df340",
        "facec63e78161d6d31a9c552a679e2287e925949"
      ],
      "author": {
        "name": "Sergi Mansilla",
        "email": "sergi.mansilla@gmail.com",
        "time": "Fri Jan 13 09:10:20 2023"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jan 13 09:10:20 2023"
      },
      "message": "Merge branch \u0027master\u0027 into master"
    },
    {
      "commit": "facec63e78161d6d31a9c552a679e2287e925949",
      "tree": "76ff9cc8c13aff6815c21edbf1edcb32612e2141",
      "parents": [
        "11fe19cdde05dce9a988e81b8f2ae96b51be37b1",
        "ca1db569574d5f4009033235fb6b9246208b0187"
      ],
      "author": {
        "name": "Sergi Mansilla",
        "email": "sergi.mansilla@gmail.com",
        "time": "Fri Jan 13 08:54:48 2023"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jan 13 08:54:48 2023"
      },
      "message": "Merge pull request #130 from moyrne/master\n\nfix bug: CVE-2019-11254"
    },
    {
      "commit": "11fe19cdde05dce9a988e81b8f2ae96b51be37b1",
      "tree": "ff47dfda21c1518a3caf10004d9a36e5f02c699c",
      "parents": [
        "849d7ebc9716f43ec1295e9bc00e5c8cffef3d9f",
        "6dbe13c91e8e382b53e2cc8e8146fa6172fefec4"
      ],
      "author": {
        "name": "Sergi Mansilla",
        "email": "sergi.mansilla@gmail.com",
        "time": "Fri Jan 13 08:52:20 2023"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jan 13 08:52:20 2023"
      },
      "message": "Merge pull request #135 from nrnrk/fix_use_common_line_hash\n\nUse common lineHash to share indice between text1 and text2 for correct line diffs"
    },
    {
      "commit": "6dbe13c91e8e382b53e2cc8e8146fa6172fefec4",
      "tree": "ff47dfda21c1518a3caf10004d9a36e5f02c699c",
      "parents": [
        "849d7ebc9716f43ec1295e9bc00e5c8cffef3d9f"
      ],
      "author": {
        "name": "nrnrk",
        "email": "noriki6t@gmail.com",
        "time": "Sat Oct 15 16:17:33 2022"
      },
      "committer": {
        "name": "nrnrk",
        "email": "noriki6t@gmail.com",
        "time": "Sat Oct 15 16:17:33 2022"
      },
      "message": "fix: use common lineHash to share indice between text1 and text2\n\nUse common cache of line contents between two texts in `DiffLinesToChars` to get line diffs correctly.\nIn some cases, line diffs cannot be retrieved correctly in the standard way (https://github.com/google/diff-match-patch/wiki/Line-or-Word-Diffs#line-mode).\nIn the below case, we failed to get line diffs correctly before this fix.\n\n```go:main.go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/sergi/go-diff/diffmatchpatch\"\n)\n\nconst (\n\ttext1 \u003d `hoge:\n  step11:\n  - arrayitem1\n  - arrayitem2\n  step12:\n    step21: hoge\n    step22: -93\nfuga: flatitem\n`\n\ttext2 \u003d `hoge:\n  step11:\n  - arrayitem4\n  - arrayitem2\n  - arrayitem3\n  step12:\n    step21: hoge\n    step22: -92\nfuga: flatitem\n`\n)\n\nfunc main() {\n\tdmp :\u003d diffmatchpatch.New()\n\ta, b, c :\u003d dmp.DiffLinesToChars(text1, text2)\n\tdiffs :\u003d dmp.DiffMain(a, b, false)\n\tdiffs \u003d dmp.DiffCharsToLines(diffs, c)\n\t// diffs \u003d dmp.DiffCleanupSemantic(diffs)\n\tfmt.Println(diffs)\n}\n```\n\n```text:output\n[{Insert hoge:\n  step11:\nhoge:\n} {Equal hoge:\n} {Insert hoge:\n} {Equal   step11:\n} {Insert hoge:\n} {Equal   - arrayitem1\n} {Insert hoge:\n} {Equal   - arrayitem2\n} {Insert hoge:\n} {Equal   step12:\n} {Insert hoge:\n} {Equal     step21: hoge\n} {Insert hoge:\n} {Equal     step22: -93\n} {Delete fuga: flatitem\n}]\n```\n\nNote: This fix corresponds to a javascript implementation.\n(ref: https://github.com/google/diff-match-patch/blob/62f2e689f498f9c92dbc588c58750addec9b1654/javascript/diff_match_patch_uncompressed.js#L466)\n"
    },
    {
      "commit": "ff0d34ba8093cd989afb5ead57451452a16df340",
      "tree": "7846ffae10792195743290a5dcc6ce561658a22e",
      "parents": [
        "3403a1642ff93712b699ebd52ecf3c53c2b08107"
      ],
      "author": {
        "name": "Boyu Guo",
        "email": "iambus@gmail.com",
        "time": "Mon Sep 26 17:17:47 2022"
      },
      "committer": {
        "name": "Boyu Guo",
        "email": "iambus@gmail.com",
        "time": "Mon Sep 26 17:31:19 2022"
      },
      "message": "skip invalid unicode code point to fix TestMassiveRuneDiffConversion\n"
    },
    {
      "commit": "3403a1642ff93712b699ebd52ecf3c53c2b08107",
      "tree": "f353ed1a1a9beb67b1364bf25aedae20f7d0fb1d",
      "parents": [
        "3202072ef65ab911f13d0871c304e4789a8b42ea"
      ],
      "author": {
        "name": "Boyu Guo",
        "email": "iambus@gmail.com",
        "time": "Fri Sep 23 02:44:03 2022"
      },
      "committer": {
        "name": "Boyu Guo",
        "email": "iambus@gmail.com",
        "time": "Fri Sep 23 02:44:03 2022"
      },
      "message": "update tests\n"
    },
    {
      "commit": "ca1db569574d5f4009033235fb6b9246208b0187",
      "tree": "34ba38656f059ba4121f658427cd28ca7844011e",
      "parents": [
        "849d7ebc9716f43ec1295e9bc00e5c8cffef3d9f"
      ],
      "author": {
        "name": "moyrn",
        "email": "Chengpin430124",
        "time": "Tue Mar 01 01:18:52 2022"
      },
      "committer": {
        "name": "moyrn",
        "email": "Chengpin430124",
        "time": "Tue Mar 01 01:18:52 2022"
      },
      "message": "fix bug: CVE-2019-11254\nupgrade gopkg.in/yaml.v2\n"
    },
    {
      "commit": "3202072ef65ab911f13d0871c304e4789a8b42ea",
      "tree": "50aead4de7a89692e54db368eca4b0029c281bbb",
      "parents": [
        "849d7ebc9716f43ec1295e9bc00e5c8cffef3d9f"
      ],
      "author": {
        "name": "iambus",
        "email": "iambus@gmail.com",
        "time": "Mon Dec 13 09:02:34 2021"
      },
      "committer": {
        "name": "Boyu Guo",
        "email": "iambus@gmail.com",
        "time": "Mon Dec 13 09:10:35 2021"
      },
      "message": "fix panic: runtime error: slice bounds out of range\n"
    },
    {
      "commit": "849d7ebc9716f43ec1295e9bc00e5c8cffef3d9f",
      "tree": "8e708250c97bc1553818933f793152a79a1084fc",
      "parents": [
        "0a651d56613f9de4bed8b9c4769b776ef168bfca",
        "d9add3706e553487a983bc9aa527f64641814f91"
      ],
      "author": {
        "name": "Sergi Mansilla",
        "email": "sergi.mansilla@gmail.com",
        "time": "Tue Mar 30 20:52:17 2021"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 30 20:52:17 2021"
      },
      "message": "Merge pull request #113 from sreekanth370/master\n\nAdded power support for the travis.yml file with ppc64le. and update go versions for package: go-diff"
    },
    {
      "commit": "0a651d56613f9de4bed8b9c4769b776ef168bfca",
      "tree": "fabcd3c10c75b0ab23b87194198b5b7f708a26ae",
      "parents": [
        "f9beae76ac64a6f92ee8b73e1c96c71ef01a8d49"
      ],
      "author": {
        "name": "Sergi Mansilla",
        "email": "sergi@sergimansilla.com",
        "time": "Tue Dec 01 23:41:48 2020"
      },
      "committer": {
        "name": "Sergi Mansilla",
        "email": "sergi@sergimansilla.com",
        "time": "Tue Dec 01 23:41:48 2020"
      },
      "message": "Optimize diffLinesToStringsMunge to use uint32 instead of string, and add extra test for rune conversion. Fixes #89.\n"
    },
    {
      "commit": "f9beae76ac64a6f92ee8b73e1c96c71ef01a8d49",
      "tree": "166b0648dec19dc246a461028855f4e9468c3699",
      "parents": [
        "f6725a1f5e74d1ee92deba732fc8954a7c42e9e4"
      ],
      "author": {
        "name": "r-pai",
        "email": "rpai.tvm@gmail.com",
        "time": "Thu Nov 21 05:49:22 2019"
      },
      "committer": {
        "name": "Sergi Mansilla",
        "email": "sergi@sergimansilla.com",
        "time": "Tue Dec 01 22:45:47 2020"
      },
      "message": "Index out of range panic in DiffCharsToLines on large JSON diff\n"
    },
    {
      "commit": "f6725a1f5e74d1ee92deba732fc8954a7c42e9e4",
      "tree": "0224640391400fe3b3a7c9d4c0685ab43837fd0f",
      "parents": [
        "db1b095f5e7c905e196ff6bfd56189a41aa76309"
      ],
      "author": {
        "name": "r-pai",
        "email": "rpai.tvm@gmail.com",
        "time": "Wed Nov 20 10:06:27 2019"
      },
      "committer": {
        "name": "Sergi Mansilla",
        "email": "sergi@sergimansilla.com",
        "time": "Tue Dec 01 22:45:47 2020"
      },
      "message": "Index out of range panic in DiffCharsToLines on large JSON diff\n"
    },
    {
      "commit": "db1b095f5e7c905e196ff6bfd56189a41aa76309",
      "tree": "2d618a561267017a1cc4a449adedd09c563ca440",
      "parents": [
        "df97e07ae48671b6889c9a97b1a3dbb98a935cf9"
      ],
      "author": {
        "name": "r-pai",
        "email": "rpai.tvm@gmail.com",
        "time": "Wed Nov 20 09:44:27 2019"
      },
      "committer": {
        "name": "Sergi Mansilla",
        "email": "sergi@sergimansilla.com",
        "time": "Tue Dec 01 22:45:47 2020"
      },
      "message": "Index out of range panic in DiffCharsToLines on large JSON diff\n"
    },
    {
      "commit": "d9add3706e553487a983bc9aa527f64641814f91",
      "tree": "186edf45b937ac228005db7afda2197937ea55ab",
      "parents": [
        "138eea2e273f745cfa6dfcc9b52b3a794c68e856"
      ],
      "author": {
        "name": "sreekanth370",
        "email": "70704621+sreekanth370@users.noreply.github.com",
        "time": "Mon Nov 09 07:15:05 2020"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 09 07:15:05 2020"
      },
      "message": "test"
    },
    {
      "commit": "138eea2e273f745cfa6dfcc9b52b3a794c68e856",
      "tree": "010d8058dd78da9eb06e93928f5007518124cdce",
      "parents": [
        "2fe9485b73b5b355b2e3bd1c07c8f9c8aadb9f42"
      ],
      "author": {
        "name": "sreekanth370",
        "email": "70704621+sreekanth370@users.noreply.github.com",
        "time": "Mon Nov 09 07:10:08 2020"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 09 07:10:08 2020"
      },
      "message": "test"
    },
    {
      "commit": "2fe9485b73b5b355b2e3bd1c07c8f9c8aadb9f42",
      "tree": "70d6de9518926f6e0d46fcb929c7333c1d311be6",
      "parents": [
        "df97e07ae48671b6889c9a97b1a3dbb98a935cf9"
      ],
      "author": {
        "name": "sreekanth370",
        "email": "70704621+sreekanth370@users.noreply.github.com",
        "time": "Tue Oct 27 09:59:59 2020"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 27 09:59:59 2020"
      },
      "message": "test"
    },
    {
      "commit": "df97e07ae48671b6889c9a97b1a3dbb98a935cf9",
      "tree": "ae82e74c03cde8fdfe5eb836059de55557258909",
      "parents": [
        "a87b24427817f61c91e3b2bb475c57879a4cdddc",
        "e013302309a82837ec242c5b47fe6b28bdd12202"
      ],
      "author": {
        "name": "Sergi Mansilla",
        "email": "sergi.mansilla@gmail.com",
        "time": "Tue Oct 20 11:09:20 2020"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 11:09:20 2020"
      },
      "message": "Merge pull request #108 from pakohan/master\n\nfix DiffCleanupSemantic"
    },
    {
      "commit": "a87b24427817f61c91e3b2bb475c57879a4cdddc",
      "tree": "ab37db9778aad7c1ee5892943e692301b025057d",
      "parents": [
        "58c5cb1602ee9676b5d3590d782bedde80706fcc",
        "c38fc1a2bd79c534328e7451db6e708d7cccd972"
      ],
      "author": {
        "name": "Sergi Mansilla",
        "email": "sergi.mansilla@gmail.com",
        "time": "Tue Oct 20 11:06:35 2020"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 11:06:35 2020"
      },
      "message": "Merge pull request #112 from eclipseo/fix_conversion_int_to_string\n\nConvert int to string using rune()"
    },
    {
      "commit": "c38fc1a2bd79c534328e7451db6e708d7cccd972",
      "tree": "ab37db9778aad7c1ee5892943e692301b025057d",
      "parents": [
        "58c5cb1602ee9676b5d3590d782bedde80706fcc"
      ],
      "author": {
        "name": "Robert-André Mauchin",
        "email": "zebob.m@gmail.com",
        "time": "Fri Aug 07 23:13:39 2020"
      },
      "committer": {
        "name": "Robert-André Mauchin",
        "email": "zebob.m@gmail.com",
        "time": "Fri Aug 07 23:29:10 2020"
      },
      "message": "Convert int to string using rune()\n\nSee https://github.com/golang/go/issues/32479\n\nFix #111.\n\nSigned-off-by: Robert-André Mauchin \u003czebob.m@gmail.com\u003e\n"
    },
    {
      "commit": "e013302309a82837ec242c5b47fe6b28bdd12202",
      "tree": "f2d991985fadd103c1d37bae4886464f4df11adc",
      "parents": [
        "c6eeac79a2c459994fa7a1f5834fad9ebac3c231"
      ],
      "author": {
        "name": "Patrick Kohan",
        "email": "patrick.kohan@gmail.com",
        "time": "Tue Mar 10 11:14:30 2020"
      },
      "committer": {
        "name": "Patrick Kohan",
        "email": "patrick.kohan@gmail.com",
        "time": "Tue Mar 10 11:14:30 2020"
      },
      "message": "use utf8.RuneCountInString\n"
    },
    {
      "commit": "c6eeac79a2c459994fa7a1f5834fad9ebac3c231",
      "tree": "24fc040ca1af06967e43308564801508c0c78d24",
      "parents": [
        "e614d5087c0ef24ba4abd3e0693c762be09b5e51"
      ],
      "author": {
        "name": "Patrick Kohan",
        "email": "patrick.kohan@gmail.com",
        "time": "Thu Dec 12 13:26:17 2019"
      },
      "committer": {
        "name": "Patrick Kohan",
        "email": "patrick.kohan@gmail.com",
        "time": "Thu Dec 12 13:26:17 2019"
      },
      "message": "len calculation\n"
    },
    {
      "commit": "e614d5087c0ef24ba4abd3e0693c762be09b5e51",
      "tree": "fdb23e1e7a0b8edd40f08e6a095f7e57fdda7745",
      "parents": [
        "066c0e613093ffd86c200718122222bf1d48a311"
      ],
      "author": {
        "name": "Patrick Kohan",
        "email": "patrick.kohan@gmail.com",
        "time": "Thu Dec 12 13:25:56 2019"
      },
      "committer": {
        "name": "Patrick Kohan",
        "email": "patrick.kohan@gmail.com",
        "time": "Thu Dec 12 13:25:56 2019"
      },
      "message": "len calculation\n"
    },
    {
      "commit": "066c0e613093ffd86c200718122222bf1d48a311",
      "tree": "6d84751a5b77956e379cdd53d180f52c824fbb3e",
      "parents": [
        "72a1ad41d13b6381c18137d8c31f7203071eb9d1"
      ],
      "author": {
        "name": "Patrick Kohan",
        "email": "patrick.kohan@gmail.com",
        "time": "Thu Dec 12 10:43:21 2019"
      },
      "committer": {
        "name": "Patrick Kohan",
        "email": "patrick.kohan@gmail.com",
        "time": "Thu Dec 12 10:43:21 2019"
      },
      "message": "fix test\n"
    },
    {
      "commit": "72a1ad41d13b6381c18137d8c31f7203071eb9d1",
      "tree": "ad8ce5f2e44084eb80da751c1f29a82f8ec9c712",
      "parents": [
        "6895bfd4fc53d83e49476bb8626c537ba49ac11b"
      ],
      "author": {
        "name": "Patrick Kohan",
        "email": "patrick.kohan@gmail.com",
        "time": "Thu Dec 12 10:38:47 2019"
      },
      "committer": {
        "name": "Patrick Kohan",
        "email": "patrick.kohan@gmail.com",
        "time": "Thu Dec 12 10:38:47 2019"
      },
      "message": "-\n"
    },
    {
      "commit": "6895bfd4fc53d83e49476bb8626c537ba49ac11b",
      "tree": "e8957e8522961bd8144dca363139f65c2cb01777",
      "parents": [
        "5b055fab6731b98b47b19da827b2975012958398"
      ],
      "author": {
        "name": "Patrick Kohan",
        "email": "patrick.kohan@gmail.com",
        "time": "Thu Dec 12 10:30:59 2019"
      },
      "committer": {
        "name": "Patrick Kohan",
        "email": "patrick.kohan@gmail.com",
        "time": "Thu Dec 12 10:30:59 2019"
      },
      "message": "-\n"
    },
    {
      "commit": "5b055fab6731b98b47b19da827b2975012958398",
      "tree": "e760d0608babacec696e54c70b8a5f8f43e15714",
      "parents": [
        "307d5b2e49ad28a20f5f6ccc444c9c84503bcaba"
      ],
      "author": {
        "name": "Patrick Kohan",
        "email": "patrick.kohan@gmail.com",
        "time": "Tue Dec 10 14:03:27 2019"
      },
      "committer": {
        "name": "Patrick Kohan",
        "email": "patrick.kohan@gmail.com",
        "time": "Tue Dec 10 14:03:27 2019"
      },
      "message": "fix\n"
    },
    {
      "commit": "307d5b2e49ad28a20f5f6ccc444c9c84503bcaba",
      "tree": "3c55744ec0d33788620bb9f0f053f9df6778babf",
      "parents": [
        "58c5cb1602ee9676b5d3590d782bedde80706fcc"
      ],
      "author": {
        "name": "Patrick Kohan",
        "email": "patrick.kohan@gmail.com",
        "time": "Tue Dec 10 12:22:38 2019"
      },
      "committer": {
        "name": "Patrick Kohan",
        "email": "patrick.kohan@gmail.com",
        "time": "Tue Dec 10 12:22:38 2019"
      },
      "message": "get len of []rune instead of string\n"
    },
    {
      "commit": "58c5cb1602ee9676b5d3590d782bedde80706fcc",
      "tree": "28f540cdf2fbb87c446dad334c9f3fc963e0fe43",
      "parents": [
        "da645544ed44df016359bd4c0e3dc60ee3a0da43",
        "74ac14522e85bfd8179aef8251f994afbb2f486e"
      ],
      "author": {
        "name": "Sergi Mansilla",
        "email": "sergi.mansilla@gmail.com",
        "time": "Tue Nov 19 14:19:55 2019"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 19 14:19:55 2019"
      },
      "message": "Merge pull request #98 from creachadair/gomod\n\nAdd go.mod and go.sum files to support Go modules."
    },
    {
      "commit": "74ac14522e85bfd8179aef8251f994afbb2f486e",
      "tree": "28f540cdf2fbb87c446dad334c9f3fc963e0fe43",
      "parents": [
        "da645544ed44df016359bd4c0e3dc60ee3a0da43"
      ],
      "author": {
        "name": "M. J. Fromberger",
        "email": "michael.j.fromberger@gmail.com",
        "time": "Mon Feb 04 15:49:05 2019"
      },
      "committer": {
        "name": "M. J. Fromberger",
        "email": "michael.j.fromberger@gmail.com",
        "time": "Thu Oct 17 01:16:06 2019"
      },
      "message": "Add go.mod and go.sum files to support Go modules.\n\nThis commit contains no functional changes; it\u0027s just adding config files for\nthe Go modules facility. Ideally this commit should also be accompanied by a\nnew version tag, since the current latest tag is v1.0.0 from Nov. 2017, and\nseveral optimizations have been added since then.\n\nRelated changes:\n\n- Update to the import canonical path for golint.\n- Add Go 1.10, 1.11, 1.12, and 1.13 to CI; drop 1.8.\n"
    },
    {
      "commit": "da645544ed44df016359bd4c0e3dc60ee3a0da43",
      "tree": "08f0f2bb16b8b852e7cae7b26bc7a2d4cdeea7e9",
      "parents": [
        "217d392c389de447c964f954cc5e4774cde4b66b",
        "f7f9a5cc31d1a867e139c1d0dded822cb29d0fb6"
      ],
      "author": {
        "name": "Sergi Mansilla",
        "email": "sergi.mansilla@gmail.com",
        "time": "Mon Feb 05 16:33:09 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 05 16:33:09 2018"
      },
      "message": "Merge pull request #90 from vmarkovtsev/patch-1\n\nFix DiffLevenshtein counting single runes as multiple edits"
    },
    {
      "commit": "f7f9a5cc31d1a867e139c1d0dded822cb29d0fb6",
      "tree": "08f0f2bb16b8b852e7cae7b26bc7a2d4cdeea7e9",
      "parents": [
        "dbf098baded732e20a70cd3460043d556505a2d3"
      ],
      "author": {
        "name": "Vadim Markovtsev",
        "email": "vadim@sourced.tech",
        "time": "Wed Jan 31 15:34:27 2018"
      },
      "committer": {
        "name": "Vadim Markovtsev",
        "email": "vadim@sourced.tech",
        "time": "Wed Jan 31 15:35:40 2018"
      },
      "message": "Add the utf-8 test for DiffLevenshtein\n"
    },
    {
      "commit": "dbf098baded732e20a70cd3460043d556505a2d3",
      "tree": "053803eff6e2b82f7a5dcb94cfa6f3f9160cca85",
      "parents": [
        "217d392c389de447c964f954cc5e4774cde4b66b"
      ],
      "author": {
        "name": "Vadim Markovtsev",
        "email": "gmarkhor@gmail.com",
        "time": "Wed Jan 31 14:45:40 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jan 31 14:45:40 2018"
      },
      "message": "Fix DiffLevenshtein counting single runes as multiple edits"
    },
    {
      "commit": "217d392c389de447c964f954cc5e4774cde4b66b",
      "tree": "670131587cb6e7b4d22b82b108f8de00a2aef86d",
      "parents": [
        "f3948f6310dcba6decc975852d51531b74c48c64",
        "31050506cd4297dbc0973d0f6dacf142858f6302"
      ],
      "author": {
        "name": "Sergi Mansilla",
        "email": "sergi.mansilla@gmail.com",
        "time": "Thu Jan 25 15:07:41 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 25 15:07:41 2018"
      },
      "message": "Merge pull request #80 from josharian/opstringer\n\nMake Operation a stringer"
    },
    {
      "commit": "f3948f6310dcba6decc975852d51531b74c48c64",
      "tree": "bb77b7a11e559b22deea439bcb38ea90d51f28ac",
      "parents": [
        "1744e2970ca51c86172c8190fadad617561ed6e7",
        "ded6142445da5211993e8bb2e7dfd30ef9cae14d"
      ],
      "author": {
        "name": "Sergi Mansilla",
        "email": "sergi.mansilla@gmail.com",
        "time": "Thu Jan 25 15:02:25 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 25 15:02:25 2018"
      },
      "message": "Merge pull request #85 from josharian/varia\n\nAssorted optimizations"
    },
    {
      "commit": "ded6142445da5211993e8bb2e7dfd30ef9cae14d",
      "tree": "bb77b7a11e559b22deea439bcb38ea90d51f28ac",
      "parents": [
        "639b52b31e245f913428211fe7dcd15c266b96d2"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Nov 13 08:01:33 2017"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Nov 13 08:18:39 2017"
      },
      "message": "Use a slice instead of a linked list to track equalities\n\nThis is easier to follow and more idiomatic.\nIt also offers a minor overall performance boost.\n\nname                       old time/op    new time/op    delta\nDiffHalfMatch-8               107µs ± 1%     108µs ± 0%   +0.91%  (p\u003d0.000 n\u003d9+9)\nDiffCleanupSemantic-8         968µs ± 1%     921µs ± 1%   -4.87%  (p\u003d0.000 n\u003d9+10)\nDiffMain-8                    1.01s ± 0%     1.01s ± 0%     ~     (p\u003d0.353 n\u003d10+10)\nDiffMainLarge-8               102ms ± 2%     101ms ± 1%     ~     (p\u003d0.842 n\u003d10+9)\nDiffMainRunesLargeLines-8     515µs ± 1%     515µs ± 1%     ~     (p\u003d0.400 n\u003d9+10)\n\nname                       old alloc/op   new alloc/op   delta\nDiffHalfMatch-8               106kB ± 0%     106kB ± 0%     ~     (all equal)\nDiffCleanupSemantic-8         177kB ± 0%     163kB ± 0%   -7.81%  (p\u003d0.000 n\u003d10+10)\nDiffMain-8                   16.4MB ± 0%    16.4MB ± 0%   +0.00%  (p\u003d0.000 n\u003d9+10)\nDiffMainLarge-8              4.81MB ± 0%    4.81MB ± 0%     ~     (p\u003d1.000 n\u003d10+10)\nDiffMainRunesLargeLines-8     174kB ± 0%     174kB ± 0%     ~     (p\u003d0.810 n\u003d10+10)\n\nname                       old allocs/op  new allocs/op  delta\nDiffHalfMatch-8                2.00 ± 0%      2.00 ± 0%     ~     (all equal)\nDiffCleanupSemantic-8         3.12k ± 0%     1.11k ± 0%  -64.48%  (p\u003d0.000 n\u003d10+10)\nDiffMain-8                     83.0 ± 0%      84.0 ± 0%   +1.20%  (p\u003d0.000 n\u003d9+10)\nDiffMainLarge-8               46.3k ± 0%     46.3k ± 0%   -0.08%  (p\u003d0.000 n\u003d10+10)\nDiffMainRunesLargeLines-8     1.08k ± 0%     1.08k ± 0%     ~     (all equal)\n"
    },
    {
      "commit": "639b52b31e245f913428211fe7dcd15c266b96d2",
      "tree": "518868ce34f4a03a983efdb8eec0e68eea42681f",
      "parents": [
        "258a5e0698872073d75f0cfc6cb80b66d48e333d"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Nov 13 07:40:28 2017"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Nov 13 08:18:39 2017"
      },
      "message": "Check deadline less frequently\n\nCalling time.Now() is a bit expensive to do in a tight loop.\nCheck it only every 16th time.\nThis results in an average 0.16% time overrun when the deadline is hit,\nwhich seems a small price to pay for up to a 25% speedup on the\nactual work.\n\nname                       old time/op    new time/op    delta\nDiffHalfMatch-8               108µs ± 1%     108µs ± 0%     ~     (p\u003d0.211 n\u003d10+9)\nDiffCleanupSemantic-8         973µs ± 0%     971µs ± 1%     ~     (p\u003d0.673 n\u003d8+9)\nDiffMain-8                    1.01s ± 0%     1.01s ± 0%   +0.16%  (p\u003d0.003 n\u003d9+10)\nDiffMainLarge-8               110ms ± 1%     102ms ± 3%   -7.44%  (p\u003d0.000 n\u003d8+10)\nDiffMainRunesLargeLines-8     693µs ± 1%     515µs ± 1%  -25.70%  (p\u003d0.000 n\u003d8+9)\n\nname                       old alloc/op   new alloc/op   delta\nDiffHalfMatch-8               106kB ± 0%     106kB ± 0%     ~     (all equal)\nDiffCleanupSemantic-8         177kB ± 0%     177kB ± 0%     ~     (all equal)\nDiffMain-8                   16.4MB ± 0%    16.4MB ± 0%     ~     (all equal)\nDiffMainLarge-8              4.81MB ± 0%    4.81MB ± 0%     ~     (p\u003d0.764 n\u003d10+9)\nDiffMainRunesLargeLines-8     174kB ± 0%     174kB ± 0%   +0.01%  (p\u003d0.014 n\u003d10+10)\n\nname                       old allocs/op  new allocs/op  delta\nDiffHalfMatch-8                2.00 ± 0%      2.00 ± 0%     ~     (all equal)\nDiffCleanupSemantic-8         3.12k ± 0%     3.12k ± 0%     ~     (all equal)\nDiffMain-8                     83.0 ± 0%      83.0 ± 0%     ~     (all equal)\nDiffMainLarge-8               46.3k ± 0%     46.3k ± 0%     ~     (p\u003d1.000 n\u003d10+10)\nDiffMainRunesLargeLines-8     1.08k ± 0%     1.08k ± 0%     ~     (p\u003d0.211 n\u003d10+10)\n"
    },
    {
      "commit": "258a5e0698872073d75f0cfc6cb80b66d48e333d",
      "tree": "13d60def8442b7bbf45ea6a0f1bde74e08a0a8ce",
      "parents": [
        "6991d24dcdb99ba4f9d40f61f73cafb5e8e2a8e2"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Nov 13 06:51:51 2017"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Nov 13 08:18:39 2017"
      },
      "message": "Remove more nested appends\n\nNested appends generally lead to\nunnecessary allocation and copying.\n\nUnwind them in diffCompute.\n\nReplace them in DiffCleanupSemantics with splice.\n\nDiffHalfMatch-8               107µs ± 0%     108µs ± 1%   +0.70%  (p\u003d0.000 n\u003d10+10)\nDiffCleanupSemantic-8        1.00ms ± 2%    0.97ms ± 0%   -2.71%  (p\u003d0.000 n\u003d10+8)\nDiffMain-8                    1.01s ± 0%     1.01s ± 0%     ~     (p\u003d0.236 n\u003d8+9)\nDiffMainLarge-8               110ms ± 1%     110ms ± 1%     ~     (p\u003d1.000 n\u003d9+8)\nDiffMainRunesLargeLines-8     692µs ± 1%     693µs ± 1%     ~     (p\u003d0.762 n\u003d10+8)\n\nname                       old alloc/op   new alloc/op   delta\nDiffHalfMatch-8               106kB ± 0%     106kB ± 0%     ~     (all equal)\nDiffCleanupSemantic-8         255kB ± 0%     177kB ± 0%  -30.76%  (p\u003d0.000 n\u003d9+10)\nDiffMain-8                   16.4MB ± 0%    16.4MB ± 0%     ~     (all equal)\nDiffMainLarge-8              4.84MB ± 0%    4.81MB ± 0%   -0.57%  (p\u003d0.000 n\u003d10+10)\nDiffMainRunesLargeLines-8     175kB ± 0%     174kB ± 0%   -0.34%  (p\u003d0.000 n\u003d10+10)\n\nname                       old allocs/op  new allocs/op  delta\nDiffHalfMatch-8                2.00 ± 0%      2.00 ± 0%     ~     (all equal)\nDiffCleanupSemantic-8         3.13k ± 0%     3.12k ± 0%   -0.06%  (p\u003d0.000 n\u003d10+10)\nDiffMain-8                     83.0 ± 0%      83.0 ± 0%     ~     (all equal)\nDiffMainLarge-8               46.5k ± 0%     46.3k ± 0%   -0.41%  (p\u003d0.000 n\u003d10+10)\nDiffMainRunesLargeLines-8     1.09k ± 0%     1.08k ± 0%   -0.83%  (p\u003d0.000 n\u003d9+10)\n"
    },
    {
      "commit": "6991d24dcdb99ba4f9d40f61f73cafb5e8e2a8e2",
      "tree": "90da6de0cd8158024aa0b665f84a966af261dd31",
      "parents": [
        "a16f115e57f5b95c15b0ceec19ff5183d5c20f42"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Nov 13 06:46:57 2017"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Nov 13 08:18:39 2017"
      },
      "message": "Optimize splice\n\nThe old code was a cute one-liner,\nbut it allocated needlessly, quite a lot.\nReplace it with slightly more careful code\nthat only allocates and copies as necessary.\n\n\nname                       old time/op    new time/op    delta\nDiffCommonPrefix-8            135ns ± 2%     133ns ± 1%     ~     (p\u003d0.213 n\u003d10+9)\nDiffCommonSuffix-8            142ns ± 3%     141ns ± 2%     ~     (p\u003d0.173 n\u003d10+9)\nDiffHalfMatch-8               107µs ± 0%     107µs ± 0%     ~     (p\u003d0.400 n\u003d9+9)\nDiffCleanupSemantic-8        11.4ms ± 1%     0.9ms ± 1%  -91.72%  (p\u003d0.000 n\u003d10+9)\nDiffMain-8                    1.01s ± 0%     1.01s ± 0%     ~     (p\u003d0.780 n\u003d10+9)\nDiffMainLarge-8               134ms ± 1%     101ms ± 4%  -24.45%  (p\u003d0.000 n\u003d9+9)\nDiffMainRunesLargeLines-8     707µs ± 0%     681µs ± 2%   -3.61%  (p\u003d0.000 n\u003d9+10)\n\nname                       old alloc/op   new alloc/op   delta\nDiffCommonPrefix-8            0.00B          0.00B          ~     (all equal)\nDiffCommonSuffix-8            0.00B          0.00B          ~     (all equal)\nDiffHalfMatch-8               106kB ± 0%     106kB ± 0%     ~     (all equal)\nDiffCleanupSemantic-8        17.7MB ± 0%     0.3MB ± 0%  -98.56%  (p\u003d0.000 n\u003d9+9)\nDiffMain-8                   16.4MB ± 0%    16.4MB ± 0%   -0.00%  (p\u003d0.000 n\u003d10+10)\nDiffMainLarge-8              63.8MB ± 0%     4.8MB ± 0%  -92.42%  (p\u003d0.000 n\u003d9+10)\nDiffMainRunesLargeLines-8     209kB ± 0%     175kB ± 0%  -16.54%  (p\u003d0.000 n\u003d10+10)\n\nname                       old allocs/op  new allocs/op  delta\nDiffCommonPrefix-8             0.00           0.00          ~     (all equal)\nDiffCommonSuffix-8             0.00           0.00          ~     (all equal)\nDiffHalfMatch-8                2.00 ± 0%      2.00 ± 0%     ~     (all equal)\nDiffCleanupSemantic-8         11.4k ± 0%      3.1k ± 0%  -72.46%  (p\u003d0.000 n\u003d10+10)\nDiffMain-8                     89.0 ± 0%      83.0 ± 0%   -6.74%  (p\u003d0.000 n\u003d10+10)\nDiffMainLarge-8               55.3k ± 0%     46.5k ± 0%  -15.94%  (p\u003d0.000 n\u003d10+10)\nDiffMainRunesLargeLines-8     1.19k ± 0%     1.09k ± 0%   -8.60%  (p\u003d0.000 n\u003d10+8)\n"
    },
    {
      "commit": "a16f115e57f5b95c15b0ceec19ff5183d5c20f42",
      "tree": "f0d9282ac2f1eaa74064afe956c53889bb3ab2ff",
      "parents": [
        "5d7c9c6b07e527de131b9bfd461767680920e9d2"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu Nov 09 05:31:14 2017"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Nov 13 08:18:39 2017"
      },
      "message": "Optimize commonPrefixLength and commonSuffixLength\n\ncommonPrefixLength is mainly simplification.\nIt might seem like it\u0027d be better to determine\nup front which string is shorter, so as to\neliminate a conditional from the inner loop.\nBut the compiler isn\u0027t currently smart enough\nto do bounds check elimination in that case,\nso we end up with a conditional anyway.\nAnd these branches are highly predictable anyway,\nand many calls to commonPrefixLength are for\nshort shared prefixes, so opt for simpler code.\n\nThe commonSuffixLength improvements come mainly\nfrom eliminating the subtraction in the inner loop.\n\nname                         old time/op  new time/op  delta\nDiffCommonPrefix-8            146ns ± 1%   145ns ± 3%   -0.77%  (p\u003d0.011 n\u003d15+15)\nDiffCommonSuffix-8            159ns ± 2%   153ns ± 2%   -3.49%  (p\u003d0.000 n\u003d15+15)\nCommonLength/prefix/empty-8  4.03ns ± 2%  3.74ns ± 4%   -7.11%  (p\u003d0.000 n\u003d14+15)\nCommonLength/prefix/short-8  5.29ns ± 1%  4.69ns ± 2%  -11.25%  (p\u003d0.000 n\u003d14+14)\nCommonLength/prefix/long-8    603ns ± 2%   608ns ± 2%     ~     (p\u003d0.050 n\u003d15+15)\nCommonLength/suffix/empty-8  3.82ns ± 2%  3.66ns ± 3%   -4.22%  (p\u003d0.000 n\u003d14+15)\nCommonLength/suffix/short-8  6.36ns ± 2%  5.90ns ± 2%   -7.21%  (p\u003d0.000 n\u003d15+14)\nCommonLength/suffix/long-8   1.14µs ± 3%  0.90µs ± 2%  -20.79%  (p\u003d0.000 n\u003d15+15)\n"
    },
    {
      "commit": "5d7c9c6b07e527de131b9bfd461767680920e9d2",
      "tree": "fc5e1f91c19f41bb2843236f3ce7c2fb953d900b",
      "parents": [
        "6cf26334a5b56ff9152e963b369cd76bfae0e2d5"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Sun Nov 12 15:58:36 2017"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Nov 13 08:18:39 2017"
      },
      "message": "Add benchmarks for commonPrefixLength and commonSuffixLength\n\nThe existing benchmark is dominated by the string to []rune conversion.\nIt\u0027s good to have a benchmark that includes this, since it is part\nof the exposed API. However, during a diff, the conversion cost\nhas been paid, and it is the core of the implementation that matters.\n"
    },
    {
      "commit": "6cf26334a5b56ff9152e963b369cd76bfae0e2d5",
      "tree": "aa86f858c6280d05651d9c109de64254c528f459",
      "parents": [
        "1744e2970ca51c86172c8190fadad617561ed6e7"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu Nov 09 05:30:42 2017"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Nov 13 08:18:39 2017"
      },
      "message": "Delete unused commonSuffixLength binary search code\n\nSee https://github.com/sergi/go-diff/issues/54#issuecomment-343002957\n\nCloses #54\n"
    },
    {
      "commit": "31050506cd4297dbc0973d0f6dacf142858f6302",
      "tree": "a66952ca5884cf007807d1dc5634aa2063e087a7",
      "parents": [
        "1744e2970ca51c86172c8190fadad617561ed6e7"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Aug 07 15:41:44 2017"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Nov 13 08:18:11 2017"
      },
      "message": "Make Operation a stringer\n\nThis makes for more pleasant debugging."
    },
    {
      "commit": "1744e2970ca51c86172c8190fadad617561ed6e7",
      "tree": "c20c335514c5b021f7c81e2fe105975868b65a67",
      "parents": [
        "2fc9cd33b5f86077aa3e0f442fa0476a9fa9a1dc",
        "5d18e2d28cefaabf894dcc3ded0989826963ffe2"
      ],
      "author": {
        "name": "Sergi Mansilla",
        "email": "sergi.mansilla@gmail.com",
        "time": "Fri Nov 10 11:01:46 2017"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 10 11:01:46 2017"
      },
      "message": "Merge pull request #83 from sergi/support-go-1.9\n\nSupport Go 1.9 and remove 1.7"
    },
    {
      "commit": "2fc9cd33b5f86077aa3e0f442fa0476a9fa9a1dc",
      "tree": "e9f723f867b2c25e0829ab8cfec3b4335b32119f",
      "parents": [
        "832b50675c70d6d59e5cf2d939a5cf0045f1afe5",
        "9500d9a0065d8a54c06654f434eed54ddd77ff62"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Sat Nov 04 09:03:01 2017"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Nov 04 09:03:01 2017"
      },
      "message": "Merge pull request #82 from engineone/master\n\nexported patch fields"
    },
    {
      "commit": "5d18e2d28cefaabf894dcc3ded0989826963ffe2",
      "tree": "aff4499b0b0ed768585e6e64cd676ad26da475d1",
      "parents": [
        "feef008d51ad2b3778f85d387ccf91735543008d"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Tue Oct 31 21:09:36 2017"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Tue Oct 31 21:09:36 2017"
      },
      "message": "Support Go 1.9 and remove 1.7\n"
    },
    {
      "commit": "832b50675c70d6d59e5cf2d939a5cf0045f1afe5",
      "tree": "d4f2a0528b823291f4709a025f7646742de1d930",
      "parents": [
        "feef008d51ad2b3778f85d387ccf91735543008d",
        "16cb5da40373c14bfad51345ce474f487b743747"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Tue Oct 31 20:59:04 2017"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 31 20:59:04 2017"
      },
      "message": "Merge pull request #81 from EdwardBetts/spelling\n\ncorrect spelling mistake"
    },
    {
      "commit": "9500d9a0065d8a54c06654f434eed54ddd77ff62",
      "tree": "b9ef62510c82bdef685919ea7f40e70704612273",
      "parents": [
        "feef008d51ad2b3778f85d387ccf91735543008d"
      ],
      "author": {
        "name": "Eugene",
        "email": "Eugene@lepsta.com",
        "time": "Wed Oct 11 10:50:58 2017"
      },
      "committer": {
        "name": "Eugene",
        "email": "Eugene@lepsta.com",
        "time": "Wed Oct 11 10:50:58 2017"
      },
      "message": "exported patch fields\n"
    },
    {
      "commit": "16cb5da40373c14bfad51345ce474f487b743747",
      "tree": "d4f2a0528b823291f4709a025f7646742de1d930",
      "parents": [
        "feef008d51ad2b3778f85d387ccf91735543008d"
      ],
      "author": {
        "name": "Edward Betts",
        "email": "edward@4angle.com",
        "time": "Fri Sep 01 15:09:58 2017"
      },
      "committer": {
        "name": "Edward Betts",
        "email": "edward@4angle.com",
        "time": "Fri Sep 01 15:09:58 2017"
      },
      "message": "correct spelling mistake"
    },
    {
      "commit": "feef008d51ad2b3778f85d387ccf91735543008d",
      "tree": "c676d0a3a3c4ef47e58011f7f9aba7ac317abe28",
      "parents": [
        "77f9d901f033449812859efb949bfa3bcc21a5dd",
        "7cd9b3abac90e3f5aef4115be693826ccb3b8ae7"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Sun Apr 09 07:17:39 2017"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 09 07:17:39 2017"
      },
      "message": "Merge pull request #78 from sergi/support-1.7-and-1.8\n\nSwitch to Go 1.7 and 1.8"
    },
    {
      "commit": "7cd9b3abac90e3f5aef4115be693826ccb3b8ae7",
      "tree": "c676d0a3a3c4ef47e58011f7f9aba7ac317abe28",
      "parents": [
        "77f9d901f033449812859efb949bfa3bcc21a5dd"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Sun Apr 09 07:09:53 2017"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Sun Apr 09 07:09:53 2017"
      },
      "message": "Switch to Go 1.7 and 1.8\n\nWe are only supporting the two latest major Go releases.\n"
    },
    {
      "commit": "77f9d901f033449812859efb949bfa3bcc21a5dd",
      "tree": "eae31de40d932189ddd1c70245efd550f64a7042",
      "parents": [
        "24e2351369ec4949b2ed0dc5c477afdd4c4034e8",
        "ad02bdde1a9b3bb4d25bb807982f621eebe7e048"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Sun Apr 09 07:05:38 2017"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 09 07:05:38 2017"
      },
      "message": "Merge pull request #72 from maksimov/master\n\nRefactored error checking tests. Fixes #71"
    },
    {
      "commit": "ad02bdde1a9b3bb4d25bb807982f621eebe7e048",
      "tree": "bb48113d1573998efda3e08fa6401a03b88080b3",
      "parents": [
        "fa2672981ea661877a2d4d11fd482a40c5fc4e08"
      ],
      "author": {
        "name": "Stas Maksimov",
        "email": "maksimov@gmail.com",
        "time": "Mon Dec 05 16:34:41 2016"
      },
      "committer": {
        "name": "Stas Maksimov",
        "email": "maksimov@gmail.com",
        "time": "Mon Apr 03 14:52:59 2017"
      },
      "message": "Refactored error checking tests. Fixes #71\n\nCode-review changes, update to an incorrectly worded error message\n"
    },
    {
      "commit": "24e2351369ec4949b2ed0dc5c477afdd4c4034e8",
      "tree": "6bf5b751111282e458b7dffea36abffb2f1c80e2",
      "parents": [
        "83532ca1c1caa393179c677b6facf48e61f4ca5d",
        "fff5e9bb3d8183047393558539bd826b07d526ee"
      ],
      "author": {
        "name": "Sergi Mansilla",
        "email": "sergi.mansilla@gmail.com",
        "time": "Wed Jan 18 13:12:30 2017"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jan 18 13:12:30 2017"
      },
      "message": "Merge pull request #73 from sergi/support-1.6-and-1.7\n\nSupport Go 1.6 and 1.7"
    },
    {
      "commit": "fff5e9bb3d8183047393558539bd826b07d526ee",
      "tree": "b137c1feb1bdbc5adcd6d9349199e80610215178",
      "parents": [
        "9197bcad60379c66f1e0cddd255c4f575e743671"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Mon Dec 12 19:36:10 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Mon Dec 12 19:36:10 2016"
      },
      "message": "Sort authors and contributors\n"
    },
    {
      "commit": "9197bcad60379c66f1e0cddd255c4f575e743671",
      "tree": "ee648cc5915de56797eaf243701f9c95921351dd",
      "parents": [
        "0aae786c3c45402508a57647dff4e625884ba0c9"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Mon Dec 12 19:34:06 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Mon Dec 12 19:34:06 2016"
      },
      "message": "Always support the latest two Go releases\n"
    },
    {
      "commit": "83532ca1c1caa393179c677b6facf48e61f4ca5d",
      "tree": "82f7f4f35e93e278f163408ec04b904ec6e163ce",
      "parents": [
        "0aae786c3c45402508a57647dff4e625884ba0c9",
        "fa2672981ea661877a2d4d11fd482a40c5fc4e08"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Mon Dec 05 08:04:20 2016"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Dec 05 08:04:20 2016"
      },
      "message": "Merge pull request #70 from maksimov/master\n\nAdded more tests to improve coverage slightly"
    },
    {
      "commit": "fa2672981ea661877a2d4d11fd482a40c5fc4e08",
      "tree": "82f7f4f35e93e278f163408ec04b904ec6e163ce",
      "parents": [
        "0aae786c3c45402508a57647dff4e625884ba0c9"
      ],
      "author": {
        "name": "Stas Maksimov",
        "email": "maksimov@gmail.com",
        "time": "Mon Dec 05 01:33:20 2016"
      },
      "committer": {
        "name": "Stas Maksimov",
        "email": "maksimov@gmail.com",
        "time": "Mon Dec 05 01:35:25 2016"
      },
      "message": "Added more tests to improve coverage slightly\n"
    },
    {
      "commit": "0aae786c3c45402508a57647dff4e625884ba0c9",
      "tree": "264f761dfec7e3d7158bdc332bc608daf0093f32",
      "parents": [
        "7eb553dc40a8270762b5338ec0c64b72f87d3ec1",
        "b4e19a8f321253849b1e5525eca1ea637bc76547"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Sat Dec 03 15:35:20 2016"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Dec 03 15:35:20 2016"
      },
      "message": "Merge pull request #68 from maksimov/master\n\nAdded OSX and Linux builders to .travis.yml"
    },
    {
      "commit": "b4e19a8f321253849b1e5525eca1ea637bc76547",
      "tree": "264f761dfec7e3d7158bdc332bc608daf0093f32",
      "parents": [
        "7eb553dc40a8270762b5338ec0c64b72f87d3ec1"
      ],
      "author": {
        "name": "Stas Maksimov",
        "email": "maksimov@gmail.com",
        "time": "Sat Dec 03 15:23:58 2016"
      },
      "committer": {
        "name": "Stas Maksimov",
        "email": "maksimov@gmail.com",
        "time": "Sat Dec 03 15:23:58 2016"
      },
      "message": "Added OSX and Linux builders to .travis.yml\nFixes #65\n"
    },
    {
      "commit": "7eb553dc40a8270762b5338ec0c64b72f87d3ec1",
      "tree": "b4a0df7638abbbc110aa93dc6f639ab9baed4170",
      "parents": [
        "e41fa837d9ea7f630c6810a2e4ca9ff08170b837"
      ],
      "author": {
        "name": "Stas Maksimov",
        "email": "maksimov@gmail.com",
        "time": "Sat Dec 03 15:11:42 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Sat Dec 03 15:11:42 2016"
      },
      "message": "Use grep -E in lint.sh to make it compatible with BSD grep (#67)\n\nUse grep -E in lint.sh to make it compatible with BSD grep\r\n\r\nFixes #64\r\n"
    },
    {
      "commit": "e41fa837d9ea7f630c6810a2e4ca9ff08170b837",
      "tree": "cc9f0083698c886060356217ad6f0a21b3af2ebc",
      "parents": [
        "431343a89a2ec4ea8168b3ee3d7a96169f6ff605",
        "159939ffad8d9e3eb182d26710796c88e37f97f2"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Sat Dec 03 13:14:13 2016"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Dec 03 13:14:13 2016"
      },
      "message": "Merge pull request #63 from maksimov/master\n\nFix lint.sh on macOS (#62)"
    },
    {
      "commit": "159939ffad8d9e3eb182d26710796c88e37f97f2",
      "tree": "cc9f0083698c886060356217ad6f0a21b3af2ebc",
      "parents": [
        "539920598759b1224d9093549be4f6a3e899b258"
      ],
      "author": {
        "name": "Stas Maksimov",
        "email": "maksimov@gmail.com",
        "time": "Sat Dec 03 12:57:40 2016"
      },
      "committer": {
        "name": "Stas Maksimov",
        "email": "maksimov@gmail.com",
        "time": "Sat Dec 03 12:57:40 2016"
      },
      "message": "Updated AUTHORS and CONTRIBUTORS\n"
    },
    {
      "commit": "539920598759b1224d9093549be4f6a3e899b258",
      "tree": "31bce97ace196eb5c105763fd40542e29ad67a1b",
      "parents": [
        "431343a89a2ec4ea8168b3ee3d7a96169f6ff605"
      ],
      "author": {
        "name": "Stas Maksimov",
        "email": "maksimov@gmail.com",
        "time": "Sat Dec 03 12:19:34 2016"
      },
      "committer": {
        "name": "Stas Maksimov",
        "email": "maksimov@gmail.com",
        "time": "Sat Dec 03 12:19:34 2016"
      },
      "message": "Fix lint.sh on macOS (#62)\n"
    },
    {
      "commit": "431343a89a2ec4ea8168b3ee3d7a96169f6ff605",
      "tree": "5bd4456f234c687c0a75a6933eb92dc4d3d5e27d",
      "parents": [
        "d7be4c82363778764f76e90fb14a9722f1b92d63",
        "dda5e6e619e07afd096b6ee01b93feba134e78dc"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Fri Dec 02 19:46:04 2016"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Dec 02 19:46:04 2016"
      },
      "message": "Merge pull request #61 from sergi/21-invalid-utf8\n\nDocument invalid UTF-8 sequence handling"
    },
    {
      "commit": "dda5e6e619e07afd096b6ee01b93feba134e78dc",
      "tree": "5bd4456f234c687c0a75a6933eb92dc4d3d5e27d",
      "parents": [
        "5f9c862b459485a249c0e7304fdb5bca42f04325"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Fri Dec 02 18:47:56 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Fri Dec 02 19:29:53 2016"
      },
      "message": "Define the behavior for invalid UTF-8 sequences\n\nFixes #21\n"
    },
    {
      "commit": "5f9c862b459485a249c0e7304fdb5bca42f04325",
      "tree": "77eaf7ca26d2360191a8e9649506b77c26692fe7",
      "parents": [
        "d7be4c82363778764f76e90fb14a9722f1b92d63"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Fri Dec 02 19:20:50 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Fri Dec 02 19:21:16 2016"
      },
      "message": "No need for variables here\n"
    },
    {
      "commit": "d7be4c82363778764f76e90fb14a9722f1b92d63",
      "tree": "7634557f8a33d07d889bb843f570a2a22ca34760",
      "parents": [
        "647f90bfbe2c5e2f1c1ec70d644f0f1d00da6d48",
        "2be755f07c89fb99d39962938dd2e69003c4f6e6"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Fri Dec 02 16:17:33 2016"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Dec 02 16:17:33 2016"
      },
      "message": "Merge pull request #53 from sergi/43-refactor\n\nRefactor everything"
    },
    {
      "commit": "2be755f07c89fb99d39962938dd2e69003c4f6e6",
      "tree": "7634557f8a33d07d889bb843f570a2a22ca34760",
      "parents": [
        "dbcb93d0978fc2b45eaf7be0ba3bc2e780bb57e3"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Fri Dec 02 16:14:28 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Fri Dec 02 16:14:46 2016"
      },
      "message": "Use a constant for the testdata directory\n"
    },
    {
      "commit": "dbcb93d0978fc2b45eaf7be0ba3bc2e780bb57e3",
      "tree": "afeeb2e38ebcf81ac14e7f6318cf6f0cee9c90d5",
      "parents": [
        "6b5d58acc31d7ef8596bb0e96a66e3185f3a4568"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Nov 03 22:31:40 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Dec 01 22:08:54 2016"
      },
      "message": "Refactor code style and functionality\n"
    },
    {
      "commit": "6b5d58acc31d7ef8596bb0e96a66e3185f3a4568",
      "tree": "d638b1a7201fb32bc22ab3b4d6da8999cc171ae5",
      "parents": [
        "ac88a7cd3135ac63ccbbbe39feddabd7c25435fa"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Nov 03 22:00:11 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Dec 01 22:08:53 2016"
      },
      "message": "HURRAY, only one comment style...\n"
    },
    {
      "commit": "ac88a7cd3135ac63ccbbbe39feddabd7c25435fa",
      "tree": "7978bcba98857da6fbed840861b0c576c34f05d4",
      "parents": [
        "5aee5ba506f833153ce9dbe5bfe68145ecb5f11c"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Nov 03 21:46:07 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Dec 01 22:08:53 2016"
      },
      "message": "Make diffCleanupSemanticScore a regular function\n"
    },
    {
      "commit": "5aee5ba506f833153ce9dbe5bfe68145ecb5f11c",
      "tree": "cd64436a428dee6c1731e66468db26401029151c",
      "parents": [
        "c3c4cf234611bee1992da8fd9e60f98e87acb8ec"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Nov 03 21:41:24 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Dec 01 22:08:53 2016"
      },
      "message": "Insert a TODO for the binary search of commonSuffixLength\n"
    },
    {
      "commit": "c3c4cf234611bee1992da8fd9e60f98e87acb8ec",
      "tree": "618dedd431734562ac0fefc7e646aa96d88d263b",
      "parents": [
        "9f859138cbd2a29f28b80e709ce0bc1334c7cdec"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Nov 03 21:24:16 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Dec 01 22:08:52 2016"
      },
      "message": "Remove diffmatchpatch_test.go because it is now empty\n"
    },
    {
      "commit": "9f859138cbd2a29f28b80e709ce0bc1334c7cdec",
      "tree": "92cde53c1d3a4c422622a794e9077ae6b381d00a",
      "parents": [
        "b3021ff0c31ff30122aa2d4f8d1e1d1db1eb3ffd"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Nov 03 21:23:38 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Dec 01 22:08:52 2016"
      },
      "message": "Move util functionality into *util*.go\n"
    },
    {
      "commit": "b3021ff0c31ff30122aa2d4f8d1e1d1db1eb3ffd",
      "tree": "f351359a28e7410c67d1cdf1d09c24deb177ec70",
      "parents": [
        "556ef279092fa5987e93726754f9126c35ac493b"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Nov 03 21:20:24 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Dec 01 22:08:50 2016"
      },
      "message": "Move benchmark functionality and remove caller function\n"
    },
    {
      "commit": "556ef279092fa5987e93726754f9126c35ac493b",
      "tree": "b1d5297333ac96824cc905afdedd014aecb0caa3",
      "parents": [
        "fd44800f78e6d6e868642518c4611ce03f5cdba8"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Nov 03 21:11:44 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Dec 01 22:08:49 2016"
      },
      "message": "Move even more functionality into diff\n"
    },
    {
      "commit": "fd44800f78e6d6e868642518c4611ce03f5cdba8",
      "tree": "65954a0fd9f3d6dc8bf2647baf28f258d27c9e3c",
      "parents": [
        "6720860da56a07784152306bad03c390a5b0868b"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Nov 03 21:09:43 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Dec 01 22:08:48 2016"
      },
      "message": "Move patch functionality into patch*.go\n"
    },
    {
      "commit": "6720860da56a07784152306bad03c390a5b0868b",
      "tree": "1b9b2016b4afad06ecd50cf8fcb091ed9376b98b",
      "parents": [
        "b800aa4546f7259a623313308bcbe88c0aa5f970"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Nov 03 21:05:27 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Dec 01 22:08:47 2016"
      },
      "message": "Move match functionality into match*.go\n"
    },
    {
      "commit": "b800aa4546f7259a623313308bcbe88c0aa5f970",
      "tree": "c2d1fef60afdf72c5498d06aaf5f3ed73667d86b",
      "parents": [
        "ffacb1abfae80cbed44ec738d14d10812b660305"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Nov 03 21:00:33 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Dec 01 22:08:45 2016"
      },
      "message": "Move diff functionality into diff*.go\n"
    },
    {
      "commit": "ffacb1abfae80cbed44ec738d14d10812b660305",
      "tree": "f3e98c10259fe27947c0afcd2891b6cb4218d5b8",
      "parents": [
        "503abb438898e3a27bddf2e2e9cc33fb80f85803"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Nov 03 20:50:12 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Dec 01 22:08:44 2016"
      },
      "message": "Rework the licence information for the Go code.\n"
    },
    {
      "commit": "503abb438898e3a27bddf2e2e9cc33fb80f85803",
      "tree": "28ec6193dc2873b796d367f2dcdbeef4a1669480",
      "parents": [
        "16b0804edfd41e675066519c1ed97469a666b3fd"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Nov 03 19:18:16 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Dec 01 21:58:25 2016"
      },
      "message": "Refactor the test code\n\n- Use table-driven tests where possible\n- Reduce helper code, e.q., copycats of assert.Equal\n- Reformat most of the code\n- Rename the test functions to be Go conform\n"
    },
    {
      "commit": "16b0804edfd41e675066519c1ed97469a666b3fd",
      "tree": "21157fee78829d3dcdcd1c1205a6984e61ddd6b0",
      "parents": [
        "6ae06cb6f3055c59cc074b912df1589070384a48"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Nov 03 10:37:39 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Dec 01 21:58:25 2016"
      },
      "message": "Refactor benchmarks\n"
    },
    {
      "commit": "6ae06cb6f3055c59cc074b912df1589070384a48",
      "tree": "ce552385659efd76587fa245a3a9ac997ff24d76",
      "parents": [
        "dd3fb6942e833d85a9037108c54720a1b190fac5"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Nov 03 10:27:04 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Dec 01 21:58:25 2016"
      },
      "message": "Rename dmp*.go to diffmatchpatch*.go\n\nAlthough \"diffmatchpatch\" is longer than \"dmp\" it will make more sense\nafter the files are split into smaller files.\n"
    },
    {
      "commit": "dd3fb6942e833d85a9037108c54720a1b190fac5",
      "tree": "edb9a84b2727539f05bbed3a4bb887f1265e326e",
      "parents": [
        "647f90bfbe2c5e2f1c1ec70d644f0f1d00da6d48"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Wed Nov 02 20:18:43 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Dec 01 21:58:25 2016"
      },
      "message": "Move benchmark fixtures to testdata folder\n"
    },
    {
      "commit": "647f90bfbe2c5e2f1c1ec70d644f0f1d00da6d48",
      "tree": "8d285f88cf941c5d3dc017244cec80afb7f95796",
      "parents": [
        "552b4e9bbdca9e5adafd95ee98c822fdd11b330b",
        "00579f83a30ecf49024ac509174891ce81e82c8f"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Dec 01 21:54:42 2016"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Dec 01 21:54:42 2016"
      },
      "message": "Merge pull request #50 from sergi/revamp-the-readme\n\nRevamp the README"
    },
    {
      "commit": "00579f83a30ecf49024ac509174891ce81e82c8f",
      "tree": "f30d0aa469edc02d4af3b531d08ffbf8d8f10ae6",
      "parents": [
        "c55cf50e9bdd7c29505aea7517a9374f1be9a7be"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Wed Nov 02 16:49:08 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Thu Dec 01 21:50:09 2016"
      },
      "message": "Revamp the README, and add the AUTHORS and CONTRIBUTORS files\n"
    },
    {
      "commit": "552b4e9bbdca9e5adafd95ee98c822fdd11b330b",
      "tree": "780a4ff504ce8b5153d5397fe840918ab27c157d",
      "parents": [
        "c55cf50e9bdd7c29505aea7517a9374f1be9a7be",
        "1a922c8868a6756f4b26f491480ef06e520cd127"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Wed Nov 02 18:40:45 2016"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 02 18:40:45 2016"
      },
      "message": "Merge pull request #52 from sergi/remove-the-stack-implementation\n\nRemove the own stack implementation"
    },
    {
      "commit": "1a922c8868a6756f4b26f491480ef06e520cd127",
      "tree": "780a4ff504ce8b5153d5397fe840918ab27c157d",
      "parents": [
        "f1c1a91f8929f12a5020b944a7155b6f63f2a06d"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Wed Nov 02 18:02:10 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Wed Nov 02 18:17:38 2016"
      },
      "message": "Replace the stack implementation with a simple linked list structure\n\nThis makes the execution also faster since no type assertions are\nneeded.\n"
    },
    {
      "commit": "f1c1a91f8929f12a5020b944a7155b6f63f2a06d",
      "tree": "21f2160d6672d426150ea9a7d7faba683298326a",
      "parents": [
        "c55cf50e9bdd7c29505aea7517a9374f1be9a7be"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Wed Nov 02 18:13:19 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Wed Nov 02 18:17:37 2016"
      },
      "message": "Benchmark DiffCleanupSemantic\n"
    },
    {
      "commit": "c55cf50e9bdd7c29505aea7517a9374f1be9a7be",
      "tree": "55fcf21567adcc8d6d8582d5e938f9c62ace8e0e",
      "parents": [
        "ff694a8a530c929006f311ff29b669d36725dba8",
        "c6f74d9ab99c1a1b9507e81ea54e93b69274738a"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Wed Nov 02 15:33:51 2016"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 02 15:33:51 2016"
      },
      "message": "Merge pull request #48 from sergi/46-refactor-diffHalfMatchI-and-remove-concat\n\nRefactor diff half match i and remove concat"
    },
    {
      "commit": "c6f74d9ab99c1a1b9507e81ea54e93b69274738a",
      "tree": "55fcf21567adcc8d6d8582d5e938f9c62ace8e0e",
      "parents": [
        "886a402b3198dced3cc14b8443be62604b8cb664"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Wed Nov 02 15:23:50 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Wed Nov 02 15:23:50 2016"
      },
      "message": "Refactor diffHalfMatchI and remove concat\n\n- The variable j is just a loop index so use a for-loop\n- Most indentations can be removed by doing early-exits\n- By doing the concatenating of bestCommon later we can often save lots\nof cycles\n- \"concat\" is useless since in most parts of the code, it isn\u0027t used\neither\n\nFixes #46\n"
    },
    {
      "commit": "886a402b3198dced3cc14b8443be62604b8cb664",
      "tree": "d2616943e1c236209b4ae830ca9101c0609e6160",
      "parents": [
        "ff694a8a530c929006f311ff29b669d36725dba8"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Wed Nov 02 15:20:13 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Wed Nov 02 15:20:13 2016"
      },
      "message": "Benchmark for DiffHalfMatch\n"
    },
    {
      "commit": "ff694a8a530c929006f311ff29b669d36725dba8",
      "tree": "219910b2d4f44c31fcc6a79a351b8123c65601b9",
      "parents": [
        "f7fcaada5500405b458a8ef96415b148fcfeacd5",
        "cf6d27e158efc742ae6629ee84adb27960b9cead"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Mon Oct 31 19:46:53 2016"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 31 19:46:53 2016"
      },
      "message": "Merge pull request #44 from sergi/29-diff-equals-must-be-equal-to-originals\n\nTest case to make sure that diff texts are equal to originals with checklines\u003dtrue"
    },
    {
      "commit": "cf6d27e158efc742ae6629ee84adb27960b9cead",
      "tree": "219910b2d4f44c31fcc6a79a351b8123c65601b9",
      "parents": [
        "f7fcaada5500405b458a8ef96415b148fcfeacd5"
      ],
      "author": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Mon Oct 31 19:36:54 2016"
      },
      "committer": {
        "name": "Markus Zimmermann",
        "email": "markus.zimmermann@nethead.at",
        "time": "Mon Oct 31 19:36:54 2016"
      },
      "message": "Test case to make sure that diff texts are equal to originals with\nchecklines\u003dtrue\n\nCloses #29\n"
    }
  ],
  "next": "f7fcaada5500405b458a8ef96415b148fcfeacd5"
}
