syntax = "proto3"; package gitaly; option go_package = "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb"; import "google/protobuf/timestamp.proto"; import "google/protobuf/descriptor.proto"; message OperationMsg { enum Operation { UNKNOWN = 0; MUTATOR = 1; ACCESSOR = 2; } Operation op = 1; enum Scope { REPOSITORY = 0; SERVER = 1; STORAGE = 2; } // Scope level indicates what level an RPC interacts with a server: // - REPOSITORY: scoped to only a single repo // - SERVER: affects the entire server and potentially all repos // - STORAGE: scoped to a specific storage location and all repos within Scope scope_level = 2; } enum ObjectType { UNKNOWN = 0; COMMIT = 1; BLOB = 2; TREE = 3; TAG = 4; } enum SignatureType { NONE = 0; PGP = 1; X509 = 2; // maybe add X509+TSA or other combinations at a later step } extend google.protobuf.MethodOptions { // Random high number.. OperationMsg op_type = 82303; } extend google.protobuf.FieldOptions { // Used to mark field containing name of affected storage. bool storage = 91233; // Random high number.. // If this operation modifies a repository, this annotations // will specify the location of the Repository field within // the request message. // // Repository annotation is used mark field used as repository // when parent message is marked as target or additional repository bool repository = 91234; // Used to mark target repository bool target_repository = 91235; // Used to mark additional repository bool additional_repository = 91236; } message Repository { // DEPRECATED: https://gitlab.com/gitlab-org/gitaly/issues/151 reserved 1; reserved "path"; string storage_name = 2; string relative_path = 3; // Sets the GIT_OBJECT_DIRECTORY envvar on git commands to the value of this field. // It influences the object storage directory the SHA1 directories are created underneath. string git_object_directory = 4; // Sets the GIT_ALTERNATE_OBJECT_DIRECTORIES envvar on git commands to the values of this field. // It influences the list of Git object directories which can be used to search for Git objects. repeated string git_alternate_object_directories = 5; // Used in callbacks to GitLab so that it knows what repository the event is // associated with. May be left empty on RPC's that do not perform callbacks. // During project creation, `gl_repository` may not be known. string gl_repository = 6; reserved 7; // The human-readable GitLab project path (e.g. gitlab-org/gitlab-ce). // When hashed storage is use, this associates a project path with its // path on disk. The name can change over time (e.g. when a project is // renamed). This is primarily used for logging/debugging at the // moment. string gl_project_path = 8; } // Corresponds to Gitlab::Git::Commit message GitCommit { string id = 1; bytes subject = 2; bytes body = 3; CommitAuthor author = 4; CommitAuthor committer = 5; repeated string parent_ids = 6; // If body exceeds a certain threshold, it will be nullified, // but its size will be set in body_size so we can know if // a commit had a body in the first place. int64 body_size = 7; SignatureType signature_type = 8; } message CommitAuthor { bytes name = 1; bytes email = 2; google.protobuf.Timestamp date = 3; bytes timezone = 4; } message ExitStatus { int32 value = 1; } // Corresponds to Gitlab::Git::Branch message Branch { bytes name = 1; GitCommit target_commit = 2; } message Tag { bytes name = 1; string id = 2; GitCommit target_commit = 3; // If message exceeds a certain threshold, it will be nullified, // but its size will be set in message_size so we can know if // a tag had a message in the first place. bytes message = 4; int64 message_size = 5; CommitAuthor tagger = 6; SignatureType signature_type = 7; } message User { string gl_id = 1; bytes name = 2; bytes email = 3; string gl_username = 4; } message ObjectPool { Repository repository = 1 [(gitaly.repository)=true]; }