git-p4: add --no-verify option

Add new command line option --no-verify:

Add a new command line option "--no-verify" to the Submit command of
git-p4.py.  This option will function in the spirit of the existing
--no-verify command line option found in git commit. It will cause the
P4 Submit function to ignore the existing p4-pre-submit.

Change the execution of the existing trigger p4-pre-submit to honor the
--no-verify option. Before exiting on failure of this hook, display
text to the user explaining which hook has failed and the impact
of using the --no-verify option.

Change the call of the p4-pre-submit hook to use the new run_git_hook
function. This is in preparation of additional hooks to be added.

Signed-off-by: Ben Keene <seraphire@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Ben Keene
2020-02-11 18:58:01 +00:00
committed by Junio C Hamano
parent aa8b766a13
commit 4935c458c2
3 changed files with 31 additions and 16 deletions

View File

@@ -374,14 +374,20 @@ These options can be used to modify 'git p4 submit' behavior.
been submitted. Implies --disable-rebase. Can also be set with been submitted. Implies --disable-rebase. Can also be set with
git-p4.disableP4Sync. Sync with origin/master still goes ahead if possible. git-p4.disableP4Sync. Sync with origin/master still goes ahead if possible.
Hook for submit Hooks for submit
~~~~~~~~~~~~~~~ ----------------
p4-pre-submit
~~~~~~~~~~~~~
The `p4-pre-submit` hook is executed if it exists and is executable. The `p4-pre-submit` hook is executed if it exists and is executable.
The hook takes no parameters and nothing from standard input. Exiting with The hook takes no parameters and nothing from standard input. Exiting with
non-zero status from this script prevents `git-p4 submit` from launching. non-zero status from this script prevents `git-p4 submit` from launching.
It can be bypassed with the `--no-verify` command line option.
One usage scenario is to run unit tests in the hook. One usage scenario is to run unit tests in the hook.
Rebase options Rebase options
~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~
These options can be used to modify 'git p4 rebase' behavior. These options can be used to modify 'git p4 rebase' behavior.

View File

@@ -520,7 +520,10 @@ p4-pre-submit
This hook is invoked by `git-p4 submit`. It takes no parameters and nothing This hook is invoked by `git-p4 submit`. It takes no parameters and nothing
from standard input. Exiting with non-zero status from this script prevent from standard input. Exiting with non-zero status from this script prevent
`git-p4 submit` from launching. Run `git-p4 submit --help` for details. `git-p4 submit` from launching. It can be bypassed with the `--no-verify`
command line option. Run `git-p4 submit --help` for details.
post-index-change post-index-change
~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~

View File

@@ -1588,13 +1588,17 @@ class P4Submit(Command, P4UserMap):
"work from a local git branch that is not master"), "work from a local git branch that is not master"),
optparse.make_option("--disable-p4sync", dest="disable_p4sync", action="store_true", optparse.make_option("--disable-p4sync", dest="disable_p4sync", action="store_true",
help="Skip Perforce sync of p4/master after submit or shelve"), help="Skip Perforce sync of p4/master after submit or shelve"),
optparse.make_option("--no-verify", dest="no_verify", action="store_true",
help="Bypass p4-pre-submit"),
] ]
self.description = """Submit changes from git to the perforce depot.\n self.description = """Submit changes from git to the perforce depot.\n
The `p4-pre-submit` hook is executed if it exists and is executable. The `p4-pre-submit` hook is executed if it exists and is executable. It
The hook takes no parameters and nothing from standard input. Exiting with can be bypassed with the `--no-verify` command line option. The hook takes
non-zero status from this script prevents `git-p4 submit` from launching. no parameters and nothing from standard input. Exiting with a non-zero status
from this script prevents `git-p4 submit` from launching.
One usage scenario is to run unit tests in the hook.""" One usage scenario is to run unit tests in the hook.
"""
self.usage += " [name of git branch to submit into perforce depot]" self.usage += " [name of git branch to submit into perforce depot]"
self.origin = "" self.origin = ""
@@ -1612,6 +1616,7 @@ class P4Submit(Command, P4UserMap):
self.exportLabels = False self.exportLabels = False
self.p4HasMoveCommand = p4_has_move_command() self.p4HasMoveCommand = p4_has_move_command()
self.branch = None self.branch = None
self.no_verify = False
if gitConfig('git-p4.largeFileSystem'): if gitConfig('git-p4.largeFileSystem'):
die("Large file system not supported for git-p4 submit command. Please remove it from config.") die("Large file system not supported for git-p4 submit command. Please remove it from config.")
@@ -2405,16 +2410,17 @@ class P4Submit(Command, P4UserMap):
sys.exit("number of commits (%d) must match number of shelved changelist (%d)" % sys.exit("number of commits (%d) must match number of shelved changelist (%d)" %
(len(commits), num_shelves)) (len(commits), num_shelves))
try: if not self.no_verify:
if not run_git_hook("p4-pre-submit"): try:
print("\nThe p4-pre-submit hook failed, aborting the submit.\n\nYou can skip " \ if not run_git_hook("p4-pre-submit"):
"this pre-submission check by adding\nthe command line option '--no-verify', " \ print("\nThe p4-pre-submit hook failed, aborting the submit.\n\nYou can skip " \
"however,\nthis will also skip the p4-changelist hook as well.") "this pre-submission check by adding\nthe command line option '--no-verify', " \
"however,\nthis will also skip the p4-changelist hook as well.")
sys.exit(1)
except Exception as e:
print("\nThe p4-pre-submit hook failed, aborting the submit.\n\nThe hook failed "\
"with the error '{0}'".format(e.message) )
sys.exit(1) sys.exit(1)
except Exception as e:
print("\nThe p4-pre-submit hook failed, aborting the submit.\n\nThe hook failed "\
"with the error '{0}'".format(e.message) )
sys.exit(1)
# #
# Apply the commits, one at a time. On failure, ask if should # Apply the commits, one at a time. On failure, ask if should