)]}'
{
  "commit": "9acc5911119ec0209877fbaa0a1e68aa714c191e",
  "tree": "9a5bb0455b12bfd3e6fb3fdf4a6c0aca1af0992c",
  "parents": [
    "0d44a2dacc84fb7dcb5d684800e976f3b3c76d00"
  ],
  "author": {
    "name": "Jeff King",
    "email": "peff@peff.net",
    "time": "Wed May 18 18:44:23 2016 -0400"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Fri May 27 10:45:40 2016 -0700"
  },
  "message": "config: add a notion of \"scope\"\n\nA config callback passed to git_config() doesn\u0027t know very\nmuch about the context in which it sees a variable. It can\nask whether the variable comes from a file, and get the file\nname. But without analyzing the filename (which is hard to\ndo accurately), it cannot tell whether it is in system-level\nconfig, user-level config, or repo-specific config.\n\nGenerally this doesn\u0027t matter; the point of not passing this\nto the callback is that it should treat the config the same\nno matter where it comes from. But some programs, like\nupload-pack, are a special case: we should be able to run\nthem in an untrusted repository, which means we cannot use\nany \"dangerous\" config from the repository config file (but\nit is OK to use it from system or user config).\n\nThis patch teaches the config code to record the \"scope\" of\neach variable, and make it available inside config\ncallbacks, similar to how we give access to the filename.\nThe scope is the starting source for a particular parsing\noperation, and remains the same even if we include other\nfiles (so a .git/config which includes another file will\nremain CONFIG_SCOPE_REPO, as it would be similarly\nuntrusted).\n\nSigned-off-by: Jeff King \u003cpeff@peff.net\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "1bce212e88bccaa65b093ccb42aeaeaebcac4ebe",
      "old_mode": 33188,
      "old_path": "cache.h",
      "new_id": "2e3b377ae8ac4b68e740de28c9e339965aa685e4",
      "new_mode": 33188,
      "new_path": "cache.h"
    },
    {
      "type": "modify",
      "old_id": "d555deeb9a976bbb1640513d4c81e7aacc9cc785",
      "old_mode": 33188,
      "old_path": "config.c",
      "new_id": "87629164b3623885fa0428790a6e7fa2eb643215",
      "new_mode": 33188,
      "new_path": "config.c"
    },
    {
      "type": "modify",
      "old_id": "3605ef8ee69713b030eaffb28ded235ce7ad1b75",
      "old_mode": 33188,
      "old_path": "t/helper/test-config.c",
      "new_id": "509aeef400e6495ce7ca428d7df5cd63f3aa1247",
      "new_mode": 33188,
      "new_path": "t/helper/test-config.c"
    },
    {
      "type": "modify",
      "old_id": "d345a885a35544241550d79c15be7ef098613204",
      "old_mode": 33261,
      "old_path": "t/t1308-config-set.sh",
      "new_id": "065d5ebb09fa0d3dbc5d2abc3be0cb815cca17f6",
      "new_mode": 33261,
      "new_path": "t/t1308-config-set.sh"
    }
  ]
}
