102 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/sh
 | |
| # Copyright (c) 2008, Nanako Shiraishi
 | |
| # Prime rerere database from existing merge commits
 | |
| 
 | |
| me=rerere-train
 | |
| USAGE=$(cat <<-EOF
 | |
| usage: $me [--overwrite] <rev-list-args>
 | |
| 
 | |
|     -h, --help            show the help
 | |
|     -o, --overwrite       overwrite any existing rerere cache
 | |
| EOF
 | |
| )
 | |
| 
 | |
| SUBDIRECTORY_OK=Yes
 | |
| 
 | |
| overwrite=0
 | |
| 
 | |
| while test $# -gt 0
 | |
| do
 | |
| 	opt="$1"
 | |
| 	case "$opt" in
 | |
| 	-h|--help)
 | |
| 		echo "$USAGE"
 | |
| 		exit 0
 | |
| 		;;
 | |
| 	-o|--overwrite)
 | |
| 		overwrite=1
 | |
| 		shift
 | |
| 		break
 | |
| 		;;
 | |
| 	--)
 | |
| 		shift
 | |
| 		break
 | |
| 		;;
 | |
| 	*)
 | |
| 		break
 | |
| 		;;
 | |
| 	esac
 | |
| done
 | |
| 
 | |
| # Overwrite or help options are not valid except as first arg
 | |
| for opt in "$@"
 | |
| do
 | |
| 	case "$opt" in
 | |
| 	-h|--help)
 | |
| 		echo "$USAGE"
 | |
| 		exit 0
 | |
| 		;;
 | |
| 	-o|--overwrite)
 | |
| 		echo "$USAGE"
 | |
| 		exit 0
 | |
| 		;;
 | |
| 	esac
 | |
| done
 | |
| 
 | |
| . "$(git --exec-path)/git-sh-setup"
 | |
| require_work_tree
 | |
| cd_to_toplevel
 | |
| 
 | |
| # Remember original branch
 | |
| branch=$(git symbolic-ref -q HEAD) ||
 | |
| original_HEAD=$(git rev-parse --verify HEAD) || {
 | |
| 	echo >&2 "Not on any branch and no commit yet?"
 | |
| 	exit 1
 | |
| }
 | |
| 
 | |
| mkdir -p "$GIT_DIR/rr-cache" || exit
 | |
| 
 | |
| git rev-list --parents "$@" |
 | |
| while read commit parent1 other_parents
 | |
| do
 | |
| 	if test -z "$other_parents"
 | |
| 	then
 | |
| 		# Skip non-merges
 | |
| 		continue
 | |
| 	fi
 | |
| 	git checkout -q "$parent1^0"
 | |
| 	if git merge $other_parents >/dev/null 2>&1
 | |
| 	then
 | |
| 		# Cleanly merges
 | |
| 		continue
 | |
| 	fi
 | |
| 	if test $overwrite = 1
 | |
| 	then
 | |
| 		git rerere forget .
 | |
| 	fi
 | |
| 	if test -s "$GIT_DIR/MERGE_RR"
 | |
| 	then
 | |
| 		git show -s --pretty=format:"Learning from %h %s" "$commit"
 | |
| 		git rerere
 | |
| 		git checkout -q $commit -- .
 | |
| 		git rerere
 | |
| 	fi
 | |
| 	git reset -q --hard
 | |
| done
 | |
| 
 | |
| if test -z "$branch"
 | |
| then
 | |
| 	git checkout "$original_HEAD"
 | |
| else
 | |
| 	git checkout "${branch#refs/heads/}"
 | |
| fi
 |