)]}'
{
  "log": [
    {
      "commit": "38117c96514100e710866d1f11f09504599b44bd",
      "tree": "3e7b46e51eadab89eefce013d777bfb68f3afa3e",
      "parents": [
        "0f91c9989e0d8c07bfe6e751b8d12ba2722b1b91"
      ],
      "author": {
        "name": "P.Y. Laligand",
        "email": "pylaligand@google.com",
        "time": "Wed Nov 22 17:08:11 2017 -0800"
      },
      "committer": {
        "name": "P.Y. Laligand",
        "email": "pylaligand@google.com",
        "time": "Wed Nov 22 17:08:11 2017 -0800"
      },
      "message": "Update path to package template\n\nChange-Id: I65b28a387ada486086d74bb2aa0253e1b76d95e0\n"
    },
    {
      "commit": "0f91c9989e0d8c07bfe6e751b8d12ba2722b1b91",
      "tree": "270dcde7a403b461774c45e79a9a0bb0b03144c4",
      "parents": [
        "0220cd45980e8d7062ca1e7112f70ad9fa7a7f7d"
      ],
      "author": {
        "name": "Adam Barth",
        "email": "abarth@google.com",
        "time": "Thu Nov 02 09:57:59 2017 -0700"
      },
      "committer": {
        "name": "Adam Barth",
        "email": "abarth@google.com",
        "time": "Thu Nov 02 09:57:59 2017 -0700"
      },
      "message": "[build] Add system_image property to package()\n\nChange-Id: If5ea83ea89d4445f1f092470be88cccf807bdada\n"
    },
    {
      "commit": "0220cd45980e8d7062ca1e7112f70ad9fa7a7f7d",
      "tree": "1f20fe435e3ee265e2db2c01e822a6066c213b86",
      "parents": [
        "16e813fa69d7252f34432e5eaa410adaa1000434"
      ],
      "author": {
        "name": "George Kulakowski",
        "email": "kulakowski@google.com",
        "time": "Thu Sep 14 15:11:08 2017 -0700"
      },
      "committer": {
        "name": "Michael Jurka",
        "email": "mikejurka@google.com",
        "time": "Thu Sep 14 22:11:59 2017 -0700"
      },
      "message": "Rename Magenta to Zircon\n\nChange-Id: I1a78823670bd7560f223489989c8fe8eea290ad9"
    },
    {
      "commit": "16e813fa69d7252f34432e5eaa410adaa1000434",
      "tree": "500152ad67f9171f3d63df7956f6f36296c780a2",
      "parents": [
        "bc445f5ed9d9f908cb4c4724e625ed2e86efd1bd"
      ],
      "author": {
        "name": "Adam Barth",
        "email": "abarth@chromium.org",
        "time": "Mon Jun 26 15:09:24 2017 -0700"
      },
      "committer": {
        "name": "Adam Barth",
        "email": "abarth@chromium.org",
        "time": "Mon Jun 26 15:09:24 2017 -0700"
      },
      "message": "Replace LP_CLONE_MXIO_ROOT with LP_CLONE_MXIO_NAMESPACE\n\nLP_CLONE_MXIO_NAMESPACE is the new name for this flag.\n\nChange-Id: Ibf4a21513f4918ddafe7decc0c889fc3eea6a060\n"
    },
    {
      "commit": "bc445f5ed9d9f908cb4c4724e625ed2e86efd1bd",
      "tree": "e37dc8968c8d42635f6a89cdcb78c8b9f6f298e8",
      "parents": [
        "88348cfb7910dcecbce7b1482e8bcc7cd3af2a17"
      ],
      "author": {
        "name": "George Kulakowski",
        "email": "kulakowski@google.com",
        "time": "Tue Jun 13 13:38:47 2017 -0700"
      },
      "committer": {
        "name": "George Kulakowski",
        "email": "kulakowski@google.com",
        "time": "Tue Jun 13 13:38:47 2017 -0700"
      },
      "message": "Use MX_OK instead of NO_ERROR\n\nChange-Id: I08ff890255d00f0345dbe51038a0cbe8914b9f43\n"
    },
    {
      "commit": "88348cfb7910dcecbce7b1482e8bcc7cd3af2a17",
      "tree": "957327c74070a2ffb21f6fcd431fa76d3d96edb8",
      "parents": [
        "32f886815b7f9ffc60839168930f6b9e3dcc6bc5"
      ],
      "author": {
        "name": "James Robinson",
        "email": "jamesr@google.com",
        "time": "Tue Jun 06 14:44:42 2017 -0700"
      },
      "committer": {
        "name": "James Robinson",
        "email": "jamesr@google.com",
        "time": "Tue Jun 06 14:44:42 2017 -0700"
      },
      "message": "Add package config for git\n\nChange-Id: If3180af3568237b5650415000694c57b5c91b3c3\n"
    },
    {
      "commit": "32f886815b7f9ffc60839168930f6b9e3dcc6bc5",
      "tree": "17a8b5ef5a3f1a3b432b6efe5d6b43feea8cbd3c",
      "parents": [
        "073c2384e83ed943dc68994d3da3d06f5542e5bd"
      ],
      "author": {
        "name": "James Robinson",
        "email": "jamesr@google.com",
        "time": "Mon May 22 13:52:17 2017 -0700"
      },
      "committer": {
        "name": "James Robinson",
        "email": "jamesr@google.com",
        "time": "Mon May 22 13:52:18 2017 -0700"
      },
      "message": "Remove Fuchsia-specific fstat workaround\n\nfstat() now works properly on pipe files, so we don\u0027t need to work\naround this check.\n\nChange-Id: I1c73c730e835217c3d1e90a1b8c3ee0fe1d38713\n"
    },
    {
      "commit": "073c2384e83ed943dc68994d3da3d06f5542e5bd",
      "tree": "d08eae6574c6abc99e132bc69bb31142e1d6a7dd",
      "parents": [
        "9d77b0405ce6b471cb5ce3a904368fc25e55643d"
      ],
      "author": {
        "name": "James Robinson",
        "email": "jamesr@google.com",
        "time": "Tue Mar 28 13:54:12 2017 -0700"
      },
      "committer": {
        "name": "James Robinson",
        "email": "jamesr@google.com",
        "time": "Tue May 16 15:57:42 2017 -0700"
      },
      "message": "Port git to Fuchsia, add build files, etc\n\nThis provides a basic port of git and some subcommands to Fuchsia and\nadds a GN build. This is sufficient to run basic local git commands and\nclone repositories over https.\n\nChange-Id: I2e0221e498f80f81be70e595500c1ba09bbedc4a\n"
    },
    {
      "commit": "9d77b0405ce6b471cb5ce3a904368fc25e55643d",
      "tree": "9b9d85d24ff3dd1bf44a65e6d479c3b412179013",
      "parents": [
        "9c96637163ef26c7726e693984c2d4d9599d4e7e"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:51:58 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:51:58 2017 -0700"
      },
      "message": "Fifth batch for 2.13\n\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "9c96637163ef26c7726e693984c2d4d9599d4e7e",
      "tree": "23ff95a0b958cb006f75f155a3aef4b54c320ec9",
      "parents": [
        "a0393a298fecff8cdc17aba51245f29433520d81",
        "b16a991c1be5681b4b673d4343dfcc0c2f5ad498"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:28 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:28 2017 -0700"
      },
      "message": "Merge branch \u0027jk/cherry-pick-0-mainline\u0027\n\n\"git revert -m 0 $merge_commit\" complained that reverting a merge\nneeds to say relative to which parent the reversion needs to\nhappen, as if \"-m 0\" weren\u0027t given.  The correct diagnosis is that\n\"-m 0\" does not refer to the first parent (\"-m 1\" does).  This has\nbeen fixed.\n\n* jk/cherry-pick-0-mainline:\n  cherry-pick: detect bogus arguments to --mainline\n"
    },
    {
      "commit": "a0393a298fecff8cdc17aba51245f29433520d81",
      "tree": "a6491d24988a63b067193fc852902ae41933b00d",
      "parents": [
        "81944e9b54039f8475d1df5c40e5a1055eae14f6",
        "5c4003ca3f0e9ac6d3c8aa3e387ff843bd440411"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:28 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:28 2017 -0700"
      },
      "message": "Merge branch \u0027js/early-config\u0027\n\nThe start-up sequence of \"git\" needs to figure out some configured\nsettings before it finds and set itself up in the location of the\nrepository and was quite messy due to its \"chicken-and-egg\" nature.\nThe code has been restructured.\n\n* js/early-config:\n  setup.c: mention unresolved problems\n  t1309: document cases where we would want early config not to die()\n  setup_git_directory_gently_1(): avoid die()ing\n  t1309: test read_early_config()\n  read_early_config(): really discover .git/\n  read_early_config(): avoid .git/config hack when unneeded\n  setup: make read_early_config() reusable\n  setup: introduce the discover_git_directory() function\n  setup_git_directory_1(): avoid changing global state\n  setup: prepare setup_discovered_git_dir() for the root directory\n  setup_git_directory(): use is_dir_sep() helper\n  t7006: replace dubious test\n"
    },
    {
      "commit": "81944e9b54039f8475d1df5c40e5a1055eae14f6",
      "tree": "7380115d867612f500f48bc89e6ccc9046e809a3",
      "parents": [
        "58e97730d9868364ea63afbf3ee94fc9b3f3a075",
        "f18f816cb1586e9aab3e30a7144768e0d282d305"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:27 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:27 2017 -0700"
      },
      "message": "Merge branch \u0027bc/sha1-header-selection-with-cpp-macros\u0027\n\nOur source code has used the SHA1_HEADER cpp macro after \"#include\"\nin the C code to switch among the SHA-1 implementations. Instead,\nlist the exact header file names and switch among implementations\nusing \"#ifdef BLK_SHA1/#include \"block-sha1/sha1.h\"/.../#endif\";\nthis helps some IDE tools.\n\n* bc/sha1-header-selection-with-cpp-macros:\n  hash.h: move SHA-1 implementation selection into a header file\n"
    },
    {
      "commit": "58e97730d9868364ea63afbf3ee94fc9b3f3a075",
      "tree": "e4f7c68a340635c22f003072b322fa493ff396c2",
      "parents": [
        "153e0d762c15d8a85f0070cd01aff45f5c232e3f",
        "b9e2bc560a1ea29ff833981d5bc70323c265bdb7"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:27 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:27 2017 -0700"
      },
      "message": "Merge branch \u0027mg/status-porcelain-no-i18n\u0027\n\n\"git status --porcelain\" is supposed to give a stable output, but a\nfew strings were left as translatable by mistake.\n\n* mg/status-porcelain-no-i18n:\n  git-status: make porcelain more robust\n"
    },
    {
      "commit": "153e0d762c15d8a85f0070cd01aff45f5c232e3f",
      "tree": "ce30e210659f99624eb5af4ffcc53266c0070731",
      "parents": [
        "2af882be0181ee29aa3a4fb3181b94e9bca53c51",
        "7288e12cce5db87216eba16441a2c37206e5dcad"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:26 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:26 2017 -0700"
      },
      "message": "Merge branch \u0027jk/add-i-use-pathspecs\u0027\n\n\"git add -p \u003cpathspec\u003e\" unnecessarily expanded the pathspec to a\nlist of individual files that matches the pathspec by running \"git\nls-files \u003cpathspec\u003e\", before feeding it to \"git diff-index\" to see\nwhich paths have changes, because historically the pathspec\nlanguage supported by \"diff-index\" was weaker.  These days they are\nequivalent and there is no reason to internally expand it.  This\nhelps both performance and avoids command line argument limit on\nsome platforms.\n\n* jk/add-i-use-pathspecs:\n  add--interactive: do not expand pathspecs with ls-files\n"
    },
    {
      "commit": "2af882be0181ee29aa3a4fb3181b94e9bca53c51",
      "tree": "272c989fa1da86097b72e11a61079623515f459e",
      "parents": [
        "f6c64c648ade843b44d517b2de41b8b882f112c0",
        "d61434ae813cc86a1a87d05cc61e36e87b0e20a9"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:26 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:26 2017 -0700"
      },
      "message": "Merge branch \u0027jk/http-walker-buffer-underflow-fix\u0027\n\n\"Dumb http\" transport used to misparse a nonsense http-alternates\nresponse, which has been fixed.\n\n* jk/http-walker-buffer-underflow-fix:\n  http-walker: fix buffer underflow processing remote alternates\n"
    },
    {
      "commit": "f6c64c648ade843b44d517b2de41b8b882f112c0",
      "tree": "e1ca564c6a9d4ceff87c40944bbb14211207c767",
      "parents": [
        "60cf6cd71af2c3a530ac9fad57579a7b10e862ee",
        "c5af19f9ab4cd8582689ca9d9c84f188f4442d10"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:26 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:26 2017 -0700"
      },
      "message": "Merge branch \u0027bw/attr-pathspec\u0027\n\nThe pathspec mechanism learned to further limit the paths that\nmatch the pattern to those that have specified attributes attached\nvia the gitattributes mechanism.\n\n* bw/attr-pathspec:\n  pathspec: allow escaped query values\n  pathspec: allow querying for attributes\n"
    },
    {
      "commit": "60cf6cd71af2c3a530ac9fad57579a7b10e862ee",
      "tree": "8a1c478bb38cedc85fd15db29662df687c94ec32",
      "parents": [
        "3edcc048621fee389be6991c90b6a7dd0386c57e",
        "a91aca44bf4b3746c3ce03583a1b3418d1610ef7"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:25 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:25 2017 -0700"
      },
      "message": "Merge branch \u0027jk/ref-filter-flags-cleanup\u0027\n\n\"git tag --contains\" used to (ab)use the object bits to keep track\nof the state of object reachability without clearing them after\nuse; this has been cleaned up and made to use the newer commit-slab\nfacility.\n\n* jk/ref-filter-flags-cleanup:\n  ref-filter: use separate cache for contains_tag_algo\n  ref-filter: die on parse_commit errors\n  ref-filter: use contains_result enum consistently\n  ref-filter: move ref_cbdata definition into ref-filter.c\n"
    },
    {
      "commit": "3edcc048621fee389be6991c90b6a7dd0386c57e",
      "tree": "936f84111d29e56d42f008999fa3818823853855",
      "parents": [
        "e1fae930193b3e8ff02cee936605625f63e1d1e4",
        "bf0231c66140be5194ac76a4a9f79e949c588293"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:25 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:25 2017 -0700"
      },
      "message": "Merge branch \u0027sb/rev-parse-show-superproject-root\u0027\n\nFrom a working tree of a repository, a new option of \"rev-parse\"\nlets you ask if the repository is used as a submodule of another\nproject, and where the root level of the working tree of that\nproject (i.e. your superproject) is.\n\n* sb/rev-parse-show-superproject-root:\n  rev-parse: add --show-superproject-working-tree\n"
    },
    {
      "commit": "e1fae930193b3e8ff02cee936605625f63e1d1e4",
      "tree": "90ad9f3e50d1f1d6acd174ecb4dc0a8bbc28df27",
      "parents": [
        "0a4ae91d1cf72b1185a46e5f072ac6b25b92350b",
        "e86ab2c1cd60ec4b9214e5cd8450a474fa175f5c"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:24 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:25 2017 -0700"
      },
      "message": "Merge branch \u0027bc/object-id\u0027\n\n\"uchar [40]\" to \"struct object_id\" conversion continues.\n\n* bc/object-id:\n  wt-status: convert to struct object_id\n  builtin/merge-base: convert to struct object_id\n  Convert object iteration callbacks to struct object_id\n  sha1_file: introduce an nth_packed_object_oid function\n  refs: simplify parsing of reflog entries\n  refs: convert each_reflog_ent_fn to struct object_id\n  reflog-walk: convert struct reflog_info to struct object_id\n  builtin/replace: convert to struct object_id\n  Convert remaining callers of resolve_refdup to object_id\n  builtin/merge: convert to struct object_id\n  builtin/clone: convert to struct object_id\n  builtin/branch: convert to struct object_id\n  builtin/grep: convert to struct object_id\n  builtin/fmt-merge-message: convert to struct object_id\n  builtin/fast-export: convert to struct object_id\n  builtin/describe: convert to struct object_id\n  builtin/diff-tree: convert to struct object_id\n  builtin/commit: convert to struct object_id\n  hex: introduce parse_oid_hex\n"
    },
    {
      "commit": "0a4ae91d1cf72b1185a46e5f072ac6b25b92350b",
      "tree": "83469f2d205b980636228796adeed4b05aed8691",
      "parents": [
        "0bb80ab090fadc99d3d19d23209ddfb7e4f54b3d",
        "dfa3ad32386f95ae954d65163152f8130e3586a3"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:24 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:24 2017 -0700"
      },
      "message": "Merge branch \u0027rs/blame-code-cleanup\u0027\n\nCode clean-up.\n\n* rs/blame-code-cleanup:\n  blame: move blame_entry duplication to add_blame_entry()\n"
    },
    {
      "commit": "0bb80ab090fadc99d3d19d23209ddfb7e4f54b3d",
      "tree": "5fea17cdffbdfbfdb39c16b0f07ffdeb0495a7cb",
      "parents": [
        "94c9b5af703eb70adba349cfbfaaa3029849744c",
        "bd4d9d993c1202615178f86a947a5c63e706860f"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:23 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:24 2017 -0700"
      },
      "message": "Merge branch \u0027jk/interop-test\u0027\n\nPicking two versions of Git and running tests to make sure the\nolder one and the newer one interoperate happily has now become\npossible.\n\n* jk/interop-test:\n  t/interop: add test of old clients against modern git-daemon\n  t: add an interoperability test harness\n"
    },
    {
      "commit": "94c9b5af703eb70adba349cfbfaaa3029849744c",
      "tree": "cfb8557c71f0f2f8b586c63b9d51ae3a4745b48b",
      "parents": [
        "32c43f595f93cdd4ed5305aef97a3f6aaa74ed72",
        "b46013950aff31b6626af96ccbf2c48469e36c66"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:23 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 17 13:50:23 2017 -0700"
      },
      "message": "Merge branch \u0027cc/split-index-config\u0027\n\nThe experimental \"split index\" feature has gained a few\nconfiguration variables to make it easier to use.\n\n* cc/split-index-config: (22 commits)\n  Documentation/git-update-index: explain splitIndex.*\n  Documentation/config: add splitIndex.sharedIndexExpire\n  read-cache: use freshen_shared_index() in read_index_from()\n  read-cache: refactor read_index_from()\n  t1700: test shared index file expiration\n  read-cache: unlink old sharedindex files\n  config: add git_config_get_expiry() from gc.c\n  read-cache: touch shared index files when used\n  sha1_file: make check_and_freshen_file() non static\n  Documentation/config: add splitIndex.maxPercentChange\n  t1700: add tests for splitIndex.maxPercentChange\n  read-cache: regenerate shared index if necessary\n  config: add git_config_get_max_percent_split_change()\n  Documentation/git-update-index: talk about core.splitIndex config var\n  Documentation/config: add information for core.splitIndex\n  t1700: add tests for core.splitIndex\n  update-index: warn in case of split-index incoherency\n  read-cache: add and then use tweak_split_index()\n  split-index: add {add,remove}_split_index() functions\n  config: add git_config_get_split_index()\n  ...\n"
    },
    {
      "commit": "32c43f595f93cdd4ed5305aef97a3f6aaa74ed72",
      "tree": "0bcc36aeb01f7f074a2b7a687815add26cb1b506",
      "parents": [
        "4a9b9b32d47212e4ea43cd1fa3c11afef6d4c491",
        "7c9c2f8c394a4c1f4e09d6d5542c4e7965cc9240"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Thu Mar 16 14:03:11 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Thu Mar 16 14:03:11 2017 -0700"
      },
      "message": "Sync with \u0027maint\u0027\n\n* maint:\n  Preparing for 2.12.1\n"
    },
    {
      "commit": "7c9c2f8c394a4c1f4e09d6d5542c4e7965cc9240",
      "tree": "8b98b9a9c8bfd63fec2a0244bab80f8b52a33ef5",
      "parents": [
        "2846ef3e27ff0e34812dad788b706f0a1e5b5e80"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Thu Mar 16 14:01:00 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Thu Mar 16 14:01:20 2017 -0700"
      },
      "message": "Preparing for 2.12.1\n\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "2846ef3e27ff0e34812dad788b706f0a1e5b5e80",
      "tree": "92b0e57a6b599bd3a4e255d6bb67b7eff2091681",
      "parents": [
        "f989ac276d310564364482979a78b83d113c4044",
        "ce83eadd9a2c63db6263df91933da1b1b865d26a"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Thu Mar 16 13:56:43 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Thu Mar 16 13:57:00 2017 -0700"
      },
      "message": "Merge branch \u0027js/realpath-pathdup-fix\u0027 into maint\n\nGit v2.12 was shipped with an embarrassing breakage where various\noperations that verify paths given from the user stopped dying when\nseeing an issue, and instead later triggering segfault.\n... and then to down to \u0027maint\u0027.\n\n* js/realpath-pathdup-fix:\n  real_pathdup(): fix callsites that wanted it to die on error\n  t1501: demonstrate NULL pointer access with invalid GIT_WORK_TREE\n"
    },
    {
      "commit": "f989ac276d310564364482979a78b83d113c4044",
      "tree": "82b91fc09a7a3f36293e5a0199f8032f330d6a6d",
      "parents": [
        "3d0449ded882cb59257a02a50a212d2e49eca634",
        "2cfa83574c4b2685208a1e6062fdc573c887cf00"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Thu Mar 16 13:56:43 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Thu Mar 16 13:56:43 2017 -0700"
      },
      "message": "Merge branch \u0027mm/two-more-xstrfmt\u0027 into maint\n\nCode clean-up and a string truncation fix.\n\n* mm/two-more-xstrfmt:\n  bisect_next_all: convert xsnprintf to xstrfmt\n  stop_progress_msg: convert xsnprintf to xstrfmt\n"
    },
    {
      "commit": "3d0449ded882cb59257a02a50a212d2e49eca634",
      "tree": "753a2f94f2f1b82a056f11dc6f1c829927594964",
      "parents": [
        "c5bd9e5a97ab987334b8dead3ffd353332014949",
        "07f546cda5d818780821a371f011eb253646ddc3"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Thu Mar 16 13:56:42 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Thu Mar 16 13:56:42 2017 -0700"
      },
      "message": "Merge branch \u0027vn/line-log-memcpy-size-fix\u0027 into maint\n\nThe command-line parsing of \"git log -L\" copied internal data\nstructures using incorrect size on ILP32 systems.\n\n* vn/line-log-memcpy-size-fix:\n  line-log: use COPY_ARRAY to fix mis-sized memcpy\n"
    },
    {
      "commit": "c5bd9e5a97ab987334b8dead3ffd353332014949",
      "tree": "a22ba5570f45c77d5a34103b2bc4c1fb61f104e8",
      "parents": [
        "abe62a403f2d3fce004f57e0e7371523761e723f",
        "aaae0bf787f09ba102f69c3cf85d37e6554ab9fd"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Thu Mar 16 13:56:42 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Thu Mar 16 13:56:42 2017 -0700"
      },
      "message": "Merge branch \u0027ax/line-log-range-merge-fix\u0027 into maint\n\nThe code to parse \"git log -L...\" command line was buggy when there\nare many ranges specified with -L; overrun of the allocated buffer\nhas been fixed.\n\n* ax/line-log-range-merge-fix:\n  line-log.c: prevent crash during union of too many ranges\n"
    },
    {
      "commit": "abe62a403f2d3fce004f57e0e7371523761e723f",
      "tree": "d71da633bee34045e69b419df2def7236307769c",
      "parents": [
        "68e12d7d97e1c1a853ac4c603b06afa051cf1276",
        "c852bd54bd87fdcdc825f5d45c26aa745be13ba6"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Thu Mar 16 13:56:42 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Thu Mar 16 13:56:42 2017 -0700"
      },
      "message": "Merge branch \u0027jk/add-i-patch-do-prompt\u0027 into maint\n\nThe patch subcommand of \"git add -i\" was meant to have paths\nselection prompt just like other subcommand, unlike \"git add -p\"\ndirectly jumps to hunk selection.  Recently, this was broken and\n\"add -i\" lost the paths selection dialog, but it now has been\nfixed.\n\n* jk/add-i-patch-do-prompt:\n  add--interactive: fix missing file prompt for patch mode with \"-i\"\n"
    },
    {
      "commit": "68e12d7d97e1c1a853ac4c603b06afa051cf1276",
      "tree": "9133b44f5fb20c6d78108162c1bfbf81b93a74c8",
      "parents": [
        "8e87cbc740493f8b0619642a680943df04742714",
        "8e27391a5fdc9194c4ed3ed6c64ec4750a1a08b5"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Thu Mar 16 13:56:42 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Thu Mar 16 13:56:42 2017 -0700"
      },
      "message": "Merge branch \u0027jt/http-base-url-update-upon-redirect\u0027 into maint\n\nWhen a redirected http transport gets an error during the\nredirected request, we ignored the error we got from the server,\nand ended up giving a not-so-useful error message.\n\n* jt/http-base-url-update-upon-redirect:\n  http: attempt updating base URL only if no error\n"
    },
    {
      "commit": "8e87cbc740493f8b0619642a680943df04742714",
      "tree": "8af8d3b78e7fd3c1ac02c3ba7697e01af3070dc1",
      "parents": [
        "890d76504c79677c27f6661c0663e73519405ca3",
        "88dedd5e72c082b741744c393567d7e5b4d03241"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Thu Mar 16 13:56:41 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Thu Mar 16 13:56:42 2017 -0700"
      },
      "message": "Merge branch \u0027js/travis-32bit-linux\u0027 into maint\n\nAdd 32-bit Linux variant to the set of platforms to be tested with\nTravis CI.\n\n* js/travis-32bit-linux:\n  Travis: also test on 32-bit Linux\n"
    },
    {
      "commit": "890d76504c79677c27f6661c0663e73519405ca3",
      "tree": "a854e27e519a251f407a5ef68a46c27c18757789",
      "parents": [
        "d880bfd947f5d5e2b5bcc510d6dee01101ce64a3",
        "2cfc70f0de7c8902791d3b23a92d6462b9e11d72"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Thu Mar 16 13:56:41 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Thu Mar 16 13:56:41 2017 -0700"
      },
      "message": "Merge branch \u0027jh/mingw-openssl-sha1\u0027 into maint\n\nWindows port wants to use OpenSSL\u0027s implementation of SHA-1\nroutines, so let them.\n\n* jh/mingw-openssl-sha1:\n  mingw: use OpenSSL\u0027s SHA-1 routines\n"
    },
    {
      "commit": "d880bfd947f5d5e2b5bcc510d6dee01101ce64a3",
      "tree": "22bca0509237c6cac7390c1ee91f5c309d81b7ca",
      "parents": [
        "e7e07d5a4fcc2a203d9873968ad3e6bd4d7419d7",
        "40a18fc77ca3ba1b018f0fbdcbdf4a6d237aadf3"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Thu Mar 16 13:56:41 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Thu Mar 16 13:56:41 2017 -0700"
      },
      "message": "Merge branch \u0027jk/http-auth\u0027 into maint\n\nReduce authentication round-trip over HTTP when the server supports\njust a single authentication method.\n\n* jk/http-auth:\n  http: add an \"auto\" mode for http.emptyauth\n  http: restrict auth methods to what the server advertises\n"
    },
    {
      "commit": "b16a991c1be5681b4b673d4343dfcc0c2f5ad498",
      "tree": "7b5f6a56e3955b4f1b0fbfbf5413007289892bc7",
      "parents": [
        "c3808ca6982b0ad7ee9b87eca9b50b9a24ec08b0"
      ],
      "author": {
        "name": "Jeff King",
        "email": "peff@peff.net",
        "time": "Wed Mar 15 12:56:23 2017 -0400"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Wed Mar 15 12:08:36 2017 -0700"
      },
      "message": "cherry-pick: detect bogus arguments to --mainline\n\nThe cherry-pick and revert commands use OPT_INTEGER() to\nparse --mainline. The stock parser is smart enough to reject\nnon-numeric nonsense, but it doesn\u0027t know that parent\ncounting starts at 1.\n\nWorse, the value \"0\" is indistinguishable from the unset\ncase, so a user who assumes the counting is 0-based will get\na confusing message:\n\n  $ git cherry-pick -m 0 $merge\n  error: commit ... is a merge but no -m option was given.\n\nLet\u0027s use a custom callback that enforces our range.\n\nSigned-off-by: Jeff King \u003cpeff@peff.net\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "f18f816cb1586e9aab3e30a7144768e0d282d305",
      "tree": "ab20ace5a3723ed57b37bb93ca2c36267ca3592f",
      "parents": [
        "e7e07d5a4fcc2a203d9873968ad3e6bd4d7419d7"
      ],
      "author": {
        "name": "brian m. carlson",
        "email": "sandals@crustytoothpaste.net",
        "time": "Sat Mar 11 22:28:18 2017 +0000"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Wed Mar 15 11:00:09 2017 -0700"
      },
      "message": "hash.h: move SHA-1 implementation selection into a header file\n\nMany developers use functionality in their editors that allows for quick\nsyntax checks, including warning about questionable constructs.  This\nfunctionality allows rapid development with fewer errors.  However, such\nfunctionality generally does not allow the specification of\nproject-specific defines or command-line options.\n\nSince the SHA1_HEADER include is not defined in such a case,\ndevelopers see spurious errors when using these tools.  Furthermore,\nthere are known implementations of \"cc\" whose \u0027#include\u0027 is unhappy\nwith this construct.\n\nInstead of using SHA1_HEADER, create a hash.h header and use #if\nand #elif to select the desired header.  Have the Makefile pass an\nappropriate option to help the header select the right implementation to\nuse.\n\n[jc: make BLK_SHA1 the fallback default as discussed on list,\ne.g. \u003c20170314201424.vccij5z2ortq4a4o@sigill.intra.peff.net\u003e; also\nremove SHA1_HEADER and SHA1_HEADER_SQ that are no longer used].\n\nSigned-off-by: brian m. carlson \u003csandals@crustytoothpaste.net\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\nReviewed-by: Jeff King \u003cpeff@peff.net\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "4a9b9b32d47212e4ea43cd1fa3c11afef6d4c491",
      "tree": "194cb56ad920a3e747572408bb8d1d081f71aae8",
      "parents": [
        "073778017158ecf3153b050776029907bc75826f"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 15:29:40 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 15:29:40 2017 -0700"
      },
      "message": "Fourth batch after 2.12\n\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "073778017158ecf3153b050776029907bc75826f",
      "tree": "0723a4eea498071a8d79dcbfe949b59bae3caf9d",
      "parents": [
        "d6857a831ca86c0ab0157722728696537700dad0",
        "ac5bbc02b8c3781d517f1414655270b3fa38b028"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 15:23:20 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 15:23:20 2017 -0700"
      },
      "message": "Merge branch \u0027kn/ref-filter-branch-list\u0027\n\n\"git branch --list\" takes the \"--abbrev\" and \"--no-abbrev\" options\nto control the output of the object name in its \"-v\"(erbose)\noutput, but a recent update started ignoring them; this fixes it\nbefore the breakage reaches to any released version.\n\n* kn/ref-filter-branch-list:\n  branch: honor --abbrev/--no-abbrev in --list mode\n"
    },
    {
      "commit": "d6857a831ca86c0ab0157722728696537700dad0",
      "tree": "465b880592aa35c001ce8a7957bfca112bd38cab",
      "parents": [
        "130b664e442767587638b3e807a6f543168239d7",
        "d1a13d3fcb252631361a961cb5e2bf10ed467cba"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 15:23:20 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 15:23:20 2017 -0700"
      },
      "message": "Merge branch \u0027jk/push-deadlock-regression-fix\u0027\n\n\"git push\" had a handful of codepaths that could lead to a deadlock\nwhen unexpected error happened, which has been fixed.\n\n* jk/push-deadlock-regression-fix:\n  send-pack: report signal death of pack-objects\n  send-pack: read \"unpack\" status even on pack-objects failure\n  send-pack: improve unpack-status error messages\n  send-pack: use skip_prefix for parsing unpack status\n  send-pack: extract parsing of \"unpack\" response\n  receive-pack: fix deadlock when we cannot create tmpdir\n"
    },
    {
      "commit": "130b664e442767587638b3e807a6f543168239d7",
      "tree": "d340f3e8e02404079f3a1b8d1610166475f08aaa",
      "parents": [
        "519592bcc6ddb6bbb417cadb6af5e72e93a07fc4",
        "88dedd5e72c082b741744c393567d7e5b4d03241"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 15:23:20 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 15:23:20 2017 -0700"
      },
      "message": "Merge branch \u0027js/travis-32bit-linux\u0027\n\nAdd 32-bit Linux variant to the set of platforms to be tested with\nTravis CI.\n\n* js/travis-32bit-linux:\n  Travis: also test on 32-bit Linux\n"
    },
    {
      "commit": "519592bcc6ddb6bbb417cadb6af5e72e93a07fc4",
      "tree": "3849598e7a79ddfd29ab2a60ef721054e3ab24c3",
      "parents": [
        "529635738683b4570b1cee894fa53bce66254e8b",
        "5cae73d5d23ec109322948478a957e77d2733f94"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 15:23:19 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 15:23:19 2017 -0700"
      },
      "message": "Merge branch \u0027ew/http-alternates-as-redirects-warning\u0027\n\nRecent versions of Git treats http alternates (used in dumb http\ntransport) just like HTTP redirects and requires the client to\nenable following it, due to security concerns.  But we forgot to\ngive a warning when we decide not to honor the alternates.\n\n* ew/http-alternates-as-redirects-warning:\n  http: release strbuf on disabled alternates\n  http: inform about alternates-as-redirects behavior\n"
    },
    {
      "commit": "529635738683b4570b1cee894fa53bce66254e8b",
      "tree": "53ff578fbd633327c7e757fa300f573c173553c8",
      "parents": [
        "228b78752de9d759839665764391262c0ec156cf",
        "32da7467ebc099e6032590773827884b704980cf"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 15:23:19 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 15:23:19 2017 -0700"
      },
      "message": "Merge branch \u0027dp/filter-branch-prune-empty\u0027\n\n\"git filter-branch --prune-empty\" drops a single-parent commit that\nbecomes a no-op, but did not drop a root commit whose tree is empty.\n\n* dp/filter-branch-prune-empty:\n  p7000: add test for filter-branch with --prune-empty\n  filter-branch: fix --prune-empty on parentless commits\n  t7003: ensure --prune-empty removes entire branch when applicable\n  t7003: ensure --prune-empty can prune root commit\n"
    },
    {
      "commit": "228b78752de9d759839665764391262c0ec156cf",
      "tree": "f8387c0c8648602b17080811e60b35c8c3a71629",
      "parents": [
        "07198afbd19f5ba4f991d9b554bc320690de19dc",
        "28e1fb54665f6f953ba16f75981195f5aa70f59b"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 15:23:18 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 15:23:19 2017 -0700"
      },
      "message": "Merge branch \u0027jt/perf-updates\u0027\n\nThe t/perf performance test suite was not prepared to test not so\nold versions of Git, but now it covers versions of Git that are not\nso ancient.\n\n* jt/perf-updates:\n  t/perf: add fallback for pre-bin-wrappers versions of git\n  t/perf: use $MODERN_GIT for all repo-copying steps\n  t/perf: export variable used in other blocks\n"
    },
    {
      "commit": "07198afbd19f5ba4f991d9b554bc320690de19dc",
      "tree": "af4a70e09a97335a1b5db7ce0f61f179c47f905b",
      "parents": [
        "c809496c97122b7d297e7216c3bfff7262b212e0",
        "d56583ded679f2eade3994d855c8d605e2964710"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 15:23:18 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 15:23:18 2017 -0700"
      },
      "message": "Merge branch \u0027mm/fetch-show-error-message-on-unadvertised-object\u0027\n\n\"git fetch\" that requests a commit by object name, when the other\nside does not allow such an request, failed without much\nexplanation.\n\n* mm/fetch-show-error-message-on-unadvertised-object:\n  fetch-pack: add specific error for fetching an unadvertised object\n  fetch_refs_via_pack: call report_unmatched_refs\n  fetch-pack: move code to report unmatched refs to a function\n"
    },
    {
      "commit": "c809496c97122b7d297e7216c3bfff7262b212e0",
      "tree": "7fc616a9cc1233b41e63ef259d6792e0e074f5f4",
      "parents": [
        "7c3b2034eda6cda3ef88dc4372da767b76e38bc9",
        "fd4692ff7040e690546ed139a419995e76a96196"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 15:23:18 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 15:23:18 2017 -0700"
      },
      "message": "Merge branch \u0027jk/interpret-branch-name\u0027\n\n\"git branch @\" created refs/heads/@ as a branch, and in general the\ncode that handled @{-1} and @{upstream} was a bit too loose in\ndisambiguating.\n\n* jk/interpret-branch-name:\n  checkout: restrict @-expansions when finding branch\n  strbuf_check_ref_format(): expand only local branches\n  branch: restrict @-expansions when deleting\n  t3204: test git-branch @-expansion corner cases\n  interpret_branch_name: allow callers to restrict expansions\n  strbuf_branchname: add docstring\n  strbuf_branchname: drop return value\n  interpret_branch_name: move docstring to header file\n  interpret_branch_name(): handle auto-namelen for @{-1}\n"
    },
    {
      "commit": "7c3b2034eda6cda3ef88dc4372da767b76e38bc9",
      "tree": "23ad3d7c5b2e3f769a32348182257cfdda8e337f",
      "parents": [
        "d6db3f216544d05e09159756812ccbcb16861d71",
        "c6507484a2a87e53a5f0c4c01944192047bbeaa9"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 15:23:17 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 15:23:17 2017 -0700"
      },
      "message": "Merge branch \u0027ab/cond-skip-tests\u0027\n\nA few tests were run conditionally under (rare) conditions where\nthey cannot be run (like running cvs tests under \u0027root\u0027 account).\n\n* ab/cond-skip-tests:\n  gitweb tests: skip tests when we don\u0027t have Time::HiRes\n  gitweb tests: change confusing \"skip_all\" phrasing\n  cvs tests: skip tests that call \"cvs commit\" when running as root\n"
    },
    {
      "commit": "5c4003ca3f0e9ac6d3c8aa3e387ff843bd440411",
      "tree": "da62594d6fb70db7b9550c5f3b0ba2ce6cd71b6d",
      "parents": [
        "751d3b9415fc08c8cc926f55646b735b0237fd4a"
      ],
      "author": {
        "name": "Johannes Schindelin",
        "email": "johannes.schindelin@gmx.de",
        "time": "Mon Mar 13 21:12:18 2017 +0100"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 14:24:16 2017 -0700"
      },
      "message": "setup.c: mention unresolved problems\n\nDuring the review of the `early-config` patch series, two issues\nhave been identified that have been with us forever.  Mark the\nidentified problems for later so that we do not forget them.\n\nSigned-off-by: Johannes Schindelin \u003cjohannes.schindelin@gmx.de\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "751d3b9415fc08c8cc926f55646b735b0237fd4a",
      "tree": "c0d47b72ea8edeadbb8fe68eaa8b18aa9e37df3a",
      "parents": [
        "01017dce5469660191f926e35a3d9e88cbcb8537"
      ],
      "author": {
        "name": "Johannes Schindelin",
        "email": "johannes.schindelin@gmx.de",
        "time": "Mon Mar 13 21:11:26 2017 +0100"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 14:24:16 2017 -0700"
      },
      "message": "t1309: document cases where we would want early config not to die()\n\nJeff King came up with a couple examples that demonstrate how the new\nread_early_config() that looks harder for the current .git/ directory\ncould die() in an undesirable way.\n\nLet\u0027s add those cases to the test script, to document what we would like\nto happen when early config encounters problems.\n\nSigned-off-by: Johannes Schindelin \u003cjohannes.schindelin@gmx.de\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "01017dce5469660191f926e35a3d9e88cbcb8537",
      "tree": "9f50b31015bc1cca133754730249cef2e3542793",
      "parents": [
        "1a6ec1eb38ce1ee77991da665a1872da57e38292"
      ],
      "author": {
        "name": "Johannes Schindelin",
        "email": "johannes.schindelin@gmx.de",
        "time": "Mon Mar 13 21:11:22 2017 +0100"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 14:24:16 2017 -0700"
      },
      "message": "setup_git_directory_gently_1(): avoid die()ing\n\nThis function now has a new caller in addition to setup_git_directory():\nthe newly introduced discover_git_directory(). That function wants to\ndiscover the current .git/ directory, and in case of a corrupted one\nsimply pretend that there is none to be found.\n\nExample: if a stale .git file exists in the parent directory, and the\nuser calls `git -p init`, we want Git to simply *not* read any\nrepository config for the pager (instead of aborting with a message that\nthe .git file is corrupt).\n\nLet\u0027s actually pretend that there was no GIT_DIR to be found in that case\nwhen being called from discover_git_directory(), but keep the previous\nbehavior (i.e. to die()) for the setup_git_directory() case.\n\nSigned-off-by: Johannes Schindelin \u003cjohannes.schindelin@gmx.de\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "1a6ec1eb38ce1ee77991da665a1872da57e38292",
      "tree": "29f7077a100fa857e85db532f8b63df172701ec2",
      "parents": [
        "1a27409ae81120c1f2d8e6983b58a53293265491"
      ],
      "author": {
        "name": "Johannes Schindelin",
        "email": "johannes.schindelin@gmx.de",
        "time": "Mon Mar 13 21:11:17 2017 +0100"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 14:24:16 2017 -0700"
      },
      "message": "t1309: test read_early_config()\n\nSo far, we had no explicit tests of that function.\n\nSigned-off-by: Johannes Schindelin \u003cjohannes.schindelin@gmx.de\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "1a27409ae81120c1f2d8e6983b58a53293265491",
      "tree": "a276ddbeffaece9a036ebd9671f9b395f5720c84",
      "parents": [
        "267b4538c0e13f98870bf808ee6c71fca9cf2ef7"
      ],
      "author": {
        "name": "Johannes Schindelin",
        "email": "johannes.schindelin@gmx.de",
        "time": "Mon Mar 13 21:11:12 2017 +0100"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 14:24:16 2017 -0700"
      },
      "message": "read_early_config(): really discover .git/\n\nEarlier, we punted and simply assumed that we are in the top-level\ndirectory of the project, and that there is no .git file but a .git/\ndirectory so that we can read directly from .git/config.\n\nHowever, that is not necessarily true. We may be in a subdirectory. Or\n.git may be a gitfile. Or the environment variable GIT_DIR may be set.\n\nTo remedy this situation, we just refactored the way\nsetup_git_directory() discovers the .git/ directory, to make it\nreusable, and more importantly, to leave all global variables and the\ncurrent working directory alone.\n\nLet\u0027s discover the .git/ directory correctly in read_early_config() by\nusing that new function.\n\nThis fixes 4 known breakages in t7006.\n\nSigned-off-by: Johannes Schindelin \u003cjohannes.schindelin@gmx.de\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "267b4538c0e13f98870bf808ee6c71fca9cf2ef7",
      "tree": "4ae01f263447c974aeaf4204836706e3a2f35c36",
      "parents": [
        "0654aa57f30fc7984e19b91cdbee123f929ca7b1"
      ],
      "author": {
        "name": "Johannes Schindelin",
        "email": "johannes.schindelin@gmx.de",
        "time": "Mon Mar 13 21:11:08 2017 +0100"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 14:24:16 2017 -0700"
      },
      "message": "read_early_config(): avoid .git/config hack when unneeded\n\nSo far, we only look whether the startup_info claims to have seen a\ngit_dir.\n\nHowever, do_git_config_sequence() (and consequently the\ngit_config_with_options() call used by read_early_config() asks the\nhave_git_dir() function whether we have a .git/ directory, which in turn\nalso looks at git_dir and at the environment variable GIT_DIR. And when\nthis is the case, the repository config is handled already, so we do not\nhave to do that again explicitly.\n\nLet\u0027s just use the same function, have_git_dir(), to determine whether we\nhave to handle .git/config explicitly.\n\nSigned-off-by: Johannes Schindelin \u003cjohannes.schindelin@gmx.de\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "0654aa57f30fc7984e19b91cdbee123f929ca7b1",
      "tree": "609fdd98f5457d55ceda3f1e56d93d9b0a26bcaf",
      "parents": [
        "16ac8b8db6ec7400719db6b5c76edaab33c47606"
      ],
      "author": {
        "name": "Johannes Schindelin",
        "email": "johannes.schindelin@gmx.de",
        "time": "Mon Mar 13 21:11:04 2017 +0100"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 14:24:16 2017 -0700"
      },
      "message": "setup: make read_early_config() reusable\n\nThe pager configuration needs to be read early, possibly before\ndiscovering any .git/ directory.\n\nLet\u0027s not hide this function in pager.c, but make it available to other\ncallers.\n\nSigned-off-by: Johannes Schindelin \u003cjohannes.schindelin@gmx.de\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "16ac8b8db6ec7400719db6b5c76edaab33c47606",
      "tree": "1af01aa31bafec1edaf37e125fbbad212d3b78e3",
      "parents": [
        "ce9b8aab5d9a40a84b4868fa890654900ab2d4cc"
      ],
      "author": {
        "name": "Johannes Schindelin",
        "email": "johannes.schindelin@gmx.de",
        "time": "Mon Mar 13 21:10:45 2017 +0100"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 14:24:16 2017 -0700"
      },
      "message": "setup: introduce the discover_git_directory() function\n\nWe modified the setup_git_directory_gently_1() function earlier to make\nit possible to discover the GIT_DIR without changing global state.\n\nHowever, it is still a bit cumbersome to use if you only need to figure\nout the (possibly absolute) path of the .git/ directory. Let\u0027s just\nprovide a convenient wrapper function with an easier signature that\n*just* discovers the .git/ directory.\n\nWe will use it in a subsequent patch to fix the early config.\n\nSigned-off-by: Johannes Schindelin \u003cjohannes.schindelin@gmx.de\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "ce9b8aab5d9a40a84b4868fa890654900ab2d4cc",
      "tree": "32efa4a4d030ab0d31a5d69aee9436b3a1874320",
      "parents": [
        "df380d58ece2a745e4283ef4de8dfeea560546bb"
      ],
      "author": {
        "name": "Johannes Schindelin",
        "email": "johannes.schindelin@gmx.de",
        "time": "Mon Mar 13 21:10:42 2017 +0100"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 14:24:16 2017 -0700"
      },
      "message": "setup_git_directory_1(): avoid changing global state\n\nFor historical reasons, Git searches for the .git/ directory (or the\n.git file) by changing the working directory successively to the parent\ndirectory of the current directory, until either anything was found or\nuntil a ceiling or a mount point is hit.\n\nFurther global state may be changed in case a .git/ directory was found.\n\nWe do have a use case, though, where we would like to find the .git/\ndirectory without having any global state touched, though: when we read\nthe early config e.g. for the pager or for alias expansion.\n\nLet\u0027s just move all of code that changes any global state out of the\nfunction `setup_git_directory_gently_1()` into\n`setup_git_directory_gently()`.\n\nIn subsequent patches, we will use the _1() function in a new\n`discover_git_directory()` function that we will then use for the early\nconfig code.\n\nNote: the new loop is a *little* tricky, as we have to handle the root\ndirectory specially: we cannot simply strip away the last component\nincluding the slash, as the root directory only has that slash. To remedy\nthat, we introduce the `min_offset` variable that holds the minimal length\nof an absolute path, and using that to special-case the root directory,\nincluding an early exit before trying to find the parent of the root\ndirectory.\n\nSigned-off-by: Johannes Schindelin \u003cjohannes.schindelin@gmx.de\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "df380d58ece2a745e4283ef4de8dfeea560546bb",
      "tree": "87af63869eafb4ac13b55bc30c80e4e04e63cee2",
      "parents": [
        "6c1e654437b7d3fff8bb8315d61afa0e930d6776"
      ],
      "author": {
        "name": "Johannes Schindelin",
        "email": "johannes.schindelin@gmx.de",
        "time": "Mon Mar 13 21:09:44 2017 +0100"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 14:24:04 2017 -0700"
      },
      "message": "setup: prepare setup_discovered_git_dir() for the root directory\n\nCurrently, the offset parameter (indicating what part of the cwd\nparameter corresponds to the current directory after discovering the\n.git/ directory) is set to 0 when we are running in the root directory.\n\nHowever, in the next patches we will avoid changing the current working\ndirectory while searching for the .git/ directory, meaning that the\noffset corresponding to the root directory will have to be 1 to reflect\nthat this directory is characterized by the path \"/\" (and not \"\").\n\nSo let\u0027s make sure that setup_discovered_git_directory() only tries to\nappend the trailing slash to non-root directories.\n\nNote: the setup_bare_git_directory() does not need a corresponding\nchange, as it does not want to return a prefix.\n\nSigned-off-by: Johannes Schindelin \u003cjohannes.schindelin@gmx.de\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "7288e12cce5db87216eba16441a2c37206e5dcad",
      "tree": "9cc9783fd2f080e2fe9f8f171b1d120deda2e47c",
      "parents": [
        "e7e07d5a4fcc2a203d9873968ad3e6bd4d7419d7"
      ],
      "author": {
        "name": "Jeff King",
        "email": "peff@peff.net",
        "time": "Tue Mar 14 12:30:24 2017 -0400"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 13:27:23 2017 -0700"
      },
      "message": "add--interactive: do not expand pathspecs with ls-files\n\nWhen we want to get the list of modified files, we first\nexpand any user-provided pathspecs with \"ls-files\", and then\nfeed the resulting list of paths as arguments to\n\"diff-index\" and \"diff-files\". If your pathspec expands into\na large number of paths, you may run into one of two\nproblems:\n\n  1. The OS may complain about the size of the argument\n     list, and refuse to run. For example:\n\n       $ (ulimit -s 128 \u0026\u0026 git add -p drivers)\n       Can\u0027t exec \"git\": Argument list too long at .../git-add--interactive line 177.\n       Died at .../git-add--interactive line 177.\n\n     That\u0027s on the linux.git repository, which has about 20K\n     files in the \"drivers\" directory (none of them modified\n     in this case). The \"ulimit -s\" trick is necessary to\n     show the problem on Linux even for such a gigantic set\n     of paths. Other operating systems have much smaller\n     limits (e.g., a real-world case was seen with only 5K\n     files on OS X).\n\n  2. Even when it does work, it\u0027s really slow. The pathspec\n     code is not optimized for huge numbers of paths. Here\u0027s\n     the same case without the ulimit:\n\n       $ time git add -p drivers\n       No changes.\n\n       real\t0m16.559s\n       user\t0m53.140s\n       sys\t0m0.220s\n\nWe can improve this by skipping \"ls-files\" completely, and\njust feeding the original pathspecs to the diff commands.\nThis solution was discussed in 2010:\n\n  http://public-inbox.org/git/20100105041438.GB12574@coredump.intra.peff.net/\n\nbut at the time the diff code\u0027s pathspecs were more\nprimitive than those used by ls-files (e.g., they did not\nsupport globs). Making the change would have caused a\nuser-visible regression, so we didn\u0027t.\n\nSince then, the pathspec code has been unified, and the diff\ncommands natively understand pathspecs like \u0027*.c\u0027.\n\nThis patch implements that solution. That skips the\nargument-list limits, and the result runs much faster:\n\n  $ time git add -p drivers\n  No changes.\n\n  real\t0m0.149s\n  user\t0m0.116s\n  sys\t0m0.080s\n\nThere are two new tests. The first just exercises the\nglobbing behavior to confirm that we are not causing a\nregression there. The second checks the actual argument\nbehavior using GIT_TRACE. We _could_ do it with the \"ulimit\n-s\" trick, as above. But that would mean the test could only\nrun where \"ulimit -s\" works. And tests of that sort are\nexpensive, because we have to come up with enough files to\nactually bust the limit (we can\u0027t just shrink the \"128\" down\ninfinitely, since it is also the in-program stack size).\n\nFinally, two caveats and possibilities for future work:\n\n  a. This fixes one argument-list expansion, but there may\n     be others. In fact, it\u0027s very likely that if you run\n     \"git add -i\" and select a large number of modified\n     files that the script would try to feed them all to a\n     single git command.\n\n     In practice this is probably fine. The real issue here\n     is that the argument list was growing with the _total_\n     number of files, not the number of modified or selected\n     files.\n\n  b. If the repository contains filenames with literal wildcard\n     characters (e.g., \"foo*\"), the original code expanded\n     them via \"ls-files\" and then fed those wildcard names\n     to \"diff-index\", which would have treated them as\n     wildcards. This was a bug, which is now fixed (though\n     unless you really go through some contortions with\n     \":(literal)\", it\u0027s likely that your original pathspec\n     would match whatever the accidentally-expanded wildcard\n     would anyway).\n\n     So this takes us one step closer to working correctly\n     with files whose names contain wildcard characters, but\n     it\u0027s likely that others remain (e.g., if \"git add -i\"\n     feeds the selected paths to \"git add\").\n\nReported-by: Wincent Colaiuta \u003cwin@wincent.com\u003e\nReported-by: Mislav Marohnić \u003cmislav.marohnic@gmail.com\u003e\nSigned-off-by: Jeff King \u003cpeff@peff.net\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "b9e2bc560a1ea29ff833981d5bc70323c265bdb7",
      "tree": "b5860758f7bb31a6de5bedf431b035bdeb04173a",
      "parents": [
        "c3808ca6982b0ad7ee9b87eca9b50b9a24ec08b0"
      ],
      "author": {
        "name": "Michael J Gruber",
        "email": "git@drmicha.warpmail.net",
        "time": "Tue Mar 14 17:02:02 2017 +0100"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Tue Mar 14 13:15:18 2017 -0700"
      },
      "message": "git-status: make porcelain more robust\n\ngit status provides a porcelain mode for porcelain writers with a\nsupposedly stable (plumbing) interface.\n7a76c28ff2 (\"status: disable translation when --porcelain is used\", 2014-03-20)\nmade sure that ahead/behind info is not translated (i.e. is stable).\n\nMake sure that the remaining two strings (initial commit, detached head)\nare stable, too.\n\nThese changes are for the v1 porcelain interface. While we do have a perfectly\nstable v2 porcelain interface now, some tools (such as\npowerline-gitstatus) are written against v1 and profit from fixing v1\nwithout any changes on their side.\n\nSigned-off-by: Michael J Gruber \u003cgit@drmicha.warpmail.net\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "c5af19f9ab4cd8582689ca9d9c84f188f4442d10",
      "tree": "f148fdc5c2b8d223227a6328dc3cb53c8c06dd7e",
      "parents": [
        "b0db70465246bb8309d3d12c9bc34ac3f0c1e203"
      ],
      "author": {
        "name": "Brandon Williams",
        "email": "bmwill@google.com",
        "time": "Mon Mar 13 11:23:22 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Mon Mar 13 15:28:56 2017 -0700"
      },
      "message": "pathspec: allow escaped query values\n\nIn our own .gitattributes file we have attributes such as:\n\n    *.[ch] whitespace\u003dindent,trail,space\n\nWhen querying for attributes we want to be able to ask for the exact\nvalue, i.e.\n\n    git ls-files :(attr:whitespace\u003dindent,trail,space)\n\nshould work, but the commas are used in the attr magic to introduce\nthe next attr, such that this query currently fails with\n\nfatal: Invalid pathspec magic \u0027trail\u0027 in \u0027:(attr:whitespace\u003dindent,trail,space)\u0027\n\nThis change allows escaping characters by a backslash, such that the query\n\n    git ls-files :(attr:whitespace\u003dindent\\,trail\\,space)\n\nwill match all path that have the value \"indent,trail,space\" for the\nwhitespace attribute. To accomplish this, we need to modify two places.\nFirst `parse_long_magic` needs to not stop early upon seeing a comma or\nclosing paren that is escaped. As a second step we need to remove any\nescaping from the attr value.\n\nBased on a patch by Stefan Beller \u003csbeller@google.com\u003e\n\nSigned-off-by: Brandon Williams \u003cbmwill@google.com\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "b0db70465246bb8309d3d12c9bc34ac3f0c1e203",
      "tree": "a82cfca2e400ddd21f22cec61e2d664462e4a38f",
      "parents": [
        "625568cd8813bf32b2172eaf59e45e9da5978ce3"
      ],
      "author": {
        "name": "Brandon Williams",
        "email": "bmwill@google.com",
        "time": "Mon Mar 13 11:23:21 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Mon Mar 13 15:28:54 2017 -0700"
      },
      "message": "pathspec: allow querying for attributes\n\nThe pathspec mechanism is extended via the new\n\":(attr:eol\u003dinput)pattern/to/match\" syntax to filter paths so that it\nrequires paths to not just match the given pattern but also have the\nspecified attrs attached for them to be chosen.\n\nBased on a patch by Stefan Beller \u003csbeller@google.com\u003e\nSigned-off-by: Brandon Williams \u003cbmwill@google.com\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "d61434ae813cc86a1a87d05cc61e36e87b0e20a9",
      "tree": "83b452df8faf0dda505a231abe267a89de1a32d3",
      "parents": [
        "e7e07d5a4fcc2a203d9873968ad3e6bd4d7419d7"
      ],
      "author": {
        "name": "Jeff King",
        "email": "peff@peff.net",
        "time": "Mon Mar 13 10:04:45 2017 -0400"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Mon Mar 13 10:20:29 2017 -0700"
      },
      "message": "http-walker: fix buffer underflow processing remote alternates\n\nIf we parse a remote alternates (or http-alternates), we\nexpect relative lines like:\n\n  ../../foo.git/objects\n\nwhich we convert into \"$URL/../foo.git/\" (and then use that\nas a base for fetching more objects).\n\nBut if the remote feeds us nonsense like just:\n\n  ../\n\nwe will try to blindly strip the last 7 characters, assuming\nthey contain the string \"objects\". Since we don\u0027t _have_ 7\ncharacters at all, this results in feeding a small negative\nvalue to strbuf_add(), which converts it to a size_t,\nresulting in a big positive value. This should consistently\nfail (since we can\u0027t generall allocate the max size_t minus\n7 bytes), so there shouldn\u0027t be any security implications.\n\nLet\u0027s fix this by using strbuf_strip_suffix() to drop the\ncharacters we want. If they\u0027re not present, we\u0027ll ignore the\nalternate (in theory we could use it as-is, but the rest of\nthe http-walker code unconditionally tacks \"objects/\" back\non, so it is it not prepared to handle such a case).\n\nSigned-off-by: Jeff King \u003cpeff@peff.net\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "d6db3f216544d05e09159756812ccbcb16861d71",
      "tree": "0447aa1db3cbaa9a34eb7201a78f54bc308e9138",
      "parents": [
        "ff3898649be897fa397b65616ec95377147ae096"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Sun Mar 12 23:24:14 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Sun Mar 12 23:24:14 2017 -0700"
      },
      "message": "Third batch after 2.12\n\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "ff3898649be897fa397b65616ec95377147ae096",
      "tree": "e39d31bf1c50dd3961c27181a87c979c06344f49",
      "parents": [
        "60f335b87f005c5f6c2eee1787eed9037b90c053",
        "860cd699c285f02937a2edbdb78e8231292339a5"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Sun Mar 12 23:21:36 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Sun Mar 12 23:21:37 2017 -0700"
      },
      "message": "Merge branch \u0027ah/doc-ls-files-quotepath\u0027\n\nDocumentation for \"git ls-files\" did not refer to core.quotePath\n\n* ah/doc-ls-files-quotepath:\n  Documentation: improve description for core.quotePath\n"
    },
    {
      "commit": "60f335b87f005c5f6c2eee1787eed9037b90c053",
      "tree": "05a41a0772006def96b8f0734c20afd0f2411116",
      "parents": [
        "6c621015f2b5028b8743da0b13293cc99fb2be6b",
        "12426e114b252d130d83c3f098c4ceae3cf217e3"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Sun Mar 12 23:21:36 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Sun Mar 12 23:21:36 2017 -0700"
      },
      "message": "Merge branch \u0027jc/diff-populate-filespec-size-only-fix\u0027\n\n\"git diff --quiet\" relies on the size field in diff_filespec to be\ncorrectly populated, but diff_populate_filespec() helper function\nmade an incorrect short-cut when asked only to populate the size\nfield for paths that need to go through convert_to_git() (e.g. CRLF\nconversion).\n\n* jc/diff-populate-filespec-size-only-fix:\n  diff: do not short-cut CHECK_SIZE_ONLY check in diff_populate_filespec()\n"
    },
    {
      "commit": "6c621015f2b5028b8743da0b13293cc99fb2be6b",
      "tree": "d3f729a788ef9ff185f1f143ae03fa9809108bfe",
      "parents": [
        "cb36508ac50baa3f8b2df9bc2c69c260c5977b8f",
        "07f546cda5d818780821a371f011eb253646ddc3"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Sun Mar 12 23:21:35 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Sun Mar 12 23:21:35 2017 -0700"
      },
      "message": "Merge branch \u0027vn/line-log-memcpy-size-fix\u0027\n\nThe command-line parsing of \"git log -L\" copied internal data\nstructures using incorrect size on ILP32 systems.\n\n* vn/line-log-memcpy-size-fix:\n  line-log: use COPY_ARRAY to fix mis-sized memcpy\n"
    },
    {
      "commit": "cb36508ac50baa3f8b2df9bc2c69c260c5977b8f",
      "tree": "1d4d76d4e231a8c91180aed05e3d9d349b5e788c",
      "parents": [
        "36d5286f6815542761dae92fdcdce8db1556727f",
        "3255e512a8594cc5f811aea0dd769429c0f0d614"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Sun Mar 12 23:21:35 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Sun Mar 12 23:21:35 2017 -0700"
      },
      "message": "Merge branch \u0027jk/ewah-use-right-type-in-sizeof\u0027\n\nCode clean-up.\n\n* jk/ewah-use-right-type-in-sizeof:\n  ewah: fix eword_t/uint64_t confusion\n"
    },
    {
      "commit": "36d5286f6815542761dae92fdcdce8db1556727f",
      "tree": "c17757243d083a95e846e0d701fafebe57513c4a",
      "parents": [
        "271513cd549c23d109ccc048627b053bd3691a67",
        "aaae0bf787f09ba102f69c3cf85d37e6554ab9fd"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Sun Mar 12 23:21:34 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Sun Mar 12 23:21:34 2017 -0700"
      },
      "message": "Merge branch \u0027ax/line-log-range-merge-fix\u0027\n\nThe code to parse \"git log -L...\" command line was buggy when there\nare many ranges specified with -L; overrun of the allocated buffer\nhas been fixed.\n\n* ax/line-log-range-merge-fix:\n  line-log.c: prevent crash during union of too many ranges\n"
    },
    {
      "commit": "271513cd549c23d109ccc048627b053bd3691a67",
      "tree": "56413fbb78c5e54303eed89f641ce0edb3753521",
      "parents": [
        "ba37c92df905a5bc51efe76e32f0e67c4ad5acbe",
        "b8686c661d367a6c823fd1c6a47abd2b80ffa009"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Sun Mar 12 23:21:33 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Sun Mar 12 23:21:34 2017 -0700"
      },
      "message": "Merge branch \u0027ss/remote-bzr-hg-placeholder-wo-python\u0027\n\nThere is no need for Python only to give a few messages to the\nstandard error stream, but we somehow did.\n\n* ss/remote-bzr-hg-placeholder-wo-python:\n  contrib: git-remote-{bzr,hg} placeholders don\u0027t need Python\n"
    },
    {
      "commit": "ba37c92df905a5bc51efe76e32f0e67c4ad5acbe",
      "tree": "a01300f6b0ae623259f04aa38cca91f6f5f81047",
      "parents": [
        "fb070d2f17b0619cbc1be0606fd452b2294abb8d",
        "ce83eadd9a2c63db6263df91933da1b1b865d26a"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Sun Mar 12 23:21:33 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Sun Mar 12 23:21:33 2017 -0700"
      },
      "message": "Merge branch \u0027js/realpath-pathdup-fix\u0027\n\nGit v2.12 was shipped with an embarrassing breakage where various\noperations that verify paths given from the user stopped dying when\nseeing an issue, and instead later triggering segfault.\n\n* js/realpath-pathdup-fix:\n  real_pathdup(): fix callsites that wanted it to die on error\n  t1501: demonstrate NULL pointer access with invalid GIT_WORK_TREE\n"
    },
    {
      "commit": "fb070d2f17b0619cbc1be0606fd452b2294abb8d",
      "tree": "ac351fe2b67febc13d3b27d8651ae7e2c70db81b",
      "parents": [
        "033328a5dc22c1f52292b1941f000f0d47192ade",
        "c852bd54bd87fdcdc825f5d45c26aa745be13ba6"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Sun Mar 12 23:21:33 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Sun Mar 12 23:21:33 2017 -0700"
      },
      "message": "Merge branch \u0027jk/add-i-patch-do-prompt\u0027\n\nThe patch subcommand of \"git add -i\" was meant to have paths\nselection prompt just like other subcommand, unlike \"git add -p\"\ndirectly jumps to hunk selection.  Recently, this was broken and\n\"add -i\" lost the paths selection dialog, but it now has been\nfixed.\n\n* jk/add-i-patch-do-prompt:\n  add--interactive: fix missing file prompt for patch mode with \"-i\"\n"
    },
    {
      "commit": "033328a5dc22c1f52292b1941f000f0d47192ade",
      "tree": "45319f59fd9a09cbdd8cdeebc8f12e56d1d93d7c",
      "parents": [
        "625568cd8813bf32b2172eaf59e45e9da5978ce3",
        "2cfc70f0de7c8902791d3b23a92d6462b9e11d72"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Sun Mar 12 23:21:33 2017 -0700"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Sun Mar 12 23:21:33 2017 -0700"
      },
      "message": "Merge branch \u0027jh/mingw-openssl-sha1\u0027\n\nWindows port wants to use OpenSSL\u0027s implementation of SHA-1\nroutines, so let them.\n\n* jh/mingw-openssl-sha1:\n  mingw: use OpenSSL\u0027s SHA-1 routines\n"
    },
    {
      "commit": "dfa3ad32386f95ae954d65163152f8130e3586a3",
      "tree": "4c64546b53b235232be5c5cd293a59559165cce8",
      "parents": [
        "c3808ca6982b0ad7ee9b87eca9b50b9a24ec08b0"
      ],
      "author": {
        "name": "René Scharfe",
        "email": "l.s.r@web.de",
        "time": "Fri Mar 10 01:12:59 2017 +0100"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Sat Mar 11 21:28:22 2017 -0800"
      },
      "message": "blame: move blame_entry duplication to add_blame_entry()\n\nAll callers of add_blame_entry() allocate and copy the second argument.\nLet the function do it for them, reducing code duplication.\n\nSigned-off-by: Rene Scharfe \u003cl.s.r@web.de\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "bd4d9d993c1202615178f86a947a5c63e706860f",
      "tree": "1381de60b357e326953deb1ff64ad8d9f61b45d6",
      "parents": [
        "3d8936153d8a962ace54a055ebdb308b09ca7c97"
      ],
      "author": {
        "name": "Jeff King",
        "email": "peff@peff.net",
        "time": "Sat Feb 25 04:37:30 2017 -0500"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 14:30:25 2017 -0800"
      },
      "message": "t/interop: add test of old clients against modern git-daemon\n\nThis test just checks that old clients can clone and fetch\nfrom a newer git-daemon. The opposite should also be true,\nbut it\u0027s hard to test ancient versions of git-daemon because\nthey lack basic options like \"--listen\".\n\nNote that we have to make a slight tweak to the\nlib-git-daemon helper from the regular tests, so that it\nstarts the daemon with our correct git.a version.\n\nSigned-off-by: Jeff King \u003cpeff@peff.net\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "3d8936153d8a962ace54a055ebdb308b09ca7c97",
      "tree": "41decacf8a261341b3d113aabcde3da04a46d413",
      "parents": [
        "e7e07d5a4fcc2a203d9873968ad3e6bd4d7419d7"
      ],
      "author": {
        "name": "Jeff King",
        "email": "peff@peff.net",
        "time": "Sat Feb 25 04:37:07 2017 -0500"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 14:30:25 2017 -0800"
      },
      "message": "t: add an interoperability test harness\n\nThe current test suite is good at letting you test a\nparticular version of Git. But it\u0027s not very good at letting\nyou test _two_ versions and seeing how they interact (e.g.,\none cloning from the other).\n\nThis commit adds a test harness that will build two\narbitrary versions of git and make it easy to call them from\ninside your tests. See the README and the example script for\ndetails.\n\nSigned-off-by: Jeff King \u003cpeff@peff.net\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "625568cd8813bf32b2172eaf59e45e9da5978ce3",
      "tree": "67592af595b838b201829e6beca4ae0f41d2f9a2",
      "parents": [
        "0a246106802b147ad81626f52c0aaa37398ba918"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:59 2017 -0800"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:25:21 2017 -0800"
      },
      "message": "Second batch after 2.12\n\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "0a246106802b147ad81626f52c0aaa37398ba918",
      "tree": "b15fe8d0ddbbd14775c6fb430a96a80b2404f213",
      "parents": [
        "44c3f09fa501ccd83e3362080a99ad4b46cda127",
        "6d167fd7ccb84f07a0bd57d8e188a651e913b158"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:24 2017 -0800"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:24 2017 -0800"
      },
      "message": "Merge branch \u0027rs/log-email-subject\u0027\n\nCode clean-up.\n\n* rs/log-email-subject:\n  pretty: use fmt_output_email_subject()\n  log-tree: factor out fmt_output_email_subject()\n"
    },
    {
      "commit": "44c3f09fa501ccd83e3362080a99ad4b46cda127",
      "tree": "995b4a48e4517f4c7850ff8cb51ffa3981cdf999",
      "parents": [
        "ae900ebd71b58c12356674228ce99e6673da3dec",
        "9e140909f611fff720efc914b7186b8e4ab722cd"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:24 2017 -0800"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:24 2017 -0800"
      },
      "message": "Merge branch \u0027tg/stash-push\u0027\n\n\"git stash save\" takes a pathspec so that the local changes can be\nstashed away only partially.\n\n* tg/stash-push:\n  stash: allow pathspecs in the no verb form\n  stash: use stash_push for no verb form\n  stash: teach \u0027push\u0027 (and \u0027create_stash\u0027) to honor pathspec\n  stash: refactor stash_create\n  stash: add test for the create command line arguments\n  stash: introduce push verb\n"
    },
    {
      "commit": "ae900ebd71b58c12356674228ce99e6673da3dec",
      "tree": "5485ca879bc50db5bce344d9a715bb678a563906",
      "parents": [
        "fb907176de4657892682c049946ba28caed9adde",
        "d1b3b81aabf91ce654b043b00aa72721a777c84c"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:24 2017 -0800"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:24 2017 -0800"
      },
      "message": "Merge branch \u0027sb/submodule-init-url-selection\u0027\n\nWhen \"git submodule init\" decides that the submodule in the working\ntree is its upstream, it now gives a warning as it is not a very\ncommon setup.\n\n* sb/submodule-init-url-selection:\n  submodule init: warn about falling back to a local path\n"
    },
    {
      "commit": "fb907176de4657892682c049946ba28caed9adde",
      "tree": "2749690297dd0aaab8178b9b88a02ef5847c3cdf",
      "parents": [
        "5886e75489df639ff3ac1f9b53d2c27bd9fe8f0a",
        "b2d593a7797f4f9452e46f722e181604a5582897"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:24 2017 -0800"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:24 2017 -0800"
      },
      "message": "Merge branch \u0027rj/remove-unused-mktemp\u0027\n\nCode cleanup.\n\n* rj/remove-unused-mktemp:\n  wrapper.c: remove unused gitmkstemps() function\n  wrapper.c: remove unused git_mkstemp() function\n"
    },
    {
      "commit": "5886e75489df639ff3ac1f9b53d2c27bd9fe8f0a",
      "tree": "30f79a4be74818c1c3828404e34f5ba15f1a8fe3",
      "parents": [
        "9664cef1ebe98506be8e614e06926e240cbc8b3c",
        "bcd886d897d22f88fac63fd190b65884f4c58f8f"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:24 2017 -0800"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:24 2017 -0800"
      },
      "message": "Merge branch \u0027ew/markdown-url-in-readme\u0027\n\nDoc update.\n\n* ew/markdown-url-in-readme:\n  README: create HTTP/HTTPS links from URLs in Markdown\n"
    },
    {
      "commit": "9664cef1ebe98506be8e614e06926e240cbc8b3c",
      "tree": "06d16e5e7799f02445302a922f2c91cbbd61d33b",
      "parents": [
        "d0f549f403266c14acc687098ee3e697a67984c2",
        "b803ae4427f3e21f01b8da6933ed719909cacd69"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:23 2017 -0800"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:24 2017 -0800"
      },
      "message": "Merge branch \u0027ps/docs-diffcore\u0027\n\nDoc update.\n\n* ps/docs-diffcore:\n  docs/diffcore: unquote \"Complete Rewrites\" in headers\n  docs/diffcore: fix grammar in diffcore-rename header\n"
    },
    {
      "commit": "d0f549f403266c14acc687098ee3e697a67984c2",
      "tree": "ce24b9ce27a85921cab6879dfa1956066fe9ce0d",
      "parents": [
        "92718f57c2e18e69bc7ae3ed18c7157c475e17a9",
        "8e27391a5fdc9194c4ed3ed6c64ec4750a1a08b5"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:23 2017 -0800"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:23 2017 -0800"
      },
      "message": "Merge branch \u0027jt/http-base-url-update-upon-redirect\u0027\n\nWhen a redirected http transport gets an error during the\nredirected request, we ignored the error we got from the server,\nand ended up giving a not-so-useful error message.\n\n* jt/http-base-url-update-upon-redirect:\n  http: attempt updating base URL only if no error\n"
    },
    {
      "commit": "92718f57c2e18e69bc7ae3ed18c7157c475e17a9",
      "tree": "e36c53ecc0f9a00b1b73a389f8d5e2f314a095f4",
      "parents": [
        "ea1e784c4739ff35b05a4ddc959482eb00ef48d6",
        "40a18fc77ca3ba1b018f0fbdcbdf4a6d237aadf3"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:23 2017 -0800"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:23 2017 -0800"
      },
      "message": "Merge branch \u0027jk/http-auth\u0027\n\nReduce authentication round-trip over HTTP when the server supports\njust a single authentication method.\n\n* jk/http-auth:\n  http: add an \"auto\" mode for http.emptyauth\n  http: restrict auth methods to what the server advertises\n"
    },
    {
      "commit": "ea1e784c4739ff35b05a4ddc959482eb00ef48d6",
      "tree": "e9151ac5280d0b85ac1d9f7de8641ebf12dd13d9",
      "parents": [
        "fc32293502e86be2cabbe5e8e5863a2b657207b8",
        "9d3343961b845c02f9a3e0e9535492687c404b17"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:23 2017 -0800"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:23 2017 -0800"
      },
      "message": "Merge branch \u0027jh/send-email-one-cc\u0027\n\n\"Cc:\" on the trailer part does not have to conform to RFC strictly,\nunlike in the e-mail header.  \"git send-email\" has been updated to\nignore anything after \u0027\u003e\u0027 when picking addresses, to allow non-address\ncruft like \" # stable 4.4\" after the address.\n\n* jh/send-email-one-cc:\n  send-email: only allow one address per body tag\n"
    },
    {
      "commit": "fc32293502e86be2cabbe5e8e5863a2b657207b8",
      "tree": "87798ac7776dc9473d09f94ec45b96398cbc16b9",
      "parents": [
        "82682e218a4ebe980345908c31ac9976f7ef4283",
        "33ad9ddd0b5398063f0aabea639b5fe569f458ea"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:23 2017 -0800"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:23 2017 -0800"
      },
      "message": "Merge branch \u0027rs/strbuf-add-real-path\u0027\n\nAn helper function to make it easier to append the result from\nreal_path() to a strbuf has been added.\n\n* rs/strbuf-add-real-path:\n  strbuf: add strbuf_add_real_path()\n  cocci: use ALLOC_ARRAY\n"
    },
    {
      "commit": "82682e218a4ebe980345908c31ac9976f7ef4283",
      "tree": "8a2b92eee265e98ad202d1a0013070f86c8e4bfc",
      "parents": [
        "98c96f8bffe315dc82f694d50a4c83567a4ee133",
        "886ddf4777d119f0a420bdf55fba834c16c58069"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:22 2017 -0800"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:23 2017 -0800"
      },
      "message": "Merge branch \u0027rs/sha1-file-plug-fallback-base-leak\u0027\n\nA leak in a codepath to read from a packed object in (rare) cases\nhas been plugged.\n\n* rs/sha1-file-plug-fallback-base-leak:\n  sha1_file: release fallback base\u0027s memory in unpack_entry()\n"
    },
    {
      "commit": "98c96f8bffe315dc82f694d50a4c83567a4ee133",
      "tree": "c6a9bfb7058090da246fba19b094db72f7994dea",
      "parents": [
        "11cfc0ef9674e55019047c0d4b4deb42877cee38",
        "b072504ce17564bcfd8cb82d6e3948720626065d"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:22 2017 -0800"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:22 2017 -0800"
      },
      "message": "Merge branch \u0027rs/commit-parsing-optim\u0027\n\nThe code that parses header fields in the commit object has been\nupdated for (micro)performance and code hygiene.\n\n* rs/commit-parsing-optim:\n  commit: don\u0027t check for space twice when looking for header\n  commit: be more precise when searching for headers\n"
    },
    {
      "commit": "11cfc0ef9674e55019047c0d4b4deb42877cee38",
      "tree": "18fa0b9be79c81c1eeaa8736b9e04b9753992750",
      "parents": [
        "963792ed277bde985ea9ff4953529d656b186571",
        "f0252ca23c5c33765d189be4999254bf722a8b99"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:22 2017 -0800"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:22 2017 -0800"
      },
      "message": "Merge branch \u0027jk/t6300-cleanup\u0027\n\nA test that creates a confusing branch whose name is HEAD has been\ncorrected not to do so.\n\n* jk/t6300-cleanup:\n  t6300: avoid creating refs/heads/HEAD\n"
    },
    {
      "commit": "963792ed277bde985ea9ff4953529d656b186571",
      "tree": "ce457fde106f33c0cd9c75b1c15a5169752431cb",
      "parents": [
        "34061299002fcbf5467385debbd9ad3d5f1c5a4e",
        "ad8c7cdadd96c66d0adf894250c8f4dd77bb2bee"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:22 2017 -0800"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:22 2017 -0800"
      },
      "message": "Merge branch \u0027jk/parse-config-key-cleanup\u0027\n\nThe \"parse_config_key()\" API function has been cleaned up.\n\n* jk/parse-config-key-cleanup:\n  parse_hide_refs_config: tell parse_config_key we don\u0027t want a subsection\n  parse_config_key: allow matching single-level config\n  parse_config_key: use skip_prefix instead of starts_with\n"
    },
    {
      "commit": "34061299002fcbf5467385debbd9ad3d5f1c5a4e",
      "tree": "d7e7db49b43c439ba138c5afa1598500e2266037",
      "parents": [
        "a729e4671a2a117143cc1b4041a8b47699293b95",
        "49624d1e518f14fe03ba6c8824aaaf420e01a834"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:21 2017 -0800"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:21 2017 -0800"
      },
      "message": "Merge branch \u0027sb/parse-hide-refs-config-cleanup\u0027\n\nCode clean-up.\n\n* sb/parse-hide-refs-config-cleanup:\n  refs: parse_hide_refs_config to use parse_config_key\n"
    },
    {
      "commit": "a729e4671a2a117143cc1b4041a8b47699293b95",
      "tree": "3fa44020eeb7f93ceed0cccf62cc6d688982f63c",
      "parents": [
        "066c38ca17efcacc363f5a8973cc3a118defda5a",
        "bdb31eada76fd27d18e981c3b40889297fa889c6"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:21 2017 -0800"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:21 2017 -0800"
      },
      "message": "Merge branch \u0027jt/upload-pack-error-report\u0027\n\n\"git upload-pack\", which is a counter-part of \"git fetch\", did not\nreport a request for a ref that was not advertised as invalid.\nThis is generally not a problem (because \"git fetch\" will stop\nbefore making such a request), but is the right thing to do.\n\n* jt/upload-pack-error-report:\n  upload-pack: report \"not our ref\" to client\n"
    },
    {
      "commit": "066c38ca17efcacc363f5a8973cc3a118defda5a",
      "tree": "bf599acd41e1621f0a1576aa8405e7bfe59c584f",
      "parents": [
        "2f54451ff56f22c6da6e0266a3508d54ab34a14f",
        "94425552f308946456bb7823d0a1dd72ebd30bdd"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:21 2017 -0800"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:21 2017 -0800"
      },
      "message": "Merge branch \u0027jk/ident-empty\u0027\n\nuser.email that consists of only cruft chars should consistently\nerror out, but didn\u0027t.\n\n* jk/ident-empty:\n  ident: do not ignore empty config name/email\n  ident: reject all-crud ident name\n  ident: handle NULL email when complaining of empty name\n  ident: mark error messages for translation\n"
    },
    {
      "commit": "2f54451ff56f22c6da6e0266a3508d54ab34a14f",
      "tree": "8229a4550bdf7be0e102772776a095f3000f1202",
      "parents": [
        "e0688e9b28f2c5ff711460ee8b62077be5df2360",
        "1274a155af96fcbcf2e60ae9fc9ee8dbdbbe987a"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:20 2017 -0800"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 13:24:21 2017 -0800"
      },
      "message": "Merge branch \u0027jc/config-case-cmdline-take-2\u0027\n\nThe code to parse \"git -c VAR\u003dVAL cmd\" and set configuration\nvariable for the duration of cmd had two small bugs, which have\nbeen fixed.\n\n* jc/config-case-cmdline-take-2:\n  config: use git_config_parse_key() in git_config_parse_parameter()\n  config: move a few helper functions up\n"
    },
    {
      "commit": "a91aca44bf4b3746c3ce03583a1b3418d1610ef7",
      "tree": "eb9db8984d71e3213e169110d3dd09528642eb5d",
      "parents": [
        "d344d1cb8a1d1bea268ec78f5d7315381a0a6c96"
      ],
      "author": {
        "name": "Jeff King",
        "email": "peff@peff.net",
        "time": "Thu Mar 09 08:29:49 2017 -0500"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 11:51:30 2017 -0800"
      },
      "message": "ref-filter: use separate cache for contains_tag_algo\n\nThe algorithm which powers \"tag --contains\" uses the\nTMP_MARK and UNINTERESTING bits, but never cleans up after\nitself. As a result, stale UNINTERESTING bits may impact\nlater traversals (like \"--merged\").\n\nWe could fix this by clearing the bits after we\u0027re done with\nthe --contains traversal. That would be enough to fix the\nexisting problem, but it leaves future developers in a bad\nspot: they cannot add other traversals that operate\nsimultaneously with --contains (e.g., if you wanted to add\n\"--no-contains\" and use both filters at the same time).\n\nInstead, we can use a commit slab to store our cached\nresults, which will store the bits outside of the commit\nstructs entirely. This adds an extra level of indirection,\nbut in my tests (running \"git tag --contains HEAD\" on\nlinux.git), there was no measurable slowdown.\n\nSigned-off-by: Jeff King \u003cpeff@peff.net\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "d344d1cb8a1d1bea268ec78f5d7315381a0a6c96",
      "tree": "5a96072bb00c6580ee579141cdac003129d4870c",
      "parents": [
        "a0262c51d0f36678a8c6143a9c73d2058fd6ad57"
      ],
      "author": {
        "name": "Jeff King",
        "email": "peff@peff.net",
        "time": "Thu Mar 09 08:29:04 2017 -0500"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 11:51:30 2017 -0800"
      },
      "message": "ref-filter: die on parse_commit errors\n\nThe tag-contains algorithm quietly returns \"does not\ncontain\" when parse_commit() fails. But a parse failure is\nan indication that the repository is corrupt. We should die\nloudly rather than producing a bogus result.\n\nSigned-off-by: Jeff King \u003cpeff@peff.net\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "a0262c51d0f36678a8c6143a9c73d2058fd6ad57",
      "tree": "6e7b19ebe8e3b39fd0c25df4a4b1b750c5ac8eba",
      "parents": [
        "4d4bc41411242028d5670f8f1b305fcd1a7671ad"
      ],
      "author": {
        "name": "Jeff King",
        "email": "peff@peff.net",
        "time": "Thu Mar 09 08:28:48 2017 -0500"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 11:51:30 2017 -0800"
      },
      "message": "ref-filter: use contains_result enum consistently\n\nCommit cbc60b672 (git tag --contains: avoid stack overflow,\n2014-04-24) adapted the -1/0/1 contains status into a\ntri-state enum. However, some of the code still used the\nnumeric values, or assumed that no/yes correspond to C\u0027s\nboolean true/false.\n\nLet\u0027s switch to using the symbolic values everywhere, which\nwill make it easier to change them.\n\nSigned-off-by: Jeff King \u003cpeff@peff.net\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "4d4bc41411242028d5670f8f1b305fcd1a7671ad",
      "tree": "584c0a955c2462c08cbd6d2b132541c2483e95ec",
      "parents": [
        "e0688e9b28f2c5ff711460ee8b62077be5df2360"
      ],
      "author": {
        "name": "Jeff King",
        "email": "peff@peff.net",
        "time": "Thu Mar 09 08:27:55 2017 -0500"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 11:51:30 2017 -0800"
      },
      "message": "ref-filter: move ref_cbdata definition into ref-filter.c\n\nThis is an implementation detail of how filter_refs() works,\nand does not need to be exposed to the outside world. This\nwill become more important in future patches as we add new\nprivate data types to it.\n\nSigned-off-by: Jeff King \u003cpeff@peff.net\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "ac5bbc02b8c3781d517f1414655270b3fa38b028",
      "tree": "0a1ebf08649475f15e15b8c107d0a5daaa2ee321",
      "parents": [
        "44a6b6ce1777f587c318008fe59b901a296f5326"
      ],
      "author": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Wed Mar 08 14:13:09 2017 -0800"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Fri Mar 10 11:47:38 2017 -0800"
      },
      "message": "branch: honor --abbrev/--no-abbrev in --list mode\n\nWhen the \"branch --list\" command was converted to use the --format\nfacility from the ref-filter API, we forgot to honor the --abbrev\nsetting in the default output format and instead used a hardcoded\n\"7\".\n\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "bf0231c66140be5194ac76a4a9f79e949c588293",
      "tree": "737d073963f47b249c5dcc4b4f2928da25313608",
      "parents": [
        "e0688e9b28f2c5ff711460ee8b62077be5df2360"
      ],
      "author": {
        "name": "Stefan Beller",
        "email": "sbeller@google.com",
        "time": "Wed Mar 08 15:07:42 2017 -0800"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Wed Mar 08 15:52:03 2017 -0800"
      },
      "message": "rev-parse: add --show-superproject-working-tree\n\nIn some situations it is useful to know if the given repository\nis a submodule of another repository.\n\nAdd the flag --show-superproject-working-tree to git-rev-parse\nto make it easy to find out if there is a superproject. When no\nsuperproject exists, the output will be empty.\n\nSigned-off-by: Stefan Beller \u003csbeller@google.com\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "ce83eadd9a2c63db6263df91933da1b1b865d26a",
      "tree": "784557c4dda31707340440142db671375a36653f",
      "parents": [
        "aac3eaa6242d00d358a077aa740cf5051905a569"
      ],
      "author": {
        "name": "Johannes Schindelin",
        "email": "johannes.schindelin@gmx.de",
        "time": "Wed Mar 08 16:43:40 2017 +0100"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Wed Mar 08 14:38:41 2017 -0800"
      },
      "message": "real_pathdup(): fix callsites that wanted it to die on error\n\nIn 4ac9006f832 (real_path: have callers use real_pathdup and\nstrbuf_realpath, 2016-12-12), we changed the xstrdup(real_path())\npattern to use real_pathdup() directly.\n\nThe problem with this change is that real_path() calls\nstrbuf_realpath() with die_on_error \u003d 1 while real_pathdup() calls\nit with die_on_error \u003d 0. Meaning that in cases where real_path()\ncauses Git to die() with an error message, real_pathdup() is silent\nand returns NULL instead.\n\nThe callers, however, are ill-prepared for that change, as they expect\nthe return value to be non-NULL (and otherwise the function died\nwith an appropriate error message).\n\nFix this by extending real_pathdup()\u0027s signature to accept the\ndie_on_error flag and simply pass it through to strbuf_realpath(),\nand then adjust all callers after a careful audit whether they would\nhandle NULLs well.\n\nSigned-off-by: Johannes Schindelin \u003cjohannes.schindelin@gmx.de\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    },
    {
      "commit": "aac3eaa6242d00d358a077aa740cf5051905a569",
      "tree": "10549d3a1dd30d8f40b5659a644a85ae93832cd7",
      "parents": [
        "e7e07d5a4fcc2a203d9873968ad3e6bd4d7419d7"
      ],
      "author": {
        "name": "Johannes Schindelin",
        "email": "johannes.schindelin@gmx.de",
        "time": "Wed Mar 08 16:43:34 2017 +0100"
      },
      "committer": {
        "name": "Junio C Hamano",
        "email": "gitster@pobox.com",
        "time": "Wed Mar 08 14:38:22 2017 -0800"
      },
      "message": "t1501: demonstrate NULL pointer access with invalid GIT_WORK_TREE\n\nWhen GIT_WORK_TREE does not specify a valid path, we should error\nout, instead of crashing.\n\nSigned-off-by: Johannes Schindelin \u003cjohannes.schindelin@gmx.de\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n"
    }
  ],
  "next": "6c1e654437b7d3fff8bb8315d61afa0e930d6776"
}
