| OLD | NEW |
| 1 # Copyright (C) 2010 Google Inc. All rights reserved. | 1 # Copyright (C) 2010 Google Inc. All rights reserved. |
| 2 # | 2 # |
| 3 # Redistribution and use in source and binary forms, with or without | 3 # Redistribution and use in source and binary forms, with or without |
| 4 # modification, are permitted provided that the following conditions are | 4 # modification, are permitted provided that the following conditions are |
| 5 # met: | 5 # met: |
| 6 # | 6 # |
| 7 # * Redistributions of source code must retain the above copyright | 7 # * Redistributions of source code must retain the above copyright |
| 8 # notice, this list of conditions and the following disclaimer. | 8 # notice, this list of conditions and the following disclaimer. |
| 9 # * Redistributions in binary form must reproduce the above | 9 # * Redistributions in binary form must reproduce the above |
| 10 # copyright notice, this list of conditions and the following disclaimer | 10 # copyright notice, this list of conditions and the following disclaimer |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 | 33 |
| 34 | 34 |
| 35 class AbstractStep(object): | 35 class AbstractStep(object): |
| 36 def __init__(self, tool, options): | 36 def __init__(self, tool, options): |
| 37 self._tool = tool | 37 self._tool = tool |
| 38 self._options = options | 38 self._options = options |
| 39 | 39 |
| 40 def _exit(self, code): | 40 def _exit(self, code): |
| 41 sys.exit(code) | 41 sys.exit(code) |
| 42 | 42 |
| 43 def _changed_files(self, state): | |
| 44 return self.cached_lookup(state, "changed_files") | |
| 45 | |
| 46 _well_known_keys = { | |
| 47 # FIXME: Should this use state.get('bug_id') or state.get('patch').bug_i
d() like UpdateChangeLogsWithReviewer does? | |
| 48 "bug": lambda self, state: self._tool.bugs.fetch_bug(state["bug_id"]), | |
| 49 # bug_title can either be a new title given by the user, or one from an
existing bug. | |
| 50 "bug_title": lambda self, state: self.cached_lookup(state, 'bug').title(
), | |
| 51 "changed_files": lambda self, state: self._tool.scm().changed_files(self
._options.git_commit), | |
| 52 "diff": lambda self, state: self._tool.scm().create_patch(self._options.
git_commit, changed_files=self._changed_files(state)), | |
| 53 # Absolute path to ChangeLog files. | |
| 54 "changelogs": lambda self, state: self._tool.checkout().modified_changel
ogs(self._options.git_commit, changed_files=self._changed_files(state)), | |
| 55 } | |
| 56 | |
| 57 def cached_lookup(self, state, key, promise=None): | |
| 58 if state.get(key): | |
| 59 return state[key] | |
| 60 if not promise: | |
| 61 promise = self._well_known_keys.get(key) | |
| 62 state[key] = promise(self, state) | |
| 63 return state[key] | |
| 64 | |
| 65 def did_modify_checkout(self, state): | |
| 66 state["diff"] = None | |
| 67 state["changelogs"] = None | |
| 68 state["changed_files"] = None | |
| 69 | |
| 70 @classmethod | 43 @classmethod |
| 71 def options(cls): | 44 def options(cls): |
| 72 return [ | 45 return [ |
| 73 # We need this option here because cached_lookup uses it. :( | 46 # We need this option here because cached_lookup uses it. :( |
| 74 Options.git_commit, | 47 Options.git_commit, |
| 75 ] | 48 ] |
| 76 | 49 |
| 77 def run(self, state): | 50 def run(self, state): |
| 78 raise NotImplementedError, "subclasses must implement" | 51 raise NotImplementedError, "subclasses must implement" |
| OLD | NEW |