Merge branch 'stable-2.14'

* stable-2.14:
  Serve PolyGerrit index.html from a Soy template
  Don't leak ObjectReaders created from ObjectInserters
  Upgrade JGit to 4.6.1.201703071140-r.169-g61e336475

Change-Id: I88e483c54d50e540829b3cc6e9c139a59f05329b
This commit is contained in:
David Pursehouse
2017-04-04 09:00:52 +09:00
9 changed files with 44 additions and 25 deletions

View File

@@ -73,6 +73,7 @@ import org.eclipse.jgit.lib.Config;
import org.eclipse.jgit.lib.NullProgressMonitor;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.ObjectInserter;
import org.eclipse.jgit.lib.ObjectReader;
import org.eclipse.jgit.lib.ProgressMonitor;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.RefDatabase;
@@ -271,7 +272,8 @@ public class RebuildNoteDb extends SiteProgram {
pm.beginTask(FormatUtil.elide(project.get(), 50), allChanges.get(project).size());
try (NoteDbUpdateManager manager = updateManagerFactory.create(project);
ObjectInserter allUsersInserter = allUsersRepo.newObjectInserter();
RevWalk allUsersRw = new RevWalk(allUsersInserter.newReader())) {
ObjectReader reader = allUsersInserter.newReader();
RevWalk allUsersRw = new RevWalk(reader)) {
manager.setAllUsersRepo(
allUsersRepo, allUsersRw, allUsersInserter, new ChainedReceiveCommands(allUsersRepo));
for (Change.Id changeId : allChanges.get(project)) {

View File

@@ -61,6 +61,7 @@ import java.util.List;
import java.util.TimeZone;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.ObjectInserter;
import org.eclipse.jgit.lib.ObjectReader;
import org.eclipse.jgit.lib.PersonIdent;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
@@ -153,7 +154,8 @@ public class CherryPickChange {
// created later on, to ensure the cherry-picked commit is flushed
// before patch sets are updated.
ObjectInserter oi = git.newObjectInserter();
CodeReviewRevWalk revWalk = CodeReviewCommit.newRevWalk(oi.newReader())) {
ObjectReader reader = oi.newReader();
CodeReviewRevWalk revWalk = CodeReviewCommit.newRevWalk(reader)) {
Ref destRef = git.getRefDatabase().exactRef(targetRef);
if (destRef == null) {
throw new InvalidChangeOperationException(

View File

@@ -76,6 +76,7 @@ import org.eclipse.jgit.lib.CommitBuilder;
import org.eclipse.jgit.lib.Config;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.ObjectInserter;
import org.eclipse.jgit.lib.ObjectReader;
import org.eclipse.jgit.lib.PersonIdent;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
@@ -184,7 +185,8 @@ public class CreateChange implements RestModifyView<TopLevelResource, ChangeInpu
Project.NameKey project = rsrc.getNameKey();
try (Repository git = gitManager.openRepository(project);
ObjectInserter oi = git.newObjectInserter();
RevWalk rw = new RevWalk(oi.newReader())) {
ObjectReader reader = oi.newReader();
RevWalk rw = new RevWalk(reader)) {
ObjectId parentCommit;
List<String> groups;
if (input.baseChange != null) {

View File

@@ -56,6 +56,7 @@ import java.sql.Timestamp;
import java.util.TimeZone;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.ObjectInserter;
import org.eclipse.jgit.lib.ObjectReader;
import org.eclipse.jgit.lib.PersonIdent;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
@@ -126,7 +127,8 @@ public class CreateMergePatchSet implements RestModifyView<ChangeResource, Merge
Branch.NameKey dest = change.getDest();
try (Repository git = gitManager.openRepository(project);
ObjectInserter oi = git.newObjectInserter();
RevWalk rw = new RevWalk(oi.newReader())) {
ObjectReader reader = oi.newReader();
RevWalk rw = new RevWalk(reader)) {
RevCommit sourceCommit = MergeUtil.resolveCommit(git, rw, merge.source);
if (!projectControl.canReadCommit(db.get(), git, sourceCommit)) {

View File

@@ -41,6 +41,7 @@ import java.util.concurrent.TimeUnit;
import org.eclipse.jgit.lib.Config;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.ObjectInserter;
import org.eclipse.jgit.lib.ObjectReader;
import org.eclipse.jgit.lib.PersonIdent;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
@@ -89,7 +90,8 @@ public class GetBlame implements RestReadView<FileResource> {
Project.NameKey project = resource.getRevision().getChange().getProject();
try (Repository repository = repoManager.openRepository(project);
ObjectInserter ins = repository.newObjectInserter();
RevWalk revWalk = new RevWalk(ins.newReader())) {
ObjectReader reader = ins.newReader();
RevWalk revWalk = new RevWalk(reader)) {
String refName =
resource.getRevision().getEdit().isPresent()
? resource.getRevision().getEdit().get().getRefName()

View File

@@ -178,6 +178,7 @@ public class NoteDbUpdateManager implements AutoCloseable {
@Override
public void close() {
rw.getObjectReader().close();
rw.close();
if (close) {
if (finalIns != null) {
@@ -295,10 +296,18 @@ public class NoteDbUpdateManager implements AutoCloseable {
}
private OpenRepo openRepo(Project.NameKey p) throws IOException {
Repository repo = repoManager.openRepository(p);
ObjectInserter ins = repo.newObjectInserter();
return new OpenRepo(
repo, new RevWalk(ins.newReader()), ins, new ChainedReceiveCommands(repo), true);
Repository repo = repoManager.openRepository(p); // Closed by OpenRepo#close.
ObjectInserter ins = repo.newObjectInserter(); // Closed by OpenRepo#close.
ObjectReader reader = ins.newReader(); // Not closed by OpenRepo#close.
try (RevWalk rw = new RevWalk(reader)) { // Doesn't escape OpenRepo constructor.
return new OpenRepo(repo, rw, ins, new ChainedReceiveCommands(repo), true) {
@Override
public void close() {
reader.close();
super.close();
}
};
}
}
private boolean isEmpty() {

View File

@@ -234,6 +234,7 @@ public abstract class BatchUpdate implements AutoCloseable {
@Override
public void close() {
if (closeRepo) {
revWalk.getObjectReader().close();
revWalk.close();
inserter.close();
repo.close();

View File

@@ -79,6 +79,7 @@ import org.eclipse.jgit.lib.BatchRefUpdate;
import org.eclipse.jgit.lib.Config;
import org.eclipse.jgit.lib.NullProgressMonitor;
import org.eclipse.jgit.lib.ObjectInserter;
import org.eclipse.jgit.lib.ObjectReader;
import org.eclipse.jgit.lib.PersonIdent;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevWalk;
@@ -401,16 +402,14 @@ class ReviewDbBatchUpdate extends BatchUpdate {
}
if (onSubmitValidators != null && commands != null && !commands.isEmpty()) {
// Validation of refs has to take place here and not at the beginning
// executeRefUpdates. Otherwise failing validation in a second
// BatchUpdate object will happen *after* first object's
// executeRefUpdates has finished, hence after first repo's refs have
// been updated, which is too late.
onSubmitValidators.validate(
project,
new ReadOnlyRepository(getRepository()),
ctx.getInserter().newReader(),
commands.getCommands());
try (ObjectReader reader = ctx.getInserter().newReader()) {
// Validation of refs has to take place here and not at the beginning
// executeRefUpdates. Otherwise failing validation in a second BatchUpdate object will
// happen *after* first object's executeRefUpdates has finished, hence after first repo's
// refs have been updated, which is too late.
onSubmitValidators.validate(
project, new ReadOnlyRepository(getRepository()), reader, commands.getCommands());
}
}
if (inserter != null) {

View File

@@ -1,6 +1,6 @@
load("//tools/bzl:maven_jar.bzl", "GERRIT", "MAVEN_LOCAL", "MAVEN_CENTRAL", "maven_jar")
_JGIT_VERS = "4.6.1.201703071140-r.149-g61f830d3a"
_JGIT_VERS = "4.6.1.201703071140-r.169-g61e336475"
_DOC_VERS = "4.6.0.201612231935-r" # Set to _JGIT_VERS unless using a snapshot
@@ -26,28 +26,28 @@ def jgit_maven_repos():
name = "jgit_lib",
artifact = "org.eclipse.jgit:org.eclipse.jgit:" + _JGIT_VERS,
repository = _JGIT_REPO,
sha1 = "dbb390b827b968558342e882e0c9b90e1ed037a2",
src_sha1 = "05d8939d08fe75a080fbf84f3163df5127950985",
sha1 = "ae2d80dfa58eff4228425eb49cd22fc3190637b9",
src_sha1 = "693c525ef00a5e1ab918d90aff9893a19ebf43dd",
unsign = True,
)
maven_jar(
name = "jgit_servlet",
artifact = "org.eclipse.jgit:org.eclipse.jgit.http.server:" + _JGIT_VERS,
repository = _JGIT_REPO,
sha1 = "136026aa28b065d04194cadcb3371b5a3f6c7235",
sha1 = "7610fde96610fbc17782ed383a721c4168bfd760",
unsign = True,
)
maven_jar(
name = "jgit_archive",
artifact = "org.eclipse.jgit:org.eclipse.jgit.archive:" + _JGIT_VERS,
repository = _JGIT_REPO,
sha1 = "8be5fa1000cf66ff3deae257bb29870c93f83363",
sha1 = "c5c6ecac620a62a1f4115dcff63d7baa257582f1",
)
maven_jar(
name = "jgit_junit",
artifact = "org.eclipse.jgit:org.eclipse.jgit.junit:" + _JGIT_VERS,
repository = _JGIT_REPO,
sha1 = "d6a6c49b137a7f1a30ec55a228826d9146c0eba4",
sha1 = "5ed3263792c677e3e5a594d235f8360c38433324",
unsign = True,
)