Subject: [PATCH 3/3] rebase: turn git-rebase--*.sh into separate programs

From: Nguyễn Thái Ngọc Duy <[email-masked]>
Date: Wed, 17 Feb 2016 20:36:41 +0700

This is the first step of turning any of these scripts into C. We can
see now what variables are exchanged between git-rebase.sh and the
subscript (but we don't see all in this patch, variables may have been
exported earlier in git-rebase.sh)

Signed-off-by: Nguyễn Thái Ngọc Duy <[email-masked]>
---
 Makefile                             |  6 +++---
 git-rebase--am.sh (mode +x)          | 23 ++++++++++++++---------
 git-rebase--interactive.sh (mode +x) | 15 +++++++++++++++
 git-rebase--merge.sh (mode +x)       | 14 ++++++++++++++
 git-rebase.sh                        | 23 ++++++++++++++++-------
 5 files changed, 62 insertions(+), 19 deletions(-)
 mode change 100644 => 100755 git-rebase--am.sh
 mode change 100644 => 100755 git-rebase--interactive.sh
 mode change 100644 => 100755 git-rebase--merge.sh

diff --git a/Makefile b/Makefile
index 1ee0ed3..ea636e6 100644
--- a/Makefile
+++ b/Makefile
@@ -486,6 +486,9 @@ SCRIPT_SH += git-mergetool.sh
 SCRIPT_SH += git-quiltimport.sh
 SCRIPT_SH += git-rebase.sh
 SCRIPT_SH += git-remote-testgit.sh
+SCRIPT_SH += git-rebase--am.sh
+SCRIPT_SH += git-rebase--interactive.sh
+SCRIPT_SH += git-rebase--merge.sh
 SCRIPT_SH += git-request-pull.sh
 SCRIPT_SH += git-stash.sh
 SCRIPT_SH += git-submodule.sh
@@ -493,9 +496,6 @@ SCRIPT_SH += git-web--browse.sh
 
 SCRIPT_LIB += git-mergetool--lib
 SCRIPT_LIB += git-parse-remote
-SCRIPT_LIB += git-rebase--am
-SCRIPT_LIB += git-rebase--interactive
-SCRIPT_LIB += git-rebase--merge
 SCRIPT_LIB += git-rebase--lib
 SCRIPT_LIB += git-sh-setup
 SCRIPT_LIB += git-sh-i18n
diff --git a/git-rebase--am.sh b/git-rebase--am.sh
old mode 100644
new mode 100755
index 9ae898b..3837f53
--- a/git-rebase--am.sh
+++ b/git-rebase--am.sh
@@ -4,15 +4,19 @@
 # Copyright (c) 2010 Junio C Hamano.
 #
 
-# The whole contents of this file is run by dot-sourcing it from
-# inside a shell function.  It used to be that "return"s we see
-# below were not inside any function, and expected to return
-# to the function that dot-sourced us.
-#
-# However, FreeBSD /bin/sh misbehaves on such a construct and
-# continues to run the statements that follow such a "return".
-# As a work-around, we introduce an extra layer of a function
-# here, and immediately call it after defining it.
+. git-sh-setup
+. git-sh-i18n
+. git-rebase--lib
+require_work_tree_exists
+
+GIT_QUIET=$git_quiet
+GIT_REFLOG_ACTION=$git_reflog_action
+resolvemsg="
+$(gettext 'When you have resolved this problem, run "git rebase --continue".
+If you prefer to skip this patch, run "git rebase --skip" instead.
+To check out the original branch and stop rebasing, run "git rebase --abort".')
+"
+
 git_rebase__am () {
 
 case "$action" in
@@ -99,3 +103,4 @@ move_to_original_branch
 }
 # ... and then we call the whole thing.
 git_rebase__am
+exit_rebase $?
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
old mode 100644
new mode 100755
index c0cfe88..1169920
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -7,6 +7,20 @@
 # The original idea comes from Eric W. Biederman, in
 # http://article.gmane.org/gmane.comp.version-control.git/22407
 #
+
+. git-sh-setup
+. git-sh-i18n
+. git-rebase--lib
+require_work_tree_exists
+
+GIT_QUIET=$git_quiet
+GIT_REFLOG_ACTION=$git_reflog_action
+resolvemsg="
+$(gettext 'When you have resolved this problem, run "git rebase --continue".
+If you prefer to skip this patch, run "git rebase --skip" instead.
+To check out the original branch and stop rebasing, run "git rebase --abort".')
+"
+
 # The file containing rebase commands, comments, and empty lines.
 # This file is created by "git rebase -i" then edited by the user.  As
 # the lines are processed, they are removed from the front of this
@@ -1294,3 +1308,4 @@ do_rest
 }
 # ... and then we call the whole thing.
 git_rebase__interactive
+exit_rebase $?
diff --git a/git-rebase--merge.sh b/git-rebase--merge.sh
old mode 100644
new mode 100755
index 2cc2a6d..f453d15
--- a/git-rebase--merge.sh
+++ b/git-rebase--merge.sh
@@ -5,6 +5,19 @@
 # Copyright (c) 2010 Junio C Hamano.
 #
 
+. git-sh-setup
+. git-sh-i18n
+. git-rebase--lib
+require_work_tree_exists
+
+GIT_QUIET=$git_quiet
+GIT_REFLOG_ACTION=$git_reflog_action
+resolvemsg="
+$(gettext 'When you have resolved this problem, run "git rebase --continue".
+If you prefer to skip this patch, run "git rebase --skip" instead.
+To check out the original branch and stop rebasing, run "git rebase --abort".')
+"
+
 prec=4
 
 read_state () {
@@ -165,3 +178,4 @@ finish_rb_merge
 }
 # ... and then we call the whole thing.
 git_rebase__merge
+exit_rebase $?
diff --git a/git-rebase.sh b/git-rebase.sh
index 0c70381..67b847f 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -54,11 +54,6 @@ cd_to_toplevel
 LF='
 '
 ok_to_skip_pre_rebase=
-resolvemsg="
-$(gettext 'When you have resolved this problem, run "git rebase --continue".
-If you prefer to skip this patch, run "git rebase --skip" instead.
-To check out the original branch and stop rebasing, run "git rebase --abort".')
-"
 unset onto
 unset restrict_revision
 cmd=
@@ -121,8 +116,22 @@ run_specific_rebase () {
 		export GIT_EDITOR
 		autosquash=
 	fi
-	. git-rebase--$type
-	exit_rebase $?
+	git_quiet=$GIT_QUIET
+	git_reflog_action=$GIT_REFLOG_ACTION
+	export GIT_PAGER
+	# these are for write_basic_state()
+	export allow_rerere_autoupdate gpg_sign_opt head_name onto
+	export orig_head state_dir strategy strategy_opts verbose
+	# common variables
+	export action git_reflog_action git_quiet keep_empty
+	export rebase_root restrict_revision revisions upstream
+	# git-rebase--am specific
+	export git_am_opt
+	# git-rebase--interactive specific
+	export autosquash cmd force_rebase onto_name preserve_merges
+	export squash_onto switch_to
+
+	exec git-rebase--$type
 }
 
 run_pre_rebase_hook () {
-- 
2.7.0.377.g4cd97dd