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 """Does one of the following depending on the --mode argument: | 6 """Does one of the following depending on the --mode argument: |
7 check Verifies all the inputs exist, touches the file specified with | 7 check Verifies all the inputs exist, touches the file specified with |
8 --result and exits. | 8 --result and exits. |
9 hashtable Puts a manifest file and hard links each of the inputs into the | 9 hashtable Puts a manifest file and hard links each of the inputs into the |
10 output directory. | 10 output directory. |
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 | 278 |
279 @classmethod | 279 @classmethod |
280 def load(cls, data): | 280 def load(cls, data): |
281 """Loads a flattened version.""" | 281 """Loads a flattened version.""" |
282 data = data.copy() | 282 data = data.copy() |
283 out = cls() | 283 out = cls() |
284 for member in out.MEMBERS: | 284 for member in out.MEMBERS: |
285 if member in data: | 285 if member in data: |
286 value = data.pop(member) | 286 value = data.pop(member) |
287 setattr(out, member, value) | 287 setattr(out, member, value) |
288 assert not data, data | 288 # Temporary |
| 289 logging.warning('Dropping data: %s' % data) |
| 290 #assert not data, data |
289 return out | 291 return out |
290 | 292 |
291 @classmethod | 293 @classmethod |
292 def load_file(cls, filename): | 294 def load_file(cls, filename): |
293 """Loads the data from a file or return an empty instance.""" | 295 """Loads the data from a file or return an empty instance.""" |
294 out = cls() | 296 out = cls() |
295 try: | 297 try: |
296 with open(filename, 'r') as f: | 298 with open(filename, 'r') as f: |
297 out = cls.load(json.load(f)) | 299 out = cls.load(json.load(f)) |
298 logging.debug('Loaded %s(%s)' % (cls.__name__, filename)) | 300 logging.debug('Loaded %s(%s)' % (cls.__name__, filename)) |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
385 self.result = result | 387 self.result = result |
386 # Contains the data to ease developer's use-case but that is not strictly | 388 # Contains the data to ease developer's use-case but that is not strictly |
387 # necessary. | 389 # necessary. |
388 self.saved_state = saved_state | 390 self.saved_state = saved_state |
389 self.out_dir = out_dir | 391 self.out_dir = out_dir |
390 | 392 |
391 @classmethod | 393 @classmethod |
392 def load_files(cls, result_file, out_dir): | 394 def load_files(cls, result_file, out_dir): |
393 """Loads state from disk.""" | 395 """Loads state from disk.""" |
394 assert os.path.isabs(result_file), result_file | 396 assert os.path.isabs(result_file), result_file |
395 assert result_file.rsplit('.', 1)[1] == 'result', result_file | |
396 return cls( | 397 return cls( |
397 result_file, | 398 result_file, |
398 Result.load_file(result_file), | 399 Result.load_file(result_file), |
399 SavedState.load_file(result_to_state(result_file)), | 400 SavedState.load_file(result_to_state(result_file)), |
400 out_dir) | 401 out_dir) |
401 | 402 |
402 def load_isolate(self, isolate_file, variables, error): | 403 def load_isolate(self, isolate_file, variables, error): |
403 """Updates self.result and self.saved_state with information loaded from a | 404 """Updates self.result and self.saved_state with information loaded from a |
404 .isolate file. | 405 .isolate file. |
405 | 406 |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
492 return out | 493 return out |
493 | 494 |
494 | 495 |
495 def MODEcheck(_outdir, _state): | 496 def MODEcheck(_outdir, _state): |
496 """No-op.""" | 497 """No-op.""" |
497 return 0 | 498 return 0 |
498 | 499 |
499 | 500 |
500 def MODEhashtable(outdir, state): | 501 def MODEhashtable(outdir, state): |
501 outdir = ( | 502 outdir = ( |
502 outdir or os.path.join(os.path.dirname(state.resultdir), 'hashtable')) | 503 outdir or os.path.join(state.resultdir, 'hashtable')) |
503 if not os.path.isdir(outdir): | 504 if not os.path.isdir(outdir): |
504 os.makedirs(outdir) | 505 os.makedirs(outdir) |
505 for relfile, properties in state.result.files.iteritems(): | 506 for relfile, properties in state.result.files.iteritems(): |
506 infile = os.path.join(state.root_dir, relfile) | 507 infile = os.path.join(state.root_dir, relfile) |
507 outfile = os.path.join(outdir, properties['sha-1']) | 508 outfile = os.path.join(outdir, properties['sha-1']) |
508 if os.path.isfile(outfile): | 509 if os.path.isfile(outfile): |
509 # Just do a quick check that the file size matches. No need to stat() | 510 # Just do a quick check that the file size matches. No need to stat() |
510 # again the input file, grab the value from the dict. | 511 # again the input file, grab the value from the dict. |
511 out_size = os.stat(outfile).st_size | 512 out_size = os.stat(outfile).st_size |
512 in_size = ( | 513 in_size = ( |
513 state.result.files[infile].get('size') or | 514 state.result.files[relfile].get('size') or |
514 os.stat(infile).st_size) | 515 os.stat(infile).st_size) |
515 if in_size == out_size: | 516 if in_size == out_size: |
516 continue | 517 continue |
517 # Otherwise, an exception will be raised. | 518 # Otherwise, an exception will be raised. |
| 519 print 'Mapping %s -> %s' % (outfile, infile) |
518 run_test_from_archive.link_file( | 520 run_test_from_archive.link_file( |
519 outfile, infile, run_test_from_archive.HARDLINK) | 521 outfile, infile, run_test_from_archive.HARDLINK) |
520 return 0 | 522 return 0 |
521 | 523 |
522 | 524 |
523 def MODEremap(outdir, state): | 525 def MODEremap(outdir, state): |
524 if not outdir: | 526 if not outdir: |
525 outdir = tempfile.mkdtemp(prefix='isolate') | 527 outdir = tempfile.mkdtemp(prefix='isolate') |
526 else: | 528 else: |
527 if not os.path.isdir(outdir): | 529 if not os.path.isdir(outdir): |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
743 result_file, | 745 result_file, |
744 input_file, | 746 input_file, |
745 options.mode, | 747 options.mode, |
746 variables, | 748 variables, |
747 out_dir, | 749 out_dir, |
748 parser.error) | 750 parser.error) |
749 | 751 |
750 | 752 |
751 if __name__ == '__main__': | 753 if __name__ == '__main__': |
752 sys.exit(main()) | 754 sys.exit(main()) |
OLD | NEW |