Changeset 92660 in webkit
- Timestamp:
- Aug 8, 2011 6:26:30 PM (13 years ago)
- Location:
- trunk/Tools
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Tools/ChangeLog
r92656 r92660 1 2011-08-08 Adam Barth <abarth@webkit.org> 2 3 Chromium Windows bots can't figure out what SVN revision they're running 4 https://bugs.webkit.org/show_bug.cgi?id=65893 5 6 Reviewed by Eric Seidel. 7 8 The comment in _engage_awesome_windows_hacks explains why we're making 9 this change. It's ugly and rediculous, but this approach seems better 10 than using shell=True when calling popen. 11 12 * Scripts/webkitpy/common/checkout/scm/svn.py: 13 * Scripts/webkitpy/layout_tests/port/chromium_win.py: 14 1 15 2011-08-08 Adam Barth <abarth@webkit.org> 2 16 -
trunk/Tools/Scripts/webkitpy/common/checkout/scm/svn.py
r92655 r92660 69 69 svn_server_realm = "<http://svn.webkit.org:80> Mac OS Forge" 70 70 71 executable_name = "svn" 72 71 73 _svn_metadata_files = frozenset(['.svn', '_svn']) 72 74 … … 94 96 @classmethod 95 97 def value_from_svn_info(cls, path, field_name): 96 svn_info_args = [ 'svn', 'info']98 svn_info_args = [cls.executable_name, 'info'] 97 99 # FIXME: This method should use a passed in executive or be made an instance method and use self._executive. 98 100 info_output = Executive().run_command(svn_info_args, cwd=path).rstrip() … … 122 124 return "^Committed revision (?P<svn_revision>\d+)\.$" 123 125 126 def _run_svn(self, args, **kwargs): 127 return self.run([self.executable_name] + args, **kwargs) 128 124 129 @memoized 125 130 def svn_version(self): 126 return self. run(['svn','--version', '--quiet'])131 return self._run_svn(['--version', '--quiet']) 127 132 128 133 def working_directory_is_clean(self): 129 return self. run(["svn","diff"], cwd=self.checkout_root, decode_output=False) == ""134 return self._run_svn(["diff"], cwd=self.checkout_root, decode_output=False) == "" 130 135 131 136 def clean_working_directory(self): … … 134 139 # on this checkout at the same time. However, it's much more likely that we're running 135 140 # under windows and svn just sucks (or the user interrupted svn and it failed to clean up). 136 self. run(["svn","cleanup"], cwd=self.checkout_root)141 self._run_svn(["cleanup"], cwd=self.checkout_root) 137 142 138 143 # svn revert -R is not as awesome as git reset --hard. … … 143 148 # added_files() returns directories for SVN, we walk the files in reverse path 144 149 # length order so that we remove files before we try to remove the directories. 145 self. run(["svn","revert", "-R", "."], cwd=self.checkout_root)150 self._run_svn(["revert", "-R", "."], cwd=self.checkout_root) 146 151 for path in added_files: 147 152 # This is robust against cwd != self.checkout_root … … 154 159 155 160 def status_command(self): 156 return [ 'svn', 'status']161 return [self.executable_name, 'status'] 157 162 158 163 def _status_regexp(self, expected_types): … … 172 177 def add(self, path, return_exit_code=False): 173 178 self._add_parent_directories(os.path.dirname(os.path.abspath(path))) 174 return self. run(["svn","add", path], return_exit_code=return_exit_code)179 return self._run_svn(["add", path], return_exit_code=return_exit_code) 175 180 176 181 def _delete_parent_directories(self, path): … … 187 192 abs_path = os.path.abspath(path) 188 193 parent, base = os.path.split(abs_path) 189 result = self. run(["svn","delete", "--force", base], cwd=parent)194 result = self._run_svn(["delete", "--force", base], cwd=parent) 190 195 self._delete_parent_directories(os.path.dirname(abs_path)) 191 196 return result 192 197 193 198 def exists(self, path): 194 return not self. run(["svn","info", path], return_exit_code=True, decode_output=False)199 return not self._run_svn(["info", path], return_exit_code=True, decode_output=False) 195 200 196 201 def changed_files(self, git_commit=None): 197 status_command = [ "svn", "status"]202 status_command = [self.executable_name, "status"] 198 203 status_command.extend(self._patch_directories) 199 204 # ACDMR: Addded, Conflicted, Deleted, Modified or Replaced … … 203 208 # As far as I can tell svn diff --summarize output looks just like svn status output. 204 209 # No file contents printed, thus utf-8 auto-decoding in self.run is fine. 205 status_command = [ "svn", "diff", "--summarize", "-c", revision]210 status_command = [self.executable_name, "diff", "--summarize", "-c", revision] 206 211 return self.run_status_and_extract_filenames(status_command, self._status_regexp("ACDMR")) 207 212 … … 209 214 revisions = [] 210 215 # svn log will exit(1) (and thus self.run will raise) if the path does not exist. 211 log_command = [' svn', 'log', '--quiet', '--limit=%s' % limit, path]212 for line in self. run(log_command, cwd=self.checkout_root).splitlines():216 log_command = ['log', '--quiet', '--limit=%s' % limit, path] 217 for line in self._run_svn(log_command, cwd=self.checkout_root).splitlines(): 213 218 match = re.search('^r(?P<revision>\d+) ', line) 214 219 if not match: … … 234 239 235 240 def head_svn_revision(self): 236 _log.debug('Temporary logging to debug bot...')237 _log.debug(self.checkout_root)238 _log.debug(os.getcwd())239 241 return self.value_from_svn_info(self.checkout_root, 'Revision') 240 242 … … 253 255 254 256 def committer_email_for_revision(self, revision): 255 return self. run(["svn","propget", "svn:author", "--revprop", "-r", revision]).rstrip()257 return self._run_svn(["propget", "svn:author", "--revprop", "-r", revision]).rstrip() 256 258 257 259 def contents_at_revision(self, path, revision): … … 259 261 of path @ revision in the repository.""" 260 262 remote_path = "%s/%s" % (self._repository_url(), path) 261 return self. run(["svn","cat", "-r", revision, remote_path], decode_output=False)263 return self._run_svn(["cat", "-r", revision, remote_path], decode_output=False) 262 264 263 265 def diff_for_revision(self, revision): 264 266 # FIXME: This should probably use cwd=self.checkout_root 265 return self. run(['svn','diff', '-c', revision])267 return self._run_svn(['diff', '-c', revision]) 266 268 267 269 def _bogus_dir_name(self): … … 292 294 self._setup_bogus_dir(log) 293 295 try: 294 args = [' svn', 'diff']296 args = ['diff'] 295 297 if self._bogus_dir: 296 298 args += ['--config-dir', self._bogus_dir] 297 299 args.append(path) 298 return self. run(args, cwd=self.checkout_root)300 return self._run_svn(args, cwd=self.checkout_root) 299 301 finally: 300 302 self._teardown_bogus_dir(log) 301 303 302 304 def show_head(self, path): 303 return self. run(['svn','cat', '-r', 'BASE', path], decode_output=False)305 return self._run_svn(['cat', '-r', 'BASE', path], decode_output=False) 304 306 305 307 def _repository_url(self): … … 308 310 def apply_reverse_diff(self, revision): 309 311 # '-c -revision' applies the inverse diff of 'revision' 310 svn_merge_args = [' svn', 'merge', '--non-interactive', '-c', '-%s' % revision, self._repository_url()]312 svn_merge_args = ['merge', '--non-interactive', '-c', '-%s' % revision, self._repository_url()] 311 313 log("WARNING: svn merge has been known to take more than 10 minutes to complete. It is recommended you use git for rollouts.") 312 log("Running ' %s'" % " ".join(svn_merge_args))314 log("Running 'svn %s'" % " ".join(svn_merge_args)) 313 315 # FIXME: Should this use cwd=self.checkout_root? 314 self. run(svn_merge_args)316 self._run_svn(svn_merge_args) 315 317 316 318 def revert_files(self, file_paths): 317 319 # FIXME: This should probably use cwd=self.checkout_root. 318 self. run(['svn','revert'] + file_paths)320 self._run_svn(['revert'] + file_paths) 319 321 320 322 def commit_with_message(self, message, username=None, password=None, git_commit=None, force_squash=False, changed_files=None): 321 323 # git-commit and force are not used by SVN. 322 svn_commit_args = [" svn", "commit"]324 svn_commit_args = ["commit"] 323 325 324 326 if not username and not self.has_authorization_for_realm(self.svn_server_realm): … … 338 340 return "Dry run, no commit.\nCommitted revision 0." 339 341 340 return self. run(svn_commit_args, cwd=self.checkout_root, error_handler=commit_error_handler)342 return self._run_svn(svn_commit_args, cwd=self.checkout_root, error_handler=commit_error_handler) 341 343 342 344 def svn_commit_log(self, svn_revision): 343 345 svn_revision = self.strip_r_from_svn_revision(svn_revision) 344 return self. run(['svn','log', '--non-interactive', '--revision', svn_revision])346 return self._run_svn(['log', '--non-interactive', '--revision', svn_revision]) 345 347 346 348 def last_svn_commit_log(self): … … 351 353 def propset(self, pname, pvalue, path): 352 354 dir, base = os.path.split(path) 353 return self. run(['svn','pset', pname, pvalue, base], cwd=dir)355 return self._run_svn(['pset', pname, pvalue, base], cwd=dir) 354 356 355 357 def propget(self, pname, path): 356 358 dir, base = os.path.split(path) 357 return self. run(['svn','pget', pname, base], cwd=dir).encode('utf-8').rstrip("\n")359 return self._run_svn(['pget', pname, base], cwd=dir).encode('utf-8').rstrip("\n") -
trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_win.py
r91315 r92660 98 98 assert self._version in self.SUPPORTED_VERSIONS, "%s is not in %s" % (self._version, self.SUPPORTED_VERSIONS) 99 99 self._operating_system = 'win' 100 self._engage_awesome_windows_hacks() 101 102 def _engage_awesome_windows_hacks(self): 103 try: 104 self._executive.run_command(['svn', 'help']) 105 except OSError, e: 106 try: 107 self._executive.run_command(['svn.bat', 'help']) 108 # Chromium Win uses the depot_tools package, which contains a number 109 # of development tools, including Python and svn. Instead of using a 110 # real svn executable, depot_tools indirects via a batch file, called 111 # svn.bat. This batch file allows depot_tools to auto-update the real 112 # svn executable, which is contained in a subdirectory. 113 # 114 # That's all fine and good, except that subprocess.popen can detect 115 # the difference between a real svn executable and batch file when we 116 # don't provide use shell=True. Rather than use shell=True on Windows, 117 # We hack the svn.bat name into the SVN class. 118 _log.debug('Engaging svn.bat Windows hack.') 119 from webkitpy.common.checkout.scm.svn import SVN 120 SVN.executable_name = 'svn.bat' 121 except OSError, e: 122 _log.debug('Failed to engage svn.bat Windows hack.') 100 123 101 124 def setup_environ_for_server(self, server_name=None):
Note: See TracChangeset
for help on using the changeset viewer.