OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """ This module contains miscellaneous tools used by the buildbot scripts. """ | 6 """ This module contains miscellaneous tools. """ |
7 | 7 |
8 import os | 8 import os |
9 | 9 |
10 from git_utils import GIT | |
11 import shell_utils | |
12 | |
13 | 10 |
14 # Absolute path to the root of this Skia buildbot checkout. | 11 # Absolute path to the root of this Skia buildbot checkout. |
15 BUILDBOT_PATH = os.path.realpath(os.path.join( | 12 BUILDBOT_PATH = os.path.realpath(os.path.join( |
16 os.path.dirname(os.path.abspath(__file__)), | 13 os.path.dirname(os.path.abspath(__file__)), |
17 os.pardir, os.pardir, os.pardir)) | 14 os.pardir, os.pardir, os.pardir)) |
18 | 15 |
19 | 16 |
20 def ArgsToDict(argv): | 17 def ArgsToDict(argv): |
21 """ Collect command-line arguments of the form '--key value' into a | 18 """ Collect command-line arguments of the form '--key value' into a |
22 dictionary. Fail if the arguments do not fit this format. """ | 19 dictionary. Fail if the arguments do not fit this format. """ |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 self._origin = os.getcwd() | 83 self._origin = os.getcwd() |
87 if self._verbose: | 84 if self._verbose: |
88 print 'chdir %s' % self._destination | 85 print 'chdir %s' % self._destination |
89 os.chdir(self._destination) | 86 os.chdir(self._destination) |
90 | 87 |
91 def __exit__(self, *args): | 88 def __exit__(self, *args): |
92 """Change back to the original directory.""" | 89 """Change back to the original directory.""" |
93 if self._verbose: | 90 if self._verbose: |
94 print 'chdir %s' % self._origin | 91 print 'chdir %s' % self._origin |
95 os.chdir(self._origin) | 92 os.chdir(self._origin) |
96 | |
97 | |
98 class GitBranch(object): | |
99 """Class to manage git branches. | |
100 | |
101 This class allows one to create a new branch in a repository to make changes, | |
102 then it commits the changes, switches to master branch, and deletes the | |
103 created temporary branch upon exit. | |
104 """ | |
105 def __init__(self, branch_name, commit_msg, upload=True, commit_queue=False): | |
106 self._branch_name = branch_name | |
107 self._commit_msg = commit_msg | |
108 self._upload = upload | |
109 self._commit_queue = commit_queue | |
110 self._patch_set = 0 | |
111 | |
112 def __enter__(self): | |
113 shell_utils.run([GIT, 'reset', '--hard', 'HEAD']) | |
114 shell_utils.run([GIT, 'checkout', 'master']) | |
115 if self._branch_name in shell_utils.run([GIT, 'branch']): | |
116 shell_utils.run([GIT, 'branch', '-D', self._branch_name]) | |
117 shell_utils.run([GIT, 'checkout', '-b', self._branch_name, | |
118 '-t', 'origin/master']) | |
119 return self | |
120 | |
121 def commit_and_upload(self, use_commit_queue=False): | |
122 shell_utils.run([GIT, 'commit', '-a', '-m', | |
123 self._commit_msg]) | |
124 upload_cmd = [GIT, 'cl', 'upload', '-f', '--bypass-hooks', | |
125 '--bypass-watchlists'] | |
126 self._patch_set += 1 | |
127 if self._patch_set > 1: | |
128 upload_cmd.extend(['-t', 'Patch set %d' % self._patch_set]) | |
129 if use_commit_queue: | |
130 upload_cmd.append('--use-commit-queue') | |
131 shell_utils.run(upload_cmd) | |
132 | |
133 def __exit__(self, exc_type, _value, _traceback): | |
134 if self._upload: | |
135 # Only upload if no error occurred. | |
136 try: | |
137 if exc_type is None: | |
138 self.commit_and_upload(use_commit_queue=self._commit_queue) | |
139 finally: | |
140 shell_utils.run([GIT, 'checkout', 'master']) | |
141 shell_utils.run([GIT, 'branch', '-D', self._branch_name]) | |
142 | |
OLD | NEW |