/*
 * 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 tradefed.build;

option java_package = "com.android.tradefed.build.proto";
option java_outer_classname = "BuildInformation";

// The representation of a versioned build file
message BuildFile {
  // The version of the file
  string version = 1;
  // The local path of the file.
  string local_path = 2;
}

// The representation of a map of key to a list of versioned files. Similar to
// Tradefed MultiMap structure.
message KeyBuildFilePair {
  // The Key indexing a list of BuildFile that are tracked by the BuildInfo.
  string build_file_key = 1;
  // List of BuildFile that are tracked by the BuildInfo.
  repeated BuildFile file = 2;
}

// Proto representation of IBuildInfo
message BuildInfo {
  // The build identifier of the represented build.
  string build_id = 1;
  // The build flavor. For example: sailfish-userdebug
  string build_flavor = 2;
  // The branch where the build come from: For example: git_main
  string branch = 3;
  // The build attributes, as a key value
  map<string, string> attributes = 4;
  // The versioned files part of the build that are tracked.
  repeated KeyBuildFilePair versioned_file = 5;
  // The type of the IBuildInfo instance.
  // For example: com.android.tradefed.build.BuildInfo
  string build_info_class = 6;
  // Deprecated: Whether or not the build info represents a test resource.
  bool is_test_resource = 7;
}
