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

Side by Side Diff: client/isolated_format.py

Issue 2060983006: luci-py/isolateserver.py: Add archive support when downloading. (Closed) Base URL: https://github.com/luci/luci-py.git@master
Patch Set: Tests now pass. Created 4 years, 6 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
OLDNEW
1 # Copyright 2014 The LUCI Authors. All rights reserved. 1 # Copyright 2014 The LUCI Authors. All rights reserved.
2 # Use of this source code is governed under the Apache License, Version 2.0 2 # Use of this source code is governed under the Apache License, Version 2.0
3 # that can be found in the LICENSE file. 3 # that can be found in the LICENSE file.
4 4
5 """Understands .isolated files and can do local operations on them.""" 5 """Understands .isolated files and can do local operations on them."""
6 6
7 import hashlib 7 import hashlib
8 import json 8 import json
9 import logging 9 import logging
10 import os 10 import os
(...skipping 19 matching lines...) Expand all
30 SUPPORTED_ALGOS = { 30 SUPPORTED_ALGOS = {
31 'md5': hashlib.md5, 31 'md5': hashlib.md5,
32 'sha-1': hashlib.sha1, 32 'sha-1': hashlib.sha1,
33 'sha-512': hashlib.sha512, 33 'sha-512': hashlib.sha512,
34 } 34 }
35 35
36 36
37 # Used for serialization. 37 # Used for serialization.
38 SUPPORTED_ALGOS_REVERSE = dict((v, k) for k, v in SUPPORTED_ALGOS.iteritems()) 38 SUPPORTED_ALGOS_REVERSE = dict((v, k) for k, v in SUPPORTED_ALGOS.iteritems())
39 39
40 SUPPORTED_ARCHIVES = ['ar']
41
40 42
41 class IsolatedError(ValueError): 43 class IsolatedError(ValueError):
42 """Generic failure to load a .isolated file.""" 44 """Generic failure to load a .isolated file."""
43 pass 45 pass
44 46
45 47
46 class MappingError(OSError): 48 class MappingError(OSError):
47 """Failed to recreate the tree.""" 49 """Failed to recreate the tree."""
48 pass 50 pass
49 51
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 raise IsolatedError('Expected string, got %r' % subsubvalue) 501 raise IsolatedError('Expected string, got %r' % subsubvalue)
500 elif subsubkey == 'm': 502 elif subsubkey == 'm':
501 if not isinstance(subsubvalue, int): 503 if not isinstance(subsubvalue, int):
502 raise IsolatedError('Expected int, got %r' % subsubvalue) 504 raise IsolatedError('Expected int, got %r' % subsubvalue)
503 elif subsubkey == 'h': 505 elif subsubkey == 'h':
504 if not is_valid_hash(subsubvalue, algo): 506 if not is_valid_hash(subsubvalue, algo):
505 raise IsolatedError('Expected sha-1, got %r' % subsubvalue) 507 raise IsolatedError('Expected sha-1, got %r' % subsubvalue)
506 elif subsubkey == 's': 508 elif subsubkey == 's':
507 if not isinstance(subsubvalue, (int, long)): 509 if not isinstance(subsubvalue, (int, long)):
508 raise IsolatedError('Expected int or long, got %r' % subsubvalue) 510 raise IsolatedError('Expected int or long, got %r' % subsubvalue)
511 elif subsubkey == 'a':
512 if subsubvalue not in SUPPORTED_ARCHIVES:
513 raise IsolatedError('Expected one of \'%s\', got %r' % (
514 ', '.join(sorted(SUPPORTED_ARCHIVES)), subsubvalue))
509 else: 515 else:
510 raise IsolatedError('Unknown subsubkey %s' % subsubkey) 516 raise IsolatedError('Unknown subsubkey %s' % subsubkey)
511 if bool('h' in subvalue) == bool('l' in subvalue): 517 if bool('h' in subvalue) == bool('l' in subvalue):
512 raise IsolatedError( 518 raise IsolatedError(
513 'Need only one of \'h\' (sha-1) or \'l\' (link), got: %r' % 519 'Need only one of \'h\' (sha-1) or \'l\' (link), got: %r' %
514 subvalue) 520 subvalue)
515 if bool('h' in subvalue) != bool('s' in subvalue): 521 if bool('h' in subvalue) != bool('s' in subvalue):
516 raise IsolatedError( 522 raise IsolatedError(
517 'Both \'h\' (sha-1) and \'s\' (size) should be set, got: %r' % 523 'Both \'h\' (sha-1) and \'s\' (size) should be set, got: %r' %
518 subvalue) 524 subvalue)
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 data['files'] = dict( 567 data['files'] = dict(
562 (k.replace(wrong_path_sep, os.path.sep), v) 568 (k.replace(wrong_path_sep, os.path.sep), v)
563 for k, v in data['files'].iteritems()) 569 for k, v in data['files'].iteritems())
564 for v in data['files'].itervalues(): 570 for v in data['files'].itervalues():
565 if 'l' in v: 571 if 'l' in v:
566 v['l'] = v['l'].replace(wrong_path_sep, os.path.sep) 572 v['l'] = v['l'].replace(wrong_path_sep, os.path.sep)
567 if 'relative_cwd' in data: 573 if 'relative_cwd' in data:
568 data['relative_cwd'] = data['relative_cwd'].replace( 574 data['relative_cwd'] = data['relative_cwd'].replace(
569 wrong_path_sep, os.path.sep) 575 wrong_path_sep, os.path.sep)
570 return data 576 return data
OLDNEW
« no previous file with comments | « client/cipd.py ('k') | client/isolateserver.py » ('j') | client/run_isolated.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698