// 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;

  reserved 22;  // assignee_update;

  // 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: 7
  message ExternalIdProto {
    string key = 1;
    int32 accountId = 2;
    string email = 3;
    string password = 4;
    bytes blobId = 5;
    bool isCaseInsensitive = 6;
  }
  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: 22
message LabelTypeProto {
  string name = 1;
  string function = 2; // ENUM as String
  reserved 3; // copy_any_score
  reserved 4; // copy_min_score
  reserved 5; // copy_max_score
  reserved 6; // copy_all_scores_on_merge_first_parent_update
  reserved 7; // copy_all_scores_on_trivial_rebase
  reserved 8; // copy_all_scores_if_no_code_change
  reserved 9; // copy_all_scores_if_no_change
  reserved 10; // copy_values
  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;
  reserved 19; // copy_all_scores_if_list_of_files_did_not_change
  string copy_condition = 20;
  string description = 21;
}

// 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: 9
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;

  // Whether the submit requirement was bypassed during submission (i.e. by
  // performing a push with the %submit option).
  bool forced = 7;
  // Whether this submit requirement result should be filtered out when returned
  // from REST API.
  bool hidden = 8;
}

// 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: 10
message StoredCommentLinkInfoProto {
  reserved 4;  // html

  string name = 1;
  string match = 2;
  bool enabled = 5;
  bool override_only = 6;
  string link = 3;
  string prefix = 7;
  string suffix = 8;
  string text = 9;
}

// 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: 15
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;
  string old_mode = 13; // ENUM as string
  string new_mode = 14; // ENUM as string
}
