blob: 6bac43ba9ac50153d8ae1207f0434bfcfe37482d [file] [log] [blame]
// Copyright 2017 The LUCI Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
option go_package = "go.chromium.org/luci/common/proto/gitiles";
package gitiles;
import "go.chromium.org/luci/common/proto/git/commit.proto";
service Gitiles {
// Log retrieves commit log.
rpc Log(LogRequest) returns (LogResponse) {};
// Refs retrieves repo refs.
rpc Refs(RefsRequest) returns (RefsResponse) {};
// Archive retrieves archived contents of the project.
//
// An archive is a shallow bundle of the contents of a repository.
//
// DEPRECATED: Use DownloadFile to obtain plain text files.
// TODO(pprabhu): Migrate known users to DownloadFile and delete this RPC.
rpc Archive(ArchiveRequest) returns (ArchiveResponse) {};
// DownloadFile retrieves a file from the project.
rpc DownloadFile(DownloadFileRequest) returns (DownloadFileResponse) {};
// DownloadDiff retrives a diff of a revision from the project.
rpc DownloadDiff(DownloadDiffRequest) returns (DownloadDiffResponse) {};
// Projects retrieves list of available Gitiles projects.
rpc Projects(ProjectsRequest) returns (ProjectsResponse) {};
// ListFiles retrieves a list of files at the given revision.
rpc ListFiles(ListFilesRequest) returns (ListFilesResponse) {};
}
// LogRequest is request message for Gitiles.Log rpc.
message LogRequest {
// Gitiles project, e.g. "chromium/src" part in
// https://chromium.googlesource.com/chromium/src/+/main
// Required.
string project = 1;
// The commit where to start the listing from.
// The value can be:
// - a git revision as 40-char string or its prefix so long as its unique in repo.
// - a ref such as "refs/heads/branch"
// - a ref defined as n-th parent of R in the form "R~n".
// For example, "main~2" or "deadbeef~1".
// Required.
string committish = 3;
// If specified, only commits not reachable from this commit (inclusive)
// will be returned.
//
// In git's notation, this is
// $ git log ^exclude_ancestors_of committish
// OR
// $ git log exclude_ancestors_of..committish
// https://git-scm.com/docs/gitrevisions#gitrevisions-Theememtwo-dotRangeNotation
//
// For example, given this repo
//
// base -> A -> B -> C == refs/heads/main
// \
// X -> Y -> Z == refs/heads/release
//
// calling Log(committish='refs/heads/release',
// exclude_ancestors_of='refs/heads/main')
// will return ['Z', Y', 'X'].
string exclude_ancestors_of = 2;
// If true, include tree diff in commits.
bool tree_diff = 4;
// Value of next_page_token in LogResponse to continue.
string page_token = 10;
// If > 0, number of commits to retrieve.
int32 page_size = 11;
}
// LogRequest is response message for Gitiles.Log rpc.
message LogResponse {
// Retrieved commits.
repeated git.Commit log = 1;
// A page token for next LogRequest to fetch next page of commits.
string next_page_token = 2;
}
// RefsRequest is a request message of Gitiles.Refs RPC.
message RefsRequest {
// Gitiles project, e.g. "chromium/src" part in
// https://chromium.googlesource.com/chromium/src/+/main
// Required.
string project = 1;
// Limits which refs to resolve to only those matching {refsPath}/*.
//
// Must be "refs" or start with "refs/".
// Must not include glob '*'.
// Use "refs/heads" to retrieve all branches.
//
// To fetch **all** refs in a repo, specify just "refs" but beware of two
// caveats:
// * refs returned include a ref for each patchset for each Gerrit change
// associated with the repo.
// * returned map will contain special "HEAD" ref whose value in resulting map
// will be name of the actual ref to which "HEAD" points, which is typically
// "refs/heads/main".
//
// Thus, if you are looking for all tags and all branches of repo, it's
// recommended to issue two Refs calls limited to "refs/tags" and "refs/heads"
// instead of one call for "refs".
//
// Since Gerrit allows per-ref ACLs, it is possible that some refs matching
// refPrefix would not be present in results because current user isn't granted
// read permission on them.
string refs_path = 2;
}
// RefsResponse is a response message of Gitiles.Refs RPC.
message RefsResponse {
// revisions maps a ref to a revision.
// Git branches have keys start with "refs/heads/".
map<string, string> revisions = 2;
}
// ArchiveRequest is a request message of the Gitiles.Archive RPC.
message ArchiveRequest {
// Gitiles project, e.g. "chromium/src" part in
// https://chromium.googlesource.com/chromium/src/+/main
// Required.
string project = 1;
// The ref at which to generate the project archive for.
//
// viz refs/for/branch or just branch
string ref = 2;
// List copied from
// https://github.com/google/gitiles/blob/65edbe49f2b3882a5979f602383ef0c7b2b8ee0c/java/com/google/gitiles/ArchiveFormat.java
enum Format {
Invalid = 0;
GZIP = 1;
TAR = 2;
BZIP2 = 3;
XZ = 4;
}
// Format of the returned project archive.
Format format = 3;
}
message ArchiveResponse {
// Suggested name of the returned archive.
string filename = 1;
// Contents of the archive streamed from gitiles.
//
// The underlying server RPC streams back the contents. This API simplifies
// the RPC to a non-streaming response.
bytes contents = 2;
}
message DownloadFileRequest {
// Gitiles project, e.g. "chromium/src" part in
// https://chromium.googlesource.com/chromium/src/+/main
// Required.
string project = 1;
// The commit where to start the listing from.
// The value can be:
// - a git revision as 40-char string or its prefix so long as its unique in repo.
// - a ref such as "refs/heads/branch"
// - a ref defined as n-th parent of R in the form "R~n".
// For example, "main~2" or "deadbeef~1".
// Required.
string committish = 2;
// Path relative to the project root to the file to download.
string path = 3;
reserved 4;
reserved "format";
}
message DownloadFileResponse {
// Decoded contents of the downloaded file.
//
// The underlying server RPC streams back the contents. This API simplifies
// the RPC to a non-streaming response.
string contents = 1;
}
message DownloadDiffRequest {
// Gitiles project, e.g. "chromium/src" part in
// https://chromium.googlesource.com/chromium/src/+/main
// Required.
string project = 1;
// The git revision to get the diff at.
// The value can be:
// - a git revision as 40-char string or its prefix so long as its unique in repo.
// - a ref such as "refs/heads/branch"
// - a ref defined as n-th parent of R in the form "R~n".
// For example, "main~2" or "deadbeef~1".
// Required.
string committish = 2;
// Path relative to the project root to the file to limit the diff to.
// Optional.
string path = 3;
}
message DownloadDiffResponse {
// Decoded contents of the diff.
string contents = 1;
}
message ProjectsRequest {
}
message ProjectsResponse {
// List of available Gitiles projects
repeated string projects = 1;
}
message ListFilesRequest {
// Gitiles project, e.g. "chromium/src" part in
// https://chromium.googlesource.com/chromium/src/+/main
// Required.
string project = 1;
// The git revision to list files at.
// The value can be:
// - a git revision as 40-char string or its prefix so long as its unique in repo.
// - a ref such as "refs/heads/branch"
// - a ref defined as n-th parent of R in the form "R~n".
// For example, "main~2" or "deadbeef~1".
// Required.
string committish = 2;
// Path relative to the project root to limit the list to. Only direct
// children will be returned -- the request does not recursively process
// child directories.
// Optional.
string path = 3;
}
message ListFilesResponse {
// List of files.
repeated git.File files = 1;
}