| Index: tools/push-to-trunk/common_includes.py
|
| diff --git a/tools/push-to-trunk/common_includes.py b/tools/push-to-trunk/common_includes.py
|
| index 6c0ad035107dbf0376971702a56b9e48b0fb3583..eaa3d201728a85c4e42e1ae170de76d5f76467d8 100644
|
| --- a/tools/push-to-trunk/common_includes.py
|
| +++ b/tools/push-to-trunk/common_includes.py
|
| @@ -70,6 +70,10 @@ def MSub(rexp, replacement, text):
|
|
|
|
|
| def Fill80(line):
|
| + # Replace tabs and remove surrounding space.
|
| + line = re.sub(r"\t", r" ", line.strip())
|
| +
|
| + # Format with 8 characters indentation and line width 80.
|
| return textwrap.fill(line, width=80, initial_indent=" ",
|
| subsequent_indent=" ")
|
|
|
| @@ -97,7 +101,7 @@ def MakeChangeLogBody(commit_messages, auto_format=False):
|
| for (title, body, author) in commit_messages:
|
| # TODO(machenbach): Reload the commit description from rietveld in order to
|
| # catch late changes.
|
| - title = title.rstrip()
|
| + title = title.strip()
|
| if auto_format:
|
| # Only add commits that set the LOG flag correctly.
|
| log_exp = r"^[ \t]*LOG[ \t]*=[ \t]*(?:Y(?:ES)?)|TRUE"
|
| @@ -115,7 +119,7 @@ def MakeChangeLogBody(commit_messages, auto_format=False):
|
| # indentation afterwards.
|
|
|
| # Add the commit's title line.
|
| - result += "%s\n" % title
|
| + result += "%s\n" % Fill80(title)
|
| added_titles.add(title)
|
|
|
| # Add bug references.
|
| @@ -123,7 +127,7 @@ def MakeChangeLogBody(commit_messages, auto_format=False):
|
|
|
| # Append the commit's author for reference if not in auto-format mode.
|
| if not auto_format:
|
| - result += "%s\n" % author.rstrip()
|
| + result += "%s\n" % Fill80("(%s)" % author.strip())
|
|
|
| result += "\n"
|
| return result
|
| @@ -205,36 +209,23 @@ DEFAULT_SIDE_EFFECT_HANDLER = SideEffectHandler()
|
|
|
|
|
| class Step(object):
|
| - def __init__(self, text="", requires=None):
|
| + def __init__(self, text, requires, number, config, state, options, handler):
|
| self._text = text
|
| - self._number = -1
|
| - self._options = None
|
| self._requires = requires
|
| - self._side_effect_handler = DEFAULT_SIDE_EFFECT_HANDLER
|
| -
|
| - def SetNumber(self, number):
|
| self._number = number
|
| -
|
| - def SetConfig(self, config):
|
| self._config = config
|
| -
|
| - def SetState(self, state):
|
| self._state = state
|
| -
|
| - def SetOptions(self, options):
|
| self._options = options
|
| -
|
| - def SetSideEffectHandler(self, handler):
|
| self._side_effect_handler = handler
|
| + assert self._number >= 0
|
| + assert self._config is not None
|
| + assert self._state is not None
|
| + assert self._side_effect_handler is not None
|
|
|
| def Config(self, key):
|
| return self._config[key]
|
|
|
| def Run(self):
|
| - assert self._number >= 0
|
| - assert self._config is not None
|
| - assert self._state is not None
|
| - assert self._side_effect_handler is not None
|
| if self._requires:
|
| self.RestoreIfUnset(self._requires)
|
| if not self._state[self._requires]:
|
| @@ -411,8 +402,7 @@ class Step(object):
|
|
|
|
|
| class UploadStep(Step):
|
| - def __init__(self):
|
| - Step.__init__(self, "Upload for code review.")
|
| + MESSAGE = "Upload for code review."
|
|
|
| def RunStep(self):
|
| if self._options.r:
|
| @@ -430,24 +420,35 @@ class UploadStep(Step):
|
| self.Die("'git cl upload' failed, please try again.")
|
|
|
|
|
| +def MakeStep(step_class=Step, number=0, state=None, config=None,
|
| + options=None, side_effect_handler=DEFAULT_SIDE_EFFECT_HANDLER):
|
| + # Allow to pass in empty dictionaries.
|
| + state = state if state is not None else {}
|
| + config = config if config is not None else {}
|
| +
|
| + try:
|
| + message = step_class.MESSAGE
|
| + except AttributeError:
|
| + message = step_class.__name__
|
| + try:
|
| + requires = step_class.REQUIRES
|
| + except AttributeError:
|
| + requires = None
|
| +
|
| + return step_class(message, requires, number=number, config=config,
|
| + state=state, options=options,
|
| + handler=side_effect_handler)
|
| +
|
| +
|
| def RunScript(step_classes,
|
| config,
|
| options,
|
| side_effect_handler=DEFAULT_SIDE_EFFECT_HANDLER):
|
| state = {}
|
| steps = []
|
| - number = 0
|
| -
|
| - for step_class in step_classes:
|
| - # TODO(machenbach): Factory methods.
|
| - step = step_class()
|
| - step.SetNumber(number)
|
| - step.SetConfig(config)
|
| - step.SetOptions(options)
|
| - step.SetState(state)
|
| - step.SetSideEffectHandler(side_effect_handler)
|
| - steps.append(step)
|
| - number += 1
|
| + for (number, step_class) in enumerate(step_classes):
|
| + steps.append(MakeStep(step_class, number, state, config,
|
| + options, side_effect_handler))
|
|
|
| for step in steps[options.s:]:
|
| step.Run()
|
|
|