)]}'
{
  "commit": "252cfb7cb86a33f7740c799748ee6c586931c7bc",
  "tree": "448b62e3fa3b920d3da7c4484be34dbc95b56f00",
  "parents": [
    "28cb5e66ddaed47aa8789fa326fec0339831b80b"
  ],
  "author": {
    "name": "Derrick Stolee",
    "email": "dstolee@microsoft.com",
    "time": "Fri Sep 25 12:33:32 2020 +0000"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Fri Sep 25 10:53:04 2020 -0700"
  },
  "message": "maintenance: add loose-objects task\n\nOne goal of background maintenance jobs is to allow a user to\ndisable auto-gc (gc.auto\u003d0) but keep their repository in a clean\nstate. Without any cleanup, loose objects will clutter the object\ndatabase and slow operations. In addition, the loose objects will\ntake up extra space because they are not stored with deltas against\nsimilar objects.\n\nCreate a \u0027loose-objects\u0027 task for the \u0027git maintenance run\u0027 command.\nThis helps clean up loose objects without disrupting concurrent Git\ncommands using the following sequence of events:\n\n1. Run \u0027git prune-packed\u0027 to delete any loose objects that exist\n   in a pack-file. Concurrent commands will prefer the packed\n   version of the object to the loose version. (Of course, there\n   are exceptions for commands that specifically care about the\n   location of an object. These are rare for a user to run on\n   purpose, and we hope a user that has selected background\n   maintenance will not be trying to do foreground maintenance.)\n\n2. Run \u0027git pack-objects\u0027 on a batch of loose objects. These\n   objects are grouped by scanning the loose object directories in\n   lexicographic order until listing all loose objects -or-\n   reaching 50,000 objects. This is more than enough if the loose\n   objects are created only by a user doing normal development.\n   We noticed users with _millions_ of loose objects because VFS\n   for Git downloads blobs on-demand when a file read operation\n   requires populating a virtual file.\n\nThis step is based on a similar step in Scalar [1] and VFS for Git.\n[1] https://github.com/microsoft/scalar/blob/master/Scalar.Common/Maintenance/LooseObjectsStep.cs\n\nSigned-off-by: Derrick Stolee \u003cdstolee@microsoft.com\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "12668fccf7f76dc8243b3edd5f309c6efd8b038a",
      "old_mode": 33188,
      "old_path": "Documentation/git-maintenance.txt",
      "new_id": "fc95eb594f9908adb069989cc043c00edf39e0df",
      "new_mode": 33188,
      "new_path": "Documentation/git-maintenance.txt"
    },
    {
      "type": "modify",
      "old_id": "5e469488f482ca8cc46b42a9889c00f6a1cc33fa",
      "old_mode": 33188,
      "old_path": "builtin/gc.c",
      "new_id": "c9db8555b9965b7cf9154f9f40af024d8bef374d",
      "new_mode": 33188,
      "new_path": "builtin/gc.c"
    },
    {
      "type": "modify",
      "old_id": "045524e6add886fd314cf6b880938913823dfe74",
      "old_mode": 33261,
      "old_path": "t/t7900-maintenance.sh",
      "new_id": "b3fc7c8670147967b41d08047af478c45aa0415c",
      "new_mode": 33261,
      "new_path": "t/t7900-maintenance.sh"
    }
  ]
}
