blob: 75597769dc0a2dbe505ef040a3cc59214de1084c [file] [log] [blame]
# -*- coding: utf-8 -*-
# Copyright 2020 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Copied from
# https://chromium.googlesource.com/chromiumos/infra/recipes/+/HEAD/recipe_modules/repo/
# pylint: disable=missing-module-docstring
from typing import Generator
from recipe_engine import recipe_test_api
DEPS = [
'pigweed/repo',
'recipe_engine/assertions',
'recipe_engine/context',
'recipe_engine/path',
]
def RunSteps(api): # pylint: disable=missing-function-docstring
with api.context(cwd=api.path.cleanup_dir):
api.assertions.assertIsNone(
api.repo._find_root()
) # pylint: disable=protected-access
checkout = api.path.start_dir / 'checkout'
with api.context(cwd=checkout):
api.repo.init('http://manifest_url')
api.repo.init(
'http://manifest_url',
manifest_branch='mybranch',
manifest_name='pigweed.xml',
reference='/preload/chromeos',
groups=['group1', 'group2'],
depth=10,
repo_url='http://repo_url',
repo_rev='next',
clone_bundle=False,
)
api.repo.sync()
api.repo.sync(
force_sync=True,
detach=True,
current_branch=True,
jobs=99,
manifest_name='snapshot.xml',
no_tags=True,
optimized_fetch=True,
cache_dir='/tmp/cache',
)
api.repo.sync_manifest('<manifest></manifest>')
infos = api.repo.project_infos()
api.assertions.assertEqual(len(infos), 3)
api.assertions.assertEqual(infos[0].path, 'src/a')
info = api.repo.project_info(project='foo')
api.assertions.assertEqual(info.name, 'foo')
api.assertions.assertEqual(
api.repo.manifest_snapshot(), '<manifest></manifest>'
)
api.assertions.assertEqual(
api.repo.manifest_snapshot('some_manifest_file'),
'<manifest></manifest>',
)
snapshot_a = checkout / 'snapshot_a.xml'
snapshot_b = checkout / 'snapshot_b.xml'
with api.context(cwd=api.path.cleanup_dir):
api.repo.diff_manifests_informational(snapshot_a, snapshot_b)
repo_root = api.path.start_dir / 'repo'
api.path.mock_add_paths(repo_root / '.repo')
with api.context(cwd=repo_root / 'subdir'):
api.repo.diff_manifests_informational(snapshot_a, snapshot_b)
from_manifest = """
<manifest>
<project name="NAME" path="PATH" revision="FROM_REV"/>
<project name="NO_CHANGE" revision="NO_CHANGE_REV"/>
<project name="DELETED" revision="REV"/>
</manifest>
"""
to_manifest = """
<manifest>
<project name="NAME" path="PATH" revision="TO_REV"/>
<project name="NO_CHANGE" revision="NO_CHANGE_REV"/>
</manifest>
"""
[diff] = api.repo.diff_manifests(from_manifest, to_manifest)
api.assertions.assertEqual(diff.name, 'NAME')
api.assertions.assertEqual(diff.path, 'PATH')
api.assertions.assertEqual(diff.from_rev, 'FROM_REV')
api.assertions.assertEqual(diff.to_rev, 'TO_REV')
api.repo.ensure_synced_checkout(
api.path.cleanup_dir / 'ensure', 'http://manifest_url'
)
api.repo.start('no-projects')
api.repo.start('with-projects', projects=['project'])
def GenTests(api) -> Generator[recipe_test_api.TestData, None, None]:
yield api.test('setup_repo')