* [PATCH] Add contrib/rerere-train script
@ 2008-09-27 11:44 Nanako Shiraishi
2008-09-29 12:39 ` Johannes Schindelin
0 siblings, 1 reply; 2+ messages in thread
From: Nanako Shiraishi @ 2008-09-27 11:44 UTC (permalink / raw)
To: Shawn O. Pearce; +Cc: git
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>
---
contrib/rerere-train.sh | 52 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 52 insertions(+), 0 deletions(-)
create mode 100755 contrib/rerere-train.sh
diff --git a/contrib/rerere-train.sh b/contrib/rerere-train.sh
new file mode 100755
index 0000000..2cfe1b9
--- /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
--
1.6.0.2
--
Nanako Shiraishi
http://ivory.ap.teacup.com/nanako3/
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH] Add contrib/rerere-train script
2008-09-27 11:44 [PATCH] Add contrib/rerere-train script Nanako Shiraishi
@ 2008-09-29 12:39 ` Johannes Schindelin
0 siblings, 0 replies; 2+ messages in thread
From: Johannes Schindelin @ 2008-09-29 12:39 UTC (permalink / raw)
To: Nanako Shiraishi; +Cc: Shawn O. Pearce, git
Hi,
On Sat, 27 Sep 2008, Nanako Shiraishi wrote:
> 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.
Cute idea. However, I would _love_ to have this as an option to
git-rerere, which would work in memory only.
This is how I would do it (if I had enough time to play with Git):
- teach merge_recursive_options not to write anything to the working
directory (should be relatively easy, as many parts of merge-recursive.c
already have no_wd/update_wd/!o->call_depth checks for that),
- refactor handle_file() in rerere.c to provide an in-memory-only version,
- teach rerere to call merge_recursive() with the in-memory-only option,
and then call the in-memory version of the handle_file() function for
all unmerged paths, using the resolutions from the given merge commit.
- then teach this new function to take an arbitrary commit range (but only
handling the two-parent merges within it).
Ciao,
Dscho
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2008-09-29 12:35 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-09-27 11:44 [PATCH] Add contrib/rerere-train script Nanako Shiraishi
2008-09-29 12:39 ` Johannes Schindelin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox