/* * Copyright (C) 2008-2009, Google Inc. * Copyright (C) 2007, Robin Rosenberg * Copyright (C) 2008, Shawn O. Pearce 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.treewalk; import java.io.IOException; import org.eclipse.jgit.errors.CorruptObjectException; import org.eclipse.jgit.errors.IncorrectObjectTypeException; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectReader; /** * Iterator over an empty tree (a directory with no files). */ public class EmptyTreeIterator extends AbstractTreeIterator { /** * Create a new iterator with no parent. */ public EmptyTreeIterator() { // Create a root empty tree. } EmptyTreeIterator(AbstractTreeIterator p) { super(p); pathLen = pathOffset; } /** * Create an iterator for a subtree of an existing iterator. *

* The caller is responsible for setting up the path of the child iterator. * * @param p * parent tree iterator. * @param childPath * path array to be used by the child iterator. This path must * contain the path from the top of the walk to the first child * and must end with a '/'. * @param childPathOffset * position within childPath where the child can * insert its data. The value at * childPath[childPathOffset-1] must be '/'. */ public EmptyTreeIterator(final AbstractTreeIterator p, final byte[] childPath, final int childPathOffset) { super(p, childPath, childPathOffset); pathLen = childPathOffset - 1; } /** {@inheritDoc} */ @Override public AbstractTreeIterator createSubtreeIterator(ObjectReader reader) throws IncorrectObjectTypeException, IOException { return new EmptyTreeIterator(this); } /** {@inheritDoc} */ @Override public boolean hasId() { return false; } /** {@inheritDoc} */ @Override public ObjectId getEntryObjectId() { return ObjectId.zeroId(); } /** {@inheritDoc} */ @Override public byte[] idBuffer() { return zeroid; } /** {@inheritDoc} */ @Override public int idOffset() { return 0; } /** {@inheritDoc} */ @Override public void reset() { // Do nothing. } /** {@inheritDoc} */ @Override public boolean first() { return true; } /** {@inheritDoc} */ @Override public boolean eof() { return true; } /** {@inheritDoc} */ @Override public void next(int delta) throws CorruptObjectException { // Do nothing. } /** {@inheritDoc} */ @Override public void back(int delta) throws CorruptObjectException { // Do nothing. } /** {@inheritDoc} */ @Override public void stopWalk() { if (parent != null) parent.stopWalk(); } /** {@inheritDoc} */ @Override protected boolean needsStopWalk() { return parent != null && parent.needsStopWalk(); } }