Record the type of commit operation in the reflog.
If committing a merge (.git/MERGE_HEAD exists), an initial tree (no HEAD) or using --amend to amend the prior commit then denote the subtype of commit in the reflog. This helps to distinguish amended or merge commits from normal commits. In the case of --amend the prior sha1 is probably the commit which is being thrown away in favor of the new commit. Since it is likely that the old commit doesn't have any ref pointing to it anymore it can be interesting to know why that the commit was replaced and orphaned. In the case of a merge the prior sha1 is probably the first parent of the new merge commit. Consequently having its prior sha1 in the reflog is slightly less interesting but its still informative to know the commit was the result of a merge which had to be completed by hand. Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
		 Shawn Pearce
					Shawn Pearce
				
			
				
					committed by
					
						 Junio C Hamano
						Junio C Hamano
					
				
			
			
				
	
			
			
			 Junio C Hamano
						Junio C Hamano
					
				
			
						parent
						
							0b0fe4a65d
						
					
				
				
					commit
					a3a733e63b
				
			| @ -635,9 +635,12 @@ fi | ||||
| PARENTS="-p HEAD" | ||||
| if test -z "$initial_commit" | ||||
| then | ||||
| 	rloga='commit' | ||||
| 	if [ -f "$GIT_DIR/MERGE_HEAD" ]; then | ||||
| 		rloga='commit (merge)' | ||||
| 		PARENTS="-p HEAD "`sed -e 's/^/-p /' "$GIT_DIR/MERGE_HEAD"` | ||||
| 	elif test -n "$amend"; then | ||||
| 		rloga='commit (amend)' | ||||
| 		PARENTS=$(git-cat-file commit HEAD | | ||||
| 			sed -n -e '/^$/q' -e 's/^parent /-p /p') | ||||
| 	fi | ||||
| @ -649,6 +652,7 @@ else | ||||
| 	fi | ||||
| 	PARENTS="" | ||||
| 	current= | ||||
| 	rloga='commit (initial)' | ||||
| fi | ||||
|  | ||||
| if test -z "$no_edit" | ||||
| @ -724,7 +728,7 @@ then | ||||
| 	fi && | ||||
| 	commit=$(cat "$GIT_DIR"/COMMIT_MSG | git-commit-tree $tree $PARENTS) && | ||||
| 	rlogm=$(sed -e 1q "$GIT_DIR"/COMMIT_MSG) && | ||||
| 	git-update-ref -m "commit: $rlogm" HEAD $commit $current && | ||||
| 	git-update-ref -m "$rloga: $rlogm" HEAD $commit $current && | ||||
| 	rm -f -- "$GIT_DIR/MERGE_HEAD" && | ||||
| 	if test -f "$NEXT_INDEX" | ||||
| 	then | ||||
|  | ||||
| @ -188,17 +188,30 @@ test_expect_success \ | ||||
| 	 echo OTHER >F && | ||||
| 	 GIT_AUTHOR_DATE="2005-05-26 23:41" \ | ||||
| 	 GIT_COMMITTER_DATE="2005-05-26 23:41" git-commit -F M -a && | ||||
| 	 h_OTHER=$(git-rev-parse --verify HEAD) | ||||
| 	 h_OTHER=$(git-rev-parse --verify HEAD) && | ||||
| 	 echo FIXED >F && | ||||
| 	 EDITOR=true \ | ||||
| 	 GIT_AUTHOR_DATE="2005-05-26 23:44" \ | ||||
| 	 GIT_COMMITTER_DATE="2005-05-26 23:44" git-commit --amend && | ||||
| 	 h_FIXED=$(git-rev-parse --verify HEAD) && | ||||
| 	 echo TEST+FIXED >F && | ||||
| 	 echo Merged initial commit and a later commit. >M && | ||||
| 	 echo $h_TEST >.git/MERGE_HEAD && | ||||
| 	 GIT_AUTHOR_DATE="2005-05-26 23:45" \ | ||||
| 	 GIT_COMMITTER_DATE="2005-05-26 23:45" git-commit -F M && | ||||
| 	 h_MERGED=$(git-rev-parse --verify HEAD) | ||||
| 	 rm -f M' | ||||
|  | ||||
| cat >expect <<EOF | ||||
| $Z $h_TEST $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150200 +0000	commit: add | ||||
| $Z $h_TEST $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150200 +0000	commit (initial): add | ||||
| $h_TEST $h_OTHER $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150860 +0000	commit: The other day this did not work. | ||||
| $h_OTHER $h_FIXED $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117151040 +0000	commit (amend): The other day this did not work. | ||||
| $h_FIXED $h_MERGED $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117151100 +0000	commit (merge): Merged initial commit and a later commit. | ||||
| EOF | ||||
| test_expect_success \ | ||||
| 	'git-commit logged updates' \ | ||||
| 	'diff expect .git/logs/$m' | ||||
| unset h_TEST h_OTHER | ||||
| unset h_TEST h_OTHER h_FIXED h_MERGED | ||||
|  | ||||
| test_expect_success \ | ||||
| 	'git-cat-file blob master:F (expect OTHER)' \ | ||||
|  | ||||
		Reference in New Issue
	
	Block a user