LocalCachedPack.java
- /*
- * Copyright (C) 2011, Google Inc. 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.internal.storage.file;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.util.List;
- import org.eclipse.jgit.internal.storage.pack.CachedPack;
- import org.eclipse.jgit.internal.storage.pack.ObjectToPack;
- import org.eclipse.jgit.internal.storage.pack.PackExt;
- import org.eclipse.jgit.internal.storage.pack.PackOutputStream;
- import org.eclipse.jgit.internal.storage.pack.StoredObjectRepresentation;
- class LocalCachedPack extends CachedPack {
- private final ObjectDirectory odb;
- private final String[] packNames;
- private Pack[] packs;
- LocalCachedPack(ObjectDirectory odb, List<String> packNames) {
- this.odb = odb;
- this.packNames = packNames.toArray(new String[0]);
- }
- LocalCachedPack(List<Pack> packs) {
- odb = null;
- packNames = null;
- this.packs = packs.toArray(new Pack[0]);
- }
- /** {@inheritDoc} */
- @Override
- public long getObjectCount() throws IOException {
- long cnt = 0;
- for (Pack pack : getPacks())
- cnt += pack.getObjectCount();
- return cnt;
- }
- void copyAsIs(PackOutputStream out, WindowCursor wc)
- throws IOException {
- for (Pack pack : getPacks())
- pack.copyPackAsIs(out, wc);
- }
- /** {@inheritDoc} */
- @Override
- public boolean hasObject(ObjectToPack obj, StoredObjectRepresentation rep) {
- try {
- LocalObjectRepresentation local = (LocalObjectRepresentation) rep;
- for (Pack pack : getPacks()) {
- if (local.pack == pack)
- return true;
- }
- return false;
- } catch (FileNotFoundException packGone) {
- return false;
- }
- }
- private Pack[] getPacks() throws FileNotFoundException {
- if (packs == null) {
- Pack[] p = new Pack[packNames.length];
- for (int i = 0; i < packNames.length; i++)
- p[i] = getPackFile(packNames[i]);
- packs = p;
- }
- return packs;
- }
- private Pack getPackFile(String packName) throws FileNotFoundException {
- for (Pack pack : odb.getPacks()) {
- if (packName.equals(pack.getPackName()))
- return pack;
- }
- throw new FileNotFoundException(getPackFilePath(packName));
- }
- private String getPackFilePath(String packName) {
- final File packDir = odb.getPackDirectory();
- return new PackFile(packDir, packName, PackExt.PACK).getPath();
- }
- }