proto/operations.proto (1,054 lines of code) (raw):

syntax = "proto3"; package gitaly; import "errors.proto"; import "google/protobuf/timestamp.proto"; import "lint.proto"; import "shared.proto"; option go_package = "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb"; // OperationService provides an interface for performing mutating git // operations on a repository on behalf of a user. The user's operation is // treated as untrusted. Any reference update is thus checked against GitLab's // '/allowed' endpoint. service OperationService { // UserCreateBranch creates a single branch in the context of a specific user. It executes // hooks and contacts Rails to verify that the user is allowed to create the branch. The // following known error conditions may happen: // // - `FailedPrecondition` if the Git revision provided in start_point can't be found or updated. // - `InvalidArgument` if the commit ID resolved from the start_point can't be parsed. // - `PermissionDenied` with an embedded `UserCreateBranchError` if any custom hooks return a // non-zero exit code. rpc UserCreateBranch(UserCreateBranchRequest) returns (UserCreateBranchResponse) { option (op_type) = { op: MUTATOR }; } // UserUpdateBranch updates a branch to point to a new revision. It executes hooks and // contacts Rails to verify that the user is allowed to update the branch. The following // known error conditions may happen: // // - `InvalidArgument` if any of the request fields can't be validated. // - `Internal` if the newrev or oldrev are invalid in the context of the repository. // - `UserUpdateBranchResponse` with the `PreReceiveError` field set, if any custom hooks // return a non-zero exit code. rpc UserUpdateBranch(UserUpdateBranchRequest) returns (UserUpdateBranchResponse) { option (op_type) = { op: MUTATOR }; } // UserDeleteBranch force-deletes a single branch in the context of a specific user. It executes // hooks and contacts Rails to verify that the user is indeed allowed to delete that branch. The // following known error conditions may happen: // // - Returns `InvalidArgument` in case either the branch name or user are not set. // - Returns `FailedPrecondition` in case the branch does not exist. // - Returns `OK` with a `PreReceiveError` in case custom hooks refused the update. If the // `gitaly_user_delete_branch_structured_errors` feature flag is enabled this error case will // instead return `PermissionDenied` with either a `CustomHook` or AccessCheck` structured // error. // - Returns `FailedPrecondition` in case updating the reference fails because // of a concurrent write to the same reference. If the // `gitaly_user_delete_branch_structured_errors` feature flag is set this error case will // instead return `FailedPrecondition` with a `ReferenceUpdate` structured error. rpc UserDeleteBranch(UserDeleteBranchRequest) returns (UserDeleteBranchResponse) { option (op_type) = { op: MUTATOR }; } // UserCreateTag creates a new tag. This RPC knows to create both lightweight and annotated tags // depending on whether a message is set. rpc UserCreateTag(UserCreateTagRequest) returns (UserCreateTagResponse) { option (op_type) = { op: MUTATOR }; } // UserDeleteTag deletes an existing tag. It executes hooks and contacts Rails to verify that // the user is allowed to delete the tag. The following known error conditions may happen: // // - `InvalidArgument` if the repository, tag_name, user, or expected_old_oid (if provided) // are invalid. // - `FailedPrecondition` if the tag_name can't be found, or the ref couldn't be deleted due // to a concurrent write to the same ref. // - `Internal` if the tag_name can't be resolved or an unknown error occurs. rpc UserDeleteTag(UserDeleteTagRequest) returns (UserDeleteTagResponse) { option (op_type) = { op: MUTATOR }; } // UserMergeToRef creates a merge commit and updates target_ref to point to that // new commit. The first parent of the merge commit (the main line) is taken // from first_parent_ref. The second parent is specified by its commit ID in source_sha. // If target_ref already exists it will be overwritten. rpc UserMergeToRef(UserMergeToRefRequest) returns (UserMergeToRefResponse) { option (op_type) = { op: MUTATOR }; } // UserRebaseToRef rebases source_sha on top of first_parent_ref and updates // target_ref to point to that new commit. If target_ref already exists, then // it will be overwritten. This operation is intended to be used on internal // refs (e.g. refs/merge-requests/*) and does not call hooks. rpc UserRebaseToRef(UserRebaseToRefRequest) returns (UserRebaseToRefResponse) { option (op_type) = { op: MUTATOR }; } // UserMergeBranch tries to merge the given commit into the target branch. // The merge commit is created with the given user as author/committer and // the given message. // // This is a two-stage RPC that requires confirmation to make user-visible // changes to the repository: // - The first request contains details about the requested merge, which // will result in a response with the created merge commit ID. // - The second request should set `apply = true` to apply the merge. // // After the second request, it executes hooks and contacts Rails to verify // that the user is allowed to update the branch. The following known error // conditions may happen: // // - `InvalidArgument` if request fields can't be validated or resolved. // - `NotFound` if the branch can't be found. // - `FailedPrecondition` if there are merge conflicts, if the merge is // aborted by setting `apply = false` in the second request, or if the // merge fails due to a concurrent write to the same ref. // - `PermissionDenied` if the user doesn't have permissions to merge a branch. rpc UserMergeBranch(stream UserMergeBranchRequest) returns (stream UserMergeBranchResponse) { option (op_type) = { op: MUTATOR }; } // UserFFBranch tries to perform a fast-forward merge of a given commit into // the given branch. If the merge is not a fast-forward merge, the request // will fail. The RPC will return an empty response in case updating the // reference fails e.g. because of a race. rpc UserFFBranch(UserFFBranchRequest) returns (UserFFBranchResponse) { option (op_type) = { op: MUTATOR }; } // UserCherryPick tries to perform a cherry-pick of a given commit onto a // branch. rpc UserCherryPick(UserCherryPickRequest) returns (UserCherryPickResponse) { option (op_type) = { op: MUTATOR }; } // UserCommitFiles builds a commit from a stream of actions and updates the target branch to point to it. // userCommitFilesRequest with a UserCommitFilesRequestHeader must be sent as the first message of the stream. // Following that, a variable number of actions can be sent to build a new commit. Each action consists of // a header followed by content if used by the action. rpc UserCommitFiles(stream UserCommitFilesRequest) returns (UserCommitFilesResponse) { option (op_type) = { op: MUTATOR }; } // UserRebaseConfirmable rebases the given remote branch onto a target // branch. The remote branch may be part of another repository. // // This RPC requires confirmation to make any user-visible changes to the // repository. The first request sent shall contains details about the // requested rebase, which will result in a response with the created rebase // commit ID. Only if a second message with `apply = true` is sent will the // rebase be applied. rpc UserRebaseConfirmable(stream UserRebaseConfirmableRequest) returns (stream UserRebaseConfirmableResponse) { option (op_type) = { op: MUTATOR }; } // UserRevert tries to perform a revert of a given commit onto a branch. rpc UserRevert(UserRevertRequest) returns (UserRevertResponse) { option (op_type) = { op: MUTATOR }; } // UserSquash squashes a range of commits into a single commit. If // successful, it returns the object ID of the newly created squash commit. // On error, it returns a gRPC error. Some specific errors will have an // embedded UserSquashError such that clients can deduce what exactly has // failed. rpc UserSquash(UserSquashRequest) returns (UserSquashResponse) { option (op_type) = { op: MUTATOR }; } // UserApplyPatch applies patches to a given branch. rpc UserApplyPatch(stream UserApplyPatchRequest) returns (UserApplyPatchResponse) { option (op_type) = { op: MUTATOR }; } // UserUpdateSubmodule updates a submodule to point to a new commit. rpc UserUpdateSubmodule(UserUpdateSubmoduleRequest) returns (UserUpdateSubmoduleResponse) { option (op_type) = { op: MUTATOR }; } } // UserCreateBranchRequest is a request for the UserCreateBranch RPC. message UserCreateBranchRequest { // repository is the repository in which the branch should be created. Repository repository = 1 [(target_repository)=true]; // branch_name is the name of the branch to create. bytes branch_name = 2; // user to execute the action as. Also used to perform authentication and // authorization via an external endpoint. User user = 3; // start_point is the Git revision to start the branch at. See the gitrevisions(1) // man pages for supported syntax. bytes start_point = 4; } // UserCreateBranchResponse is a response for the UserCreateBranch RPC. message UserCreateBranchResponse { // branch is the branch that was created. Branch branch = 1; // PreReceiveError had previously been set when creation of the branch was refused by hooks. // Instead, Gitaly returns a structured error with the `custom_hook` field set. reserved "pre_receive_error"; reserved 2; } // UserCreateBranchError is an error returned by the UserCreateBranch RPC in some specific well // defined error cases. message UserCreateBranchError { oneof error { // custom_hookError is set if any custom hook which has running as part of // this RPC call has returned a non-zero exit code. CustomHookError custom_hook = 1; } } // UserUpdateBranchRequest is a request for the UserUpdateBranch RPC. message UserUpdateBranchRequest { // repository is the repository to update the branch in. Repository repository = 1 [(target_repository)=true]; // branch_name is the name of the branch to update. bytes branch_name = 2; // user to execute the action as. Also used to perform authentication and // authorization via an external endpoint. User user = 3; // newrev is the Git revision which the branch will point to. bytes newrev = 4; // oldrev is the Git revision which the branch currently points to. bytes oldrev = 5; } // UserUpdateBranchResponse is a response for the UserUpdateBranch RPC. message UserUpdateBranchResponse { // pre_receive_error indicates an error that occurred while executing custom hooks. string pre_receive_error = 1; } // UserDeleteBranchRequest is a request for the UserDeleteBranch RPC. message UserDeleteBranchRequest { // repository is the repository to delete the branch in. Repository repository = 1 [(target_repository)=true]; // branch_name is the name of the branch that shall be deleted. This is expected to be the branch // name only, e.g. in case you want to delete `refs/heads/main` the request needs to only contain // `main` as the branch name. bytes branch_name = 2; // user to execute the action as. Also used to perform authentication and // authorization via an external endpoint. User user = 3; // expected_old_oid is the object ID which branch is expected to point to. // This is used as a safety guard to avoid races when branch has been // updated meanwhile to point to a different object ID. // // If unset, the target branch will be deleted regardless of its current // state. If set, it must contain a valid, full object ID. Otherwise, this // RPC will return an error. string expected_old_oid = 4; } // UserDeleteBranchResponse is a response for the UserDeleteBranch RPC. message UserDeleteBranchResponse { // PreReceiveError had previously been set in case access checks refused the branch deletion. This // has been changed to instead we return a proper gRPC error with UserDeleteBranchError details // set to an AccessCheckError. reserved "pre_receive_error"; reserved 1; } // UserDeleteBranchError is an error returned by the UserDeleteBranch RPC in some specific well // defined error cases. message UserDeleteBranchError { oneof error { // access_check is set if the RPC failed due to an external access check. AccessCheckError access_check = 1; // reference_updateError is set if the RPC failed because updating the // reference to the new object ID has failed. ReferenceUpdateError reference_update = 2; // custom_hook is set if any custom hook which has running as part of this RPC call has returned // a non-zero exit code. CustomHookError custom_hook = 3; } } // UserDeleteTagRequest is a request for the UserDeleteTag RPC. message UserDeleteTagRequest { // repository is the repository from which the tag should be deleted. Repository repository = 1 [(target_repository)=true]; // tag_name is the name of the tag to delete. bytes tag_name = 2; // user to execute the action as. Also used to perform authentication and // authorization via an external endpoint. User user = 3; // expected_old_oid is the object ID which tag is expected to point to. // This is used as a safety guard to avoid races when tag has been // updated meanwhile to point to a different object ID. // // If unset, the target tag will be deleted regardless of its current // state. If set, it must contain a valid, full object ID. Otherwise, // this RPC will return an error. string expected_old_oid = 4; } // UserDeleteTagResponse is a response for the UserDeleteTag RPC. message UserDeleteTagResponse { // pre_receive_error indicates an error that occurred while executing custom hooks. string pre_receive_error = 1; } // UserCreateTagRequest is a request for the UserCreateTag RPC. message UserCreateTagRequest { // repository is the repository in which the tag shall be created. Repository repository = 1 [(target_repository)=true]; // tag_name is the name of the tag that shall be created. Note that this should be set to the name // only: if you want to create a tag `refs/heads/v1.0`, you need to pass `v1.0` as TagName. bytes tag_name = 2; // user to execute the action as. Also used to perform authentication and // authorization via an external endpoint. User user = 3; // target_revision is the revision that the newly created tag should be pointing to. Note that if // the revision points to a tag, that tag will be peeled to the commit it is pointing to. If the // target_revision does not point to a commit then the RPC will return an error. bytes target_revision = 4; // message is the message of the tag. If it is empty, a lightweight tag is created. Otherwise, an // annotated tag is created. bytes message = 5; // timestamp is the optional timestamp to use for the created tag tags. If it's not set, the // current time will be used. It's only used if an annotated tag is being created. google.protobuf.Timestamp timestamp = 7; } // UserCreateTagResponse is a response for the UserCreateTag RPC. message UserCreateTagResponse { // tag is the newly created tag. Tag tag = 1; // Exists had previously been set in case the tag exists already. Instead, Gitaly returns a // structured error with the `reference_exists` field set now. reserved "exists"; reserved 2; // PreReceiveError had previously been set in case access checks refused the branch deletion. This // has been changed to instead we return a proper gRPC error with UserDeleteBranchError details // set to an AccessCheckError. reserved "pre_receive_error"; reserved 3; } // UserCreateTagError includes error descriptions which may be set as error details in case // userCreateTag fails. message UserCreateTagError { oneof error { // access_check is set if the RPC failed due to an external access check. AccessCheckError access_check = 1; // reference_updateError is set if the RPC failed because updating the // reference to the new object ID has failed. ReferenceUpdateError reference_update = 2; // custom_hook is set if any custom hook which has running as part of this RPC call has returned // a non-zero exit code. CustomHookError custom_hook = 3; // reference_existsError is set if the tag reference exists already. ReferenceExistsError reference_exists = 4; } } // UserMergeBranchRequest is a request for the UserMergeBranch RPC. // All mandatory parameters except for `apply` should be set in the first // message. message UserMergeBranchRequest { // repository is the repository to compute the merge for. Repository repository = 1 [(target_repository)=true]; // user to execute the action as. Also used to perform authentication and // authorization via an external endpoint. User user = 2; // commit_id is the object ID (hash) of the object that shall be merged into // the target branch. string commit_id = 3; // branch is the branch into which the given commit shall be merged and whose // reference is going to be updated. bytes branch = 4; // message is the message to use for the merge commit. bytes message = 5; // timestamp is the optional timestamp to use for the merge commit. If it's // not set, the current time will be used. google.protobuf.Timestamp timestamp = 7; // expected_old_oid is the object ID which branch is expected to point to. // This is used as a safety guard to avoid races when branch has been // updated meanwhile to point to a different object ID. // // If unset, the target branch will be overwritten regardless of its current // state. If set, it must either contain a valid, full object ID or the // zero object ID in case the branch should be created. Otherwise, this RPC // will return an error. string expected_old_oid = 8; // squash is a flag to indicate that `commit_id` is a squash commit. // When set to `true`, it merges only the squash commit without creating // the merge commit. bool squash = 9; // apply is used in the second message. Setting it to true will proceed with // the merge. Setting it to false will abort the merge. bool apply = 6; } // UserMergeBranchResponse is a response for the UserMergeBranch RPC. message UserMergeBranchResponse { // commit_id is the merge commit the branch will be updated to. This is sent // as the response to the first request. string commit_id = 1; reserved 2; // branch_update contains the commit ID of the merge commit if the merge has // been applied to the branch. This is sent as the response to the second // request. OperationBranchUpdate branch_update = 3; // Reserved for backwards compatibility. Structured errors are now used instead. reserved "pre_receive_error"; reserved 4; } // UserMergeBranchError includes error descriptions which may be set as error // details in case UserMergeBranch fails. message UserMergeBranchError { oneof error { // access_check is set if the RPC failed due to an external access check. AccessCheckError access_check = 1; // reference_updateError is set if the RPC failed because updating the // reference to the new object ID has failed. ReferenceUpdateError reference_update = 2; // custom_hook is set if any custom hook which has running as part of this RPC call has returned // a non-zero exit code. CustomHookError custom_hook = 3; // merge_conflictError is set if merging the revisions has resulted in conflicting files. MergeConflictError merge_conflict = 4; } } // UserMergeToRefRequest is a request for the UserMergeToRef RPC. message UserMergeToRefRequest { // repository is the repository in which the merge shall be computed. Repository repository = 1 [(target_repository)=true]; // user to execute the action as. Also used to perform authentication and // authorization via an external endpoint. User user = 2; // source_sha is the object ID of the second parent of the computed merge. string source_sha = 3; // branch contains the name of the branch which should be used as the first // parent of the computed merge. It is deprecated in favor of // `first_parent_ref` and will be ignored in case it is set. bytes branch = 4 [deprecated = true]; // target_ref contains the fully qualified reference which should be updated // with the computed merge commit. bytes target_ref = 5; // message is the message to use for the merge commit. bytes message = 6; // first_parent_ref is the name of the reference which should be used as the // first parent of the computed merge. Overrides `branch`. bytes first_parent_ref = 7; // allow_conflicts if set, used to allow the merge to go ahead when there were // conflicts. The code would simply write the conflict markers in the code. // This has since been deprecated in Rails and is no longer needed. bool allow_conflicts = 8 [deprecated = true]; // timestamp is the optional timestamp to use for the merge commit. If it's // not set, the current time will be used. google.protobuf.Timestamp timestamp = 9; // expected_old_oid is the object ID that is expected to be at target_ref. It // is used as an optimistic lock on concurrent updates of target_ref: If // target_ref no longer points to this ID, then the update is rejected. // // expected_old_oid is the object ID which branch is expected to point to. // This is used as a safety guard to avoid races when branch has been // updated meanwhile to point to a different object ID. // // If unset, the target branch will be overwritten regardless of its current // state. If set, it must either contain a valid, full object ID or the // zero object ID in case the branch should be created. Otherwise, this RPC // will return an error. string expected_old_oid = 10; } // UserMergeToRefResponse is a response for the UserMergeToRef RPC. message UserMergeToRefResponse { // commit_id is the object ID of the computed merge commit. string commit_id = 1; // pre_receive_error had never been set because this RPC does not perform // authentication and authorization via an external endpoint. This field was // thus removed without replacement. reserved "pre_receive_error"; reserved 2; } // UserRebaseToRefRequest contains the request parameters for the UserRebaseToRef RPC message UserRebaseToRefRequest { // repository is the repository in which the rebase shall be computed. Repository repository = 1 [(target_repository)=true]; // user to execute the action as. Also used to perform authentication and // authorization via an external endpoint. User user = 2; // source_sha is the object ID of the commit to be rebased. string source_sha = 3; // target_ref is the fully qualified reference that will be overwritten or created // with the rebased commits. bytes target_ref = 5; // first_parent_ref is the name of the reference on top of which SourceSha // should be rebased. bytes first_parent_ref = 7; // timestamp is the optional timestamp to use for the rebased commits as // committer date. If it's not set, the current time will be used. google.protobuf.Timestamp timestamp = 9; // expected_old_oid is the object ID to which TargetRef is expected to point. // This is used as a safety guard to avoid races when TargetRef has been // updated meanwhile to point to a different object ID. // // If unset, TargetRef will be overwritten regardless of its current state. // If set, it must either contain a valid, full object ID or the zero object // ID in case the ref should be created. Otherwise, this RPC will return an // error. string expected_old_oid = 10; } // UserRebaseToRefResponse contains the response data for the UserRebaseToRef RPC message UserRebaseToRefResponse { // commit_id is the object ID of the HEAD of the rebased ref. string commit_id = 1; } // OperationBranchUpdate contains the details of a branch update. message OperationBranchUpdate { // commit_id is set to the OID of the created commit if a branch was created or updated. string commit_id = 1; // repo_created indicates whether the branch created was the first one in the repository. // Used for cache invalidation in GitLab. bool repo_created = 2; // branch_created indicates whether the branch already existed in the repository // and was updated or whether it was created. Used for cache invalidation in GitLab. bool branch_created = 3; } // UserFFBranchError is an error returned by the UserFFBranch RPC in some specific well // defined error cases. message UserFFBranchError { oneof error { // custom_hook is set if any custom hook which was running as part of this RPC call // has returned a non-zero exit code. CustomHookError custom_hook = 1; // reference_update is set if the RPC failed because updating the reference to the new // object ID has failed. ReferenceUpdateError reference_update = 2; } } // UserFFBranchRequest is a request for the UserFFBranch RPC. message UserFFBranchRequest { // repository is the repository for which to perform the fast-forward merge. Repository repository = 1 [(target_repository)=true]; // user to execute the action as. Also used to perform authentication and // authorization via an external endpoint. User user = 2; // commit_id is the commit ID to fast-forward the branch to. string commit_id = 3; // branch is the name of the branch to fast-forward. This must be the // branch name only and not a fully qualified reference, e.g. "master" // instead of "refs/heads/master". bytes branch = 4; // expected_old_oid is the object ID which branch is expected to point to. // This is used as a safety guard to avoid races when branch has been // updated meanwhile to point to a different object ID. // // If unset, the target branch will be overwritten regardless of its current // state. If set, it must either contain a valid, full object ID or the // zero object ID in case the branch should be created. Otherwise, this RPC // will return an error. string expected_old_oid = 5; } // UserFFBranchResponse is a response for the UserFFBranch RPC. message UserFFBranchResponse { // branch_update contains details of the fast-forwarded branch. OperationBranchUpdate branch_update = 1; // pre_receive_error is set in the case of an `Internal` error and contains // details of the failed custom hook. string pre_receive_error = 2; } // UserCherryPickRequest is a request for the UserCherryPick RPC. message UserCherryPickRequest { // repository is the repository into which the cherry-pick shall be // performed. Repository repository = 1 [(target_repository)=true]; // user to execute the action as. Also used to perform authentication and // authorization via an external endpoint. User user = 2; // commit is the commit to cherry-pick onto the given branch. GitCommit commit = 3; // branch_name is the name of the branch onto which the cherry-pick shall be // executed. bytes branch_name = 4; // message is the message to use for the cherry-picked commit. bytes message = 5; // start_branch_name is is used in case the branch_name branch does not // exist. In that case, it will be created from the start_branch_name. bytes start_branch_name = 6; // start_repository is used in case the branch_name branch does not exist. In // that case, it will be created from start_branch_name in the // start_repository. Repository start_repository = 7; // dry_run will compute the cherry-pick, but not update the target branch. bool dry_run = 8; // timestamp is the optional timestamp to use for the created cherry-picked // commit's committer date. If it's not set, the current time will be used. google.protobuf.Timestamp timestamp = 9; // expected_old_oid is the object ID which branch is expected to point to. // This is used as a safety guard to avoid races when branch has been // updated meanwhile to point to a different object ID. Only applicable when // branch_name is set. // // If unset, the target branch will be overwritten regardless of its current // state. If set, it must either contain a valid, full object ID or the // zero object ID in case the branch should be created. Otherwise, this RPC // will return an error. string expected_old_oid = 10; // commit_author_name is the author to be applied to the cherry-picked commit. If not provided, the original commit's author name is // used instead. bytes commit_author_name = 11; // commit_author_email is the author email to be applied to the cherry-picked commit. If not provided, the original commit's author email is // used instead. bytes commit_author_email = 12; } // UserCherryPickResponse is a response for the UserCherryPick RPC. message UserCherryPickResponse { // branch_update represents details about the updated branch. OperationBranchUpdate branch_update = 1; // CreateTreeError has previously been set when creating the tree failed. Instead, Gitaly returns // a structured error with the `cherry_pick_conflict` or `changes_already_applied` field set. reserved "create_tree_error"; reserved 2; // commitError has previously been set when creating the commit failed. Instead, Gitaly returns a // structured error with the `target_branch_diverged` field set. reserved "commit_error"; reserved 3; // PreReceiveError has previously been set when access checks have refused the cherry-pick. // Instead, Gitaly returns a structured error with the `access_check` field set. reserved "pre_receive_error"; reserved 4; // CreateTreeError code was previously set to denote why creating the tree has failed. There is no // replacement. reserved "create_tree_error_code"; reserved 5; } // UserCherryPickError is an error returned by the UserCherryPick RPC. message UserCherryPickError { oneof error { // cherry_pick_conflict is returned if there is a conflict when applying the cherry // pick. MergeConflictError cherry_pick_conflict = 1; // target_branch_diverged is returned whenever the tip commit of the branch we're // about to apply the new commit on is not a direct ancestor of the newly created // cherry-picked commit. This may happen either due to a race where the reference // is modified while we compute the cherry-picked commit, or alternatively if the // commit fetched from the start branch of the remote repository is not an ancestor // of of the local target branch. NotAncestorError target_branch_diverged = 2; // changes_already_applied is returned if the result after applying the cherry pick is empty. ChangesAlreadyAppliedError changes_already_applied = 3; // access_check is set if the RPC failed due to an external access check. AccessCheckError access_check = 4; } } // UserRevertRequest is a request for the UserRevert RPC. message UserRevertRequest { // repository is the repository in which the revert shall be applied. Repository repository = 1 [(target_repository)=true]; // user to execute the action as. Also used to perform authentication and // authorization via an external endpoint. User user = 2; // commit is the commit to revert. Only the `id` field is required. GitCommit commit = 3; // branch_name is the name of the branch onto which the reverted commit shall // be committed. bytes branch_name = 4; // message is the message to use for the revert commit. bytes message = 5; // start_branch_name is is used in case the branch_name branch does not // exist. In that case, it will be created from the start_branch_name. bytes start_branch_name = 6; // start_repository is used in case the branch_name branch does not exist. In // that case, it will be created from start_branch_name in the // start_repository. Repository start_repository = 7; // dry_run will compute the revert, but not update the target branch. bool dry_run = 8; // timestamp is the optional timestamp to use for the created cherry-picked // commit's committer date. If it's not set, the current time will be used. google.protobuf.Timestamp timestamp = 9; // expected_old_oid is the object ID which branch is expected to point to. // This is used as a safety guard to avoid races when branch has been // updated meanwhile to point to a different object ID. Only applicable when // branch_name is set. // // If unset, the target branch will be overwritten regardless of its current // state. If set, it must either contain a valid, full object ID or the // zero object ID in case the branch should be created. Otherwise, this RPC // will return an error. string expected_old_oid = 10; } // UserRevertResponse is a response for the UserRevert RPC. message UserRevertResponse { // CreateTreeError represents an error which happened when computing the // revert. enum CreateTreeError { // NONE denotes that no error occurred. NONE = 0; // protolint:disable:this ENUM_FIELD_NAMES_PREFIX ENUM_FIELD_NAMES_ZERO_VALUE_END_WITH // EMPTY denotes that the revert would've resulted in an empty commit, // typically because it has already been applied to the target branch. EMPTY = 1; // protolint:disable:this ENUM_FIELD_NAMES_PREFIX // CONFLICT denotes that the revert resulted in a conflict. CONFLICT = 2; // protolint:disable:this ENUM_FIELD_NAMES_PREFIX } // branch_update represents details about the updated branch. OperationBranchUpdate branch_update = 1; // create_tree_error contains the error message if creation of the tree // failed. string create_tree_error = 2; // commit_error contains the error message if updating the reference failed. string commit_error = 3; // pre_receive_error contains the error message if the pre-receive hook // failed. string pre_receive_error = 4; // create_tree_error_code contains the error code if creation of the tree // failed. CreateTreeError create_tree_error_code = 5; } // UserRevertError is an error returned by the UserRevert RPC. message UserRevertError { oneof error { // merge_conflict is returned if there is a conflict when applying the revert. MergeConflictError merge_conflict = 1; // changes_already_applied is returned if the result after applying the revert is empty. ChangesAlreadyAppliedError changes_already_applied = 2; // custom_hook contains the error message if the pre-receive hook failed. CustomHookError custom_hook = 3; // not_ancestor is returned if the old tip of the target branch is not an ancestor of the new commit. NotAncestorError not_ancestor = 4; } } // UserCommitFilesActionHeader contains the details of the action to be performed. message UserCommitFilesActionHeader { // ActionType is the type of action to perform. enum ActionType { // CREATE creates a new file. CREATE = 0; // protolint:disable:this ENUM_FIELD_NAMES_PREFIX ENUM_FIELD_NAMES_ZERO_VALUE_END_WITH // CREATE_DIR creates a new directory. CREATE_DIR = 1; // protolint:disable:this ENUM_FIELD_NAMES_PREFIX // UPDATE updates an existing file. UPDATE = 2; // protolint:disable:this ENUM_FIELD_NAMES_PREFIX // MOVE moves an existing file to a new path. MOVE = 3; // protolint:disable:this ENUM_FIELD_NAMES_PREFIX // DELETE deletes an existing file. DELETE = 4; // protolint:disable:this ENUM_FIELD_NAMES_PREFIX // CHMOD changes the permissions of an existing file. CHMOD = 5; // protolint:disable:this ENUM_FIELD_NAMES_PREFIX } // action is the type of the action taken to build a commit. Not all fields are // used for all of the actions. ActionType action = 1; // file_path refers to the file or directory being modified. The meaning differs for each // action: // 1. CREATE: path of the file to create // 2. CREATE_DIR: path of the directory to create // 3. UPDATE: path of the file to update // 4. MOVE: the new path of the moved file // 5. DELETE: path of the file to delete // 6. CHMOD: path of the file to modify permissions for bytes file_path = 2; // previous_path is used in MOVE action to specify the path of the file to move. bytes previous_path = 3; // base64_content indicates the content of the file is base64 encoded. The encoding // must be the standard base64 encoding defined in RFC 4648. Only used for CREATE and // UPDATE actions. bool base64_content = 4; // execute_filemode determines whether the file is created with execute permissions. // The field is only used in CREATE and CHMOD actions. bool execute_filemode = 5; // infer_content should be set to true for move actions that change the file path, but not // its content. It should be set instead of populating the content field. Ignored for // other action types. bool infer_content = 6; } // UserCommitFilesAction is the request message used to stream in the actions to build a commit. message UserCommitFilesAction { oneof user_commit_files_action_payload { // header contains the details of action being performed. Header must be sent before the // content if content is used by the action. UserCommitFilesActionHeader header = 1; // content is the content of the file streamed in one or more messages. Only used with CREATE // and UPDATE actions. bytes content = 2; } } // UserCommitFilesRequestHeader is the header of the UserCommitFiles that defines the commit details, // parent and other information related to the call. message UserCommitFilesRequestHeader { // repository is the target repository where to apply the commit. Repository repository = 1 [(target_repository)=true]; // user to execute the action as. Also used to perform authentication and // authorization via an external endpoint. User user = 2; // branch_name is the name of the branch to point to the new commit. If start_sha and start_branch_name // are not defined, the commit of branch_name is used as the parent commit. bytes branch_name = 3; // commit_message is the message to use in the commit. bytes commit_message = 4; // commit_author_name is the commit author's name. If not provided, the user's name is // used instead. bytes commit_author_name = 5; // commit_author_email is the commit author's email. If not provided, the user's email is // used instead. bytes commit_author_email = 6; // start_branch_name specifies the branch whose commit to use as the parent commit. Takes priority // over branch_name. Optional. bytes start_branch_name = 7; // start_repository specifies which contains the parent commit. If not specified, repository itself // is used to look up the parent commit. Optional. Repository start_repository = 8; // force determines whether to force update the target branch specified by branch_name to // point to the new commit. bool force = 9; // start_sha specifies the SHA of the commit to use as the parent of new commit. Takes priority // over start_branch_name and branch_name. Optional. string start_sha = 10; // timestamp is the optional timestamp to use for the commits as author and // committer date. If it's not set, the current time will be used. google.protobuf.Timestamp timestamp = 11; // expected_old_oid is the object ID which branch is expected to point to. // This is used as a safety guard to avoid races when branch has been // updated meanwhile to point to a different object ID. Only applicable when // branch_name is set. // // If unset, the target branch will be overwritten regardless of its current // state. If set, it must either contain a valid, full object ID or the // zero object ID in case the branch should be created. Otherwise, this RPC // will return an error. string expected_old_oid = 12; // sign controls whether a commit created by Gitaly must be signed using // a signing key configured system-wide. bool sign = 13; } // UserCommitFilesRequest is the request of UserCommitFiles. message UserCommitFilesRequest { oneof user_commit_files_request_payload { // header defines the details of where to commit, the details and which commit to use as the parent. // header must always be sent as the first request of the stream. UserCommitFilesRequestHeader header = 1; // action contains an action to build a commit. There can be multiple actions per stream. UserCommitFilesAction action = 2; } } // UserCommitFilesResponse is the response object of UserCommitFiles. message UserCommitFilesResponse { // branch_update contains the details of the commit and the branch update. OperationBranchUpdate branch_update = 1; // index_error is set to the error message when an invalid action was attempted, such as // trying to create a file that already existed. string index_error = 2; // pre_receive_error is set when the pre-receive hook errored. string pre_receive_error = 3; } // UserCommitFilesError is an error returned by the UserCommitFiles RPC in some specific well // defined error cases. message UserCommitFilesError { oneof error { // access_check is set if the RPC failed due to an external access check. AccessCheckError access_check = 1; // index_update is set to the error message when an operation conflicts with the repository // index, such as creating a file that already exists. IndexError index_update = 2; // custom_hook is set if any custom hook which has running as part of this RPC call has returned // a non-zero exit code. CustomHookError custom_hook = 3; } } // UserRebaseConfirmableRequest is a request for the UserRebaseConfirmable RPC. message UserRebaseConfirmableRequest { // Header contains information to compute the rebase and must be sent as // first message. message Header { // repository is the repository in which the rebase will be computed and // applied. Repository repository = 1 [(target_repository)=true]; // user to execute the action as. Also used to perform authentication and // authorization via an external endpoint. User user = 2; // rebase_id does nothing anymore. string rebase_id = 3 [deprecated=true]; // branch is the branch onto which the rebase shall happen. bytes branch = 4; // branch_sha is the expected object ID which branch currently points to. // This is used as a safety guard to avoid races when branch has been // updated meanwhile. string branch_sha = 5; // remote_repository is the repository which contains the branch which // shall be rebased onto the local branch. Repository remote_repository = 6; // remote_branch contains the branch name which shall re rebased onto the // local branch. bytes remote_branch = 7; // git_push_options contain options which shall be passed to the git hooks // when the local branch gets updated. repeated string git_push_options = 8; // timestamp is the optional timestamp to use for the rebased commits as // committer date. If it's not set, the current time will be used. google.protobuf.Timestamp timestamp = 9; } oneof user_rebase_confirmable_request_payload { // header must be the first request for each request stream // containing details about the rebase to perform. Header header = 1; // apply is the second request that must be made to confirm that // the rebase should be applied to the branch. bool apply = 2; } } // UserRebaseConfirmableResponse is a response for the UserRebaseConfirmable RPC. message UserRebaseConfirmableResponse { oneof user_rebase_confirmable_response_payload { // rebase_sha is the commit the branch will be updated to, it will be present // in the first response. The caller can still abort the rebase. string rebase_sha = 1; // rebase_applied confirms that the rebase has been applied to the branch. // It is present in the second response. bool rebase_applied = 2; } // Deprecated in favour of `UserRebaseConfirmableError`. reserved 3; reserved "pre_receive_error"; // Deprecated in favour of `UserRebaseConfirmableError`. reserved 4; reserved "git_error"; } // UserSquashRequest is a request for the UserSquash RPC. message UserSquashRequest { // repository is the repository into which the squashed commit shall be // written. Repository repository = 1 [(target_repository)=true]; // user to execute the action as. Also used to perform authentication and // authorization via an external endpoint. User user = 2; // start_sha is the object ID of the start commit of the range which shall be // squashed. Must be an ancestor of end_sha. string start_sha = 5; // end_sha is the object ID of the end commit of the range which shall be // squashed. string end_sha = 6; // author will be used as the author of the squashed commit. User author = 7; // commit_message is the message to be used for the squashed commit. bytes commit_message = 8; // timestamp is the optional timestamp to use for the squashed commit as // committer date. If it's not set, the current time will be used. google.protobuf.Timestamp timestamp = 9; reserved 3, 4; reserved "squash_id"; } // UserSquashResponse is a response for the UserSquash RPC. message UserSquashResponse { // squash_sha is the object ID of the squashed commit. string squash_sha = 1; // Deprecated as custom hooks aren't executed. reserved 2; reserved "pre_receive_error"; // git_error is not used anymore. Instead, this RPC always returns a real // error with an optional `UserSquashError`, which may be set on // special errors. reserved 3; reserved "git_error"; } // UserRebaseConfirmableError is a structured error for the UserRebaseConfirmable RPC. message UserRebaseConfirmableError { oneof error { // rebase_conflict is returned in case rebasing commits on top of the start // commit fails with a merge conflict and in case merge squashing commits // fails with a merge conflict. MergeConflictError rebase_conflict = 1; // access_check is set if the RPC failed due to an external access check. AccessCheckError access_check = 2; } } // UserSquashError is an error that may be returned when the UserSquash RPC // fails. message UserSquashError { oneof error { // resolve_revision is returned in case resolving either the start or end // revision has failed. ResolveRevisionError resolve_revision = 1; // rebase_conflict is returned in case rebasing commits on top of the start // commit fails with a merge conflict. MergeConflictError rebase_conflict = 2; } } // UserApplyPatchRequest is a request for the UserApplyPatch RPC. message UserApplyPatchRequest { // Header contains information about how to apply the patches. message Header { // repository is the repository to which the patches shall be applied to. Repository repository = 1 [(target_repository)=true]; // user to execute the action as. Also used to perform authentication and // authorization via an external endpoint. User user = 2; // target_branch is the branch onto which the patches shall be applied. bytes target_branch = 3; // timestamp is the optional timestamp to use for the squashed commit as // committer date. If it's not set, the current time will be used. google.protobuf.Timestamp timestamp = 4; // expected_old_oid is the object ID which branch is expected to point to. // This is used as a safety guard to avoid races when branch has been // updated meanwhile to point to a different object ID. // // If unset, the target branch will be overwritten regardless of its current // state. If set, it must either contain a valid, full object ID or the // zero object ID in case the branch should be created. Otherwise, this RPC // will return an error. string expected_old_oid = 5; } oneof user_apply_patch_request_payload { // header must be sent as the first message and contains information about // how to apply the patches. Header header = 1; // patches contains the patch data. bytes patches = 2; } } // UserApplyPatchResponse is a response for the UserApplyPatch RPC. message UserApplyPatchResponse { // branch_update contains information about the updated branch. OperationBranchUpdate branch_update = 1; } // UserUpdateSubmoduleRequest is a request for the UserUpdateSubmodule RPC. message UserUpdateSubmoduleRequest { // repository is the repository in which the submodule shall be updated. Repository repository = 1 [(target_repository)=true]; // user to execute the action as. Also used to perform authentication and // authorization via an external endpoint. User user = 2; // commit_sha is the object ID the submodule shall be updated to. string commit_sha = 3; // branch is the branch which shall be updated. This is the unqualified name // of the branch, it must not have a "refs/heads/" prefix. bytes branch = 4; // submodule is the path to the submodule which shall be updated. bytes submodule = 5; // commit_message is the message updating the submodule. bytes commit_message = 6; // timestamp is the optional timestamp to use for the commit updating the // submodule as committer date. If it's not set, the current time will be // used. google.protobuf.Timestamp timestamp = 7; // expected_old_oid is the object ID which branch is expected to point to. // This is used as a safety guard to avoid races when branch has been // updated meanwhile to point to a different object ID. // // If unset, the target branch will be overwritten regardless of its current // state. If set, it must either contain a valid, full object ID or the // zero object ID in case the branch should be created. Otherwise, this RPC // will return an error. string expected_old_oid = 8; } // UserUpdateSubmoduleResponse is a response for the UserUpdateSubmodule RPC. message UserUpdateSubmoduleResponse { // branch_update contains information about the updated branch. OperationBranchUpdate branch_update = 1; // pre_receive_error contains an error message if the pre-receive hook // rejects the update. string pre_receive_error = 2; // DEPRECATED: https://gitlab.com/gitlab-org/gitaly/proto/merge_requests/237 reserved 3; reserved "create_tree_error"; // commit_error contains an error message if committing the update fails. string commit_error = 4; }