summaryrefslogtreecommitdiffstats
path: root/subcmds/upload.py
diff options
context:
space:
mode:
Diffstat (limited to 'subcmds/upload.py')
-rw-r--r--subcmds/upload.py64
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
22from command import InteractiveCommand 22from command import InteractiveCommand
23from editor import Editor 23from editor import Editor
24from error import HookError, UploadError 24from error import UploadError
25from git_command import GitCommand 25from git_command import GitCommand
26from git_refs import R_HEADS 26from git_refs import R_HEADS
27from hooks import RepoHook 27from 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)