Use git-update-ref in scripts.
This uses the git-update-ref command in scripts for safer updates. Also places where we used to read HEAD ref by using "cat" were fixed to use git-rev-parse. This will matter when we start using symbolic references. Signed-off-by: Junio C Hamano <junkio@cox.net>maint
							parent
							
								
									a7928f8ec7
								
							
						
					
					
						commit
						bf7960eb51
					
				|  | @ -108,9 +108,10 @@ fi | |||
|  | ||||
| tree=$(git-write-tree) || exit 1 | ||||
| echo Wrote tree $tree | ||||
| commit=$(git-commit-tree $tree -p $(cat "$GIT_DIR"/HEAD) < "$final") || exit 1 | ||||
| parent=$(git-rev-parse --verify HEAD) && | ||||
| commit=$(git-commit-tree $tree -p $parent <"$final") || exit 1 | ||||
| echo Committed: $commit | ||||
| echo $commit > "$GIT_DIR"/HEAD | ||||
| git-update-ref HEAD $commit $parent || exit | ||||
|  | ||||
| if test -x "$GIT_DIR"/hooks/post-applypatch | ||||
| then | ||||
|  |  | |||
|  | @ -159,7 +159,9 @@ if [ ! -r "$GIT_DIR/HEAD" ]; then | |||
| 		exit 1 | ||||
| 	fi | ||||
| 	PARENTS="" | ||||
| 	current= | ||||
| else | ||||
| 	current=$(git-rev-parse --verify HEAD) | ||||
| 	if [ -f "$GIT_DIR/MERGE_HEAD" ]; then | ||||
| 		PARENTS="-p HEAD "`sed -e 's/^/-p /' "$GIT_DIR/MERGE_HEAD"` | ||||
| 	fi | ||||
|  | @ -220,7 +222,7 @@ if test -s .cmitchk | |||
| then | ||||
| 	tree=$(git-write-tree) && | ||||
| 	commit=$(cat .cmitmsg | git-commit-tree $tree $PARENTS) && | ||||
| 	echo $commit > "$GIT_DIR/HEAD" && | ||||
| 	git-update-ref HEAD $commit $current && | ||||
| 	rm -f -- "$GIT_DIR/MERGE_HEAD" | ||||
| else | ||||
| 	echo >&2 "* no commit message?  aborting commit." | ||||
|  |  | |||
							
								
								
									
										32
									
								
								git-fetch.sh
								
								
								
								
							
							
						
						
									
										32
									
								
								git-fetch.sh
								
								
								
								
							|  | @ -110,14 +110,16 @@ fast_forward_local () { | |||
| 	else | ||||
| 		echo >&2 "* $1: storing $3" | ||||
| 	fi | ||||
| 	echo "$2" >"$GIT_DIR/$1" ;; | ||||
| 	git-update-ref "$1" "$2"  | ||||
| 	;; | ||||
|  | ||||
|     refs/heads/*) | ||||
| 	# NEEDSWORK: use the same cmpxchg protocol here. | ||||
| 	echo "$2" >"$GIT_DIR/$1.lock" | ||||
| 	if test -f "$GIT_DIR/$1" | ||||
| 	# $1 is the ref being updated. | ||||
| 	# $2 is the new value for the ref. | ||||
| 	local=$(git-rev-parse --verify "$1^0" 2>/dev/null) | ||||
| 	if test "$local" | ||||
| 	then | ||||
| 	    local=$(git-rev-parse --verify "$1^0") && | ||||
| 	    # Require fast-forward. | ||||
| 	    mb=$(git-merge-base "$local" "$2") && | ||||
| 	    case "$2,$mb" in | ||||
| 	    $local,*) | ||||
|  | @ -125,34 +127,34 @@ fast_forward_local () { | |||
| 		;; | ||||
| 	    *,$local) | ||||
| 		echo >&2 "* $1: fast forward to $3" | ||||
| 		git-update-ref "$1" "$2" "$local" | ||||
| 		;; | ||||
| 	    *) | ||||
| 		false | ||||
| 		;; | ||||
| 	    esac || { | ||||
| 		echo >&2 "* $1: does not fast forward to $3;" | ||||
| 		case "$force,$single_force" in | ||||
| 		t,* | *,t) | ||||
| 		case ",$force,$single_force," in | ||||
| 		*,t,*) | ||||
| 			echo >&2 "  forcing update." | ||||
| 			git-update-ref "$1" "$2" "$local" | ||||
| 			;; | ||||
| 		*) | ||||
| 			mv "$GIT_DIR/$1.lock" "$GIT_DIR/$1.remote" | ||||
| 			echo >&2 "  leaving it in '$1.remote'" | ||||
| 			echo >&2 "  not updating." | ||||
| 			;; | ||||
| 		esac | ||||
| 	    } | ||||
| 	else | ||||
| 	    echo >&2 "* $1: storing $3" | ||||
| 	    git-update-ref "$1" "$2" | ||||
| 	fi | ||||
| 	test -f "$GIT_DIR/$1.lock" && | ||||
| 	    mv "$GIT_DIR/$1.lock" "$GIT_DIR/$1" | ||||
| 	;; | ||||
|     esac | ||||
| } | ||||
|  | ||||
| case "$update_head_ok" in | ||||
| '') | ||||
| 	orig_head=$(cat "$GIT_DIR/HEAD" 2>/dev/null) | ||||
| 	orig_head=$(git-rev-parse --verify HEAD 2>/dev/null) | ||||
| 	;; | ||||
| esac | ||||
|  | ||||
|  | @ -196,7 +198,7 @@ do | |||
|     rsync://*) | ||||
| 	TMP_HEAD="$GIT_DIR/TMP_HEAD" | ||||
| 	rsync -L -q "$remote/$remote_name" "$TMP_HEAD" || exit 1 | ||||
| 	head=$(git-rev-parse TMP_HEAD) | ||||
| 	head=$(git-rev-parse --verify TMP_HEAD) | ||||
| 	rm -f "$TMP_HEAD" | ||||
| 	test "$rsync_slurped_objects" || { | ||||
| 	    rsync -av --ignore-existing --exclude info \ | ||||
|  | @ -285,10 +287,10 @@ case ",$update_head_ok,$orig_head," in | |||
| *,, | t,* ) | ||||
| 	;; | ||||
| *) | ||||
| 	curr_head=$(cat "$GIT_DIR/HEAD" 2>/dev/null) | ||||
| 	curr_head=$(git-rev-parse --verify HEAD 2>/dev/null) | ||||
| 	if test "$curr_head" != "$orig_head" | ||||
| 	then | ||||
| 		echo "$orig_head" >$GIT_DIR/HEAD | ||||
| 	    	git-update-ref HEAD "$orig_head" | ||||
| 		die "Cannot fetch into the current branch." | ||||
| 	fi | ||||
| 	;; | ||||
|  |  | |||
|  | @ -116,8 +116,9 @@ case "$#,$common" in | |||
| 	# Again the most common case of merging one remote. | ||||
| 	echo "Updating from $head to $1." | ||||
| 	git-update-index --refresh 2>/dev/null | ||||
| 	git-read-tree -u -m $head "$1" || exit 1 | ||||
| 	git-rev-parse --verify "$1^0" > "$GIT_DIR/HEAD" | ||||
| 	git-read-tree -u -m $head "$1" && | ||||
| 	new_head=$(git-rev-parse --verify "$1^0") && | ||||
| 	git-update-ref HEAD "$new_head" "$head" || exit 1 | ||||
| 	summary "$1" | ||||
| 	dropsave | ||||
| 	exit 0 | ||||
|  | @ -215,9 +216,9 @@ then | |||
|     do | ||||
|         parents="$parents -p $remote" | ||||
|     done | ||||
|     result_commit=$(echo "$merge_msg" | git-commit-tree $result_tree $parents) | ||||
|     result_commit=$(echo "$merge_msg" | git-commit-tree $result_tree $parents) || exit | ||||
|     echo "Committed merge $result_commit, made by $wt_strategy." | ||||
|     echo $result_commit >"$GIT_DIR/HEAD" | ||||
|     git-update-ref HEAD $result_commit $head | ||||
|     summary $result_commit | ||||
|     dropsave | ||||
|     exit 0 | ||||
|  |  | |||
|  | @ -86,5 +86,5 @@ esac | |||
| result_commit=$(git-fmt-merge-msg <"$GIT_DIR/FETCH_HEAD" | | ||||
| 		git-commit-tree $MRT $PARENT) | ||||
| echo "Committed merge $result_commit" | ||||
| echo $result_commit >"$GIT_DIR"/HEAD | ||||
| git-update-ref HEAD $result_commit $head | ||||
| git-diff-tree -p $head $result_commit | git-apply --stat | ||||
|  |  | |||
|  | @ -6,10 +6,10 @@ | |||
|  | ||||
| . git-sh-setup || die "Not a git archive" | ||||
|  | ||||
| orig_head=$(cat "$GIT_DIR/HEAD") || die "Pulling into a black hole?" | ||||
| orig_head=$(git-rev-parse --verify HEAD) || die "Pulling into a black hole?" | ||||
| git-fetch --update-head-ok "$@" || exit 1 | ||||
|  | ||||
| curr_head=$(cat "$GIT_DIR/HEAD") | ||||
| curr_head=$(git-rev-parse --verify HEAD) | ||||
| if test "$curr_head" != "$orig_head" | ||||
| then | ||||
| 	# The fetch involved updating the current branch. | ||||
|  | @ -40,4 +40,4 @@ case "$merge_head" in | |||
| esac | ||||
|  | ||||
| merge_name=$(git-fmt-merge-msg <"$GIT_DIR/FETCH_HEAD") | ||||
| git-resolve "$(cat "$GIT_DIR"/HEAD)" $merge_head "$merge_name" | ||||
| git-resolve "$curr_head" $merge_head "$merge_name" | ||||
|  |  | |||
|  | @ -33,7 +33,8 @@ test "$different1$different2" = "" || | |||
| die "Your working tree does not match $ours_symbolic." | ||||
|  | ||||
| git-read-tree -m -u $ours $upstream && | ||||
| git-rev-parse --verify "$upstream^0" >"$GIT_DIR/HEAD" || exit | ||||
| new_head=$(git-rev-parse --verify "$upstream^0") && | ||||
| git-update-ref HEAD "$new_head" || exit | ||||
|  | ||||
| tmp=.rebase-tmp$$ | ||||
| fail=$tmp-fail | ||||
|  | @ -50,7 +51,7 @@ do | |||
| 		continue ;; | ||||
| 	esac | ||||
| 	echo >&2 "* Applying: $msg" | ||||
| 	S=`cat "$GIT_DIR/HEAD"` && | ||||
| 	S=$(git-rev-parse --verify HEAD) && | ||||
| 	git-cherry-pick --replay $commit || { | ||||
| 		echo >&2 "* Not applying the patch and continuing." | ||||
| 		echo $commit >>$fail | ||||
|  |  | |||
|  | @ -60,7 +60,7 @@ then | |||
| else | ||||
| 	rm -f "$GIT_DIR/ORIG_HEAD" | ||||
| fi | ||||
| echo "$rev" >"$GIT_DIR/HEAD" | ||||
| git-update-ref HEAD "$rev" | ||||
|  | ||||
| case "$reset_type" in | ||||
| --hard ) | ||||
|  |  | |||
|  | @ -45,7 +45,7 @@ case "$common" in | |||
| "$head") | ||||
| 	echo "Updating from $head to $merge." | ||||
| 	git-read-tree -u -m $head $merge || exit 1 | ||||
| 	echo $merge > "$GIT_DIR"/HEAD | ||||
| 	git-update-ref HEAD "$merge" "$head" | ||||
| 	git-diff-tree -p $head $merge | git-apply --stat | ||||
| 	dropheads | ||||
| 	exit 0 | ||||
|  | @ -99,6 +99,6 @@ if [ $? -ne 0 ]; then | |||
| fi | ||||
| result_commit=$(echo "$merge_msg" | git-commit-tree $result_tree -p $head -p $merge) | ||||
| echo "Committed merge $result_commit" | ||||
| echo $result_commit > "$GIT_DIR"/HEAD | ||||
| git-update-ref HEAD "$result_commit" "$head" | ||||
| git-diff-tree -p $head $result_commit | git-apply --stat | ||||
| dropheads | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano