|
20 | 20 | import os.path
|
21 | 21 | import re
|
22 | 22 | import site
|
| 23 | +import stat |
23 | 24 | import sys
|
24 | 25 | import time
|
25 | 26 | from os.path import dirname, basename
|
@@ -950,13 +951,14 @@ def find_cache_meta(id: str, path: str, manager: BuildManager) -> Optional[Cache
|
950 | 951 | # TODO: May need to take more build options into account
|
951 | 952 | meta_json, data_json = get_cache_names(id, path, manager)
|
952 | 953 | manager.trace('Looking for {} at {}'.format(id, meta_json))
|
953 |
| - if not os.path.exists(meta_json): |
| 954 | + try: |
| 955 | + with open(meta_json, 'r') as f: |
| 956 | + meta_str = f.read() |
| 957 | + manager.trace('Meta {} {}'.format(id, meta_str.rstrip())) |
| 958 | + meta = json.loads(meta_str) # TODO: Errors |
| 959 | + except IOError: |
954 | 960 | manager.log('Could not load cache for {}: could not find {}'.format(id, meta_json))
|
955 | 961 | return None
|
956 |
| - with open(meta_json, 'r') as f: |
957 |
| - meta_str = f.read() |
958 |
| - manager.trace('Meta {} {}'.format(id, meta_str.rstrip())) |
959 |
| - meta = json.loads(meta_str) # TODO: Errors |
960 | 962 | if not isinstance(meta, dict):
|
961 | 963 | manager.log('Could not load cache for {}: meta cache is not a dict: {}'
|
962 | 964 | .format(id, repr(meta)))
|
@@ -1056,11 +1058,10 @@ def validate_meta(meta: Optional[CacheMeta], id: str, path: Optional[str],
|
1056 | 1058 |
|
1057 | 1059 | # TODO: Share stat() outcome with find_module()
|
1058 | 1060 | path = os.path.abspath(path)
|
1059 |
| - # TODO: Don't use isfile() but check st.st_mode |
1060 |
| - if not os.path.isfile(path): |
| 1061 | + st = manager.get_stat(path) # TODO: Errors |
| 1062 | + if not stat.S_ISREG(st.st_mode): |
1061 | 1063 | manager.log('Metadata abandoned for {}: file {} does not exist'.format(id, path))
|
1062 | 1064 | return None
|
1063 |
| - st = manager.get_stat(path) # TODO: Errors |
1064 | 1065 | size = st.st_size
|
1065 | 1066 | if size != meta.size:
|
1066 | 1067 | manager.log('Metadata abandoned for {}: file {} has different size'.format(id, path))
|
|
0 commit comments