Merge pull request #2407 from M-Whitaker/main · cbrammere3d/pre-commit@4738d06 · GitHub
Skip to content

Commit 4738d06

Browse files
authored
Merge pull request pre-commit#2407 from M-Whitaker/main
Expose prepare-commit-msg arguments as environment vars
2 parents 44cb80f + 702ebf4 commit 4738d06

6 files changed

Lines changed: 87 additions & 2 deletions

File tree

pre_commit/commands/hook_impl.py

Lines changed: 17 additions & 1 deletion

pre_commit/commands/run.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,16 @@ def run(
361361
):
362362
return 0
363363

364+
# Expose prepare_commit_message_source / commit_object_name
365+
# as environment variables for the hooks
366+
if args.prepare_commit_message_source:
367+
environ['PRE_COMMIT_COMMIT_MSG_SOURCE'] = (
368+
args.prepare_commit_message_source
369+
)
370+
371+
if args.commit_object_name:
372+
environ['PRE_COMMIT_COMMIT_OBJECT_NAME'] = args.commit_object_name
373+
364374
# Expose from-ref / to-ref as environment variables for hooks to consume
365375
if args.from_ref and args.to_ref:
366376
# legacy names

pre_commit/main.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,20 @@ def _add_run_options(parser: argparse.ArgumentParser) -> None:
107107
'--commit-msg-filename',
108108
help='Filename to check when running during `commit-msg`',
109109
)
110+
parser.add_argument(
111+
'--prepare-commit-message-source',
112+
help=(
113+
'Source of the commit message '
114+
'(typically the second argument to .git/hooks/prepare-commit-msg)'
115+
),
116+
)
117+
parser.add_argument(
118+
'--commit-object-name',
119+
help=(
120+
'Commit object name '
121+
'(typically the third argument to .git/hooks/prepare-commit-msg)'
122+
),
123+
)
110124
parser.add_argument(
111125
'--remote-name', help='Remote name used by `git push`.',
112126
)

testing/util.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ def run_opts(
7676
hook_stage='commit',
7777
show_diff_on_failure=False,
7878
commit_msg_filename='',
79+
prepare_commit_message_source='',
80+
commit_object_name='',
7981
checkout_type='',
8082
is_squash_merge='',
8183
rewrite_command='',
@@ -97,6 +99,8 @@ def run_opts(
9799
hook_stage=hook_stage,
98100
show_diff_on_failure=show_diff_on_failure,
99101
commit_msg_filename=commit_msg_filename,
102+
prepare_commit_message_source=prepare_commit_message_source,
103+
commit_object_name=commit_object_name,
100104
checkout_type=checkout_type,
101105
is_squash_merge=is_squash_merge,
102106
rewrite_command=rewrite_command,

tests/commands/hook_impl_test.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,42 @@ def test_run_ns_commit_msg():
154154
assert ns.commit_msg_filename == '.git/COMMIT_MSG'
155155

156156

157+
def test_run_ns_prepare_commit_msg_one_arg():
158+
ns = hook_impl._run_ns(
159+
'prepare-commit-msg', False,
160+
('.git/COMMIT_MSG',), b'',
161+
)
162+
assert ns is not None
163+
assert ns.hook_stage == 'prepare-commit-msg'
164+
assert ns.color is False
165+
assert ns.commit_msg_filename == '.git/COMMIT_MSG'
166+
167+
168+
def test_run_ns_prepare_commit_msg_two_arg():
169+
ns = hook_impl._run_ns(
170+
'prepare-commit-msg', False,
171+
('.git/COMMIT_MSG', 'message'), b'',
172+
)
173+
assert ns is not None
174+
assert ns.hook_stage == 'prepare-commit-msg'
175+
assert ns.color is False
176+
assert ns.commit_msg_filename == '.git/COMMIT_MSG'
177+
assert ns.prepare_commit_message_source == 'message'
178+
179+
180+
def test_run_ns_prepare_commit_msg_three_arg():
181+
ns = hook_impl._run_ns(
182+
'prepare-commit-msg', False,
183+
('.git/COMMIT_MSG', 'message', 'HEAD'), b'',
184+
)
185+
assert ns is not None
186+
assert ns.hook_stage == 'prepare-commit-msg'
187+
assert ns.color is False
188+
assert ns.commit_msg_filename == '.git/COMMIT_MSG'
189+
assert ns.prepare_commit_message_source == 'message'
190+
assert ns.commit_object_name == 'HEAD'
191+
192+
157193
def test_run_ns_post_commit():
158194
ns = hook_impl._run_ns('post-commit', True, (), b'')
159195
assert ns is not None

tests/commands/run_test.py

Lines changed: 6 additions & 1 deletion

0 commit comments

Comments
 (0)