All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.gerrit.server.git.CodeReviewCommit Maven / Gradle / Ivy

The newest version!
// Copyright (C) 2008 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.git;

import static com.google.common.base.Preconditions.checkArgument;

import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Ordering;
import com.google.gerrit.common.Nullable;
import com.google.gerrit.entities.Change;
import com.google.gerrit.entities.PatchSet;
import com.google.gerrit.server.notedb.ChangeNotes;
import com.google.gerrit.server.submit.CommitMergeStatus;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Optional;
import java.util.Set;
import org.eclipse.jgit.errors.IncorrectObjectTypeException;
import org.eclipse.jgit.errors.MissingObjectException;
import org.eclipse.jgit.lib.AnyObjectId;
import org.eclipse.jgit.lib.ObjectReader;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevWalk;

/** Extended commit entity with code review specific metadata. */
public class CodeReviewCommit extends RevCommit implements Serializable {

  private static final long serialVersionUID = 1L;

  /**
   * Default ordering when merging multiple topologically-equivalent commits.
   *
   * 

Operates only on these commits and does not take ancestry into account. * *

Use this in preference to the default order, which comes from {@link AnyObjectId} and only * orders on SHA-1. */ public static final Ordering ORDER = Ordering.natural() .onResultOf( (CodeReviewCommit c) -> c.getPatchsetId() != null ? c.getPatchsetId().changeId().get() : null) .nullsFirst(); public static CodeReviewRevWalk newRevWalk(Repository repo) { return new CodeReviewRevWalk(repo); } public static CodeReviewRevWalk newRevWalk(ObjectReader reader) { return new CodeReviewRevWalk(reader); } public static class CodeReviewRevWalk extends RevWalk { private CodeReviewRevWalk(Repository repo) { super(repo); } private CodeReviewRevWalk(ObjectReader reader) { super(reader); } @Override protected CodeReviewCommit createCommit(AnyObjectId id) { return new CodeReviewCommit(id); } @Override public CodeReviewCommit next() throws MissingObjectException, IncorrectObjectTypeException, IOException { return (CodeReviewCommit) super.next(); } @Override public void markStart(RevCommit c) throws MissingObjectException, IncorrectObjectTypeException, IOException { checkArgument(c instanceof CodeReviewCommit); super.markStart(c); } @Override public void markUninteresting(RevCommit c) throws MissingObjectException, IncorrectObjectTypeException, IOException { checkArgument(c instanceof CodeReviewCommit); super.markUninteresting(c); } @Override public CodeReviewCommit lookupCommit(AnyObjectId id) { return (CodeReviewCommit) super.lookupCommit(id); } @Override public CodeReviewCommit parseCommit(AnyObjectId id) throws MissingObjectException, IncorrectObjectTypeException, IOException { return (CodeReviewCommit) super.parseCommit(id); } } /** * Unique key of the PatchSet entity from the code review system. * *

This value is only available on commits that have a PatchSet represented in the code review * system. */ private PatchSet.Id patchsetId; private ChangeNotes notes; /** * The result status for this commit. * *

Only valid if {@link #patchsetId} is not null. */ private CommitMergeStatus statusCode; /** * Message for the status that is returned to the calling user if the status indicates a problem * that prevents submit. */ private transient Optional statusMessage = Optional.empty(); /** List of files in this commit that contain Git conflict markers. */ private ImmutableSet filesWithGitConflicts; public CodeReviewCommit(AnyObjectId id) { super(id); } public ChangeNotes notes() { return notes; } public CommitMergeStatus getStatusCode() { return statusCode; } public void setStatusCode(CommitMergeStatus statusCode) { this.statusCode = statusCode; } public Optional getStatusMessage() { return statusMessage; } public void setStatusMessage(@Nullable String statusMessage) { this.statusMessage = Optional.ofNullable(statusMessage); } public ImmutableSet getFilesWithGitConflicts() { return filesWithGitConflicts != null ? filesWithGitConflicts : ImmutableSet.of(); } public void setFilesWithGitConflicts(@Nullable Set filesWithGitConflicts) { this.filesWithGitConflicts = filesWithGitConflicts != null && !filesWithGitConflicts.isEmpty() ? ImmutableSet.copyOf(filesWithGitConflicts) : null; } public PatchSet.Id getPatchsetId() { return patchsetId; } public void setPatchsetId(PatchSet.Id patchsetId) { this.patchsetId = patchsetId; } public void copyFrom(CodeReviewCommit src) { notes = src.notes; patchsetId = src.patchsetId; statusCode = src.statusCode; } public Change change() { return getNotes().getChange(); } public ChangeNotes getNotes() { return notes; } public void setNotes(ChangeNotes notes) { this.notes = notes; } /** Custom serialization due to {@link #statusMessage} not being Serializable by default. */ private void writeObject(ObjectOutputStream oos) throws IOException { oos.defaultWriteObject(); if (this.statusMessage.isPresent()) { oos.writeUTF(this.statusMessage.get()); } } /** Custom deserialization due to {@link #statusMessage} not being Serializable by default. */ private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException { ois.defaultReadObject(); String statusMessage = null; if (ois.available() > 0) { statusMessage = ois.readUTF(); } this.statusMessage = Optional.ofNullable(statusMessage); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy