Re: [PATCH] Offer to print changes while running git-mergetool

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Feb 7, 2009 at 8:11 AM, Junio C Hamano <gitster@xxxxxxxxx> wrote:
> Jonathan del Strother <jon.delStrother@xxxxxxxxxxxxx> writes:
>
>> Add a "Show changes" option to each prompt in mergetool. This prints the
>> conflicted changes on the current file, using 'git log -p --merge
>> <file>'
>
> I think the patch should look like this, given the recent conversation I
> had with you.  It seems that the script thinks the unit of indentation is
> 4-places, and case arms are indented from case/esac (neither of which is
> the standard git shell script convention), and I tried to match that style
> used in the existing code.
>
> No, I didn't test it.
>
> Charles volunteered to take over mergetool, so he is on the Cc: list.
>
>  git-mergetool.sh |   60 ++++++++++++++++++++++++++++++++++++++++++-----------
>  1 files changed, 47 insertions(+), 13 deletions(-)
>
> diff --git c/git-mergetool.sh w/git-mergetool.sh
> index 87fa88a..b8604d6 100755
> --- c/git-mergetool.sh
> +++ w/git-mergetool.sh
> @@ -14,6 +14,13 @@ OPTIONS_SPEC=
>  . git-sh-setup
>  require_work_tree
>
> +if test -f "$GIT_DIR/MERGE_HEAD"
> +then
> +    in_merge=t show_changes=", (s)how changes"
> +else
> +    in_merge=f show_changes=
> +fi
> +
>  # Returns true if the mode reflects a symlink
>  is_symlink () {
>     test "$1" = 120000
> @@ -62,22 +69,28 @@ describe_file () {
>
>  resolve_symlink_merge () {
>     while true; do
> -       printf "Use (l)ocal or (r)emote, or (a)bort? "
> +       printf "Use (l)ocal or (r)emote$show_changes, or (a)bort? "
>        read ans
> -       case "$ans" in
> -           [lL]*)
> +       case "$in_merge,$ans" in
> +           ?,[lL]*)
>                git checkout-index -f --stage=2 -- "$MERGED"
>                git add -- "$MERGED"
>                cleanup_temp_files --save-backup
>                return 0
>                ;;
> -           [rR]*)
> +           ?,[rR]*)
>                git checkout-index -f --stage=3 -- "$MERGED"
>                git add -- "$MERGED"
>                cleanup_temp_files --save-backup
>                return 0
>                ;;
> -           [aA]*)
> +           t,[sS]*)
> +               git log -p --merge "$MERGED"
> +               printf "\n"
> +               resolve_symlink_merge
> +               return
> +               ;;
> +           ?,[aA]*)
>                return 1
>                ;;
>            esac
> @@ -87,23 +100,29 @@ resolve_symlink_merge () {
>  resolve_deleted_merge () {
>     while true; do
>        if base_present; then
> -           printf "Use (m)odified or (d)eleted file, or (a)bort? "
> +           printf "Use (m)odified or (d)eleted file$show_changes, or (a)bort? "
>        else
> -           printf "Use (c)reated or (d)eleted file, or (a)bort? "
> +           printf "Use (c)reated or (d)eleted file$show changes, or (a)bort? "
>        fi
>        read ans
> -       case "$ans" in
> -           [mMcC]*)
> +       case "$in_merge,$ans" in
> +           ?,[mMcC]*)
>                git add -- "$MERGED"
>                cleanup_temp_files --save-backup
>                return 0
>                ;;
> -           [dD]*)
> +           ?,[dD]*)
>                git rm -- "$MERGED" > /dev/null
>                cleanup_temp_files
>                return 0
>                ;;
> -           [aA]*)
> +           t,[sS]*)
> +               git log -p --merge "$MERGED"
> +               printf "\n"
> +               resolve_deleted_merge
> +               return
> +               ;;
> +           ?,[aA]*)
>                return 1
>                ;;
>            esac
> @@ -184,8 +203,23 @@ merge_file () {
>     describe_file "$local_mode" "local" "$LOCAL"
>     describe_file "$remote_mode" "remote" "$REMOTE"
>     if "$prompt" = true; then
> -       printf "Hit return to start merge resolution tool (%s): " "$merge_tool"
> -       read ans
> +       while true; do
> +           case $in_merge in
> +               t)      msg_head="(S)how changes, or h" ;;
> +               f)      msg_head="H" ;;
> +           esac
> +           print "${msg_head}it return to start merge resolution tool (%s): " "$merge_tool"
> +           read ans
> +           case "$in_merge,$ans" in
> +               t,[sS]*)
> +                   git log -p --merge "$MERGED"
> +                   printf "\n"
> +                   ;;
> +               ?,*)
> +                   break
> +                   ;;
> +           esac
> +        done
>     fi
>
>     case "$merge_tool" in
>


Looks good to me, though there's a minor typo on this line :
print "${msg_head}it return to start merge resolution tool (%s): " "$merge_tool"

- print should be printf

Cheers,
Jonathan
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux