[PATCH 02/31] rebase: refactor reading of state

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Martin von Zweigbergk
Date: Tuesday, December 28, 2010 - 2:30 am

The code reading the state saved in $merge_dir or $rebase_dir is
currently spread out in many places, making it harder to read and to
introduce additional state. Extract this code into one method that reads
the state.

Signed-off-by: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>
---
 git-rebase.sh |   53 +++++++++++++++++++++++------------------------------
 1 files changed, 23 insertions(+), 30 deletions(-)

diff --git a/git-rebase.sh b/git-rebase.sh
index 79f8008..bf144dc 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -57,6 +57,22 @@ rebase_root=
 force_rebase=
 allow_rerere_autoupdate=
 
+read_state () {
+	if test -d "$merge_dir"
+	then
+		state_dir="$merge_dir"
+		prev_head=$(cat "$merge_dir"/prev_head) &&
+		end=$(cat "$merge_dir"/end) &&
+		msgnum=$(cat "$merge_dir"/msgnum)
+	else
+		state_dir="$apply_dir"
+	fi &&
+	head_name=$(cat "$state_dir"/head-name) &&
+	onto=$(cat "$state_dir"/onto) &&
+	orig_head=$(cat "$state_dir"/orig-head) &&
+	GIT_QUIET=$(cat "$state_dir"/quiet)
+}
+
 continue_merge () {
 	test -n "$prev_head" || die "prev_head must be defined"
 	test -d "$merge_dir" || die "$merge_dir directory does not exist"
@@ -138,10 +154,6 @@ call_merge () {
 }
 
 move_to_original_branch () {
-	test -z "$head_name" &&
-		head_name="$(cat "$merge_dir"/head-name)" &&
-		onto="$(cat "$merge_dir"/onto)" &&
-		orig_head="$(cat "$merge_dir"/orig-head)"
 	case "$head_name" in
 	refs/*)
 		message="rebase finished: $head_name onto $onto"
@@ -220,13 +232,9 @@ do
 			echo "mark them as resolved using git add"
 			exit 1
 		}
+		read_state
 		if test -d "$merge_dir"
 		then
-			prev_head=$(cat "$merge_dir/prev_head")
-			end=$(cat "$merge_dir/end")
-			msgnum=$(cat "$merge_dir/msgnum")
-			onto=$(cat "$merge_dir/onto")
-			GIT_QUIET=$(cat "$merge_dir/quiet")
 			continue_merge
 			while test "$msgnum" -le "$end"
 			do
@@ -236,10 +244,6 @@ do
 			finish_rb_merge
 			exit
 		fi
-		head_name=$(cat "$apply_dir"/head-name) &&
-		onto=$(cat "$apply_dir"/onto) &&
-		orig_head=$(cat "$apply_dir"/orig-head) &&
-		GIT_QUIET=$(cat "$apply_dir"/quiet)
 		git am --resolved --3way --resolvemsg="$RESOLVEMSG" &&
 		move_to_original_branch
 		exit
@@ -249,15 +253,11 @@ do
 			die "No rebase in progress?"
 
 		git reset --hard HEAD || exit $?
+		read_state
 		if test -d "$merge_dir"
 		then
 			git rerere clear
-			prev_head=$(cat "$merge_dir/prev_head")
-			end=$(cat "$merge_dir/end")
-			msgnum=$(cat "$merge_dir/msgnum")
 			msgnum=$(($msgnum + 1))
-			onto=$(cat "$merge_dir/onto")
-			GIT_QUIET=$(cat "$merge_dir/quiet")
 			while test "$msgnum" -le "$end"
 			do
 				call_merge "$msgnum"
@@ -266,10 +266,6 @@ do
 			finish_rb_merge
 			exit
 		fi
-		head_name=$(cat "$apply_dir"/head-name) &&
-		onto=$(cat "$apply_dir"/onto) &&
-		orig_head=$(cat "$apply_dir"/orig-head) &&
-		GIT_QUIET=$(cat "$apply_dir"/quiet)
 		git am -3 --skip --resolvemsg="$RESOLVEMSG" &&
 		move_to_original_branch
 		exit
@@ -279,18 +275,15 @@ do
 			die "No rebase in progress?"
 
 		git rerere clear
-
-		test -d "$merge_dir" || merge_dir="$apply_dir"
-
-		head_name="$(cat "$merge_dir"/head-name)" &&
+		read_state
 		case "$head_name" in
 		refs/*)
 			git symbolic-ref HEAD $head_name ||
 			die "Could not move back to $head_name"
 			;;
 		esac
-		git reset --hard $(cat "$merge_dir/orig-head")
-		rm -r "$merge_dir"
+		git reset --hard $orig_head
+		rm -r "$state_dir"
 		exit
 		;;
 	--onto)
@@ -573,12 +566,12 @@ fi
 # this is rename-aware if the recursive (default) strategy is used
 
 mkdir -p "$merge_dir"
-echo "$onto" > "$merge_dir/onto"
 echo "$onto_name" > "$merge_dir/onto_name"
 prev_head=$orig_head
 echo "$prev_head" > "$merge_dir/prev_head"
-echo "$orig_head" > "$merge_dir/orig-head"
 echo "$head_name" > "$merge_dir/head-name"
+echo "$onto" > "$merge_dir/onto"
+echo "$orig_head" > "$merge_dir/orig-head"
 echo "$GIT_QUIET" > "$merge_dir/quiet"
 
 msgnum=0
-- 
1.7.3.2.864.gbbb96

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 00/31] Refactor rebase, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 01/31] rebase: clearer names for directory variables, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 02/31] rebase: refactor reading of state, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 03/31] rebase: read state outside loop, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 04/31] rebase: remove unused rebase state 'prev_head', Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 05/31] rebase: improve detection of rebase in progress, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 06/31] rebase: act on command line outside parsing loop, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 07/31] rebase: stricter check of standalone sub command, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 08/31] rebase: align variable names, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 09/31] rebase: align variable content, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 10/31] rebase: factor out command line option proce ..., Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 11/31] rebase -i: remove now unnecessary directory ..., Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 12/31] rebase: reorder validation steps, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 13/31] rebase: factor out reference parsing, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 14/31] rebase: factor out clean work tree check, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 15/31] rebase: factor out call to pre-rebase hook, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 16/31] rebase -i: support --stat, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 17/31] rebase: remove $branch as synonym for $orig_head, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 18/31] rebase: extract merge code to new source file, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 19/31] rebase: extract am code to new source file, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 20/31] rebase: show consistent conflict resolution hint, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 21/31] rebase -i: align variable names, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 22/31] rebase: make -v a tiny bit more verbose, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 23/31] rebase: factor out sub command handling, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 24/31] rebase: extract code for writing basic state, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 25/31] rebase: remember verbose option, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 26/31] rebase: remember strategy and strategy options, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 27/31] rebase -m: remember allow_rerere_autoupdate ..., Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 28/31] rebase -m: don't print exit code 2 when merg ..., Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 29/31] git-rebase--am: remove unnecessary --3way option, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 30/31] rebase -i: don't read unused variable preser ..., Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
[PATCH 31/31] rebase -i: remove unnecessary state rebase-root, Martin von Zweigbergk, (Tue Dec 28, 2:30 am)
Re: [PATCH 16/31] rebase -i: support --stat, Martin von Zweigbergk, (Tue Dec 28, 6:24 am)
Re: [PATCH 16/31] rebase -i: support --stat, Johannes Schindelin, (Tue Dec 28, 10:59 am)
Re: [PATCH 05/31] rebase: improve detection of rebase in p ..., Martin von Zweigbergk, (Tue Dec 28, 1:35 pm)
Re: [PATCH 01/31] rebase: clearer names for directory vari ..., Martin von Zweigbergk, (Tue Dec 28, 1:53 pm)
Re: [PATCH 02/31] rebase: refactor reading of state, Junio C Hamano, (Tue Dec 28, 4:08 pm)
Re: [PATCH 16/31] rebase -i: support --stat, Junio C Hamano, (Tue Dec 28, 4:36 pm)
Re: [PATCH 16/31] rebase -i: support --stat, Johannes Schindelin, (Tue Dec 28, 4:44 pm)
Re: [PATCH 02/31] rebase: refactor reading of state, Martin von Zweigbergk, (Wed Dec 29, 1:09 am)
Re: [PATCH 18/31] rebase: extract merge code to new source ..., Martin von Zweigbergk, (Wed Dec 29, 3:24 pm)
Re: [PATCH 31/31] rebase -i: remove unnecessary state reba ..., Martin von Zweigbergk, (Wed Dec 29, 3:31 pm)
Re: [PATCH 31/31] rebase -i: remove unnecessary state reba ..., Christian Couder, (Thu Dec 30, 10:41 pm)
Re: [PATCH 18/31] rebase: extract merge code to new source ..., Martin von Zweigbergk, (Fri Dec 31, 7:05 am)
Re: [PATCH 08/31] rebase: align variable names, Thomas Rast, (Tue Jan 4, 12:12 pm)
Re: [PATCH 00/31] Refactor rebase, Thomas Rast, (Tue Jan 4, 12:57 pm)