)]}'
{
  "log": [
    {
      "commit": "25a4b97b1bd0b5316deb77866756a3db772e08a2",
      "tree": "247c2ced43ed71acf7e294ff19ae984d4e4ebd62",
      "parents": [
        "15e119375018fba121cf58e02a9f17fe22df0df8"
      ],
      "author": {
        "name": "Ankur Mittal",
        "email": "anmittal@google.com",
        "time": "Fri May 12 18:29:02 2017 -0700"
      },
      "committer": {
        "name": "Ankur Mittal",
        "email": "anmittal@google.com",
        "time": "Fri Sep 15 11:11:31 2017 -0700"
      },
      "message": "Added support for http.cookieFile\n\nAdded support for non-windows system. Borrowed and modified code from\nlibcurl cookie library to parse cookie\n\nChange-Id: I598553aa65641925c2de9e157bfdf1120a16078e\n"
    },
    {
      "commit": "15e119375018fba121cf58e02a9f17fe22df0df8",
      "tree": "ac6c7ee5d9d72add533b5746be676c7831569693",
      "parents": [
        "8296da5f60f5b079bed9c944e1d56ad786ae0ecb"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Wed Jun 14 13:31:20 2017 +0200"
      },
      "committer": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Wed Jun 14 13:31:20 2017 +0200"
      },
      "message": "CHANGELOG: document git_filter_init and GIT_FILTER_INIT\n"
    },
    {
      "commit": "8296da5f60f5b079bed9c944e1d56ad786ae0ecb",
      "tree": "0ef9b1b043a08988dff951cfdcbed752edf9a08d",
      "parents": [
        "4e257dab4a70202037a9b08e17c50689a0e09ad7",
        "a78441bc467f964261f24b2a1d011cc84fc96708"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Wed Jun 14 10:49:28 2017 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 14 10:49:28 2017 +0200"
      },
      "message": "Merge pull request #4267 from mohseenrm/master\n\nadding GIT_FILTER_VERSION to GIT_FILTER_INIT as part of convention"
    },
    {
      "commit": "4e257dab4a70202037a9b08e17c50689a0e09ad7",
      "tree": "9feef03542e5b2925316a43381a23a2969d42ac8",
      "parents": [
        "953427b379b127d75596f723f358f7f0ea8a2d8d",
        "96d029892117d891969155e332a12caccc090681"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Wed Jun 14 10:48:04 2017 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 14 10:48:04 2017 +0200"
      },
      "message": "Merge pull request #4268 from pks-t/pks/homebrew-dupes-deprecation\n\ntravis: replace use of deprecated homebrew/dupes tap"
    },
    {
      "commit": "953427b379b127d75596f723f358f7f0ea8a2d8d",
      "tree": "cc05c3e9c10b50595cf1e31f9d9bd1546246345c",
      "parents": [
        "2ca088bd2b253649943a112c40179d544e5083fa",
        "a180e7d95e74f6691c35fbef8f4ba3baaf61612a"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Wed Jun 14 10:47:55 2017 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 14 10:47:55 2017 +0200"
      },
      "message": "Merge pull request #4269 from pks-t/pks/tests\n\nTest improvements"
    },
    {
      "commit": "a78441bc467f964261f24b2a1d011cc84fc96708",
      "tree": "469e6aed0ecde7f85ee510820afca8249d5a6b4c",
      "parents": [
        "7f7dabdaac2b1f4b4a98cdd882a37017cedd830c"
      ],
      "author": {
        "name": "Mohseen Mukaddam",
        "email": "mohseenmukaddam6@gmail.com",
        "time": "Tue Jun 13 11:05:40 2017 -0700"
      },
      "committer": {
        "name": "Mohseen Mukaddam",
        "email": "mohseenmukaddam6@gmail.com",
        "time": "Tue Jun 13 11:05:40 2017 -0700"
      },
      "message": "Adding git_filter_init for initializing `git_filter` struct + unit test \n\n"
    },
    {
      "commit": "7f7dabdaac2b1f4b4a98cdd882a37017cedd830c",
      "tree": "4b8e3ef36e071b0a04f13920c153a876686aaf36",
      "parents": [
        "2ca088bd2b253649943a112c40179d544e5083fa"
      ],
      "author": {
        "name": "Mohseen Mukaddam",
        "email": "mohseenmukaddam6@gmail.com",
        "time": "Mon Jun 12 13:40:47 2017 -0700"
      },
      "committer": {
        "name": "mohseenrm",
        "email": "mohseenmukaddam6@gmail.com",
        "time": "Tue Jun 13 10:59:25 2017 -0700"
      },
      "message": "adding GIT_FILTER_VERSION to GIT_FILTER_INIT as part of convention\n\n"
    },
    {
      "commit": "a180e7d95e74f6691c35fbef8f4ba3baaf61612a",
      "tree": "cc05c3e9c10b50595cf1e31f9d9bd1546246345c",
      "parents": [
        "b2e53f369239c9fc2c13ebf47398d05bc0a172fb"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 13 11:10:19 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 13 11:44:09 2017 +0200"
      },
      "message": "tests: odb: add more low-level backend tests\n\nIntroduce a new test suite \"odb::backend::simple\", which utilizes the\nfake backend to exercise the ODB abstraction layer. While such tests\nalready exist for the case where multiple backends are put together, no\ndirect testing for functionality with a single backend exist yet.\n"
    },
    {
      "commit": "b2e53f369239c9fc2c13ebf47398d05bc0a172fb",
      "tree": "83e999ab0fbd72a7775f0544a4e2fc0a71a2578c",
      "parents": [
        "983e627d10215807d2727cc8321d83d02f11fee7"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 13 11:39:36 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 13 11:43:20 2017 +0200"
      },
      "message": "tests: odb: implement `exists_prefix` for the fake backend\n\nThe fake backend currently implements all reading functions except for\nthe `exists_prefix` one. Implement it to enable further testing of the\nODB layer.\n"
    },
    {
      "commit": "983e627d10215807d2727cc8321d83d02f11fee7",
      "tree": "7101df6377f058cdbb45a984e6c02454253e9b4a",
      "parents": [
        "c4cbb3b16ebbdd26890075a718d59d6e01637d00"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 13 11:38:59 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 13 11:41:29 2017 +0200"
      },
      "message": "tests: odb: use correct OID length\n\nThe `search_object` function takes the OID length as one of its\nparameters, where its maximum length is `GIT_OID_HEXSZ`. The `exists`\nfunction of the fake backend used `GIT_OID_RAWSZ` though, leading to\nonly the first half of the OID being used when finding the correct\nobject.\n"
    },
    {
      "commit": "c4cbb3b16ebbdd26890075a718d59d6e01637d00",
      "tree": "d2fe32c48b9f169a6e9a2aafc9edc325f14a55c3",
      "parents": [
        "95170294a17083f89e7c30cd1d3f6b888d951c5a"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 13 11:38:14 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 13 11:40:05 2017 +0200"
      },
      "message": "tests: odb: have the fake backend detect ambiguous prefixes\n\nIn order to be able to test the ODB prefix functions, we need to be able\nto detect ambiguous prefixes in case multiple objects with the same\nprefix exist in the fake ODB. Extend `search_object` to detect ambiguous\nqueries and have callers return its error code instead of always\nreturning `GIT_ENOTFOUND`.\n"
    },
    {
      "commit": "95170294a17083f89e7c30cd1d3f6b888d951c5a",
      "tree": "194e4a96666a4f52aa60414b4c967445bbc3f0e1",
      "parents": [
        "bee423cc265a691179c745b1db68a85b2e3ec644"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 13 11:08:28 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 13 11:35:48 2017 +0200"
      },
      "message": "tests: core: test initialization of `git_proxy_options`\n\nInitialization of the `git_proxy_options` structure is never tested\nanywhere. Include it in our usual initialization test in\n\"core::structinit::compare\".\n"
    },
    {
      "commit": "bee423cc265a691179c745b1db68a85b2e3ec644",
      "tree": "98e18919018660e5ce766eab695ade331b04251b",
      "parents": [
        "a64532e107b40202d2cdd602c8c821f402bad429"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 13 10:29:23 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 13 11:34:49 2017 +0200"
      },
      "message": "tests: network: add missing include for `git_repository_new`\n\nA newly added test uses the `git_repository_new` function without the\ncorresponding header file being included. While this works due to the\ncompiler deducing the correct function signature, we should obviously\njust include the function\u0027s declaration file.\n"
    },
    {
      "commit": "a64532e107b40202d2cdd602c8c821f402bad429",
      "tree": "bda2717cf3e878f623ef1885272a5c2c14019123",
      "parents": [
        "613999534ee01c3f85046479db0d62eece6f2332"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 13 11:05:09 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 13 11:27:01 2017 +0200"
      },
      "message": "cmake: disable optimization on debug builds\n\nWhile our debug builds on MSVC platforms already tune the code optimizer\nto aid debugging code, all the other platforms still use the default\noptimization level. This makes it hard for developers on these platforms\nto actually debug code while maintaining his sanity due to optimizations\nlike inlined code, elided variables etc.\n\nTo help this common use case, we can simply follow the MSVC example and\nturn off code optimization with \"-O0\" for debug builds. While it would\nbe preferable to instead use \"-Og\" supported by more modern compilers,\nwe cannot guarantee that this level is available on all supported\nplatforms.\n"
    },
    {
      "commit": "613999534ee01c3f85046479db0d62eece6f2332",
      "tree": "c4c62eb0d2a44e4cb0951a50ecd36f612e7f0ad1",
      "parents": [
        "e94be4c01c5b6b2cd849a9accf80f3f93d429a76"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 13 11:03:38 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 13 11:14:53 2017 +0200"
      },
      "message": "cmake: set \"-D_DEBUG\" on non-Windows platforms\n\nIn our code base, we have some occasions where we use the \"_DEBUG\"\npreprocessor macro to enable additional code which should not be part of\nrelease builds. While we define this flag on MSVC platforms, it is\nguarded by the conditional `WIN32 AND NOT CYGWIN` on other platforms\nsince 19be3f9e6 (Improve MSVC compiler, linker flags, 2013-02-13). While\nthis condition can be fulfilled by the MSVC platform, it is never\nencountered due to being part of the `ELSE` part of `IF (MSVC)`.\n\nThe intention of the conditional was most likely to avoid the\npreprocessor macro on Cygwin platforms, but to include it on everthing\nelse. As such, the correct condition here would be `IF (NOT CYGWIN)`\ninstead. But digging a bit further, the condition is only ever used in\ntwo places:\n\n1. To skip the test in \"core::structinit\", which should also work on\n   Cygwin.\n2. In \"src/win32/git2.rc\", where it is used to set additional file\n   flags. As this file is included in MSVC builds only, it cannot cause\n   any harm to set \"_DEBUG\" on Cygwin here.\n\nAs such, we can simply drop the conditional and always set \"-D_DEBUG\" on\nall platforms.\n"
    },
    {
      "commit": "e94be4c01c5b6b2cd849a9accf80f3f93d429a76",
      "tree": "02bdd9c0081cb381b3f05dce08a8a62e139d98b2",
      "parents": [
        "2ca088bd2b253649943a112c40179d544e5083fa"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 13 11:08:19 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 13 11:11:34 2017 +0200"
      },
      "message": "cmake: remove stale comment on precompiled headers\n\nIn commit 9f75a9ce7 (Turning on runtime checks when building debug under\nMSVC., 2012-03-30), we introduced a comment \"Precompiled headers\", which\nactually refers to no related commands. Seeing that the comment never\nhad anything to refer to, we can simply remove it here.\n"
    },
    {
      "commit": "96d029892117d891969155e332a12caccc090681",
      "tree": "c77ac9a9eadeae75f6e365e596864632c8e24225",
      "parents": [
        "2ca088bd2b253649943a112c40179d544e5083fa"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 13 08:09:38 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 13 08:13:48 2017 +0200"
      },
      "message": "travis: replace use of deprecated homebrew/dupes tap\n\nThe formulae provided by the homebrew/dupes tap are deprecated since at\nleast April 4, 2017, with formulae having been migrated to\nhomebrew/core.\n\nReplace the deprecated reference to \"homebrew/dupes/zlib\" with only\n\"zlib\".\n"
    },
    {
      "commit": "2ca088bd2b253649943a112c40179d544e5083fa",
      "tree": "e3d194c3bae78ac36976ccc4afd0ba38d3da0f21",
      "parents": [
        "99e40a67c7ef84defc7d2a32b0e0f09466fa48f9",
        "f148258a35e17d8eacfb91c32ca2b74503e946f0"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Mon Jun 12 22:47:54 2017 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 12 22:47:54 2017 +0100"
      },
      "message": "Merge pull request #4265 from pks-t/pks/read-prefix-tests\n\nRead prefix tests"
    },
    {
      "commit": "99e40a67c7ef84defc7d2a32b0e0f09466fa48f9",
      "tree": "43ec4e9d873e838579eaaa337f8d3900e300ab97",
      "parents": [
        "d9914fb7c63ebf4dd171ca1589577a44526888d2",
        "fe9a5dd3cab5e5137603503bb461b6a52793d56f"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Mon Jun 12 21:23:44 2017 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 12 21:23:44 2017 +0100"
      },
      "message": "Merge pull request #4263 from libgit2/ethomson/config_for_inmemory_repo\n\nAllow creation of a configuration object in an in-memory repository"
    },
    {
      "commit": "d9914fb7c63ebf4dd171ca1589577a44526888d2",
      "tree": "d9c7843347f3ebef204b184ce43bb5dc787f886d",
      "parents": [
        "9927e9587aff31c85916028ae9bee2a21a413a8f",
        "844e85f21d2252af34aa2a2e9b7eae43ed7dd9a2"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Mon Jun 12 21:22:27 2017 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 12 21:22:27 2017 +0100"
      },
      "message": "Merge pull request #4266 from libgit2/ethomson/travis-explicit-openssl\n\ntravis: install openssl explicitly"
    },
    {
      "commit": "844e85f21d2252af34aa2a2e9b7eae43ed7dd9a2",
      "tree": "4ca8fbedb8200158bdfd7da3f627f8d5a4e59af2",
      "parents": [
        "bd6928096d7a4c8f26b55a1e9ec710faeee7db93"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Mon Jun 12 20:00:21 2017 +0100"
      },
      "committer": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Mon Jun 12 20:00:21 2017 +0100"
      },
      "message": "travis: install openssl explicitly\n"
    },
    {
      "commit": "fe9a5dd3cab5e5137603503bb461b6a52793d56f",
      "tree": "d80f0796e8fca9b4a9270e6d66b1a910b84c61d7",
      "parents": [
        "2d486781df0828eae716937b23d2df0a9c1817f9"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Mon Jun 12 12:00:14 2017 +0100"
      },
      "committer": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Mon Jun 12 16:51:05 2017 +0100"
      },
      "message": "remote: ensure we can create an anon remote on inmemory repo\n\nGiven a wholly in-memory repository, ensure that we can create an\nanonymous remote and perform actions on it.\n"
    },
    {
      "commit": "2d486781df0828eae716937b23d2df0a9c1817f9",
      "tree": "469e0f9623e35de59b2dac208c924fe34802ce60",
      "parents": [
        "9d49a43c718d0749231ac54adf4b72775cc40354"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Mon Jun 12 12:02:27 2017 +0100"
      },
      "committer": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Mon Jun 12 16:51:04 2017 +0100"
      },
      "message": "repository: don\u0027t fail to create config option in inmemory repo\n\nWhen in an in-memory repository - without a configuration file - do not\nfail to create a configuration object.\n"
    },
    {
      "commit": "9d49a43c718d0749231ac54adf4b72775cc40354",
      "tree": "1d3c2d8dd079ef1d3f1a86ced357c671bd0956cb",
      "parents": [
        "fb3fc837c6e35075a7060d5702cf122f998d3aea"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Mon Jun 12 12:01:10 2017 +0100"
      },
      "committer": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Mon Jun 12 16:51:04 2017 +0100"
      },
      "message": "repository_item_path: return ENOTFOUND when appropriate\n\nDisambiguate error values: return `GIT_ENOTFOUND` when the item cannot\nexist in the repository (perhaps because the repository is inmemory or\notherwise not backed by a filesystem), return `-1` when there is a hard\nfailure.\n"
    },
    {
      "commit": "f148258a35e17d8eacfb91c32ca2b74503e946f0",
      "tree": "01c527a25b7cded45bdca43bc835af54081e15cb",
      "parents": [
        "6e010bb126360d084b1c38056728c7fd3286a443"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Mon Jun 12 16:19:45 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Mon Jun 12 17:24:53 2017 +0200"
      },
      "message": "tests: odb: add tests with multiple backends\n\nPrevious to pulling out and extending the fake backend, it was quite\ncumbersome to write tests for very specific scenarios regarding\nbackends. But as we have made it more generic, it has become much easier\nto do so. As such, this commit adds multiple tests for scenarios with\nmultiple backends for the ODB.\n\nThe changes also include a test for a very targeted scenario. When one\nbackend found a matching object via `read_prefix`, but the last backend\nreturns `GIT_ENOTFOUND` and when object hash verification is turned off,\nwe fail to reset the error code to `GIT_OK`. This causes us to segfault\nlater on, when doing a double-free on the returned object.\n"
    },
    {
      "commit": "6e010bb126360d084b1c38056728c7fd3286a443",
      "tree": "799692f140211ac6f03cbe1af0a0adab732eb192",
      "parents": [
        "369cb45fc300e6a7951c5c9a65bbf0c0f6f32f16"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Mon Jun 12 15:43:56 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Mon Jun 12 17:24:53 2017 +0200"
      },
      "message": "tests: odb: allow passing fake objects to the fake backend\n\nRight now, the fake backend is quite restrained in the way how it\nworks: we pass it an OID which it is to return later as well as an error\ncode we want it to return. While this is sufficient for existing tests,\nwe can make the fake backend a little bit more generic in order to allow\nus testing for additional scenarios.\n\nTo do so, we change the backend to not accept an error code and OID\nwhich it is to return for queries, but instead a simple array of OIDs\nwith their respective blob contents. On each query, the fake backend\nsimply iterates through this array and returns the first matching\nobject.\n"
    },
    {
      "commit": "369cb45fc300e6a7951c5c9a65bbf0c0f6f32f16",
      "tree": "bb9d25f66f769e7b6727a93cd51c65d0f378144c",
      "parents": [
        "2add34d0fbe47e44d17912e2431f57c6935026ef"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Mon Jun 12 15:21:58 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Mon Jun 12 17:24:53 2017 +0200"
      },
      "message": "tests: do not reuse OID from backend\n\nIn order to make the fake backend more useful, we want to enable it\nholding multiple object references. To do so, we need to decouple it\nfrom the single fake OID it currently holds, which we simply move up\ninto the calling tests.\n"
    },
    {
      "commit": "2add34d0fbe47e44d17912e2431f57c6935026ef",
      "tree": "071822b65462d52ab86e8bc775010a46ddf61ccf",
      "parents": [
        "9927e9587aff31c85916028ae9bee2a21a413a8f"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Mon Jun 12 14:53:46 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Mon Jun 12 17:24:53 2017 +0200"
      },
      "message": "tests: odb: move fake backend into its own file\n\nThe fake backend used by the test suite `odb::backend::nonrefreshing` is\nuseful to have some low-level tests for the ODB layer. As such, we move\nthe implementation into its own `backend_helpers` module.\n"
    },
    {
      "commit": "9927e9587aff31c85916028ae9bee2a21a413a8f",
      "tree": "12827c595ba80d3295ab30471b877f79a9bda08b",
      "parents": [
        "2ade8fb0384fe78c33383171f3bb9ee954e4a489",
        "e141f079965c80d87fb6792272284b885b826c32"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Mon Jun 12 16:01:22 2017 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 12 16:01:22 2017 +0100"
      },
      "message": "Merge pull request #4261 from RogerGee/fix_wait_while_ack\n\nsmart_protocol: fix parsing of server ACK responses"
    },
    {
      "commit": "2ade8fb0384fe78c33383171f3bb9ee954e4a489",
      "tree": "543f816c47836c29a70cbac86718763adf623382",
      "parents": [
        "bd6928096d7a4c8f26b55a1e9ec710faeee7db93",
        "cb3010c54a4b35e8799a157bdff4eae0378eb8db"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Mon Jun 12 07:33:41 2017 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 12 07:33:41 2017 -0700"
      },
      "message": "Merge pull request #4264 from libgit2/ethomson/read_prefix\n\nodb_read_prefix: reset error in backends loop"
    },
    {
      "commit": "cb3010c54a4b35e8799a157bdff4eae0378eb8db",
      "tree": "543f816c47836c29a70cbac86718763adf623382",
      "parents": [
        "bd6928096d7a4c8f26b55a1e9ec710faeee7db93"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Mon Jun 12 12:56:40 2017 +0100"
      },
      "committer": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Mon Jun 12 12:56:40 2017 +0100"
      },
      "message": "odb_read_prefix: reset error in backends loop\n\nWhen looking for an object by prefix, we query all the backends so that\nwe can ensure that there is no ambiguity.  We need to reset the `error`\nvalue between backends; otherwise the first backend may find an object\nby prefix, but subsequent backends may not.  If we do not reset the\n`error` value then it will remain at `GIT_ENOTFOUND` and `read_prefix_1`\nwill fail, despite having actually found an object.\n"
    },
    {
      "commit": "fb3fc837c6e35075a7060d5702cf122f998d3aea",
      "tree": "d77ebfcddefe34cea4684d929f8d7aed1d8e08da",
      "parents": [
        "bd6928096d7a4c8f26b55a1e9ec710faeee7db93"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Mon Jun 12 11:45:09 2017 +0100"
      },
      "committer": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Mon Jun 12 11:45:09 2017 +0100"
      },
      "message": "repository_item_path: error messages lowercased\n"
    },
    {
      "commit": "bd6928096d7a4c8f26b55a1e9ec710faeee7db93",
      "tree": "560df6b389c3f396b0396bbaab4b98fff1aa78d5",
      "parents": [
        "29ef7d3f3bb59b1d7896d84de76b5ea93392da90",
        "2a3cc403bd5c331b1601e01d54e3f04ace52a07e"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Sun Jun 11 12:32:00 2017 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 11 12:32:00 2017 +0100"
      },
      "message": "Merge pull request #4262 from libgit2/ethomson/bump-v26\n\nUpdate version number to 0.26"
    },
    {
      "commit": "2a3cc403bd5c331b1601e01d54e3f04ace52a07e",
      "tree": "560df6b389c3f396b0396bbaab4b98fff1aa78d5",
      "parents": [
        "a1b4cafde5bfd64b4599380246ae2f153818ec35"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Sun Jun 11 12:23:34 2017 +0100"
      },
      "committer": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Sun Jun 11 12:23:34 2017 +0100"
      },
      "message": "Update version number to v0.26\n"
    },
    {
      "commit": "a1b4cafde5bfd64b4599380246ae2f153818ec35",
      "tree": "236b67c32d328e113e73327e59fb144a0a6d5f6f",
      "parents": [
        "29ef7d3f3bb59b1d7896d84de76b5ea93392da90"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Sun Jun 11 12:21:23 2017 +0100"
      },
      "committer": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Sun Jun 11 12:21:23 2017 +0100"
      },
      "message": "changelog: add some final 0.26 changes\n"
    },
    {
      "commit": "29ef7d3f3bb59b1d7896d84de76b5ea93392da90",
      "tree": "590def6ef3ee79f919759d276c562c2825c67c6f",
      "parents": [
        "6f960b553b5392db0bf7435f1567b3b1cff71af1",
        "a1510880deec4910ef43fa8f85454457b90aff91"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Sun Jun 11 10:58:35 2017 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 11 10:58:35 2017 +0100"
      },
      "message": "Merge pull request #4254 from pks-t/pks/changelog-v0.26\n\nCHANGELOG: add various changes introduced since v0.25"
    },
    {
      "commit": "6f960b553b5392db0bf7435f1567b3b1cff71af1",
      "tree": "378001e4835c5d4f49bbf387102197d46524655e",
      "parents": [
        "d2c4f7645cab7d9ce0261d03cd7b5226cab90b63",
        "c0e541556600d825779c950ab1a4ce93b6782b09"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Sun Jun 11 10:37:46 2017 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 11 10:37:46 2017 +0100"
      },
      "message": "Merge pull request #4088 from chescock/packfile-name-using-complete-hash\n\nEnsure packfiles with different contents have different names"
    },
    {
      "commit": "d2c4f7645cab7d9ce0261d03cd7b5226cab90b63",
      "tree": "4f1ce4e4889a5002870b431c151efbc7498261f9",
      "parents": [
        "e476d5288cd8195063f775418efd7b7154880beb",
        "4a0df574114f331a2428278c5f72aae7a49fa214"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Sun Jun 11 09:54:04 2017 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 11 09:54:04 2017 +0100"
      },
      "message": "Merge pull request #4260 from libgit2/ethomson/forced_checkout_2\n\nUpdate to forced checkout and untracked files"
    },
    {
      "commit": "4a0df574114f331a2428278c5f72aae7a49fa214",
      "tree": "662bb4f042fa5953aab7f25e2325be55d917ed7b",
      "parents": [
        "83989d70ecd39324a9c262e75ce27b6a33cf78fc"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Sat Jun 10 18:46:35 2017 +0100"
      },
      "committer": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Sat Jun 10 19:18:57 2017 +0100"
      },
      "message": "git_futils_rmdir: only allow `EBUSY` when asked\n\nOnly ignore `EBUSY` from `rmdir` when the `GIT_RMDIR_SKIP_NONEMPTY` bit\nis set.\n"
    },
    {
      "commit": "83989d70ecd39324a9c262e75ce27b6a33cf78fc",
      "tree": "c3230a07092b2679a68a9d25ae96f15cd3e77ef6",
      "parents": [
        "0ef405b3c8c0213282ef15c48462f16d03442bac"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Thu Jun 08 22:23:53 2017 +0100"
      },
      "committer": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Sat Jun 10 19:16:48 2017 +0100"
      },
      "message": "checkout: cope with untracked files in directory deletion\n\nWhen deleting a directory during checkout, do not simply delete the\ndirectory, since there may be untracked files.  Instead, go into\nthe iterator and examine each file.\n\nIn the original code (the code with the faulty assumption), we look to\nsee if there\u0027s an index entry beneath the directory that we want to\nremove.   Eg, it looks to see if we have a workdir entry foo and an\nindex entry foo/bar.txt. If this is not the case, then the working\ndirectory must have precious files in that directory. This part is okay.\nThe part that\u0027s not okay is if there is an index entry foo/bar.txt. It\njust blows away the whole damned directory.\n\nThat\u0027s not cool.\n\nInstead, by simply pushing the directory itself onto the stack and\niterating each entry, we will deal with the files one by one - whether\nthey\u0027re in the index (and can be force removed) or not (and are\nprecious).\n\nThe original code was a bad optimization, assuming that we didn\u0027t need\nto git_iterator_advance_into if there was any index entry in the folder.\nThat\u0027s wrong - we could have optimized this iff all folder entries are\nin the index.\n\nInstead, we need to simply dig into the directory and analyze its\nentries.\n"
    },
    {
      "commit": "0ef405b3c8c0213282ef15c48462f16d03442bac",
      "tree": "1fc9a997d87d2e7982e0db3ecd041f184a53222a",
      "parents": [
        "78b8f0392cebb0d9e2c47b36f8d97ec53c1f0346"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Wed Feb 15 14:05:10 2017 +0100"
      },
      "committer": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Sat Jun 10 19:16:08 2017 +0100"
      },
      "message": "checkout: do not delete directories with untracked entries\n\nIf the `GIT_CHECKOUT_FORCE` flag is given to any of the `git_checkout`\ninvocations, we remove files which were previously staged. But while\ndoing so, we unfortunately also remove unstaged files in a directory\nwhich contains at least one staged file, resulting in potential data\nloss.\n\nThis commit adds two tests to verify behavior.\n"
    },
    {
      "commit": "e141f079965c80d87fb6792272284b885b826c32",
      "tree": "976fcee9b4f4c67e51f07d49f3519281007ec303",
      "parents": [
        "e476d5288cd8195063f775418efd7b7154880beb"
      ],
      "author": {
        "name": "Roger Gee",
        "email": "rpg11a@acu.edu",
        "time": "Sat Jun 10 11:46:09 2017 -0500"
      },
      "committer": {
        "name": "Roger Gee",
        "email": "rpg11a@acu.edu",
        "time": "Sat Jun 10 11:46:09 2017 -0500"
      },
      "message": "smart_protocol: fix parsing of server ACK responses\n\nFix ACK parsing in wait_while_ack() internal function. This patch\nhandles the case where multi_ack_detailed mode sends \u0027ready\u0027 ACKs. The\nexisting functionality would bail out too early, thus causing the\nprocessing of the ensuing packfile to fail if/when \u0027ready\u0027 ACKs were\nsent.\n"
    },
    {
      "commit": "a1510880deec4910ef43fa8f85454457b90aff91",
      "tree": "f104777840c7c95ef67137869658d7713dfa7b20",
      "parents": [
        "40139fe6e62e487e6ccae26df6f9b1ddc9b30b36"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Wed Jun 07 08:32:41 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Fri Jun 09 08:43:22 2017 +0200"
      },
      "message": "CHANGELOG: add various changes introduced since v0.25\n"
    },
    {
      "commit": "e476d5288cd8195063f775418efd7b7154880beb",
      "tree": "8bb883b7d787d5e28d2f68c08b22dc311d0e258e",
      "parents": [
        "458cea5c5b820f9766cb5ba4c3d89830592d655b",
        "6c23704df5d19239f8c3d6f69da62bdbe1cf287d"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Thu Jun 08 22:54:30 2017 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 08 22:54:30 2017 +0200"
      },
      "message": "Merge pull request #4259 from pks-t/pks/fsync-option-rename\n\nsettings: rename `GIT_OPT_ENABLE_SYNCHRONOUS_OBJECT_CREATION`"
    },
    {
      "commit": "6c23704df5d19239f8c3d6f69da62bdbe1cf287d",
      "tree": "8bb883b7d787d5e28d2f68c08b22dc311d0e258e",
      "parents": [
        "458cea5c5b820f9766cb5ba4c3d89830592d655b"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Thu Jun 08 21:40:18 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Thu Jun 08 21:40:18 2017 +0200"
      },
      "message": "settings: rename `GIT_OPT_ENABLE_SYNCHRONOUS_OBJECT_CREATION`\n\nInitially, the setting has been solely used to enable the use of\n`fsync()` when creating objects. Since then, the use has been extended\nto also cover references and index files. As the option is not yet part\nof any release, we can still correct this by renaming the option to\nsomething more sensible, indicating not only correlation to objects.\n\nThis commit renames the option to `GIT_OPT_ENABLE_FSYNC_GITDIR`. We also\nmove the variable from the object to repository source code.\n"
    },
    {
      "commit": "458cea5c5b820f9766cb5ba4c3d89830592d655b",
      "tree": "de88a82e64680e4752ee973acdc1c3a0666e5c8a",
      "parents": [
        "90500d81dcb04ae3bdaf0f6211ca8754d9425b70",
        "a693b8734941889bc9a4c31752d317658162246a"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Thu Jun 08 14:22:24 2017 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 08 14:22:24 2017 +0200"
      },
      "message": "Merge pull request #4255 from pks-t/pks/buffer-grow-errors\n\nBuffer growing cleanups"
    },
    {
      "commit": "90500d81dcb04ae3bdaf0f6211ca8754d9425b70",
      "tree": "8928121e4649bd960bd33c0a5fad1a7c7d38fbcb",
      "parents": [
        "3a8801aeb7160b3059ab9f2cee643c75fd0cab27",
        "90388aa836fc463f87cc9dfd41823022055a40fa"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Thu Jun 08 13:56:22 2017 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 08 13:56:22 2017 +0200"
      },
      "message": "Merge pull request #4253 from pks-t/pks/cov-fixes\n\nCoverity fixes"
    },
    {
      "commit": "90388aa836fc463f87cc9dfd41823022055a40fa",
      "tree": "4c6e5e85790d5f3c1245202109fe6d53d493ee92",
      "parents": [
        "78a8f68f06b51b064020e5f9c3b564ccf3ad02d9"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 06 15:02:23 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Thu Jun 08 12:05:35 2017 +0200"
      },
      "message": "refdb_fs: be explicit about using null-OID if we cannot resolve ref\n"
    },
    {
      "commit": "78a8f68f06b51b064020e5f9c3b564ccf3ad02d9",
      "tree": "bbad168c128618c46da62cba0b4a9b7b36ef649b",
      "parents": [
        "9be4c3039a03be75de17ae82d3e72fe44f7aec7d"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 06 14:57:31 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Thu Jun 08 12:05:35 2017 +0200"
      },
      "message": "path: only set dotgit flags when configs were read\n"
    },
    {
      "commit": "9be4c3039a03be75de17ae82d3e72fe44f7aec7d",
      "tree": "50a461bb7f276b57e40d69b4325a0c544715fbad",
      "parents": [
        "0f642f3168e847c33a9607e4b8562e9ca955b26d"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 06 14:54:48 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Thu Jun 08 12:05:35 2017 +0200"
      },
      "message": "worktree: use `git__free` instead of `free`\n"
    },
    {
      "commit": "0f642f3168e847c33a9607e4b8562e9ca955b26d",
      "tree": "09615715f2a0ccbf1d96e40bed5b3a7ce6f44226",
      "parents": [
        "0c28c72d136548ac4db4422e5192ad273d5460c6"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 06 14:54:19 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Thu Jun 08 12:05:35 2017 +0200"
      },
      "message": "refs: properly report errors from `update_wt_heads`\n"
    },
    {
      "commit": "0c28c72d136548ac4db4422e5192ad273d5460c6",
      "tree": "bde2eef8f05874a3663322b7ce263c9a7d42c365",
      "parents": [
        "dd0aa811dd329f5040c70f7aac514b3757eb2453"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 06 14:53:45 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Thu Jun 08 12:05:35 2017 +0200"
      },
      "message": "fileops: check return value of `git_path_dirname`\n"
    },
    {
      "commit": "a693b8734941889bc9a4c31752d317658162246a",
      "tree": "1d9a188fb5ae048209759036963e0eff48b93681",
      "parents": [
        "4796c916d376af528d8bbf07e8a5e176da6ee928"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Wed Jun 07 10:20:44 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Thu Jun 08 11:58:23 2017 +0200"
      },
      "message": "buffer: use `git_buf_init` with length\n\nThe `git_buf_init` function has an optional length parameter, which will\ncause the buffer to be initialized and allocated in one step. This can\nbe used instead of static initialization with `GIT_BUF_INIT` followed by\na `git_buf_grow`. This patch does so for two functions where it is\napplicable.\n"
    },
    {
      "commit": "4796c916d376af528d8bbf07e8a5e176da6ee928",
      "tree": "0084d43114a42165f68a8bc6bed09b17aa60d6d9",
      "parents": [
        "9a8386a2c649fa74cf90fe95931bc3fc0466f2f6"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Wed Jun 07 09:56:31 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Thu Jun 08 11:58:22 2017 +0200"
      },
      "message": "buffer: return errors for `git_buf_init` and `git_buf_attach`\n\nBoth the `git_buf_init` and `git_buf_attach` functions may call\n`git_buf_grow` in case they were given an allocation length as\nparameter. As such, it is possible for these functions to fail when we\nrun out of memory. While it won\u0027t probably be used anytime soon, it does\nindeed make sense to also record this fact by returning an error code\nfrom both functions. As they belong to the internal API only, this\nchange does not break our interface.\n"
    },
    {
      "commit": "9a8386a2c649fa74cf90fe95931bc3fc0466f2f6",
      "tree": "977ee2137aaaab425e633b5f76b394c8706f591a",
      "parents": [
        "e82dd8130fa1d944b5846f5165a990b97b2590ed"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Wed Jun 07 09:50:54 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Thu Jun 08 11:58:22 2017 +0200"
      },
      "message": "buffer: consistently use `ENSURE_SIZE` to grow buffers on-demand\n\nThe `ENSURE_SIZE` macro can be used to grow a buffer if its currently\nallocated size does not suffice a required target size. While most of\nthe code already uses this macro, the `git_buf_join` and `git_buf_join3`\nfunctions do not yet use it. Due to the macro first checking whether we\nhave to grow the buffer at all, this has the benefit of saving a\nfunction call when it is not needed. While this is nice to have, it will\nprobably not matter at all performance-wise -- instead, this only serves\nfor consistency across the code.\n"
    },
    {
      "commit": "e82dd8130fa1d944b5846f5165a990b97b2590ed",
      "tree": "6dc51ba91da04c871f10639c8e2b3040825bffb5",
      "parents": [
        "97eb5ef0262bc0acf2ce66481105960b79e10ed7"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Thu Jun 08 11:52:32 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Thu Jun 08 11:58:22 2017 +0200"
      },
      "message": "buffer: fix `ENSURE_SIZE` macro referencing wrong variable\n\nWhile the `ENSURE_SIZE` macro gets a reference to both the buffer that\nis to be resized and a new size, we were not consistently referencing\nthe passed buffer, but instead a variable `buf`, which is not passed in.\nFunnily enough, we never noticed because our buffers seem to always be\nnamed `buf` whenever the macro was being used.\n\nFix the macro by always using the passed-in buffer. While at it, add\nbraces around all mentions of passed-in variables as should be done with\nmacros to avoid subtle errors.\n\nFound-by: Edward Thompson\n"
    },
    {
      "commit": "97eb5ef0262bc0acf2ce66481105960b79e10ed7",
      "tree": "3dfdecd584ce89688d2b5b617dc36d4dc3033223",
      "parents": [
        "dd0aa811dd329f5040c70f7aac514b3757eb2453"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Wed Jun 07 10:05:54 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Thu Jun 08 11:58:22 2017 +0200"
      },
      "message": "buffer: rely on `GITERR_OOM` set by `git_buf_try_grow`\n\nThe function `git_buf_try_grow` consistently calls `giterr_set_oom`\nwhenever growing the buffer fails due to insufficient memory being\navailable. So in fact, we do not have to do this ourselves when a call\nto any buffer-growing function has failed due to an OOM situation. But\nwe still do so in two functions, which this patch cleans up.\n"
    },
    {
      "commit": "3a8801aeb7160b3059ab9f2cee643c75fd0cab27",
      "tree": "a8f5e81229dcffb108f73f48ebe01716cef530ca",
      "parents": [
        "3bc95cfe3e46e4107535720335bed3edc0caf7e0",
        "db1abffa50929b6a6298ab53143f90cc3003fe1a"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Thu Jun 08 10:55:47 2017 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 08 10:55:47 2017 +0200"
      },
      "message": "Merge pull request #4258 from pks-t/pks/sha1dc-update\n\nSHA1DC update"
    },
    {
      "commit": "db1abffa50929b6a6298ab53143f90cc3003fe1a",
      "tree": "0dc34ef215a3cb34f323a4e8c116f17d0f8598f7",
      "parents": [
        "63d86c270334d7967b7cc2df762de3ea32e9d439"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Wed Jun 07 14:59:38 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Wed Jun 07 15:03:46 2017 +0200"
      },
      "message": "sha1dc: do not use standard includes\n\nThe updated SHA1DC library allows us to use custom includes instead of\nusing standard includes. Due to requirements with cross-platform, we\nprovide some custom system includes files like for example the\n\"stdint.h\" file on Win32. Because of this, we want to make sure to avoid\nbreaking cross-platform compatibility when SHA1DC is enabled.\n\nTo use the new mechanism, we can simply define\n`SHA1DC_NO_STANDARD_INCLUDES`. Furthermore, we can specify custom\ninclude files via two defines, which we now use to include our\n\"common.h\" header.\n"
    },
    {
      "commit": "63d86c270334d7967b7cc2df762de3ea32e9d439",
      "tree": "a8516d2a5d71ba04ad7b8a76d43e61f2a95b8a7f",
      "parents": [
        "6a13cf1e00fba5f963b273cb00aa54411478fdc5"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Wed Jun 07 14:50:16 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Wed Jun 07 14:50:16 2017 +0200"
      },
      "message": "sha1dc: update to fix errors with endianess and unaligned access\n\nThis updates our version of SHA1DC to e139984 (Merge pull request #35\nfrom lidl/master, 2017-05-30).\n"
    },
    {
      "commit": "3bc95cfe3e46e4107535720335bed3edc0caf7e0",
      "tree": "850d102a6dd4bb2edd813fd73c0219ff6f05e275",
      "parents": [
        "6a13cf1e00fba5f963b273cb00aa54411478fdc5",
        "92d3ea4e398e8fbe3bf59088dc1a9ce8642b23fe"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Wed Jun 07 14:42:12 2017 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 07 14:42:12 2017 +0200"
      },
      "message": "Merge pull request #4236 from pks-t/pks/index-v4-fixes\n\nFix path computations for compressed index entries"
    },
    {
      "commit": "6a13cf1e00fba5f963b273cb00aa54411478fdc5",
      "tree": "144eeef1d940dc37f3c5f5b54de18de2a02f669a",
      "parents": [
        "40139fe6e62e487e6ccae26df6f9b1ddc9b30b36",
        "f218508f4a12b443e00d8d4c3b8a988033cf1872"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Wed Jun 07 13:56:22 2017 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 07 13:56:22 2017 +0200"
      },
      "message": "Merge pull request #4256 from libgit2/ethomson/unc_tests\n\n(Temporarily) disable UNC tests"
    },
    {
      "commit": "f218508f4a12b443e00d8d4c3b8a988033cf1872",
      "tree": "144eeef1d940dc37f3c5f5b54de18de2a02f669a",
      "parents": [
        "40139fe6e62e487e6ccae26df6f9b1ddc9b30b36"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Wed Jun 07 10:54:48 2017 +0100"
      },
      "committer": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Wed Jun 07 10:54:48 2017 +0100"
      },
      "message": "ctest: temporarily disable UNC path tests\n\n(Temporarily) disable UNC path tests to work around AppVeyor issues.\n"
    },
    {
      "commit": "40139fe6e62e487e6ccae26df6f9b1ddc9b30b36",
      "tree": "a30870cd62a7195ab5b4ac3ee36ae68901b2b4fb",
      "parents": [
        "dd0aa811dd329f5040c70f7aac514b3757eb2453",
        "f28744a5a3b11e05d64c4696ad5e9399d0b23b96"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Wed Jun 07 07:38:06 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Wed Jun 07 07:38:06 2017 +0200"
      },
      "message": "Merge pull request #4251 from Keruspe/master\n\nFix build with libressl\n"
    },
    {
      "commit": "f28744a5a3b11e05d64c4696ad5e9399d0b23b96",
      "tree": "a30870cd62a7195ab5b4ac3ee36ae68901b2b4fb",
      "parents": [
        "dd0aa811dd329f5040c70f7aac514b3757eb2453"
      ],
      "author": {
        "name": "Marc-Antoine Perennou",
        "email": "Marc-Antoine@Perennou.com",
        "time": "Mon Jun 05 10:11:20 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Wed Jun 07 07:36:57 2017 +0200"
      },
      "message": "openssl_stream: fix building with libressl\n\nOpenSSL v1.1 has introduced a new way of initializing the library\nwithout having to call various functions of different subsystems. In\nlibgit2, we have been adapting to that change with 88520151f\n(openssl_stream: use new initialization function on OpenSSL version\n\u003e\u003d1.1, 2017-04-07), where we added an #ifdef depending on the OpenSSL\nversion. This change broke building with libressl, though, which has not\nchanged its API in the same way.\n\nFix the issue by expanding the #ifdef condition to use the old way of\ninitializing with libressl.\n\nSigned-off-by: Marc-Antoine Perennou \u003cMarc-Antoine@Perennou.com\u003e\n"
    },
    {
      "commit": "92d3ea4e398e8fbe3bf59088dc1a9ce8642b23fe",
      "tree": "455ed810f8384979e005b9546268b4f5fe939081",
      "parents": [
        "8fe335382a27296ea7fb575cc0644a18b6e81c37"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Fri May 19 13:04:32 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 06 09:38:44 2017 +0200"
      },
      "message": "tests: index::version: improve write test for index v4\n\nThe current write test does not trigger some edge-cases in the index\nversion 4 path compression code. Rewrite the test to start off the an\nempty standard repository, creating index entries with interesting paths\nitself. This allows for more fine-grained control over checked paths.\nFurthermore, we now also verify that entry paths are actually\nreconstructed correctly.\n"
    },
    {
      "commit": "8fe335382a27296ea7fb575cc0644a18b6e81c37",
      "tree": "e8f7a9f3bdcc762e2766f39b997a6cd2c7aa2ea1",
      "parents": [
        "82368b1bad1eae400b9e1f8f0e7a452c1335d4db"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Fri May 19 12:45:48 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 06 09:38:44 2017 +0200"
      },
      "message": "tests: index::version: verify we write compressed index entries\n\nWhile we do have a test which checks whether a written index of version\n4 has the correct version set, we do not check whether this actually\nenables path compression for index entries. This commit adds a new test\nby adding a number of index entries with equal path prefixes to the\nindex and subsequently flushing that to disk. With suffix compression\nenabled by index version 4, only the last few bytes of these paths will\nactually have to be written to the index, saving a lot of disk space.\nFor the test, differences are about an order of magnitude, allowing us\nto easily verify without taking a deeper look at actual on-disk\ncontents.\n"
    },
    {
      "commit": "82368b1bad1eae400b9e1f8f0e7a452c1335d4db",
      "tree": "9bdca94782fb1b14bc3e9dd937c97e3f7bace1ae",
      "parents": [
        "fea0c81e95d5c22b758df6bedbd13321fa2ab195"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Fri May 12 10:04:42 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 06 09:38:44 2017 +0200"
      },
      "message": "tests: index::version: add test to read index version v4\n\nWhile we have a simple test to determine whether we can write an index\nof version 4, we never verified that we are able to read this kind of\nindex (and in fact, we were not able to do so). Add a new repository\nwhich has an index of version 4. This repository is then read from a new\ntest.\n"
    },
    {
      "commit": "fea0c81e95d5c22b758df6bedbd13321fa2ab195",
      "tree": "67c7c2143525088b292684edca54e936b43ae34f",
      "parents": [
        "064a60e96fc0ac134c9cba7b99bd31e1afbef886"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Fri May 12 09:09:07 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 06 09:38:44 2017 +0200"
      },
      "message": "tests: index::version: move up cleanup function\n\nThe init and cleanup functions for test suites are usually prepended to\nour actual tests. The index::version test suite does not adhere to this\nstile. Fix this.\n"
    },
    {
      "commit": "064a60e96fc0ac134c9cba7b99bd31e1afbef886",
      "tree": "4561fc8e306ada8d4356e1d4517748675fc1c738",
      "parents": [
        "c71dff7e8a1bde298972c10901802608bd4cbb55"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Fri May 19 14:06:15 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 06 09:38:44 2017 +0200"
      },
      "message": "index: verify we have enough space left when writing index entries\n\nIn our code writing index entries, we carry around a `disk_size`\nrepresenting how much memory we have in total and pass this value to\n`git_encode_varint` to do bounds checks. This does not make much sense,\nas at the time when passing on this variable it is already out of date.\nFix this by subtracting used memory from `disk_size` as we go along.\nFurthermore, assert we\u0027ve actually got enough space left to do the final\npath memcpy.\n"
    },
    {
      "commit": "c71dff7e8a1bde298972c10901802608bd4cbb55",
      "tree": "8696971e9135dc5b159cb6181387385b6121007c",
      "parents": [
        "83e0392ceadb7e1d9db09a7f013e28759a666e89"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Fri May 19 13:49:34 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 06 09:38:44 2017 +0200"
      },
      "message": "index: fix shared prefix computation when writing index entry\n\nWhen using compressed index entries, each entry\u0027s path is preceded by a\nvarint encoding how long the shared prefix with the previous index entry\nactually is. We currently encode a length of `(path_len - same_len)`,\nwhich is doubly wrong. First, `path_len` is already set to `path_len -\nsame_len` previously. Second, we want to encode the shared prefix rather\nthan the un-shared suffix length.\n\nFix this by using `same_len` as the varint value instead.\n"
    },
    {
      "commit": "83e0392ceadb7e1d9db09a7f013e28759a666e89",
      "tree": "a1ddaaafe0732deda4f8263f9c82faf79b887615",
      "parents": [
        "350d2c47bcbf9d9c09f2b65c9659f0c5c2d683b5"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Fri May 19 13:39:05 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 06 09:38:44 2017 +0200"
      },
      "message": "index: also sanity check entry size with compressed entries\n\nWe have a check in place whether the index has enough data left for the\nrequired footer after reading an index entry, but this was only used for\nuncompressed entries. Move the check down a bit so that it is executed\nfor both compressed and uncompressed index entries.\n"
    },
    {
      "commit": "350d2c47bcbf9d9c09f2b65c9659f0c5c2d683b5",
      "tree": "28c8a1148cf593adc7362fa4ead1986b076e19f3",
      "parents": [
        "46b67034a12555a6ef60d28c02d0d9d15fdc117b"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Fri May 19 14:22:35 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 06 09:38:44 2017 +0200"
      },
      "message": "index: remove file-scope entry size macros\n\nAll index entry size computations are now performed in\n`index_entry_size`. As such, we do not need the file-scope macros for\ncomputing these sizes anymore. Remove them and move the `entry_size`\nmacro into the `index_entry_size` function.\n"
    },
    {
      "commit": "46b67034a12555a6ef60d28c02d0d9d15fdc117b",
      "tree": "140c8640e223259f837953e4982d8360edb9f34d",
      "parents": [
        "29f498e0fd0b4f1001ffed209042d8996956e6aa"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Fri May 19 13:59:53 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 06 09:38:44 2017 +0200"
      },
      "message": "index: don\u0027t right-pad paths when writing compressed entries\n\nOur code to write index entries to disk does not check whether the\nentry that is to be written should use prefix compression for the path.\nAs such, we were overallocating memory and added bogus right-padding\ninto the resulting index entries. As there is no padding allowed in the\nindex version 4 format, this should actually result in an invalid index.\n\nFix this by re-using the newly extracted `index_entry_size` function.\n"
    },
    {
      "commit": "29f498e0fd0b4f1001ffed209042d8996956e6aa",
      "tree": "2b42ce288e40c738e2657b17e4e751b4fdbb85e0",
      "parents": [
        "8ceb890b77fc3ef1ab0fb4ef1d669366734cea85"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Fri May 19 13:38:34 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 06 09:38:44 2017 +0200"
      },
      "message": "index: move index entry size computation into its own function\n\nCreate a new function `index_entry_size` which encapsulates the logic to\ncalculate how much space is needed for an index entry, whether it is\nsimple/extended or compressed/uncompressed. This can later be re-used by\nour code writing index entries.\n"
    },
    {
      "commit": "8ceb890b77fc3ef1ab0fb4ef1d669366734cea85",
      "tree": "c8e89c5e6cea423053c4f26204c09280b80e4421",
      "parents": [
        "11d0be23c481f2df2e03e804c611a0f7d2be1599"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Fri May 19 12:35:21 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 06 09:38:43 2017 +0200"
      },
      "message": "index: set last written index entry in foreach-entry-loop\n\nThe last written disk entry is currently being written inside of the\nfunction `write_disk_entry`. Make behavior a bit more obviously by\ninstead setting it inside of `write_entries` while iterating all\nentries.\n"
    },
    {
      "commit": "11d0be23c481f2df2e03e804c611a0f7d2be1599",
      "tree": "c573fef12d8575300a9eca7d6bf95d1b4ed0b5c2",
      "parents": [
        "febe8c14a0cb3530f49a3990c1ff031d45d12ce6"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Fri May 12 10:01:43 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 06 09:38:43 2017 +0200"
      },
      "message": "index: set last entry when reading compressed entries\n\nTo calculate the path of a compressed index entry, we need to know the\npreceding entry\u0027s path. While we do actually set the first predecessor\ncorrectly to \"\", we fail to update this while reading the entries.\n\nFix the issue by updating `last` inside of the loop. Previously, we\u0027ve\nbeen passing a double-pointer to `read_entry`, which it didn\u0027t update.\nAs it is more obvious to update the pointer inside the loop itself,\nthough, we can simply convert it to a normal pointer.\n"
    },
    {
      "commit": "febe8c14a0cb3530f49a3990c1ff031d45d12ce6",
      "tree": "66654736b6d47a0501d1b266c08b70be4c70c4e0",
      "parents": [
        "8a5e7aaecf7ce48dfab805debfc92458ab1112c5"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Wed May 10 14:27:12 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 06 09:38:43 2017 +0200"
      },
      "message": "index: fix confusion with shared prefix in compressed path names\n\nThe index version 4 introduced compressed path names for the entries.\nFrom the git.git index-format documentation:\n\n    At the beginning of an entry, an integer N in the variable width\n    encoding [...] is stored, followed by a NUL-terminated string S.\n    Removing N bytes from the end of the path name for the previous\n    entry, and replacing it with the string S yields the path name for\n    this entry.\n\nBut instead of stripping N bytes from the previous path\u0027s string and\nusing the remaining prefix, we were instead simply concatenating the\nprevious path with the current entry path, which is obviously wrong.\n\nFix the issue by correctly copying the first N bytes of the previous\nentry only and concatenating the result with our current entry\u0027s path.\n"
    },
    {
      "commit": "8a5e7aaecf7ce48dfab805debfc92458ab1112c5",
      "tree": "8ee94a40b5dd461ff31ae001697cd6b3df545570",
      "parents": [
        "dd0aa811dd329f5040c70f7aac514b3757eb2453"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Mon May 22 12:53:44 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Tue Jun 06 09:33:53 2017 +0200"
      },
      "message": "varint: fix computation for remaining buffer space\n\nWhen encoding varints to a buffer, we want to remain sure that the\nrequired buffer space does not exceed what is actually available. Our\ncurrent check does not do the right thing, though, in that it does not\nhonor that our `pos` variable counts the position down instead of up. As\nsuch, we will require too much memory for small varints and not enough\nmemory for big varints.\n\nFix the issue by correctly calculating the required size as\n`(sizeof(varint) - pos)`. Add a test which failed before.\n"
    },
    {
      "commit": "dd0aa811dd329f5040c70f7aac514b3757eb2453",
      "tree": "1684ec2ac5f1b549489409e25d65f3c9a71d6572",
      "parents": [
        "82e929a88bc79dc5ebd9a8484a40319ac6768c9b",
        "f0848dd7e0d137939eb969af03bd75f9bf318286"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Sun Jun 04 22:46:07 2017 +0100"
      },
      "committer": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Sun Jun 04 22:46:07 2017 +0100"
      },
      "message": "Merge branch \u0027pr/4228\u0027\n"
    },
    {
      "commit": "f0848dd7e0d137939eb969af03bd75f9bf318286",
      "tree": "eff37f7ebcfa02d7472d780152acd706ca334359",
      "parents": [
        "883eeb5f909f230822c0bc025d3f9ce79781de04"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Sun Jun 04 22:44:30 2017 +0100"
      },
      "committer": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Sun Jun 04 22:44:30 2017 +0100"
      },
      "message": "worktree: upgrade lock to an int\n"
    },
    {
      "commit": "82e929a88bc79dc5ebd9a8484a40319ac6768c9b",
      "tree": "442c2fd9ef95053443c01926a01167e4cd1782ad",
      "parents": [
        "04de614b1f421d99240d049763546f2d06421248",
        "c3b8e8b3583b3767f8a0e124893083a15226afec"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Sun Jun 04 19:35:39 2017 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 04 19:35:39 2017 +0200"
      },
      "message": "Merge pull request #4239 from roblg/toplevel-dir-ignore-fix\n\nFix issue with directory glob ignore in subdirectories"
    },
    {
      "commit": "04de614b1f421d99240d049763546f2d06421248",
      "tree": "f11ccf650db4d5593b71edd76e5de8d69d250a2f",
      "parents": [
        "a1023a43027207ac7a5df7233bddfe7347bee256",
        "2696c5c3ece1a28c545d6e59b0d121480e9f977d"
      ],
      "author": {
        "name": "Edward Thomson",
        "email": "ethomson@edwardthomson.com",
        "time": "Sun Jun 04 19:03:07 2017 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 04 19:03:07 2017 +0200"
      },
      "message": "Merge pull request #4243 from pks-t/pks/submodule-workdir\n\nSubmodule working directory"
    },
    {
      "commit": "a1023a43027207ac7a5df7233bddfe7347bee256",
      "tree": "a86bf352caf24b4ae90e3972076a2d03490bd659",
      "parents": [
        "9b1260d36cf94c24eaa318dafab18f4179bc145e",
        "e65b5e960d23113854712ded8fcabd143b14377b"
      ],
      "author": {
        "name": "Carlos Martín Nieto",
        "email": "carlosmn@github.com",
        "time": "Sat May 20 17:18:07 2017 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 20 17:18:07 2017 +0200"
      },
      "message": "Merge pull request #4179 from libgit2/ethomson/expand_tilde\n\nIntroduce home directory expansion function for config files, attribute files"
    },
    {
      "commit": "9b1260d36cf94c24eaa318dafab18f4179bc145e",
      "tree": "c8cf8b520b17c1491621b4d70c628d1b826aa532",
      "parents": [
        "e694e4e9545bcbe7841cdacdbbe4a984af094f63",
        "39e76bb346760ad1183e8253186df3044752341e"
      ],
      "author": {
        "name": "Carlos Martín Nieto",
        "email": "carlosmn@github.com",
        "time": "Sat May 20 14:18:32 2017 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 20 14:18:32 2017 +0200"
      },
      "message": "Merge pull request #4097 from implausible/fix/auto-detect-proxy-callbacks\n\nFix proxy auto detect not utilizing callbacks"
    },
    {
      "commit": "e694e4e9545bcbe7841cdacdbbe4a984af094f63",
      "tree": "d0fff42c82c0b12ccee07204bb0ab0b5a6f26dc9",
      "parents": [
        "119bdd86582b3e98a107531def666c8ac7bb15b1",
        "e86d02f92de2c446b370e4711dcfe2ea5ce75166"
      ],
      "author": {
        "name": "Carlos Martín Nieto",
        "email": "carlosmn@github.com",
        "time": "Sat May 20 14:17:36 2017 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 20 14:17:36 2017 +0200"
      },
      "message": "Merge pull request #4174 from libgit2/ethomson/set_head_to_tag\n\ngit_repository_set_head: use tag name in reflog"
    },
    {
      "commit": "119bdd86582b3e98a107531def666c8ac7bb15b1",
      "tree": "3ea399a45cccfc2ef2bfe53890382d5bfbc4cbe8",
      "parents": [
        "924f5d129ea826b9ce93dc62eb1a8d445788d832",
        "8b107dc5e1cd0745628e2bfb473477342c719f25"
      ],
      "author": {
        "name": "Carlos Martín Nieto",
        "email": "carlosmn@github.com",
        "time": "Sat May 20 14:13:27 2017 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 20 14:13:27 2017 +0200"
      },
      "message": "Merge pull request #4231 from wabain/open-revrange\n\nrevparse: support open-ended ranges"
    },
    {
      "commit": "c0e541556600d825779c950ab1a4ce93b6782b09",
      "tree": "5c2f109d1fa4d6aaf4acacdb464bcbef96f72912",
      "parents": [
        "1196807380b73f202bc1fea3045e13b719a465e9"
      ],
      "author": {
        "name": "Chris Hescock",
        "email": "chescock@vistaprint.com",
        "time": "Wed Jan 11 10:39:59 2017 -0500"
      },
      "committer": {
        "name": "Chris Hescock",
        "email": "chescock@vistaprint.com",
        "time": "Fri May 19 10:10:54 2017 -0400"
      },
      "message": "indexer: name pack files after trailer hash\n\nUpstream git.git has changed the way how packfiles are named.\nPreviously, they were using a hash of the contained object\u0027s OIDs, which\nhas then been changed to use the hash of the complete packfile instead.\nSee 1190a1acf (pack-objects: name pack files after trailer hash,\n2013-12-05) in the git.git repository for more information on this\nchange.\n\nThis commit changes our logic to match the behavior of core git.\n"
    },
    {
      "commit": "2696c5c3ece1a28c545d6e59b0d121480e9f977d",
      "tree": "5a9f2a5fe87ce832fb7d9cb9b752c1f82703220f",
      "parents": [
        "9f9fd05f1cb9278a34a265c49c8567b526e48afd"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Fri May 19 09:21:17 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Fri May 19 09:44:44 2017 +0200"
      },
      "message": "repository: make check if repo is a worktree more strict\n\nTo determine if a repository is a worktree or not, we currently check\nfor the existence of a \"gitdir\" file inside of the repository\u0027s gitdir.\nWhile this is sufficient for non-broken repositories, we have at least\none case of a subtly broken repository where there exists a gitdir file\ninside of a gitmodule. This will cause us to misidentify the submodule\nas a worktree.\n\nWhile this is not really a fault of ours, we can do better here by\nobserving that a repository can only ever be a worktree iff its common\ndirectory and dotgit directory are different. This allows us to make our\ncheck whether a repo is a worktree or not more strict by doing a simple\nstring comparison of these two directories. This will also allow us to\ndo the right thing in the above case of a broken repository, as for\nsubmodules these directories will be the same. At the same time, this\nallows us to skip the `stat` check for the \"gitdir\" file for most\nrepositories.\n"
    },
    {
      "commit": "9f9fd05f1cb9278a34a265c49c8567b526e48afd",
      "tree": "38948cd625b15702c9289d2405ca663818ada825",
      "parents": [
        "32841973f1ee4d6432206b333a9907f3d14a5307"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Fri May 19 08:59:46 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Fri May 19 09:01:21 2017 +0200"
      },
      "message": "repository: factor out worktree check\n\nThe check whether a repository is a worktree or not is currently done\ninside of `git_repository_open_ext`. As we want to extend this function\nlater on, pull it out into its own function `repo_is_worktree` to ease\nworking on it.\n"
    },
    {
      "commit": "32841973f1ee4d6432206b333a9907f3d14a5307",
      "tree": "0ecb4543e1b834cba9b05916d93ef84c23a11dec",
      "parents": [
        "57121a2377b695c4377e734f81f52abda97fc5b7"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Fri May 19 08:38:47 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Fri May 19 08:38:47 2017 +0200"
      },
      "message": "repository: improve parameter names for `find_repo`\n\nThe out-parameters of `find_repo` containing found paths of a repository\nare a tad confusing, as they are not as obvious as they could be. Rename\nthem like following to ease reading the code:\n\n- `repo_path` -\u003e `gitdir_path`\n- `parent_path` -\u003e `workdir_path`\n- `link_path` -\u003e `gitlink_path`\n- `common_path` -\u003e `commondir_path`\n"
    },
    {
      "commit": "57121a2377b695c4377e734f81f52abda97fc5b7",
      "tree": "53b166177bd44a6ecc7e1388bc337561e60c9a35",
      "parents": [
        "e526fbc703af90a651a3aeb0b3147df45dd0d44a"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Fri May 19 08:34:32 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Fri May 19 08:34:32 2017 +0200"
      },
      "message": "repository: clear out-parameter instead of freeing it\n\nThe `path` out-parameter of `find_repo` is being sanitized initially\nsuch that we do not try to append to existing content. The sanitization\nis done via `git_buf_free`, though, which forces us to needlessly\nreallocate the buffer later in the function. Fix this by using\n`git_buf_clear` instead.\n"
    },
    {
      "commit": "c3b8e8b3583b3767f8a0e124893083a15226afec",
      "tree": "a589f692b53dbaa3d7b42036932010f77c02ca00",
      "parents": [
        "87f5fbabdcd2318e136a142b9fcddf5614348546"
      ],
      "author": {
        "name": "Robert Gay",
        "email": "robertgay@gmail.com",
        "time": "Sun May 14 10:28:05 2017 -0700"
      },
      "committer": {
        "name": "Robert Gay",
        "email": "robertgay@gmail.com",
        "time": "Wed May 17 08:24:11 2017 -0700"
      },
      "message": "Fix issue with directory glob ignore in subdirectories\n"
    },
    {
      "commit": "e526fbc703af90a651a3aeb0b3147df45dd0d44a",
      "tree": "92f1be0b836526a34550518022a9b0ee7b74c262",
      "parents": [
        "924f5d129ea826b9ce93dc62eb1a8d445788d832"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Wed May 17 09:23:06 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Wed May 17 09:41:48 2017 +0200"
      },
      "message": "tests: add test suite for opening submodules\n"
    },
    {
      "commit": "924f5d129ea826b9ce93dc62eb1a8d445788d832",
      "tree": "a922d080a777cb649c862b255fa8c6f17e4055f4",
      "parents": [
        "87f5fbabdcd2318e136a142b9fcddf5614348546",
        "98a5f081c52ab3d85b98a522dec3a95f80f29eda"
      ],
      "author": {
        "name": "Carlos Martín Nieto",
        "email": "carlosmn@github.com",
        "time": "Tue May 16 18:02:13 2017 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 16 18:02:13 2017 +0200"
      },
      "message": "Merge pull request #4240 from pks-t/pks/fix-gcc-warnings\n\nFix GCC warnings"
    },
    {
      "commit": "98a5f081c52ab3d85b98a522dec3a95f80f29eda",
      "tree": "6f469ef85ef3090169f2a3ff5cfde96c8162e49e",
      "parents": [
        "7d7f6d332c4011f1e7963958ea09a8cd59178685"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Wed May 03 13:53:13 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Mon May 15 07:34:04 2017 +0200"
      },
      "message": "tests: threads::basic: remove unused function `exit_abruptly`\n"
    },
    {
      "commit": "7d7f6d332c4011f1e7963958ea09a8cd59178685",
      "tree": "c60b8c77cf87ee01e6bf56f6d241e81714dbdc23",
      "parents": [
        "8d93a11cffa8199d212124401fdca64b5ae3bacc"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Wed May 03 13:52:55 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Mon May 15 07:34:04 2017 +0200"
      },
      "message": "tests: clone::local: compile UNC functions for Windows only\n"
    },
    {
      "commit": "8d93a11cffa8199d212124401fdca64b5ae3bacc",
      "tree": "adff296645dc96ba187155aa1b9dadd3eb0e4916",
      "parents": [
        "f0ca00e013885479228c4f076989566a2b77221b"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Wed May 03 12:38:55 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Mon May 15 07:34:04 2017 +0200"
      },
      "message": "odb: fix printf formatter for git_off_t\n\nThe fields `declared_size` and `received_bytes` of the `git_odb_stream`\nare both of type `git_off_t` which is defined as a signed integer. When\npassing these values to a printf-style string in\n`git_odb_stream__invalid_length`, though, we format these as PRIuZ,\nwhich is unsigned.\n\nFix the issue by using PRIdZ instead, silencing warnings on macOS.\n"
    },
    {
      "commit": "f0ca00e013885479228c4f076989566a2b77221b",
      "tree": "22d973cf6fc33ddb53c0a41c8175010eb936040a",
      "parents": [
        "7776db51bbc0256b994f4b4037213938af6c4d73"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Wed May 03 12:25:48 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Mon May 15 07:34:03 2017 +0200"
      },
      "message": "examples: network: refactor credentials callback\n\nThe credentials callback reads the username and password via scanf into\nfixed-length arrays. While these are simply examples and as such not as\ninteresting, the unchecked return value of scanf causes GCC to emit\nwarnings. So while we\u0027re busy to shut up GCC, we also fix the possible\noverflow of scanf by using getline instead.\n"
    },
    {
      "commit": "7776db51bbc0256b994f4b4037213938af6c4d73",
      "tree": "d3957519730cc76d510f7d11878127e41baab895",
      "parents": [
        "1b6ab16fa5ab1b3f827045a3a9181519281f9892"
      ],
      "author": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Wed May 03 12:15:12 2017 +0200"
      },
      "committer": {
        "name": "Patrick Steinhardt",
        "email": "ps@pks.im",
        "time": "Mon May 15 07:34:03 2017 +0200"
      },
      "message": "odb: shut up gcc warnings regarding uninitilized variables\n\nThe `error` variable is used as a return value in the out-section of\nboth `odb_read_1` and `read_prefix_1`. While the value will actually\nalways be initialized inside of this section, GCC fails to realize this\ndue to interactions with the `found` variable: if `found` is set, the\nerror will always be initialized. If it is not, we return early without\nreaching the out-statements.\n\nShut up the warnings by initializing the error variable, even though it\nis unnecessary.\n"
    }
  ],
  "next": "87f5fbabdcd2318e136a142b9fcddf5614348546"
}
