summaryrefslogtreecommitdiff
path: root/contrib/rerere-train.sh
diff options
context:
space:
mode:
authorNanako Shiraishi <nanako3@lavabit.com>2008-09-27 20:44:15 +0900
committerShawn O. Pearce <spearce@spearce.org>2008-09-29 09:15:41 -0700
commitc11c7a5db3676258512c4067c5279377811d3ab8 (patch)
treea24e2832a0166450f527d753b97eea198ebbb854 /contrib/rerere-train.sh
parent8252df62187e7fd35543552ffeab1e1eb048b57e (diff)
downloadgit-c11c7a5db3676258512c4067c5279377811d3ab8.tar.gz
Add contrib/rerere-train script
This script takes a range of commits (e.g. maint..next) as its arguments, recreates merge commits in the range to prime rr-cache database. Signed-off-by: Nanako Shiraishi <nanako3@lavabit.com> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Diffstat (limited to 'contrib/rerere-train.sh')
-rwxr-xr-xcontrib/rerere-train.sh52
1 files changed, 52 insertions, 0 deletions
diff --git a/contrib/rerere-train.sh b/contrib/rerere-train.sh
new file mode 100755
index 0000000000..2cfe1b936b
--- /dev/null
+++ b/contrib/rerere-train.sh
@@ -0,0 +1,52 @@
+#!/bin/sh
+# Copyright (c) 2008, Nanako Shiraishi
+# Prime rerere database from existing merge commits
+
+me=rerere-train
+USAGE="$me rev-list-args"
+
+SUBDIRECTORY_OK=Yes
+OPTIONS_SPEC=
+. 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 -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