syntax = "proto3";
import "shared.proto";
package gitaly;
service WikiService {
rpc WikiGetPageVersions(WikiGetPageVersionsRequest) returns (stream WikiGetPageVersionsResponse) {}
rpc WikiWritePage(stream WikiWritePageRequest) returns (WikiWritePageResponse) {}
rpc WikiUpdatePage(stream WikiUpdatePageRequest) returns (WikiUpdatePageResponse) {}
rpc WikiDeletePage(WikiDeletePageRequest) returns (WikiDeletePageResponse) {}
// WikiFindPage returns a stream because the page's raw_data field may be arbitrarily large.
rpc WikiFindPage(WikiFindPageRequest) returns (stream WikiFindPageResponse) {}
rpc WikiFindFile(WikiFindFileRequest) returns (stream WikiFindFileResponse) {}
rpc WikiGetAllPages(WikiGetAllPagesRequest) returns (stream WikiGetAllPagesResponse) {}
rpc WikiGetFormattedData(WikiGetFormattedDataRequest) returns (stream WikiGetFormattedDataResponse) {}
}
message WikiCommitDetails {
bytes name = 1;
bytes email = 2;
bytes message = 3;
int32 user_id = 4;
bytes user_name = 5;
}
message WikiPageVersion {
GitCommit commit = 1;
string format = 2;
}
message WikiPage {
// These fields are only present in the first message of a WikiPage stream
WikiPageVersion version = 1;
string format = 2;
bytes title = 3;
string url_path = 4;
bytes path = 5;
bytes name = 6;
bool historical = 7;
// This field is present in all messages of a WikiPage stream
bytes raw_data = 8;
}
message WikiGetPageVersionsRequest {
Repository repository = 1;
bytes page_path = 2;
int32 page = 3;
int32 per_page = 4;
}
message WikiGetPageVersionsResponse {
repeated WikiPageVersion versions = 1;
}
// This message is sent in a stream because the 'content' field may be large.
message WikiWritePageRequest {
// These following fields are only present in the first message.
Repository repository = 1;
bytes name = 2;
string format = 3;
WikiCommitDetails commit_details = 4;
// This field is present in all messages.
bytes content = 5;
}
message WikiWritePageResponse {
bytes duplicate_error = 1;
}
message WikiUpdatePageRequest {
// There fields are only present in the first message of the stream
Repository repository = 1;
bytes page_path = 2;
bytes title = 3;
string format = 4;
WikiCommitDetails commit_details = 5;
// This field is present in all messages
bytes content = 6;
}
message WikiUpdatePageResponse {
bytes error = 1;
}
message WikiDeletePageRequest {
Repository repository = 1;
bytes page_path = 2;
WikiCommitDetails commit_details = 3;
}
message WikiDeletePageResponse {}
message WikiFindPageRequest {
Repository repository = 1;
bytes title = 2;
bytes revision = 3;
bytes directory = 4;
}
// WikiFindPageResponse is a stream because we need multiple WikiPage
// messages to send the raw_data field.
message WikiFindPageResponse {
WikiPage page = 1;
}
message WikiFindFileRequest {
Repository repository = 1;
bytes name = 2;
// Optional: revision
bytes revision = 3;
}
message WikiFindFileResponse {
// If 'name' is empty, the file was not found.
bytes name = 1;
string mime_type = 2;
bytes raw_data = 3;
bytes path = 4;
}
message WikiGetAllPagesRequest {
Repository repository = 1;
// Passing 0 means no limit is applied
uint32 limit = 2;
}
// The WikiGetAllPagesResponse stream is a concatenation of WikiPage streams
message WikiGetAllPagesResponse {
WikiPage page = 1;
// When end_of_page is true it signals a change of page for the next Response message (if any)
bool end_of_page = 2;
}
message WikiGetFormattedDataRequest {
Repository repository = 1;
bytes title = 2;
bytes revision = 3;
bytes directory = 4;
}
message WikiGetFormattedDataResponse {
bytes data = 1;
}