Skip to content

Commit

Permalink
git-p4: add --no-verify option
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
seraphire authored and gitster committed Feb 11, 2020
1 parent aa8b766 commit 4935c45
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 16 deletions.
10 changes: 8 additions & 2 deletions Documentation/git-p4.txt
Expand Up @@ -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
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 hook takes no parameters and nothing from standard input. Exiting with
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.


Rebase options
~~~~~~~~~~~~~~
These options can be used to modify 'git p4 rebase' behavior.
Expand Down
5 changes: 4 additions & 1 deletion Documentation/githooks.txt
Expand Up @@ -520,7 +520,10 @@ p4-pre-submit

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
`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
~~~~~~~~~~~~~~~~~
Expand Down
32 changes: 19 additions & 13 deletions git-p4.py
Expand Up @@ -1588,13 +1588,17 @@ def __init__(self):
"work from a local git branch that is not master"),
optparse.make_option("--disable-p4sync", dest="disable_p4sync", action="store_true",
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
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
non-zero status from this script prevents `git-p4 submit` from launching.
The `p4-pre-submit` hook is executed if it exists and is executable. It
can be bypassed with the `--no-verify` command line option. The hook takes
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.origin = ""
Expand All @@ -1612,6 +1616,7 @@ def __init__(self):
self.exportLabels = False
self.p4HasMoveCommand = p4_has_move_command()
self.branch = None
self.no_verify = False

if gitConfig('git-p4.largeFileSystem'):
die("Large file system not supported for git-p4 submit command. Please remove it from config.")
Expand Down Expand Up @@ -2405,16 +2410,17 @@ def run(self, args):
sys.exit("number of commits (%d) must match number of shelved changelist (%d)" %
(len(commits), num_shelves))

try:
if not run_git_hook("p4-pre-submit"):
print("\nThe p4-pre-submit hook failed, aborting the submit.\n\nYou can skip " \
"this pre-submission check by adding\nthe command line option '--no-verify', " \
"however,\nthis will also skip the p4-changelist hook as well.")
if not self.no_verify:
try:
if not run_git_hook("p4-pre-submit"):
print("\nThe p4-pre-submit hook failed, aborting the submit.\n\nYou can skip " \
"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)
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
Expand Down

0 comments on commit 4935c45

Please sign in to comment.