Convert to new AutoCloseable instances coming in JGit 4.0
Repository, RevWalk, and friends have been converted to AutoCloseable. Use them in try-with-resources blocks in order to avoid warnings about unclosed resources or calls to deprecated release() methods. Where a larger rewrite might have been possible to reduce try/finally blocks, err on the side of keeping the same behavior. The proximate goal of this change was to eliminate all Eclipse warnings about deprecated method calls (namely release()) and leaked resources. Some of these warnings were in fact potential leaks; Eclipse finding such cases is a side benefit of having these classes implement AutoCloseable. However, this change certainly does not cover all cases where try-with-resources could have been used, where it was not causing a leak. Fixes all such warnings in plugin submodules as well. Change-Id: I5d151996ae012d0e8fdfa27cce8cf5e2bfc856a2
This commit is contained in:
committed by
David Pursehouse
parent
f4fff188ba
commit
7273df290a
@@ -26,6 +26,7 @@ import com.google.gerrit.reviewdb.client.Change;
|
||||
import com.google.gerrit.reviewdb.client.ChangeMessage;
|
||||
import com.google.gerrit.reviewdb.client.PatchSet;
|
||||
import com.google.gerrit.reviewdb.client.PatchSetAncestor;
|
||||
import com.google.gerrit.reviewdb.client.Project;
|
||||
import com.google.gerrit.reviewdb.client.RevId;
|
||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||
import com.google.gerrit.server.change.ChangeInserter;
|
||||
@@ -227,119 +228,107 @@ public class ChangeUtil {
|
||||
}
|
||||
Change changeToRevert = db.get().changes().get(changeId);
|
||||
|
||||
Repository git;
|
||||
try {
|
||||
git = gitManager.openRepository(ctl.getChange().getProject());
|
||||
Project.NameKey project = ctl.getChange().getProject();
|
||||
try (Repository git = gitManager.openRepository(project);
|
||||
RevWalk revWalk = new RevWalk(git)) {
|
||||
RevCommit commitToRevert =
|
||||
revWalk.parseCommit(ObjectId.fromString(patch.getRevision().get()));
|
||||
|
||||
PersonIdent authorIdent =
|
||||
user().newCommitterIdent(myIdent.getWhen(), myIdent.getTimeZone());
|
||||
|
||||
RevCommit parentToCommitToRevert = commitToRevert.getParent(0);
|
||||
revWalk.parseHeaders(parentToCommitToRevert);
|
||||
|
||||
CommitBuilder revertCommitBuilder = new CommitBuilder();
|
||||
revertCommitBuilder.addParentId(commitToRevert);
|
||||
revertCommitBuilder.setTreeId(parentToCommitToRevert.getTree());
|
||||
revertCommitBuilder.setAuthor(authorIdent);
|
||||
revertCommitBuilder.setCommitter(authorIdent);
|
||||
|
||||
if (message == null) {
|
||||
message = MessageFormat.format(
|
||||
ChangeMessages.get().revertChangeDefaultMessage,
|
||||
changeToRevert.getSubject(), patch.getRevision().get());
|
||||
}
|
||||
|
||||
ObjectId computedChangeId =
|
||||
ChangeIdUtil.computeChangeId(parentToCommitToRevert.getTree(),
|
||||
commitToRevert, authorIdent, myIdent, message);
|
||||
revertCommitBuilder.setMessage(
|
||||
ChangeIdUtil.insertId(message, computedChangeId, true));
|
||||
|
||||
RevCommit revertCommit;
|
||||
try (ObjectInserter oi = git.newObjectInserter()) {
|
||||
ObjectId id = oi.insert(revertCommitBuilder);
|
||||
oi.flush();
|
||||
revertCommit = revWalk.parseCommit(id);
|
||||
}
|
||||
|
||||
RefControl refControl = ctl.getRefControl();
|
||||
Change change = new Change(
|
||||
new Change.Key("I" + computedChangeId.name()),
|
||||
new Change.Id(db.get().nextChangeId()),
|
||||
user().getAccountId(),
|
||||
changeToRevert.getDest(),
|
||||
TimeUtil.nowTs());
|
||||
change.setTopic(changeToRevert.getTopic());
|
||||
ChangeInserter ins =
|
||||
changeInserterFactory.create(refControl.getProjectControl(),
|
||||
change, revertCommit);
|
||||
PatchSet ps = ins.getPatchSet();
|
||||
|
||||
String ref = refControl.getRefName();
|
||||
String cmdRef = MagicBranch.NEW_PUBLISH_CHANGE
|
||||
+ ref.substring(ref.lastIndexOf('/') + 1);
|
||||
CommitReceivedEvent commitReceivedEvent = new CommitReceivedEvent(
|
||||
new ReceiveCommand(ObjectId.zeroId(), revertCommit.getId(), cmdRef),
|
||||
refControl.getProjectControl().getProject(),
|
||||
refControl.getRefName(), revertCommit, user());
|
||||
|
||||
try {
|
||||
commitValidatorsFactory.create(refControl, sshInfo, git)
|
||||
.validateForGerritCommits(commitReceivedEvent);
|
||||
} catch (CommitValidationException e) {
|
||||
throw new InvalidChangeOperationException(e.getMessage());
|
||||
}
|
||||
|
||||
RefUpdate ru = git.updateRef(ps.getRefName());
|
||||
ru.setExpectedOldObjectId(ObjectId.zeroId());
|
||||
ru.setNewObjectId(revertCommit);
|
||||
ru.disableRefLog();
|
||||
if (ru.update(revWalk) != RefUpdate.Result.NEW) {
|
||||
throw new IOException(String.format(
|
||||
"Failed to create ref %s in %s: %s", ps.getRefName(),
|
||||
change.getDest().getParentKey().get(), ru.getResult()));
|
||||
}
|
||||
|
||||
ChangeMessage cmsg = new ChangeMessage(
|
||||
new ChangeMessage.Key(changeId, messageUUID(db.get())),
|
||||
user().getAccountId(), TimeUtil.nowTs(), patchSetId);
|
||||
StringBuilder msgBuf = new StringBuilder();
|
||||
msgBuf.append("Patch Set ").append(patchSetId.get()).append(": Reverted");
|
||||
msgBuf.append("\n\n");
|
||||
msgBuf.append("This patchset was reverted in change: ")
|
||||
.append(change.getKey().get());
|
||||
cmsg.setMessage(msgBuf.toString());
|
||||
|
||||
ins.setMessage(cmsg).insert();
|
||||
|
||||
try {
|
||||
RevertedSender cm = revertedSenderFactory.create(change);
|
||||
cm.setFrom(user().getAccountId());
|
||||
cm.setChangeMessage(cmsg);
|
||||
cm.send();
|
||||
} catch (Exception err) {
|
||||
log.error("Cannot send email for revert change " + change.getId(),
|
||||
err);
|
||||
}
|
||||
|
||||
return change.getId();
|
||||
} catch (RepositoryNotFoundException e) {
|
||||
throw new NoSuchChangeException(changeId, e);
|
||||
}
|
||||
try {
|
||||
RevWalk revWalk = new RevWalk(git);
|
||||
try {
|
||||
RevCommit commitToRevert =
|
||||
revWalk.parseCommit(ObjectId.fromString(patch.getRevision().get()));
|
||||
|
||||
PersonIdent authorIdent =
|
||||
user().newCommitterIdent(myIdent.getWhen(), myIdent.getTimeZone());
|
||||
|
||||
RevCommit parentToCommitToRevert = commitToRevert.getParent(0);
|
||||
revWalk.parseHeaders(parentToCommitToRevert);
|
||||
|
||||
CommitBuilder revertCommitBuilder = new CommitBuilder();
|
||||
revertCommitBuilder.addParentId(commitToRevert);
|
||||
revertCommitBuilder.setTreeId(parentToCommitToRevert.getTree());
|
||||
revertCommitBuilder.setAuthor(authorIdent);
|
||||
revertCommitBuilder.setCommitter(authorIdent);
|
||||
|
||||
if (message == null) {
|
||||
message = MessageFormat.format(
|
||||
ChangeMessages.get().revertChangeDefaultMessage,
|
||||
changeToRevert.getSubject(), patch.getRevision().get());
|
||||
}
|
||||
|
||||
ObjectId computedChangeId =
|
||||
ChangeIdUtil.computeChangeId(parentToCommitToRevert.getTree(),
|
||||
commitToRevert, authorIdent, myIdent, message);
|
||||
revertCommitBuilder.setMessage(
|
||||
ChangeIdUtil.insertId(message, computedChangeId, true));
|
||||
|
||||
RevCommit revertCommit;
|
||||
ObjectInserter oi = git.newObjectInserter();
|
||||
try {
|
||||
ObjectId id = oi.insert(revertCommitBuilder);
|
||||
oi.flush();
|
||||
revertCommit = revWalk.parseCommit(id);
|
||||
} finally {
|
||||
oi.release();
|
||||
}
|
||||
|
||||
RefControl refControl = ctl.getRefControl();
|
||||
Change change = new Change(
|
||||
new Change.Key("I" + computedChangeId.name()),
|
||||
new Change.Id(db.get().nextChangeId()),
|
||||
user().getAccountId(),
|
||||
changeToRevert.getDest(),
|
||||
TimeUtil.nowTs());
|
||||
change.setTopic(changeToRevert.getTopic());
|
||||
ChangeInserter ins =
|
||||
changeInserterFactory.create(refControl.getProjectControl(),
|
||||
change, revertCommit);
|
||||
PatchSet ps = ins.getPatchSet();
|
||||
|
||||
String ref = refControl.getRefName();
|
||||
String cmdRef = MagicBranch.NEW_PUBLISH_CHANGE
|
||||
+ ref.substring(ref.lastIndexOf('/') + 1);
|
||||
CommitReceivedEvent commitReceivedEvent = new CommitReceivedEvent(
|
||||
new ReceiveCommand(ObjectId.zeroId(), revertCommit.getId(), cmdRef),
|
||||
refControl.getProjectControl().getProject(),
|
||||
refControl.getRefName(), revertCommit, user());
|
||||
|
||||
try {
|
||||
commitValidatorsFactory.create(refControl, sshInfo, git)
|
||||
.validateForGerritCommits(commitReceivedEvent);
|
||||
} catch (CommitValidationException e) {
|
||||
throw new InvalidChangeOperationException(e.getMessage());
|
||||
}
|
||||
|
||||
RefUpdate ru = git.updateRef(ps.getRefName());
|
||||
ru.setExpectedOldObjectId(ObjectId.zeroId());
|
||||
ru.setNewObjectId(revertCommit);
|
||||
ru.disableRefLog();
|
||||
if (ru.update(revWalk) != RefUpdate.Result.NEW) {
|
||||
throw new IOException(String.format(
|
||||
"Failed to create ref %s in %s: %s", ps.getRefName(),
|
||||
change.getDest().getParentKey().get(), ru.getResult()));
|
||||
}
|
||||
|
||||
ChangeMessage cmsg = new ChangeMessage(
|
||||
new ChangeMessage.Key(changeId, messageUUID(db.get())),
|
||||
user().getAccountId(), TimeUtil.nowTs(), patchSetId);
|
||||
StringBuilder msgBuf = new StringBuilder();
|
||||
msgBuf.append("Patch Set ").append(patchSetId.get()).append(": Reverted");
|
||||
msgBuf.append("\n\n");
|
||||
msgBuf.append("This patchset was reverted in change: ")
|
||||
.append(change.getKey().get());
|
||||
cmsg.setMessage(msgBuf.toString());
|
||||
|
||||
ins.setMessage(cmsg).insert();
|
||||
|
||||
try {
|
||||
RevertedSender cm = revertedSenderFactory.create(change);
|
||||
cm.setFrom(user().getAccountId());
|
||||
cm.setChangeMessage(cmsg);
|
||||
cm.send();
|
||||
} catch (Exception err) {
|
||||
log.error("Cannot send email for revert change " + change.getId(),
|
||||
err);
|
||||
}
|
||||
|
||||
return change.getId();
|
||||
} finally {
|
||||
revWalk.release();
|
||||
}
|
||||
} finally {
|
||||
git.close();
|
||||
}
|
||||
}
|
||||
|
||||
public Change.Id editCommitMessage(ChangeControl ctl, PatchSet ps,
|
||||
@@ -354,68 +343,56 @@ public class ChangeUtil {
|
||||
"The commit message cannot be empty");
|
||||
}
|
||||
|
||||
Repository git;
|
||||
try {
|
||||
git = gitManager.openRepository(ctl.getChange().getProject());
|
||||
Project.NameKey project = ctl.getChange().getProject();
|
||||
try (Repository git = gitManager.openRepository(project);
|
||||
RevWalk revWalk = new RevWalk(git)) {
|
||||
RevCommit commit =
|
||||
revWalk.parseCommit(ObjectId.fromString(ps.getRevision()
|
||||
.get()));
|
||||
if (commit.getFullMessage().equals(message)) {
|
||||
throw new InvalidChangeOperationException(
|
||||
"New commit message cannot be same as existing commit message");
|
||||
}
|
||||
|
||||
Date now = myIdent.getWhen();
|
||||
PersonIdent authorIdent =
|
||||
user().newCommitterIdent(now, myIdent.getTimeZone());
|
||||
|
||||
CommitBuilder commitBuilder = new CommitBuilder();
|
||||
commitBuilder.setTreeId(commit.getTree());
|
||||
commitBuilder.setParentIds(commit.getParents());
|
||||
commitBuilder.setAuthor(commit.getAuthorIdent());
|
||||
commitBuilder.setCommitter(authorIdent);
|
||||
commitBuilder.setMessage(message);
|
||||
|
||||
RevCommit newCommit;
|
||||
try (ObjectInserter oi = git.newObjectInserter()) {
|
||||
ObjectId id = oi.insert(commitBuilder);
|
||||
oi.flush();
|
||||
newCommit = revWalk.parseCommit(id);
|
||||
}
|
||||
|
||||
PatchSet.Id id = nextPatchSetId(git, change.currentPatchSetId());
|
||||
PatchSet newPatchSet = new PatchSet(id);
|
||||
newPatchSet.setCreatedOn(new Timestamp(now.getTime()));
|
||||
newPatchSet.setUploader(user().getAccountId());
|
||||
newPatchSet.setRevision(new RevId(newCommit.name()));
|
||||
|
||||
String msg = "Patch Set " + newPatchSet.getPatchSetId()
|
||||
+ ": Commit message was updated";
|
||||
|
||||
change = patchSetInserterFactory
|
||||
.create(git, revWalk, ctl, newCommit)
|
||||
.setPatchSet(newPatchSet)
|
||||
.setMessage(msg)
|
||||
.setValidatePolicy(RECEIVE_COMMITS)
|
||||
.setDraft(ps.isDraft())
|
||||
.insert();
|
||||
|
||||
return change.getId();
|
||||
} catch (RepositoryNotFoundException e) {
|
||||
throw new NoSuchChangeException(changeId, e);
|
||||
}
|
||||
try {
|
||||
RevWalk revWalk = new RevWalk(git);
|
||||
try {
|
||||
RevCommit commit =
|
||||
revWalk.parseCommit(ObjectId.fromString(ps.getRevision()
|
||||
.get()));
|
||||
if (commit.getFullMessage().equals(message)) {
|
||||
throw new InvalidChangeOperationException(
|
||||
"New commit message cannot be same as existing commit message");
|
||||
}
|
||||
|
||||
Date now = myIdent.getWhen();
|
||||
PersonIdent authorIdent =
|
||||
user().newCommitterIdent(now, myIdent.getTimeZone());
|
||||
|
||||
CommitBuilder commitBuilder = new CommitBuilder();
|
||||
commitBuilder.setTreeId(commit.getTree());
|
||||
commitBuilder.setParentIds(commit.getParents());
|
||||
commitBuilder.setAuthor(commit.getAuthorIdent());
|
||||
commitBuilder.setCommitter(authorIdent);
|
||||
commitBuilder.setMessage(message);
|
||||
|
||||
RevCommit newCommit;
|
||||
ObjectInserter oi = git.newObjectInserter();
|
||||
try {
|
||||
ObjectId id = oi.insert(commitBuilder);
|
||||
oi.flush();
|
||||
newCommit = revWalk.parseCommit(id);
|
||||
} finally {
|
||||
oi.release();
|
||||
}
|
||||
|
||||
PatchSet.Id id = nextPatchSetId(git, change.currentPatchSetId());
|
||||
PatchSet newPatchSet = new PatchSet(id);
|
||||
newPatchSet.setCreatedOn(new Timestamp(now.getTime()));
|
||||
newPatchSet.setUploader(user().getAccountId());
|
||||
newPatchSet.setRevision(new RevId(newCommit.name()));
|
||||
|
||||
String msg = "Patch Set " + newPatchSet.getPatchSetId()
|
||||
+ ": Commit message was updated";
|
||||
|
||||
change = patchSetInserterFactory
|
||||
.create(git, revWalk, ctl, newCommit)
|
||||
.setPatchSet(newPatchSet)
|
||||
.setMessage(msg)
|
||||
.setValidatePolicy(RECEIVE_COMMITS)
|
||||
.setDraft(ps.isDraft())
|
||||
.insert();
|
||||
|
||||
return change.getId();
|
||||
} finally {
|
||||
revWalk.release();
|
||||
}
|
||||
} finally {
|
||||
git.close();
|
||||
}
|
||||
}
|
||||
|
||||
public String getMessage(Change change)
|
||||
@@ -427,25 +404,14 @@ public class ChangeUtil {
|
||||
throw new NoSuchChangeException(changeId);
|
||||
}
|
||||
|
||||
Repository git;
|
||||
try {
|
||||
git = gitManager.openRepository(change.getProject());
|
||||
try (Repository git = gitManager.openRepository(change.getProject());
|
||||
RevWalk revWalk = new RevWalk(git)) {
|
||||
RevCommit commit = revWalk.parseCommit(
|
||||
ObjectId.fromString(ps.getRevision().get()));
|
||||
return commit.getFullMessage();
|
||||
} catch (RepositoryNotFoundException e) {
|
||||
throw new NoSuchChangeException(changeId, e);
|
||||
}
|
||||
try {
|
||||
RevWalk revWalk = new RevWalk(git);
|
||||
try {
|
||||
RevCommit commit =
|
||||
revWalk.parseCommit(ObjectId.fromString(ps.getRevision()
|
||||
.get()));
|
||||
return commit.getFullMessage();
|
||||
} finally {
|
||||
revWalk.release();
|
||||
}
|
||||
} finally {
|
||||
git.close();
|
||||
}
|
||||
}
|
||||
|
||||
public void deleteDraftChange(Change change)
|
||||
|
||||
Reference in New Issue
Block a user