/*
 * Copyright (C) 2019, 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.Iterator;
import java.util.Optional;
import java.util.stream.Stream;

import org.eclipse.jgit.errors.IncorrectObjectTypeException;
import org.eclipse.jgit.errors.MissingObjectException;

Checks the reachability walking the graph from the starters towards the target.
/** * Checks the reachability walking the graph from the starters towards the * target. */
class PedestrianReachabilityChecker implements ReachabilityChecker { private final boolean topoSort; private final RevWalk walk;
New instance of the reachability checker using a existing walk.
Params:
  • topoSort – walk commits in topological order
  • walk – RevWalk instance to reuse. Caller retains ownership.
/** * New instance of the reachability checker using a existing walk. * * @param topoSort * walk commits in topological order * @param walk * RevWalk instance to reuse. Caller retains ownership. */
public PedestrianReachabilityChecker(boolean topoSort, RevWalk walk) { this.topoSort = topoSort; this.walk = walk; } @Override public Optional<RevCommit> areAllReachable(Collection<RevCommit> targets, Stream<RevCommit> starters) throws MissingObjectException, IncorrectObjectTypeException, IOException { walk.reset(); if (topoSort) { walk.sort(RevSort.TOPO); } for (RevCommit target: targets) { walk.markStart(target); } Iterator<RevCommit> iterator = starters.iterator(); while (iterator.hasNext()) { walk.markUninteresting(iterator.next()); } return Optional.ofNullable(walk.next()); } }