)]}'
{
  "log": [
    {
      "commit": "659aa75d64c5e4dc67091f667ce875c690214b4e",
      "tree": "96287b25cf96a2ae0100fd4f427b19ffd559a66e",
      "parents": [
        "1e1246a05331497c290bffab65b9c02b7f9d0368"
      ],
      "author": {
        "name": "Calin Crecea",
        "email": "calin.crecea@sap.com",
        "time": "Thu Mar 30 14:21:29 2017 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Apr 04 06:48:00 2017 -0400"
      },
      "message": "support multiple OUs in LDAP component\n\nLDAPConfig class has been enhanced to support a new parameter\n\"subDNs\" which is a collection of prefixes to add to \"baseDN\"\nparameter.\nLDAPUserComponent has been modified to take into account the new\nparameters and search in a loop.\nSetting multiple OUs enables the usage of users from different LDAP\nOrganization Units.\n\nChange-Id: I22fc321b4938590d717784c7eb200f3aa8c1d206\nSigned-off-by: Calin CRECEA \u003ccalin.crecea@sap.com\u003e\n"
    },
    {
      "commit": "1e1246a05331497c290bffab65b9c02b7f9d0368",
      "tree": "e5da0a689602e273bb7af04eadc09672ad59c371",
      "parents": [
        "fe41aac5bc3a0d8c42b4027cd517974cd1925a4a"
      ],
      "author": {
        "name": "Frederic SIVIGNON",
        "email": "frederic.sivignon@sap.com",
        "time": "Fri Mar 31 11:42:35 2017 +0200"
      },
      "committer": {
        "name": "Frederic SIVIGNON",
        "email": "frederic.sivignon@sap.com",
        "time": "Fri Mar 31 11:42:35 2017 +0200"
      },
      "message": "Improve Skalli startup time.\n\nWe now read all projects in one request instead\nof reading them one by one.\n\nChange-Id: I8270983d9f1bfea073e498b82c3fe82412cb1076\nSigned-off-by: Frederic Sivignon \u003cfrederic.sivignon@sap.com\u003e\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "fe41aac5bc3a0d8c42b4027cd517974cd1925a4a",
      "tree": "2ec411f18f46580573d51bb4669b59f3efe653cf",
      "parents": [
        "029c70b83f784552ecf902587e519fbf6f347956"
      ],
      "author": {
        "name": "Adrian SPINU",
        "email": "adrian.spinu@sap.com",
        "time": "Fri Mar 24 13:40:34 2017 +0100"
      },
      "committer": {
        "name": "Adrian SPINU",
        "email": "adrian.spinu@sap.com",
        "time": "Fri Mar 24 13:40:34 2017 +0100"
      },
      "message": "Fixing tests related with \u0027lastModifiedMillis\u0027\n\nSome unit tests where not passing after the \u0027lastModifiedMillis\u0027 field\nwas added to the Indexer.\n\nChange-Id: Ia01f7b675f31692e0541ed16bfa78d78de71c879\nSigned-off-by: Adrian Spinu \u003cadrian.spinu@sap.com\u003e\n"
    },
    {
      "commit": "029c70b83f784552ecf902587e519fbf6f347956",
      "tree": "d088e2a3a1166a05e677d3b973312f10a45bb3d5",
      "parents": [
        "b6894d90b411502a46e60b7263513b7e420f4540"
      ],
      "author": {
        "name": "Frederic SIVIGNON",
        "email": "frederic.sivignon@sap.com",
        "time": "Mon Feb 27 13:54:43 2017 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Thu Mar 23 13:30:12 2017 +0100"
      },
      "message": "Synchronization of UserContainer with UserService\n\nThe UserContainer class is now instantiated by OSGI.\nIt is notified via the event service each time a\nuser is added/modified within the current UserService\nimplementation.\n\nChange-Id: I51811bf359abc6f477afe78190cdb24145ae1b19\nSigned-off-by: Frederic SIVIGNON \u003cfrederic.sivignon@sap.com\u003e\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e"
    },
    {
      "commit": "b6894d90b411502a46e60b7263513b7e420f4540",
      "tree": "0e63edb7d545d1f6971a9ea2adc04ba821590c27",
      "parents": [
        "69f2f0549e45fb7e658135fd7d3768226ee6d096"
      ],
      "author": {
        "name": "Adrian SPINU",
        "email": "adrian.spinu@sap.com",
        "time": "Thu Mar 16 15:02:21 2017 +0100"
      },
      "committer": {
        "name": "Adrian SPINU",
        "email": "adrian.spinu@sap.com",
        "time": "Tue Mar 21 15:17:46 2017 +0100"
      },
      "message": "Adding the lastModifiedMillis field to the indexer\n\nIn order to query only the projects modified during a certain\ntimeframe the lastModifiedMillis field was added to the lucene indexer.\n\nChange-Id: I140a3e228ce94181e0b9090de28d9c9110df4407\nSigned-off-by: Adrian Spinu \u003cadrian.spinu@sap.com\u003e\n"
    },
    {
      "commit": "69f2f0549e45fb7e658135fd7d3768226ee6d096",
      "tree": "e3bdd280bb3f898d302dae2b036751ab432d0044",
      "parents": [
        "231aa72adb96dfdcac6a6f4c985f9f9909a742f9"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Jan 24 11:55:05 2017 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Jan 24 14:32:25 2017 +0100"
      },
      "message": "Completed implementation of MavenReactorConverter\n\nImplemented the missing unmarshal method; added a test case\n\nChange-Id: I01877db40194431fca99391147a86a2761e38280\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "231aa72adb96dfdcac6a6f4c985f9f9909a742f9",
      "tree": "901bf3a60c15d666c71df31e3005e12497b6e042",
      "parents": [
        "1d00d167e5d0815e82e72e45df5d26cb16e4237e"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Jan 13 14:30:09 2017 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Jan 13 14:50:56 2017 +0100"
      },
      "message": "Update to org.apache.commons.codec 1.4.0\n\nThe old version is lacking some useful helpers like\nBase64InputStream.\n\nChange-Id: I97896f4960cb248ddb1b2e089cabe87a9ea8363b\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "1d00d167e5d0815e82e72e45df5d26cb16e4237e",
      "tree": "6b840d9205362c3ed3176c42403dd007ce46c14e",
      "parents": [
        "9dcaf0197c7f8cbd43f04d5cd4f70fa08049ce31"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Jan 13 14:27:28 2017 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Jan 13 14:49:11 2017 +0100"
      },
      "message": "Added some javadoc to GitBlitMavenPomResolver\n\nChange-Id: I995369574825c7be0ea2ad9574a7b6adec842975\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "9dcaf0197c7f8cbd43f04d5cd4f70fa08049ce31",
      "tree": "ce30d298ec2ee30498815fc02e55c31748e56087",
      "parents": [
        "9d5ed288da9e201e48d0d2ff643bc6782ab83fde"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Jan 13 14:06:43 2017 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Jan 13 14:49:01 2017 +0100"
      },
      "message": "Use method from base class in GitWebMavenPomResolver\n\nMinor refactoring plus javadoc improvements.\n\nChange-Id: I853c9e55a418840946553752fb699406206d5c97\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "9d5ed288da9e201e48d0d2ff643bc6782ab83fde",
      "tree": "5a49786dd08eca55d3fbdb4801262b57bd110e39",
      "parents": [
        "8aed0ea65b522e382cc1d404946c0119fdc6b903"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Thu Jan 12 14:18:10 2017 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Thu Jan 12 14:24:22 2017 +0100"
      },
      "message": "Introduce skalli.destinationService property\n\nIn some environments a dedicated destination service must be\nused to create connections; in this case the built-in fallback\nto DestinationComponent implemented in the Destinations helper\nclass produced HTTP clients that were unusable for communication.\n\nThis patch introduces a new property \"skalli.destinationService\"\nthat can be set to specify the destination service that must be\nused by the Destinations helper class. Destinations will now\nreturn null if either the specified service is not available,\nor it cannot handle the given URL.\n\nHostReachableValidator has been changed to avoid meaningless\nissues in case Destinations cannot deliver a suitable client.\nProject owners cannot fix these issues anyway.\n\nChange-Id: I1a6cfa14aebaf2d2976197b60b75637957141548\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "8aed0ea65b522e382cc1d404946c0119fdc6b903",
      "tree": "1113e828341ffe1e7c15e20a846aa719a4b23b85",
      "parents": [
        "21cd9a9fb77f7cd2119903ec799d00c2ff9e0122"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Wed Jan 04 10:15:15 2017 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Wed Jan 04 12:12:01 2017 +0100"
      },
      "message": "Support for partial backups\n\nAdditional query parameters \"from\", \"to\" and \"period\" are introduced\nthat allow specifying the time frame for a backup.\n\n\"period\" gives a time interval in the form \u003cnumeral\u003e\u003cunit\u003e, e.g.\n\"5d\" or \"7h\". Supported units are \"d\" for days, \"h\" for hours and\n\"m\" for minutes (all case insensitive).\n\n\"from\" and \"to\" can be timestamps in ISO format, for instance\n\"from\u003d2013-10-15T00:00:00Z\", or time intervals like \"-7d\", which\nis interpreted as \"7 days before now\".\n\n\"period\" can be combined with either \"from\" or \"to\" to define, for\nexample, a certain time interval beginning at a given point in time\nin the past. If both \"from\" and \"to\" are given, \"period\" is ignored.\n\nIf no time interval for the backup is specified, 1 day is assumed.\nFor a full backup, now the query parameter \"all\" must be added.\n\nChange-Id: I70591c11536a7049752430bc8f8f6ff196e86a35\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "21cd9a9fb77f7cd2119903ec799d00c2ff9e0122",
      "tree": "161405ac566486b61c8710eea11ea9c791b9a82f",
      "parents": [
        "7f376ae06e52ceb4ed255e6ded7abc1547b9f4dc"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Wed Jan 04 10:14:19 2017 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Wed Jan 04 12:11:28 2017 +0100"
      },
      "message": "Rename StatisticsQuery to BackupQuery\n\nThe helper class wll be used in a subsequent request in\nProjectBackupResource to specify time periods for partial\nbackups, so StatisticsQuery would no longer be appropriate.\n\nChange-Id: I2f24e0932df7cf4ffd53f606fe6078ef2696eb53\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "7f376ae06e52ceb4ed255e6ded7abc1547b9f4dc",
      "tree": "7d46db8f2fd03589f476d484c65879b0bb7de98c",
      "parents": [
        "537e3608ce60fd641d64f38bd6c73530598bdd23"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Wed Jan 04 10:11:14 2017 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Wed Jan 04 12:11:18 2017 +0100"
      },
      "message": "Introduce StorageService#read(StorageConsumer)\n\nWith the old method there was no easy way to access the last modified\ntimestamp, so a new method is introduced following the consumer\npattern introduced with readAll(). The old read method might be\ndeprecated in the future.\n\nChange-Id: Id542cd8856a2a2c194cc703c0ff352f6eeaeff10\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "537e3608ce60fd641d64f38bd6c73530598bdd23",
      "tree": "ee92b92f4c0437439897048068618fe3b148b212",
      "parents": [
        "29c394ff4de24497884b05c3d808ee2c32099c52"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Dec 16 12:47:10 2016 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Dec 20 13:28:07 2016 +0100"
      },
      "message": "Add restore for archived content\n\nChange-Id: Ia4287a44eba2261f91fee87b901b319ac0c05874\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "29c394ff4de24497884b05c3d808ee2c32099c52",
      "tree": "1b468dcb417e3004698fc15f85ff8dcd7ae459ba",
      "parents": [
        "ad2e6f01a7f578983c741db04a4e466c1b422638"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Thu Dec 15 15:27:43 2016 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Dec 20 13:27:45 2016 +0100"
      },
      "message": "Introduce StorageService#readAll()\n\nWhen loading a large project model from a database many individual\nrequests were created, which can be quite time consuming.\n\nThis patch introduces a new method readAll() following a consumer\npattern that allows loading a complete model at once. The JPA\nimplementation uses a CursorStream to read the database in chunks,\nthus considerably lowering the number of requests fired against\nthe backend.\n\nChange-Id: I89613ff4e1315a43b9d8a9c1ad25a32527308c5e\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "ad2e6f01a7f578983c741db04a4e466c1b422638",
      "tree": "e7ed85938233e165939072985b225a465c187572",
      "parents": [
        "40465ecb1b26ed134dc770e4639c5709560ea3a5"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Dec 16 10:14:27 2016 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Dec 19 14:58:38 2016 +0100"
      },
      "message": "Fix broken include/exclude param handling for backup API\n\nThe \"include\" query parameter was not returned by getQuery()\nif there was also an \"exclude\" present. Furthermore, the semantics\nof the include/exclude parameters was quite strange.\n\nThe behavior has been changed as follows:\n\nStart with a result set that contains all entries from CATEGORIES,\nexcept if there is an include list; in this case start with an\nempty result set. Then first add all categories contained in the\ninclude list and remove afterwards all entries contained in the\nexclude list. If neither an include nor an exclude is specified\nthe default behavior is to backup/restore all categories.\n\nExamples:\n  exclude\u003dIssues\n      will backup/restore all categories except Issues\n\n  include\u003dProject\n      will only backup/restore projects\n\n  include\u003dProject,Issues\u0026exclude\u003dIssues\n      will only backup/restore projects\n\nExcludes always override includes, so a category that appears in\nboth lists will be treated as excluded.\n\nChange-Id: Ibdbf1ed4761c3d55429420be7b5bc016333d46f8\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "40465ecb1b26ed134dc770e4639c5709560ea3a5",
      "tree": "a4175afbebad8520ce391fd84e97120bca03e4af",
      "parents": [
        "9ba418cd25a29070affb3eb68a6f2838708e4a39"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Thu Dec 15 15:24:56 2016 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Dec 19 14:58:14 2016 +0100"
      },
      "message": "Add backup for archived content\n\nChange-Id: I3ef691f0248f1d07919eae5647d8ce780c2e0b79\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "9ba418cd25a29070affb3eb68a6f2838708e4a39",
      "tree": "90bf8971ea072075459055236e3f05aaffd9ab55",
      "parents": [
        "919072a492ae220e4890c51227a340d4760f9171"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Thu Dec 15 15:19:44 2016 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Dec 19 14:58:02 2016 +0100"
      },
      "message": "Perform cache refresh after restore in background thread\n\nCaller of the /api/admin/backup API might run into HTTP\ntimeouts for large projects sets.\n\nChange-Id: Ia9c1e9d64b44ff8658b459f487386230aa0877e4\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "919072a492ae220e4890c51227a340d4760f9171",
      "tree": "62eb9dc0f6030fdffbabdea1ee096e4c839d4c8e",
      "parents": [
        "ee2cc44450edf964dc3bbd1550bd86f11d4a881d"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Wed Dec 14 19:02:32 2016 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Dec 19 14:57:50 2016 +0100"
      },
      "message": "Introduce read/write API for archived content\n\nStorageService always had an archive() method to create\na history trail for entities, e.g. projects, but there was\nno way to retrieve archived content, or backup/restore\nthe archive via REST API.\n\nThis patch add a couple of new methods to StorageService:\n\n* readFromArchive() retrieves the history of an entity and\npasses it to a consumer function (StorageConsumer). This\nallows the JPA implementation to make use of database\ncursors for minimal memory consumption.\n\n* writeToArchive() allows to push new entries to the\nhistory bypassing the archive() function. This will be\nused in a subsequent patch to implement a restore API.\n\nAll known implementations of StorageService are adapted\nin this patch, and some more archiving tests have been\nadded.\n\nChange-Id: I1adbe767efb58c99f91ce12daaf88ed64dc62117\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "ee2cc44450edf964dc3bbd1550bd86f11d4a881d",
      "tree": "8159fe330f0d74b399b2a6b981f5e1af104fc58c",
      "parents": [
        "2599a85b2025a5358feecb6c0f4ac64cef782493"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Wed Dec 14 19:02:20 2016 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Dec 16 12:18:52 2016 +0100"
      },
      "message": "Implement the missing HashMapStorageService#archive()\n\nThis is a preparation for a subsequent patch that will introduce\na read/write API for archived content.\n\nChange-Id: Iefcc601f8f7c7560a5e193c6d583c24e03f6a85d\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "2599a85b2025a5358feecb6c0f4ac64cef782493",
      "tree": "72d246e668441605d264abadd2df0d3f36bd45c8",
      "parents": [
        "9eaab9ab6043a0ef2bd3beb6866d5e950ee34e28"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Wed Dec 14 18:59:03 2016 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Dec 16 12:18:39 2016 +0100"
      },
      "message": "Rename getEntityAsDom() to entityToDom() for consistency\n\nChange-Id: Ibe2e25e88fb8fd62a717d35c4f8342b5bcdf9245\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "9eaab9ab6043a0ef2bd3beb6866d5e950ee34e28",
      "tree": "e6e049dce6a8a7be5f3311a32b1e485d99ab3c6c",
      "parents": [
        "6c9b530e1dc46220ce6c430c04c58f4c9495fef0"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Wed Dec 14 18:37:26 2016 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Dec 16 12:18:27 2016 +0100"
      },
      "message": "Remove obsolete multi-file Historian mode\n\nThe option for writing the history to multiple files was no longer\nused, so it has been removed.\n\nChange-Id: I92e439e7fe4d097ad24954405580d0e940aa4258\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "6c9b530e1dc46220ce6c430c04c58f4c9495fef0",
      "tree": "0874b7312122e057dd818469d7ab3402b427b875",
      "parents": [
        "5e47a72eadfb51239bcb197cf559e0640d41776f"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Wed Dec 14 18:08:46 2016 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Dec 16 12:17:54 2016 +0100"
      },
      "message": "Remove StorageException\n\nAlmost all storage related exceptions are IOExceptions, so the\nintroduction of StorageException was kind of artifical. Some\ncleanup of now obsolete or redundant exception handlers.\n\nChange-Id: Ia44887c8722969ccca1bbaee877e78fbd4473a99\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "5e47a72eadfb51239bcb197cf559e0640d41776f",
      "tree": "1873c549b9be448ae0e5903f9539ab7787116a2b",
      "parents": [
        "6ec8e0f6184e3c9738d80ea9a56141df494c078e"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Dec 12 17:08:48 2016 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Dec 12 17:17:08 2016 +0100"
      },
      "message": "Fix wrong NON_PROXY_HOSTS constant\n\nStick with the usual \"http.nonProxyHosts\" system property\nfor defining a non-proxy list.\n\nChange-Id: I0d4f73d15af8ed78f856737a5dd89ebfca407a42\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "6ec8e0f6184e3c9738d80ea9a56141df494c078e",
      "tree": "28bbf6de8c43ebd0530b6ccda2848eec900bd8ae",
      "parents": [
        "cd257a913bce3c1371c4df4ad8754a846ce6ec6c"
      ],
      "author": {
        "name": "Thorsten Duda",
        "email": "thorsten.duda@sap.com",
        "time": "Wed Dec 07 13:50:04 2016 +0100"
      },
      "committer": {
        "name": "Thorsten Duda",
        "email": "thorsten.duda@sap.com",
        "time": "Wed Dec 07 14:48:36 2016 +0100"
      },
      "message": "Show all users with equal name in team info box\n\nUsers with an equal display name were not all shown in the team info box\nafter added to a project.\n\nChange-Id: I70e35f542f16f19f40cb8583e10bf932f8730dcc\nSigned-off-by: Thorsten Duda \u003cthorsten.duda@sap.com\u003e\n"
    },
    {
      "commit": "cd257a913bce3c1371c4df4ad8754a846ce6ec6c",
      "tree": "45cffcfc157e186b69686704cba77963a242e24b",
      "parents": [
        "93878da3ab1049a97126b44680a30bee394da169"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri May 08 14:11:28 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Wed Dec 07 11:37:32 2016 +0100"
      },
      "message": "Rename URLUtils#stringToURL to URLUtils#asURL\n\nChange-Id: I0581e5396d972429bfe83fa25d59e28b0a140c96\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "93878da3ab1049a97126b44680a30bee394da169",
      "tree": "c748610f983b0aa93c9097f00cd488bde5857b2f",
      "parents": [
        "3aaab6b8996bb251532c0915685caec2847e4ecf"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri May 08 14:10:12 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Wed Dec 07 11:36:17 2016 +0100"
      },
      "message": "Add some utilities to compose URIs\n\nChange-Id: I493dbd90c86e88ff8ba6c26984d04566a3524871\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "3aaab6b8996bb251532c0915685caec2847e4ecf",
      "tree": "326b4a2022fa801c14a9d948dd1b6b1a8f9c1925",
      "parents": [
        "be9a21f988b5b90cb7008f8506fa9450371ed173"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri May 08 14:09:14 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Wed Dec 07 11:35:09 2016 +0100"
      },
      "message": "Add some utilities to create StringEntity instances\n\nChange-Id: I3e94937d5a09378986fcf75adc24096736e6c800\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "be9a21f988b5b90cb7008f8506fa9450371ed173",
      "tree": "006c76f5f40e91efa059ee718dcdd2c447450005",
      "parents": [
        "af2ec4b2c0f11c1a70df6dd2dec5a8b00e3e4235"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri May 08 09:39:38 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Wed Dec 07 11:28:01 2016 +0100"
      },
      "message": "[refactoring] Gerrit Service\n\nAdapt package names to conform to usual convention for\nSkalli core services:\n\n\"org.eclipse.skalli.services.gerrit\" is now the name for\nthe only exported package that constitutes the API of the\nGerrit service; it contains the interfaces GerritService\nand GerritClient, all exceptions and helper classes,\nand the configuration classes GerritServersConfig und\nGerritServerConfig.\n\"org.eclipse.skalli.core.gerrit\" contains now the service\nimplementation and the configuration adapters.\n\nRename GerritServiceImpl to GerritComponent\n\nService implementations should have the name suffix\n\"Component\" instead of \"Impl\". Changed also the service\nname to \"org.eclipse.skalli.core.component.gerrit\"\nto conform with the convention in the core bundle.\n\nRenamed GerritClientImpl to GerritClientSSH\n\nAs preparation for the implementation of a REST-based\nGerrit client the old SSH-based client has been moved to\nthe package \"org.eclipse.skalli.core.gerrit.ssh\" and has\nbeen renamed to \"GerritClientSSH\".\nThe service will now return an SSH client only in case\nthat the protocol in the corresponding server configuration\nequals \"ssh\".\n\nRemove some SSH-specifics\n\nGerritClient provided a constant for the default SSH port.\nThis has been removed, and the handling of the default port\nis now in SSHGerritClient were it belongs. All other places\nwhere default ports were set or checked have been adapted.\nFurthermore, some Javadoc comments haven been adapted.\n\nThe GSQL legacy has been moved to SSHGerritClient and marked\nas deprecated. Support for Gerrit servers before 2.6 will be\nremoved in a subsequent patch.\n\nChange-Id: Icfaa9e24b55a3112b1bee20499b8b0ec1aeebc6e\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "af2ec4b2c0f11c1a70df6dd2dec5a8b00e3e4235",
      "tree": "2f9a72b26f5c56fa570b5059e3dbf9937bb59807",
      "parents": [
        "05a3cbd42c56c7c421c3ed84aee758aebc5efb71"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Dec 05 17:18:25 2016 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Dec 05 17:25:00 2016 +0100"
      },
      "message": "Remove obsolete VisibleForTesting annotation\n\nChange-Id: Ibc1c4b82e9f9aeaef6cbe0d82bb0b53fc2882914\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "05a3cbd42c56c7c421c3ed84aee758aebc5efb71",
      "tree": "adfbd46c993b8010cef75a4f449251ab1252dd03",
      "parents": [
        "fcfeaef02dabe56af26096fc8a37d091fa8d0bc8"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Dec 02 11:21:01 2016 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Dec 05 16:09:23 2016 +0100"
      },
      "message": "Introduce new extension point LdapContextProvider\n\nLDAPUserComponent created LDAP contexts from an LDAPConfig\nconfiguration, which contained sensitive information (user/password)\nof the LDAP backend. For certain hosting environmemts this is not\nacceptable, but instead credentials must be stored safely outside\na running Skalli instance.\n\nTherefore, the LDAPClient helper class has been removed. Query\nrelated algorithms have been moved to LDAPUserComponent. The\ncontext creation has been moved to DefaultLdapContextProvider,\nwhich implements a new extension point LdapContextProvider.\nDefaultLdapContextProvider still creates LDAP contexts based\non configuration information and is retaind for environments,\nwhere storing credentials in the Skalli database is acceptable.\n\nConsequently, configuration attributes related to the LDAP\nbackend (like url, credentials etc.) have been moved from\nLDAPConfig to a new configuration section LDAPServerConfig.\n\nChange-Id: I19e6bf09192fab3a97d36b579106de737ff1ceb5\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\n"
    },
    {
      "commit": "fcfeaef02dabe56af26096fc8a37d091fa8d0bc8",
      "tree": "ccfe283c9ad68b66b15d2f9975b454ad4813965e",
      "parents": [
        "9e79dc8d9495168bd2d69e9b86cdcf2f177db0d2"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Dec 02 11:14:27 2016 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Dec 05 16:09:04 2016 +0100"
      },
      "message": "Refine destination configuration\n\nAlign the attributes with GerritConfig and introduce a \"type\"\nattribute to support destinations for other protocols than\nHTTP/HTTPS, for instance LDAP. The unused \"service\" attribute\nhas been removed and \"pattern\" has been renamed to the more\nconcise \"urlPattern\".\n\nChange-Id: Ibc7c8ce58c84d1252bc8efe3845db5a6ec712001\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "9e79dc8d9495168bd2d69e9b86cdcf2f177db0d2",
      "tree": "bdde9ff78aef0b0cf325cd23b6bf75718caedfe9",
      "parents": [
        "6b45a50974f22f9bd3ec4d4aa1e43a23842a4288"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Nov 16 16:43:28 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Nov 17 13:05:14 2015 +0100"
      },
      "message": "Require namespace and apiVersion for PUT request\n\nIn order to prevent accidentally overwriting complete projects\nor extensions with unrelated content we now require namespace and\napiVersion attributes in a PUT request.\n\nChange-Id: I1062d414741566807f41e6da2f3a72a067de2849\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "6b45a50974f22f9bd3ec4d4aa1e43a23842a4288",
      "tree": "4327d818223cbac7eb4ac24d434579254aa885d3",
      "parents": [
        "77e75d9b6a9db7cebd688978164e564367b7810c"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Nov 16 16:55:48 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Nov 17 13:05:02 2015 +0100"
      },
      "message": "Write API namespace attribute also for output format JSON\n\nChange-Id: I8d5041a90392920d847ec9f112fbd9c6789ef1ab\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "77e75d9b6a9db7cebd688978164e564367b7810c",
      "tree": "b422334c11d0a1636c6955201e1c197906ee00a1",
      "parents": [
        "e9c35cda94434124554ccbb0a89f03330f794d6a"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Nov 16 16:34:01 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Nov 17 13:04:48 2015 +0100"
      },
      "message": "REST API should not manipulate projects in project cache\n\nWhen writing to the REST API fresh clones of projects should be\ncreated from storage instead of changing projects in the project\ncache.\n\nChange-Id: I55e717f985d60c1b1f822ddc3cbb3f8621dbc00e\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "e9c35cda94434124554ccbb0a89f03330f794d6a",
      "tree": "97d3a62c6955c367a6dbcd1e4d9c3e2ce84e74e0",
      "parents": [
        "a1bebd32d59d5d3615bab98f0dec937f8f74ed2d"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Nov 16 17:42:24 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Nov 17 13:04:33 2015 +0100"
      },
      "message": "Workaround for Mars Bug 474376\n\nChange-Id: Iead6ea23895a19b506f174dbde453037544bcc86\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "a1bebd32d59d5d3615bab98f0dec937f8f74ed2d",
      "tree": "bbede32a049711010246b355fa0de36a442d6e47",
      "parents": [
        "51d9da9fca48c42733589bffa527150683ce0d59"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Sep 14 15:49:36 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Sep 14 15:49:36 2015 +0200"
      },
      "message": "ProjectApplication should log out at end of request\n\nOtherwise the session can retain unwanted permissions, e.g. when\na user tries to create a new project with an id that already exists.\nBy clicking on cancel and then navigating to the original project\nthe user can suddenly edit the original project.\n\nChange-Id: Ieb17489e707b731ddac77c282fe7ae6fe109e1e6\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "51d9da9fca48c42733589bffa527150683ce0d59",
      "tree": "87d87bb378792d985eb6771ded7eefdeed19a796",
      "parents": [
        "c8ab57ba2b401b2090e885c40dd2cd16a4e297ad"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Jul 27 15:36:48 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Jul 27 15:42:45 2015 +0200"
      },
      "message": "Adapt test project in test utils\n\nTags extensions now uses a sorting set to store the tags in\nalphanumerical ordering, but the test project did not reflect\nthat. Since XStream bypasses the constructors of TagsExtension\nit might happen that the tags are not ordered alphanumercially\nalthough the code in TagsExtensions suggests that.\n\nChange-Id: I98836b163405894f2f167d7119f26c0d847a323a\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "c8ab57ba2b401b2090e885c40dd2cd16a4e297ad",
      "tree": "2df2aa4e21e88ad5790a2ae2127a8096cce91420",
      "parents": [
        "5583a5a41a159f2ed1b743a567a8f5166e9275c9"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Jul 27 14:29:50 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Jul 27 14:59:11 2015 +0200"
      },
      "message": "Make REST API v2 the default\n\nThe XStream-based REST API is going to be retired and the newe API\nhas been intensively tested for incompatibilities in the meantime.\nTime to make v2 the default. The old API is still available by\nadding the query parameter rest\u003dv1 to a request.\n\nThe test data for RestAPISmokeTest has been adapted accordingly.\n\nChange-Id: Ib7daab098b92f09bc217e512209fa768620e52f5\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\n"
    },
    {
      "commit": "5583a5a41a159f2ed1b743a567a8f5166e9275c9",
      "tree": "31445f59860d0958e0cd7a0205a520f57158734f",
      "parents": [
        "f2e63dbb974024638ce1864290bec57f683d2691"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Jul 27 14:02:59 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Jul 27 14:06:43 2015 +0200"
      },
      "message": "Extraction of project name from REST requests always failed\n\nThe code to extract the project name from an /api/projects/*\nREST request never seemed to have worked, instead the result was\nalways \"projects\" and the lookup in project service consequently\nreturned always null. Thus, the login with the permit service\nwas never in the context of a concrete project. That has no\nconsequences as long as the requesting user is either an admin,\nor the REST request is a GET, in which case the project context\nis not relevant for a permission check. However, with the new\nwritable REST API the project context suddenly became relevant\nand all permission checks failed.\n\nChange-Id: Ice25a105e2ef3e3e6f48d9ce438cafa5727a272d\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "f2e63dbb974024638ce1864290bec57f683d2691",
      "tree": "4a15020de723f060b7ead210762cb222e23a6107",
      "parents": [
        "4a9e4c11602b912f54d9825e5c5552a6b51c02dd"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Jun 16 09:34:57 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Jun 16 11:38:31 2015 +0200"
      },
      "message": "Remove overly pessimistic locking in ConfigurationComponent\n\nreadConfiguration() and writeConfiguration() both were declared\nas synchronized although both read/write data from/to a cache,\nwhich is a ConcurrentHashMap. That was two pessimistic and\ncaused a deadlock at least once in LDAPUserComponent.\n\nThis patch removes the synchronization from the mentioned methods\nassumingh that the underlying storage service is thread safe, which\nevery service must be. It\u0027s not true for the existing implementations\nin org.eclipse.skalli.core. That should be fixed in a subsequent\npatch since it needs some refactoring first.\n\nChange-Id: Ia3f430829f9b1a40d49bda7403c0f01c6d3587a1\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "4a9e4c11602b912f54d9825e5c5552a6b51c02dd",
      "tree": "43fa46ce2b7d8badf411f79755e170c205890b77",
      "parents": [
        "2a3e4b0b225b5fab374e53076fd19b32772ce157"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Wed May 20 15:14:33 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Wed May 20 15:14:33 2015 +0200"
      },
      "message": "Missing \u003cstatistics\u003e tag for REST v2\n\nChange-Id: Ic81e0ff16dc05562e9746f0b7673a386533e139c\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "2a3e4b0b225b5fab374e53076fd19b32772ce157",
      "tree": "03af52115374740e11834e72dcf3580535058eac",
      "parents": [
        "fa0330aed98fd315e2c40684ba66a782cb3257ad"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon May 04 11:18:11 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Wed May 06 16:19:14 2015 +0200"
      },
      "message": "Ensure that plugin config is only sent for enabled plugins\n\nSending --plugin-config options will lead to errors if the\ncorresponding plugin is not available or disabled in the\ntarget Gerrit server. Furthermore, for test systems, or in\ncase the client lacks permission for configuring plugins,\nit should be possible to exclude/include certain plugins\nfrom the --plugin-config mechanism.\n\nThis patch utilizes the new GerritClient#getPlugins() method\nto determine, if a plugin referenced in ProjectOptions is\navailable and enabled in the target Gerrit server.\n\nAdditionally, two new configueration options, enabledPlugins\nand disabledPlugins, have been added to GerritServerConfig.\nThe latter can be used to switch off --plugin-config for\na given list of plugins. The former can be used to switch\non --plugin-config for only a given list of plugins, but not\nfor all others. An empty enabledPlugins list will switch off\n--plugin-config for all plugins. A plugin contained in both\nlists will be treated as if disabled.\n\nChange-Id: Id12ec437844cae4f6a92d0d12f59f5079d81278b\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "fa0330aed98fd315e2c40684ba66a782cb3257ad",
      "tree": "3ea4ff2822a60feea0e9870a76383b43bfc7e4b3",
      "parents": [
        "dd36f38f1631d76dfc86d970d2cfc5b97c639170"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Wed Apr 29 17:16:55 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Wed May 06 16:19:11 2015 +0200"
      },
      "message": "Replace usage of org.json with com.google.gson\n\nIt makes not much sense to use different JSON frameworks in the\nREST API and the Gerrit client. Since com.google.gson provides\nbetter streaming capabilities, we settle on com.google.gson.\n\nThis patch removes org.json from the target platform and manifests\nand moves the re-implemented JSONUtil to the org.eclipse.commons\npackage. The name is now JSONUtils, and it has been enriched\nwith some new utility methods.\n\nChange-Id: Ic11d91d0e628d9cecb146828ed113e337df2819a\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "dd36f38f1631d76dfc86d970d2cfc5b97c639170",
      "tree": "2edc8a14b0c6196998217f9e1de8d9199a488992",
      "parents": [
        "4e7e776a56820c7e52419dccb1c62bcea61ab5b5"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Wed Apr 29 14:12:31 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Wed May 06 16:19:01 2015 +0200"
      },
      "message": "Introduce GerritClient#getPlugins()\n\nSending --plugin-config options in a create-project command will\nfail if the corresponding plugin is not installed in the target\nGerrit.\n\nThis patch introduces a new client method, getPlugins(), that\nwill return the plugins installed in a target Gerrit server\nusing the \"plugin ls\" command. Note that this command requires\nthe \"View Plugins\" capability assigned to the requesting user,\notherwise the request will fail.\n\nSince this command is not available before Gerrit 2.5 the feature\nconstant LS_PLUGINS has been introduced, too. For older servers\ngetPlugins() will always return empty results.\n\nThe result of the \"plugin ls\" command is cached in the client\ninstance to avoid unnecessary roundtrips.\n\nA test will be provided in a subsequent patch since some refactoring\nmust be done before.\n\nChange-Id: Ieeea3f1e3c825c47ad9833a36e447661b788b4de\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "4e7e776a56820c7e52419dccb1c62bcea61ab5b5",
      "tree": "99f9349532a0310437370f5fccc5156669fe29d1",
      "parents": [
        "c2d90973f9a835f7cb9448e208e4d7724f17e7e7"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Apr 28 13:36:55 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Apr 28 13:45:51 2015 +0200"
      },
      "message": "Missing feature check for create-project command\n\nThe create-project options --max-object-size-limit and\n--plugin.config are not available on older Gerrit servers,\nso there should be a feature check prior to adding these\noptions to the create-project command.\n\nChange-Id: I330747d126a8f0dee5915bbc55df65ef719949c3\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "c2d90973f9a835f7cb9448e208e4d7724f17e7e7",
      "tree": "bd84bf9406a04148374cc19e731dd6beb2408499",
      "parents": [
        "10da717405e70b8804a785acc3d2bfe4d21d82a7"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Apr 28 13:17:54 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Apr 28 13:33:16 2015 +0200"
      },
      "message": "Add support for new Gerrit features\n\nSince 2.8 Gerrit supports the additional attribute\n--max-object-size-limit for the create-project command.\n\nSince 2.9 Gerrit supports the additional attribute\n--plugin-config for the create-project command.\n\nChange-Id: I757d074ec9f45339a0a316d198b76b290ac9dd1b\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "10da717405e70b8804a785acc3d2bfe4d21d82a7",
      "tree": "50ee64e8d0ef2adb0d8ee8cf6e60ffd593b089f4",
      "parents": [
        "abd545c23f2d76cae8ca3e80027a61c420dc27ac"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Apr 28 13:16:09 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Apr 28 13:16:09 2015 +0200"
      },
      "message": "Add latest Gerrit versions to GerritVersion enum\n\nChange-Id: Ibe1b836ebceeac0d5f11b95ee7d72eae23b306e9\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "abd545c23f2d76cae8ca3e80027a61c420dc27ac",
      "tree": "06a3af9db25cf44a960d4dd02f56cfc6169b3d83",
      "parents": [
        "1ff09ecbe46644cf09a6567a8dda3c2b583a9a76"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Apr 28 13:13:26 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Apr 28 13:13:26 2015 +0200"
      },
      "message": "Simplify GerritVersion implementation\n\nAdding another if for each new supported version was quite ugly,\nso this patch revises the implementation.\n\nChange-Id: I6cdc4cfb9a79d1aedc13c35e5a25517b4b12d7d1\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "1ff09ecbe46644cf09a6567a8dda3c2b583a9a76",
      "tree": "e7515be2fd7391a61e53ff921cb9976ef6d4923b",
      "parents": [
        "7e172c0b2ff46918e29823a0008c0ab72360e68c"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Thu Apr 23 14:13:34 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Apr 24 12:50:21 2015 +0200"
      },
      "message": "Remove obsolete appendArgument() methods from GerritClientImpl\n\nAnd replace all StringBuffer with StringBuilder, since all instances\nare local variables and do not need to be thread safe.\n\nChange-Id: I525365bd79acfbd2b99b20082abe1f5bf74221bc\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "7e172c0b2ff46918e29823a0008c0ab72360e68c",
      "tree": "feed66f286f766bca7a0a208ca1c4b0e7dec5991",
      "parents": [
        "f01cf71cfc551f16daa6bfd94c14f67d6d80baa4"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Thu Apr 23 13:32:23 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Apr 24 12:50:02 2015 +0200"
      },
      "message": "Introduce GerritClient#createProject(ProjectInput)\n\nThe parameter list of the old createProject() method became quite\nlengthy and was not easily extendable. Latest Gerrit versions,\nfor example, have a new option --plugin-config that could not be\nused with the old createProject() method.\n\nThis patch introduces GerritClient#createProject(ProjectOptions)\nwith a new helper class ProjectOptions inspired by the ProjectInput\nenity of the Gerrit REST API. It supports all currently known\noptions of Gerrit\u0027s project creation REST API.\n\nThe old createProject() method has been deprecated and has been\nreimplemented to use createProject(ProjectInput) internally.\n\nChange-Id: I5b0604f1ca4fce529eae0be58f8acc23d01bcb4b\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "f01cf71cfc551f16daa6bfd94c14f67d6d80baa4",
      "tree": "50560b2617130014cc6b5146ba6b251f2193ee59",
      "parents": [
        "f4648e096af8d26b7ff6cc68654bad99e154367c"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Thu Apr 23 10:08:02 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Thu Apr 23 14:07:20 2015 +0200"
      },
      "message": "Introduced new SubmitType REBASE_IF_NECESSARY\n\nChange-Id: Ia3cf5a65910fc1df8c24c4849b1da32a8df97495\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "f4648e096af8d26b7ff6cc68654bad99e154367c",
      "tree": "530dab2e724e25e7f728e703f4827f813c3bbf0c",
      "parents": [
        "3d30271ae898e58f324e8ef8e79c6e47f810c11b"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Apr 13 13:44:23 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Apr 13 13:45:42 2015 +0200"
      },
      "message": "StatisticsConverter failed with \"final state not reached\"\n\nEnclosing object() was missing and there were item() calls without\nmatching end().\n\nChange-Id: Ie15a2472f32e0944992036420ab1b30c48b81d48\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "3d30271ae898e58f324e8ef8e79c6e47f810c11b",
      "tree": "6062b49fcdae4fc8d14353ea2163c4ae1af8076e",
      "parents": [
        "1ddf4cbef516537ede7027906c91fbd4f65d1376"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Apr 13 11:00:10 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Apr 13 11:02:53 2015 +0200"
      },
      "message": "ErrorRepresentation fails with Unsupported Media Type\n\nThere are some REST requests supporting PUT operations with\nmedia type text/xml (e.g. the backup REST API). In that case\nErrorRepresentation failed with an IOException stating that\nthe media type text/xml was not supported for PUT operations.\nHowever, that is highly irrelevant, because writing an error\nresponse is a GET operations.\n\nThis patch removes the redundant check for the media type of\nthe original request.\n\nChange-Id: I52c34b94e059e95cc2c1a4209f8b6c687034b6e0\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "1ddf4cbef516537ede7027906c91fbd4f65d1376",
      "tree": "4782e57c448d33816b03e80dcec1cd25aed0d61b",
      "parents": [
        "ab5879b429b6f78d711b39e9d3fbefc593ae3bcc"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Thu Apr 09 14:47:37 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Thu Apr 09 15:02:06 2015 +0200"
      },
      "message": "[rest] Support for creating projects\n\nPOST /api/projects is introduced that allows creating and\ninitializing new projects. The symbolic name of the project\nmust be specified with a Slug header.\n\nIf a request body is available the project is initialized\nfrom the request. Otherwise an initial project with just the\nuuid and symbolic name is created.\n\nChange-Id: I7622986b50771c1cdf23ce82011c9c4dfaaa89c2\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "ab5879b429b6f78d711b39e9d3fbefc593ae3bcc",
      "tree": "17852b8f5c76689fc2c5fbbcef47a42d6012bc40",
      "parents": [
        "dbb048ac3d29295ec30d7242d8d498cb8d583e38"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Thu Apr 09 14:52:34 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Thu Apr 09 15:01:45 2015 +0200"
      },
      "message": "Missing handling of IOException in InheritableExtensionsResource\n\nChange-Id: I02101f1276d6dbf6a59d079c2232da93cb31bfe8\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "dbb048ac3d29295ec30d7242d8d498cb8d583e38",
      "tree": "e904fe89837cd8fe92b4b4ff6976d0be5b149668",
      "parents": [
        "397ed820928160ec9dee4c8919696fa6c98d04e1"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 31 12:24:25 2015 +0200"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 31 12:30:53 2015 +0200"
      },
      "message": "Potential NPE when request entity is missing for PUT/POST requests\n\nIf the request does not contain a body, org.restlet calls the\nPUT/POST implementations in ProjectResource etc. with entity\nequals null, i.e. just checking entity.isAvailable() leads to\na NPE.\n\nChange-Id: I476c020388440b776a383c42d7f6b5d699fe920d\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "397ed820928160ec9dee4c8919696fa6c98d04e1",
      "tree": "75732428a78361a90d9e3dc94d1ffc1aba8914c9",
      "parents": [
        "c092c7a78ff74e84cc449ac4c926beb20e099ef1"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Mar 27 12:50:51 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Mar 27 12:50:51 2015 +0100"
      },
      "message": "Adapt v1-v2 project diff to support add\u0027tl descriptionFormat tag\n\nChange-Id: Ifade9d24b90828e774387bdcae346c8b5a09aaa1\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "c092c7a78ff74e84cc449ac4c926beb20e099ef1",
      "tree": "85e9530bb84049a223ad37cdda4dc631a05fe798",
      "parents": [
        "e9e58968b4c7cbe244ced1090fcb1894b24633dd"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Mar 27 09:28:43 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Mar 27 09:28:43 2015 +0100"
      },
      "message": "Build tar.gz product archives for Linux and MacOSX\n\nChange-Id: Ifd9d3541165210d65ea9a3ed519a1fe3a7ad28dc\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "e9e58968b4c7cbe244ced1090fcb1894b24633dd",
      "tree": "b704d23f29083da1f5f304b8530ae522b07fa2e3",
      "parents": [
        "342b96f6a9c50b36945d7d051a8f2cf302eaca37"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Mar 23 18:27:37 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Thu Mar 26 13:26:21 2015 +0100"
      },
      "message": "Introduce PATCH annotation\n\nThe PATCH request as described in RFC 5789 allows partial\nupdates of a resource in contrast to PUT, which has the\nsemantics to replace the target resource.\n\nThis change introduces an org.restlet annotatition for\nimplementing PATCH request handlers.\n\nChange-Id: I02ab387695d65b009c4ba8acf15b1ea2a01e0cc0\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "342b96f6a9c50b36945d7d051a8f2cf302eaca37",
      "tree": "1bdd4987b92144feb7132750e1e410c1492c0e2c",
      "parents": [
        "65a05172bb112968ce50a21138d028bd5f71fee9"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Mar 23 18:25:54 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Thu Mar 26 13:18:29 2015 +0100"
      },
      "message": "Add support for PUT /api/projects/\u003cproject\u003e\n\nThis request replaces the attributes and extensions of \nthe target project with those provided in the request.\nNote that the implementation of this request does not\nstrictly conform to the usual semantics of a PUT request,\nwhich is to replace the target resource completely, but\nperforms a selective update with respect to some attributes\n(symbolic name, UUID) and the extensions of the target\nproject:\n\n* The symbolic name of the target project will only be\n  overwritten, if it is not blank in the request entity.\n  (projects always must have a non-blank symbolic name!)\n* The UUID of the target project is never changed even if\n  present in the request entity.\n* All other properties of the target project will be\n  overwritten with the value provided in the request entity,\n  or reset to the initial value, if no value is provided in\n  the request entity.\n* extensions of the target project will only be overwritten\n  selectively, i.e. if the request entity provides a certain\n  extension then the corresponding extensions of the target\n  project will be replaced. If the target project does not\n  have the extension yet, it will be added. Extensions that\n  are present in the target project but not in the request\n  entity will remain with the target project.\n\nFor updating individual extensions PUT requests to the\npath /api/projects/\u003cproject\u003e/extensions/\u003cext\u003e should\nbe used. In order to remove obsolete extensions, explicit\nDELETE requests for these extensions must be raised.\n\nChange-Id: I30012f493724c4f877121b1d6488f89a23142229\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "65a05172bb112968ce50a21138d028bd5f71fee9",
      "tree": "e8ca611be9f305bd77e4e8eb0b85584549b44ab1",
      "parents": [
        "852b136846c0975e8d7e6677939b1444217d4a80"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Mar 23 18:20:09 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 24 16:43:34 2015 +0100"
      },
      "message": "CommonProjectConverter#unmarshal()\n\nChange-Id: I9d77a998ac0f390023dec28b876251186f385143\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "852b136846c0975e8d7e6677939b1444217d4a80",
      "tree": "818237c4cafbafd95fe7e5bbe00d6d9da6d57915",
      "parents": [
        "e3c3b95ca9bdebc5a06ee3a35cc8eb323cc8d0f1"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 24 16:42:46 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 24 16:43:31 2015 +0100"
      },
      "message": "JSONRestReader#end() should skip remaining attributes/entries\n\nIf the current object has more unread attributes, or the current\narray has more unread entries, JSONRestReader#end() should skip\nthem instead of failing with an IllegalStateException.\n\nChange-Id: Ia132a3925a335f24063b606eb77d909dcb6b64dd\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "e3c3b95ca9bdebc5a06ee3a35cc8eb323cc8d0f1",
      "tree": "55244ec47fc906ca9a72fc9eb936a0626ff66343",
      "parents": [
        "11931966d1162212c4fd357c6eb836d0c95558b2"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 24 16:40:46 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 24 16:43:29 2015 +0100"
      },
      "message": "JSONRestReader#skipValue() failed to skip array entries\n\nChange-Id: I40b39a28a57b978c09fb884a71868e2c4b168c6b\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "11931966d1162212c4fd357c6eb836d0c95558b2",
      "tree": "c7716bc1def3d35370c94ce356916b56acc0999e",
      "parents": [
        "7db7e02d44454db9b793efd1eb73238323200e7a"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 24 10:31:14 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 24 13:54:55 2015 +0100"
      },
      "message": "Enrich the \"parent\" link in project REST output\n\nThis patch adds uuid, id and name attributes to the\nparent link of a project\u0027s REST output similiar to\nthe subproject links. These additional attributes,\nfor example, allow rendering a project hierarchy in\na UI presenting logical/display names without the\nneed for an additional REST request for the parent\nproject.\n\nChange-Id: I3944fb51c1939e68f3e65ec9c552ac83021fb66a\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "7db7e02d44454db9b793efd1eb73238323200e7a",
      "tree": "442f2a0f4936bff96f675c5fa078eb8f7a7a93e8",
      "parents": [
        "a7c7b9702a4fe7587c6cdb8876655a261fc55366"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 24 10:28:34 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 24 13:54:43 2015 +0100"
      },
      "message": "Re-introduce Project#getParentProject() returning Project\n\nThere were several places in the code where the result of\nEntityBase#getParentEntity() was cast to Project, because\na type-safe \"getParentProject()\" method was not available\nfor Project.The old method of that name returned only an\nUUID.\n\nThis patch re-introduces Project#getParentProject(),\nbut now with return type Project. The necessary cast\nfrom EntityBase to Project is performed with a checked\ncast, i.e. with Class#cast().\n\nChange-Id: If7fbac9d7b6796c74d295a3d65b81169123e5f09\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "a7c7b9702a4fe7587c6cdb8876655a261fc55366",
      "tree": "9b55070870ec6f674f63721da531ec35ded5b5a3",
      "parents": [
        "0fb9e140fa77d181458487aca36f5f2b8b24530e"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 24 10:16:13 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 24 13:45:33 2015 +0100"
      },
      "message": "[refactoring] Remove redundant Project#getParentProject()\n\nThis method was just a synonym for EntityBase#getParentEntityId(),\nand the name was misleading since it returned a UUID instead of\na project.\n\nChange-Id: I6509e8ebbcaf6b7ad19e288f87a02215422871ac\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "0fb9e140fa77d181458487aca36f5f2b8b24530e",
      "tree": "dd961c3bc8c2dce5fe8a9fa08cb18ec4842efcef",
      "parents": [
        "97cd774fab26b3ecde13e1036a1d0009793183dd"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Mar 23 17:22:47 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 24 13:16:17 2015 +0100"
      },
      "message": "[rest] Added missing descriptionFormat attribute\n\nChange-Id: I9c49e25955093efa04fe367489de79e9e5442455\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "97cd774fab26b3ecde13e1036a1d0009793183dd",
      "tree": "e694e6250b5b43d18f1231301c46c3fdc049acf5",
      "parents": [
        "1bd0e74f8086d25c6a5eefc7c619dba7e25fd33b"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Mar 23 16:42:49 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 24 13:15:51 2015 +0100"
      },
      "message": "[refactoring] Simplify CommonProjectConverter constructors\n\nCommonProjectConverter had a lot of flags to tweak the rendering\nof extensions, namespaces and common attributes like lastModified.\n\nThis patch removes all the flags and moves the rendering of\nthe namespace and common attributes to the derived classes,\ne.g. to ProjectConverter, and to the callers of the constructors,\ne.g. ProjectsCionverters.\n\nThere are now 2 constructors remaining:\n\n  CommonProjectConverter()\n\nThe project will be rendered without extensions.\n\n  CommonProjectConverter(String[] extensions)\n\nRenders the project with the given extensions. If the argument\nis null, no extensions will be rendered. If the argument array\ncontains an \"*\" entry, all extensions will be rendered.\n\nChange-Id: Ia7d8116f557079ccfc2800c06fbb54ef0063bd66\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "1bd0e74f8086d25c6a5eefc7c619dba7e25fd33b",
      "tree": "024cc9bdc2edf0400ce4f12b1f5d430faa90c6c5",
      "parents": [
        "ae0ce2bff2553355c8072fe74345251017f9d07a"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Mar 23 18:14:17 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Mar 23 18:16:41 2015 +0100"
      },
      "message": "InheritableExtensionResource should handle IOException\n\nChange-Id: I60596ff882e6b660fe07a7ec67caa3b57a2ad724\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "ae0ce2bff2553355c8072fe74345251017f9d07a",
      "tree": "8c0f5eaea0ae9b78206af2d0a8227f972ed3ab9d",
      "parents": [
        "c525cdc42f3ba5be78f7b5fe11c4083b67a5708d"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Thu Mar 19 15:34:03 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Thu Mar 19 15:34:03 2015 +0100"
      },
      "message": "[findbugs] Fixed some potential null pointer accesses\n\nChange-Id: I739c5043c035c083455d5df1117f85e94362fb03\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "c525cdc42f3ba5be78f7b5fe11c4083b67a5708d",
      "tree": "2f9965f7dc806bee91e8088d7f535e3ae89190a0",
      "parents": [
        "d1c9ac0e1f45363f1c30d7a1d38ab2092e81a8a3"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Thu Mar 19 15:11:59 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Thu Mar 19 15:11:59 2015 +0100"
      },
      "message": "ScrumConverter#unmarshal()\n\nChange-Id: I103c555ba98618582468dadfa9789a45dfa97820\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "d1c9ac0e1f45363f1c30d7a1d38ab2092e81a8a3",
      "tree": "dc048e96a689d521159f636383f0f4dfd9846c22",
      "parents": [
        "d11ba5763a0749399f527bca76d89130ddb01398"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Thu Mar 19 14:49:36 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Thu Mar 19 14:49:36 2015 +0100"
      },
      "message": "LinkGroupsConverter#unmarshal()\n\nChange-Id: I911979bc002fc41e794c944f96d51a65a87dfffb\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "d11ba5763a0749399f527bca76d89130ddb01398",
      "tree": "973f83733d8797246b32cc7153954648f1584763",
      "parents": [
        "af9d8fa6aaffe8ee787c6a0ad5121c1a99075226"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Thu Mar 19 14:29:09 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Thu Mar 19 14:29:09 2015 +0100"
      },
      "message": "Introduce RestReader#isValue()\n\nThis method allows to handle object \"values\", which are supported\nby XML, but not directly by JSON. In XML the following is a valid\nobject:\n\n  \u003cobject a\u003d\"b\"\u003evalue\u003c/object\u003e\n\nThere is no equivalent way to express that in JSON, but throughout\nthe Skalli REST API the same object would be rendered in JSON as\n\n  \"object\":{\"a\":\"b\",\"value\":\"value\"}\n\nThe new method allows parsing of such objects independently of\nthe concrete media type:\n\n  json.object()\n  while (json.hasMore()) {\n      if (json.isKey(\"a\")) {\n          a \u003d json.attributeString();\n      } else if (json.isValue()) {\n          value \u003d json.valueString();\n      } else {\n          // unexpected\n      }\n  }\n  json.end()\n\nChange-Id: I2cd0253c62377367fdaa423634710d456d6336bc\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "af9d8fa6aaffe8ee787c6a0ad5121c1a99075226",
      "tree": "7ba8057f8caaee3b072577650c872b5116f6fcd5",
      "parents": [
        "0138b5f5d6e5e728c0d4160c3c30ab1256b92d56"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 17 18:21:52 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 17 18:21:52 2015 +0100"
      },
      "message": "Converters should skip unknown attributes\n\nThe fallback in all unmarshalling methods should be to ignore\nunknown attributes and accept attributes in any arbitrary order.\n\nThis patch fixes the converters for the people, info and tags\nextensions, and add some tests.\n\nChange-Id: Ie602770f0490a170c633dfa03557fffc861b28c5\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "0138b5f5d6e5e728c0d4160c3c30ab1256b92d56",
      "tree": "59e212f56ebe23ed2ad12d4e7036687f390e5b38",
      "parents": [
        "63dfceb9925d6a3ed5f158ececadfe86f7b1c94f"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 17 17:59:56 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 17 18:10:47 2015 +0100"
      },
      "message": "DevInfConverter#unmarshal()\n\nChange-Id: I1f5cd570edbd4ad3eebe7b8c9c5e524159a7c816\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "63dfceb9925d6a3ed5f158ececadfe86f7b1c94f",
      "tree": "ab6c8c5be73367ddfef07f218cecd0abff1824c6",
      "parents": [
        "23857831d0b9ebe90afecac5f328c867e5ad7c40"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Feb 06 17:46:24 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 17 15:08:23 2015 +0100"
      },
      "message": "Inheritable Extension REST API\n\nThis patch adds a REST API to support CRUD operations on\ninheritable project extensions. Individual project extensions\ncan be retrieved, added, removed, changed and inherited.\nThey are addressed by their short names as defined by the\ncorrresponding extension service. The same REST converters\nare employed as for the project REST API.\n\n- Adding an extension to a project:\n\n    POST /api/projects/\u003cid\u003e/extensions\n    Slug: \u003cshortName\u003e\n\n  The attributes of the extension may be delivered in the\n  body of the POST request (Content-Type header must be\n  present in this case), or with a subsequent PUT request.\n  In the latter case the POST request will add an extension\n  with initial attributes.\n  Response status will be 201 Created if the extension was\n  added successfully and a Location header of the form\n\n     /api/projects/\u003cid\u003e/extensions/\u003cshortName\u003e\n\n  will be returned. Possible error codes:\n\n    400 Slug header missing\n        -\u003e if the Slug header is missing or blank\n\n    400 Unknown extension \u003cshortName\u003e\n        -\u003e if the given \u003cshortName\u003e does not belong to\n           any known or supported extension type\n\n    400 Failed to parse request entity: \u003creason\u003e\n        -\u003e if the request entity could not be understood;\n           the details are delivered in the response body\n           with an error entity;\n           errorId: rest:api/projects/\u003cid\u003e/extensions:10\n\n    400 Validation of \u003cid\u003e failed\n        -\u003e if the project could not be persisted because\n           it has FATAL issues; the details are delivered\n           in the response body with an error entity;\n           errorId: rest:api/projects/\u003cid\u003e/extensions:20\n\n    403 Forbidden for user \u003cuserId\u003e\n        -\u003e if the user lacks the necessary permits\n\n    403 Project \u003cid\u003e already has extension \u003cshortName\u003e\n        -\u003e if the project already has the requested extension\n\n    404 Project \u003cid\u003e not found\n        -\u003e if the requested project does not exist\n\n    405 Extension \u003cshortName\u003e does not support write\n        -\u003e if the extension does not support write operations\n           through the REST API\n\n    415 Unsupported Media Type\n        -\u003e if the media type specified in the Content-Type\n           header is not supported\n\n- Retrieving an extension of a project:\n\n    GET /api/projects/\u003cproject\u003e/extensions/\u003cshortName\u003e\n    Accept: \u003cmedia type\u003e\n\n  Instead of the Accept header a query parameter of the form\n  ?accept\u003d\u003cmedia type\u003e may be provided, where \u003cmedia type\u003e can\n  be one of json, xml, application/json or text/xml. If neither\n  an Accept header nor a query parameter is provided the default\n  application/json will be assumed.\n\n  Response status will be 200 OK in case of success and the\n  extension will be delivered in the response body.\n  Possible error codes:\n\n    400 Unknown extension \u003cshortName\u003e\n        -\u003e if the given \u003cshortName\u003e does not belong to\n           any known or supported extension type\n\n    403 Forbidden for user \u003cuserId\u003e\n        -\u003e if the user lacks the necessary permits\n\n    404 Project \u003cid\u003e not found\n        -\u003e if the requested project does not exist\n\n    404 Project \u003cid\u003e has no \u003cshortName\u003e extension\n        -\u003e if the project does not have the requested extension\n\n    415 Unsupported Media Type\n        -\u003e if the media type specified in the Accept\n           header or accept query parameter is not supported\n\n- Changing an extension of a project:\n\n    PUT /api/projects/\u003cproject\u003e/extensions/\u003cshortName\u003e\n    Content-Type: \u003cmedia type\u003e\n\n  The attributes of the extension must be delivered in the request\n  body. Note that a PUT request of the given form will overwrite\n  the extension completely, i.e. first remove the old extension\n  and then add a new one. There is no mechanism for overwriting\n  attributes selectively.\n\n  If the extension was inherited, the request will fail with status\n  403, unless the request body contains an \"inherited\" attribute\n  with value false.\n  This will switch off inheritance and add an extension to the\n  project with the attributes given in the request. Inheritance\n  can be enabled for a project extension by providing a request\n  with an \"inherited\" attribute of value true. Example for media\n  type application/json:\n\n    PUT /api/projects/\u003cproject\u003e/extensions/\u003cshortName\u003e\n    Content-Type: application/json\n\n    { \"inherited\": true }\n\n  All other attributes in the request body will be ignored in\n  this case. Note that enabling inheritance will destroy the\n  extension and all data previously stored in that extension\n  will be lost!\n\n  Response status will be 204 No Content in case of success.\n  Possible error codes:\n\n    400 Unknown extension \u003cshortName\u003e\n        -\u003e if the given \u003cshortName\u003e does not belong to\n           any known or supported extension type\n\n    400 Request entity required\n        -\u003e if the request body is empty or undefined\n\n    400 Failed to parse request entity: \u003creason\u003e\n        -\u003e if the request entity could not be understood;\n           the details are delivered in the response body\n           with an error entity;\n           errorId: rest:api/projects/\u003cid\u003e/extensions:10\n\n    400 Validation of \u003cid\u003e failed\n        -\u003e if the project could not be persisted because\n           it has FATAL issues; the details are delivered\n           in the response body with an error entity;\n           errorId: rest:api/projects/\u003cid\u003e/extensions:20\n\n    403 Forbidden for user \u003cuserId\u003e\n        -\u003e if the user lacks the necessary permits\n\n    403 Extension \u003cshortName\u003e is inherited\n        -\u003e inherited extensions can\u0027t be changed\n\n    404 Project \u003cid\u003e not found\n        -\u003e if the requested project does not exist\n\n    404 Project \u003cid\u003e has no \u003cshortName\u003e extension\n        -\u003e if the project does not have the requested extension\n\n    415 Unsupported Media Type\n        -\u003e if the media type specified in the Accept\n           header or accept query paramarter is not supported\n\n- Removing an extension of a project:\n\n    DELETE /api/projects/\u003cproject\u003e/extensions/\u003cshortName\u003e\n\n  Response status will be 204 No Content in case of success.\n  Possible error codes:\n\n    400 Unknown extension \u003cshortName\u003e\n        -\u003e if the given \u003cshortName\u003e does not belong to\n           any known or supported extension type\n\n    403 Forbidden for user \u003cuserId\u003e\n        -\u003e if the user lacks the necessary permits\n\n    404 Project \u003cid\u003e not found\n        -\u003e if the requested project does not exist\n\n    404 Project \u003cid\u003e has no \u003cshortName\u003e extension\n        -\u003e if the project does not have the requested extension\n\n    400 Validation of \u003cid\u003e failed\n        -\u003e if the project could not be persisted because\n           it has FATAL issues; the details are delivered\n           in the response body with an error entity;\n           errorId: rest:api/projects/\u003cid\u003e/extensions:20\n\nChange-Id: I739ff041be73fe4e899fecbdc1eb5fc0ed9d922e\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "23857831d0b9ebe90afecac5f328c867e5ad7c40",
      "tree": "de43beab3f96dbe2700e710fef75cf102d1567ad",
      "parents": [
        "63edfdbf1425a562b8262de256f912b214ea4d0f"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 17 14:49:16 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 17 15:08:22 2015 +0100"
      },
      "message": "PeopleConverter#unmarshal()\n\nChange-Id: I6914c0e7e15433b700b88f7a61bfed60c8ab896a\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "63edfdbf1425a562b8262de256f912b214ea4d0f",
      "tree": "cb33b273c9171e42838ee203058fa0ec383071ac",
      "parents": [
        "ebad64138e437604f3380fa94f7dd069860e7983"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 17 14:46:03 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 17 15:08:09 2015 +0100"
      },
      "message": "Fixed Member#equals(), compareTo() and hashCode()\n\nequals() and hashCode() were implemented using super, which is\nwrong because Member is derived directly from Object.\ncompareTo() did not handle userID \u003d\u003d null correctly.\nConversion of the userID to lowercase is now performed in the\nconstructor and setter. Added some missing tests.\n\nChange-Id: I4c265021921809cb6e3655b2fda4be6f3d36de88\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "ebad64138e437604f3380fa94f7dd069860e7983",
      "tree": "8e877af119bc4e6dd8a16bfc85796d44ded6b33f",
      "parents": [
        "f25badd0234f2e23fc2d4c55fb6a850db4844664"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Feb 23 15:19:58 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 17 15:02:28 2015 +0100"
      },
      "message": "TagsConverter#unmarshal()\n\nChange-Id: Ib7b8974a41753acacfed190000f94796d0250559\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "f25badd0234f2e23fc2d4c55fb6a850db4844664",
      "tree": "9db760b3c0072fca57e6b7bd0b4182809088c5df",
      "parents": [
        "1de1363ce30b22251cadb74d102e7076eb2c3c57"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Feb 23 15:10:08 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 17 15:02:26 2015 +0100"
      },
      "message": "Add missing test for InfoConverter#unmarshal()\n\nChange-Id: I647ddd1c87d1c6c6be75c97ce29051ec20bd5be0\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "1de1363ce30b22251cadb74d102e7076eb2c3c57",
      "tree": "0ae87691c8747babde00795085dd747dfe88dcbb",
      "parents": [
        "e1363ae93cadc15fa7993c9ed4596aa23868fd7f"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Feb 23 14:56:09 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 17 15:02:24 2015 +0100"
      },
      "message": "Add RestWriterTestBase#getRestReaderJSON()\n\nChange-Id: Iac163e4eff1e86d87f9891a20858e782a3c4c83b\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "e1363ae93cadc15fa7993c9ed4596aa23868fd7f",
      "tree": "f3615182f5782b82f47acc63bd27c7c857be4c3d",
      "parents": [
        "4658ff6900b2ec4c81d3a18309b2c746b06fa3a6"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Feb 23 14:47:39 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 17 15:02:22 2015 +0100"
      },
      "message": "Add missing skipKey() in array() and object() methods\n\nThis change facilitates parsing sequences like\n\n  if (reader.isKey(\"name)) {\n      reader.beginArray();\n      ...\n  }\n  if (reader.isKey(\"name)) {\n      reader.beginObject();\n      ...\n  }\n\nwithout the need for an extra reader.key() before the beginArray()\nor beginObject() respectively.\n\nChange-Id: If59020f0845a2aa97a3dd1c38cfad2381f4061c7\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "4658ff6900b2ec4c81d3a18309b2c746b06fa3a6",
      "tree": "7a5dd3b0d458e461262e8571637ec7e73bcabb40",
      "parents": [
        "4555f7baa5a69e5f27255f6cab9ae7a7478a1371"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Feb 23 14:34:03 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Mar 17 15:01:51 2015 +0100"
      },
      "message": "Extract some converter test utils to separate class\n\nSeveral converter tests used the newMinimalProject() methods\nfrom CommonProjectConverterTest. Since dependencies between tests\nare ugly, the relevant methods have been moved to an utility class\nConverterTestUtils.\n\nChange-Id: Ib960062ab82b5e79b7d514a8bd08be272879a487\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "4555f7baa5a69e5f27255f6cab9ae7a7478a1371",
      "tree": "711841d88e93d99c4161bbaedcda84de472baac2",
      "parents": [
        "f1de82e016aa0328d801dcb701e645fbc275a588"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Feb 20 14:48:27 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Mon Feb 23 13:09:21 2015 +0100"
      },
      "message": "Handle inherited extension with extra attributes gracefully\n\nIn case the \"inherited\" flag was set on an inheritable extension\nunmarshalling always failed on the closing reader#end() call\nwith a parsing exception because the following common attributes\nand/or extension attributes were never consumed. While that\nbehavior is, strictly speaking, correct throwing a parsing\nexceptions seems unnecessarily harsh in that case.\n\nThis patch adapts InheritableExtensionConverter to always parse\nall available attributes and return them to the caller of the\nunmarshall method. The caller then may decide how to handle\nthe result, e.g. produce a less technical error message or just\nignore it.\n\nChange-Id: I7935c00129457b0f185edb92f4ad2581a106c8b5\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "f1de82e016aa0328d801dcb701e645fbc275a588",
      "tree": "8a9f745441f699c8b828a55e1c992221b81b336d",
      "parents": [
        "caa4236ab8343d6cfdaa3165a75ed52c3f76fbce"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Feb 20 12:50:29 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Feb 20 14:12:55 2015 +0100"
      },
      "message": "ResourceBase: Remove unused string constants\n\nChange-Id: I348898181e1235dde99b8e38015af7d168d82540\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "caa4236ab8343d6cfdaa3165a75ed52c3f76fbce",
      "tree": "8e82ec5156e185e6c1f312dde09777e9d81052bb",
      "parents": [
        "552a34d3cf17d97c5ca6ccbb598753b67ede1f5a"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Feb 20 12:48:40 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Feb 20 14:12:53 2015 +0100"
      },
      "message": "Rename ResourceBase#context to ResourceBase#request\n\nIn a subsequent request a ResponseContext will be added to give\naccess to response headers. For consistency the \"context\" attribute\nis renamed to \"request\". The new attribute will then be named\n\"response\".\n\nChange-Id: I63b868ccb29ed11f29a840de2315f2f01cea2c83\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "552a34d3cf17d97c5ca6ccbb598753b67ede1f5a",
      "tree": "b52352847c948f8ffb6428bf147cf098996ef705",
      "parents": [
        "d0aedd89533b25cfd6f417bd77aefddbbc56a88d"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Feb 20 11:10:22 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Feb 20 12:56:47 2015 +0100"
      },
      "message": "Fix a wrong javadoc comment in RequestContext\n\nChange-Id: I986c50d696ccf8d5a8eea964150dc4a6068270ea\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "d0aedd89533b25cfd6f417bd77aefddbbc56a88d",
      "tree": "d475cfab04a7543e6fb208403d4af13c2b1ff2ae",
      "parents": [
        "a5716eea18e85ed4fa5e7bdf977a13804493c179"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Feb 06 17:45:14 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Feb 17 16:55:36 2015 +0100"
      },
      "message": "InfoConverter#unmarshal\n\nChange-Id: I2460f2f91dd8bca9aba45113e5f0d9197bc86347\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "a5716eea18e85ed4fa5e7bdf977a13804493c179",
      "tree": "02900ff801f03344cdaa4869fc3319e2b125766c",
      "parents": [
        "3c9d304490427e9cb39e789965414969c5ff9f8e"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Feb 03 18:22:18 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Feb 13 16:25:42 2015 +0100"
      },
      "message": "Generic REST converter for inheritable extensions\n\nChange-Id: Id247a15ffbd783edfb06a1084d03642c8d178919\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "3c9d304490427e9cb39e789965414969c5ff9f8e",
      "tree": "6238af280a21d6c4aa673ed5091dc0031df5b420",
      "parents": [
        "c436a4bf3a4cc41f74f8c8824969a8c8623da326"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Feb 03 18:21:11 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Feb 13 16:25:40 2015 +0100"
      },
      "message": "Introduce InheritableExtension\n\nThis is a wrapper class for ExtensionEntityBase plus an \"inherited\"\nflag. This is necessary since in the current model inheritance is\ntracked by the project. The \"inherited\" flag is an instance of\nBoolean so that one can express the three states \"inherited\",\n\"not inherited\" and \"undetermined\". The latter will be used to\nswitch inheritance on/off in the REST API.\n\nChange-Id: I1aefdbd308041e9f2318a1fa97d7b7d5447ad540\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "c436a4bf3a4cc41f74f8c8824969a8c8623da326",
      "tree": "4990ac87d5daadfe90944c0015a2878cd6997de4",
      "parents": [
        "93a8ee5d6e857c7a35a25dacb6f5d000aee3b82a"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Feb 03 18:16:53 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Feb 13 16:25:38 2015 +0100"
      },
      "message": "Introduce a new constructor to ResourceRepresentation\n\nThe new constructor is for support of unmarshalling operations\nlike PUT and POST.\n\nChange-Id: I60a333ee451ddd2d385b49d101b9c1786485b365\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "93a8ee5d6e857c7a35a25dacb6f5d000aee3b82a",
      "tree": "c14eb95ae334d955adf7000e2c61a01a586d6794",
      "parents": [
        "77f520b52b3a6b24cf778c03488aa708394ba783"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Feb 03 17:11:56 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Feb 13 16:25:36 2015 +0100"
      },
      "message": "Introduce RestConverter#unmarshal(RestReader)\n\nChange-Id: Ica4faf3733b35a7d7b2356a108e096247496fc14\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "77f520b52b3a6b24cf778c03488aa708394ba783",
      "tree": "edebb52e5a21527d536f52e9f2c65ab3f3e002e2",
      "parents": [
        "3a46142b976716c5b6ef93b3788219513e3a3cc6"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Feb 13 15:46:47 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Feb 13 16:25:34 2015 +0100"
      },
      "message": "Add convenience method RestReader#isKey(String)\n\nChange-Id: I069d7c36c9924753f141aa51b52746d7297be46b\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "3a46142b976716c5b6ef93b3788219513e3a3cc6",
      "tree": "a90657c10864d43131eac5bb3c27e93732681845",
      "parents": [
        "0cddd6b858386f1ef0f0088e692805d051fa52df"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Feb 13 15:45:55 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Feb 13 16:25:32 2015 +0100"
      },
      "message": "Rename nextKey to lookAhead in JSONRestReader\n\nChange-Id: I85bda7725f3898b8e6ed3bda06decfbff8761ba2\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "0cddd6b858386f1ef0f0088e692805d051fa52df",
      "tree": "49e048f72af5956504fec380526d1d0e6db889ef",
      "parents": [
        "de48ad250476221b55ebdedafd2c565d32edecd2"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Feb 13 15:43:32 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Feb 13 16:25:30 2015 +0100"
      },
      "message": "Fix look ahead key handling in JSONRestReader\n\nThe simple sequence\n\n  isKey()\n  isKeyAnyOf(\"a\")\n\nalways failed with an IllegalStateException, because the first call\nof isKey() read the key implicitly and set sequenceState to\nEXPECT_VALUE. The second call to isKeyAnyOf() then failed because\nof the unexpected state.\nisKey() and isKeyAnfOf() now ignore the sequenceState and instead\ncheck that either a nextKey is available or the next token in the\ninput stream is a JsonToken#NAME.\n\nMore tests have been added for various variants of implicit and\nexplict key and value skipping.\n\nChange-Id: If94394746248231eff75eedc27a5fd667d351556\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "de48ad250476221b55ebdedafd2c565d32edecd2",
      "tree": "606ad15abe49306640f850cea20e60908d0e98b3",
      "parents": [
        "6948e93cff94e094ffee230e2c63a2879a0bfe64"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Tue Feb 03 16:50:36 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Feb 13 14:17:45 2015 +0100"
      },
      "message": "Introduce RestService#getRestReader()\n\nChange-Id: Id7b50ec5035c76fed11be40afc33e266d37fc82a\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "6948e93cff94e094ffee230e2c63a2879a0bfe64",
      "tree": "42bcf4a69a30603fcf1ddb437de586a2cc0e6d8a",
      "parents": [
        "e6b1c59fb4f2f28c17e09e12330ce9b2b6d17e29"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Jan 30 16:08:13 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Feb 13 14:17:43 2015 +0100"
      },
      "message": "RestReader implementation based on com.google.gson.stream\n\nChange-Id: I72af1d14523da743db0850eb4e93b3136ec6ec53\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "e6b1c59fb4f2f28c17e09e12330ce9b2b6d17e29",
      "tree": "d88a75e773c77233495000418d600bec6dc53fd1",
      "parents": [
        "526b15b456cf95010e947cd1d6d7b45a09119ccb"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Jan 30 13:59:04 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Feb 13 14:17:41 2015 +0100"
      },
      "message": "Include gson 2.2.4 into target platform and orbit feature\n\nPreparation for a JSON-style REST reader.\n\ngson 2.2.4 is not available in R20140114142710, but in\nR20140525021250. However, the new orbit does no longer contain\njunit 4.8.1 and jsch 0.1.44. We first need a CQ update for\nthese bundles before we can migrate all to the new orbit.\n\nCQ: 9097\nChange-Id: I2dc928af88e781d361f2f09769be6e5647d8d785\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    },
    {
      "commit": "526b15b456cf95010e947cd1d6d7b45a09119ccb",
      "tree": "02e695eec1c8a5dd1733d17b35129a1ec90a7335",
      "parents": [
        "6aa3e09d00cbef626bbc7c37fa55ad5cfc6dd532"
      ],
      "author": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Jan 30 15:59:59 2015 +0100"
      },
      "committer": {
        "name": "Michael Ochmann",
        "email": "michael.ochmann@sap.com",
        "time": "Fri Feb 13 14:17:31 2015 +0100"
      },
      "message": "Introduce interface RestReader\n\nThis interface is kind of the mirror image of RestWriter and aims\nto abstract readers for hierarchical file formats like JSON and\nXML. An implementation for media type \"application/json\" will\nbe provided in a subsequent patch.\n\nChange-Id: I485cd18464b413aaacdb70d2fb0618f28fa9b18b\nSigned-off-by: Michael Ochmann \u003cmichael.ochmann@sap.com\u003e\n"
    }
  ],
  "next": "6aa3e09d00cbef626bbc7c37fa55ad5cfc6dd532"
}
