#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2020 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Change portions of the object files to good.

The "portion" is defined by the file (which is passed as the only argument to
this script) content. Every line in the file is an object index, which will be
set to good (mark as 0).

This script is meant to be specifically used with the set_file test. This uses
the set files generated by binary_search_state to do the switching.
"""

from __future__ import print_function

import os
import sys

from binary_search_tool.test import common


def Main(_):
  working_set = common.ReadWorkingSet()

  if not os.path.exists(os.environ['BISECT_GOOD_SET']):
    print('Good set file does not exist!')
    return 1

  object_index = common.ReadObjectIndex(os.environ['BISECT_GOOD_SET'])

  for oi in object_index:
    working_set[int(oi)] = 0

  common.WriteWorkingSet(working_set)

  return 0


if __name__ == '__main__':
  retval = Main(sys.argv)
  sys.exit(retval)
