View Javadoc
1   /*
2    * Copyright (C) 2011, Google Inc. 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  
11  package org.eclipse.jgit.internal.storage.pack;
12  
13  import java.io.IOException;
14  
15  /**
16   * Describes a pack file
17   * {@link org.eclipse.jgit.internal.storage.pack.ObjectReuseAsIs} can append
18   * onto a stream.
19   */
20  public abstract class CachedPack {
21  	/**
22  	 * Get the number of objects in this pack.
23  	 *
24  	 * @return the total object count for the pack.
25  	 * @throws java.io.IOException
26  	 *             if the object count cannot be read.
27  	 */
28  	public abstract long getObjectCount() throws IOException;
29  
30  	/**
31  	 * Get the number of delta objects stored in this pack.
32  	 * <p>
33  	 * This is an optional method, not every cached pack storage system knows
34  	 * the precise number of deltas stored within the pack. This number must be
35  	 * smaller than {@link #getObjectCount()} as deltas are not supposed to span
36  	 * across pack files.
37  	 * <p>
38  	 * This method must be fast, if the only way to determine delta counts is to
39  	 * scan the pack file's contents one object at a time, implementors should
40  	 * return 0 and avoid the high cost of the scan.
41  	 *
42  	 * @return the number of deltas; 0 if the number is not known or there are
43  	 *         no deltas.
44  	 * @throws java.io.IOException
45  	 *             if the delta count cannot be read.
46  	 */
47  	public long getDeltaCount() throws IOException {
48  		return 0;
49  	}
50  
51  	/**
52  	 * Determine if this pack contains the object representation given.
53  	 * <p>
54  	 * PackWriter uses this method during the finding sources phase to prune
55  	 * away any objects from the leading thin-pack that already appear within
56  	 * this pack and should not be sent twice.
57  	 * <p>
58  	 * Implementors are strongly encouraged to rely on looking at {@code rep}
59  	 * only and using its internal state to decide if this object is within this
60  	 * pack. Implementors should ensure a representation from this cached pack
61  	 * is tested as part of
62  	 * {@link org.eclipse.jgit.internal.storage.pack.ObjectReuseAsIs#selectObjectRepresentation(PackWriter, org.eclipse.jgit.lib.ProgressMonitor, Iterable)}
63  	 * , ensuring this method would eventually return true if the object would
64  	 * be included by this cached pack.
65  	 *
66  	 * @param obj
67  	 *            the object being packed. Can be used as an ObjectId.
68  	 * @param rep
69  	 *            representation from the
70  	 *            {@link org.eclipse.jgit.internal.storage.pack.ObjectReuseAsIs}
71  	 *            instance that originally supplied this CachedPack.
72  	 * @return true if this pack contains this object.
73  	 */
74  	public abstract boolean hasObject(ObjectToPack obj,
75  			StoredObjectRepresentation rep);
76  }