| // Copyright (C) 2011, Google Inc. |
| // and other copyright owners as documented in the project's IP log. |
| // |
| // This program and the accompanying materials are made available |
| // under the terms of the Eclipse Distribution License v1.0 which |
| // accompanies this distribution, is reproduced below, and is |
| // available at http://www.eclipse.org/org/documents/edl-v10.php |
| // |
| // All rights reserved. |
| // |
| // Redistribution and use in source and binary forms, with or |
| // without modification, are permitted provided that the following |
| // conditions are met: |
| // |
| // - Redistributions of source code must retain the above copyright |
| // notice, this list of conditions and the following disclaimer. |
| // |
| // - Redistributions in binary form must reproduce the above |
| // copyright notice, this list of conditions and the following |
| // disclaimer in the documentation and/or other materials provided |
| // with the distribution. |
| // |
| // - Neither the name of the Eclipse Foundation, Inc. nor the |
| // names of its contributors may be used to endorse or promote |
| // products derived from this software without specific prior |
| // written permission. |
| // |
| // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND |
| // CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, |
| // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
| // OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
| // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
| // NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
| // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
| // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
| // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| |
| // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| // |
| // WARNING: If you edit this file, run generate.sh |
| // |
| // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| |
| syntax = "proto2"; |
| |
| package org.eclipse.jgit.storage.dht; |
| option java_generate_equals_and_hash = true; |
| option java_package = "org.eclipse.jgit.generated.storage.dht.proto"; |
| |
| |
| // Entry in RefTable describing the target of the reference. |
| // Either symref *OR* target must be populated, but never both. |
| // |
| message RefData { |
| // Incrementing counter updated each time the RefData changes. |
| // Should always start at 1. |
| // |
| required uint32 sequence = 5 [default = 0]; |
| |
| // An ObjectId with an optional hint about where it can be found. |
| // |
| message Id { |
| required string object_name = 1; |
| optional string chunk_key = 2; |
| } |
| |
| // Name of another reference this reference inherits its target |
| // from. The target is inherited on-the-fly at runtime by reading |
| // the other reference. Typically only "HEAD" uses symref. |
| // |
| optional string symref = 1; |
| |
| // ObjectId this reference currently points at. |
| // |
| optional Id target = 2; |
| |
| // True if the correct value for peeled is stored. |
| // |
| optional bool is_peeled = 3; |
| |
| // If is_peeled is true, this field is accurate. This field |
| // exists only if target points to annotated tag object, then |
| // this field stores the "object" field for that tag. |
| // |
| optional Id peeled = 4; |
| } |
| |
| |
| // Entry in ObjectIndexTable, describes how an object appears in a chunk. |
| // |
| message ObjectInfo { |
| // Type of Git object. |
| // |
| enum ObjectType { |
| COMMIT = 1; |
| TREE = 2; |
| BLOB = 3; |
| TAG = 4; |
| } |
| optional ObjectType object_type = 1; |
| |
| // Position of the object's header within its chunk. |
| // |
| required int32 offset = 2; |
| |
| // Total number of compressed data bytes, not including the pack |
| // header. For fragmented objects this is the sum of all chunks. |
| // |
| required int64 packed_size = 3; |
| |
| // Total number of bytes of the uncompressed object. For a |
| // delta this is the size after applying the delta onto its base. |
| // |
| required int64 inflated_size = 4; |
| |
| // ObjectId of the delta base, if this object is stored as a delta. |
| // The base is stored in raw binary. |
| // |
| optional bytes delta_base = 5; |
| |
| // True if the object requires more than one chunk to be stored. |
| // |
| optional bool is_fragmented = 6; |
| } |
| |
| |
| // Describes at a high-level the information about a chunk. |
| // A repository can use this summary to determine how much |
| // data is stored, or when garbage collection should occur. |
| // |
| message ChunkInfo { |
| // Source of the chunk (what code path created it). |
| // |
| enum Source { |
| RECEIVE = 1; // Came in over the network from external source. |
| INSERT = 2; // Created in this repository (e.g. a merge). |
| REPACK = 3; // Generated during a repack of this repository. |
| } |
| optional Source source = 1; |
| |
| // Type of Git object stored in this chunk. |
| // |
| enum ObjectType { |
| MIXED = 0; |
| COMMIT = 1; |
| TREE = 2; |
| BLOB = 3; |
| TAG = 4; |
| } |
| optional ObjectType object_type = 2; |
| |
| // True if this chunk is a member of a fragmented object. |
| // |
| optional bool is_fragment = 3; |
| |
| // If present, key of the CachedPackInfo object |
| // that this chunk is a member of. |
| // |
| optional string cached_pack_key = 4; |
| |
| // Summary description of the objects stored here. |
| // |
| message ObjectCounts { |
| // Number of objects stored in this chunk. |
| // |
| optional int32 total = 1; |
| |
| // Number of objects stored in whole (non-delta) form. |
| // |
| optional int32 whole = 2; |
| |
| // Number of objects stored in OFS_DELTA format. |
| // The delta base appears in the same chunk, or |
| // may appear in an earlier chunk through the |
| // ChunkMeta.base_chunk link. |
| // |
| optional int32 ofs_delta = 3; |
| |
| // Number of objects stored in REF_DELTA format. |
| // The delta base is at an unknown location. |
| // |
| optional int32 ref_delta = 4; |
| } |
| optional ObjectCounts object_counts = 5; |
| |
| // Size in bytes of the chunk's compressed data column. |
| // |
| optional int32 chunk_size = 6; |
| |
| // Size in bytes of the chunk's index. |
| // |
| optional int32 index_size = 7; |
| |
| // Size in bytes of the meta information. |
| // |
| optional int32 meta_size = 8; |
| } |
| |
| |
| // Describes meta information about a chunk, stored inline with it. |
| // |
| message ChunkMeta { |
| // Enumerates the other chunks this chunk depends upon by OFS_DELTA. |
| // Entries are sorted by relative_start ascending, enabling search. Thus |
| // the earliest chunk is at the end of the list. |
| // |
| message BaseChunk { |
| // Bytes between start of the base chunk and start of this chunk. |
| // Although the value is positive, its a negative offset. |
| // |
| required int64 relative_start = 1; |
| required string chunk_key = 2; |
| } |
| repeated BaseChunk base_chunk = 1; |
| |
| // If this chunk is part of a fragment, key of every chunk that |
| // makes up the fragment, including this chunk. |
| // |
| repeated string fragment = 2; |
| |
| // Chunks that should be prefetched if reading the current chunk. |
| // |
| message PrefetchHint { |
| repeated string edge = 1; |
| repeated string sequential = 2; |
| } |
| optional PrefetchHint commit_prefetch = 51; |
| optional PrefetchHint tree_prefetch = 52; |
| } |
| |
| |
| // Describes a CachedPack, for efficient bulk clones. |
| // |
| message CachedPackInfo { |
| // Unique name of the cached pack. This is the SHA-1 hash of |
| // all of the objects that make up the cached pack, sorted and |
| // in binary form. (Same rules as Git on the filesystem.) |
| // |
| required string name = 1; |
| |
| // SHA-1 of all chunk keys, which are themselves SHA-1s of the |
| // raw chunk data. If any bit differs in compression (due to |
| // repacking) the version will differ. |
| // |
| required string version = 2; |
| |
| // Total number of objects in the cached pack. This must be known |
| // in order to set the final resulting pack header correctly before it |
| // is sent to clients. |
| // |
| required int64 objects_total = 3; |
| |
| // Number of objects stored as deltas, rather than deflated whole. |
| // |
| optional int64 objects_delta = 4; |
| |
| // Total size of the chunks, in bytes, not including the chunk footer. |
| // |
| optional int64 bytes_total = 5; |
| |
| // Objects this pack starts from. |
| // |
| message TipObjectList { |
| repeated string object_name = 1; |
| } |
| required TipObjectList tip_list = 6; |
| |
| // Chunks, in order of occurrence in the stream. |
| // |
| message ChunkList { |
| repeated string chunk_key = 1; |
| } |
| required ChunkList chunk_list = 7; |
| } |