// Copyright (C) 2018 The Android Open Source Project
//
// 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";

package gerrit.cache;

option java_package = "com.google.gerrit.server.cache.proto";

import "proto/entities.proto";

// Serialized form of com.google.gerrit.server.change.ChangeKindCacheImpl.Key.
// Next ID: 4
message ChangeKindKeyProto {
  bytes prior = 1;
  bytes next = 2;
  string strategy_name = 3;
}

// Serialized form of
// com.google.gerrit.server.change.MergeabilityCacheImpl.EntryKey.
// Next ID: 5
message MergeabilityKeyProto {
  bytes commit = 1;
  bytes into = 2;
  string submit_type = 3;
  string merge_strategy = 4;
}

// Serialized form of com.google.gerrit.extensions.auth.oauth.OAuthToken.
// Next ID: 6
message OAuthTokenProto {
  string token = 1;
  string secret = 2;
  string raw = 3;
  // Epoch millis.
  int64 expires_at_millis = 4;
  string provider_id = 5;
}


// Serialized form of com.google.gerrit.server.notedb.ChangeNotesCache.Key.
// Next ID: 4
message ChangeNotesKeyProto {
  string project = 1;
  int32 change_id = 2;
  bytes id = 3;
}

// Serialized from of com.google.gerrit.server.notedb.ChangeNotesState.
//
// Note on embedded protos: this is just for storing in a cache, so some formats
// were chosen ease of coding the initial implementation. In particular, where
// there already exists another serialization mechanism in Gerrit for
// serializing a particular field, we use that rather than defining a new proto
// type. This includes types that can be serialized to proto using
// ProtoConverters as well as NoteDb and indexed types that are serialized using
// JSON. We can always revisit this decision later; it just requires bumping the
// cache version.
//
// Note on nullability: there are a lot of nullable fields in ChangeNotesState
// and its dependencies. It's likely we could make some of them non-nullable,
// but each one of those would be a potentially significant amount of cleanup,
// and there's no guarantee we'd be able to eliminate all of them. (For a less
// complex class, it's likely the cleanup would be more feasible.)
//
// Instead, we just take the tedious yet simple approach of having a "has_foo"
// field for each nullable field "foo", indicating whether or not foo is null.
//
// Next ID: 28
message ChangeNotesStateProto {
  // Effectively required, even though the corresponding ChangeNotesState field
  // is optional, since the field is only absent when NoteDb is disabled, in
  // which case attempting to use the ChangeNotesCache is programmer error.
  bytes meta_id = 1;

  int32 change_id = 2;

  // Next ID: 26
  message ChangeColumnsProto {
    string change_key = 1;

    // Epoch millis.
    int64 created_on_millis = 2;

    // Epoch millis.
    int64 last_updated_on_millis = 3;

    int32 owner = 4;

    string branch = 5;

    int32 current_patch_set_id = 6;
    bool has_current_patch_set_id = 7;

    string subject = 8;

    string topic = 9;
    bool has_topic = 10;

    string original_subject = 11;
    bool has_original_subject = 12;

    string submission_id = 13;
    bool has_submission_id = 14;

    reserved 15;  // assignee
    reserved 16;  // has_assignee

    string status = 17;
    bool has_status = 18;

    bool is_private = 19;

    bool work_in_progress = 20;

    bool review_started = 21;

    int32 revert_of = 22;
    bool has_revert_of = 23;

    string cherry_pick_of = 24;
    bool has_cherry_pick_of = 25;
  }
  // Effectively required, even though the corresponding ChangeNotesState field
  // is optional, since the field is only absent when NoteDb is disabled, in
  // which case attempting to use the ChangeNotesCache is programmer error.
  ChangeColumnsProto columns = 3;

  reserved 4; // past_assignee

  repeated string hashtag = 5;

  repeated devtools.gerritcodereview.PatchSet patch_set = 6;

  repeated devtools.gerritcodereview.PatchSetApproval approval = 7;

  // Next ID: 4
  message ReviewerSetEntryProto {
    string state = 1;
    int32 account_id = 2;
    // Epoch millis.
    int64 timestamp_millis = 3;
  }
  repeated ReviewerSetEntryProto reviewer = 8;

  // Next ID: 4
  message ReviewerByEmailSetEntryProto {
    string state = 1;
    string address = 2;
    // Epoch millis.
    int64 timestamp_millis = 3;
  }
  repeated ReviewerByEmailSetEntryProto reviewer_by_email = 9;

  repeated ReviewerSetEntryProto pending_reviewer = 10;

  repeated ReviewerByEmailSetEntryProto pending_reviewer_by_email = 11;

  repeated int32 past_reviewer = 12;

  // Next ID: 5
  message ReviewerStatusUpdateProto {
    // Epoch millis.
    int64 timestamp_millis = 1;
    int32 updated_by = 2;
    int32 reviewer = 3;
    string state = 4;
  }
  repeated ReviewerStatusUpdateProto reviewer_update = 13;

  // JSON produced from
  // com.google.gerrit.server.index.change.ChangeField.StoredSubmitRecord.
  repeated string submit_record = 14;

  repeated devtools.gerritcodereview.ChangeMessage change_message = 15;

  // JSON produced from com.google.gerrit.entities.Comment.
  repeated string published_comment = 16;

  reserved 17;  // read_only_until
  reserved 18;  // has_read_only_until

  // Number of updates to the change's meta ref.
  int32 update_count = 19;

  string server_id = 20;
  bool has_server_id = 21;

  message AssigneeStatusUpdateProto {
    // Epoch millis.
    int64 timestamp_millis = 1;
    int32 updated_by = 2;
    int32 current_assignee = 3;
    bool has_current_assignee = 4;
  }
  repeated AssigneeStatusUpdateProto assignee_update = 22;

  // An update to the attention set of the change. See class AttentionSetUpdate
  // for context.
  message AttentionSetUpdateProto {
    // Epoch millis.
    int64 timestamp_millis = 1;
    int32 account = 2;
    // Maps to enum AttentionSetUpdate.Operation
    string operation = 3;
    string reason = 4;
  }
  // Only includes the most recent attention set update for each user.
  repeated AttentionSetUpdateProto attention_set_update = 23;

  // Includes all attention set updates.
  repeated AttentionSetUpdateProto all_attention_set_update = 24;

  // Epoch millis.
  int64 merged_on_millis = 25;
  bool has_merged_on = 26;

  repeated SubmitRequirementResultProto submit_requirement_result = 27;
}

// Serialized form of com.google.gerrit.server.query.change.ConflictKey
message ConflictKeyProto {
  bytes commit = 1;
  bytes other_commit = 2;
  string submit_type = 3;
  bool content_merge = 4;
}

// Serialized form of com.google.gerrit.server.query.git.TagSetHolder.
// Next ID: 3
message TagSetHolderProto {
  string project_name = 1;

  // Next ID: 4
  message TagSetProto {
    string project_name = 1;

    // Next ID: 3
    message CachedRefProto {
      bytes id = 1;
      int32 flag = 2;
    }
    map<string, CachedRefProto> ref = 2;

    // Next ID: 3
    message TagProto {
      bytes id = 1;
      bytes flags = 2;
    }
    repeated TagProto tag = 3;
  }
  TagSetProto tags = 2;
}

// Serialized form of
// com.google.gerrit.server.account.externalids.AllExternalIds.
// Next ID: 2
message AllExternalIdsProto {
  // Next ID: 6
  message ExternalIdProto {
    string key = 1;
    int32 accountId = 2;
    string email = 3;
    string password = 4;
    bytes blobId = 5;
  }
  repeated ExternalIdProto external_id = 1;
}

// Serialized form of a list of com.google.gerrit.entities.AccountGroup.UUID
// Next ID: 2
message AllExternalGroupsProto {
  message ExternalGroupProto {
    string groupUuid = 1;
  }
  repeated ExternalGroupProto external_group = 1;
}

// Serialized key for com.google.gerrit.server.account.GroupCacheImpl.
// Next ID: 3
message GroupKeyProto {
  string uuid = 1;
  bytes revision = 2;
}


// Serialized form of com.google.gerrit.entities.InternalGroup.
// Next ID: 11
message InternalGroupProto {
  int32 id = 1;
  string name = 2;
  string description = 3;
  string owner_group_uuid = 4;
  bool is_visible_to_all = 5;
  string group_uuid = 6;
  int64 created_on = 7;
  repeated int32 members_ids = 8;
  repeated string subgroup_uuids = 9;
  bytes ref_state = 10;
}

// Key for com.google.gerrit.server.git.PureRevertCache.
// Next ID: 4
message PureRevertKeyProto {
  string project = 1;
  bytes claimed_original = 2;
  bytes claimed_revert = 3;
}

// Key for com.google.gerrit.server.account.ProjectWatches.
// Next ID: 4
message ProjectWatchProto {
  string project = 1;
  string filter = 2;
  repeated string notify_type = 3;
}

// Serialized form of
// com.google.gerrit.entities.Account.
// Next ID: 9
message AccountProto {
  int32 id = 1;
  int64 registered_on = 2;
  string full_name = 3;
  string display_name = 4;
  string preferred_email = 5;
  bool inactive = 6;
  string status = 7;
  string meta_id = 8;
}

// Serialized form of com.google.gerrit.server.account.CachedAccountDetails.Key.
// Next ID: 3
message AccountKeyProto {
  int32 account_id = 1;
  bytes id = 2;
}

// Serialized form of com.google.gerrit.server.account.CachedAccountDetails.
// Next ID: 4
message AccountDetailsProto {
  AccountProto account = 1;
  repeated ProjectWatchProto project_watch_proto = 2;
  string user_preferences = 3;
}

// Serialized form of com.google.gerrit.entities.Project.
// Next ID: 11
message ProjectProto {
  string name = 1;
  string description = 2;
  map<string, string> boolean_configs = 3;
  string submit_type = 4; // ENUM as String
  string state = 5; // ENUM as String
  string parent = 6;
  string max_object_size_limit = 7;
  string default_dashboard = 8;
  string local_default_dashboard = 9;
  string config_ref_state = 10;
}

// Serialized form of com.google.gerrit.common.data.GroupReference.
// Next ID: 3
message GroupReferenceProto {
  string uuid = 1;
  string name = 2;
}

// Serialized form of com.google.gerrit.common.data.PermissionRule.
// Next ID: 6
message PermissionRuleProto {
  string action = 1; // ENUM as String
  bool force = 2;
  int32 min = 3;
  int32 max = 4;
  GroupReferenceProto group = 5;
}

// Serialized form of com.google.gerrit.common.data.Permission.
// Next ID: 4
message PermissionProto {
  string name = 1;
  bool exclusive_group = 2;
  repeated PermissionRuleProto rules = 3;
}

// Serialized form of com.google.gerrit.common.data.AccessSection.
// Next ID: 3
message AccessSectionProto {
  string name = 1;
  repeated PermissionProto permissions = 2;
}

// Serialized form of com.google.gerrit.server.git.BranchOrderSection.
// Next ID: 2
message BranchOrderSectionProto {
  repeated string branches_in_order = 1;
}

// Serialized form of com.google.gerrit.common.data.ContributorAgreement.
// Next ID: 8
message ContributorAgreementProto {
  string name = 1;
  string description = 2;
  repeated PermissionRuleProto accepted = 3;
  GroupReferenceProto auto_verify = 4;
  string url = 5;
  repeated string exclude_regular_expressions = 6;
  repeated string match_regular_expressions = 7;
}

// Serialized form of com.google.gerrit.entities.Address.
// Next ID: 3
message AddressProto {
  string name = 1;
  string email = 2;
}

// Serialized form of com.google.gerrit.entities.NotifyConfig.
// Next ID: 7
message NotifyConfigProto {
  string name = 1;
  repeated string type = 2; // ENUM as String
  string filter = 3;
  string header = 4; // ENUM as String
  repeated GroupReferenceProto groups = 5;
  repeated AddressProto addresses = 6;
}

// Serialized form of com.google.gerrit.entities.LabelValue.
// Next ID: 3
message LabelValueProto {
  string text = 1;
  int32 value = 2;
}

// Serialized form of com.google.gerrit.common.data.LabelType.
// Next ID: 21
message LabelTypeProto {
  string name = 1;
  string function = 2; // ENUM as String
  bool copy_any_score = 3;
  bool copy_min_score = 4;
  bool copy_max_score = 5;
  bool copy_all_scores_on_merge_first_parent_update = 6;
  bool copy_all_scores_on_trivial_rebase = 7;
  bool copy_all_scores_if_no_code_change = 8;
  bool copy_all_scores_if_no_change = 9;
  repeated int32 copy_values = 10;
  bool allow_post_submit = 11;
  bool ignore_self_approval = 12;
  int32 default_value = 13;
  repeated LabelValueProto values = 14;
  int32 max_negative = 15;
  int32 max_positive = 16;
  bool can_override = 17;
  repeated string ref_patterns = 18;
  bool copy_all_scores_if_list_of_files_did_not_change = 19;
  string copy_condition = 20;
}

// Serialized form of com.google.gerrit.entities.SubmitRequirement.
// Next ID: 7
message SubmitRequirementProto {
  string name = 1;
  string description = 2;
  string applicability_expression = 3;
  string submittability_expression = 4;
  string override_expression = 5;
  bool allow_override_in_child_projects = 6;
}

// Serialized form of com.google.gerrit.entities.SubmitRequirementResult.
// Next ID: 7
message SubmitRequirementResultProto {
  SubmitRequirementProto submit_requirement = 1;
  SubmitRequirementExpressionResultProto applicability_expression_result = 2;
  SubmitRequirementExpressionResultProto submittability_expression_result = 3;
  SubmitRequirementExpressionResultProto override_expression_result = 4;

  // Patchset commit ID at which the submit requirements are evaluated.
  bytes commit = 5;

  // Whether this result was created from a legacy submit record.
  bool legacy = 6;
}

// Serialized form of com.google.gerrit.entities.SubmitRequirementExpressionResult.
// Next ID: 6
message SubmitRequirementExpressionResultProto {
  string expression = 1;
  string status = 2; // enum as string
  string error_message = 3;
  repeated string passing_atoms = 4;
  repeated string failing_atoms = 5;
}

// Serialized form of com.google.gerrit.server.project.ConfiguredMimeTypes.
// Next ID: 4
message ConfiguredMimeTypeProto {
  string type = 1;
  string pattern = 2;
  bool is_regular_expression = 3;
}

// Serialized form of com.google.gerrit.common.data.SubscribeSection.
// Next ID: 4
message SubscribeSectionProto {
  string project_name = 1;
  repeated string multi_match_ref_specs = 2;
  repeated string matching_ref_specs = 3;
}

// Serialized form of com.google.gerrit.entities.StoredCommentLinkInfo.
// Next ID: 7
message StoredCommentLinkInfoProto {
  string name = 1;
  string match = 2;
  string link = 3;
  string html = 4;
  bool enabled = 5;
  bool override_only = 6;
}

// Serialized form of com.google.gerrit.entities.CachedProjectConfigProto.
// Next ID: 20
message CachedProjectConfigProto {
  ProjectProto project = 1;
  repeated GroupReferenceProto group_list = 2;
  repeated PermissionRuleProto accounts_section = 3;
  repeated AccessSectionProto access_sections = 4;
  BranchOrderSectionProto branch_order_section = 5;
  repeated ContributorAgreementProto contributor_agreements = 6;
  repeated NotifyConfigProto notify_configs = 7;
  repeated LabelTypeProto label_sections = 8;
  repeated ConfiguredMimeTypeProto mime_types = 9;
  repeated SubscribeSectionProto subscribe_sections = 10;
  repeated StoredCommentLinkInfoProto comment_links = 11;
  bytes rules_id = 12;
  bytes revision = 13;
  int64 max_object_size_limit = 14;
  bool check_received_objects = 15;
  map<string, ExtensionPanelSectionProto> extension_panels = 16;
  map<string, string> plugin_configs = 17;
  map<string, string> project_level_configs = 18;
  repeated SubmitRequirementProto submit_requirement_sections = 19;

  // Next ID: 2
  message ExtensionPanelSectionProto {
    repeated string section = 1;
  }
}

// Serialized key for com.google.gerrit.server.project.ProjectCacheImpl.
// Next ID: 4
message ProjectCacheKeyProto {
  string project = 1;
  bytes revision = 2;
  bytes global_config_revision = 3; // Hash of All-Projects-projects.config. This
                                    // will only be populated for All-Projects.
}

// Serialized form of com.google.gerrit.server.comment.CommentContextCacheImpl.Key
// Next ID: 7
message CommentContextKeyProto {
  string project = 1;
  string change_id = 2;
  int32 patchset = 3;
  string commentId = 4;

  // hashed with the murmur3_128 hash function
  string path_hash = 5;

  int32 context_padding = 6;
}

// Serialized form of a list of com.google.gerrit.extensions.common.ContextLineInfo
// Next ID: 3
message AllCommentContextProto {
  message CommentContextProto {
    int32 line_number = 1;
    string context_line = 2;
  }
  repeated CommentContextProto context = 1;
  string content_type = 2;
}

// Serialized key for
// com.google.gerrit.server.patch.gitdiff.GitModifiedFilesCacheKey
// Next ID: 5
message GitModifiedFilesKeyProto {
  string project = 1;
  bytes a_tree = 2; // SHA-1 hash of the left git tree ID in the diff
  bytes b_tree = 3; // SHA-1 hash of the right git tree ID in the diff
  int32 rename_score = 4;
}

// Serialized key for
// com.google.gerrit.server.patch.diff.ModifiedFilesCacheKey
// Next ID: 5
message ModifiedFilesKeyProto {
  string project = 1;
  bytes a_commit = 2; // SHA-1 hash of the left commit ID in the diff
  bytes b_commit = 3; // SHA-1 hash of the right commit ID in the diff
  int32 rename_score = 4;
}

// Serialized form of com.google.gerrit.server.patch.gitdiff.ModifiedFile
// Next ID: 4
message ModifiedFileProto {
  string change_type = 1; // ENUM as string
  string old_path = 2;
  string new_path = 3;
}

// Serialized form of a collection of
// com.google.gerrit.server.patch.gitdiff.ModifiedFile
// Next ID: 2
message ModifiedFilesProto {
  repeated ModifiedFileProto modifiedFile = 1;
}

// Serialized form of a collection of
// com.google.gerrit.server.patch.gitfilediff.GitFileDiffCacheImpl.Key
// Next ID: 9
message GitFileDiffKeyProto {
  string project = 1;
  bytes a_tree = 2;
  bytes b_tree = 3;
  string file_path = 4;
  int32 rename_score = 5;
  string diff_algorithm = 6; // ENUM as string
  string whitepsace = 7; // ENUM as string
  bool useTimeout = 8;
}

// Serialized form of com.google.gerrit.server.patch.gitfilediff.GitFileDiff
// Next ID: 12
message GitFileDiffProto {
  message Edit {
    int32 begin_a = 1;
    int32 end_a = 2;
    int32 begin_b = 3;
    int32 end_b = 4;
  }
  repeated Edit edits = 1;
  string file_header = 2;
  string old_path = 3;
  string new_path = 4;
  bytes old_id = 5;
  bytes new_id = 6;
  string old_mode = 7; // ENUM as string
  string new_mode = 8; // ENUM as string
  string change_type = 9; // ENUM as string
  string patch_type = 10; // ENUM as string
  bool negative = 11;
}

// Serialized form of
// com.google.gerrit.server.patch.fileDiff.FileDiffCacheKey
// Next ID: 9
message FileDiffKeyProto {
  string project = 1;
  bytes old_commit = 2;
  bytes new_commit = 3;
  string file_path = 4;
  int32 rename_score = 5;
  string diff_algorithm = 6;
  string whitespace = 7;
  bool useTimeout = 8;
}

// Serialized form of
// com.google.gerrit.server.patch.filediff.FileDiffOutput
// Next ID: 13
message FileDiffOutputProto {
  // Next ID: 5
  message Edit {
    int32 begin_a = 1;
    int32 end_a = 2;
    int32 begin_b = 3;
    int32 end_b = 4;
  }
  // Serialized form  of com.google.gerrit.server.patch.filediff.TaggedEdit
  // Next ID: 3
  message TaggedEdit {
    Edit edit = 1;
    bool due_to_rebase = 2;
  }
  // Next ID: 3
  message ComparisonType {
    int32 parent_num = 1;
    bool auto_merge = 2;
  }
  string old_path = 1;
  string new_path = 2;
  string change_type = 3;
  string patch_type = 4;
  repeated string header_lines = 5;
  int64 size = 6;
  int64 size_delta = 7;
  repeated TaggedEdit edits = 8;
  bytes old_commit = 9;
  bytes new_commit = 10;
  ComparisonType comparison_type = 11;
  bool negative = 12;
}

// Serialized form of com.google.gerrit.server.approval.ApprovalCacheImpl.Key.
// Next ID: 5
message PatchSetApprovalsKeyProto {
  string project = 1;
  int32 change_id = 2;
  int32 patch_set_id = 3;
  bytes id = 4;
}

// Repeated version of PatchSetApprovalProto
// Next ID: 2
message AllPatchSetApprovalsProto {
  repeated devtools.gerritcodereview.PatchSetApproval approval = 1;
}
