/* * Copyright (c) 2019, Google LLC and others * * This program and the accompanying materials are made available under the * terms of the Eclipse Distribution License v. 1.0 which is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * SPDX-License-Identifier: BSD-3-Clause */ package org.eclipse.jgit.transport; import java.io.IOException; import java.util.List; import org.eclipse.jgit.errors.MissingObjectException; import org.eclipse.jgit.transport.ReceiveCommand.Result; /** * Exception handler for processing {@link ReceiveCommand}. * * @since 5.7 */ public interface ReceiveCommandErrorHandler { /** * Handle an exception thrown while validating the new commit ID. * * @param cmd * offending command * @param e * exception thrown */ default void handleNewIdValidationException(ReceiveCommand cmd, IOException e) { cmd.setResult(Result.REJECTED_MISSING_OBJECT, cmd.getNewId().name()); } /** * Handle an exception thrown while validating the old commit ID. * * @param cmd * offending command * @param e * exception thrown */ default void handleOldIdValidationException(ReceiveCommand cmd, IOException e) { cmd.setResult(Result.REJECTED_MISSING_OBJECT, cmd.getOldId().name()); } /** * Handle an exception thrown while checking if the update is fast-forward. * * @param cmd * offending command * @param e * exception thrown */ default void handleFastForwardCheckException(ReceiveCommand cmd, IOException e) { if (e instanceof MissingObjectException) { cmd.setResult(Result.REJECTED_MISSING_OBJECT, e.getMessage()); } else { cmd.setResult(Result.REJECTED_OTHER_REASON); } } /** * Handle an exception thrown while checking if the update is fast-forward. * * @param cmds * commands being processed * @param e * exception thrown */ default void handleBatchRefUpdateException(List cmds, IOException e) { for (ReceiveCommand cmd : cmds) { if (cmd.getResult() == Result.NOT_ATTEMPTED) { cmd.reject(e); } } } }