// 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 op_store; message RefConflictLegacy { repeated bytes removes = 1 [deprecated = true]; repeated bytes adds = 2 [deprecated = true]; } message RefConflict { message Term { optional bytes value = 1; } repeated Term removes = 1; repeated Term adds = 2; } 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; } } 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; // TODO: How would we support renaming remotes while having undo work? If // the remote name is stored in config, it's going to become a mess if the // remote is renamed but the configs are left unchanged. Should each remote // be identified (here and in configs) by a UUID? repeated RemoteBookmark remote_bookmarks = 3; } 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; RefTarget target = 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; repeated Bookmark bookmarks = 5; repeated Tag tags = 6; // 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; reserved 10; } message Operation { bytes view_id = 1; repeated bytes parents = 2; OperationMetadata metadata = 3; } // 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; }