summaryrefslogtreecommitdiffstats
path: root/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListEntry.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListEntry.java')
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListEntry.java373
1 files changed, 0 insertions, 373 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListEntry.java b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListEntry.java
deleted file mode 100644
index 96f66f6f8a..0000000000
--- a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListEntry.java
+++ /dev/null
@@ -1,373 +0,0 @@
-// Copyright (C) 2009 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.gerrit.server.patch;
-
-import static com.google.gerrit.server.ioutil.BasicSerialization.readBytes;
-import static com.google.gerrit.server.ioutil.BasicSerialization.readEnum;
-import static com.google.gerrit.server.ioutil.BasicSerialization.readFixInt64;
-import static com.google.gerrit.server.ioutil.BasicSerialization.readString;
-import static com.google.gerrit.server.ioutil.BasicSerialization.readVarInt32;
-import static com.google.gerrit.server.ioutil.BasicSerialization.writeBytes;
-import static com.google.gerrit.server.ioutil.BasicSerialization.writeEnum;
-import static com.google.gerrit.server.ioutil.BasicSerialization.writeFixInt64;
-import static com.google.gerrit.server.ioutil.BasicSerialization.writeString;
-import static com.google.gerrit.server.ioutil.BasicSerialization.writeVarInt32;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import com.google.gerrit.reviewdb.client.Patch;
-import com.google.gerrit.reviewdb.client.Patch.ChangeType;
-import com.google.gerrit.reviewdb.client.Patch.PatchType;
-import com.google.gerrit.reviewdb.client.PatchSet;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-import org.eclipse.jgit.diff.Edit;
-import org.eclipse.jgit.lib.Constants;
-import org.eclipse.jgit.patch.CombinedFileHeader;
-import org.eclipse.jgit.patch.FileHeader;
-import org.eclipse.jgit.util.IntList;
-import org.eclipse.jgit.util.RawParseUtils;
-
-public class PatchListEntry {
- private static final byte[] EMPTY_HEADER = {};
-
- static PatchListEntry empty(String fileName) {
- return new PatchListEntry(
- ChangeType.MODIFIED,
- PatchType.UNIFIED,
- null,
- fileName,
- EMPTY_HEADER,
- ImmutableList.of(),
- ImmutableSet.of(),
- 0,
- 0,
- 0,
- 0);
- }
-
- private final ChangeType changeType;
- private final PatchType patchType;
- private final String oldName;
- private final String newName;
- private final byte[] header;
- private final ImmutableList<Edit> edits;
- private final ImmutableSet<Edit> editsDueToRebase;
- private final int insertions;
- private final int deletions;
- private final long size;
- private final long sizeDelta;
- // Note: When adding new fields, the serialVersionUID in PatchListKey must be
- // incremented so that entries from the cache are automatically invalidated.
-
- PatchListEntry(
- FileHeader hdr, List<Edit> editList, Set<Edit> editsDueToRebase, long size, long sizeDelta) {
- changeType = toChangeType(hdr);
- patchType = toPatchType(hdr);
-
- switch (changeType) {
- case DELETED:
- oldName = null;
- newName = hdr.getOldPath();
- break;
-
- case ADDED:
- case MODIFIED:
- case REWRITE:
- oldName = null;
- newName = hdr.getNewPath();
- break;
-
- case COPIED:
- case RENAMED:
- oldName = hdr.getOldPath();
- newName = hdr.getNewPath();
- break;
-
- default:
- throw new IllegalArgumentException("Unsupported type " + changeType);
- }
-
- header = compact(hdr);
-
- if (hdr instanceof CombinedFileHeader || hdr.getHunks().isEmpty()) {
- edits = ImmutableList.of();
- } else {
- edits = ImmutableList.copyOf(editList);
- }
- this.editsDueToRebase = ImmutableSet.copyOf(editsDueToRebase);
-
- int ins = 0;
- int del = 0;
- for (Edit e : editList) {
- if (!editsDueToRebase.contains(e)) {
- del += e.getEndA() - e.getBeginA();
- ins += e.getEndB() - e.getBeginB();
- }
- }
- insertions = ins;
- deletions = del;
- this.size = size;
- this.sizeDelta = sizeDelta;
- }
-
- private PatchListEntry(
- ChangeType changeType,
- PatchType patchType,
- String oldName,
- String newName,
- byte[] header,
- ImmutableList<Edit> edits,
- ImmutableSet<Edit> editsDueToRebase,
- int insertions,
- int deletions,
- long size,
- long sizeDelta) {
- this.changeType = changeType;
- this.patchType = patchType;
- this.oldName = oldName;
- this.newName = newName;
- this.header = header;
- this.edits = edits;
- this.editsDueToRebase = editsDueToRebase;
- this.insertions = insertions;
- this.deletions = deletions;
- this.size = size;
- this.sizeDelta = sizeDelta;
- }
-
- int weigh() {
- int size = 16 + 6 * 8 + 2 * 4 + 20 + 16 + 8 + 4 + 20;
- size += stringSize(oldName);
- size += stringSize(newName);
- size += header.length;
- size += (8 + 16 + 4 * 4) * edits.size();
- size += (8 + 16 + 4 * 4) * editsDueToRebase.size();
- return size;
- }
-
- private static int stringSize(String str) {
- if (str != null) {
- return 16 + 3 * 4 + 16 + str.length() * 2;
- }
- return 0;
- }
-
- public ChangeType getChangeType() {
- return changeType;
- }
-
- public PatchType getPatchType() {
- return patchType;
- }
-
- public String getOldName() {
- return oldName;
- }
-
- public String getNewName() {
- return newName;
- }
-
- public ImmutableList<Edit> getEdits() {
- return edits;
- }
-
- public ImmutableSet<Edit> getEditsDueToRebase() {
- return editsDueToRebase;
- }
-
- public int getInsertions() {
- return insertions;
- }
-
- public int getDeletions() {
- return deletions;
- }
-
- public long getSize() {
- return size;
- }
-
- public long getSizeDelta() {
- return sizeDelta;
- }
-
- public List<String> getHeaderLines() {
- final IntList m = RawParseUtils.lineMap(header, 0, header.length);
- final List<String> headerLines = new ArrayList<>(m.size() - 1);
- for (int i = 1; i < m.size() - 1; i++) {
- final int b = m.get(i);
- int e = m.get(i + 1);
- if (header[e - 1] == '\n') {
- e--;
- }
- headerLines.add(RawParseUtils.decode(Constants.CHARSET, header, b, e));
- }
- return headerLines;
- }
-
- Patch toPatch(PatchSet.Id setId) {
- final Patch p = new Patch(new Patch.Key(setId, getNewName()));
- p.setChangeType(getChangeType());
- p.setPatchType(getPatchType());
- p.setSourceFileName(getOldName());
- p.setInsertions(insertions);
- p.setDeletions(deletions);
- return p;
- }
-
- void writeTo(OutputStream out) throws IOException {
- writeEnum(out, changeType);
- writeEnum(out, patchType);
- writeString(out, oldName);
- writeString(out, newName);
- writeBytes(out, header);
- writeVarInt32(out, insertions);
- writeVarInt32(out, deletions);
- writeFixInt64(out, size);
- writeFixInt64(out, sizeDelta);
-
- writeEditArray(out, edits);
- writeEditArray(out, editsDueToRebase);
- }
-
- private static void writeEditArray(OutputStream out, Collection<Edit> edits) throws IOException {
- writeVarInt32(out, edits.size());
- for (Edit edit : edits) {
- writeVarInt32(out, edit.getBeginA());
- writeVarInt32(out, edit.getEndA());
- writeVarInt32(out, edit.getBeginB());
- writeVarInt32(out, edit.getEndB());
- }
- }
-
- static PatchListEntry readFrom(InputStream in) throws IOException {
- ChangeType changeType = readEnum(in, ChangeType.values());
- PatchType patchType = readEnum(in, PatchType.values());
- String oldName = readString(in);
- String newName = readString(in);
- byte[] hdr = readBytes(in);
- int ins = readVarInt32(in);
- int del = readVarInt32(in);
- long size = readFixInt64(in);
- long sizeDelta = readFixInt64(in);
-
- Edit[] editArray = readEditArray(in);
- Edit[] editsDueToRebase = readEditArray(in);
-
- return new PatchListEntry(
- changeType,
- patchType,
- oldName,
- newName,
- hdr,
- ImmutableList.copyOf(editArray),
- ImmutableSet.copyOf(editsDueToRebase),
- ins,
- del,
- size,
- sizeDelta);
- }
-
- private static Edit[] readEditArray(InputStream in) throws IOException {
- int numEdits = readVarInt32(in);
- Edit[] edits = new Edit[numEdits];
- for (int i = 0; i < numEdits; i++) {
- int beginA = readVarInt32(in);
- int endA = readVarInt32(in);
- int beginB = readVarInt32(in);
- int endB = readVarInt32(in);
- edits[i] = new Edit(beginA, endA, beginB, endB);
- }
- return edits;
- }
-
- private static byte[] compact(FileHeader h) {
- final int end = end(h);
- if (h.getStartOffset() == 0 && end == h.getBuffer().length) {
- return h.getBuffer();
- }
-
- final byte[] buf = new byte[end - h.getStartOffset()];
- System.arraycopy(h.getBuffer(), h.getStartOffset(), buf, 0, buf.length);
- return buf;
- }
-
- private static int end(FileHeader h) {
- if (h instanceof CombinedFileHeader) {
- return h.getEndOffset();
- }
- if (!h.getHunks().isEmpty()) {
- return h.getHunks().get(0).getStartOffset();
- }
- return h.getEndOffset();
- }
-
- private static ChangeType toChangeType(FileHeader hdr) {
- switch (hdr.getChangeType()) {
- case ADD:
- return Patch.ChangeType.ADDED;
- case MODIFY:
- return Patch.ChangeType.MODIFIED;
- case DELETE:
- return Patch.ChangeType.DELETED;
- case RENAME:
- return Patch.ChangeType.RENAMED;
- case COPY:
- return Patch.ChangeType.COPIED;
- default:
- throw new IllegalArgumentException("Unsupported type " + hdr.getChangeType());
- }
- }
-
- private static PatchType toPatchType(FileHeader hdr) {
- PatchType pt;
-
- switch (hdr.getPatchType()) {
- case UNIFIED:
- pt = Patch.PatchType.UNIFIED;
- break;
- case GIT_BINARY:
- case BINARY:
- pt = Patch.PatchType.BINARY;
- break;
- default:
- throw new IllegalArgumentException("Unsupported type " + hdr.getPatchType());
- }
-
- if (pt != PatchType.BINARY) {
- final byte[] buf = hdr.getBuffer();
- for (int ptr = hdr.getStartOffset(); ptr < hdr.getEndOffset(); ptr++) {
- if (buf[ptr] == '\0') {
- // Its really binary, but Git couldn't see the nul early enough
- // to realize its binary, and instead produced the diff.
- //
- // Force it to be a binary; it really should have been that.
- //
- pt = PatchType.BINARY;
- break;
- }
- }
- }
-
- return pt;
- }
-}