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