[Notes] [Git][BuildStream/buildstream][lachlan/pickle-yaml-test-list-composite] yamlcache/tests: Make yamlcache.open pass a dir in instead of divining its own default



Title: GitLab

Jonathan Maw pushed to branch lachlan/pickle-yaml-test-list-composite at BuildStream / buildstream

Commits:

3 changed files:

Changes:

  • buildstream/_loader/loader.py
    ... ... @@ -113,7 +113,13 @@ class Loader():
    113 113
                 profile_start(Topics.LOAD_PROJECT, target)
    
    114 114
                 junction, name, loader = self._parse_name(target, rewritable, ticker,
    
    115 115
                                                           fetch_subprojects=fetch_subprojects)
    
    116
    -            with YamlCache.open(self._context) as yaml_cache:
    
    116
    +
    
    117
    +            # XXX This will need to be changed to the context's top-level project if this method
    
    118
    +            # is ever used for subprojects
    
    119
    +            top_dir = self.project.directory
    
    120
    +
    
    121
    +            cache_file = YamlCache.get_cache_file(top_dir)
    
    122
    +            with YamlCache.open(self._context, cache_file) as yaml_cache:
    
    117 123
                     loader._load_file(name, rewritable, ticker, fetch_subprojects, yaml_cache)
    
    118 124
                 deps.append(Dependency(name, junction=junction))
    
    119 125
                 profile_end(Topics.LOAD_PROJECT, target)
    

  • buildstream/_yamlcache.py
    ... ... @@ -54,8 +54,10 @@ class YamlCache():
    54 54
             self._context = context
    
    55 55
     
    
    56 56
         # Writes the yaml cache to the specified path.
    
    57
    -    def write(self):
    
    58
    -        path = self._get_cache_file(self._context)
    
    57
    +    #
    
    58
    +    # Args:
    
    59
    +    #    path (str): The path to the cache file.
    
    60
    +    def write(self, path):
    
    59 61
             parent_dir = os.path.dirname(path)
    
    60 62
             os.makedirs(parent_dir, exist_ok=True)
    
    61 63
             with open(path, "wb") as f:
    
    ... ... @@ -139,14 +141,14 @@ class YamlCache():
    139 141
         #
    
    140 142
         # Args:
    
    141 143
         #    context (Context): The context.
    
    144
    +    #    cachefile (str): The path to the cache file.
    
    142 145
         #
    
    143 146
         # Returns:
    
    144 147
         #    (YamlCache): A YamlCache.
    
    145 148
         @staticmethod
    
    146 149
         @contextmanager
    
    147
    -    def open(context):
    
    150
    +    def open(context, cachefile):
    
    148 151
             # Try to load from disk first
    
    149
    -        cachefile = YamlCache._get_cache_file(context)
    
    150 152
             cache = None
    
    151 153
             if os.path.exists(cachefile):
    
    152 154
                 try:
    
    ... ... @@ -155,12 +157,13 @@ class YamlCache():
    155 157
                 except pickle.UnpicklingError as e:
    
    156 158
                     sys.stderr.write("Failed to load YamlCache, {}\n".format(e))
    
    157 159
     
    
    160
    +        # Failed to load from disk, create a new one
    
    158 161
             if not cache:
    
    159 162
                 cache = YamlCache(context)
    
    160 163
     
    
    161 164
             yield cache
    
    162 165
     
    
    163
    -        cache.write()
    
    166
    +        cache.write(cachefile)
    
    164 167
     
    
    165 168
         # Calculates a key for putting into the cache.
    
    166 169
         @staticmethod
    
    ... ... @@ -170,13 +173,7 @@ class YamlCache():
    170 173
     
    
    171 174
         # Retrieves a path to the yaml cache file.
    
    172 175
         @staticmethod
    
    173
    -    def _get_cache_file(context):
    
    174
    -        try:
    
    175
    -            toplevel_project = context.get_toplevel_project()
    
    176
    -            top_dir = toplevel_project.directory
    
    177
    -        except IndexError:
    
    178
    -            # Context has no projects, fall back to current directory
    
    179
    -            top_dir = os.getcwd()
    
    176
    +    def get_cache_file(top_dir):
    
    180 177
             return os.path.join(top_dir, ".bst", YAML_CACHE_FILENAME)
    
    181 178
     
    
    182 179
     
    

  • tests/frontend/yamlcache.py
    ... ... @@ -52,7 +52,8 @@ def generate_project(tmpdir, ref_storage, with_junction, name="test"):
    52 52
     def with_yamlcache(project_dir):
    
    53 53
         context = Context()
    
    54 54
         project = Project(project_dir, context)
    
    55
    -    with YamlCache.open(context) as yamlcache:
    
    55
    +    cache_file = YamlCache.get_cache_file(project_dir)
    
    56
    +    with YamlCache.open(context, cache_file) as yamlcache:
    
    56 57
             yield yamlcache, project
    
    57 58
     
    
    58 59
     
    
    ... ... @@ -62,12 +63,12 @@ def yamlcache_key(yamlcache, in_file, copy_tree=False):
    62 63
         return key
    
    63 64
     
    
    64 65
     
    
    65
    -def modified_file(input_file):
    
    66
    +def modified_file(input_file, tmpdir):
    
    66 67
         with open(input_file) as f:
    
    67 68
             data = f.read()
    
    68 69
         assert 'variables' not in data
    
    69 70
         data += '\nvariables: {modified: True}\n'
    
    70
    -    _, temppath = tempfile.mkstemp(text=True)
    
    71
    +    _, temppath = tempfile.mkstemp(dir=tmpdir, text=True)
    
    71 72
         with open(temppath, 'w') as f:
    
    72 73
             f.write(data)
    
    73 74
     
    
    ... ... @@ -96,7 +97,7 @@ def test_yamlcache_used(cli, tmpdir, ref_storage, with_junction, move_project):
    96 97
             # *Absolutely* horrible cache corruption to check it's being used
    
    97 98
             # Modifying the data from the cache is fraught with danger,
    
    98 99
             # so instead I'll load a modified version of the original file
    
    99
    -        temppath = modified_file(element_path)
    
    100
    +        temppath = modified_file(element_path, str(tmpdir))
    
    100 101
             contents = _yaml.load(temppath, copy_tree=False, project=prj)
    
    101 102
             key = yamlcache_key(yc, element_path)
    
    102 103
             yc.put(prj, element_path, key, contents)
    



  • [Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]