| Index: git_cl.py
|
| diff --git a/git_cl.py b/git_cl.py
|
| index d0866ca3a22617a9be8e7a4e9ff3e3abc947f538..351aba58e81fa73927f9ef4811223106b6281ea5 100755
|
| --- a/git_cl.py
|
| +++ b/git_cl.py
|
| @@ -511,6 +511,57 @@ or verify this branch is set up to track another (via the --track argument to
|
| self.SetPatchset(0)
|
| self.has_issue = False
|
|
|
| + def RunHook(self, committing, upstream_branch, tbr, may_prompt, verbose):
|
| + """Calls sys.exit() if the hook fails; returns a HookResults otherwise."""
|
| + root = RunCommand(['git', 'rev-parse', '--show-cdup']).strip()
|
| + absroot = os.path.abspath(root or '.')
|
| +
|
| + # We use the sha1 of HEAD as a name of this change.
|
| + name = RunCommand(['git', 'rev-parse', 'HEAD']).strip()
|
| + files = scm.GIT.CaptureStatus([absroot], upstream_branch)
|
| +
|
| + issue = ConvertToInteger(self.GetIssue())
|
| + patchset = ConvertToInteger(self.GetPatchset())
|
| + if issue:
|
| + description = self.GetDescription()
|
| + else:
|
| + # If the change was never uploaded, use the log messages of all commits
|
| + # up to the branch point, as git cl upload will prefill the description
|
| + # with these log messages.
|
| + description = RunCommand(['git', 'log', '--pretty=format:%s%n%n%b',
|
| + '%s...' % (upstream_branch)]).strip()
|
| + change = presubmit_support.GitChange(
|
| + name,
|
| + description,
|
| + absroot,
|
| + files,
|
| + issue,
|
| + patchset,
|
| + None)
|
| +
|
| + # Apply watchlists on upload.
|
| + if not committing:
|
| + watchlist = watchlists.Watchlists(change.RepositoryRoot())
|
| + files = [f.LocalPath() for f in change.AffectedFiles()]
|
| + self.SetWatchers(watchlist.GetWatchersForPaths(files))
|
| +
|
| + try:
|
| + output = presubmit_support.DoPresubmitChecks(change, committing,
|
| + verbose=verbose, output_stream=sys.stdout, input_stream=sys.stdin,
|
| + default_presubmit=None, may_prompt=may_prompt, tbr=tbr,
|
| + rietveld=self.RpcServer())
|
| + except presubmit_support.PresubmitFailure, e:
|
| + DieWithError(
|
| + ('%s\nMaybe your depot_tools is out of date?\n'
|
| + 'If all fails, contact maruel@') % e)
|
| +
|
| + # TODO(dpranke): We should propagate the error out instead of calling
|
| + # exit().
|
| + if not output.should_continue():
|
| + sys.exit(1)
|
| +
|
| + return output
|
| +
|
| def CloseIssue(self):
|
| rpc_server = self.RpcServer()
|
| # Newer versions of Rietveld require us to pass an XSRF token to POST, so
|
| @@ -812,63 +863,6 @@ def ConvertToInteger(inputval):
|
| return None
|
|
|
|
|
| -def RunHook(committing, upstream_branch, rietveld_server, tbr, may_prompt,
|
| - verbose):
|
| - """Calls sys.exit() if the hook fails; returns a HookResults otherwise."""
|
| - root = RunCommand(['git', 'rev-parse', '--show-cdup']).strip()
|
| - if not root:
|
| - root = '.'
|
| - absroot = os.path.abspath(root)
|
| - if not root:
|
| - raise Exception('Could not get root directory.')
|
| -
|
| - # We use the sha1 of HEAD as a name of this change.
|
| - name = RunCommand(['git', 'rev-parse', 'HEAD']).strip()
|
| - files = scm.GIT.CaptureStatus([root], upstream_branch)
|
| -
|
| - cl = Changelist()
|
| - issue = ConvertToInteger(cl.GetIssue())
|
| - patchset = ConvertToInteger(cl.GetPatchset())
|
| - if issue:
|
| - description = cl.GetDescription()
|
| - else:
|
| - # If the change was never uploaded, use the log messages of all commits
|
| - # up to the branch point, as git cl upload will prefill the description
|
| - # with these log messages.
|
| - description = RunCommand(['git', 'log', '--pretty=format:%s%n%n%b',
|
| - '%s...' % (upstream_branch)]).strip()
|
| - change = presubmit_support.GitChange(
|
| - name,
|
| - description,
|
| - absroot,
|
| - files,
|
| - issue,
|
| - patchset,
|
| - None)
|
| -
|
| - # Apply watchlists on upload.
|
| - if not committing:
|
| - watchlist = watchlists.Watchlists(change.RepositoryRoot())
|
| - files = [f.LocalPath() for f in change.AffectedFiles()]
|
| - cl.SetWatchers(watchlist.GetWatchersForPaths(files))
|
| -
|
| - try:
|
| - output = presubmit_support.DoPresubmitChecks(change, committing,
|
| - verbose=verbose, output_stream=sys.stdout, input_stream=sys.stdin,
|
| - default_presubmit=None, may_prompt=may_prompt, tbr=tbr,
|
| - rietveld=cl.RpcServer())
|
| - except presubmit_support.PresubmitFailure, e:
|
| - DieWithError(
|
| - ('%s\nMaybe your depot_tools is out of date?\n'
|
| - 'If all fails, contact maruel@') % e)
|
| -
|
| - # TODO(dpranke): We should propagate the error out instead of calling exit().
|
| - if not output.should_continue():
|
| - sys.exit(1)
|
| -
|
| - return output
|
| -
|
| -
|
| def CMDpresubmit(parser, args):
|
| """run presubmit tests on the current changelist"""
|
| parser.add_option('--upload', action='store_true',
|
| @@ -889,9 +883,8 @@ def CMDpresubmit(parser, args):
|
| # Default to diffing against the "upstream" branch.
|
| base_branch = cl.GetUpstreamBranch()
|
|
|
| - RunHook(committing=not options.upload, upstream_branch=base_branch,
|
| - rietveld_server=cl.GetRietveldServer(), tbr=False,
|
| - may_prompt=False, verbose=options.verbose)
|
| + cl.RunHook(committing=not options.upload, upstream_branch=base_branch,
|
| + tbr=False, may_prompt=False, verbose=options.verbose)
|
| return 0
|
|
|
|
|
| @@ -933,9 +926,9 @@ def CMDupload(parser, args):
|
| args = [base_branch + "..."]
|
|
|
| if not options.bypass_hooks and not options.force:
|
| - hook_results = RunHook(committing=False, upstream_branch=base_branch,
|
| - rietveld_server=cl.GetRietveldServer(), tbr=False,
|
| - may_prompt=True, verbose=options.verbose)
|
| + hook_results = cl.RunHook(committing=False, upstream_branch=base_branch,
|
| + tbr=False, may_prompt=True,
|
| + verbose=options.verbose)
|
| if not options.reviewers and hook_results.reviewers:
|
| options.reviewers = hook_results.reviewers
|
|
|
| @@ -1086,9 +1079,8 @@ def SendUpstream(parser, args, cmd):
|
| return 1
|
|
|
| if not options.bypass_hooks and not options.force:
|
| - RunHook(committing=True, upstream_branch=base_branch,
|
| - rietveld_server=cl.GetRietveldServer(), tbr=options.tbr,
|
| - may_prompt=True, verbose=options.verbose)
|
| + cl.RunHook(committing=True, upstream_branch=base_branch,
|
| + tbr=options.tbr, may_prompt=True, verbose=options.verbose)
|
|
|
| if cmd == 'dcommit':
|
| # Check the tree status if the tree status URL is set.
|
|
|