One more time.. Clean up git-merge-one-file-script
This uses git-checkout-file to make sure that the full pathname is created, instead of the script having to verify it by hand. Also, simplify the 3-way merge case by just writing to the right file and setting the initial index contents early.maint
							parent
							
								
									e0226add28
								
							
						
					
					
						commit
						98a96b00b8
					
				|  | @ -16,29 +16,11 @@ | ||||||
| # been handled already by git-read-tree, but that one doesn't | # been handled already by git-read-tree, but that one doesn't | ||||||
| # do any merges that might change the tree layout. | # do any merges that might change the tree layout. | ||||||
|  |  | ||||||
| verify_path() { |  | ||||||
|     file="$1" |  | ||||||
|     dir=`dirname "$file"` && |  | ||||||
|     mkdir -p "$dir" && |  | ||||||
|     rm -f -- "$file" && |  | ||||||
|     : >"$file" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| case "${1:-.}${2:-.}${3:-.}" in | case "${1:-.}${2:-.}${3:-.}" in | ||||||
| # | # | ||||||
| # Deleted in both. | # Deleted in both or deleted in one and unchanged in the other | ||||||
| # | # | ||||||
| "$1..") | "$1.." | "$1.$1" | "$1$1.") | ||||||
| 	echo "WARNING: $4 is removed in both branches." |  | ||||||
| 	echo "WARNING: This is a potential rename conflict." |  | ||||||
| 	rm -f -- "$4" && |  | ||||||
| 		exec git-update-cache --remove -- "$4" |  | ||||||
| 	;; |  | ||||||
|  |  | ||||||
| # |  | ||||||
| # Deleted in one and unchanged in the other. |  | ||||||
| # |  | ||||||
| "$1.$1" | "$1$1.") |  | ||||||
| 	echo "Removing $4" | 	echo "Removing $4" | ||||||
| 	rm -f -- "$4" && | 	rm -f -- "$4" && | ||||||
| 		exec git-update-cache --remove -- "$4" | 		exec git-update-cache --remove -- "$4" | ||||||
|  | @ -48,12 +30,9 @@ case "${1:-.}${2:-.}${3:-.}" in | ||||||
| # Added in one. | # Added in one. | ||||||
| # | # | ||||||
| ".$2." | "..$3" ) | ".$2." | "..$3" ) | ||||||
| 	case "$6$7" in *7??) mode=+x;; *) mode=-x;; esac | 	echo "Adding $4" | ||||||
| 	echo "Adding $4 with perm $mode." | 	git-update-cache --add --cacheinfo "$6$7" "$2$3" "$4" && | ||||||
| 	verify_path "$4" && | 		exec git-checkout-cache -u -f -- "$4" | ||||||
| 		git-cat-file blob "$2$3" >"$4" && |  | ||||||
| 		chmod $mode -- "$4" && |  | ||||||
| 		exec git-update-cache --add -- "$4" |  | ||||||
| 	;; | 	;; | ||||||
|  |  | ||||||
| # | # | ||||||
|  | @ -65,12 +44,9 @@ case "${1:-.}${2:-.}${3:-.}" in | ||||||
| 		echo "ERROR: but permissions conflict $6->$7." | 		echo "ERROR: but permissions conflict $6->$7." | ||||||
| 		exit 1 | 		exit 1 | ||||||
| 	fi | 	fi | ||||||
| 	case "$6" in *7??) mode=+x;; *) mode=-x;; esac | 	echo "Adding $4" | ||||||
| 	echo "Adding $4 with perm $mode" | 	git-update-cache --add --cacheinfo "$6" "$2" "$4" && | ||||||
| 	verify_path "$4" && | 		exec git-checkout-cache -u -f -- "$4" | ||||||
| 		git-cat-file blob "$2" >"$4" && |  | ||||||
| 		chmod $mode -- "$4" && |  | ||||||
| 		exec git-update-cache --add -- "$4" |  | ||||||
| 	;; | 	;; | ||||||
|  |  | ||||||
| # | # | ||||||
|  | @ -79,29 +55,26 @@ case "${1:-.}${2:-.}${3:-.}" in | ||||||
| "$1$2$3") | "$1$2$3") | ||||||
| 	echo "Auto-merging $4." | 	echo "Auto-merging $4." | ||||||
| 	orig=`git-unpack-file $1` | 	orig=`git-unpack-file $1` | ||||||
| 	src1=`git-unpack-file $2` |  | ||||||
| 	src2=`git-unpack-file $3` | 	src2=`git-unpack-file $3` | ||||||
|  |  | ||||||
| 	verify_path "$4" && | 	# We reset the index to the first branch, making | ||||||
| 		merge -p "$src1" "$orig" "$src2" > "$4" | 	# git-diff-file useful | ||||||
|  | 	git-update-cache --add --cacheinfo "$6" "$2" "$4"  | ||||||
|  | 		git-checkout-cache -u -f -- "$4" && | ||||||
|  | 		merge "$4" "$orig" "$src2" | ||||||
| 	ret=$? | 	ret=$? | ||||||
| 	rm -f -- "$orig" "$src1" "$src2" | 	rm -f -- "$orig" "$src2" | ||||||
|  |  | ||||||
| 	if [ "$6" != "$7" ]; then | 	if [ "$6" != "$7" ]; then | ||||||
| 		echo "ERROR: Permissions conflict: $5->$6,$7." | 		echo "ERROR: Permissions conflict: $5->$6,$7." | ||||||
| 		ret=1 | 		ret=1 | ||||||
| 	fi | 	fi | ||||||
| 	case "$6" in *7??) mode=+x;; *) mode=-x;; esac |  | ||||||
| 	chmod "$mode" "$4" |  | ||||||
|  |  | ||||||
| 	if [ $ret -ne 0 ]; then | 	if [ $ret -ne 0 ]; then | ||||||
| 		# Reset the index to the first branch, making |  | ||||||
| 		# git-diff-file useful |  | ||||||
| 		git-update-cache --add --cacheinfo "$6" "$2" "$4" |  | ||||||
| 		echo "ERROR: Merge conflict in $4." | 		echo "ERROR: Merge conflict in $4." | ||||||
| 		exit 1 | 		exit 1 | ||||||
| 	fi | 	fi | ||||||
| 	exec git-update-cache --add -- "$4" | 	exec git-update-cache -- "$4" | ||||||
| 	;; | 	;; | ||||||
|  |  | ||||||
| *) | *) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Linus Torvalds
						Linus Torvalds