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