)]}'
{
  "commit": "4b3863231dab4ead718314ee664629aa071f40e0",
  "tree": "44ec23837f4a83081f97f835ffc2baf0f1407f05",
  "parents": [
    "749aebffdb00d68fe68661e4bbe17c3fc253e29c"
  ],
  "author": {
    "name": "Roman Arutyunyan",
    "email": "arut@nginx.com",
    "time": "Mon Mar 02 19:47:13 2015 +0300"
  },
  "committer": {
    "name": "Roman Arutyunyan",
    "email": "arut@nginx.com",
    "time": "Mon Mar 02 19:47:13 2015 +0300"
  },
  "message": "Cache: do not inherit last_modified and etag from stale response.\n\nWhen replacing a stale cache entry, its last_modified and etag could be\ninherited from the old entry if the response code is not 200 or 206.  Moreover,\netag could be inherited with any response code if it\u0027s missing in the new\nresponse.  As a result, the cache entry is left with invalid last_modified or\netag which could lead to broken revalidation.\n\nFor example, when a file is deleted from backend, its last_modified is copied to\nthe new 404 cache entry and is used later for revalidation.  Once the old file\nappears again with its original timestamp, revalidation succeeds and the cached\n404 response is sent to client instead of the file.\n\nThe problem appeared with etags in 44b9ab7752e3 (1.7.3) and affected\nlast_modified in 1573fc7875fa (1.7.9).\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "8d06fb9bfd6e7bccbe6b82f94fe4927c7bbdb429",
      "old_mode": 33188,
      "old_path": "src/http/ngx_http_file_cache.c",
      "new_id": "7f289ed3368f993a2eca56db5773c3b9e027641a",
      "new_mode": 33188,
      "new_path": "src/http/ngx_http_file_cache.c"
    },
    {
      "type": "modify",
      "old_id": "7a5b3fdc2a55f69a154d16a191d9997c1588d94e",
      "old_mode": 33188,
      "old_path": "src/http/ngx_http_upstream.c",
      "new_id": "23208c80ee85856963d601e2c8e20af196da408a",
      "new_mode": 33188,
      "new_path": "src/http/ngx_http_upstream.c"
    }
  ]
}
