blob: daed573c0edc62152f57c939c81906041925770e [file] [log] [blame]
# Copyright 2017 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import base64
import hashlib
import re
from recipe_engine import recipe_test_api
class GitilesTestApi(recipe_test_api.RecipeTestApi):
def hash(self, *bases):
return hashlib.sha1(':'.join(bases)).hexdigest()
def refs(self, step_name, *refs):
return self.step_data(step_name,
self.m.json.output({ref[0]: ref[1] for ref in refs}))
def log(self, step_name, s, n=3, add_change_id=False, extra_footers=None):
commits = []
for i in xrange(n):
commit = 'fake %s hash %d' % (s, i)
name = 'Fake %s' % (s)
email = 'fake_%s@fake_%i.email.com' % (s, i)
message_lines = ['fake %s msg %d' % (s, i)]
footers = {}
if extra_footers:
footers.update(extra_footers)
if add_change_id:
# Using commit from above as Change-Id, but removing whitespace
# and possibly future punctuation.
alphanumeric_only_commit = re.sub(r'\W+', '', commit)
footers['Change-Id'] = 'I%s' % alphanumeric_only_commit
for key, value in footers.iteritems():
message_lines.append('%s: %s' % (key, value))
commits.append({
'id':
self.hash(commit),
'tree':
self.hash('tree', commit),
'parents': [self.hash('parent', commit)],
'author': {
'name': name,
'email': email,
'time': 'Mon Jan 01 00:00:00 2015',
},
'committer': {
'name': name,
'email': email,
'time': 'Mon Jan 01 00:00:00 2015',
},
'message':
'\n'.join(message_lines),
'tree_diff': [{
'type': 'add',
'old_id': 40 * '0',
'old_mode': 0,
'new_id': self.hash('file', f, commit),
'new_mode': 33188,
'new_path': f,
} for f in ['%s.py' % (chr(i + ord('a')))]],
})
return self.step_data(step_name, self.m.json.output(commits))
def fetch(self, step_name, data):
return self.m.url.text(step_name, base64.b64encode(data))