// 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: 27
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;
}

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

// 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: 19
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;
}

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

  // 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: 2
message AllCommentContextProto {
  message CommentContextProto {
    int32 line_number = 1;
    string context_line = 2;
  }
  repeated CommentContextProto context = 1;
}

// 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: 8
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
}

// Serialized form of com.google.gerrit.server.patch.gitfilediff.GitFileDiff
// Next ID: 11
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
}

// Serialized form of
// com.google.gerrit.server.patch.fileDiff.FileDiffCacheKey
// Next ID: 8
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;
}

// Serialized form of
// com.google.gerrit.server.patch.filediff.FileDiffOutput
// Next ID: 9
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;
  }
  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;
}
