1#!/usr/bin/env python
2# Copyright (c) 2013 The Chromium Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6"""Prepare Performance Test Bisect Tool
7
8This script is used by a try bot to create a working directory and sync an
9initial copy of the depot for use in bisecting performance regressions.
10
11An example usage:
12
13./tools/prepare-bisect-perf-regressions.py --working_directory "~/builds"
14  --output_buildbot_annotations
15
16Would result in creating ~/builds/bisect and then populating it with a copy of
17the depot.
18"""
19
20import optparse
21import sys
22
23from auto_bisect import bisect_utils
24
25
26def main():
27  """Does an initial checkout of Chromium then exits."""
28
29  usage = ('%prog [options] [-- chromium-options]\n'
30           'Prepares a temporary depot for use on a try bot.')
31
32  parser = optparse.OptionParser(usage=usage)
33
34  parser.add_option('-w', '--working_directory',
35                    type='str',
36                    help='Path to the working directory where the script will '
37                    'do an initial checkout of the chromium depot. The '
38                    'files will be placed in a subdirectory "bisect" under '
39                    'working_directory and that will be used to perform the '
40                    'bisection.')
41  parser.add_option('--output_buildbot_annotations',
42                    action='store_true',
43                    help='Add extra annotation output for buildbot.')
44  parser.add_option('--target_platform',
45                    type='choice',
46                    choices=['chromium', 'cros', 'android'],
47                    default='chromium',
48                    help='The target platform. Choices are "chromium" (current '
49                    'platform), "cros", or "android". If you specify something '
50                    'other than "chromium", you must be properly set up to '
51                    'build that platform.')
52  opts, _ = parser.parse_args()
53
54  if not opts.working_directory:
55    print 'Error: missing required parameter: --working_directory'
56    print
57    parser.print_help()
58    return 1
59
60  if not bisect_utils.CheckIfBisectDepotExists(opts):
61    try:
62      bisect_utils.CreateBisectDirectoryAndSetupDepot(
63          opts, bisect_utils.DEFAULT_GCLIENT_CUSTOM_DEPS)
64    except RuntimeError:
65      return 1
66  return 0
67
68
69if __name__ == '__main__':
70  sys.exit(main())
71