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 7e298aa0f6..298301d4ec 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 @@ -35,6 +35,7 @@ import java.util.Optional; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.eclipse.jgit.lib.ObjectId; /** * Exports a single version of a patch as a normal file download. @@ -126,7 +127,7 @@ public class CatServlet extends HttpServlet { try { Optional edit = changeEditUtil.byChange(control.getChange()); if (edit.isPresent()) { - revision = edit.get().getRevision().get(); + revision = ObjectId.toString(edit.get().getEditCommit()); } else { rsp.sendError(HttpServletResponse.SC_NOT_FOUND); return; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeEditResource.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeEditResource.java index 108e180bf8..1695d0c2fd 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeEditResource.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeEditResource.java @@ -16,8 +16,6 @@ package com.google.gerrit.server.change; import com.google.gerrit.extensions.restapi.RestResource; import com.google.gerrit.extensions.restapi.RestView; -import com.google.gerrit.reviewdb.client.Account; -import com.google.gerrit.server.IdentifiedUser; import com.google.gerrit.server.edit.ChangeEdit; import com.google.gerrit.server.project.ChangeControl; import com.google.inject.TypeLiteral; @@ -67,12 +65,4 @@ public class ChangeEditResource implements RestResource { public String getPath() { return path; } - - Account.Id getAccountId() { - return getUser().getAccountId(); - } - - IdentifiedUser getUser() { - return edit.getUser(); - } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeEdits.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeEdits.java index fbb2115c89..332c3c6da9 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeEdits.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeEdits.java @@ -229,7 +229,8 @@ public class ChangeEdits } try { editInfo.files = - fileInfoJson.toFileInfoMap(rsrc.getChange(), edit.get().getRevision(), basePatchSet); + fileInfoJson.toFileInfoMap( + rsrc.getChange(), edit.get().getEditCommit(), basePatchSet); } catch (PatchListNotAvailableException e) { throw new ResourceNotFoundException(e.getMessage()); } @@ -395,7 +396,7 @@ public class ChangeEdits rsrc.getControl().getProjectControl().getProjectState(), base ? ObjectId.fromString(edit.getBasePatchSet().getRevision().get()) - : ObjectId.fromString(edit.getRevision().get()), + : edit.getEditCommit(), rsrc.getPath())); } catch (ResourceNotFoundException rnfe) { return Response.none(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/FileInfoJson.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/FileInfoJson.java index 60a4daf263..b25b588bb5 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/FileInfoJson.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/FileInfoJson.java @@ -48,9 +48,14 @@ public class FileInfoJson { Map toFileInfoMap(Change change, RevId revision, @Nullable PatchSet base) throws PatchListNotAvailableException { + ObjectId objectId = ObjectId.fromString(revision.get()); + return toFileInfoMap(change, objectId, base); + } + + Map toFileInfoMap(Change change, ObjectId objectId, @Nullable PatchSet base) + throws PatchListNotAvailableException { ObjectId a = (base == null) ? null : ObjectId.fromString(base.getRevision().get()); - ObjectId b = ObjectId.fromString(revision.get()); - return toFileInfoMap(change, new PatchListKey(a, b, Whitespace.IGNORE_NONE)); + return toFileInfoMap(change, new PatchListKey(a, objectId, Whitespace.IGNORE_NONE)); } Map toFileInfoMap(Change change, RevId revision, int parent) diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/PublishChangeEdit.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/PublishChangeEdit.java index 0e72979565..3acb93b08e 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/PublishChangeEdit.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/PublishChangeEdit.java @@ -96,7 +96,8 @@ public class PublishChangeEdit if (in == null) { in = new PublishChangeEditInput(); } - editUtil.publish(edit.get(), in.notify, notifyUtil.resolveAccounts(in.notifyDetails)); + editUtil.publish( + rsrc.getControl(), edit.get(), in.notify, notifyUtil.resolveAccounts(in.notifyDetails)); return Response.none(); } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Revisions.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Revisions.java index a16f2f92cd..5ecb90428e 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Revisions.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Revisions.java @@ -37,6 +37,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Optional; +import org.eclipse.jgit.lib.ObjectId; @Singleton public class Revisions implements ChildCollection { @@ -143,8 +144,9 @@ public class Revisions implements ChildCollection edit = editUtil.byChange(change.getChange()); if (edit.isPresent()) { PatchSet ps = new PatchSet(new PatchSet.Id(change.getId(), 0)); - ps.setRevision(edit.get().getRevision()); - if (revid == null || edit.get().getRevision().equals(revid)) { + RevId editRevId = new RevId(ObjectId.toString(edit.get().getEditCommit())); + ps.setRevision(editRevId); + if (revid == null || editRevId.equals(revid)) { return Collections.singletonList(new RevisionResource(change, ps, edit)); } } 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 a6464a7461..e641abcd8e 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 @@ -18,11 +18,6 @@ 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.RefNames; -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; /** @@ -33,44 +28,25 @@ import org.eclipse.jgit.revwalk.RevCommit; * change number and P is the patch set number it is based on. */ public class ChangeEdit { - private final IdentifiedUser user; private final Change change; - private final Ref ref; + private final String editRefName; private final RevCommit editCommit; private final PatchSet basePatchSet; 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; + Change change, String editRefName, RevCommit editCommit, PatchSet basePatchSet) { + this.change = checkNotNull(change); + this.editRefName = checkNotNull(editRefName); + this.editCommit = checkNotNull(editCommit); + this.basePatchSet = checkNotNull(basePatchSet); } public Change getChange() { return change; } - public IdentifiedUser getUser() { - return user; - } - - public Ref getRef() { - return ref; - } - - public RevId getRevision() { - return new RevId(ObjectId.toString(ref.getObjectId())); - } - public String getRefName() { - return RefNames.refsEdit(user.getAccountId(), change.getId(), basePatchSet.getId()); + return editRefName; } public RevCommit getEditCommit() { 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 d5d973b10e..f3045e33ff 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 @@ -52,7 +52,6 @@ import org.eclipse.jgit.lib.NullProgressMonitor; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectInserter; import org.eclipse.jgit.lib.PersonIdent; -import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.RefUpdate; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.merge.MergeStrategy; @@ -531,9 +530,7 @@ public class ChangeEditModifier { reindex(change); RevCommit newEditCommit = lookupCommit(repository, newEditCommitId); - Ref ref = repository.getRefDatabase().exactRef(editRefName); - return new ChangeEdit( - currentUser.get().asIdentifiedUser(), change, ref, newEditCommit, basePatchSet); + return new ChangeEdit(change, editRefName, newEditCommit, basePatchSet); } private String getEditRefName(Change change, PatchSet basePatchSet) { @@ -551,11 +548,7 @@ public class ChangeEditModifier { RevCommit newEditCommit = lookupCommit(repository, newEditCommitId); return new ChangeEdit( - changeEdit.getUser(), - changeEdit.getChange(), - changeEdit.getRef(), - newEditCommit, - changeEdit.getBasePatchSet()); + changeEdit.getChange(), editRefName, newEditCommit, changeEdit.getBasePatchSet()); } private void updateReference( 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 0cfdeedda2..78352dc685 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 @@ -149,7 +149,7 @@ public class ChangeEditUtil { try (RevWalk rw = new RevWalk(repo)) { RevCommit commit = rw.parseCommit(ref.getObjectId()); PatchSet basePs = getBasePatchSet(ctl, ref); - return Optional.of(new ChangeEdit(u, change, ref, commit, basePs)); + return Optional.of(new ChangeEdit(change, ref.getName(), commit, basePs)); } } } @@ -157,6 +157,7 @@ public class ChangeEditUtil { /** * Promote change edit to patch set, by squashing the edit into its parent. * + * @param ctl the {@code ChangeControl} of the change to which the change edit belongs * @param edit change edit to publish * @param notify Notify handling that defines to whom email notifications should be sent after the * change edit is published. @@ -167,6 +168,7 @@ public class ChangeEditUtil { * @throws RestApiException */ public void publish( + ChangeControl ctl, final ChangeEdit edit, NotifyHandling notify, ListMultimap accountsToNotify) @@ -181,7 +183,6 @@ public class ChangeEditUtil { } RevCommit squashed = squashEdit(rw, oi, edit.getEditCommit(), basePatchSet); - ChangeControl ctl = changeControlFactory.controlFor(db.get(), change, edit.getUser()); PatchSet.Id psId = ChangeUtil.nextPatchSetId(repo, change.currentPatchSetId()); PatchSetInserter inserter = patchSetInserterFactory @@ -280,7 +281,7 @@ public class ChangeEditUtil { private static void deleteRef(Repository repo, ChangeEdit edit) throws IOException { String refName = edit.getRefName(); RefUpdate ru = repo.updateRef(refName, true); - ru.setExpectedOldObjectId(edit.getRef().getObjectId()); + ru.setExpectedOldObjectId(edit.getEditCommit()); ru.setForceUpdate(true); RefUpdate.Result result = ru.delete(); switch (result) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java index c0efac90c6..193d5b413b 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java @@ -2467,13 +2467,12 @@ public class ReceiveCommits { if (edit.get().getBasePatchSet().getId().equals(psId)) { // replace edit cmd = - new ReceiveCommand( - edit.get().getRef().getObjectId(), newCommitId, edit.get().getRefName()); + new ReceiveCommand(edit.get().getEditCommit(), newCommitId, edit.get().getRefName()); } else { // delete old edit ref on rebase prev = new ReceiveCommand( - edit.get().getRef().getObjectId(), ObjectId.zeroId(), edit.get().getRefName()); + edit.get().getEditCommit(), ObjectId.zeroId(), edit.get().getRefName()); createEditCommand(); } } else { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchScriptFactory.java b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchScriptFactory.java index 82c6150a64..9e80f385bb 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchScriptFactory.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchScriptFactory.java @@ -253,9 +253,7 @@ public class PatchScriptFactory implements Callable { return b; } - private ObjectId toObjectId(PatchSet ps) - throws NoSuchChangeException, AuthException, NoSuchChangeException, IOException, - OrmException { + private ObjectId toObjectId(PatchSet ps) throws AuthException, IOException, OrmException { if (ps.getId().get() == 0) { return getEditRev(); } @@ -271,11 +269,10 @@ public class PatchScriptFactory implements Callable { } } - private ObjectId getEditRev() - throws AuthException, NoSuchChangeException, IOException, OrmException { + private ObjectId getEditRev() throws AuthException, IOException, OrmException { edit = editReader.byChange(change); if (edit.isPresent()) { - return edit.get().getRef().getObjectId(); + return edit.get().getEditCommit(); } throw new NoSuchChangeException(change.getId()); }