Expose remote branch ref as an environment variable

This commit is contained in:
surafelabebe 2020-12-21 15:16:11 -08:00 committed by Anthony Sottile
parent bb50e00447
commit cb5ed6276d
5 changed files with 14 additions and 2 deletions

View file

@ -69,6 +69,7 @@ def _ns(
color: bool, color: bool,
*, *,
all_files: bool = False, all_files: bool = False,
remote_branch: Optional[str] = None,
from_ref: Optional[str] = None, from_ref: Optional[str] = None,
to_ref: Optional[str] = None, to_ref: Optional[str] = None,
remote_name: Optional[str] = None, remote_name: Optional[str] = None,
@ -79,6 +80,7 @@ def _ns(
return argparse.Namespace( return argparse.Namespace(
color=color, color=color,
hook_stage=hook_type.replace('pre-', ''), hook_stage=hook_type.replace('pre-', ''),
remote_branch=remote_branch,
from_ref=from_ref, from_ref=from_ref,
to_ref=to_ref, to_ref=to_ref,
remote_name=remote_name, remote_name=remote_name,
@ -106,13 +108,14 @@ def _pre_push_ns(
remote_url = args[1] remote_url = args[1]
for line in stdin.decode().splitlines(): for line in stdin.decode().splitlines():
_, local_sha, _, remote_sha = line.split() _, local_sha, remote_branch, remote_sha = line.split()
if local_sha == Z40: if local_sha == Z40:
continue continue
elif remote_sha != Z40 and _rev_exists(remote_sha): elif remote_sha != Z40 and _rev_exists(remote_sha):
return _ns( return _ns(
'pre-push', color, 'pre-push', color,
from_ref=remote_sha, to_ref=local_sha, from_ref=remote_sha, to_ref=local_sha,
remote_branch=remote_branch,
remote_name=remote_name, remote_url=remote_url, remote_name=remote_name, remote_url=remote_url,
) )
else: else:
@ -133,6 +136,7 @@ def _pre_push_ns(
'pre-push', color, 'pre-push', color,
all_files=True, all_files=True,
remote_name=remote_name, remote_url=remote_url, remote_name=remote_name, remote_url=remote_url,
remote_branch=remote_branch,
) )
else: else:
rev_cmd = ('git', 'rev-parse', f'{first_ancestor}^') rev_cmd = ('git', 'rev-parse', f'{first_ancestor}^')
@ -141,6 +145,7 @@ def _pre_push_ns(
'pre-push', color, 'pre-push', color,
from_ref=source, to_ref=local_sha, from_ref=source, to_ref=local_sha,
remote_name=remote_name, remote_url=remote_url, remote_name=remote_name, remote_url=remote_url,
remote_branch=remote_branch,
) )
# nothing to push # nothing to push

View file

@ -371,7 +371,8 @@ def run(
environ['PRE_COMMIT_FROM_REF'] = args.from_ref environ['PRE_COMMIT_FROM_REF'] = args.from_ref
environ['PRE_COMMIT_TO_REF'] = args.to_ref environ['PRE_COMMIT_TO_REF'] = args.to_ref
if args.remote_name and args.remote_url: if args.remote_name and args.remote_url and args.remote_branch:
environ['PRE_COMMIT_REMOTE_BRANCH'] = args.remote_branch
environ['PRE_COMMIT_REMOTE_NAME'] = args.remote_name environ['PRE_COMMIT_REMOTE_NAME'] = args.remote_name
environ['PRE_COMMIT_REMOTE_URL'] = args.remote_url environ['PRE_COMMIT_REMOTE_URL'] = args.remote_url

View file

@ -96,6 +96,9 @@ def _add_run_options(parser: argparse.ArgumentParser) -> None:
'--hook-stage', choices=C.STAGES, default='commit', '--hook-stage', choices=C.STAGES, default='commit',
help='The stage during which the hook is fired. One of %(choices)s', help='The stage during which the hook is fired. One of %(choices)s',
) )
parser.add_argument(
'--remote-branch', help='Remote branch ref used by `git push`.',
)
parser.add_argument( parser.add_argument(
'--from-ref', '--source', '-s', '--from-ref', '--source', '-s',
help=( help=(

View file

@ -61,6 +61,7 @@ def run_opts(
color=False, color=False,
verbose=False, verbose=False,
hook=None, hook=None,
remote_branch='',
from_ref='', from_ref='',
to_ref='', to_ref='',
remote_name='', remote_name='',
@ -78,6 +79,7 @@ def run_opts(
color=color, color=color,
verbose=verbose, verbose=verbose,
hook=hook, hook=hook,
remote_branch=remote_branch,
from_ref=from_ref, from_ref=from_ref,
to_ref=to_ref, to_ref=to_ref,
remote_name=remote_name, remote_name=remote_name,

View file

@ -486,6 +486,7 @@ def test_from_ref_to_ref_error_msg_error(
def test_all_push_options_ok(cap_out, store, repo_with_passing_hook): def test_all_push_options_ok(cap_out, store, repo_with_passing_hook):
args = run_opts( args = run_opts(
from_ref='master', to_ref='master', from_ref='master', to_ref='master',
remote_branch='master',
remote_name='origin', remote_url='https://example.com/repo', remote_name='origin', remote_url='https://example.com/repo',
) )
ret, printed = _do_run(cap_out, store, repo_with_passing_hook, args) ret, printed = _do_run(cap_out, store, repo_with_passing_hook, args)