#!/usr/bin/env 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)
