#!/bin/sh # Copyright (c) 2008, Nanako Shiraishi # Prime rerere database from existing merge commits setvar me = 'rerere-train' setvar USAGE = ""$me rev-list-args"" setvar SUBDIRECTORY_OK = 'Yes' setvar OPTIONS_SPEC = '' source "$(git --exec-path)/git-sh-setup" require_work_tree cd_to_toplevel # Remember original branch setvar branch = $(git symbolic-ref -q HEAD) || setvar original_HEAD = $(git rev-parse --verify HEAD) || do { echo >&2 "Not on any branch and no commit yet?>&2 "Not on any branch and no commit yet?" exit 1 } mkdir -p "$GIT_DIR/rr-cache" || exit git rev-list --parents @ARGV | while read commit parent1 other_parents { if test -z $other_parents { # Skip non-merges continue } git checkout -q "$parent1^0" if git merge $other_parents >/dev/null 2>&1 { # Cleanly merges continue } if test -s "$GIT_DIR/MERGE_RR" { git show -s --pretty=format:"Learning from %h %s" $commit git rerere git checkout -q $commit -- . git rerere } git reset -q --hard } if test -z $branch { git checkout $original_HEAD } else { git checkout ${branch#refs/heads/} }