You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
depot_tools/recipes/recipe_modules/git/tests/ls_remote.py

105 lines
2.8 KiB
Python

# 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',
)