View Javadoc
1   /*
2    * Copyright (C) 2020, Google LLC 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  package org.eclipse.jgit.revwalk;
11  
12  import java.io.IOException;
13  import java.util.Collection;
14  import java.util.Optional;
15  import java.util.stream.Stream;
16  
17  /**
18   * Checks if all objects are reachable from certain starting points.
19   *
20   * This is an expensive check that browses commits, trees, blobs and tags. For
21   * reachability just between commits see {@link ReachabilityChecker}
22   * implementations.
23   *
24   * @since 5.8
25   */
26  public interface ObjectReachabilityChecker {
27  
28  	/**
29  	 * Checks that all targets are reachable from the starters.
30  	 *
31  	 * @implSpec Missing or invalid objects are reported as illegal state.
32  	 *           Caller should have found them while translating ObjectIds into
33  	 *           RevObjects. They can only happen here if the caller is mixing
34  	 *           revwalks.
35  	 *
36  	 * @param targets
37  	 *            objects to check for reachability from the starters
38  	 * @param starters
39  	 *            objects known to be reachable to the caller
40  	 * @return Optional a single unreachable target if there are any (there
41  	 *         could be more). Empty optional means all targets are reachable.
42  	 * @throws IOException
43  	 *             Cannot access underlying storage
44  	 */
45  	Optional<RevObject> areAllReachable(Collection<RevObject> targets,
46  			Stream<RevObject> starters) throws IOException;
47  
48  }