git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 2/2] Feature Request: user defined suffix for temp files created by git-mergetool

From
Junio C Hamano <gitster@pobox.com>
Date
Oct 12, 2016, 17:59 UTC
Message-ID
<xmqqpon54fe5.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<1550673688.5271111.1476260677732.JavaMail.zimbra@redhat.com>
Josef Ridky <jridky@redhat.com> writes:
Show 7 quoted lines
> This is update of the second variant for request to add option to change
> suffix of name of temporary files generated by git mergetool. This
> change is requested for cases, when is git mergetool used for local
> comparison between two version of same package during package rebase.
>
> Signed-off-by: Josef Ridky <jridky@redhat.com>
> ---
David, what do you think?

I don't think you were ever CC'ed on any of the messages in this thread, and I don't think you've commented on the topic. The thread begins here:

  https://public-inbox.org/git/1329039097.128066.1475476591437.JavaMail.zimbra@redhat.com/

In any case, I suggest update to the log message to something like this:

    Subject: mergetool: allow custom naming for temporary files
    A front-end program that is spawned by "git mergetool" is given
    three temporary files (e.g. it may get "x_LOCAL.txt",
    "x_REMOTE.txt", and "x_BASE.txt" while merging "x.txt").  
    Custom wrappers to "git mergetool" benefits if they are allowed
    to rename these hardcoded suffixes to match the workflow they
    implement.  For example, they may be used to compare and merge
    two versions that is available locally, and OLD/NEW may be more
    appropriate than LOCAL/REMOTE in such a context.

primarily because "the second variant" is meaningless thing to say in our long term history, when the first variant never was recorded there. Josef may want to elaborate more on the latter paragraph.

Show 143 quoted lines
>  Documentation/git-mergetool.txt | 22 ++++++++++++++-
>  git-mergetool.sh                | 60 +++++++++++++++++++++++++++++++++++++----
>  2 files changed, 76 insertions(+), 6 deletions(-)
>
> diff --git a/Documentation/git-mergetool.txt b/Documentation/git-mergetool.txt
> index e846c2e..a0466ac 100644
> --- a/Documentation/git-mergetool.txt
> +++ b/Documentation/git-mergetool.txt
> @@ -8,7 +8,7 @@ git-mergetool - Run merge conflict resolution tools to resolve merge conflicts
>  SYNOPSIS
>  --------
>  [verse]
> -'git mergetool' [--tool=<tool>] [-y | --[no-]prompt] [<file>...]
> +'git mergetool' [--tool=<tool>] [-y | --[no-]prompt] [--local=<name>] [--remote=<name>] [--backup=<name>] [--base=<name>] [<file>...]
>  
>  DESCRIPTION
>  -----------
> @@ -79,6 +79,26 @@ success of the resolution after the custom tool has exited.
>  	Prompt before each invocation of the merge resolution program
>  	to give the user a chance to skip the path.
>  
> +--local=<name>::
> +	Use string from <name> as part of suffix of name of temporary
> +	file (local) for merging. If not set, default value is used.
> +	Default suffix is LOCAL.
> +
> +--remote=<name>::
> +	Use string from <name> as part of suffix of name of temporary
> +	file (remote) for merging. If not set, default value is used.
> +	Default suffix is REMOTE.
> +
> +--backup=<name>::
> +	Use string from <name> as part of suffix of name of temporary
> +	file (backup) for merging. If not set, default value is used.
> +	Default suffix is BACKUP.
> +
> +--base=<name>::
> +	Use string from <name> as part of suffix of name of temporary
> +	file (base) for merging. If not set, default value is used.
> +	Default suffix is BASE.
> +
>  TEMPORARY FILES
>  ---------------
>  `git mergetool` creates `*.orig` backup files while resolving merges.
> diff --git a/git-mergetool.sh b/git-mergetool.sh
> index bf86270..ed9ba82 100755
> --- a/git-mergetool.sh
> +++ b/git-mergetool.sh
> @@ -8,7 +8,7 @@
>  # at the discretion of Junio C Hamano.
>  #
>  
> -USAGE='[--tool=tool] [--tool-help] [-y|--no-prompt|--prompt] [file to merge] ...'
> +USAGE='[--tool=tool] [--tool-help] [-y|--no-prompt|--prompt] [--local=name] [--remote=name] [--backup=name] [--base=name] [file to merge] ...'
>  SUBDIRECTORY_OK=Yes
>  NONGIT_OK=Yes
>  OPTIONS_SPEC=
> @@ -16,6 +16,13 @@ TOOL_MODE=merge
>  . git-sh-setup
>  . git-mergetool--lib
>  
> +# Can be changed by user
> +LOCAL_NAME='LOCAL'
> +BASE_NAME='BASE'
> +BACKUP_NAME='BACKUP'
> +REMOTE_NAME='REMOTE'
> +
> +
>  # Returns true if the mode reflects a symlink
>  is_symlink () {
>  	test "$1" = 120000
> @@ -271,10 +278,10 @@ merge_file () {
>  		BASE=${BASE##*/}
>  	fi
>  
> -	BACKUP="$MERGETOOL_TMPDIR/${BASE}_BACKUP_$$$ext"
> -	LOCAL="$MERGETOOL_TMPDIR/${BASE}_LOCAL_$$$ext"
> -	REMOTE="$MERGETOOL_TMPDIR/${BASE}_REMOTE_$$$ext"
> -	BASE="$MERGETOOL_TMPDIR/${BASE}_BASE_$$$ext"
> +	BACKUP="$MERGETOOL_TMPDIR/${BASE}_${BACKUP_NAME}_$$$ext"
> +	LOCAL="$MERGETOOL_TMPDIR/${BASE}_${LOCAL_NAME}_$$$ext"
> +	REMOTE="$MERGETOOL_TMPDIR/${BASE}_${REMOTE_NAME}_$$$ext"
> +	BASE="$MERGETOOL_TMPDIR/${BASE}_${BASE_NAME}_$$$ext"
>  
>  	base_mode=$(git ls-files -u -- "$MERGED" | awk '{if ($3==1) print $1;}')
>  	local_mode=$(git ls-files -u -- "$MERGED" | awk '{if ($3==2) print $1;}')
> @@ -396,6 +403,18 @@ do
>  	--prompt)
>  		prompt=true
>  		;;
> +	--local=*)
> +		LOCAL_NAME=${1#--local=}
> +		;;
> +	--remote=*)
> +		REMOTE_NAME=${1#--remote=}
> +		;;
> +	--base=*)
> +		BASE_NAME=${1#--base=}
> +		;;
> +	--backup=*)
> +		BACKUP_NAME=${1#--backup=}
> +		;;
>  	--)
>  		shift
>  		break
> @@ -410,6 +429,37 @@ do
>  	shift
>  done
>  
> +# sanity check after parsing command line
> +case "" in
> +"$LOCAL_NAME"|"$REMOTE_NAME"|"$BASE_NAME"|"$BACKUP_NAME")
> +	die "You cannot set any of --local/remote/base/backup to empty."
> +	;;
> +esac
> +
> +case "$LOCAL_NAME" in
> +"$REMOTE_NAME"|"$BASE_NAME"|"$BACKUP_NAME")
> +	die "You cannot set any of --remote/base/backup to same as --local."
> +	;;
> +esac
> +
> +case "$REMOTE_NAME" in
> +"$LOCAL_NAME"|"$BASE_NAME"|"$BACKUP_NAME")
> +	die "You cannot set any of --local/base/backup to same as --remote."
> +	;;
> +esac
> +
> +case "$BASE_NAME" in
> +"$LOCAL_NAME"|"$REMOTE_NAME"|"$BACKUP_NAME")
> +	die "You cannot set any of --local/remote/backup to same as --base."
> +	;;
> +esac
> +
> +case "$BACKUP_NAME" in
> +"$LOCAL_NAME"|"$REMOTE_NAME"|"$BASE_NAME")
> +	die "You cannot set any of --local/remote/base to same as --backup."
> +	;;
> +esac
> +
>  prompt_after_failed_merge () {
>  	while true
>  	do
Previous: Josef RidkyNext: David Aguilar
Message 15 of 19 in “Feature Request: user defined suffix for temp files created by git-mergetool”
  1. Josef RidkyOct 3, 2016
  2. Anatoly BorodinOct 3, 2016
  3. Josef RidkyOct 4, 2016
  4. David AguilarOct 5, 2016
  5. Josef RidkyOct 5, 2016
  6. Josef RidkyOct 5, 2016
  7. Junio C HamanoOct 5, 2016
  8. Josef RidkyOct 6, 2016
  9. Johannes SixtOct 5, 2016
  10. Josef RidkyOct 6, 2016
  11. 1/2 Feature Request: user defined suffix for temp files created by git-mergetoolJosef Ridky, Oct 6, 2016
  12. 2/2 Feature Request: user defined suffix for temp files created by git-mergetoolJosef Ridky, Oct 6, 2016
  13. Junio C HamanoOct 6, 2016
  14. Josef RidkyOct 12, 2016
  15. Junio C HamanoOct 12, 2016
  16. David AguilarOct 13, 2016
  17. David AguilarOct 13, 2016
  18. Junio C HamanoOct 6, 2016
  19. Junio C HamanoOct 6, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.