// Copyright 2020 The Jujutsu Authors // // 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 // // https://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 simple_op_store; message RefConflictLegacy { repeated bytes removes = 1 [deprecated = true]; repeated bytes adds = 2 [deprecated = true]; } // This is redundant with `RefTargetTerm`. It exists for historical reasons. // TODO: Consider deprecating it. message RefConflict { message Term { optional bytes value = 1; } repeated Term removes = 1; repeated Term adds = 2; } // RefTarget that may be serialized in legacy form. message RefTarget { // New `RefConflict` type represents both `commit_id` and `conflict_legacy`. oneof value { bytes commit_id = 1 [deprecated = true]; RefConflictLegacy conflict_legacy = 2 [deprecated = true]; RefConflict conflict = 3; } } // RefTarget term that should be serialized in native form, in which positive // and negative terms alternate. message RefTargetTerm { optional bytes value = 1; } enum RemoteRefState { New = 0; Tracked = 1; } message RemoteBookmark { string remote_name = 1; RefTarget target = 2; // Introduced in jj 0.11. optional RemoteRefState state = 3; } message Bookmark { string name = 1; // Unset if the bookmark has been deleted locally. RefTarget local_target = 2; // Deprecated since jj 0.34. repeated RemoteBookmark remote_bookmarks = 3 [deprecated = true]; } message GitRef { string name = 1; // This field is just for historical reasons (before we had the RefTarget // type). New GitRefs have (only) the target field. // TODO: Delete support for the old format. bytes commit_id = 2 [deprecated = true]; RefTarget target = 3; } message RemoteRef { string name = 1; repeated RefTargetTerm target_terms = 2; RemoteRefState state = 3; } message Tag { string name = 1; RefTarget target = 2; } message View { repeated bytes head_ids = 1; reserved 4; bytes wc_commit_id = 2 [deprecated = true]; map wc_commit_ids = 8; // Local bookmarks and remote bookmarks in legacy form. repeated Bookmark bookmarks = 5; repeated Tag local_tags = 6; // Introduced in jj 0.34. repeated RemoteView remote_views = 11; // Only a subset of the refs. For example, does not include refs/notes/. repeated GitRef git_refs = 3; // This field is just for historical reasons (before we had the RefTarget // type). New Views have (only) the target field. // TODO: Delete support for the old format. bytes git_head_legacy = 7 [deprecated = true]; RefTarget git_head = 9; // Whether "@git" tags have been migrated to remote_views. bool has_git_refs_migrated_to_remote_tags = 12; reserved 10; } message RemoteView { string name = 1; repeated RemoteRef bookmarks = 2; repeated RemoteRef tags = 3; } message Operation { bytes view_id = 1; repeated bytes parents = 2; OperationMetadata metadata = 3; // Introduced in jj 0.30. repeated CommitPredecessors commit_predecessors = 4; // Whether or not `commit_predecessors` is recorded. bool stores_commit_predecessors = 5; } // TODO: Share with store.proto? Do we even need the timezone here? message Timestamp { int64 millis_since_epoch = 1; int32 tz_offset = 2; } message OperationMetadata { Timestamp start_time = 1; Timestamp end_time = 2; string description = 3; string hostname = 4; string username = 5; bool is_snapshot = 7; map tags = 6; } message CommitPredecessors { bytes commit_id = 1; repeated bytes predecessor_ids = 2; }