syntax = "proto3"; package gitks; import "google/protobuf/empty.proto"; import "oid.proto"; // Repository identity used by storage-facing RPCs. message RepositoryHeader { // Logical storage shard or disk name. string storage_name = 1; // Path relative to the storage root, usually ending in `.git` for bare repos. string relative_path = 2; // Optional absolute path for embedded/local deployments. string storage_path = 3; } message Repository { RepositoryHeader header = 1; bool bare = 2; bool empty = 3; ObjectFormat object_format = 4; string default_branch = 5; string git_object_directory = 6; repeated string git_alternate_object_directories = 7; } message RepositoryStatistics { uint64 size_bytes = 1; uint64 loose_object_count = 2; uint64 packed_object_count = 3; uint64 packfile_count = 4; uint64 reference_count = 5; uint64 commit_graph_size_bytes = 6; uint64 multi_pack_index_size_bytes = 7; } message RepositoryConfigEntry { string key = 1; repeated string values = 2; } message RepositoryObjectFormatRequest { RepositoryHeader repository = 1; } message RepositoryObjectFormatResponse { ObjectFormat object_format = 1; } message GetRepositoryRequest { RepositoryHeader repository = 1; } message InitRepositoryRequest { RepositoryHeader repository = 1; bool bare = 2; ObjectFormat object_format = 3; string initial_branch = 4; } message DeleteRepositoryRequest { RepositoryHeader repository = 1; } message RepositoryExistsRequest { RepositoryHeader repository = 1; } message RepositoryExistsResponse { bool exists = 1; } message GetDefaultBranchRequest { RepositoryHeader repository = 1; } message GetDefaultBranchResponse { string name = 1; } message SetDefaultBranchRequest { RepositoryHeader repository = 1; string name = 2; } message GetRepositoryConfigRequest { RepositoryHeader repository = 1; repeated string keys = 2; } message GetRepositoryConfigResponse { repeated RepositoryConfigEntry entries = 1; } message SetRepositoryConfigRequest { RepositoryHeader repository = 1; repeated RepositoryConfigEntry entries = 2; } message RepositoryStatisticsRequest { RepositoryHeader repository = 1; } message RepositoryHealthRequest { RepositoryHeader repository = 1; bool connectivity_only = 2; } message RepositoryHealthResponse { bool ok = 1; repeated string warnings = 2; repeated string errors = 3; RepositoryStatistics statistics = 4; } message GarbageCollectRequest { RepositoryHeader repository = 1; bool prune = 2; bool aggressive = 3; } message RepackRequest { RepositoryHeader repository = 1; bool full = 2; bool write_bitmaps = 3; bool write_multi_pack_index = 4; } message WriteCommitGraphRequest { RepositoryHeader repository = 1; bool replace = 2; bool split = 3; } message RepositoryMaintenanceResponse { bool ok = 1; string stdout = 2; string stderr = 3; } // ── Hooks Management ────────────────────────────────────────────────── message ListHooksRequest { RepositoryHeader repository = 1; } message HookInfo { string hook_type = 1; string level = 2; // "server" or "custom" string path = 3; } message ListHooksResponse { repeated HookInfo hooks = 1; } message SetCustomHookRequest { RepositoryHeader repository = 1; string hook_name = 2; // "pre-receive", "update", "post-receive" string content = 3; // Hook script content } message RemoveCustomHookRequest { RepositoryHeader repository = 1; string hook_name = 2; } // ── Snapshot ────────────────────────────────────────────────────────── enum SnapshotStorage { SNAPSHOT_STORAGE_LOCAL = 0; SNAPSHOT_STORAGE_S3 = 1; SNAPSHOT_STORAGE_GCS = 2; } message SnapshotInfo { string snapshot_id = 1; string relative_path = 2; uint64 size_bytes = 3; string created_at = 4; // ISO 8601 string head_oid = 5; } message CreateSnapshotRequest { RepositoryHeader repository = 1; SnapshotStorage storage = 2; string storage_path = 3; } message CreateSnapshotResponse { string snapshot_id = 1; uint64 size_bytes = 2; string head_oid = 3; } message RestoreSnapshotRequest { RepositoryHeader target_repository = 1; string snapshot_id = 2; SnapshotStorage storage = 3; string storage_path = 4; } message ListSnapshotsRequest { RepositoryHeader repository = 1; uint32 limit = 2; } message ListSnapshotsResponse { repeated SnapshotInfo snapshots = 1; } message DeleteSnapshotRequest { string snapshot_id = 1; SnapshotStorage storage = 2; } // ── Repository Move ────────────────────────────────────────────────── enum MoveRepositoryState { MOVE_STATE_UNKNOWN = 0; MOVE_STATE_PREPARING = 1; MOVE_STATE_TRANSFERRING = 2; MOVE_STATE_VERIFYING = 3; MOVE_STATE_COMPLETED = 4; MOVE_STATE_FAILED = 5; MOVE_STATE_CANCELLED = 6; } message MoveRepositoryRequest { RepositoryHeader source_repository = 1; RepositoryHeader target_repository = 2; } message MoveRepositoryResponse { MoveRepositoryState state = 1; string error_message = 2; } message FetchRepositoryDataRequest { RepositoryHeader repository = 1; } message FetchRepositoryDataResponse { bytes data = 1; bool done = 2; } service RepositoryService { rpc GetRepository(GetRepositoryRequest) returns (Repository); rpc InitRepository(InitRepositoryRequest) returns (Repository); rpc DeleteRepository(DeleteRepositoryRequest) returns (google.protobuf.Empty); rpc RepositoryExists(RepositoryExistsRequest) returns (RepositoryExistsResponse); rpc GetObjectFormat(RepositoryObjectFormatRequest) returns (RepositoryObjectFormatResponse); rpc GetDefaultBranch(GetDefaultBranchRequest) returns (GetDefaultBranchResponse); rpc SetDefaultBranch(SetDefaultBranchRequest) returns (google.protobuf.Empty); rpc GetRepositoryConfig(GetRepositoryConfigRequest) returns (GetRepositoryConfigResponse); rpc SetRepositoryConfig(SetRepositoryConfigRequest) returns (google.protobuf.Empty); rpc GetRepositoryStatistics(RepositoryStatisticsRequest) returns (RepositoryStatistics); rpc CheckRepositoryHealth(RepositoryHealthRequest) returns (RepositoryHealthResponse); rpc GarbageCollect(GarbageCollectRequest) returns (RepositoryMaintenanceResponse); rpc Repack(RepackRequest) returns (RepositoryMaintenanceResponse); rpc WriteCommitGraph(WriteCommitGraphRequest) returns (RepositoryMaintenanceResponse); // Hooks management rpc ListHooks(ListHooksRequest) returns (ListHooksResponse); rpc SetCustomHook(SetCustomHookRequest) returns (google.protobuf.Empty); rpc RemoveCustomHook(RemoveCustomHookRequest) returns (google.protobuf.Empty); // Snapshot operations rpc CreateSnapshot(CreateSnapshotRequest) returns (CreateSnapshotResponse); rpc RestoreSnapshot(RestoreSnapshotRequest) returns (google.protobuf.Empty); rpc ListSnapshots(ListSnapshotsRequest) returns (ListSnapshotsResponse); rpc DeleteSnapshot(DeleteSnapshotRequest) returns (google.protobuf.Empty); // Repository move rpc MoveRepository(MoveRepositoryRequest) returns (MoveRepositoryResponse); rpc FetchRepositoryData(FetchRepositoryDataRequest) returns (stream FetchRepositoryDataResponse); }