/* * Copyright (C) 2020, 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 * https://www.eclipse.org/org/documents/edl-v10.php. * * SPDX-License-Identifier: BSD-3-Clause */ package org.eclipse.jgit.revwalk; import java.io.IOException; import java.util.Collection; import java.util.Optional; import java.util.stream.Stream; /** * Checks if all objects are reachable from certain starting points. * * This is an expensive check that browses commits, trees, blobs and tags. For * reachability just between commits see {@link ReachabilityChecker} * implementations. * * @since 5.8 */ public interface ObjectReachabilityChecker { /** * Checks that all targets are reachable from the starters. * * @implSpec Missing or invalid objects are reported as illegal state. * Caller should have found them while translating ObjectIds into * RevObjects. They can only happen here if the caller is mixing * revwalks. * * @param targets * objects to check for reachability from the starters * @param starters * objects known to be reachable to the caller * @return Optional a single unreachable target if there are any (there * could be more). Empty optional means all targets are reachable. * @throws IOException * Cannot access underlying storage */ Optional areAllReachable(Collection targets, Stream starters) throws IOException; }