Update JGit to latest 4.5.x release

JGit releases older than 4.5 are known to be prone to issues
with MissingObjectExceptions.

Since this is a major JGit version upgrade some code needs to be adapted
to changed JGit API.

Change-Id: Ia9099a5ac8fcbaf873e3354b5a47d2178c97444a
Signed-off-by: Edwin Kempin <ekempin@google.com>
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/GitUtil.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/GitUtil.java
index 3234ffd..0356f72 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/GitUtil.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/GitUtil.java
@@ -184,7 +184,7 @@
         return ChangeIdUtil.computeChangeId(null, null, i, i, msg);
       }
     } finally {
-      rw.release();
+      rw.close();
     }
   }
 
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/HttpPushForReviewIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/HttpPushForReviewIT.java
index 465befd..4d7897c 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/HttpPushForReviewIT.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/HttpPushForReviewIT.java
@@ -15,13 +15,18 @@
 package com.google.gerrit.acceptance.git;
 
 import org.eclipse.jgit.api.errors.GitAPIException;
+import org.eclipse.jgit.transport.CredentialsProvider;
+import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
 import org.junit.Before;
 
 import java.io.IOException;
+import java.net.URISyntaxException;
 
 public class HttpPushForReviewIT extends AbstractPushForReview {
   @Before
   public void selectHttpUrl() throws GitAPIException, IOException {
+    CredentialsProvider.setDefault(new UsernamePasswordCredentialsProvider(
+        admin.username, admin.httpPassword));
     selectProtocol(Protocol.HTTP);
   }
 }
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/SubmitOnPushIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/SubmitOnPushIT.java
index a73169d..763b25f 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/SubmitOnPushIT.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/SubmitOnPushIT.java
@@ -292,7 +292,7 @@
         assertEquals(admin.email, c.getAuthorIdent().getEmailAddress());
         assertEquals(admin.email, c.getCommitterIdent().getEmailAddress());
       } finally {
-        rw.release();
+        rw.close();
       }
     } finally {
       r.close();
@@ -310,7 +310,7 @@
         assertEquals(admin.email, c.getAuthorIdent().getEmailAddress());
         assertEquals(serverIdent.getEmailAddress(), c.getCommitterIdent().getEmailAddress());
       } finally {
-        rw.release();
+        rw.close();
       }
     } finally {
       r.close();
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java
index 13901c3..fa906a4 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java
@@ -265,7 +265,7 @@
             repo.getRef("refs/heads/master").getObjectId()));
         return Lists.newArrayList(rw);
       } finally {
-        rw.release();
+        rw.close();
       }
     } finally {
       repo.close();
@@ -278,7 +278,7 @@
       try {
         return rw.parseCommit(repo.getRef(name).getObjectId());
       } finally {
-        rw.release();
+        rw.close();
       }
     } finally {
       repo.close();
@@ -300,7 +300,7 @@
         ObjectId newTreeId = repo.resolve("refs/heads/master^{tree}");
         return getLatestDiff(repo, oldTreeId, newTreeId);
       } finally {
-        rw.release();
+        rw.close();
       }
     } finally {
       repo.close();
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/project/CreateProjectIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/project/CreateProjectIT.java
index b593840..fe3d3af 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/project/CreateProjectIT.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/project/CreateProjectIT.java
@@ -232,8 +232,8 @@
         tw.reset();
       }
     } finally {
-      tw.release();
-      rw.release();
+      tw.close();
+      rw.close();
       repo.close();
     }
   }
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/raw/CatServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/raw/CatServlet.java
index 9aec609..756c427 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/raw/CatServlet.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/raw/CatServlet.java
@@ -209,7 +209,7 @@
           return;
         }
       } finally {
-        reader.release();
+        reader.close();
       }
     } catch (IOException e) {
       getServletContext().log("Cannot read repository", e);
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/AllProjectsConfig.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/AllProjectsConfig.java
index cd4a0b8..03f6d1c 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/AllProjectsConfig.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/AllProjectsConfig.java
@@ -136,15 +136,15 @@
           updateRef(repo, ident, newRevision, "commit: " + msg);
           revision = newRevision;
         } finally {
-          rw.release();
+          rw.close();
         }
       } finally {
         if (inserter != null) {
-          inserter.release();
+          inserter.close();
           inserter = null;
         }
         if (reader != null) {
-          reader.release();
+          reader.close();
           reader = null;
         }
       }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java
index 939be28..b8d1e47 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java
@@ -280,7 +280,7 @@
           oi.flush();
           revertCommit = revWalk.parseCommit(id);
         } finally {
-          oi.release();
+          oi.close();
         }
 
         RefControl refControl = ctl.getRefControl();
@@ -344,7 +344,7 @@
 
         return change.getId();
       } finally {
-        revWalk.release();
+        revWalk.close();
       }
     } finally {
       git.close();
@@ -403,7 +403,7 @@
           oi.flush();
           newCommit = revWalk.parseCommit(id);
         } finally {
-          oi.release();
+          oi.close();
         }
 
         PatchSet.Id id = nextPatchSetId(git, change.currentPatchSetId());
@@ -426,7 +426,7 @@
 
         return change.getId();
       } finally {
-        revWalk.release();
+        revWalk.close();
       }
     } finally {
       git.close();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeKindCache.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeKindCache.java
index f6e5773..2c3f4fd 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeKindCache.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeKindCache.java
@@ -144,7 +144,7 @@
         // having the same tree as would exist when the prior commit is
         // cherry-picked onto the next commit's new first parent.
         ThreeWayMerger merger = MergeUtil.newThreeWayMerger(
-            key.repo, MergeUtil.createDryRunInserter(), key.strategyName);
+            key.repo, MergeUtil.createDryRunInserter(key.repo), key.strategyName);
         merger.setBase(prior.getParent(0));
         if (merger.merge(next.getParent(0), prior)
             && merger.getResultTreeId().equals(next.getTree())) {
@@ -154,7 +154,7 @@
         }
       } finally {
         key.repo = null;
-        walk.release();
+        walk.close();
       }
     }
 
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java
index 3ae4602..ce025ef 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java
@@ -146,7 +146,7 @@
               mergeUtilFactory.create(projectState).createCherryPickFromCommit(git, oi, mergeTip,
                   commitToCherryPick, committerIdent, commitMessage, revWalk);
         } finally {
-          oi.release();
+          oi.close();
         }
 
         if (cherryPickCommit == null) {
@@ -184,7 +184,7 @@
               cherryPickCommit, refControl);
         }
       } finally {
-        revWalk.release();
+        revWalk.close();
       }
     } finally {
       git.close();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Files.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Files.java
index 1c40426..c4a979d 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Files.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Files.java
@@ -267,7 +267,7 @@
           db.get().accountPatchReviews().insert(inserts);
           return pathList;
         } finally {
-          reader.release();
+          reader.close();
         }
       } finally {
         git.close();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/GetArchive.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/GetArchive.java
index 9a4ab21..b0fea3c 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/GetArchive.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/GetArchive.java
@@ -79,7 +79,7 @@
 
           @Override
           public void close() throws IOException {
-            rw.release();
+            rw.close();
             repo.close();
           }
         };
@@ -92,7 +92,7 @@
         return bin;
       } finally {
         if (close) {
-          rw.release();
+          rw.close();
         }
       }
     } finally {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/GetContent.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/GetContent.java
index 86a3da6..f9b9bf6 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/GetContent.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/GetContent.java
@@ -71,10 +71,10 @@
           };
           return result.setContentLength(object.getSize()).base64();
         } finally {
-          tw.release();
+          tw.close();
         }
       } finally {
-        rw.release();
+        rw.close();
       }
     } finally {
       repo.close();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/GetPatch.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/GetPatch.java
index 4a8be84..4e40d62 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/GetPatch.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/GetPatch.java
@@ -102,7 +102,7 @@
 
           @Override
           public void close() throws IOException {
-            rw.release();
+            rw.close();
             repo.close();
           }
         };
@@ -123,7 +123,7 @@
         return bin;
       } finally {
         if (close) {
-          rw.release();
+          rw.close();
         }
       }
     } finally {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/GetRelated.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/GetRelated.java
index 81debde..1a6b515 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/GetRelated.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/GetRelated.java
@@ -81,7 +81,7 @@
         info.changes = walk(rsrc, rw, ref);
         return info;
       } finally {
-        rw.release();
+        rw.close();
       }
     } finally {
       git.close();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/IncludedIn.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/IncludedIn.java
index 8df6957..e2c8c65 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/IncludedIn.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/IncludedIn.java
@@ -68,7 +68,7 @@
         }
         return new IncludedInInfo(IncludedInResolver.resolve(r, rw, rev));
       } finally {
-        rw.release();
+        rw.close();
       }
     } finally {
       r.close();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java
index fb8c4e4..a4de1dc 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java
@@ -201,7 +201,7 @@
           "Cannot merge test change %d", change.getId().get()), e);
       return false;
     } finally {
-      rw.release();
+      rw.close();
     }
   }
 
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java b/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java
index 286d178..f87619e 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java
@@ -139,10 +139,10 @@
       throw new IOException(e.getMessage());
     } finally {
       if (inserter != null) {
-        inserter.release();
+        inserter.close();
       }
       if (rw != null) {
-        rw.release();
+        rw.close();
       }
       if (git != null) {
         git.close();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/BanCommit.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/BanCommit.java
index 329e7e0..2276d20 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/BanCommit.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/BanCommit.java
@@ -59,24 +59,24 @@
   */
   public static NoteMap loadRejectCommitsMap(Repository repo)
       throws IOException {
-   try {
-     Ref ref = repo.getRef(RefNames.REFS_REJECT_COMMITS);
-     if (ref == null) {
-       return NoteMap.newEmptyMap();
-     }
+    try {
+      Ref ref = repo.getRef(RefNames.REFS_REJECT_COMMITS);
+      if (ref == null) {
+        return NoteMap.newEmptyMap();
+      }
 
-     RevWalk rw = new RevWalk(repo);
-     try {
-       RevCommit map = rw.parseCommit(ref.getObjectId());
-       return NoteMap.read(rw.getObjectReader(), map);
-     } finally {
-       rw.release();
-     }
-   } catch (IOException badMap) {
-     throw new IOException("Cannot load "
-         + RefNames.REFS_REJECT_COMMITS, badMap);
-   }
- }
+      RevWalk rw = new RevWalk(repo);
+      try {
+        RevCommit map = rw.parseCommit(ref.getObjectId());
+        return NoteMap.read(rw.getObjectReader(), map);
+      } finally {
+        rw.close();
+      }
+    } catch (IOException badMap) {
+      throw new IOException("Cannot load " + RefNames.REFS_REJECT_COMMITS,
+          badMap);
+    }
+  }
 
   private final Provider<IdentifiedUser> currentUser;
   private final GitRepositoryManager repoManager;
@@ -139,8 +139,8 @@
         }
         return result;
       } finally {
-        revWalk.release();
-        inserter.release();
+        revWalk.close();
+        inserter.close();
       }
     } finally {
       repo.close();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java
index abb3be6..da72009 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java
@@ -297,10 +297,10 @@
       throw new MergeException("Cannot query the database", e);
     } finally {
       if (inserter != null) {
-        inserter.release();
+        inserter.close();
       }
       if (rw != null) {
-        rw.release();
+        rw.close();
       }
       if (repo != null) {
         repo.close();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeUtil.java
index b9624fe..a005742 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeUtil.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeUtil.java
@@ -394,7 +394,7 @@
       return false;
     }
 
-    final ThreeWayMerger m = newThreeWayMerger(repo, createDryRunInserter());
+    final ThreeWayMerger m = newThreeWayMerger(repo, createDryRunInserter(repo));
     try {
       return m.merge(new AnyObjectId[] {mergeTip, toMerge});
     } catch (NoMergeBaseException e) {
@@ -441,7 +441,7 @@
       //
       try {
         final ThreeWayMerger m =
-            newThreeWayMerger(repo, createDryRunInserter());
+            newThreeWayMerger(repo, createDryRunInserter(repo));
         m.setBase(toMerge.getParent(0));
         return m.merge(mergeTip, toMerge);
       } catch (IOException e) {
@@ -468,28 +468,21 @@
     }
   }
 
-  public static ObjectInserter createDryRunInserter() {
-    return new ObjectInserter() {
+  public static ObjectInserter createDryRunInserter(Repository db) {
+    final ObjectInserter delegate = db.newObjectInserter();
+    return new ObjectInserter.Filter() {
       @Override
-      public ObjectId insert(int objectType, long length, InputStream in)
-          throws IOException {
-        return idFor(objectType, length, in);
+      protected ObjectInserter delegate() {
+        return delegate;
       }
-
       @Override
       public PackParser newPackParser(InputStream in) throws IOException {
         throw new UnsupportedOperationException();
       }
-
       @Override
       public void flush() throws IOException {
         // Do nothing.
       }
-
-      @Override
-      public void release() {
-        // Do nothing.
-      }
     };
   }
 
@@ -668,7 +661,7 @@
       }
 
       @Override
-      public void release() {
+      public void close() {
       }
     });
     return (ThreeWayMerger) m;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/NotesBranchUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/NotesBranchUtil.java
index f1b0a78..fb96a6b 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/NotesBranchUtil.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/NotesBranchUtil.java
@@ -153,8 +153,8 @@
       }
       updateRef(notesBranch);
     } finally {
-      revWalk.release();
-      reader.release();
+      revWalk.close();
+      reader.close();
     }
   }
 
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmoduleOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmoduleOp.java
index e4e059b..b91eadc 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmoduleOp.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmoduleOp.java
@@ -380,7 +380,7 @@
             + subscriber.get(), e);
     } finally {
       if (recRw != null) {
-        recRw.release();
+        recRw.close();
       }
       if (pdb != null) {
         pdb.close();
@@ -400,7 +400,7 @@
       b.finish();
       return dc;
     } finally {
-      rw.release();
+      rw.close();
     }
   }
 
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/TagSet.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/TagSet.java
index 3eb9273..99c7bdc 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/TagSet.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/TagSet.java
@@ -147,7 +147,7 @@
       }
     } finally {
       if (rw != null) {
-        rw.release();
+        rw.close();
       }
     }
   }
@@ -189,7 +189,7 @@
     } catch (IOException e) {
       log.warn("Error building tags for repository " + projectName, e);
     } finally {
-      rw.release();
+      rw.close();
     }
   }
 
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/VersionedMetaData.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/VersionedMetaData.java
index c665d67..e531f5f 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/VersionedMetaData.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/VersionedMetaData.java
@@ -117,7 +117,7 @@
       revision = id != null ? new RevWalk(reader).parseCommit(id) : null;
       onLoad();
     } finally {
-      reader.release();
+      reader.close();
       reader = null;
     }
   }
@@ -299,12 +299,12 @@
         newTree = null;
 
         if (inserter != null) {
-          inserter.release();
+          inserter.close();
           inserter = null;
         }
 
         if (reader != null) {
-          reader.release();
+          reader.close();
           reader = null;
         }
       }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeBatchIndexer.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeBatchIndexer.java
index 5ee240b..aeacac5 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeBatchIndexer.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeBatchIndexer.java
@@ -310,7 +310,7 @@
           getPathsAndIndex(id);
         }
       } finally {
-        walk.release();
+        walk.close();
       }
       return null;
     }
@@ -344,7 +344,7 @@
             }
           }
         } finally {
-          df.release();
+          df.close();
         }
       } catch (Exception e) {
         fail("Failed to index commit " + b.name(), false, e);
@@ -389,7 +389,7 @@
         oi.flush();
         return id;
       } finally {
-        oi.release();
+        oi.close();
       }
     }
 
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/ChangeEmail.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/ChangeEmail.java
index 4e51a73..8e2dc03 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/ChangeEmail.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/ChangeEmail.java
@@ -407,7 +407,7 @@
       log.error("Cannot format patch", e);
       return "";
     } finally {
-      fmt.release();
+      fmt.close();
       git.close();
     }
   }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/PatchSetNotificationSender.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/PatchSetNotificationSender.java
index 93fc063..8d35165 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/PatchSetNotificationSender.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/PatchSetNotificationSender.java
@@ -94,7 +94,7 @@
         commit = revWalk.parseCommit(ObjectId.fromString(
             updatedPatchSet.getRevision().get()));
       } finally {
-        revWalk.release();
+        revWalk.close();
       }
       final PatchSetInfo info = patchSetInfoFactory.get(commit, updatedPatchSet.getId());
       final List<FooterLine> footerLines = commit.getFooterLines();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotes.java b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotes.java
index 286bf4ad..dbeebed 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotes.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotes.java
@@ -435,7 +435,7 @@
       this.reviewers = reviewers.build();
       submitRecords = ImmutableList.copyOf(parser.submitRecords);
     } finally {
-      walk.release();
+      walk.close();
     }
   }
 
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchFile.java b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchFile.java
index 81f4352..c65262f 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchFile.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchFile.java
@@ -75,7 +75,7 @@
         bTree = bCommit.getTree();
       }
     } finally {
-      reader.release();
+      reader.close();
     }
   }
 
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListLoader.java b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListLoader.java
index 744c379..ea8f191 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListLoader.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListLoader.java
@@ -165,7 +165,7 @@
       return new PatchList(a, b, againstParent,
           entries.toArray(new PatchListEntry[entries.size()]));
     } finally {
-      reader.release();
+      reader.close();
     }
   }
 
@@ -281,7 +281,7 @@
         }
 
         @Override
-        public void release() {
+        public void close() {
         }
       });
 
@@ -319,7 +319,7 @@
         Map<String, ObjectId> resolved = new HashMap<String, ObjectId>();
         for (Map.Entry<String, MergeResult<? extends Sequence>> entry : r.entrySet()) {
           MergeResult<? extends Sequence> p = entry.getValue();
-          TemporaryBuffer buf = new TemporaryBuffer.LocalFile(10 * 1024 * 1024);
+          TemporaryBuffer buf = new TemporaryBuffer.LocalFile(null, 10 * 1024 * 1024);
           try {
             fmt.formatMerge(buf, p, "BASE", oursName, theirsName, "UTF-8");
             buf.close();
@@ -381,7 +381,7 @@
       }
       ins.flush();
     } finally {
-      ins.release();
+      ins.close();
     }
 
     if (save) {
@@ -400,7 +400,7 @@
       oi.flush();
       return id;
     } finally {
-      oi.release();
+      oi.close();
     }
   }
 }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchScriptBuilder.java b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchScriptBuilder.java
index 0db7dee..d0fb7b1 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchScriptBuilder.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchScriptBuilder.java
@@ -119,7 +119,7 @@
     try {
       return build(content, comments, history);
     } finally {
-      reader.release();
+      reader.close();
     }
   }
 
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchSetInfoFactory.java b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchSetInfoFactory.java
index 8165bf2..5180854 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchSetInfoFactory.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchSetInfoFactory.java
@@ -94,7 +94,7 @@
         info.setParents(toParentInfos(src.getParents(), rw));
         return info;
       } finally {
-        rw.release();
+        rw.close();
       }
     } catch (IOException e) {
       throw new PatchSetInfoNotAvailableException(e);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/GetHead.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/GetHead.java
index af7559a..623b8c2 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/project/GetHead.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/GetHead.java
@@ -69,7 +69,7 @@
           }
           throw new AuthException("not allowed to see HEAD");
         } finally {
-          rw.release();
+          rw.close();
         }
       }
       throw new ResourceNotFoundException(Constants.HEAD);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/ListDashboards.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/ListDashboards.java
index fbfcc8f..658cf13 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/project/ListDashboards.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/ListDashboards.java
@@ -100,7 +100,7 @@
         }
         return all;
       } finally {
-        rw.release();
+        rw.close();
       }
     } finally {
       git.close();
@@ -134,7 +134,7 @@
         }
       }
     } finally {
-      tw.release();
+      tw.close();
     }
     return list;
   }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/PerformCreateProject.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/PerformCreateProject.java
index ca006de..68f868f 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/project/PerformCreateProject.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/PerformCreateProject.java
@@ -301,7 +301,7 @@
               + createProjectArgs.getProjectName(), e);
       throw e;
     } finally {
-      oi.release();
+      oi.close();
     }
   }
 }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java
index 333c343..87d4564 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java
@@ -441,7 +441,7 @@
         commitMessage = c.getFullMessage();
         commitFooters = c.getFooterLines();
       } finally {
-        walk.release();
+        walk.close();
       }
     } finally {
       repo.close();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ConflictsPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ConflictsPredicate.java
index ee6587d..b1f8406 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ConflictsPredicate.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ConflictsPredicate.java
@@ -138,7 +138,7 @@
               } catch (NoSuchProjectException e) {
                 throw new IllegalStateException(e);
               } finally {
-                rw.release();
+                rw.close();
               }
             } finally {
               repo.close();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RevWalkPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RevWalkPredicate.java
index fd57a44..23bbb12 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RevWalkPredicate.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RevWalkPredicate.java
@@ -109,7 +109,7 @@
         try {
           return match(repo, rw, args);
         } finally {
-          rw.release();
+          rw.close();
         }
       } finally {
         repo.close();
diff --git a/gerrit-server/src/main/java/gerrit/PRED_commit_edits_2.java b/gerrit-server/src/main/java/gerrit/PRED_commit_edits_2.java
index 2c7949c..ab63207 100644
--- a/gerrit-server/src/main/java/gerrit/PRED_commit_edits_2.java
+++ b/gerrit-server/src/main/java/gerrit/PRED_commit_edits_2.java
@@ -130,7 +130,7 @@
     } catch (IOException err) {
       throw new JavaException(this, 1, err);
     } finally {
-      reader.release();
+      reader.close();
     }
 
     return engine.fail();
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/change/IncludedInResolverTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/change/IncludedInResolverTest.java
index ae58819..9c45267 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/change/IncludedInResolverTest.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/change/IncludedInResolverTest.java
@@ -127,7 +127,7 @@
 
   @After
   public void tearDown() throws Exception {
-    revWalk.release();
+    revWalk.close();
     super.tearDown();
   }
 
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java
index f2ad057..fae6fad 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java
@@ -208,7 +208,7 @@
       assertEquals(author.getWhen(), committer.getWhen());
       assertEquals(author.getTimeZone(), committer.getTimeZone());
     } finally {
-      walk.release();
+      walk.close();
     }
   }
 
@@ -229,7 +229,7 @@
           + "Label: -Code-Review\n",
           commit.getFullMessage());
     } finally {
-      walk.release();
+      walk.close();
     }
   }
 
@@ -277,7 +277,7 @@
       assertEquals(author.getWhen(), committer.getWhen());
       assertEquals(author.getTimeZone(), committer.getTimeZone());
     } finally {
-      walk.release();
+      walk.close();
     }
   }
 
@@ -302,7 +302,7 @@
           + "Submitted-with: RULE_ERROR Problem with patch set: 1\n",
           commit.getFullMessage());
     } finally {
-      walk.release();
+      walk.close();
     }
   }
 
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/tools/hooks/CommitMsgHookTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/tools/hooks/CommitMsgHookTest.java
index 17fe068..8d41e0a 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/tools/hooks/CommitMsgHookTest.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/tools/hooks/CommitMsgHookTest.java
@@ -431,7 +431,7 @@
       oi.flush();
       return e;
     } finally {
-      oi.release();
+      oi.close();
     }
   }
 
@@ -457,7 +457,7 @@
           fail(Constants.HEAD + " did not change: " + ref.getResult());
       }
     } finally {
-      oi.release();
+      oi.close();
     }
   }
 }
diff --git a/lib/jgit/BUCK b/lib/jgit/BUCK
index 40cf6e8..b6dd17d 100644
--- a/lib/jgit/BUCK
+++ b/lib/jgit/BUCK
@@ -1,12 +1,13 @@
 include_defs('//lib/maven.defs')
 
-VERS = '3.4.2.201412180340-r'
+REPO = MAVEN_CENTRAL # Leave here even if set to MAVEN_CENTRAL.
+VERS = '4.5.4.201711221230-r'
 
 maven_jar(
   name = 'jgit',
   id = 'org.eclipse.jgit:org.eclipse.jgit:' + VERS,
-  bin_sha1 = 'cc501e3db3f5a00713382753d7260ecf2d1fe7fa',
-  src_sha1 = '19c71b70882b83f4e15a888ff8ef4f2e0507efa0',
+  bin_sha1 = 'b30f322c7d441260f4fa454ce5de65cf7e961274',
+  src_sha1 = '459f648f8bbf10e1aa0b122d4f9919e1779922e9',
   license = 'jgit',
   unsign = True,
   deps = [':ewah'],
@@ -20,7 +21,7 @@
 maven_jar(
   name = 'jgit-servlet',
   id = 'org.eclipse.jgit:org.eclipse.jgit.http.server:' + VERS,
-  sha1 = '9965a9cbb9673572848dea6d6eecf51d3e7d360c',
+  sha1 = '264fac29b6007146127156113ed3d4e0aa922b39',
   license = 'jgit',
   deps = [':jgit'],
   unsign = True,
@@ -33,7 +34,7 @@
 maven_jar(
   name = 'jgit-archive',
   id = 'org.eclipse.jgit:org.eclipse.jgit.archive:' + VERS,
-  sha1 = '4232b91d3f6e77aff86894170fdfb68d455906a8',
+  sha1 = '6b0b919ee42bf8276193c3c03581634bc3aa7e18',
   license = 'jgit',
   deps = [':jgit',
     '//lib/commons:compress',
@@ -49,7 +50,7 @@
 maven_jar(
   name = 'junit',
   id = 'org.eclipse.jgit:org.eclipse.jgit.junit:' + VERS,
-  sha1 = '8e69847e02cea0898c31e3a3066c8b4416938593',
+  sha1 = '58ca0a0fba72f2db6e6b27bd464dc44a946a617c',
   license = 'DO_NOT_DISTRIBUTE',
   unsign = True,
   deps = [':jgit'],
diff --git a/plugins/reviewnotes b/plugins/reviewnotes
index b544447..0fc4b12 160000
--- a/plugins/reviewnotes
+++ b/plugins/reviewnotes
@@ -1 +1 @@
-Subproject commit b544447649d9ee3b3f78a6a1a7f839cb6a361292
+Subproject commit 0fc4b128d290b20c4ef962d30529faae6e89a169