12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#!/usr/bin/env python
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Copyright (c) 2013 The Chromium Authors. All rights reserved.
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# found in the LICENSE file.
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)"""Prepare Performance Test Bisect Tool
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciThis script is used by a try bot to create a working directory and sync an
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)initial copy of the depot for use in bisecting performance regressions.
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)An example usage:
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)./tools/prepare-bisect-perf-regressions.py --working_directory "~/builds"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  --output_buildbot_annotations
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Would result in creating ~/builds/bisect and then populating it with a copy of
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)the depot.
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)"""
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import optparse
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import sys
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfrom auto_bisect import bisect_utils
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)def main():
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  """Does an initial checkout of Chromium then exits."""
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  usage = ('%prog [options] [-- chromium-options]\n'
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci           'Prepares a temporary depot for use on a try bot.')
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  parser = optparse.OptionParser(usage=usage)
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  parser.add_option('-w', '--working_directory',
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    type='str',
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    help='Path to the working directory where the script will '
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    'do an initial checkout of the chromium depot. The '
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    'files will be placed in a subdirectory "bisect" under '
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    'working_directory and that will be used to perform the '
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    'bisection.')
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  parser.add_option('--output_buildbot_annotations',
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                    action='store_true',
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    help='Add extra annotation output for buildbot.')
44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  parser.add_option('--target_platform',
45868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                    type='choice',
46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                    choices=['chromium', 'cros', 'android'],
47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                    default='chromium',
48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                    help='The target platform. Choices are "chromium" (current '
49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                    'platform), "cros", or "android". If you specify something '
50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                    'other than "chromium", you must be properly set up to '
51868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                    'build that platform.')
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  opts, _ = parser.parse_args()
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if not opts.working_directory:
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    print 'Error: missing required parameter: --working_directory'
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    print
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    parser.print_help()
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return 1
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
60424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  if not bisect_utils.CheckIfBisectDepotExists(opts):
618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    try:
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      bisect_utils.CreateBisectDirectoryAndSetupDepot(
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          opts, bisect_utils.DEFAULT_GCLIENT_CUSTOM_DEPS)
648bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    except RuntimeError:
658bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      return 1
66424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return 0
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)if __name__ == '__main__':
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  sys.exit(main())
71