@matheusbsbs / matheus-bagliano / commits / c11c7a5db3
Fork 0

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>

Nanako Shiraishi committed Sep 27, 2008 at 20:44 UTC c11c7a5db3676258512c4067c5279377811d3ab8
1 file changed +52
contrib/rerere-train.sh new
+52
@@ -0,0 +1,52 @@
1 +#!/bin/sh
2 +# Copyright (c) 2008, Nanako Shiraishi
3 +# Prime rerere database from existing merge commits
4 +
5 +me=rerere-train
6 +USAGE="$me rev-list-args"
7 +
8 +SUBDIRECTORY_OK=Yes
9 +OPTIONS_SPEC=
10 +. git-sh-setup
11 +require_work_tree
12 +cd_to_toplevel
13 +
14 +# Remember original branch
15 +branch=$(git symbolic-ref -q HEAD) ||
16 +original_HEAD=$(git rev-parse --verify HEAD) || {
17 + echo >&2 "Not on any branch and no commit yet?"
18 + exit 1
19 +}
20 +
21 +mkdir -p "$GIT_DIR/rr-cache" || exit
22 +
23 +git rev-list --parents "$@" |
24 +while read commit parent1 other_parents
25 +do
26 + if test -z "$other_parents"
27 + then
28 + # Skip non-merges
29 + continue
30 + fi
31 + git checkout -q "$parent1^0"
32 + if git merge $other_parents >/dev/null 2>&1
33 + then
34 + # Cleanly merges
35 + continue
36 + fi
37 + if test -s "$GIT_DIR/MERGE_RR"
38 + then
39 + git show -s --pretty=format:"Learning from %h %s" "$commit"
40 + git rerere
41 + git checkout -q $commit -- .
42 + git rerere
43 + fi
44 + git reset -q --hard
45 +done
46 +
47 +if test -z "$branch"
48 +then
49 + git checkout "$original_HEAD"
50 +else
51 + git checkout "${branch#refs/heads/}"
52 +fi