[Notes] [Git][BuildStream/buildstream][willsalmon/trackWarning] Add warning to git track if track and ref are not present



Title: GitLab

Will Salmon pushed to branch willsalmon/trackWarning at BuildStream / buildstream

Commits:

3 changed files:

Changes:

  • buildstream/_pipeline.py
    ... ... @@ -382,10 +382,23 @@ class Pipeline():
    382 382
                         inconsistent.append(element)
    
    383 383
     
    
    384 384
             if inconsistent:
    
    385
    -            detail = "Exact versions are missing for the following elements\n" + \
    
    386
    -                     "Try tracking these elements first with `bst track`\n\n"
    
    385
    +            detail = "Exact versions are missing for the following elements:\n\n"
    
    386
    +
    
    387
    +            missingTrack = 0
    
    387 388
                 for element in inconsistent:
    
    388
    -                detail += "  " + element._get_full_name() + "\n"
    
    389
    +                detail += "  " + element._get_full_name()
    
    390
    +                for source in element.sources():
    
    391
    +                    if not source._get_consistency() and not source.get_ref():
    
    392
    +                        if hasattr(source, 'tracking') and source.tracking is None:
    
    393
    +                            detail += ": Source {} is missing ref and track. Please specify a ref or branch/tag to track..".format(source._get_full_name())
    
    394
    +                            missingTrack = 1
    
    395
    +                            
    
    396
    +                detail += "\n"
    
    397
    +                
    
    398
    +            if missingTrack:
    
    399
    +                detail += "\nThen track these elements with `bst track`\n"
    
    400
    +            else: 
    
    401
    +                detail += "\nTry tracking these elements first with `bst track`\n"
    
    389 402
                 raise PipelineError("Inconsistent pipeline", detail=detail, reason="inconsistent-pipeline")
    
    390 403
     
    
    391 404
         # cleanup()
    

  • buildstream/plugins/sources/git.py
    ... ... @@ -363,6 +363,12 @@ class GitSource(Source):
    363 363
     
    
    364 364
             # If self.tracking is not specified it's not an error, just silently return
    
    365 365
             if not self.tracking:
    
    366
    +            # Is there a better way to check if a ref is given.
    
    367
    +            if self.mirror.ref is None:
    
    368
    +                detail = 'Without a tracking branch ref can not be updated. Please ' + \
    
    369
    +                         'provide a ref or a track.'
    
    370
    +                raise SourceError("{}: No track or ref".format(self),
    
    371
    +                                  detail=detail, reason="track-attempt-no-track")
    
    366 372
                 return None
    
    367 373
     
    
    368 374
             with self.timed_activity("Tracking {} from {}"
    

  • tests/sources/git.py
    ... ... @@ -359,3 +359,45 @@ def test_submodule_track_ignore_inconsistent(cli, tmpdir, datafiles):
    359 359
     
    
    360 360
         # Assert that we are just fine without it, and emit a warning to the user.
    
    361 361
         assert "Ignoring inconsistent submodule" in result.stderr
    
    362
    +
    
    363
    +
    
    364
    +@pytest.mark.skipif(HAVE_GIT is False, reason="git is not available")
    
    365
    +@pytest.mark.datafiles(os.path.join(DATA_DIR, 'template'))
    
    366
    +def test_submodule_track_no_ref_or_track(cli, tmpdir, datafiles):
    
    367
    +    project = os.path.join(datafiles.dirname, datafiles.basename)
    
    368
    +
    
    369
    +    # Create the repo from 'repofiles' subdir
    
    370
    +    repo = create_repo('git', str(tmpdir))
    
    371
    +    ref = repo.create(os.path.join(project, 'repofiles'))
    
    372
    +
    
    373
    +    # Write out our test target
    
    374
    +    gitsource = repo.source_config(ref=None)
    
    375
    +    gitsource.pop('track')
    
    376
    +    element = {
    
    377
    +        'kind': 'import',
    
    378
    +        'sources': [
    
    379
    +            gitsource
    
    380
    +        ]
    
    381
    +    }
    
    382
    +
    
    383
    +    _yaml.dump(element, os.path.join(project, 'target.bst'))
    
    384
    +
    
    385
    +    # Track will encounter an inconsistent submodule without any ref
    
    386
    +    result = cli.run(project=project, args=['track', 'target.bst'])
    
    387
    +    result.assert_main_error(ErrorDomain.STREAM, None)
    
    388
    +    result.assert_task_error(ErrorDomain.SOURCE, 'track-attempt-no-track')
    
    389
    +
    
    390
    +    # Assert that we are just fine without it, and emit a warning to the user.
    
    391
    +    assert "FAILURE git source at" in result.stderr
    
    392
    +    assert "Without a tracking branch ref can not be updated. Please " + \
    
    393
    +        "provide a ref or a track." in result.stderr
    
    394
    +
    
    395
    +    # Track will encounter an inconsistent submodule without any ref
    
    396
    +    result = cli.run(project=project, args=['build', 'target.bst'])
    
    397
    +    result.assert_main_error(ErrorDomain.PIPELINE, 'inconsistent-pipeline')
    
    398
    +    result.assert_task_error(None, None)
    
    399
    +
    
    400
    +    # Assert that we are just fine without it, and emit a warning to the user.
    
    401
    +    assert "Exact versions are missing for the following elements" in result.stderr
    
    402
    +    assert "is missing ref and track." in result.stderr
    
    403
    +    assert "Then track these elements with `bst track`" in result.stderr



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