[Notes] [Git][BuildStream/buildstream][master] 4 commits: Move fetch logic from FetchQueue to Element



Title: GitLab

Jürg Billeter pushed to branch master at BuildStream / buildstream

Commits:

6 changed files:

Changes:

  • buildstream/_scheduler/queues/fetchqueue.py
    ... ... @@ -40,10 +40,7 @@ class FetchQueue(Queue):
    40 40
             self._skip_cached = skip_cached
    
    41 41
     
    
    42 42
         def process(self, element):
    
    43
    -        previous_sources = []
    
    44
    -        for source in element.sources():
    
    45
    -            source._fetch(previous_sources)
    
    46
    -            previous_sources.append(source)
    
    43
    +        element._fetch()
    
    47 44
     
    
    48 45
         def status(self, element):
    
    49 46
             # state of dependencies may have changed, recalculate element state
    

  • buildstream/element.py
    ... ... @@ -2022,6 +2022,20 @@ class Element(Plugin):
    2022 2022
     
    
    2023 2023
             return True
    
    2024 2024
     
    
    2025
    +    # _fetch()
    
    2026
    +    #
    
    2027
    +    # Fetch the element's sources.
    
    2028
    +    #
    
    2029
    +    # Raises:
    
    2030
    +    #    SourceError: If one of the element sources has an error
    
    2031
    +    #
    
    2032
    +    def _fetch(self):
    
    2033
    +        previous_sources = []
    
    2034
    +        for source in self.sources():
    
    2035
    +            if source._get_consistency() < Consistency.CACHED:
    
    2036
    +                source._fetch(previous_sources)
    
    2037
    +            previous_sources.append(source)
    
    2038
    +
    
    2025 2039
         #############################################################
    
    2026 2040
         #                   Private Local Methods                   #
    
    2027 2041
         #############################################################
    

  • tests/sources/no-fetch-cached/files/file
    1
    +Hello World!

  • tests/sources/no-fetch-cached/plugins/sources/always_cached.py
    1
    +"""
    
    2
    +always_cached
    
    3
    +=============
    
    4
    +
    
    5
    +This is a test source plugin that is always cached.
    
    6
    +Used to test that BuildStream core does not call fetch() for cached sources.
    
    7
    +
    
    8
    +"""
    
    9
    +
    
    10
    +from buildstream import Consistency, Source
    
    11
    +
    
    12
    +
    
    13
    +class AlwaysCachedSource(Source):
    
    14
    +
    
    15
    +    def configure(self, node):
    
    16
    +        pass
    
    17
    +
    
    18
    +    def preflight(self):
    
    19
    +        pass
    
    20
    +
    
    21
    +    def get_unique_key(self):
    
    22
    +        return None
    
    23
    +
    
    24
    +    def get_consistency(self):
    
    25
    +        return Consistency.CACHED
    
    26
    +
    
    27
    +    def load_ref(self, node):
    
    28
    +        pass
    
    29
    +
    
    30
    +    def get_ref(self):
    
    31
    +        return None
    
    32
    +
    
    33
    +    def set_ref(self, ref, node):
    
    34
    +        pass
    
    35
    +
    
    36
    +    def fetch(self):
    
    37
    +        # Source is always cached, so fetch() should never be called
    
    38
    +        assert False
    
    39
    +
    
    40
    +    def stage(self, directory):
    
    41
    +        pass
    
    42
    +
    
    43
    +
    
    44
    +def setup():
    
    45
    +    return AlwaysCachedSource

  • tests/sources/no-fetch-cached/project.conf
    1
    +# Project with local source plugins
    
    2
    +name: no-fetch-cached
    
    3
    +
    
    4
    +plugins:
    
    5
    +- origin: local
    
    6
    +  path: plugins/sources
    
    7
    +  sources:
    
    8
    +    always_cached: 0

  • tests/sources/no_fetch_cached.py
    1
    +import os
    
    2
    +import pytest
    
    3
    +
    
    4
    +from buildstream import _yaml
    
    5
    +
    
    6
    +from tests.testutils import cli, create_repo
    
    7
    +from tests.testutils.site import HAVE_GIT
    
    8
    +
    
    9
    +DATA_DIR = os.path.join(
    
    10
    +    os.path.dirname(os.path.realpath(__file__)),
    
    11
    +    'no-fetch-cached'
    
    12
    +)
    
    13
    +
    
    14
    +
    
    15
    +##################################################################
    
    16
    +#                              Tests                             #
    
    17
    +##################################################################
    
    18
    +# Test that fetch() is not called for cached sources
    
    19
    +@pytest.mark.skipif(HAVE_GIT is False, reason="git is not available")
    
    20
    +@pytest.mark.datafiles(DATA_DIR)
    
    21
    +def test_no_fetch_cached(cli, tmpdir, datafiles):
    
    22
    +    project = os.path.join(datafiles.dirname, datafiles.basename)
    
    23
    +
    
    24
    +    # Create the repo from 'files' subdir
    
    25
    +    repo = create_repo('git', str(tmpdir))
    
    26
    +    ref = repo.create(os.path.join(project, 'files'))
    
    27
    +
    
    28
    +    # Write out test target with a cached and a non-cached source
    
    29
    +    element = {
    
    30
    +        'kind': 'import',
    
    31
    +        'sources': [
    
    32
    +            repo.source_config(ref=ref),
    
    33
    +            {
    
    34
    +                'kind': 'always_cached'
    
    35
    +            }
    
    36
    +        ]
    
    37
    +    }
    
    38
    +    _yaml.dump(element, os.path.join(project, 'target.bst'))
    
    39
    +
    
    40
    +    # Test fetch of target with a cached and a non-cached source
    
    41
    +    result = cli.run(project=project, args=[
    
    42
    +        'source', 'fetch', 'target.bst'
    
    43
    +    ])
    
    44
    +    result.assert_success()



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