From: Junio C Hamano <gitster@pobox.com>
To: "Ben Keene via GitGitGadget" <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org, Ben Keene <seraphire@gmail.com>
Subject: Re: [PATCH v2 2/4] git-p4: create new method gitRunHook
Date: Tue, 04 Feb 2020 12:40:28 -0800 [thread overview]
Message-ID: <xmqqr1za6q83.fsf@gitster-ct.c.googlers.com> (raw)
In-Reply-To: <f1f9fdc542353196612f8dd6b996d4fbd1f76c73.1580507895.git.gitgitgadget@gmail.com> (Ben Keene via GitGitGadget's message of "Fri, 31 Jan 2020 21:58:13 +0000")
"Ben Keene via GitGitGadget" <gitgitgadget@gmail.com> writes:
> diff --git a/git-p4.py b/git-p4.py
> index 7d8a5ee788..4e481b3b55 100755
> --- a/git-p4.py
> +++ b/git-p4.py
> @@ -4125,6 +4125,35 @@ def printUsage(commands):
> "unshelve" : P4Unshelve,
> }
>
> +def gitRunHook(cmd, param=[]):
> + """Execute a hook if the hook exists."""
> + if verbose:
> + sys.stderr.write("Looking for hook: %s\n" % cmd)
> + sys.stderr.flush()
> +
> + hooks_path = gitConfig("core.hooksPath")
> + if len(hooks_path) <= 0:
> + hooks_path = os.path.join(os.environ.get("GIT_DIR", ".git"), "hooks")
This assumes that the process when his function is called (by the
way, even though the title of the patch uses the word "method", this
is not a method but a function, no?), it is always at the top level
of the working tree. Is that a good assumption? I don't know the
code well, so "yes it is good because a very early thing we do is to
go up to the top" is a good answer.
> + hook_file = os.path.join(hooks_path, cmd)
> + if isinstance(param,basestring):
> + param=[param]
> +
> + if platform.system() == 'Windows':
> + exepath = os.environ.get("EXEPATH")
> + if exepath is None:
> + exepath = ""
> + shexe = os.path.join(exepath, "bin", "sh.exe")
> + if os.path.isfile(shexe) \
> + and os.path.isfile(hook_file) \
> + and os.access(hook_file, os.X_OK) \
> + and subprocess.call([shexe, hook_file] + param) != 0:
> + return False
> +
> + else:
> + if os.path.isfile(hook_file) and os.access(hook_file, os.X_OK) and subprocess.call([hook_file] + param) != 0:
> + return False
Doesn't this mean that on Windows, a hook MUST be written as a shell
script, but on other platforms, a hook can be any executable?
I am not sure if it is necessary to penalize Windows users this way.
How do other parts of the system run hooks on Windows? E.g. can
"pre-commit" hook be an executable Python script on Windows?
Even if it is needed to have different implementations (and possibly
reduced capabilities) for "we found this file is a hook, now run it
with these parameters" on different platform, the above looks a bit
inverted. If the code in this function were
if os.path.isfile(hook_file) and
os.access(hook_file, os.X_OK) and
run_hook_command(hook_file, param) != 0:
return False
else:
return True
and a thin helper function whose only task is "now run it with these
parameters" is separately written, e.g.
def run_hook_command(hook_file, params):
if Windows:
... do things in Windows specific way ...
else:
return subprocess.call([hook_file] + param)
That would have been 100% better, as it would have made it clear
that logically gitRunHook() does exactly the same thing on all
platforms (i.e. find where the hook is, normalize param, check if
the hook file is actually enabled, and finally execute the hook with
the param), while the details of how the "execute" part (and only
that part) works may be different.
> + return True
>
> def main():
> if len(sys.argv[1:]) == 0:
next prev parent reply other threads:[~2020-02-04 20:40 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-20 21:17 [PATCH] git-p4: Add hook p4-pre-pedit-changelist Ben Keene via GitGitGadget
2020-01-21 23:05 ` Junio C Hamano
2020-01-29 10:13 ` Luke Diamand
2020-01-29 19:05 ` Junio C Hamano
2020-01-29 21:23 ` Luke Diamand
2020-01-30 1:37 ` Junio C Hamano
2020-01-30 14:20 ` Ben Keene
2020-01-30 18:39 ` Junio C Hamano
2020-01-30 1:51 ` Bryan Turner
2020-01-30 13:45 ` Ben Keene
2020-01-31 21:58 ` [PATCH v2 0/4] git-p4: add hook p4-pre-edit-changelist Ben Keene via GitGitGadget
2020-01-31 21:58 ` [PATCH v2 1/4] git-p4: rewrite prompt to be Windows compatible Ben Keene via GitGitGadget
2020-01-31 21:58 ` [PATCH v2 2/4] git-p4: create new method gitRunHook Ben Keene via GitGitGadget
2020-02-04 20:40 ` Junio C Hamano [this message]
2020-02-05 19:56 ` Ben Keene
2020-02-05 21:42 ` Junio C Hamano
2020-02-06 14:00 ` Ben Keene
2020-02-06 18:26 ` Junio C Hamano
2020-01-31 21:58 ` [PATCH v2 3/4] git-p4: add hook p4-pre-edit-changelist Ben Keene via GitGitGadget
2020-01-31 21:58 ` [PATCH v2 4/4] git-p4: add p4 submit hooks Ben Keene via GitGitGadget
2020-02-04 20:50 ` Junio C Hamano
2020-02-06 15:15 ` [PATCH v3 0/5] git-p4: add hook p4-pre-edit-changelist Ben Keene via GitGitGadget
2020-02-06 15:15 ` [PATCH v3 1/5] git-p4: rewrite prompt to be Windows compatible Ben Keene via GitGitGadget
2020-02-06 19:28 ` Junio C Hamano
2020-02-10 15:49 ` Ben Keene
2020-02-06 15:15 ` [PATCH v3 2/5] git-p4: create new function run_git_hook Ben Keene via GitGitGadget
2020-02-06 19:42 ` Junio C Hamano
2020-02-10 19:03 ` Ben Keene
2020-02-06 15:15 ` [PATCH v3 3/5] git-p4: add --no-verify option Ben Keene via GitGitGadget
2020-02-06 19:42 ` Junio C Hamano
2020-02-10 16:21 ` Ben Keene
2020-02-06 15:15 ` [PATCH v3 4/5] git-p4: restructure code in submit Ben Keene via GitGitGadget
2020-02-06 15:15 ` [PATCH v3 5/5] git-p4: add p4 submit hooks Ben Keene via GitGitGadget
2020-02-10 22:06 ` [PATCH v4 0/6] git-p4: add hooks for p4-changelist Ben Keene via GitGitGadget
2020-02-10 22:06 ` [PATCH v4 1/6] git-p4: rewrite prompt to be Windows compatible Ben Keene via GitGitGadget
2020-02-10 22:06 ` [PATCH v4 2/6] git-p4: create new function run_git_hook Ben Keene via GitGitGadget
2020-02-10 22:24 ` Junio C Hamano
2020-02-10 22:06 ` [PATCH v4 3/6] git-p4: add --no-verify option Ben Keene via GitGitGadget
2020-02-10 22:06 ` [PATCH v4 4/6] git-p4: restructure code in submit Ben Keene via GitGitGadget
2020-02-10 22:06 ` [PATCH v4 5/6] git-p4: add p4 submit hooks Ben Keene via GitGitGadget
2020-02-10 22:06 ` [PATCH v4 6/6] git-4: add RCS keyword status message Ben Keene via GitGitGadget
2020-02-11 18:57 ` [PATCH v5 0/7] git-p4: add hooks for p4-changelist Ben Keene via GitGitGadget
2020-02-11 18:57 ` [PATCH v5 1/7] git-p4: rewrite prompt to be Windows compatible Ben Keene via GitGitGadget
2020-02-11 18:57 ` [PATCH v5 2/7] git-p4: create new function run_git_hook Ben Keene via GitGitGadget
2020-02-11 18:58 ` [PATCH v5 3/7] git-p4: add p4-pre-submit exit text Ben Keene via GitGitGadget
2020-02-11 18:58 ` [PATCH v5 4/7] git-p4: add --no-verify option Ben Keene via GitGitGadget
2020-02-11 18:58 ` [PATCH v5 5/7] git-p4: restructure code in submit Ben Keene via GitGitGadget
2020-02-11 18:58 ` [PATCH v5 6/7] git-p4: add p4 submit hooks Ben Keene via GitGitGadget
2020-02-11 18:58 ` [PATCH v5 7/7] git-p4: add RCS keyword status message Ben Keene via GitGitGadget
2020-02-14 14:44 ` [PATCH v6 0/7] git-p4: add hooks for p4-changelist Ben Keene via GitGitGadget
2020-02-14 14:44 ` [PATCH v6 1/7] git-p4: rewrite prompt to be Windows compatible Ben Keene via GitGitGadget
2020-02-14 14:44 ` [PATCH v6 2/7] git-p4: create new function run_git_hook Ben Keene via GitGitGadget
2020-02-14 14:44 ` [PATCH v6 3/7] git-p4: add p4-pre-submit exit text Ben Keene via GitGitGadget
2020-02-14 14:44 ` [PATCH v6 4/7] git-p4: add --no-verify option Ben Keene via GitGitGadget
2020-02-14 14:44 ` [PATCH v6 5/7] git-p4: restructure code in submit Ben Keene via GitGitGadget
2020-02-14 14:44 ` [PATCH v6 6/7] git-p4: add p4 submit hooks Ben Keene via GitGitGadget
2020-02-14 14:44 ` [PATCH v6 7/7] git-p4: add RCS keyword status message Ben Keene via GitGitGadget
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqr1za6q83.fsf@gitster-ct.c.googlers.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=seraphire@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).