"brian m. carlson" <sand...@crustytoothpaste.net> 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" <sand...@c.net>'\'

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" <sand...@c.net>'

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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to