)]}'
{
  "log": [
    {
      "commit": "a5edbda2f8c3a79d26c62dda55736816f3a6d57f",
      "tree": "2aff6be4455b30206d85627978ffc6181f496bf6",
      "parents": [
        "9255178e4e1fea640275e51dd2c8a6b751863370"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Thu Aug 28 19:15:52 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Thu Aug 28 19:15:52 2014 -0700"
      },
      "message": "touch up AclPopulator\n"
    },
    {
      "commit": "9255178e4e1fea640275e51dd2c8a6b751863370",
      "tree": "f7e58d2d9238a8f05f2a3c3aa0e476a189f3c43c",
      "parents": [
        "b377f69a7884d09c8ec19c946de7415983b403f7"
      ],
      "author": {
        "name": "Siyu Gu",
        "email": "siyugu@google.com",
        "time": "Thu Aug 28 18:51:15 2014 -0700"
      },
      "committer": {
        "name": "Siyu Gu",
        "email": "siyugu@google.com",
        "time": "Thu Aug 28 18:51:15 2014 -0700"
      },
      "message": "Introduce AclPopulator\n"
    },
    {
      "commit": "b377f69a7884d09c8ec19c946de7415983b403f7",
      "tree": "e47733c16c895658921998983a089bcee9084e8d",
      "parents": [
        "e905c4c4cf4704dd0db4bf0d8aa87fe3f5d8311d",
        "69ab9e93c4fdc348eb70f983f16e15993ccd9bc9"
      ],
      "author": {
        "name": "Eric Larson",
        "email": "elarson@google.com",
        "time": "Thu Aug 28 10:53:04 2014 -0700"
      },
      "committer": {
        "name": "Eric Larson",
        "email": "elarson@google.com",
        "time": "Thu Aug 28 10:53:04 2014 -0700"
      },
      "message": "Added HelloWorldConnector Example\n"
    },
    {
      "commit": "69ab9e93c4fdc348eb70f983f16e15993ccd9bc9",
      "tree": "367c5c6a9c048412d8bba1ba2eda4ca081d3fb23",
      "parents": [
        "c55a2400e6af25a28f893a87cd7e7e2c1707d8e6"
      ],
      "author": {
        "name": "Eric Larson",
        "email": "elarson@google.com",
        "time": "Thu Aug 28 10:13:03 2014 -0700"
      },
      "committer": {
        "name": "Eric Larson",
        "email": "elarson@google.com",
        "time": "Thu Aug 28 10:13:03 2014 -0700"
      },
      "message": "pjo\u0027s changes\n"
    },
    {
      "commit": "c55a2400e6af25a28f893a87cd7e7e2c1707d8e6",
      "tree": "b70ac55754f985963a6d71e7ab47fe4b64f52a17",
      "parents": [
        "7f9573faf52384946b8f2d1bcbf239066b1ef0af"
      ],
      "author": {
        "name": "Eric Larson",
        "email": "elarson@google.com",
        "time": "Tue Aug 26 14:56:35 2014 -0700"
      },
      "committer": {
        "name": "Eric Larson",
        "email": "elarson@google.com",
        "time": "Tue Aug 26 14:56:35 2014 -0700"
      },
      "message": "Formatting Cleanup\n"
    },
    {
      "commit": "7f9573faf52384946b8f2d1bcbf239066b1ef0af",
      "tree": "92534f9628f9a540c51e7784a0c1f2af8856ad5f",
      "parents": [
        "bc2bdc026725789fcc0d4b3cf8df219a5152e0fb"
      ],
      "author": {
        "name": "Eric Larson",
        "email": "elarson@google.com",
        "time": "Tue Aug 26 09:37:04 2014 -0700"
      },
      "committer": {
        "name": "Eric Larson",
        "email": "elarson@google.com",
        "time": "Tue Aug 26 09:37:04 2014 -0700"
      },
      "message": "Refactoring, style fixes\n"
    },
    {
      "commit": "bc2bdc026725789fcc0d4b3cf8df219a5152e0fb",
      "tree": "f1e0deaf26dc907ab13f3f0bb1d7258e8e4f6d66",
      "parents": [
        "9183841056229c4767f29192b975fd7c414100b8"
      ],
      "author": {
        "name": "Eric Larson",
        "email": "elarson@google.com",
        "time": "Fri Aug 22 17:02:15 2014 -0700"
      },
      "committer": {
        "name": "Eric Larson",
        "email": "elarson@google.com",
        "time": "Fri Aug 22 17:02:15 2014 -0700"
      },
      "message": "Fixes per pjo\n"
    },
    {
      "commit": "e905c4c4cf4704dd0db4bf0d8aa87fe3f5d8311d",
      "tree": "8fb396417f3c0edec8e1ee66ce2cf05e9c32bd02",
      "parents": [
        "207ae7e5733d801df1270cf01191e7c723b24447",
        "006a717f7618c10a19b5c19c2038db65f9bce731"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Fri Aug 22 15:09:45 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Fri Aug 22 15:09:45 2014 -0700"
      },
      "message": "Merge branch \u0027master\u0027 of https://code.google.com/p/plexi\n"
    },
    {
      "commit": "207ae7e5733d801df1270cf01191e7c723b24447",
      "tree": "8aa5ebd2ea8af443d647a677614cadffab774d5c",
      "parents": [
        "40a9b19d697b0cc2610695eb6c815834bf94d2d8"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Thu Aug 21 19:54:43 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Fri Aug 22 15:06:10 2014 -0700"
      },
      "message": "allow override of crawl immediately\n\nalso allow override of crawl once\n\nalso actually use the two config options, in some way,\nbecause currently they are not even used anywhere, it seems.\n\ntests not included yet, want to see opinion on construct.\n"
    },
    {
      "commit": "9183841056229c4767f29192b975fd7c414100b8",
      "tree": "72ad8b3715b1d7331835e2d9f3f90ef6471de22a",
      "parents": [
        "a0ceeba4a0c9eba529446a8b8995488a8c441dc9"
      ],
      "author": {
        "name": "Eric Larson",
        "email": "elarson@google.com",
        "time": "Wed Aug 20 17:01:04 2014 -0700"
      },
      "committer": {
        "name": "Eric Larson",
        "email": "elarson@google.com",
        "time": "Wed Aug 20 17:01:04 2014 -0700"
      },
      "message": "Hello World Connector Example\n"
    },
    {
      "commit": "006a717f7618c10a19b5c19c2038db65f9bce731",
      "tree": "c77d159f86c140a6a721b0e374b429709a1b550b",
      "parents": [
        "40a9b19d697b0cc2610695eb6c815834bf94d2d8"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Sun Aug 10 16:21:00 2014 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Thu Aug 14 13:07:39 2014 -0700"
      },
      "message": "Improve exception handling during startup\n\nThe main goal was to prevent StartupException from leaking to\nApplication.start() and Daemon, as was already prevented in main().\n\nUnsupportedPlatformException no longer has a default message, as it is\nconvention for non-arg exception constructor to not have a message and\nso having the message will likely cause confusion when it is misused\naccidentally. Coupled with the fact that it wasn\u0027t documented what the\ndefault was (and thus, could change at any point), nobody could actually\nuse it.\n"
    },
    {
      "commit": "40a9b19d697b0cc2610695eb6c815834bf94d2d8",
      "tree": "5093831d8f3ce20c285d153d059ef322595d91ee",
      "parents": [
        "a0ceeba4a0c9eba529446a8b8995488a8c441dc9"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Fri Aug 08 10:07:33 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Fri Aug 08 11:24:55 2014 -0700"
      },
      "message": "empty gsa.hostname is invalid\n\nthis is an additional check to it being necessary\n"
    },
    {
      "commit": "a0ceeba4a0c9eba529446a8b8995488a8c441dc9",
      "tree": "5cd067ccdc64aea74fd258c38a33d9409a204fe3",
      "parents": [
        "5cb50ca324f0f3c88dcc5473f827f3caee87a3b2"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Fri Jul 25 20:56:02 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Fri Jul 25 20:56:02 2014 -0700"
      },
      "message": "make all non-secmgr src 100% styled correctly\n\nleft secmgr sources non-compliant because\nthose are from a fork and so didn\u0027t want\nto potentially make a future merge hard.\n"
    },
    {
      "commit": "5cb50ca324f0f3c88dcc5473f827f3caee87a3b2",
      "tree": "2bef6b78c9e163b6c15070152bc61d35bb333369",
      "parents": [
        "0fd57ed8e3e7ffae9b3ec34cfbae3b78f55d0b22"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Tue Jul 15 15:24:48 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Tue Jul 15 16:23:37 2014 -0700"
      },
      "message": "make saml idp expiration configurable\n"
    },
    {
      "commit": "0fd57ed8e3e7ffae9b3ec34cfbae3b78f55d0b22",
      "tree": "19b7eb625da0a0c06d38276d9b134db965bc5edc",
      "parents": [
        "3c40f454de7132d72e98605014bb58b73d4558b9"
      ],
      "author": {
        "name": "Brett Johnson",
        "email": "Brett.Michael.Johnson@gmail.com",
        "time": "Thu Jul 03 16:14:54 2014 -0700"
      },
      "committer": {
        "name": "Brett Johnson",
        "email": "Brett.Michael.Johnson@gmail.com",
        "time": "Tue Jul 08 14:59:22 2014 -0700"
      },
      "message": "Do not send ACLs and Groups to GSA if markAllDocsAsPublic is true.\n\nIf markAllDocsAsPublic is true, feeding ACLs and Groups serves no\npurpose.  This modifies DocIdSender to return immediately if\npushNamedResources() or pushGroupDefinitions() are called when\nmarkAllDocsAsPublic is true.\n\nWhen I added tests for this, I found some of the tests for\npushing named resources and groups normally were deficient,\nso I beefed them up a bit.\n\nCode Review: http://codereview.appspot.com/108400046\n"
    },
    {
      "commit": "3c40f454de7132d72e98605014bb58b73d4558b9",
      "tree": "c9a2f2b6955e0fc348326d8a9be0d9b9943e42a9",
      "parents": [
        "f125d998ada42bf136b65c5cd72f385d48137f4c"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Mon Jul 07 20:04:32 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Tue Jul 08 10:41:01 2014 -0700"
      },
      "message": "let system properties come from file\n\nallows giving -Djavax.net.ssl.keyStorePassword and\n-Djavax.net.ssl.trustStorePassword in a file that\ncan be access controled.  previously values had to\nbe provided on command line which made them visible\nin ps command\u0027s output.\n"
    },
    {
      "commit": "f125d998ada42bf136b65c5cd72f385d48137f4c",
      "tree": "f0a2eb08e86c1a4176dd0abe1ee216701150a714",
      "parents": [
        "6037ba5db25eb6b09c7529290678caae70464859"
      ],
      "author": {
        "name": "Brett Johnson",
        "email": "Brett.Michael.Johnson@gmail.com",
        "time": "Mon Jun 30 17:28:47 2014 -0700"
      },
      "committer": {
        "name": "Brett Johnson",
        "email": "Brett.Michael.Johnson@gmail.com",
        "time": "Mon Jun 30 17:28:47 2014 -0700"
      },
      "message": "Remove Feed Logging from Public SPI\n\nAfter some discussion, we have determined that the Feed Logging\nmechanism should not be made available to the adaptors at this\ntime.  This change removes it from the AdaptorContext, and makes\nthe FeedArchiver interface package private.\n"
    },
    {
      "commit": "6037ba5db25eb6b09c7529290678caae70464859",
      "tree": "9e767326083aa5d06224712899be08250a6edf79",
      "parents": [
        "6451260c9368fe070ba5b9b9a01202cf45d926e7"
      ],
      "author": {
        "name": "Brett Johnson",
        "email": "Brett.Michael.Johnson@gmail.com",
        "time": "Thu Jun 26 16:00:19 2014 -0700"
      },
      "committer": {
        "name": "Brett Johnson",
        "email": "Brett.Michael.Johnson@gmail.com",
        "time": "Fri Jun 27 20:32:05 2014 -0700"
      },
      "message": "Fix b/15114347: Better error message for invalid GSA hostname.\n\nThis change provides a more descriptive error messages in the log\nif the configured GSA is not found at startup. The error messages\ncover common GSA communication configuration problems.\n\nCode Review: http://codereview.appspot.com/103620043\n"
    },
    {
      "commit": "6451260c9368fe070ba5b9b9a01202cf45d926e7",
      "tree": "fed5d6da4f386d51a6ed933601dcfba0bda10a53",
      "parents": [
        "a15692a8fb5301fb9a93b0cd356258b260640c39"
      ],
      "author": {
        "name": "Brett Johnson",
        "email": "Brett.Michael.Johnson@gmail.com",
        "time": "Thu Jun 26 17:27:15 2014 -0700"
      },
      "committer": {
        "name": "Brett Johnson",
        "email": "Brett.Michael.Johnson@gmail.com",
        "time": "Fri Jun 27 18:30:17 2014 -0700"
      },
      "message": "Fix b/15187210: Better log message when dashboard login fails\n\nThis change will include the GSA admin URL in the log messages when\nfailing to connect the the GSA admin port for authentication.\nBetter, more descriptive log messages were crafted for common\nGSA admin communication issues that can be fixed with proper\nconfiguration of gsa.hostname, gsa.admin.hostname, and SSL certs.\n\nThis only fixes messages logged in the log file, and not the error\nmessage that is displayed on the dashboard login page.\n\nCode Review: http://codereview.appspot.com/110200046\n"
    },
    {
      "commit": "a15692a8fb5301fb9a93b0cd356258b260640c39",
      "tree": "6ef737de0ddac372eff82e28c754b00ce5bbfd92",
      "parents": [
        "0e947a3a937583dc9c84cb1434256ab3e26b981a"
      ],
      "author": {
        "name": "Brett Johnson",
        "email": "Brett.Michael.Johnson@gmail.com",
        "time": "Wed Jun 18 17:31:12 2014 -0700"
      },
      "committer": {
        "name": "Brett Johnson",
        "email": "Brett.Michael.Johnson@gmail.com",
        "time": "Wed Jun 25 16:24:31 2014 -0700"
      },
      "message": "Fix b/10302420: Archive feeds to a local directory, if configured.\n\nThis change adds a new optional configuration property, feed.archiveDirectory.\nIf specified, it should be a pathname to a directory in which the all\nfeeds successfully and unsuccessfully sent to the GSA are archived.\nFailed feeds are tagged with \"FAILED\" in the archive feed file name.\nThe feed archiver is made available to the adaptors via the AdaptorContext,\nSo graph traversers that return additional docids via getContents() can\narchive those as well.\n\nCode Review: http://codereview.appspot.com/108100043\n"
    },
    {
      "commit": "0e947a3a937583dc9c84cb1434256ab3e26b981a",
      "tree": "2d51c9af8cb9cab3e343aec12c7700a1e70c96be",
      "parents": [
        "7128eef8fb1887a3c2d806521b543b727626941d"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Tue Jun 17 14:15:08 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Tue Jun 17 14:15:08 2014 -0700"
      },
      "message": "fix grammar of config var `grouppergroup\u0027\n"
    },
    {
      "commit": "7128eef8fb1887a3c2d806521b543b727626941d",
      "tree": "c6eebdf2ae0f39824677663fdba0c4e42d942347",
      "parents": [
        "f2d37b6b58a5b2863b137d9a836adcc6854b670a"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Fri Jun 13 19:29:09 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Fri Jun 13 19:29:09 2014 -0700"
      },
      "message": "tool for QA to test Groups DB scale\n\nTool accepts configuration like:\n  test.numusers\u003d1000000\n  test.numgroups\u003d100000\n  test.userspergroup\u003d60\n  test.grouppergroup\u003d9\n\nTool makes up the data.\n\nPossible follow up CL: Move groups-from-csv\nand this tool to prebuilt or other package,\ninstead of having them live in examples.\n"
    },
    {
      "commit": "f2d37b6b58a5b2863b137d9a836adcc6854b670a",
      "tree": "9c4133c3c25b0774c138dd3d111391473c753bf2",
      "parents": [
        "9877f1395d4dc2c7a1d79164eca64a3bcc673686"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Fri Jun 13 19:26:50 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Fri Jun 13 19:26:50 2014 -0700"
      },
      "message": "reword groups-definitions as group-definitions\n\nchange some method names that said \"groups definitions\"\nto say \"group definitions\".\n"
    },
    {
      "commit": "9877f1395d4dc2c7a1d79164eca64a3bcc673686",
      "tree": "5200964d1d24d11a689f64e834de6c6cf0a93b8c",
      "parents": [
        "9652b2f61940d9b114d7abedfcf8a2f1bf97db5b"
      ],
      "author": {
        "name": "Brett Johnson",
        "email": "Brett.Michael.Johnson@gmail.com",
        "time": "Thu Jun 12 17:33:31 2014 -0700"
      },
      "committer": {
        "name": "Brett Johnson",
        "email": "Brett.Michael.Johnson@gmail.com",
        "time": "Thu Jun 12 21:53:44 2014 -0700"
      },
      "message": "Fix b/14218193: Support GSA discrete Admin NIC\n\nIf a GSA has its discrete admin NIC enabled, it typically has a\nseparate IP address than the GSA\u0027s primary NIC. This change adds\na new optional configuration propery, gsa.admin.hostname, that\nallows the adaptor administrator to specify the separate admin\nIP address or hostname. If gsa.admin.hostname is not specified,\nit defaults to the same value as gsa.hostname.\n\nCode Review: http://codereview.appspot.com/104100043\n"
    },
    {
      "commit": "9652b2f61940d9b114d7abedfcf8a2f1bf97db5b",
      "tree": "ad7a17ed5d5c4a935e76ed4f6f6c82c14de524ab",
      "parents": [
        "7bb4377649cc5426db2ce26e883c695f2935a040"
      ],
      "author": {
        "name": "Brett Johnson",
        "email": "Brett.Michael.Johnson@gmail.com",
        "time": "Wed Jun 11 17:48:07 2014 -0700"
      },
      "committer": {
        "name": "Brett Johnson",
        "email": "Brett.Michael.Johnson@gmail.com",
        "time": "Wed Jun 11 17:48:07 2014 -0700"
      },
      "message": "GsaVersion should use HTTPS when in secure mode, for real.\n"
    },
    {
      "commit": "7bb4377649cc5426db2ce26e883c695f2935a040",
      "tree": "89e4eac9dd7e3c35596dd3a15b6b0347d12ad5bb",
      "parents": [
        "b52ad32ca3a33754eca432f6ebd060b2e21ce962"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Tue Jun 10 17:53:43 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Wed Jun 11 13:08:15 2014 -0700"
      },
      "message": "escape initial slashe\n\npreserves initial slash in doc ids.\n"
    },
    {
      "commit": "b52ad32ca3a33754eca432f6ebd060b2e21ce962",
      "tree": "eb20cf497651ec5b0cad10ba58d81e40756664ea",
      "parents": [
        "05e245ab72d56df57eec20081070d40a76e37740",
        "be8d7584f602123b7d0ee3b0a8792fdb24a3c691"
      ],
      "author": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Thu May 29 09:50:37 2014 -0700"
      },
      "committer": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Thu May 29 09:50:37 2014 -0700"
      },
      "message": "Merge branch \u0027master\u0027 of https://code.google.com/p/plexi\n"
    },
    {
      "commit": "be8d7584f602123b7d0ee3b0a8792fdb24a3c691",
      "tree": "22dd18f955b4bd9b795509d8eb164213cbee531d",
      "parents": [
        "58b22e43c1517f7c46b971f507fb0b2748868ae5"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Tue May 20 21:47:24 2014 -0700"
      },
      "committer": {
        "name": "P.J. Opalinski",
        "email": "pjo@google.com",
        "time": "Wed May 21 14:50:54 2014 -0700"
      },
      "message": "flag to index all docs from an adaptor as \"public\"\n"
    },
    {
      "commit": "05e245ab72d56df57eec20081070d40a76e37740",
      "tree": "eae095ec35a3adf615758b121fc08d5c1dfac9a6",
      "parents": [
        "6697d2d4188b98a2cd3a24107ecf8c937023c8a8"
      ],
      "author": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Wed May 21 14:45:12 2014 -0700"
      },
      "committer": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Wed May 21 14:45:12 2014 -0700"
      },
      "message": "Fix \"expected keys\" stats bug (b/13886888)\n"
    },
    {
      "commit": "58b22e43c1517f7c46b971f507fb0b2748868ae5",
      "tree": "676629ceb75b5a67695b41a31700e32903b0e625",
      "parents": [
        "4098cebe94eb4f333d5d0f5585e2169b62547ea7"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Tue May 20 20:39:45 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Tue May 20 20:39:45 2014 -0700"
      },
      "message": "fix still stale DocControls comment further\n"
    },
    {
      "commit": "4098cebe94eb4f333d5d0f5585e2169b62547ea7",
      "tree": "046ee30dc19afd5ea7b2b736b09761f7cc202ba8",
      "parents": [
        "ef7a357a5c3171f0a9e4fac117e6446b4820cf2a"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Tue May 20 20:32:13 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Tue May 20 20:32:13 2014 -0700"
      },
      "message": "fix stale doc-controls comment\n"
    },
    {
      "commit": "ef7a357a5c3171f0a9e4fac117e6446b4820cf2a",
      "tree": "069c7e700787997dcb6244c90b3dbc6bbaa3442e",
      "parents": [
        "05892ca8b0e8b7146da2142a48fb83d4619911a0",
        "6697d2d4188b98a2cd3a24107ecf8c937023c8a8"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Thu May 15 22:06:03 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Thu May 15 22:06:03 2014 -0700"
      },
      "message": "Merge branch \u0027master\u0027 of https://code.google.com/p/plexi\n"
    },
    {
      "commit": "6697d2d4188b98a2cd3a24107ecf8c937023c8a8",
      "tree": "0bf4a4134b99e2722119ac9814f9523ad60933f3",
      "parents": [
        "5bf5133e2230e37061dcc021defeda28691dd2c3"
      ],
      "author": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Thu May 15 10:57:31 2014 -0700"
      },
      "committer": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Thu May 15 10:57:31 2014 -0700"
      },
      "message": "Catch stale dashboard on \"Encode Sensitive Value\"\n\nSimilar to previous state dashboard issue (which handled the\nRun Incremental Push / Run Full Push buttons), this alerts/\nredirects to login when the dashboard has gotten stale, and\nthe user hits the \"Encode Sensitive Value\" button.\n"
    },
    {
      "commit": "05892ca8b0e8b7146da2142a48fb83d4619911a0",
      "tree": "a3727d3c95ae91d56ea9c7cb8a4938948cf132b5",
      "parents": [
        "5bf5133e2230e37061dcc021defeda28691dd2c3"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Wed May 14 17:30:37 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Wed May 14 17:30:37 2014 -0700"
      },
      "message": "make null config values throw InvalidConfig\n\nMakes it so that adaptor\u0027s which use initConfig with\nnull value receive InvalidConfigException when that\nnull value isn\u0027t overriden. This behaviour is better\nthan the IllegalStateException because IllegalState\ndidn\u0027t terminate adaptor running.\n"
    },
    {
      "commit": "5bf5133e2230e37061dcc021defeda28691dd2c3",
      "tree": "6eb3ed4237371ed865ecc07e010a39fbf54dd9dd",
      "parents": [
        "97c617d0cfd8713e8a4d7fbbe61bc6b3ebf2c3fd"
      ],
      "author": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Mon May 12 17:13:04 2014 -0700"
      },
      "committer": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Mon May 12 17:13:04 2014 -0700"
      },
      "message": "Reload page when either push button errors out\n\n(either full crawl or incremental crawl).  This fixes the following bugs:\nb/11369495 , b/8143800 , and b/14052915.\n"
    },
    {
      "commit": "97c617d0cfd8713e8a4d7fbbe61bc6b3ebf2c3fd",
      "tree": "9e5641dc9e980dc74fac4101a15bd249417adfa5",
      "parents": [
        "8b19c0756725ec7b6daef7e1b42f3b7b53872974"
      ],
      "author": {
        "name": "Brett Johnson",
        "email": "Brett.Michael.Johnson@gmail.com",
        "time": "Wed Apr 30 17:10:52 2014 -0700"
      },
      "committer": {
        "name": "Brett Johnson",
        "email": "Brett.Michael.Johnson@gmail.com",
        "time": "Tue May 06 17:31:39 2014 -0700"
      },
      "message": "Add StartupException and subclasses.\n\nThis change adds StartupException, and subclasses InvalidConfigurationException,\nand UnsupportedPlatformException. StartupExeceptions can be thrown by the\nAdaptor.init() method to immediatly abort Application startup.\nStartupExceptions bypass the Application retry with back-off wait recovery\nmechanism that will re-attempt to start the adaptor in hopes that a recoverable\nerror has been corrected. Therefore StartupExceptions should be thrown for\nunrecoverable situations, such as running on the wrong platform or a\nconfiguration that could never be valid.\n\nCode Review: http://codereview.appspot.com/99980043\n"
    },
    {
      "commit": "8b19c0756725ec7b6daef7e1b42f3b7b53872974",
      "tree": "8da415825e47625bfbc4fc934aa21620ad8fc9aa",
      "parents": [
        "dbaee2b53654fb896489aaf729089acdf6f52393"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Tue May 06 10:48:35 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Tue May 06 11:39:14 2014 -0700"
      },
      "message": "allow adaptor.configfile command line arguments\n"
    },
    {
      "commit": "dbaee2b53654fb896489aaf729089acdf6f52393",
      "tree": "2ad2d4135b497271af891454b97072e78c1fbd68",
      "parents": [
        "6d470ebf19a8d8163ad32d9592fd78ff919f9cbd"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Mon Apr 28 19:52:23 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Mon Apr 28 19:52:23 2014 -0700"
      },
      "message": "make javadoc reflect 7.2 AC locations\n"
    },
    {
      "commit": "6d470ebf19a8d8163ad32d9592fd78ff919f9cbd",
      "tree": "16543847c124f9975b45c8f79f76274055708c40",
      "parents": [
        "9cfd1a1a9bfc94d57ffab6cd630d4c1821855f81"
      ],
      "author": {
        "name": "Miguel Fernandez",
        "email": "mifern@google.com",
        "time": "Wed Apr 23 15:30:53 2014 -0700"
      },
      "committer": {
        "name": "Miguel Fernandez",
        "email": "mifern@google.com",
        "time": "Wed Apr 23 15:30:53 2014 -0700"
      },
      "message": "Increasing log area size\n\nIncrease the log area size from 10em to 100em.\n"
    },
    {
      "commit": "9cfd1a1a9bfc94d57ffab6cd630d4c1821855f81",
      "tree": "76cb4226b551029f93c7f3b6f92d1de912273d1d",
      "parents": [
        "9b48d7fa0c38ef0fbb82de7acdefecfc4ce531cb"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Thu Apr 17 15:52:32 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Thu Apr 17 15:52:32 2014 -0700"
      },
      "message": "make non-color logging have month and date\n"
    },
    {
      "commit": "9b48d7fa0c38ef0fbb82de7acdefecfc4ce531cb",
      "tree": "7a4a50524b19ddbd707946c2fc052b6c60a3ba1d",
      "parents": [
        "a307f54bf3dd2caf3469ff2446f0f50a3c77f230",
        "d5a06bad45ee536de8e44ed81c21a5fb4e0ce7da"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Thu Apr 17 15:32:38 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Thu Apr 17 15:32:38 2014 -0700"
      },
      "message": "Merge branch \u0027master\u0027 of https://code.google.com/p/plexi\n"
    },
    {
      "commit": "a307f54bf3dd2caf3469ff2446f0f50a3c77f230",
      "tree": "e8d3352846f1085e3d7d82ae54be793921970a3a",
      "parents": [
        "292fdd774462498363035424dd0b163ac04aa44c"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Mon Apr 14 14:54:42 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Mon Apr 14 15:19:09 2014 -0700"
      },
      "message": "make full and incremental push messages consistent\n"
    },
    {
      "commit": "292fdd774462498363035424dd0b163ac04aa44c",
      "tree": "9a281fee4ca655fab12ae745a05afb785ac05166",
      "parents": [
        "5c9d4f6b9d3b15018e9abf376eff3ed4d384929c"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Mon Apr 14 14:50:47 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Mon Apr 14 15:19:08 2014 -0700"
      },
      "message": "show helpful msg instead of -1 as statistic\n\nb/13655038 Make journaled data less confusing by not using -1\n"
    },
    {
      "commit": "5c9d4f6b9d3b15018e9abf376eff3ed4d384929c",
      "tree": "e808c20f458d0f5081477a13f18d56fbed1d60ca",
      "parents": [
        "28ac5870925709fcabb10789bc55f371d2378dd5"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Mon Apr 14 13:17:32 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Mon Apr 14 13:17:32 2014 -0700"
      },
      "message": "accept namespace when reading groups from csv\n"
    },
    {
      "commit": "d5a06bad45ee536de8e44ed81c21a5fb4e0ce7da",
      "tree": "56e5810223239e656576d06c2a8e70c474094f56",
      "parents": [
        "28ac5870925709fcabb10789bc55f371d2378dd5"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Apr 11 17:50:45 2014 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Apr 11 17:50:45 2014 -0700"
      },
      "message": "Simplify exception handling in Group CSV example\n"
    },
    {
      "commit": "28ac5870925709fcabb10789bc55f371d2378dd5",
      "tree": "d335dcb55719ae624e8eb4bb77cddfe535215e8a",
      "parents": [
        "8a614f2b5d357b980ba63bac4a9dbd8955f23f23"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Fri Apr 11 16:18:37 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Fri Apr 11 16:57:17 2014 -0700"
      },
      "message": "tool for feeding groups from csv\n"
    },
    {
      "commit": "8a614f2b5d357b980ba63bac4a9dbd8955f23f23",
      "tree": "8a8eac0e9bfc4e2a64de1496bdd1fdb68b7bcb92",
      "parents": [
        "83f9672fc2b5462bc6a1c3dcf9b82d1326163987"
      ],
      "author": {
        "name": "Brett Johnson",
        "email": "Brett.Michael.Johnson@gmail.com",
        "time": "Tue Apr 01 12:09:41 2014 -0700"
      },
      "committer": {
        "name": "Brett Johnson",
        "email": "Brett.Michael.Johnson@gmail.com",
        "time": "Tue Apr 01 14:10:16 2014 -0700"
      },
      "message": "Fix Flakey Unit Tests\n\nThis change restores two unit tests that failed regularly\nwhen run under Windows.  Both of these tests time how long\nit takes to shutdown either the Application or the Service,\nand in both cases it took slightly longer than expected.\n\nI believe the timing constraints were too tight, especially\nfor ShutdownWaiterTest.testShutdownFullWait(), which told\nthe waiter to wait 50 milliseconds for the shutdown to\ncomplete and complained if it took more than 58 milliseconds.\nThis could be an issue if shutdown took many seconds, minutes,\nor forever, but taking 10 or 20 milliseconds longer to shutdown\nshould not really be considered a problem.\n\nBefore I disabled the test, shutdown was taking slightly more\nthan 58 milliseconds most of the time, with an occasional breach\nof 60 milliseconds when run on my Windows VM.  I bumped the\nceiling to 65 ms and could easily be convinced that 75 or 100 ms\nwould be acceptable.  I also replaced instances of \"Mu\" with\n\"microseconds\" in the error messages, since the character did\nnot display correctly in the windows shell.\n\nThe second flakey test, ApplicationTest.testFastShutdownWhenStarting(),\nI was unable to get it to fail again in 100 attempts.  I even\nran 2 instances of the Connector Manager coverage tests at the same\ntime, each of which pegs the CPUs.  I thought I would overheat the\nmachine with all 4 cores pegged for nearly an hour.  Therefore,\nI restored the test unchanged.  If it starts failing again, we\nshould address it then.\n\nCode Review: http://codereview.appspot.com/83000045\n"
    },
    {
      "commit": "83f9672fc2b5462bc6a1c3dcf9b82d1326163987",
      "tree": "4271f5710e9ef13a7b20dab08dc68b75cd6236ef",
      "parents": [
        "d7c26d12757d2d57c156d33b20d822f40a33a862"
      ],
      "author": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Tue Mar 25 16:15:56 2014 -0700"
      },
      "committer": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Tue Mar 25 16:15:56 2014 -0700"
      },
      "message": "Take out \"config reload\" button from dashboard\n"
    },
    {
      "commit": "d7c26d12757d2d57c156d33b20d822f40a33a862",
      "tree": "fed7b16dbc12126df72b10e3d697dfc176081933",
      "parents": [
        "8bf2756e2fa597a382235a19bcc64370f7427b74"
      ],
      "author": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Tue Mar 25 14:31:06 2014 -0700"
      },
      "committer": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Tue Mar 25 14:53:39 2014 -0700"
      },
      "message": "Eliminate all wildcard import lines in library\n"
    },
    {
      "commit": "8bf2756e2fa597a382235a19bcc64370f7427b74",
      "tree": "aff70b5c423d37740109282b86bc5a795f0c199f",
      "parents": [
        "039c09d0cd7f1464bf327d6ec93d7f90a27ad744"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Tue Mar 25 14:22:37 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Tue Mar 25 14:22:37 2014 -0700"
      },
      "message": "remove special treatment of secmgr in build.xml\n\nall lib dependenceis of secmgr are already in lib\u0027s\nset of dependencies.\nalso secmgr package is now small and sub-package of\nadaptor library.\n"
    },
    {
      "commit": "039c09d0cd7f1464bf327d6ec93d7f90a27ad744",
      "tree": "16f706ba3641675d446708ed9469184284773de0",
      "parents": [
        "58f310dee1b7dcfb20209c29fa14534c5f27f4a1"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Tue Mar 25 10:48:32 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Tue Mar 25 10:48:32 2014 -0700"
      },
      "message": "remove warning\n"
    },
    {
      "commit": "58f310dee1b7dcfb20209c29fa14534c5f27f4a1",
      "tree": "03dd98f07c866e0c36b32823c27fb4cba452fce9",
      "parents": [
        "eabbb30e8d8cdbf01e63e66945ba3eb999a3b8f6"
      ],
      "author": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Fri Mar 21 16:42:09 2014 -0700"
      },
      "committer": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Mon Mar 24 09:59:24 2014 -0700"
      },
      "message": "Add Status entry for Java version compatibility\n"
    },
    {
      "commit": "eabbb30e8d8cdbf01e63e66945ba3eb999a3b8f6",
      "tree": "f9cab6ceffbc7c61e6eee7ed3c31325fb07ad0f2",
      "parents": [
        "fd338ee9359328df90d0578a084984b4582a84e6"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Wed Mar 19 18:25:18 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Wed Mar 19 18:28:52 2014 -0700"
      },
      "message": "Revert \"Item interface should have been in DocIdPusher interface\"\n\nThis reverts commit 76e83350afc3c0a902c60addfeb3502744d0e5a3.\n\nPutting the Item interface inside of DocIdPusher interface\nmade it public. The Item interface is used inside the library\nfor dealing with records, acls and docids. However Item\nshould not be available to clients to create other Item types\nwhich would result in possible runtime exceptions.\n\nWe are reverting the placement of Item from DocIdPusher to\nDocIdSender.  DocIdSender is concrete and allow for hiding\nof the Item interface.\n"
    },
    {
      "commit": "fd338ee9359328df90d0578a084984b4582a84e6",
      "tree": "e809da1c600aee375b95d65807d4011b0d217073",
      "parents": [
        "4adc1004c67d2be21639ad7a7473ff69f7677946"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Wed Mar 19 18:01:55 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Wed Mar 19 18:01:55 2014 -0700"
      },
      "message": "Revert \"Remove DocumentHandler.AsyncPusher interface\"\n\nThis reverts commit 4adc1004c67d2be21639ad7a7473ff69f7677946.\n\nThis CL exoses a failure where Item was visible outside of\nlibrary package.  Further thinking about this CL revelaed\nthat DocumentHandler.AsyncPusher had a purpose of hiding\nthe pushing of fragments (which are pushed because of GSA\nlimitations).\n"
    },
    {
      "commit": "4adc1004c67d2be21639ad7a7473ff69f7677946",
      "tree": "6a7e8a6ba9308790851efc7997a958f1bde5c840",
      "parents": [
        "a439f2d0695a6097b68f439da5c37076791b43fc"
      ],
      "author": {
        "name": "Miguel Fernandez",
        "email": "mifern@google.com",
        "time": "Tue Mar 18 14:40:37 2014 -0700"
      },
      "committer": {
        "name": "Miguel Fernandez",
        "email": "mifern@google.com",
        "time": "Wed Mar 19 07:05:19 2014 -0700"
      },
      "message": "Remove DocumentHandler.AsyncPusher interface\n\nMoving the methods exposed by DocumentHandler.AsyncPusher to\nAsyncDocIdPusher and removing DocumentHandler.AsyncPusher.\n"
    },
    {
      "commit": "a439f2d0695a6097b68f439da5c37076791b43fc",
      "tree": "e809da1c600aee375b95d65807d4011b0d217073",
      "parents": [
        "aafeb93a710f1c32e83d8b35636b8e37b95fa490"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Mon Mar 17 16:56:37 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Mon Mar 17 16:56:37 2014 -0700"
      },
      "message": "move package c/g/e/secmgr to be c/g/e/adaptor/secmgr\n\nadaptor has fork of couple secmgr classes. this fork\nhas lived in same named package as secmgr. this CL\nmoves the fork to a non-conflicating package name.\n"
    },
    {
      "commit": "aafeb93a710f1c32e83d8b35636b8e37b95fa490",
      "tree": "6c8cff48b5efa6830d80fb86c2ca28807bad1f9a",
      "parents": [
        "ed5beb08bde3567428bdb428c4827d6156f09715"
      ],
      "author": {
        "name": "Miguel Fernandez",
        "email": "mifern@google.com",
        "time": "Thu Mar 13 20:07:51 2014 -0700"
      },
      "committer": {
        "name": "Miguel Fernandez",
        "email": "mifern@google.com",
        "time": "Thu Mar 13 22:41:06 2014 -0700"
      },
      "message": "Adding AsyncDocIdPusher interface\n\nAdding the interface AsyncDocIdPusher that exposes the functionality\nof the AsyncPusher interface to adaptors.\n"
    },
    {
      "commit": "ed5beb08bde3567428bdb428c4827d6156f09715",
      "tree": "c404fa8c559a3c04b2d9ab69b9672211517239a6",
      "parents": [
        "66d43d262e89110e94d021d60eb7f9ffdead8bf4"
      ],
      "author": {
        "name": "Brett Johnson",
        "email": "Brett.Michael.Johnson@gmail.com",
        "time": "Thu Mar 13 18:12:51 2014 -0700"
      },
      "committer": {
        "name": "Brett Johnson",
        "email": "Brett.Michael.Johnson@gmail.com",
        "time": "Thu Mar 13 18:12:51 2014 -0700"
      },
      "message": "Fix test failures on Windows\n\n1) Comment out flakey AdaptorTest.testFastShutdownWhenStarting()\n2) Comment out flakey ShutdownWaitorTest.testInterruptFullWait()\n3) Convert \"\\r\\n\" to \"\\n\" when reading output in DownloadDumpHandlerTest\n4) Fix java program name and file separator char in JavaExecTest\n\nTODO: Fix flakey timing tests in the near future.\n"
    },
    {
      "commit": "66d43d262e89110e94d021d60eb7f9ffdead8bf4",
      "tree": "dec852237d4503d29f6039255e92134c30ef4052",
      "parents": [
        "9308073094e8a28c6ebd706b988ff8572eb834a7"
      ],
      "author": {
        "name": "Brett Johnson",
        "email": "Brett.Michael.Johnson@gmail.com",
        "time": "Mon Mar 10 17:36:30 2014 -0700"
      },
      "committer": {
        "name": "Brett Johnson",
        "email": "Brett.Michael.Johnson@gmail.com",
        "time": "Mon Mar 10 21:15:54 2014 -0700"
      },
      "message": "LIB Make AdaptorTemplate.jar with manifest for testing service\n\nThis adds a build target for constructing a stand-alone AdaptorTemplate.jar for\nuse in testing. The jar requires only a matching adaptor-[version]-withlib.jar\nand a adaptor-config.properties in the same directory as AdaptorTemplate.jar.\n\nIt can be run with the command \u0027java -jar AdaptorTemplate.jar\u0027\n\nCode Review: http://codereview.appspot.com/73830043\n"
    },
    {
      "commit": "9308073094e8a28c6ebd706b988ff8572eb834a7",
      "tree": "52a072cf664ce0b906e2672527aa08d591735127",
      "parents": [
        "efcf210b82ebace5682eae73d7a2f2146d2c87cb"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Mon Mar 10 18:33:25 2014 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Mon Mar 10 18:33:25 2014 -0700"
      },
      "message": "make JavaExecTest compile on jdk7\n\njdk7 added method to RuntimeMXBean interface\n"
    },
    {
      "commit": "efcf210b82ebace5682eae73d7a2f2146d2c87cb",
      "tree": "d928c13b343755fba66170f0bc6a2371ecf2ec6a",
      "parents": [
        "55aed62df47c1d6ce9fe51719351a4b7d58e3825"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Mar 07 16:33:00 2014 -0800"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon Mar 10 15:56:47 2014 -0700"
      },
      "message": "Add basic foundation of Service class\n\nIt works, but has lots of TODOs and needs more fleshing out.\n"
    },
    {
      "commit": "55aed62df47c1d6ce9fe51719351a4b7d58e3825",
      "tree": "4ff13eb0083f5ea7aec32c87911fbabc1002c7cf",
      "parents": [
        "2c6f64c14271683e73353d9fa1156e9af34d99f0"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue Feb 25 15:48:00 2014 -0800"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon Mar 10 15:56:46 2014 -0700"
      },
      "message": "Add ability to create Java subprocesses\n\nSome possible features are left out, like specifying the main class and\nclass path, or being able to override system properties and JVM\narguments.\n\nJavaExecTestChild.jar simply specifies a Class-Path and Main-Class so\nthat JavaExecTest.Child is run.\n"
    },
    {
      "commit": "2c6f64c14271683e73353d9fa1156e9af34d99f0",
      "tree": "043ec5679c604fec04a76abe545bfef8000cb2e3",
      "parents": [
        "3f18510bea3654813e7a4dbac6df35c81b120818"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Feb 14 18:09:38 2014 -0800"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon Mar 10 15:56:46 2014 -0700"
      },
      "message": "Add an HTTP reverse proxy\n"
    },
    {
      "commit": "3f18510bea3654813e7a4dbac6df35c81b120818",
      "tree": "f374385a4f85a4ec228b05d7778402945757d1b1",
      "parents": [
        "76e83350afc3c0a902c60addfeb3502744d0e5a3"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon Jun 10 15:13:20 2013 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Mar 07 17:11:22 2014 -0800"
      },
      "message": "Support modified UTF-8 in command line adaptor\n\nOur modified UTF-8 supports encoding \\0 and \\n as two bytes, unlike\n\u0027normal\u0027 modified UTF-8 that only encodes \\0.\n"
    },
    {
      "commit": "76e83350afc3c0a902c60addfeb3502744d0e5a3",
      "tree": "0f1690cf8d2e2fa5638e5d25bd754d5f0938ee4e",
      "parents": [
        "9607e4183a6a4e2f98971f7d423e862885560056"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Thu Mar 06 17:15:28 2014 -0800"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Thu Mar 06 17:15:28 2014 -0800"
      },
      "message": "Item interface should have been in DocIdPusher interface\n"
    },
    {
      "commit": "9607e4183a6a4e2f98971f7d423e862885560056",
      "tree": "75e0ef47b739a3ea9b8eb88175d1ce07f58c078d",
      "parents": [
        "65598dfa59b25bdfd65578b98c8011e42af31b5b"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Wed Feb 26 10:52:21 2014 -0800"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Wed Feb 26 10:52:21 2014 -0800"
      },
      "message": "Add restart tests to Application\n"
    },
    {
      "commit": "65598dfa59b25bdfd65578b98c8011e42af31b5b",
      "tree": "bffe4f24022bc9163e90942a67d3eec3a29948e9",
      "parents": [
        "129ce3b045f41a2a0dd43ab9c69938bbec33ec4e"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue Feb 11 09:44:21 2014 -0800"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue Feb 25 15:48:40 2014 -0800"
      },
      "message": "Add parser for HTTP\u0027s comma-separated lists\n"
    },
    {
      "commit": "129ce3b045f41a2a0dd43ab9c69938bbec33ec4e",
      "tree": "c69278a86fb650a654bc9cbe72bea093c2851932",
      "parents": [
        "73b03150de21c7b04c0570b39e96c6125632be75"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue Feb 11 09:34:39 2014 -0800"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue Feb 25 15:48:39 2014 -0800"
      },
      "message": "Extract MockHttpHandler from GsaFeedFileSenderTest\n\nThe mock in GsaFeedFileSenderTest is much more useful than the existing\nmock, which has been moved to AdministratorSecurityHandlerTest and\nrenamed to CountingHttpHandler.\n"
    },
    {
      "commit": "73b03150de21c7b04c0570b39e96c6125632be75",
      "tree": "db1267b161f9510a0024ec4c4a75a2ffc8ed00eb",
      "parents": [
        "2a9d0c935976fc3bc5960f79ccb6be6d8f6937cd"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Wed Feb 19 10:40:46 2014 -0800"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Wed Feb 19 10:40:46 2014 -0800"
      },
      "message": "Add missing return in ACL\n\nThis has no externally visible impact because the rest of the code\nbehaved correctly, but would reduce the number of allocations.\n"
    },
    {
      "commit": "2a9d0c935976fc3bc5960f79ccb6be6d8f6937cd",
      "tree": "902e3e6bf2c266cddacea82dcbe94756f3cd027f",
      "parents": [
        "67ef5ad7fae458181be22a744dc6df725c0cb355"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue Jan 28 15:14:22 2014 -0800"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue Jan 28 15:14:22 2014 -0800"
      },
      "message": "Remove unused import\n"
    },
    {
      "commit": "67ef5ad7fae458181be22a744dc6df725c0cb355",
      "tree": "8a0aa5ba621b42d9cb067c70010a8435c1adb28d",
      "parents": [
        "5d40e25db5e7bc564a1c1782ee2330f57702c80d",
        "f00da3c8fe64191410fa8fea9a4caacbf5bbd333"
      ],
      "author": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Wed Jan 15 11:00:50 2014 -0800"
      },
      "committer": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Wed Jan 15 11:00:50 2014 -0800"
      },
      "message": "Merge branch \u0027master\u0027 of https://code.google.com/p/plexi\n"
    },
    {
      "commit": "5d40e25db5e7bc564a1c1782ee2330f57702c80d",
      "tree": "2ef4c41145767f27c008994f0d114e97cafb201c",
      "parents": [
        "567f4f164e6bb9e5d4901b260cdaec364de2a2a7"
      ],
      "author": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Thu Jan 09 16:40:06 2014 -0800"
      },
      "committer": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Wed Jan 15 09:57:36 2014 -0800"
      },
      "message": "A few tweaks to fix post-submitted comments\n\nImprove and augment DownloadDumpHandler unit tests to test the newly-added\nstats and config zip entries.\n"
    },
    {
      "commit": "f00da3c8fe64191410fa8fea9a4caacbf5bbd333",
      "tree": "c2d05869d4db7a6307fdebf0cd7cdc1fd923111c",
      "parents": [
        "a2350c7c9806958eb13e0cabd9897c099b442fe4"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Thu Jan 09 20:44:32 2014 -0800"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Jan 10 17:08:41 2014 -0800"
      },
      "message": "Make Cron.CronPattern.FIELDS immutable\n\nThe List returned from Arrays.asList() is able to mutate the underlying\narray.\n"
    },
    {
      "commit": "a2350c7c9806958eb13e0cabd9897c099b442fe4",
      "tree": "3f70390806b870032b9e7320de619e3573bf1252",
      "parents": [
        "6573b424359b258e97435243e9f6a680deb91a59"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Thu Jan 09 20:19:47 2014 -0800"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Jan 10 17:08:40 2014 -0800"
      },
      "message": "Cron day of week and month should be ORed\n\nWhen both day of week and day of month are specified, they should be\nORed instead of ANDed. This is the standard behavior of cron\nimplementations.\n"
    },
    {
      "commit": "6573b424359b258e97435243e9f6a680deb91a59",
      "tree": "18768d970a4ef3017aa5b175822797da2f106533",
      "parents": [
        "2a9e1b5e0a37825601972e73d725dd8edbf8cf4f"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Thu Jan 09 20:48:31 2014 -0800"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Jan 10 17:08:40 2014 -0800"
      },
      "message": "Use EnumMap instead of List in CronPattern\n"
    },
    {
      "commit": "2a9e1b5e0a37825601972e73d725dd8edbf8cf4f",
      "tree": "08301ac275fd6c3be59ca2f97f75fb4080450e5e",
      "parents": [
        "9e2f915075e84dc5186d30173b5e7a87df96c28f"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Thu Jan 09 20:47:33 2014 -0800"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Jan 10 17:08:17 2014 -0800"
      },
      "message": "Remove unnecessary sleeps from CronSchedulerTest\n\nThe run() all happens on the same thread, so there are no races.\n"
    },
    {
      "commit": "9e2f915075e84dc5186d30173b5e7a87df96c28f",
      "tree": "72705a1697d8de3d798aaff73a65c6add27a5ced",
      "parents": [
        "ea3f0b5e5832cc40e89c5c4aa5a6276ae878744a"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue Dec 03 05:16:34 2013 -0800"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Jan 10 11:35:27 2014 -0800"
      },
      "message": "Remove SecMgr dependency on slf4j\n\nSlf4j is still a dependency of OpenSAML.\n"
    },
    {
      "commit": "ea3f0b5e5832cc40e89c5c4aa5a6276ae878744a",
      "tree": "9b890718344880c525957d4272d37b6b6d233855",
      "parents": [
        "567f4f164e6bb9e5d4901b260cdaec364de2a2a7"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon Dec 02 13:10:58 2013 -0800"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Jan 10 11:35:26 2014 -0800"
      },
      "message": "Massive removal of SecMgr dead code\n\nThis makes it much more obvious what SecMgr code we are actually using.\nWe limit ourselves to mainly deletes and small changes, because we don\u0027t\nyet want to fork ourselves too much.\n"
    },
    {
      "commit": "567f4f164e6bb9e5d4901b260cdaec364de2a2a7",
      "tree": "5ec7a17e69de4993c3c40b84dbbd65abfd84303d",
      "parents": [
        "ef16be49cb76f00c2847f1a8c619d4e9478adeff"
      ],
      "author": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Mon Jan 06 14:21:21 2014 -0800"
      },
      "committer": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Wed Jan 08 10:22:07 2014 -0800"
      },
      "message": "Add configuration and stats to the diagnostics zip\n"
    },
    {
      "commit": "ef16be49cb76f00c2847f1a8c619d4e9478adeff",
      "tree": "ec762cc53d122e6b5349604e9d7c7cf9621dceda",
      "parents": [
        "b02e5dd576e63c7d52cd2145ead4c51d26069c3c"
      ],
      "author": {
        "name": "Jérémy Garreau",
        "email": "jeremy.garreau@nrx.eu",
        "time": "Tue Dec 17 11:13:21 2013 -0800"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Dec 20 17:15:15 2013 -0800"
      },
      "message": "Kennedy-ize the dashboard\n"
    },
    {
      "commit": "b02e5dd576e63c7d52cd2145ead4c51d26069c3c",
      "tree": "c8126863bcefe63d0145d8a4d1b485b4f7cfce7f",
      "parents": [
        "036670f7ad689eaf5cbc2d88c609a7d0553bf234"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Sun Aug 25 15:54:04 2013 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Dec 20 17:14:17 2013 -0800"
      },
      "message": "Move Adaptor.init() calling to Application\n\nThis allows using GsaCommunicationHandler as a library.\n"
    },
    {
      "commit": "036670f7ad689eaf5cbc2d88c609a7d0553bf234",
      "tree": "fb803266b79d3f4f946e111de0946cf2415fa8b2",
      "parents": [
        "13ee64ee3a1acdc938aa7c54f0e14d6d2bf59bdf"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue Nov 26 08:17:37 2013 -0800"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Dec 20 17:14:17 2013 -0800"
      },
      "message": "Better manage GsaCommHandler\u0027s lifecycle\n\nWe now manage GsaCommunicationHandler\u0027s lifecycle more precisely. We now\nsetup the bare minimum before Adaptor.init() and teardown as much as\npossible before Adaptor.destroy().\n\nThere are many thread-safety and object reachability fixes, primarily\nmade obvious by the handling of most Adaptor references within\nAdaptorContextImpl.\n"
    },
    {
      "commit": "13ee64ee3a1acdc938aa7c54f0e14d6d2bf59bdf",
      "tree": "f29c6b4c5b42cf766c42a77a621e387d8d199981",
      "parents": [
        "9ab4d39926765d5a3ec350a01247438bc1192b99"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Nov 22 10:25:09 2013 -0800"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Dec 20 17:14:17 2013 -0800"
      },
      "message": "Make Dashboard directly immutable\n\nDashboard still contains references to non-immutable structures, but\nthe main internals no longer change.\n"
    },
    {
      "commit": "9ab4d39926765d5a3ec350a01247438bc1192b99",
      "tree": "6ac9004122591c14f7e4c2a0f20826d5eda437ec",
      "parents": [
        "7bbcf1699d2a9cee6f213ba05e7bebf90c58be04"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Nov 22 09:46:51 2013 -0800"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Dec 20 16:40:40 2013 -0800"
      },
      "message": "Prevent mutations to AdaptorContext after Adaptor.init()\n\nThis limitation has been the intention for a little while now, but many\ncases were overlooked.\n"
    },
    {
      "commit": "7bbcf1699d2a9cee6f213ba05e7bebf90c58be04",
      "tree": "4ea8cedf99df4e34476ef58e5be57be73fe794d1",
      "parents": [
        "7136e48fd0c17f6aac85cb478eb3395639ff5e30"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Wed Nov 20 13:50:24 2013 -0800"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Dec 20 16:40:40 2013 -0800"
      },
      "message": "Remove unhelpful CountDownLatch from startup\n\nA simple join() is all that is necessary, so use that instead of the\nless familiar CountDownLatch.\n"
    },
    {
      "commit": "7136e48fd0c17f6aac85cb478eb3395639ff5e30",
      "tree": "8223c86fa43a9be39dae18084489eaf12b69297b",
      "parents": [
        "918fe41a6f7c83a96e831e2c6ae272323e0d4ebe"
      ],
      "author": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Wed Dec 11 11:19:07 2013 -0800"
      },
      "committer": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Wed Dec 11 13:14:35 2013 -0800"
      },
      "message": "Add faulty principal name to thrown Exception\n\nThis is part of the effort to fix b/12070151.\n"
    },
    {
      "commit": "918fe41a6f7c83a96e831e2c6ae272323e0d4ebe",
      "tree": "e52fcdcad6e3564076d9488ae16c60a0c94f3099",
      "parents": [
        "52142b6980b655c1eed804c9d920424e934732ef"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon Nov 25 13:27:51 2013 -0800"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon Nov 25 13:41:45 2013 -0800"
      },
      "message": "Add Windows service setup documentation\n"
    },
    {
      "commit": "52142b6980b655c1eed804c9d920424e934732ef",
      "tree": "9ff75a1cdff9880b4ee429463124f9aebbd6319c",
      "parents": [
        "1c72603e6b6ab7c0f889dcc0701072d1ef5f25b3"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Thu Nov 21 16:02:17 2013 -0800"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Mon Nov 25 10:51:33 2013 -0800"
      },
      "message": "config to log named resources being fed\n"
    },
    {
      "commit": "1c72603e6b6ab7c0f889dcc0701072d1ef5f25b3",
      "tree": "e3415bc124735bf203f1a5eab17634c2ccff45d5",
      "parents": [
        "d15182722edc862ec55182340d0e309416ba1cf4"
      ],
      "author": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Tue Nov 19 14:46:59 2013 -0800"
      },
      "committer": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Tue Nov 19 15:13:24 2013 -0800"
      },
      "message": "Require authorized user to download diagnostics.zip\n\nTested manually: before the code change, visiting the zip file URL\nsuccessfully generated and downloaded the diagnostics .zip file; after\nthe fix, the GET now returns \" [403  Forbidden] \" from an anonymous\nwindow, but generates the .zip file when the admin is logged in.\n"
    },
    {
      "commit": "d15182722edc862ec55182340d0e309416ba1cf4",
      "tree": "23756e1ef7d4d5e2efb90f50481f0b2ba6d96083",
      "parents": [
        "7cf0cafbb7b755cde9853cfb5f573c8e4242af4f"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon Nov 18 16:16:47 2013 -0800"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon Nov 18 17:49:56 2013 -0800"
      },
      "message": "Add support for procrun to Daemon\n\nprocrun works a bit differently than jsrv. This adds support for jvm\nmode of procrun.\n"
    },
    {
      "commit": "7cf0cafbb7b755cde9853cfb5f573c8e4242af4f",
      "tree": "3fac3029f597e4203d08174abc6d53f311c55011",
      "parents": [
        "38b0be8659794bf53f6ff6e79b442b9fd9423cc6"
      ],
      "author": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Mon Oct 28 15:57:58 2013 -0700"
      },
      "committer": {
        "name": "Marc Kriguer",
        "email": "myk@google.com",
        "time": "Wed Nov 06 14:46:03 2013 -0800"
      },
      "message": "Add a diagnostic DownloadDumpHandler class\n\nCreate a new Handler class (DownloadDumpHandler) that generates a new\nZip file when it matches the URL /diagnostics-zip-dump.  Currently, that\nfile contains all the system logs as well as a thread dump, but future\nversions will also include a copy of the configuration as well as other\ndiagnostics.\n\nNew file src/com/google/enterprise/adaptor/DownloadDumpHandler.java\ncontains most of the logic; the only changes to the other files are to\nregister the new Handler (in Dashboard.java) and to provide a link\nthat generates the Zip into resources/.../resources/index.html .  In addition,\nnew functionality for the MockFile test class (implemented by ejona@) is\nincluded.  The DownloadDumpHandlerTest class uses this new functionality.\n\nUnit test suite for DownloadDumpHandler has 98% code coverage; the only line not\ncovered is the one method overriden in the test class (to avoid real file I/O).\n\nMade only the one-argument constructor (with the feedname) public; the other is\npackage-private (as it\u0027s only for testing the class).\n"
    },
    {
      "commit": "38b0be8659794bf53f6ff6e79b442b9fd9423cc6",
      "tree": "5803f5fa9650491929db30dc0f06b80e6bd92acc",
      "parents": [
        "ca2cb90534ef2c6b70993a20d914d4cd70cfa71a"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon Nov 04 17:50:09 2013 -0800"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Tue Nov 05 14:23:48 2013 -0800"
      },
      "message": "Fix AdaptorContext.setAuth[nz]Authority\n\nPreviously, it did nothing. Now it actually sets the variable we expect.\nThis bug prevents Adaptors from providing SAML authn/authz.\n"
    },
    {
      "commit": "ca2cb90534ef2c6b70993a20d914d4cd70cfa71a",
      "tree": "596643869d92d6a5eef31ac5e29c97d09214f238",
      "parents": [
        "e5132009db2153421573b9e60c9d1bf54b74ea97"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Mon Nov 04 18:52:36 2013 -0800"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Tue Nov 05 14:19:42 2013 -0800"
      },
      "message": "close statement on all DbAdaptorTemplate paths\n"
    },
    {
      "commit": "e5132009db2153421573b9e60c9d1bf54b74ea97",
      "tree": "db1cb3752499c5573563667b49f57fc81ce887a7",
      "parents": [
        "a04fe2e01aab5e111a9e5441dcb9e19e7c78df59"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Mon Nov 04 18:37:18 2013 -0800"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Mon Nov 04 18:37:18 2013 -0800"
      },
      "message": "close HttpClientAdapter\u0027s reader instead of InputStream\n\nwhen getting http entity as string we didn\u0027t close\nthe top-most level object. this was detected by findbugs.\n"
    },
    {
      "commit": "a04fe2e01aab5e111a9e5441dcb9e19e7c78df59",
      "tree": "906ffddad4333a99f7819f604021cbb846d390ea",
      "parents": [
        "89d062595b07568dc141236186d40d8118099b15"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Mon Nov 04 18:06:44 2013 -0800"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Mon Nov 04 18:06:44 2013 -0800"
      },
      "message": "add Metadata.hashCode\n"
    },
    {
      "commit": "89d062595b07568dc141236186d40d8118099b15",
      "tree": "abde9fd11351979b00a203198e45ded39a32f254",
      "parents": [
        "b4e77914ea502cf9ce655cd806e4fb6b66fca755"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Oct 25 22:31:08 2013 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Mon Oct 28 13:41:33 2013 -0700"
      },
      "message": "Add month and day to custom log message format\n\nThis allows the custom formatter to be used by customers with reasonable\nsuccess. It is still primarily intended for development, but because it\nhas the thread ID and is normal text (not XML), it is helpful for\ncustomers as well.\n"
    },
    {
      "commit": "b4e77914ea502cf9ce655cd806e4fb6b66fca755",
      "tree": "367496fbfe6100cbdf4cade231c446a698d0d831",
      "parents": [
        "287d4084ef4abc91f33ab10f6302b6f323e66539"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Tue Oct 22 16:12:53 2013 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Tue Oct 22 16:12:53 2013 -0700"
      },
      "message": "document cmd-line adaptor\u0027s namespaced ACL support\n"
    },
    {
      "commit": "287d4084ef4abc91f33ab10f6302b6f323e66539",
      "tree": "ab36fd9450628f74ecf138e12aa37bf9489a5ce6",
      "parents": [
        "7e60d39cd7e09f4472137349e489ee3eb4266809"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Wed Oct 16 17:35:25 2013 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Mon Oct 21 17:56:44 2013 -0700"
      },
      "message": "namespaced acl support in command-line adaptor\n"
    },
    {
      "commit": "7e60d39cd7e09f4472137349e489ee3eb4266809",
      "tree": "9f23833d1ad2c8ed93287a0296ee0b6071447657",
      "parents": [
        "c97725156270e35bb0ec773069c90929f597bd12"
      ],
      "author": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Oct 18 17:30:00 2013 -0700"
      },
      "committer": {
        "name": "Eric Anderson",
        "email": "ejona@google.com",
        "time": "Fri Oct 18 17:49:39 2013 -0700"
      },
      "message": "Fix calling watchdog from different thread\n\nPreviously it was assumed that Response would only be accessed on the\nprimary thread for a request. However, our own builtin Command Line\nAdaptor actually used Response from a different thread. With this change\nyou can now use Response on a different thread than getDocContent(),\nalthough the object is still not thread-safe.\n"
    },
    {
      "commit": "c97725156270e35bb0ec773069c90929f597bd12",
      "tree": "480b97ba242df1fac80eb04876ea91009be3a338",
      "parents": [
        "adb3c5eaa3651815955170acbe796c4d0d366736",
        "02974e2bc15b2abd3c2bc900434d3c5e64d72888"
      ],
      "author": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Mon Oct 14 10:06:03 2013 -0700"
      },
      "committer": {
        "name": "PJ",
        "email": "pjo@google.com",
        "time": "Mon Oct 14 10:06:03 2013 -0700"
      },
      "message": "Merge branch \u0027master\u0027 of https://code.google.com/p/plexi\n"
    }
  ],
  "next": "adb3c5eaa3651815955170acbe796c4d0d366736"
}
