[Notes] [Git][BuildStream/buildstream][tlater/message-lines] 3 commits: testutils/runcli.py: Allow removing artifacts from arbitrary dirs



Title: GitLab

Tristan Maat pushed to branch tlater/message-lines at BuildStream / buildstream

Commits:

3 changed files:

Changes:

  • buildstream/_frontend/widget.py
    ... ... @@ -647,8 +647,9 @@ class LogLine(Widget):
    647 647
                 abbrev = False
    
    648 648
                 if message.message_type not in ERROR_MESSAGES \
    
    649 649
                    and not frontend_message and n_lines > self._message_lines:
    
    650
    -                abbrev = True
    
    651 650
                     lines = lines[0:self._message_lines]
    
    651
    +                if self._message_lines > 0:
    
    652
    +                    abbrev = True
    
    652 653
                 else:
    
    653 654
                     lines[n_lines - 1] = lines[n_lines - 1].rstrip('\n')
    
    654 655
     
    
    ... ... @@ -674,7 +675,7 @@ class LogLine(Widget):
    674 675
                 if self.context is not None and not self.context.log_verbose:
    
    675 676
                     text += self._indent + self._err_profile.fmt("Log file: ")
    
    676 677
                     text += self._indent + self._logfile_widget.render(message) + '\n'
    
    677
    -            else:
    
    678
    +            elif self._log_lines > 0:
    
    678 679
                     text += self._indent + self._err_profile.fmt("Printing the last {} lines from log file:"
    
    679 680
                                                                  .format(self._log_lines)) + '\n'
    
    680 681
                     text += self._indent + self._logfile_widget.render(message, abbrev=False) + '\n'
    

  • tests/integration/messages.py
    1
    +#
    
    2
    +#  Copyright (C) 2018 Codethink Limited
    
    3
    +#
    
    4
    +#  This program is free software; you can redistribute it and/or
    
    5
    +#  modify it under the terms of the GNU Lesser General Public
    
    6
    +#  License as published by the Free Software Foundation; either
    
    7
    +#  version 2 of the License, or (at your option) any later version.
    
    8
    +#
    
    9
    +#  This library is distributed in the hope that it will be useful,
    
    10
    +#  but WITHOUT ANY WARRANTY; without even the implied warranty of
    
    11
    +#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    
    12
    +#  Lesser General Public License for more details.
    
    13
    +#
    
    14
    +#  You should have received a copy of the GNU Lesser General Public
    
    15
    +#  License along with this library. If not, see <http://www.gnu.org/licenses/>.
    
    16
    +#
    
    17
    +#  Authors: Tristan Maat <tristan maat codethink co uk>
    
    18
    +#
    
    19
    +
    
    20
    +import os
    
    21
    +import pytest
    
    22
    +
    
    23
    +from buildstream import _yaml
    
    24
    +from buildstream._exceptions import ErrorDomain
    
    25
    +
    
    26
    +from tests.testutils import cli_integration as cli
    
    27
    +
    
    28
    +
    
    29
    +pytestmark = pytest.mark.integration
    
    30
    +
    
    31
    +
    
    32
    +# Project directory
    
    33
    +DATA_DIR = os.path.join(
    
    34
    +    os.path.dirname(os.path.realpath(__file__)),
    
    35
    +    "project",
    
    36
    +)
    
    37
    +
    
    38
    +
    
    39
    +@pytest.mark.integration
    
    40
    +@pytest.mark.datafiles(DATA_DIR)
    
    41
    +def test_disable_message_lines(cli, tmpdir, datafiles):
    
    42
    +    project = os.path.join(datafiles.dirname, datafiles.basename)
    
    43
    +    element_path = os.path.join(project, 'elements')
    
    44
    +    element_name = 'message.bst'
    
    45
    +
    
    46
    +    element = {
    
    47
    +        'kind': 'manual',
    
    48
    +        'depends': [{
    
    49
    +            'filename': 'base.bst'
    
    50
    +        }],
    
    51
    +        'config': {
    
    52
    +            'build-commands':
    
    53
    +            ['echo "Silly message"'],
    
    54
    +            'strip-commands': []
    
    55
    +        }
    
    56
    +    }
    
    57
    +
    
    58
    +    os.makedirs(os.path.dirname(os.path.join(element_path, element_name)), exist_ok=True)
    
    59
    +    _yaml.dump(element, os.path.join(element_path, element_name))
    
    60
    +
    
    61
    +    # First we check that we get the "Silly message"
    
    62
    +    result = cli.run(project=project, args=["build", element_name])
    
    63
    +    result.assert_success()
    
    64
    +    assert 'echo "Silly message"' in result.stderr
    
    65
    +
    
    66
    +    # Let's now build it again, but with --message-lines 0
    
    67
    +    cli.remove_artifact_from_cache(project, element_name)
    
    68
    +    result = cli.run(project=project, args=["--message-lines", "0",
    
    69
    +                                            "build", element_name])
    
    70
    +    result.assert_success()
    
    71
    +    assert not "Message contains " in result.stderr
    
    72
    +
    
    73
    +@pytest.mark.integration
    
    74
    +@pytest.mark.datafiles(DATA_DIR)
    
    75
    +def test_disable_error_lines(cli, tmpdir, datafiles):
    
    76
    +    project = os.path.join(datafiles.dirname, datafiles.basename)
    
    77
    +    element_path = os.path.join(project, 'elements')
    
    78
    +    element_name = 'message.bst'
    
    79
    +
    
    80
    +    element = {
    
    81
    +        'kind': 'manual',
    
    82
    +        'depends': [{
    
    83
    +            'filename': 'base.bst'
    
    84
    +        }],
    
    85
    +        'config': {
    
    86
    +            'build-commands':
    
    87
    +            ['This is a syntax error > >'],
    
    88
    +            'strip-commands': []
    
    89
    +        }
    
    90
    +    }
    
    91
    +
    
    92
    +    os.makedirs(os.path.dirname(os.path.join(element_path, element_name)), exist_ok=True)
    
    93
    +    _yaml.dump(element, os.path.join(element_path, element_name))
    
    94
    +
    
    95
    +    # First we check that we get the syntax error
    
    96
    +    result = cli.run(project=project, args=["--error-lines", "0",
    
    97
    +                                            "build", element_name])
    
    98
    +    result.assert_main_error(ErrorDomain.STREAM, None)
    
    99
    +    assert "Printing the last" in result.stderr
    
    100
    +    assert "This is a syntax error" in result.stderr
    
    101
    +
    
    102
    +    # Let's now build it again, but with --error-lines 0
    
    103
    +    cli.remove_artifact_from_cache(project, element_name)
    
    104
    +    result = cli.run(project=project, args=["--error-lines", "0",
    
    105
    +                                            "build", element_name])
    
    106
    +    result.assert_main_error(ErrorDomain.STREAM, None)
    
    107
    +    assert not "Printing the last" in result.stderr

  • tests/testutils/runcli.py
    ... ... @@ -245,8 +245,12 @@ class Cli():
    245 245
     
    
    246 246
         def remove_artifact_from_cache(self, project, element_name,
    
    247 247
                                        *, cache_dir=None):
    
    248
    +        # Read configuration to figure out where artifacts are stored
    
    248 249
             if not cache_dir:
    
    249
    -            cache_dir = os.path.join(project, 'cache', 'artifacts')
    
    250
    +            cache_dir = self.config.get(
    
    251
    +                'artifactdir',
    
    252
    +                os.path.join(project, 'cache', 'artifacts')
    
    253
    +            )
    
    250 254
     
    
    251 255
             cache_dir = os.path.join(cache_dir, 'cas', 'refs', 'heads')
    
    252 256
     
    



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