Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(79)

Side by Side Diff: tools/svndiff.py

Issue 25447003: Make svndiff.py work on Windows and with svn 1.7. (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tools/svn.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 ''' 2 '''
3 Copyright 2012 Google Inc. 3 Copyright 2012 Google Inc.
4 4
5 Use of this source code is governed by a BSD-style license that can be 5 Use of this source code is governed by a BSD-style license that can be
6 found in the LICENSE file. 6 found in the LICENSE file.
7 ''' 7 '''
8 8
9 ''' 9 '''
10 Generates a visual diff of all pending changes in the local SVN (or git!) 10 Generates a visual diff of all pending changes in the local SVN (or git!)
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 @param dest_dir existing directory within which to write results 216 @param dest_dir existing directory within which to write results
217 @param source_dir 217 @param source_dir
218 """ 218 """
219 # Validate parameters, filling in default values if necessary and possible. 219 # Validate parameters, filling in default values if necessary and possible.
220 path_to_skdiff = os.path.abspath(FindPathToSkDiff(path_to_skdiff)) 220 path_to_skdiff = os.path.abspath(FindPathToSkDiff(path_to_skdiff))
221 if not dest_dir: 221 if not dest_dir:
222 dest_dir = tempfile.mkdtemp() 222 dest_dir = tempfile.mkdtemp()
223 dest_dir = os.path.abspath(dest_dir) 223 dest_dir = os.path.abspath(dest_dir)
224 224
225 os.chdir(source_dir) 225 os.chdir(source_dir)
226 using_svn = os.path.isdir('.svn') 226 svn_repo = svn.Svn('.')
227 using_svn = True
228 try:
229 svn_repo.GetInfo()
230 except:
231 using_svn = False
227 232
228 # Prepare temporary directories. 233 # Prepare temporary directories.
229 modified_flattened_dir = os.path.join(dest_dir, 'modified_flattened') 234 modified_flattened_dir = os.path.join(dest_dir, 'modified_flattened')
230 original_flattened_dir = os.path.join(dest_dir, 'original_flattened') 235 original_flattened_dir = os.path.join(dest_dir, 'original_flattened')
231 diff_dir = os.path.join(dest_dir, 'diffs') 236 diff_dir = os.path.join(dest_dir, 'diffs')
232 for dir in [modified_flattened_dir, original_flattened_dir, diff_dir] : 237 for dir in [modified_flattened_dir, original_flattened_dir, diff_dir] :
233 shutil.rmtree(dir, ignore_errors=True) 238 shutil.rmtree(dir, ignore_errors=True)
234 os.mkdir(dir) 239 os.mkdir(dir)
235 240
236 # Get a list of all locally modified (including added/deleted) files, 241 # Get a list of all locally modified (including added/deleted) files,
237 # descending subdirectories. 242 # descending subdirectories.
238 if using_svn: 243 if using_svn:
239 svn_repo = svn.Svn('.')
240 modified_file_paths = svn_repo.GetFilesWithStatus( 244 modified_file_paths = svn_repo.GetFilesWithStatus(
241 svn.STATUS_ADDED | svn.STATUS_DELETED | svn.STATUS_MODIFIED) 245 svn.STATUS_ADDED | svn.STATUS_DELETED | svn.STATUS_MODIFIED)
242 else: 246 else:
243 modified_file_paths = _GitGetModifiedFiles() 247 modified_file_paths = _GitGetModifiedFiles()
244 248
245 # For each modified file: 249 # For each modified file:
246 # 1. copy its current contents into modified_flattened_dir 250 # 1. copy its current contents into modified_flattened_dir
247 # 2. copy its original contents into original_flattened_dir 251 # 2. copy its original contents into original_flattened_dir
248 for modified_file_path in modified_file_paths: 252 for modified_file_path in modified_file_paths:
249 if modified_file_path.endswith('.json'): 253 if modified_file_path.endswith('.json'):
250 # Special handling for JSON files, in the hopes that they 254 # Special handling for JSON files, in the hopes that they
251 # contain GM result summaries. 255 # contain GM result summaries.
252 (_unused, original_file_path) = tempfile.mkstemp() 256 original_file = tempfile.NamedTemporaryFile(delete = False)
257 original_file.close()
253 if using_svn: 258 if using_svn:
254 svn_repo.ExportBaseVersionOfFile( 259 svn_repo.ExportBaseVersionOfFile(
255 modified_file_path, original_file_path) 260 modified_file_path, original_file.name)
256 else: 261 else:
257 _GitExportBaseVersionOfFile( 262 _GitExportBaseVersionOfFile(
258 modified_file_path, original_file_path) 263 modified_file_path, original_file.name)
259 platform_prefix = re.sub(os.sep, '__', 264 original_directory = os.path.dirname(original_file.name)
260 os.path.dirname(modified_file_path)) + '__' 265 platform_prefix = (re.sub(re.escape(os.sep), '__',
261 _CallJsonDiff(old_json_path=original_file_path, 266 os.path.splitdrive(original_directory)[1])
267 + '__')
268 _CallJsonDiff(old_json_path=original_file.name,
262 new_json_path=modified_file_path, 269 new_json_path=modified_file_path,
263 old_flattened_dir=original_flattened_dir, 270 old_flattened_dir=original_flattened_dir,
264 new_flattened_dir=modified_flattened_dir, 271 new_flattened_dir=modified_flattened_dir,
265 filename_prefix=platform_prefix) 272 filename_prefix=platform_prefix)
266 os.remove(original_file_path) 273 os.remove(original_file.name)
267 else: 274 else:
268 dest_filename = re.sub(os.sep, '__', modified_file_path) 275 dest_filename = re.sub(re.escape(os.sep), '__', modified_file_path)
269 # If the file had STATUS_DELETED, it won't exist anymore... 276 # If the file had STATUS_DELETED, it won't exist anymore...
270 if os.path.isfile(modified_file_path): 277 if os.path.isfile(modified_file_path):
271 shutil.copyfile(modified_file_path, 278 shutil.copyfile(modified_file_path,
272 os.path.join(modified_flattened_dir, 279 os.path.join(modified_flattened_dir,
273 dest_filename)) 280 dest_filename))
274 if using_svn: 281 if using_svn:
275 svn_repo.ExportBaseVersionOfFile( 282 svn_repo.ExportBaseVersionOfFile(
276 modified_file_path, 283 modified_file_path,
277 os.path.join(original_flattened_dir, dest_filename)) 284 os.path.join(original_flattened_dir, dest_filename))
278 else: 285 else:
279 _GitExportBaseVersionOfFile( 286 _GitExportBaseVersionOfFile(
280 modified_file_path, 287 modified_file_path,
281 os.path.join(original_flattened_dir, dest_filename)) 288 os.path.join(original_flattened_dir, dest_filename))
282 289
283 # Run skdiff: compare original_flattened_dir against modified_flattened_dir 290 # Run skdiff: compare original_flattened_dir against modified_flattened_dir
284 RunCommand('%s %s %s %s' % (path_to_skdiff, original_flattened_dir, 291 RunCommand('%s %s %s %s' % (path_to_skdiff, original_flattened_dir,
285 modified_flattened_dir, diff_dir)) 292 modified_flattened_dir, diff_dir))
293
286 print '\nskdiff results are ready in file://%s/index.html' % diff_dir 294 print '\nskdiff results are ready in file://%s/index.html' % diff_dir
287 295
288 def RaiseUsageException(): 296 def RaiseUsageException():
289 raise Exception('%s\nRun with --help for more detail.' % ( 297 raise Exception('%s\nRun with --help for more detail.' % (
290 USAGE_STRING % __file__)) 298 USAGE_STRING % __file__))
291 299
292 def Main(options, args): 300 def Main(options, args):
293 """Allow other scripts to call this script with fake command-line args. 301 """Allow other scripts to call this script with fake command-line args.
294 """ 302 """
295 num_args = len(args) 303 num_args = len(args)
(...skipping 14 matching lines...) Expand all
310 help='path to already-built skdiff tool; if not set, ' 318 help='path to already-built skdiff tool; if not set, '
311 'will search for it in typical directories near this ' 319 'will search for it in typical directories near this '
312 'script') 320 'script')
313 parser.add_option(OPTION_SOURCE_DIR, 321 parser.add_option(OPTION_SOURCE_DIR,
314 action='store', type='string', 322 action='store', type='string',
315 default=os.path.join('expectations', 'gm'), 323 default=os.path.join('expectations', 'gm'),
316 help='root directory within which to compare all ' + 324 help='root directory within which to compare all ' +
317 'files; defaults to "%default"') 325 'files; defaults to "%default"')
318 (options, args) = parser.parse_args() 326 (options, args) = parser.parse_args()
319 Main(options, args) 327 Main(options, args)
OLDNEW
« no previous file with comments | « tools/svn.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698