#!/usr/bin/python2
"""Switch part of the objects file in working set to (possible) bad ones.

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

import common


def Main(_):
  """Switch part of the objects file in working set to (possible) bad ones."""
  working_set = common.ReadWorkingSet()
  objects_file = common.ReadObjectsFile()

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

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

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

  common.WriteWorkingSet(working_set)

  return 0


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