git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
blob 56ec1d38a7a1c8ff39c30a277e381582b950df48 3171 bytes (raw)
name: git-difftool--helper.sh 	 # note: path name is non-authoritative(*)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
 
#!/bin/sh
# git-difftool--helper is a GIT_EXTERNAL_DIFF-compatible diff tool launcher.
# This script is typically launched by using the 'git difftool'
# convenience command.
#
# Copyright (c) 2009, 2010 David Aguilar

TOOL_MODE=diff
GIT_DIFFTOOL_SKIP_TO_FILE="$GIT_DIR/difftool-skip-to"
. git-mergetool--lib

# difftool.prompt controls the default prompt/no-prompt behavior
# and is overridden with $GIT_DIFFTOOL*_PROMPT.
should_prompt () {
	prompt_merge=$(git config --bool mergetool.prompt || echo true)
	prompt=$(git config --bool difftool.prompt || echo $prompt_merge)
	if test "$prompt" = true
	then
		test -z "$GIT_DIFFTOOL_NO_PROMPT"
	else
		test -n "$GIT_DIFFTOOL_PROMPT"
	fi
}

# Indicates that --extcmd=... was specified
use_ext_cmd () {
	test -n "$GIT_DIFFTOOL_EXTCMD"
}

launch_merge_tool () {
	# Merged is the filename as it appears in the work tree
	# Local is the contents of a/filename
	# Remote is the contents of b/filename
	# Custom merge tool commands might use $BASE so we provide it
	MERGED="$1"
	LOCAL="$2"
	REMOTE="$3"
	BASE="$1"

	# $LOCAL and $REMOTE are temporary files so prompt
	# the user with the real $MERGED name before launching $merge_tool.
	if should_prompt
	then
		if test -f "$GIT_DIFFTOOL_SKIP_TO_FILE"
		then
			SAVE_POINT_NUM=$(cat "$GIT_DIFFTOOL_SKIP_TO_FILE")
			if test $SAVE_POINT_NUM -le $GIT_DIFF_PATH_TOTAL &&
				test $SAVE_POINT_NUM -gt $GIT_DIFF_PATH_COUNTER
			then
				# choice skip or not skip when check first file.
				if test $GIT_DIFF_PATH_COUNTER -eq "1"
				then
					printf "do you want to skip to last time difftool save point($SAVE_POINT_NUM) [Y/n]?"
					read skip_ans || return
					if test "$skip_ans" = y
					then
						return
					fi
				else
					return
				fi
			fi
		fi
		# write the current coordinates to .git/difftool-skip-to
		if test !$SAVE_POINT_NUM || $SAVE_POINT_NUM -ne $GIT_DIFF_PATH_COUNTER
		then
			echo $GIT_DIFF_PATH_COUNTER > $GIT_DIFFTOOL_SKIP_TO_FILE
		fi
		printf "\nViewing (%s/%s): '%s'\n" "$GIT_DIFF_PATH_COUNTER" \
			"$GIT_DIFF_PATH_TOTAL" "$MERGED"
		if use_ext_cmd
		then
			printf "Launch '%s' [Y/n]? " \
				"$GIT_DIFFTOOL_EXTCMD"
		else
			printf "Launch '%s' [Y/n]? " "$merge_tool"
		fi
		read ans || return
		if test "$ans" = n
		then
			return
		fi
	fi

	if use_ext_cmd
	then
		export BASE
		eval $GIT_DIFFTOOL_EXTCMD '"$LOCAL"' '"$REMOTE"'
	else
		run_merge_tool "$merge_tool"
	fi
}

if ! use_ext_cmd
then
	if test -n "$GIT_DIFF_TOOL"
	then
		merge_tool="$GIT_DIFF_TOOL"
	else
		merge_tool="$(get_merge_tool)"
	fi
fi

if test -n "$GIT_DIFFTOOL_DIRDIFF"
then
	LOCAL="$1"
	REMOTE="$2"
	run_merge_tool "$merge_tool" false
else
	# Launch the merge tool on each path provided by 'git diff'
	while test $# -gt 6
	do
		launch_merge_tool "$1" "$2" "$5"
		status=$?
		if test $status -ge 126
		then
			# Command not found (127), not executable (126) or
			# exited via a signal (>= 128).
			exit $status
		fi

		if test "$status" != 0 &&
			test "$GIT_DIFFTOOL_TRUST_EXIT_CODE" = true
		then
			exit $status
		fi
		shift 7
	done
fi

if test -f $GIT_DIFFTOOL_SKIP_TO_FILE &&
	test $GIT_DIFF_PATH_COUNTER -eq $GIT_DIFF_PATH_TOTAL
then
	rm $GIT_DIFFTOOL_SKIP_TO_FILE

fi
exit 0

debug log:

solving 56ec1d38a7a1 ...
found 56ec1d38a7a1 in https://public-inbox.org/git/pull.870.git.1612711153591.gitgitgadget@gmail.com/
found 46af3e60b718 in https://80x24.org/mirrors/git.git
preparing index
index prepared:
100755 46af3e60b7185b2767accbee3420903edaf53d6f	git-difftool--helper.sh

applying [1/1] https://public-inbox.org/git/pull.870.git.1612711153591.gitgitgadget@gmail.com/
diff --git a/git-difftool--helper.sh b/git-difftool--helper.sh
index 46af3e60b718..56ec1d38a7a1 100755

Checking patch git-difftool--helper.sh...
Applied patch git-difftool--helper.sh cleanly.

index at:
100755 56ec1d38a7a1c8ff39c30a277e381582b950df48	git-difftool--helper.sh

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).