1 /* 2 * Copyright (C) 2011, Google Inc. and others 3 * 4 * This program and the accompanying materials are made available under the 5 * terms of the Eclipse Distribution License v. 1.0 which is available at 6 * https://www.eclipse.org/org/documents/edl-v10.php. 7 * 8 * SPDX-License-Identifier: BSD-3-Clause 9 */ 10 11 package org.eclipse.jgit.transport; 12 13 import java.util.Collection; 14 15 import org.eclipse.jgit.lib.ObjectId; 16 17 /** 18 * Hook invoked by {@link org.eclipse.jgit.transport.UploadPack} before during 19 * critical phases. 20 * <p> 21 * If any hook function throws 22 * {@link org.eclipse.jgit.transport.ServiceMayNotContinueException} then 23 * processing stops immediately and the exception is thrown up the call stack. 24 * Most phases of UploadPack will try to report the exception's message text to 25 * the end-user over the client's protocol connection. 26 */ 27 public interface PreUploadHook { 28 /** A simple no-op hook. */ 29 PreUploadHook NULL = new PreUploadHook() { 30 @Override 31 public void onBeginNegotiateRound(UploadPack up, 32 Collection<? extends ObjectId> wants, int cntOffered) 33 throws ServiceMayNotContinueException { 34 // Do nothing. 35 } 36 37 @Override 38 public void onEndNegotiateRound(UploadPack up, 39 Collection<? extends ObjectId> wants, int cntCommon, 40 int cntNotFound, boolean ready) 41 throws ServiceMayNotContinueException { 42 // Do nothing. 43 } 44 45 @Override 46 public void onSendPack(UploadPack up, 47 Collection<? extends ObjectId> wants, 48 Collection<? extends ObjectId> haves) 49 throws ServiceMayNotContinueException { 50 // Do nothing. 51 } 52 }; 53 54 /** 55 * Invoked before negotiation round is started. 56 * 57 * @param up 58 * the upload pack instance handling the connection. 59 * @param wants 60 * the list of wanted objects. 61 * @param cntOffered 62 * number of objects the client has offered. 63 * @throws org.eclipse.jgit.transport.ServiceMayNotContinueException 64 * abort; the message will be sent to the user. 65 */ 66 void onBeginNegotiateRound(UploadPack up, 67 Collection<? extends ObjectId> wants, int cntOffered) 68 throws ServiceMayNotContinueException; 69 70 /** 71 * Invoked after a negotiation round is completed. 72 * 73 * @param up 74 * the upload pack instance handling the connection. 75 * @param wants 76 * the list of wanted objects. 77 * @param cntCommon 78 * number of objects this round found to be common. In a smart 79 * HTTP transaction this includes the objects that were 80 * previously found to be common. 81 * @param cntNotFound 82 * number of objects in this round the local repository does not 83 * have, but that were offered as potential common bases. 84 * @param ready 85 * true if a pack is ready to be sent (the commit graph was 86 * successfully cut). 87 * @throws org.eclipse.jgit.transport.ServiceMayNotContinueException 88 * abort; the message will be sent to the user. 89 */ 90 void onEndNegotiateRound(UploadPack up, 91 Collection<? extends ObjectId> wants, int cntCommon, 92 int cntNotFound, boolean ready) 93 throws ServiceMayNotContinueException; 94 95 /** 96 * Invoked just before a pack will be sent to the client. 97 * 98 * @param up 99 * the upload pack instance handling the connection. 100 * @param wants 101 * the list of wanted objects. These may be RevObject or 102 * RevCommit if the processed parsed them. Implementors should 103 * not rely on the values being parsed. 104 * @param haves 105 * the list of common objects. Empty on an initial clone request. 106 * These may be RevObject or RevCommit if the processed parsed 107 * them. Implementors should not rely on the values being parsed. 108 * @throws org.eclipse.jgit.transport.ServiceMayNotContinueException 109 * abort; the message will be sent to the user. 110 */ 111 void onSendPack(UploadPack up, Collection<? extends ObjectId> wants, 112 Collection<? extends ObjectId> haves) 113 throws ServiceMayNotContinueException; 114 }