Message ID | 5caed246-ec6d-58cb-952e-a8d6fb2ae838@suse.cz |
---|---|
State | New |
Headers | show |
Series | Allow space in git commit-mklog args | expand |
On Fri, 22 Jul 2022 at 10:38, Martin Liška wrote: > > Hi. > > Motivation example: > $ git commit-mklog -a -b 'PR other/106370,PR other/12345' > > Preserving a space from git gcc-mklog hook to contrib/mklog.py seems > pretty challenging. Thus I recommend preserving extra mklog args via > env where it's encoded in JSON format. > > Thoughts? This solution looks much better than trying to get the shell quoting and word splitting right. For the record, my suggestion was to surround each arg in double quotes within the env var and then ... > diff --git a/contrib/prepare-commit-msg b/contrib/prepare-commit-msg > index 5da878458cd..969847df6f4 100755 > --- a/contrib/prepare-commit-msg > +++ b/contrib/prepare-commit-msg > @@ -78,4 +78,4 @@ else > tee="cat" > fi > > -git $cmd | $tee | git gcc-mklog $GCC_MKLOG_ARGS -c "$COMMIT_MSG_FILE" > +git $cmd | $tee | git gcc-mklog -c "$COMMIT_MSG_FILE" ... change this to: mklog() { echo "$GCC_MKLOG_ARGS" | xargs -x git gcc-mklog -c "$COMMIT_MSG_FILE" } git $cmd | $tee | mklog This works because xargs respects quotes within its input and so would pass them correctly to the git gcc-mklog command. But avoiding this entirely by storing them as json and then not retrieving them until the mklog.py step is more reliable.
diff --git a/contrib/git-commit-mklog.py b/contrib/git-commit-mklog.py index eda3fc4a892..c7e90c8262f 100755 --- a/contrib/git-commit-mklog.py +++ b/contrib/git-commit-mklog.py @@ -24,6 +24,7 @@ # to mklog.py script. import argparse +import json import os import subprocess @@ -32,8 +33,7 @@ if __name__ == '__main__': myenv = os.environ.copy() parser = argparse.ArgumentParser(description='git-commit-mklog wrapped') - parser.add_argument('-b', '--pr-numbers', action='store', - type=lambda arg: arg.split(','), nargs='?', + parser.add_argument('-b', '--pr-numbers', help='Add the specified PRs (comma separated)') parser.add_argument('-p', '--fill-up-bug-titles', action='store_true', help='Download title of mentioned PRs') @@ -44,12 +44,13 @@ if __name__ == '__main__': myenv['GCC_FORCE_MKLOG'] = '1' mklog_args = [] if args.pr_numbers: - mklog_args.append(f'-b {",".join(args.pr_numbers)}') + mklog_args += ['-b', args.pr_numbers] if args.fill_up_bug_titles: mklog_args.append('-p') if mklog_args: - myenv['GCC_MKLOG_ARGS'] = ' '.join(mklog_args) + # wrap mklog arguments with JSON + myenv['GCC_MKLOG_ARGS'] = json.dumps(mklog_args) if args.co: for author in args.co.split(','): diff --git a/contrib/mklog.py b/contrib/mklog.py index cd5ef0bcc74..fe530ebf773 100755 --- a/contrib/mklog.py +++ b/contrib/mklog.py @@ -28,6 +28,7 @@ import argparse import datetime +import json import os import re import subprocess @@ -336,6 +337,10 @@ def skip_line_in_changelog(line): if __name__ == '__main__': + extra_args = os.getenv('GCC_MKLOG_ARGS') + if extra_args: + sys.argv += json.loads(extra_args) + parser = argparse.ArgumentParser(description=help_message) parser.add_argument('input', nargs='?', help='Patch file (or missing, read standard input)') diff --git a/contrib/prepare-commit-msg b/contrib/prepare-commit-msg index 5da878458cd..969847df6f4 100755 --- a/contrib/prepare-commit-msg +++ b/contrib/prepare-commit-msg @@ -78,4 +78,4 @@ else tee="cat" fi -git $cmd | $tee | git gcc-mklog $GCC_MKLOG_ARGS -c "$COMMIT_MSG_FILE" +git $cmd | $tee | git gcc-mklog -c "$COMMIT_MSG_FILE"