InlineEdit: Extend change edit container with commit and patch set
Change-Id: Ic75adf1f6d98e052f1f06ea28644e17f081cb8f8
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/edit/ChangeEdit.java b/gerrit-server/src/main/java/com/google/gerrit/server/edit/ChangeEdit.java
index c3b4185..6f8b3a0 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/edit/ChangeEdit.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/edit/ChangeEdit.java
@@ -17,11 +17,13 @@
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.gerrit.reviewdb.client.Change;
+import com.google.gerrit.reviewdb.client.PatchSet;
import com.google.gerrit.reviewdb.client.RevId;
import com.google.gerrit.server.IdentifiedUser;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Ref;
+import org.eclipse.jgit.revwalk.RevCommit;
/**
* A single user's edit for a change.
@@ -34,14 +36,21 @@
private final IdentifiedUser user;
private final Change change;
private final Ref ref;
+ private final RevCommit editCommit;
+ private final PatchSet basePatchSet;
- public ChangeEdit(IdentifiedUser user, Change change, Ref ref) {
+ public ChangeEdit(IdentifiedUser user, Change change, Ref ref,
+ RevCommit editCommit, PatchSet basePatchSet) {
checkNotNull(user);
checkNotNull(change);
checkNotNull(ref);
+ checkNotNull(editCommit);
+ checkNotNull(basePatchSet);
this.user = user;
this.change = change;
this.ref = ref;
+ this.editCommit = editCommit;
+ this.basePatchSet = basePatchSet;
}
public Change getChange() {
@@ -63,4 +72,12 @@
public String getRefName() {
return ChangeEditUtil.editRefName(user.getAccountId(), change.getId());
}
+
+ public RevCommit getEditCommit() {
+ return editCommit;
+ }
+
+ public PatchSet getBasePatchSet() {
+ return basePatchSet;
+ }
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/edit/ChangeEditModifier.java b/gerrit-server/src/main/java/com/google/gerrit/server/edit/ChangeEditModifier.java
index 2284087..914ccdb 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/edit/ChangeEditModifier.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/edit/ChangeEditModifier.java
@@ -72,17 +72,14 @@
private final TimeZone tz;
private final GitRepositoryManager gitManager;
private final Provider<CurrentUser> currentUser;
- private final ChangeEditUtil editUtil;
@Inject
ChangeEditModifier(@GerritPersonIdent PersonIdent gerritIdent,
GitRepositoryManager gitManager,
Provider<ReviewDb> dbProvider,
- Provider<CurrentUser> currentUser,
- ChangeEditUtil editUtil) {
+ Provider<CurrentUser> currentUser) {
this.gitManager = gitManager;
this.currentUser = currentUser;
- this.editUtil = editUtil;
this.tz = gerritIdent.getTimeZone();
}
@@ -193,7 +190,7 @@
try {
String refName = edit.getRefName();
RevCommit prevEdit = rw.parseCommit(edit.getRef().getObjectId());
- PatchSet basePs = editUtil.getBasePatchSet(edit, prevEdit);
+ PatchSet basePs = edit.getBasePatchSet();
RevCommit base = rw.parseCommit(ObjectId.fromString(
basePs.getRevision().get()));
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/edit/ChangeEditUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/edit/ChangeEditUtil.java
index cf0785f..ba50776 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/edit/ChangeEditUtil.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/edit/ChangeEditUtil.java
@@ -86,19 +86,26 @@
* @throws IOException
*/
public Optional<ChangeEdit> byChange(Change change)
- throws AuthException, IOException {
+ throws AuthException, IOException, InvalidChangeOperationException {
if (!user.get().isIdentifiedUser()) {
throw new AuthException("Authentication required");
}
Repository repo = gitManager.openRepository(change.getProject());
try {
- IdentifiedUser identifiedUser = (IdentifiedUser) user.get();
+ IdentifiedUser me = (IdentifiedUser) user.get();
Ref ref = repo.getRefDatabase().getRef(editRefName(
- identifiedUser.getAccountId(), change.getId()));
+ me.getAccountId(), change.getId()));
if (ref == null) {
return Optional.absent();
}
- return Optional.of(new ChangeEdit(identifiedUser, change, ref));
+ RevWalk rw = new RevWalk(repo);
+ try {
+ RevCommit commit = rw.parseCommit(ref.getObjectId());
+ PatchSet basePs = getBasePatchSet(change, commit);
+ return Optional.of(new ChangeEdit(me, change, ref, commit, basePs));
+ } finally {
+ rw.release();
+ }
} finally {
repo.close();
}
@@ -125,19 +132,16 @@
RevWalk rw = new RevWalk(repo);
ObjectInserter inserter = repo.newObjectInserter();
try {
- RevCommit editCommit = rw.parseCommit(edit.getRef().getObjectId());
- if (editCommit == null) {
- throw new NoSuchChangeException(change.getId());
- }
- PatchSet basePatchSet = getBasePatchSet(edit, editCommit);
+ PatchSet basePatchSet = edit.getBasePatchSet();
if (!basePatchSet.getId().equals(change.currentPatchSetId())) {
throw new ResourceConflictException(
"only edit for current patch set can be published");
}
insertPatchSet(edit, change, repo, rw, basePatchSet,
- squashEdit(repo, rw, inserter, editCommit, basePatchSet));
+ squashEdit(repo, rw, inserter, edit.getEditCommit(),
+ basePatchSet));
} finally {
inserter.release();
rw.release();
@@ -167,41 +171,7 @@
}
}
- /**
- * Retrieve base patch set the edit was created on.
- *
- * @param edit change edit to retrieve base patch set for
- * @return parent patch set of the edit
- * @throws IOException
- * @throws InvalidChangeOperationException
- */
- public PatchSet getBasePatchSet(ChangeEdit edit) throws IOException,
- InvalidChangeOperationException {
- Change change = edit.getChange();
- Repository repo = gitManager.openRepository(change.getProject());
- try {
- RevWalk rw = new RevWalk(repo);
- try {
- return getBasePatchSet(edit, rw.parseCommit(
- edit.getRef().getObjectId()));
- } finally {
- rw.release();
- }
- } finally {
- repo.close();
- }
- }
-
- /**
- * Retrieve base patch set the edit was created on.
- *
- * @param edit change edit to retrieve base patch set for
- * @param commit change edit commit
- * @return parent patch set of the edit
- * @throws IOException
- * @throws InvalidChangeOperationException
- */
- public PatchSet getBasePatchSet(ChangeEdit edit, RevCommit commit)
+ private PatchSet getBasePatchSet(Change change, RevCommit commit)
throws IOException, InvalidChangeOperationException {
if (commit.getParentCount() != 1) {
throw new InvalidChangeOperationException(
@@ -223,11 +193,11 @@
rev.abbreviate(8).name()));
}
PatchSet parentPatchSet = Iterables.getOnlyElement(r);
- if (!edit.getChange().getId().equals(
+ if (!change.getId().equals(
parentPatchSet.getId().getParentKey())) {
throw new InvalidChangeOperationException(String.format(
"different change edit ID %d and its parent patch set %d",
- edit.getChange().getId().get(),
+ change.getId().get(),
parentPatchSet.getId().getParentKey().get()));
}
return parentPatchSet;