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

enum FileType {
  Normal = 0;
  Symlink = 1;
  Executable = 2;
  Conflict = 3 [deprecated = true];
  GitSubmodule = 4;
}

message FileState {
  int64 mtime_millis_since_epoch = 1;
  uint64 size = 2;
  FileType file_type = 3;
  // Set only if file_type is Conflict
  bytes conflict_id = 4 [deprecated = true];
}

message SparsePatterns {
  repeated string prefixes = 1;
}

message TreeState {
  bytes legacy_tree_id = 1;
  // Alternating positive and negative terms if there's a conflict, otherwise a
  // single (positive) value
  repeated bytes tree_ids = 5;
  map<string, FileState> file_states = 2;
  SparsePatterns sparse_patterns = 3;
  WatchmanClock watchman_clock = 4;
}

message WatchmanClock {
  oneof watchman_clock {
    string string_clock = 1;
    int64 unix_timestamp = 2;
  }
}

message Checkout {
  // The operation at which the working copy was updated.
  bytes operation_id = 2;
  // An identifier for this workspace. It is used for looking up the current
  // working-copy commit in the repo view. Currently a human-readable name.
  // TODO: Is it better to make this a UUID and a have map that to a name in
  // config? That way users can rename a workspace.
  string workspace_id = 3;
  // The checked-out commit, which can be viewed as a cache of the working-copy
  // commit ID recorded in `operation_id`'s operation. No longer used.
  // TODO: Delete this mid 2022 or so
  bytes commit_id = 1;
}
