# Copyright 2024 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. from recipe_engine import post_process as post DEPS = [ 'recipe_engine/json', 'recipe_engine/properties', 'recipe_engine/raw_io', 'recipe_engine/step', 'git', ] REPO_URL = 'https://chromium.googlesource.com/v8/v8' def RunSteps(api): url = api.properties.get('url', REPO_URL) ref = api.properties.get('ref', 'main') tags = api.properties.get('tags', True) branches = api.properties.get('branches', True) result = api.git.ls_remote(url, ref, tags=tags, branches=branches) api.step.empty('revision', step_text=result) def GenTests(api): def mock_ls_remote(ref, revision_refs, retcode=None): lines = [f"{revision}\t{ref}" for revision, ref in revision_refs] + [''] return api.step_data( f'Retrieve revision for {ref}', api.raw_io.stream_output_text( '\n'.join(lines), retcode=retcode or 0, stream='stdout', ), ) def test(name, cmd, *checks, **kwargs): ref = cmd[-1] return api.test( name, api.post_process( post.StepCommandEquals, f'Retrieve revision for {ref}', cmd, ), *checks, api.post_process(post.DropExpectation), **kwargs, ) yield test( 'basic', ['git', 'ls-remote', '-t', '-b', REPO_URL, 'main'], mock_ls_remote('main', [('badc0ffee0ded', 'refs/heads/main')]), api.post_process( post.StepTextEquals, 'revision', 'badc0ffee0ded', ), ) yield test( 'no-tags', ['git', 'ls-remote', '-b', REPO_URL, 'main'], api.properties(tags=False), mock_ls_remote('main', [('badc0ffee0ded', 'refs/heads/main')]), ) yield test( 'no-branches', ['git', 'ls-remote', '-t', REPO_URL, 'main'], api.properties(branches=False), mock_ls_remote('main', [('badc0ffee0ded', 'refs/heads/main')]), ) yield test( 'multiple-refs', ['git', 'ls-remote', '-t', '-b', REPO_URL, '13.3.19'], api.properties(ref='13.3.19'), mock_ls_remote('13.3.19', [ ('badc0ffee0ded', 'refs/heads/13.3.19'), ('c001c001c001d', 'refs/tags/13.3.19'), ]), api.post_process(post.StatusFailure), api.post_process(post.SummaryMarkdown, "Multiple remote refs found for 13.3.19"), status='FAILURE', ) yield test( 'no-refs', ['git', 'ls-remote', '-t', '-b', REPO_URL, '13.3'], api.properties(ref='13.3'), mock_ls_remote('13.3', []), api.post_process(post.StatusFailure), api.post_process(post.SummaryMarkdown, "No remote ref found for 13.3"), status='FAILURE', )