# Copyright 2013 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. DEPS = [ 'git', 'recipe_engine/path', 'recipe_engine/platform', 'recipe_engine/properties', 'recipe_engine/raw_io', 'recipe_engine/step', ] def RunSteps(api): url = 'https://chromium.googlesource.com/chromium/src.git' # git.checkout can optionally dump GIT_CURL_VERBOSE traces to a log file, # useful for debugging git access issues that are reproducible only on bots. curl_trace_file = None if api.properties.get('use_curl_trace'): curl_trace_file = api.path['slave_build'].join('curl_trace.log') submodule_update_force = api.properties.get('submodule_update_force', False) submodule_update_recursive = api.properties.get('submodule_update_recursive', True) # You can use api.git.checkout to perform all the steps of a safe checkout. retVal = api.git.checkout( url, ref=api.properties.get('revision'), recursive=True, submodule_update_force=submodule_update_force, set_got_revision=api.properties.get('set_got_revision'), curl_trace_file=curl_trace_file, remote_name=api.properties.get('remote_name'), display_fetch_size=api.properties.get('display_fetch_size'), file_name=api.properties.get('checkout_file_name'), submodule_update_recursive=submodule_update_recursive, use_git_cache=api.properties.get('use_git_cache')) assert retVal == "deadbeef", ( "expected retVal to be %r but was %r" % ("deadbeef", retVal)) # count_objects shows number and size of objects in .git dir. api.git.count_objects( name='count-objects', can_fail_build=api.properties.get('count_objects_can_fail_build'), git_config_options={'foo': 'bar'}) # Get the remote URL. api.git.get_remote_url( step_test_data=lambda: api.raw_io.test_api.stream_output('foo')) api.git.get_timestamp(test_data='foo') # You can use api.git.fetch_tags to fetch all tags from the remote api.git.fetch_tags(api.properties.get('remote_name')) # If you need to run more arbitrary git commands, you can use api.git itself, # which behaves like api.step(), but automatically sets the name of the step. api.git('status', cwd=api.path['checkout']) api.git('status', name='git status can_fail_build', can_fail_build=True) api.git('status', name='git status cannot_fail_build', can_fail_build=False) # You can use api.git.rebase to rebase the current branch onto another one api.git.rebase(name_prefix='my repo', branch='origin/master', dir_path=api.path['checkout'], remote_name=api.properties.get('remote_name')) if api.properties.get('cat_file', None): step_result = api.git.cat_file_at_commit(api.properties['cat_file'], api.properties['revision'], stdout=api.raw_io.output()) if 'TestOutput' in step_result.stdout: pass # Success! # Bundle the repository. api.git.bundle_create( api.path['slave_build'].join('all.bundle')) def GenTests(api): yield api.test('basic') yield api.test('basic_ref') + api.properties(revision='refs/foo/bar') yield api.test('basic_branch') + api.properties(revision='refs/heads/testing') yield api.test('basic_hash') + api.properties( revision='abcdef0123456789abcdef0123456789abcdef01') yield api.test('basic_file_name') + api.properties(checkout_file_name='DEPS') yield api.test('basic_submodule_update_force') + api.properties( submodule_update_force=True) yield api.test('platform_win') + api.platform.name('win') yield api.test('curl_trace_file') + api.properties( revision='refs/foo/bar', use_curl_trace=True) yield ( api.test('can_fail_build') + api.step_data('git status can_fail_build', retcode=1) ) yield ( api.test('cannot_fail_build') + api.step_data('git status cannot_fail_build', retcode=1) ) yield ( api.test('set_got_revision') + api.properties(set_got_revision=True) ) yield ( api.test('rebase_failed') + api.step_data('my repo rebase', retcode=1) ) yield api.test('remote_not_origin') + api.properties(remote_name='not_origin') yield ( api.test('count-objects_delta') + api.properties(display_fetch_size=True)) yield ( api.test('count-objects_failed') + api.step_data('count-objects', retcode=1)) yield ( api.test('count-objects_with_bad_output') + api.step_data( 'count-objects', stdout=api.raw_io.output(api.git.count_objects_output('xxx')))) yield ( api.test('count-objects_with_bad_output_fails_build') + api.step_data( 'count-objects', stdout=api.raw_io.output(api.git.count_objects_output('xxx'))) + api.properties(count_objects_can_fail_build=True)) yield ( api.test('cat-file_test') + api.step_data('git cat-file abcdef12345:TestFile', stdout=api.raw_io.output('TestOutput')) + api.properties(revision='abcdef12345', cat_file='TestFile')) yield ( api.test('git-cache-checkout') + api.properties(use_git_cache=True))