#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2020 The ChromiumOS 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)
