[Notes] [Git][BuildStream/buildstream][master] 6 commits: tests/sources/git.py: Refactor ref-not-in-track test to use parameterization



Title: GitLab

Tristan Van Berkom pushed to branch master at BuildStream / buildstream

Commits:

10 changed files:

Changes:

  • buildstream/__init__.py
    ... ... @@ -28,7 +28,7 @@ if "_BST_COMPLETION" not in os.environ:
    28 28
     
    
    29 29
         from .utils import UtilError, ProgramNotFoundError
    
    30 30
         from .sandbox import Sandbox, SandboxFlags, SandboxCommandError
    
    31
    -    from .types import Scope, Consistency
    
    31
    +    from .types import Scope, Consistency, CoreWarnings
    
    32 32
         from .plugin import Plugin
    
    33 33
         from .source import Source, SourceError, SourceFetcher
    
    34 34
         from .element import Element, ElementError
    

  • buildstream/_loader/loader.py
    ... ... @@ -36,7 +36,7 @@ from .types import Symbol, Dependency
    36 36
     from .loadelement import LoadElement
    
    37 37
     from . import MetaElement
    
    38 38
     from . import MetaSource
    
    39
    -from ..plugin import CoreWarnings
    
    39
    +from ..types import CoreWarnings
    
    40 40
     from .._message import Message, MessageType
    
    41 41
     
    
    42 42
     
    

  • buildstream/_project.py
    ... ... @@ -33,7 +33,7 @@ from ._artifactcache import ArtifactCache
    33 33
     from .sandbox import SandboxRemote
    
    34 34
     from ._elementfactory import ElementFactory
    
    35 35
     from ._sourcefactory import SourceFactory
    
    36
    -from .plugin import CoreWarnings
    
    36
    +from .types import CoreWarnings
    
    37 37
     from ._projectrefs import ProjectRefs, ProjectRefStorage
    
    38 38
     from ._versions import BST_FORMAT_VERSION
    
    39 39
     from ._loader import Loader
    

  • buildstream/element.py
    ... ... @@ -96,10 +96,9 @@ from . import _cachekey
    96 96
     from . import _signals
    
    97 97
     from . import _site
    
    98 98
     from ._platform import Platform
    
    99
    -from .plugin import CoreWarnings
    
    100 99
     from .sandbox._config import SandboxConfig
    
    101 100
     from .sandbox._sandboxremote import SandboxRemote
    
    102
    -from .types import _KeyStrength
    
    101
    +from .types import _KeyStrength, CoreWarnings
    
    103 102
     
    
    104 103
     from .storage.directory import Directory
    
    105 104
     from .storage._filebaseddirectory import FileBasedDirectory
    

  • buildstream/plugin.py
    ... ... @@ -119,6 +119,7 @@ from . import _yaml
    119 119
     from . import utils
    
    120 120
     from ._exceptions import PluginError, ImplError
    
    121 121
     from ._message import Message, MessageType
    
    122
    +from .types import CoreWarnings
    
    122 123
     
    
    123 124
     
    
    124 125
     class Plugin():
    
    ... ... @@ -766,38 +767,6 @@ class Plugin():
    766 767
                 return self.name
    
    767 768
     
    
    768 769
     
    
    769
    -class CoreWarnings():
    
    770
    -    """CoreWarnings()
    
    771
    -
    
    772
    -    Some common warnings which are raised by core functionalities within BuildStream are found in this class.
    
    773
    -    """
    
    774
    -
    
    775
    -    OVERLAPS = "overlaps"
    
    776
    -    """
    
    777
    -    This warning will be produced when buildstream detects an overlap on an element
    
    778
    -        which is not whitelisted. See :ref:`Overlap Whitelist <public_overlap_whitelist>`
    
    779
    -    """
    
    780
    -
    
    781
    -    REF_NOT_IN_TRACK = "ref-not-in-track"
    
    782
    -    """
    
    783
    -    This warning will be produced when a source is configured with a reference
    
    784
    -    which is found to be invalid based on the configured track
    
    785
    -    """
    
    786
    -
    
    787
    -    BAD_ELEMENT_SUFFIX = "bad-element-suffix"
    
    788
    -    """
    
    789
    -    This warning will be produced when an element whose name does not end in .bst
    
    790
    -    is referenced either on the command line or by another element
    
    791
    -    """
    
    792
    -
    
    793
    -
    
    794
    -__CORE_WARNINGS = [
    
    795
    -    value
    
    796
    -    for name, value in CoreWarnings.__dict__.items()
    
    797
    -    if not name.startswith("__")
    
    798
    -]
    
    799
    -
    
    800
    -
    
    801 770
     # Hold on to a lookup table by counter of all instantiated plugins.
    
    802 771
     # We use this to send the id back from child processes so we can lookup
    
    803 772
     # corresponding element/source in the master process.
    
    ... ... @@ -828,6 +797,24 @@ def _plugin_lookup(unique_id):
    828 797
         return __PLUGINS_TABLE[unique_id]
    
    829 798
     
    
    830 799
     
    
    800
    +# No need for unregister, WeakValueDictionary() will remove entries
    
    801
    +# in itself when the referenced plugins are garbage collected.
    
    802
    +def _plugin_register(plugin):
    
    803
    +    global __PLUGINS_UNIQUE_ID                # pylint: disable=global-statement
    
    804
    +    __PLUGINS_UNIQUE_ID += 1
    
    805
    +    __PLUGINS_TABLE[__PLUGINS_UNIQUE_ID] = plugin
    
    806
    +    return __PLUGINS_UNIQUE_ID
    
    807
    +
    
    808
    +
    
    809
    +# A local table for _prefix_warning()
    
    810
    +#
    
    811
    +__CORE_WARNINGS = [
    
    812
    +    value
    
    813
    +    for name, value in CoreWarnings.__dict__.items()
    
    814
    +    if not name.startswith("__")
    
    815
    +]
    
    816
    +
    
    817
    +
    
    831 818
     # _prefix_warning():
    
    832 819
     #
    
    833 820
     # Prefix a warning with the plugin kind. CoreWarnings are not prefixed.
    
    ... ... @@ -843,12 +830,3 @@ def _prefix_warning(plugin, warning):
    843 830
         if any((warning is core_warning for core_warning in __CORE_WARNINGS)):
    
    844 831
             return warning
    
    845 832
         return "{}:{}".format(plugin.get_kind(), warning)
    846
    -
    
    847
    -
    
    848
    -# No need for unregister, WeakValueDictionary() will remove entries
    
    849
    -# in itself when the referenced plugins are garbage collected.
    
    850
    -def _plugin_register(plugin):
    
    851
    -    global __PLUGINS_UNIQUE_ID                # pylint: disable=global-statement
    
    852
    -    __PLUGINS_UNIQUE_ID += 1
    
    853
    -    __PLUGINS_TABLE[__PLUGINS_UNIQUE_ID] = plugin
    
    854
    -    return __PLUGINS_UNIQUE_ID

  • buildstream/plugins/sources/git.py
    ... ... @@ -131,13 +131,14 @@ details on common configuration options for sources.
    131 131
     
    
    132 132
     **Configurable Warnings:**
    
    133 133
     
    
    134
    -This plugin provides the following configurable warnings:
    
    134
    +This plugin provides the following :ref:`configurable warnings <configurable_warnings>`:
    
    135 135
     
    
    136
    -- 'git:inconsistent-submodule' - A submodule was found to be missing from the underlying git repository.
    
    136
    +- ``git:inconsistent-submodule`` - A submodule was found to be missing from the underlying git repository.
    
    137 137
     
    
    138
    -This plugin also utilises the following configurable core plugin warnings:
    
    138
    +This plugin also utilises the following configurable :class:`core warnings <buildstream.types.CoreWarnings>`:
    
    139 139
     
    
    140
    -- 'ref-not-in-track' - The provided ref was not found in the provided track in the element's git repository.
    
    140
    +- :attr:`ref-not-in-track <buildstream.types.CoreWarnings.REF_NOT_IN_TRACK>` - The provided ref was not
    
    141
    +  found in the provided track in the element's git repository.
    
    141 142
     """
    
    142 143
     
    
    143 144
     import os
    
    ... ... @@ -149,15 +150,14 @@ from tempfile import TemporaryFile
    149 150
     
    
    150 151
     from configparser import RawConfigParser
    
    151 152
     
    
    152
    -from buildstream import Source, SourceError, Consistency, SourceFetcher
    
    153
    +from buildstream import Source, SourceError, Consistency, SourceFetcher, CoreWarnings
    
    153 154
     from buildstream import utils
    
    154
    -from buildstream.plugin import CoreWarnings
    
    155 155
     from buildstream.utils import move_atomic, DirectoryExistsError
    
    156 156
     
    
    157 157
     GIT_MODULES = '.gitmodules'
    
    158 158
     
    
    159 159
     # Warnings
    
    160
    -INCONSISTENT_SUBMODULE = "inconsistent-submodules"
    
    160
    +WARN_INCONSISTENT_SUBMODULE = "inconsistent-submodule"
    
    161 161
     
    
    162 162
     
    
    163 163
     # Because of handling of submodules, we maintain a GitMirror
    
    ... ... @@ -408,7 +408,8 @@ class GitMirror(SourceFetcher):
    408 408
                          "underlying git repository with `git submodule add`."
    
    409 409
     
    
    410 410
                 self.source.warn("{}: Ignoring inconsistent submodule '{}'"
    
    411
    -                             .format(self.source, submodule), detail=detail, warning_token=INCONSISTENT_SUBMODULE)
    
    411
    +                             .format(self.source, submodule), detail=detail,
    
    412
    +                             warning_token=WARN_INCONSISTENT_SUBMODULE)
    
    412 413
     
    
    413 414
                 return None
    
    414 415
     
    

  • buildstream/source.py
    ... ... @@ -391,7 +391,8 @@ class Source(Plugin):
    391 391
     
    
    392 392
             If the backend in question supports resolving references from
    
    393 393
             a symbolic tracking branch or tag, then this should be implemented
    
    394
    -        to perform this task on behalf of ``build-stream track`` commands.
    
    394
    +        to perform this task on behalf of :ref:`bst track <invoking_track>`
    
    395
    +        commands.
    
    395 396
     
    
    396 397
             This usually requires fetching new content from a remote origin
    
    397 398
             to see if a new ref has appeared for your branch or tag. If the
    

  • buildstream/types.py
    ... ... @@ -81,6 +81,31 @@ class Consistency():
    81 81
         """
    
    82 82
     
    
    83 83
     
    
    84
    +class CoreWarnings():
    
    85
    +    """CoreWarnings()
    
    86
    +
    
    87
    +    Some common warnings which are raised by core functionalities within BuildStream are found in this class.
    
    88
    +    """
    
    89
    +
    
    90
    +    OVERLAPS = "overlaps"
    
    91
    +    """
    
    92
    +    This warning will be produced when buildstream detects an overlap on an element
    
    93
    +        which is not whitelisted. See :ref:`Overlap Whitelist <public_overlap_whitelist>`
    
    94
    +    """
    
    95
    +
    
    96
    +    REF_NOT_IN_TRACK = "ref-not-in-track"
    
    97
    +    """
    
    98
    +    This warning will be produced when a source is configured with a reference
    
    99
    +    which is found to be invalid based on the configured track
    
    100
    +    """
    
    101
    +
    
    102
    +    BAD_ELEMENT_SUFFIX = "bad-element-suffix"
    
    103
    +    """
    
    104
    +    This warning will be produced when an element whose name does not end in .bst
    
    105
    +    is referenced either on the command line or by another element
    
    106
    +    """
    
    107
    +
    
    108
    +
    
    84 109
     # _KeyStrength():
    
    85 110
     #
    
    86 111
     # Strength of cache key
    

  • doc/source/format_project.rst
    ... ... @@ -143,7 +143,7 @@ Individual warnings can be configured as fatal by setting ``fatal-warnings`` to
    143 143
       - ref-not-in-track
    
    144 144
       - <plugin>:<warning>
    
    145 145
     
    
    146
    -BuildStream provides a collection of :class:`Core Warnings <buildstream.plugin.CoreWarnings>` which may be raised
    
    146
    +BuildStream provides a collection of :class:`Core Warnings <buildstream.types.CoreWarnings>` which may be raised
    
    147 147
     by a variety of plugins. Other configurable warnings are plugin specific and should be noted within their individual documentation.
    
    148 148
     
    
    149 149
     .. note::
    

  • tests/sources/git.py
    ... ... @@ -414,45 +414,17 @@ def test_submodule_track_no_ref_or_track(cli, tmpdir, datafiles):
    414 414
     
    
    415 415
     @pytest.mark.skipif(HAVE_GIT is False, reason="git is not available")
    
    416 416
     @pytest.mark.datafiles(os.path.join(DATA_DIR, 'template'))
    
    417
    -def test_ref_not_in_track_warn(cli, tmpdir, datafiles):
    
    417
    +@pytest.mark.parametrize("fail", ['warn', 'error'])
    
    418
    +def test_ref_not_in_track(cli, tmpdir, datafiles, fail):
    
    418 419
         project = os.path.join(datafiles.dirname, datafiles.basename)
    
    419 420
     
    
    420
    -    # Create the repo from 'repofiles', create a branch without latest commit
    
    421
    -    repo = create_repo('git', str(tmpdir))
    
    422
    -    ref = repo.create(os.path.join(project, 'repofiles'))
    
    423
    -
    
    424
    -    gitsource = repo.source_config(ref=ref)
    
    425
    -
    
    426
    -    # Overwrite the track value to the added branch
    
    427
    -    gitsource['track'] = 'foo'
    
    428
    -
    
    429
    -    # Write out our test target
    
    430
    -    element = {
    
    431
    -        'kind': 'import',
    
    432
    -        'sources': [
    
    433
    -            gitsource
    
    434
    -        ]
    
    435
    -    }
    
    436
    -    _yaml.dump(element, os.path.join(project, 'target.bst'))
    
    437
    -
    
    438
    -    # Assert the warning is raised as ref is not in branch foo.
    
    439
    -    # Assert warning not error to the user, when not set as fatal.
    
    440
    -    result = cli.run(project=project, args=['build', 'target.bst'])
    
    441
    -    assert "The ref provided for the element does not exist locally" in result.stderr
    
    442
    -
    
    443
    -
    
    444
    -@pytest.mark.skipif(HAVE_GIT is False, reason="git is not available")
    
    445
    -@pytest.mark.datafiles(os.path.join(DATA_DIR, 'template'))
    
    446
    -def test_ref_not_in_track_warn_error(cli, tmpdir, datafiles):
    
    447
    -    project = os.path.join(datafiles.dirname, datafiles.basename)
    
    448
    -
    
    449
    -    # Add fatal-warnings ref-not-in-track to project.conf
    
    450
    -    project_template = {
    
    451
    -        "name": "foo",
    
    452
    -        "fatal-warnings": [CoreWarnings.REF_NOT_IN_TRACK]
    
    453
    -    }
    
    454
    -
    
    455
    -    _yaml.dump(project_template, os.path.join(project, 'project.conf'))
    
    421
    +    # Make the warning an error if we're testing errors
    
    422
    +    if fail == 'error':
    
    423
    +        project_template = {
    
    424
    +            "name": "foo",
    
    425
    +            "fatal-warnings": [CoreWarnings.REF_NOT_IN_TRACK]
    
    426
    +        }
    
    427
    +        _yaml.dump(project_template, os.path.join(project, 'project.conf'))
    
    456 428
     
    
    457 429
         # Create the repo from 'repofiles', create a branch without latest commit
    
    458 430
         repo = create_repo('git', str(tmpdir))
    
    ... ... @@ -472,11 +444,15 @@ def test_ref_not_in_track_warn_error(cli, tmpdir, datafiles):
    472 444
         }
    
    473 445
         _yaml.dump(element, os.path.join(project, 'target.bst'))
    
    474 446
     
    
    475
    -    # Assert that build raises a warning here that is captured
    
    476
    -    # as plugin error, due to the fatal warning being set
    
    477 447
         result = cli.run(project=project, args=['build', 'target.bst'])
    
    478
    -    result.assert_main_error(ErrorDomain.STREAM, None)
    
    479
    -    result.assert_task_error(ErrorDomain.PLUGIN, CoreWarnings.REF_NOT_IN_TRACK)
    
    448
    +
    
    449
    +    # Assert a warning or an error depending on what we're checking
    
    450
    +    if fail == 'error':
    
    451
    +        result.assert_main_error(ErrorDomain.STREAM, None)
    
    452
    +        result.assert_task_error(ErrorDomain.PLUGIN, CoreWarnings.REF_NOT_IN_TRACK)
    
    453
    +    else:
    
    454
    +        result.assert_success()
    
    455
    +        assert "ref-not-in-track" in result.stderr
    
    480 456
     
    
    481 457
     
    
    482 458
     @pytest.mark.skipif(HAVE_GIT is False, reason="git is not available")
    



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