diff options
Diffstat (limited to 'subcmds/upload.py')
-rw-r--r-- | subcmds/upload.py | 64 |
1 files changed, 11 insertions, 53 deletions
diff --git a/subcmds/upload.py b/subcmds/upload.py index f441aae4..6196fe4c 100644 --- a/subcmds/upload.py +++ b/subcmds/upload.py | |||
@@ -21,7 +21,7 @@ import sys | |||
21 | 21 | ||
22 | from command import InteractiveCommand | 22 | from command import InteractiveCommand |
23 | from editor import Editor | 23 | from editor import Editor |
24 | from error import HookError, UploadError | 24 | from error import UploadError |
25 | from git_command import GitCommand | 25 | from git_command import GitCommand |
26 | from git_refs import R_HEADS | 26 | from git_refs import R_HEADS |
27 | from hooks import RepoHook | 27 | from hooks import RepoHook |
@@ -205,33 +205,7 @@ Gerrit Code Review: https://www.gerritcodereview.com/ | |||
205 | p.add_option('--no-cert-checks', | 205 | p.add_option('--no-cert-checks', |
206 | dest='validate_certs', action='store_false', default=True, | 206 | dest='validate_certs', action='store_false', default=True, |
207 | help='Disable verifying ssl certs (unsafe).') | 207 | help='Disable verifying ssl certs (unsafe).') |
208 | 208 | RepoHook.AddOptionGroup(p, 'pre-upload') | |
209 | # Options relating to upload hook. Note that verify and no-verify are NOT | ||
210 | # opposites of each other, which is why they store to different locations. | ||
211 | # We are using them to match 'git commit' syntax. | ||
212 | # | ||
213 | # Combinations: | ||
214 | # - no-verify=False, verify=False (DEFAULT): | ||
215 | # If stdout is a tty, can prompt about running upload hooks if needed. | ||
216 | # If user denies running hooks, the upload is cancelled. If stdout is | ||
217 | # not a tty and we would need to prompt about upload hooks, upload is | ||
218 | # cancelled. | ||
219 | # - no-verify=False, verify=True: | ||
220 | # Always run upload hooks with no prompt. | ||
221 | # - no-verify=True, verify=False: | ||
222 | # Never run upload hooks, but upload anyway (AKA bypass hooks). | ||
223 | # - no-verify=True, verify=True: | ||
224 | # Invalid | ||
225 | g = p.add_option_group('Upload hooks') | ||
226 | g.add_option('--no-verify', | ||
227 | dest='bypass_hooks', action='store_true', | ||
228 | help='Do not run the upload hook.') | ||
229 | g.add_option('--verify', | ||
230 | dest='allow_all_hooks', action='store_true', | ||
231 | help='Run the upload hook without prompting.') | ||
232 | g.add_option('--ignore-hooks', | ||
233 | dest='ignore_hooks', action='store_true', | ||
234 | help='Do not abort uploading if upload hooks fail.') | ||
235 | 209 | ||
236 | def _SingleBranch(self, opt, branch, people): | 210 | def _SingleBranch(self, opt, branch, people): |
237 | project = branch.project | 211 | project = branch.project |
@@ -572,31 +546,15 @@ Gerrit Code Review: https://www.gerritcodereview.com/ | |||
572 | (branch,), file=sys.stderr) | 546 | (branch,), file=sys.stderr) |
573 | return 1 | 547 | return 1 |
574 | 548 | ||
575 | if not opt.bypass_hooks: | 549 | pending_proj_names = [project.name for (project, available) in pending] |
576 | hook = RepoHook('pre-upload', self.manifest.repo_hooks_project, | 550 | pending_worktrees = [project.worktree for (project, available) in pending] |
577 | self.manifest.topdir, | 551 | hook = RepoHook.FromSubcmd( |
578 | self.manifest.manifestProject.GetRemote('origin').url, | 552 | hook_type='pre-upload', manifest=self.manifest, |
579 | abort_if_user_denies=True) | 553 | opt=opt, abort_if_user_denies=True) |
580 | pending_proj_names = [project.name for (project, available) in pending] | 554 | if not hook.Run( |
581 | pending_worktrees = [project.worktree for (project, available) in pending] | 555 | project_list=pending_proj_names, |
582 | passed = True | 556 | worktree_list=pending_worktrees): |
583 | try: | 557 | return 1 |
584 | hook.Run(opt.allow_all_hooks, project_list=pending_proj_names, | ||
585 | worktree_list=pending_worktrees) | ||
586 | except SystemExit: | ||
587 | passed = False | ||
588 | if not opt.ignore_hooks: | ||
589 | raise | ||
590 | except HookError as e: | ||
591 | passed = False | ||
592 | print("ERROR: %s" % str(e), file=sys.stderr) | ||
593 | |||
594 | if not passed: | ||
595 | if opt.ignore_hooks: | ||
596 | print('\nWARNING: pre-upload hooks failed, but uploading anyways.', | ||
597 | file=sys.stderr) | ||
598 | else: | ||
599 | return 1 | ||
600 | 558 | ||
601 | if opt.reviewers: | 559 | if opt.reviewers: |
602 | reviewers = _SplitEmails(opt.reviewers) | 560 | reviewers = _SplitEmails(opt.reviewers) |