| /* | |
| * 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<RevObject> areAllReachable(Collection<RevObject> targets, | |
| Stream<RevObject> starters) throws IOException; | |
| } |