/* * Copyright (C) 2016, Google Inc. 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 * https://www.eclipse.org/org/documents/edl-v10.php. * * SPDX-License-Identifier: BSD-3-Clause */ package org.eclipse.jgit.internal.ketch; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.SECONDS; import static org.eclipse.jgit.internal.ketch.Proposal.State.EXECUTED; import static org.eclipse.jgit.internal.ketch.Proposal.State.QUEUED; import static org.eclipse.jgit.transport.ReceiveCommand.Result.NOT_ATTEMPTED; import static org.eclipse.jgit.transport.ReceiveCommand.Result.REJECTED_OTHER_REASON; import java.io.IOException; import java.util.Collection; import org.eclipse.jgit.internal.JGitText; import org.eclipse.jgit.transport.PreReceiveHook; import org.eclipse.jgit.transport.ProgressSpinner; import org.eclipse.jgit.transport.ReceiveCommand; import org.eclipse.jgit.transport.ReceivePack; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * PreReceiveHook for handling push traffic in a Ketch system. *
* Install an instance on {@link org.eclipse.jgit.transport.ReceivePack} to
* capture the commands and other connection state and relay them through the
* {@link org.eclipse.jgit.internal.ketch.KetchLeader}, allowing the leader to
* gain consensus about the new reference state.
*/
public class KetchPreReceive implements PreReceiveHook {
private static final Logger log = LoggerFactory.getLogger(KetchPreReceive.class);
private final KetchLeader leader;
/**
* Construct a hook executing updates through a
* {@link org.eclipse.jgit.internal.ketch.KetchLeader}.
*
* @param leader
* leader for this repository.
*/
public KetchPreReceive(KetchLeader leader) {
this.leader = leader;
}
/** {@inheritDoc} */
@Override
public void onPreReceive(ReceivePack rp, Collection