/*
* 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 ReachabilityChecker
implementations. Since: 5.8
/**
* 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.
Params: - targets –
objects to check for reachability from the starters
- starters –
objects known to be reachable to the caller
Throws: - IOException –
Cannot access underlying storage
Implementation Requirements: 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. Returns: Optional a single unreachable target if there are any (there
could be more). Empty optional means all targets are reachable.
/**
* 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;
}