"brian m. carlson" <[email protected]> writes:
> diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
> index 43c19e0..73d32dd 100644
> --- a/git-rebase--interactive.sh
> +++ b/git-rebase--interactive.sh
> @@ -181,7 +181,7 @@ exit_with_patch () {
> git rev-parse --verify HEAD > "$amend"
> warn "You can amend the commit now, with"
> warn
> - warn " git commit --amend"
> + warn " git commit --amend $gpg_sign_opt"
> warn
> warn "Once you are satisfied with your changes, run"
> warn
> @@ -248,7 +248,8 @@ pick_one () {
>
> test -d "$rewritten" &&
> pick_one_preserving_merges "$@" && return
> - output eval git cherry-pick "$strategy_args" $empty_args $ff "$@"
> + output eval git cherry-pick ${gpg_sign_opt:+"$gpg_sign_opt"} \
> + "$strategy_args" $empty_args $ff "$@"
This uses "$gpg_sign_opt" on "eval", which means that the variable's
contents must be properly shell quoted, e.g.
gpg_sign_opt='-S'\''"brian m. carson" <[email protected]>'\'
throughout this script, so that everything between the first
double-quote " and closing ket > is passed as a single parameter
without being broken up.
> @@ -359,7 +360,8 @@ pick_one_preserving_merges () {
> echo "$sha1 $(git rev-parse HEAD^0)" >>
> "$rewritten_list"
> ;;
> *)
> - output eval git cherry-pick "$strategy_args" "$@" ||
> + output eval git cherry-pick
> ${gpg_sign_opt:+"$gpg_sign_opt"} \
And this part has the same expectation. However...
> @@ -470,7 +472,8 @@ do_pick () {
> --no-post-rewrite -n -q -C $1 &&
> pick_one -n $1 &&
> git commit --allow-empty --allow-empty-message \
> - --amend --no-post-rewrite -n -q -C $1 ||
> + --amend --no-post-rewrite -n -q -C $1 \
> + ${gpg_sign_opt:+"$gpg_sign_opt"} ||
This does not want that "extra level" of quoting. It would want to
have something like this instead:
gpg_sign_opt='-S"brian m. carson" <[email protected]>'
I am not sure how you are managing these two conflicting needs of
the use sites.
> @@ -497,7 +500,7 @@ do_next () {
>
> mark_action_done
> do_pick $sha1 "$rest"
> - git commit --amend --no-post-rewrite || {
> + git commit --amend --no-post-rewrite
> ${gpg_sign_opt:+"$gpg_sign_opt"} || {
Ditto.
> diff --git a/git-rebase--merge.sh b/git-rebase--merge.sh
> index e7d96de..5381857 100644
> --- a/git-rebase--merge.sh
> +++ b/git-rebase--merge.sh
> @@ -27,7 +27,7 @@ continue_merge () {
> cmt=`cat "$state_dir/current"`
> if ! git diff-index --quiet --ignore-submodules HEAD --
> then
> - if ! git commit --no-verify -C "$cmt"
> + if ! git commit ${gpg_sign_opt:+"$gpg_sign_opt"} --no-verify -C
> "$cmt"
Ditto.
> then
> echo "Commit failed, please do not call \"git commit\""
> echo "directly, but instead do one of the following: "
> diff --git a/git-rebase.sh b/git-rebase.sh
> index 842d7d4..055af1b 100755
> --- a/git-rebase.sh
> +++ b/git-rebase.sh
> @@ -37,6 +37,7 @@ ignore-date! passed to 'git am'
> whitespace=! passed to 'git apply'
> ignore-whitespace! passed to 'git apply'
> C=! passed to 'git apply'
> +S,gpg-sign? GPG-sign commits
> Actions:
> continue! continue
> abort! abort and check out the original branch
> @@ -85,6 +86,7 @@ preserve_merges=
> autosquash=
> keep_empty=
> test "$(git config --bool rebase.autosquash)" = "true" && autosquash=t
> +gpg_sign_opt=
>
> read_basic_state () {
> test -f "$state_dir/head-name" &&
> @@ -107,6 +109,8 @@ read_basic_state () {
> strategy_opts="$(cat "$state_dir"/strategy_opts)"
> test -f "$state_dir"/allow_rerere_autoupdate &&
> allow_rerere_autoupdate="$(cat
> "$state_dir"/allow_rerere_autoupdate)"
> + test -f "$state_dir"/gpg_sign_opt &&
> + gpg_sign_opt="$(cat "$state_dir"/gpg_sign_opt)"
> }
>
> write_basic_state () {
> @@ -120,6 +124,7 @@ write_basic_state () {
> "$state_dir"/strategy_opts
> test -n "$allow_rerere_autoupdate" && echo "$allow_rerere_autoupdate" >
> \
> "$state_dir"/allow_rerere_autoupdate
> + test -n "$gpg_sign_opt" && echo "$gpg_sign_opt" >
> "$state_dir"/gpg_sign_opt
> }
>
> output () {
> @@ -324,6 +329,15 @@ do
> --rerere-autoupdate|--no-rerere-autoupdate)
> allow_rerere_autoupdate="$1"
> ;;
> + --gpg-sign)
> + gpg_sign_opt=-S
> + ;;
> + --gpg-sign=*)
> + # Try to quote only the argument, as this will appear in
> human-readable
> + # output as well as being passed to commands.
> + gpg_sign_opt="-S$(git rev-parse --sq-quote "${1#--gpg-sign=}" |
> + sed 's/^ //')"
Isn't an invocation of sed excessive?
gpg_sign_opt=$(git rev-parse --sq-quote "${1#--gpg-sign=}") &&
gpg_sign_opt=-S${gpg_sign_opt# }
if you really need to strip the leading SP, which I do not think is
a necessary thing to do. It is sufficient to remove the SP before
the variable substitution in the human-readable messages, e.g.
echo "run this command: git commit$gpg_sign_opt"
> + ;;
> --)
> shift
> break
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html