{"thread":{"id":"25637","subject":"[PATCH 0/5] Make git-rebase.sh more readable and easier to extend","startedAt":"2010-11-03T21:09:35Z","lastAt":"2010-11-03T21:09:40Z","messageCount":6,"participants":["martin.von.zweigbergk@gmail.com"],"isPatch":true,"patchVersion":1,"patchTotal":5},"messages":[{"id":"155127","messageId":"1288818580-7576-1-git-send-email-martin.von.zweigbergk@gmail.com","threadId":"25637","inReplyTo":null,"subject":"[PATCH 0/5] Make git-rebase.sh more readable and easier to extend","fromName":"","fromEmail":"martin.von.zweigbergk@gmail.com","sentAt":"2010-11-03T21:09:35Z","receivedAt":"2010-11-03T21:09:35Z","isPatch":true,"sender":{"key":"martinvonz@gmail.com","avatar":"https://avatars.githubusercontent.com/u/891642?v=4"},"body":"This is my first patch set to mail to this list, so I hope I get things right...\n\nThis patch set tries to make git-rebase.sh a bit more readable and to make it a\nbit easier to extend. The only change in behavior that I know I have introduced\n(in PATCH 2) is that \"git rebase (--continue | --skip)\" when an empty\n\"$GIT_DIR/rebase-merge\" exists now gives slightly fewer error messages while\ntrying to cat files in that directory. The only reason for this change was to\nmake it better aligned with the behavior when an empty\n\"$GIT_DIR/rebase-apply\" exists.\n\nThese patches are related to, but different from, the mail I sent about\nextracting common code between git-rebase.sh and git-rebase--interactive.sh (see\nhttp://thread.gmane.org/gmane.comp.version-control.git/160517). I would like to\nbase that work on the current patch set.\n\n git-rebase.sh |  148 +++++++++++++++++++++++++--------------------------------\n 1 files changed, 65 insertions(+), 83 deletions(-)\n"},{"id":"155128","messageId":"1288818580-7576-2-git-send-email-martin.von.zweigbergk@gmail.com","threadId":"25637","inReplyTo":"1288818580-7576-1-git-send-email-martin.von.zweigbergk@gmail.com","subject":"[PATCH 1/5] rebase: clearer names for directory variables","fromName":"","fromEmail":"martin.von.zweigbergk@gmail.com","sentAt":"2010-11-03T21:09:36Z","receivedAt":"2010-11-03T21:09:36Z","isPatch":true,"sender":{"key":"martinvonz@gmail.com","avatar":"https://avatars.githubusercontent.com/u/891642?v=4"},"body":"From: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>\n\nInstead of using the old variable name 'dotest' for\n\"$GIT_DIR\"/rebase-merge and no variable for \"$GIT_DIR\"/rebase-apply,\nintroduce two variables 'merge_dir' and 'apply_dir' for these paths.\n\nSigned-off-by: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>\n---\n git-rebase.sh |  145 +++++++++++++++++++++++++++++----------------------------\n 1 files changed, 73 insertions(+), 72 deletions(-)\n\ndiff --git a/git-rebase.sh b/git-rebase.sh\nindex e5df23b..8d5cf03 100755\n--- a/git-rebase.sh\n+++ b/git-rebase.sh\n@@ -46,7 +46,8 @@ unset newbase\n strategy=recursive\n strategy_opts=\n do_merge=\n-dotest=\"$GIT_DIR\"/rebase-merge\n+merge_dir=\"$GIT_DIR\"/rebase-merge\n+apply_dir=\"$GIT_DIR\"/rebase-apply\n prec=4\n verbose=\n diffstat=$(git config --bool rebase.stat)\n@@ -57,7 +58,7 @@ allow_rerere_autoupdate=\n \n continue_merge () {\n \ttest -n \"$prev_head\" || die \"prev_head must be defined\"\n-\ttest -d \"$dotest\" || die \"$dotest directory does not exist\"\n+\ttest -d \"$merge_dir\" || die \"$merge_dir directory does not exist\"\n \n \tunmerged=$(git ls-files -u)\n \tif test -n \"$unmerged\"\n@@ -67,7 +68,7 @@ continue_merge () {\n \t\tdie \"$RESOLVEMSG\"\n \tfi\n \n-\tcmt=`cat \"$dotest/current\"`\n+\tcmt=`cat \"$merge_dir/current\"`\n \tif ! git diff-index --quiet --ignore-submodules HEAD --\n \tthen\n \t\tif ! git commit --no-verify -C \"$cmt\"\n@@ -80,7 +81,7 @@ continue_merge () {\n \t\tthen\n \t\t\tprintf \"Committed: %0${prec}d \" $msgnum\n \t\tfi\n-\t\techo \"$cmt $(git rev-parse HEAD^0)\" >> \"$dotest/rewritten\"\n+\t\techo \"$cmt $(git rev-parse HEAD^0)\" >> \"$merge_dir/rewritten\"\n \telse\n \t\tif test -z \"$GIT_QUIET\"\n \t\tthen\n@@ -92,22 +93,22 @@ continue_merge () {\n \n \tprev_head=`git rev-parse HEAD^0`\n \t# save the resulting commit so we can read-tree on it later\n-\techo \"$prev_head\" > \"$dotest/prev_head\"\n+\techo \"$prev_head\" > \"$merge_dir/prev_head\"\n \n \t# onto the next patch:\n \tmsgnum=$(($msgnum + 1))\n-\techo \"$msgnum\" >\"$dotest/msgnum\"\n+\techo \"$msgnum\" >\"$merge_dir/msgnum\"\n }\n \n call_merge () {\n-\tcmt=\"$(cat \"$dotest/cmt.$1\")\"\n-\techo \"$cmt\" > \"$dotest/current\"\n+\tcmt=\"$(cat \"$merge_dir/cmt.$1\")\"\n+\techo \"$cmt\" > \"$merge_dir/current\"\n \thd=$(git rev-parse --verify HEAD)\n \tcmt_name=$(git symbolic-ref HEAD 2> /dev/null || echo HEAD)\n-\tmsgnum=$(cat \"$dotest/msgnum\")\n-\tend=$(cat \"$dotest/end\")\n+\tmsgnum=$(cat \"$merge_dir/msgnum\")\n+\tend=$(cat \"$merge_dir/end\")\n \teval GITHEAD_$cmt='\"${cmt_name##refs/heads/}~$(($end - $msgnum))\"'\n-\teval GITHEAD_$hd='$(cat \"$dotest/onto_name\")'\n+\teval GITHEAD_$hd='$(cat \"$merge_dir/onto_name\")'\n \texport GITHEAD_$cmt GITHEAD_$hd\n \tif test -n \"$GIT_QUIET\"\n \tthen\n@@ -137,9 +138,9 @@ call_merge () {\n \n move_to_original_branch () {\n \ttest -z \"$head_name\" &&\n-\t\thead_name=\"$(cat \"$dotest\"/head-name)\" &&\n-\t\tonto=\"$(cat \"$dotest\"/onto)\" &&\n-\t\torig_head=\"$(cat \"$dotest\"/orig-head)\"\n+\t\thead_name=\"$(cat \"$merge_dir\"/head-name)\" &&\n+\t\tonto=\"$(cat \"$merge_dir\"/onto)\" &&\n+\t\torig_head=\"$(cat \"$merge_dir\"/orig-head)\"\n \tcase \"$head_name\" in\n \trefs/*)\n \t\tmessage=\"rebase finished: $head_name onto $onto\"\n@@ -153,12 +154,12 @@ move_to_original_branch () {\n \n finish_rb_merge () {\n \tmove_to_original_branch\n-\tgit notes copy --for-rewrite=rebase < \"$dotest\"/rewritten\n+\tgit notes copy --for-rewrite=rebase < \"$merge_dir\"/rewritten\n \tif test -x \"$GIT_DIR\"/hooks/post-rewrite &&\n-\t\ttest -s \"$dotest\"/rewritten; then\n-\t\t\"$GIT_DIR\"/hooks/post-rewrite rebase < \"$dotest\"/rewritten\n+\t\ttest -s \"$merge_dir\"/rewritten; then\n+\t\t\"$GIT_DIR\"/hooks/post-rewrite rebase < \"$merge_dir\"/rewritten\n \tfi\n-\trm -r \"$dotest\"\n+\trm -r \"$merge_dir\"\n \tsay All done.\n }\n \n@@ -182,7 +183,7 @@ is_interactive () {\n \t\texport GIT_EDITOR\n \tfi\n \n-\ttest -n \"$interactive_rebase\" || test -f \"$dotest\"/interactive\n+\ttest -n \"$interactive_rebase\" || test -f \"$merge_dir\"/interactive\n }\n \n run_pre_rebase_hook () {\n@@ -194,7 +195,7 @@ run_pre_rebase_hook () {\n \tfi\n }\n \n-test -f \"$GIT_DIR\"/rebase-apply/applying &&\n+test -f \"$apply_dir\"/applying &&\n \tdie 'It looks like git-am is in progress. Cannot rebase.'\n \n is_interactive \"$@\" && exec git-rebase--interactive \"$@\"\n@@ -206,7 +207,7 @@ do\n \t\tOK_TO_SKIP_PRE_REBASE=yes\n \t\t;;\n \t--continue)\n-\t\ttest -d \"$dotest\" -o -d \"$GIT_DIR\"/rebase-apply ||\n+\t\ttest -d \"$merge_dir\" -o -d \"$apply_dir\" ||\n \t\t\tdie \"No rebase in progress?\"\n \n \t\tgit update-index --ignore-submodules --refresh &&\n@@ -215,13 +216,13 @@ do\n \t\t\techo \"mark them as resolved using git add\"\n \t\t\texit 1\n \t\t}\n-\t\tif test -d \"$dotest\"\n+\t\tif test -d \"$merge_dir\"\n \t\tthen\n-\t\t\tprev_head=$(cat \"$dotest/prev_head\")\n-\t\t\tend=$(cat \"$dotest/end\")\n-\t\t\tmsgnum=$(cat \"$dotest/msgnum\")\n-\t\t\tonto=$(cat \"$dotest/onto\")\n-\t\t\tGIT_QUIET=$(cat \"$dotest/quiet\")\n+\t\t\tprev_head=$(cat \"$merge_dir/prev_head\")\n+\t\t\tend=$(cat \"$merge_dir/end\")\n+\t\t\tmsgnum=$(cat \"$merge_dir/msgnum\")\n+\t\t\tonto=$(cat \"$merge_dir/onto\")\n+\t\t\tGIT_QUIET=$(cat \"$merge_dir/quiet\")\n \t\t\tcontinue_merge\n \t\t\twhile test \"$msgnum\" -le \"$end\"\n \t\t\tdo\n@@ -231,28 +232,28 @@ do\n \t\t\tfinish_rb_merge\n \t\t\texit\n \t\tfi\n-\t\thead_name=$(cat \"$GIT_DIR\"/rebase-apply/head-name) &&\n-\t\tonto=$(cat \"$GIT_DIR\"/rebase-apply/onto) &&\n-\t\torig_head=$(cat \"$GIT_DIR\"/rebase-apply/orig-head) &&\n-\t\tGIT_QUIET=$(cat \"$GIT_DIR\"/rebase-apply/quiet)\n+\t\thead_name=$(cat \"$apply_dir\"/head-name) &&\n+\t\tonto=$(cat \"$apply_dir\"/onto) &&\n+\t\torig_head=$(cat \"$apply_dir\"/orig-head) &&\n+\t\tGIT_QUIET=$(cat \"$apply_dir\"/quiet)\n \t\tgit am --resolved --3way --resolvemsg=\"$RESOLVEMSG\" &&\n \t\tmove_to_original_branch\n \t\texit\n \t\t;;\n \t--skip)\n-\t\ttest -d \"$dotest\" -o -d \"$GIT_DIR\"/rebase-apply ||\n+\t\ttest -d \"$merge_dir\" -o -d \"$apply_dir\" ||\n \t\t\tdie \"No rebase in progress?\"\n \n \t\tgit reset --hard HEAD || exit $?\n-\t\tif test -d \"$dotest\"\n+\t\tif test -d \"$merge_dir\"\n \t\tthen\n \t\t\tgit rerere clear\n-\t\t\tprev_head=$(cat \"$dotest/prev_head\")\n-\t\t\tend=$(cat \"$dotest/end\")\n-\t\t\tmsgnum=$(cat \"$dotest/msgnum\")\n+\t\t\tprev_head=$(cat \"$merge_dir/prev_head\")\n+\t\t\tend=$(cat \"$merge_dir/end\")\n+\t\t\tmsgnum=$(cat \"$merge_dir/msgnum\")\n \t\t\tmsgnum=$(($msgnum + 1))\n-\t\t\tonto=$(cat \"$dotest/onto\")\n-\t\t\tGIT_QUIET=$(cat \"$dotest/quiet\")\n+\t\t\tonto=$(cat \"$merge_dir/onto\")\n+\t\t\tGIT_QUIET=$(cat \"$merge_dir/quiet\")\n \t\t\twhile test \"$msgnum\" -le \"$end\"\n \t\t\tdo\n \t\t\t\tcall_merge \"$msgnum\"\n@@ -261,30 +262,30 @@ do\n \t\t\tfinish_rb_merge\n \t\t\texit\n \t\tfi\n-\t\thead_name=$(cat \"$GIT_DIR\"/rebase-apply/head-name) &&\n-\t\tonto=$(cat \"$GIT_DIR\"/rebase-apply/onto) &&\n-\t\torig_head=$(cat \"$GIT_DIR\"/rebase-apply/orig-head) &&\n-\t\tGIT_QUIET=$(cat \"$GIT_DIR\"/rebase-apply/quiet)\n+\t\thead_name=$(cat \"$apply_dir\"/head-name) &&\n+\t\tonto=$(cat \"$apply_dir\"/onto) &&\n+\t\torig_head=$(cat \"$apply_dir\"/orig-head) &&\n+\t\tGIT_QUIET=$(cat \"$apply_dir\"/quiet)\n \t\tgit am -3 --skip --resolvemsg=\"$RESOLVEMSG\" &&\n \t\tmove_to_original_branch\n \t\texit\n \t\t;;\n \t--abort)\n-\t\ttest -d \"$dotest\" -o -d \"$GIT_DIR\"/rebase-apply ||\n+\t\ttest -d \"$merge_dir\" -o -d \"$apply_dir\" ||\n \t\t\tdie \"No rebase in progress?\"\n \n \t\tgit rerere clear\n-\t\tif test -d \"$dotest\"\n+\t\tif test -d \"$merge_dir\"\n \t\tthen\n-\t\t\tGIT_QUIET=$(cat \"$dotest/quiet\")\n+\t\t\tGIT_QUIET=$(cat \"$merge_dir/quiet\")\n \t\t\tmove_to_original_branch\n \t\telse\n-\t\t\tdotest=\"$GIT_DIR\"/rebase-apply\n-\t\t\tGIT_QUIET=$(cat \"$dotest/quiet\")\n+\t\t\tmerge_dir=\"$apply_dir\"\n+\t\t\tGIT_QUIET=$(cat \"$merge_dir/quiet\")\n \t\t\tmove_to_original_branch\n \t\tfi\n-\t\tgit reset --hard $(cat \"$dotest/orig-head\")\n-\t\trm -r \"$dotest\"\n+\t\tgit reset --hard $(cat \"$merge_dir/orig-head\")\n+\t\trm -r \"$merge_dir\"\n \t\texit\n \t\t;;\n \t--onto)\n@@ -387,31 +388,31 @@ test $# -gt 2 && usage\n \n if test $# -eq 0 && test -z \"$rebase_root\"\n then\n-\ttest -d \"$dotest\" -o -d \"$GIT_DIR\"/rebase-apply || usage\n-\ttest -d \"$dotest\" -o -f \"$GIT_DIR\"/rebase-apply/rebasing &&\n+\ttest -d \"$merge_dir\" -o -d \"$apply_dir\" || usage\n+\ttest -d \"$merge_dir\" -o -f \"$apply_dir\"/rebasing &&\n \t\tdie 'A rebase is in progress, try --continue, --skip or --abort.'\n fi\n \n-# Make sure we do not have $GIT_DIR/rebase-apply\n+# Make sure we do not have $apply_dir or $merge_dir\n if test -z \"$do_merge\"\n then\n-\tif mkdir \"$GIT_DIR\"/rebase-apply 2>/dev/null\n+\tif mkdir \"$apply_dir\" 2>/dev/null\n \tthen\n-\t\trmdir \"$GIT_DIR\"/rebase-apply\n+\t\trmdir \"$apply_dir\"\n \telse\n \t\techo >&2 '\n It seems that I cannot create a rebase-apply directory, and\n I wonder if you are in the middle of patch application or another\n rebase.  If that is not the case, please\n-\trm -fr '\"$GIT_DIR\"'/rebase-apply\n+\trm -fr '\"$apply_dir\"'\n and run me again.  I am stopping in case you still have something\n valuable there.'\n \t\texit 1\n \tfi\n else\n-\tif test -d \"$dotest\"\n+\tif test -d \"$merge_dir\"\n \tthen\n-\t\tdie \"previous rebase directory $dotest still exists.\" \\\n+\t\tdie \"previous rebase directory $merge_dir still exists.\" \\\n \t\t\t'Try git rebase (--continue | --abort | --skip)'\n \tfi\n fi\n@@ -571,35 +572,35 @@ then\n \tgit am $git_am_opt --rebasing --resolvemsg=\"$RESOLVEMSG\" &&\n \tmove_to_original_branch\n \tret=$?\n-\ttest 0 != $ret -a -d \"$GIT_DIR\"/rebase-apply &&\n-\t\techo $head_name > \"$GIT_DIR\"/rebase-apply/head-name &&\n-\t\techo $onto > \"$GIT_DIR\"/rebase-apply/onto &&\n-\t\techo $orig_head > \"$GIT_DIR\"/rebase-apply/orig-head &&\n-\t\techo \"$GIT_QUIET\" > \"$GIT_DIR\"/rebase-apply/quiet\n+\ttest 0 != $ret -a -d \"$apply_dir\" &&\n+\t\techo $head_name > \"$apply_dir/head-name\" &&\n+\t\techo $onto > \"$apply_dir/onto\" &&\n+\t\techo $orig_head > \"$apply_dir/orig-head\" &&\n+\t\techo \"$GIT_QUIET\" > \"$apply_dir/quiet\"\n \texit $ret\n fi\n \n # start doing a rebase with git-merge\n # this is rename-aware if the recursive (default) strategy is used\n \n-mkdir -p \"$dotest\"\n-echo \"$onto\" > \"$dotest/onto\"\n-echo \"$onto_name\" > \"$dotest/onto_name\"\n+mkdir -p \"$merge_dir\"\n+echo \"$onto\" > \"$merge_dir/onto\"\n+echo \"$onto_name\" > \"$merge_dir/onto_name\"\n prev_head=$orig_head\n-echo \"$prev_head\" > \"$dotest/prev_head\"\n-echo \"$orig_head\" > \"$dotest/orig-head\"\n-echo \"$head_name\" > \"$dotest/head-name\"\n-echo \"$GIT_QUIET\" > \"$dotest/quiet\"\n+echo \"$prev_head\" > \"$merge_dir/prev_head\"\n+echo \"$orig_head\" > \"$merge_dir/orig-head\"\n+echo \"$head_name\" > \"$merge_dir/head-name\"\n+echo \"$GIT_QUIET\" > \"$merge_dir/quiet\"\n \n msgnum=0\n for cmt in `git rev-list --reverse --no-merges \"$revisions\"`\n do\n \tmsgnum=$(($msgnum + 1))\n-\techo \"$cmt\" > \"$dotest/cmt.$msgnum\"\n+\techo \"$cmt\" > \"$merge_dir/cmt.$msgnum\"\n done\n \n-echo 1 >\"$dotest/msgnum\"\n-echo $msgnum >\"$dotest/end\"\n+echo 1 >\"$merge_dir/msgnum\"\n+echo $msgnum >\"$merge_dir/end\"\n \n end=$msgnum\n msgnum=1\n-- \n1.7.3.rc1.4.g5879b6\n"},{"id":"155129","messageId":"1288818580-7576-3-git-send-email-martin.von.zweigbergk@gmail.com","threadId":"25637","inReplyTo":"1288818580-7576-1-git-send-email-martin.von.zweigbergk@gmail.com","subject":"[PATCH 2/5] rebase: refactor reading of state","fromName":"","fromEmail":"martin.von.zweigbergk@gmail.com","sentAt":"2010-11-03T21:09:37Z","receivedAt":"2010-11-03T21:09:37Z","isPatch":true,"sender":{"key":"martinvonz@gmail.com","avatar":"https://avatars.githubusercontent.com/u/891642?v=4"},"body":"From: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>\n\nThe code reading the state saved in $merge_dir or $rebase_dir is\ncurrently spread out in many places, making it harder to read and to\nintroduce additional state. Extract this code into one method that reads\nthe state.\n\nSigned-off-by: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>\n---\n git-rebase.sh |   59 +++++++++++++++++++++++---------------------------------\n 1 files changed, 24 insertions(+), 35 deletions(-)\n\ndiff --git a/git-rebase.sh b/git-rebase.sh\nindex 8d5cf03..e0842e3 100755\n--- a/git-rebase.sh\n+++ b/git-rebase.sh\n@@ -56,6 +56,22 @@ rebase_root=\n force_rebase=\n allow_rerere_autoupdate=\n \n+read_state () {\n+\tif test -d \"$merge_dir\"\n+\tthen\n+\t\tstate_dir=\"$merge_dir\"\n+\t\tprev_head=$(cat \"$merge_dir\"/prev_head) &&\n+\t\tend=$(cat \"$merge_dir\"/end) &&\n+\t\tmsgnum=$(cat \"$merge_dir\"/msgnum)\n+\telse\n+\t\tstate_dir=\"$apply_dir\"\n+\tfi &&\n+\thead_name=$(cat \"$state_dir\"/head-name) &&\n+\tonto=$(cat \"$state_dir\"/onto) &&\n+\torig_head=$(cat \"$state_dir\"/orig-head) &&\n+\tGIT_QUIET=$(cat \"$state_dir\"/quiet)\n+}\n+\n continue_merge () {\n \ttest -n \"$prev_head\" || die \"prev_head must be defined\"\n \ttest -d \"$merge_dir\" || die \"$merge_dir directory does not exist\"\n@@ -137,10 +153,7 @@ call_merge () {\n }\n \n move_to_original_branch () {\n-\ttest -z \"$head_name\" &&\n-\t\thead_name=\"$(cat \"$merge_dir\"/head-name)\" &&\n-\t\tonto=\"$(cat \"$merge_dir\"/onto)\" &&\n-\t\torig_head=\"$(cat \"$merge_dir\"/orig-head)\"\n+\ttest -z \"$head_name\" && read_state\n \tcase \"$head_name\" in\n \trefs/*)\n \t\tmessage=\"rebase finished: $head_name onto $onto\"\n@@ -216,13 +229,9 @@ do\n \t\t\techo \"mark them as resolved using git add\"\n \t\t\texit 1\n \t\t}\n+\t\tread_state\n \t\tif test -d \"$merge_dir\"\n \t\tthen\n-\t\t\tprev_head=$(cat \"$merge_dir/prev_head\")\n-\t\t\tend=$(cat \"$merge_dir/end\")\n-\t\t\tmsgnum=$(cat \"$merge_dir/msgnum\")\n-\t\t\tonto=$(cat \"$merge_dir/onto\")\n-\t\t\tGIT_QUIET=$(cat \"$merge_dir/quiet\")\n \t\t\tcontinue_merge\n \t\t\twhile test \"$msgnum\" -le \"$end\"\n \t\t\tdo\n@@ -232,10 +241,6 @@ do\n \t\t\tfinish_rb_merge\n \t\t\texit\n \t\tfi\n-\t\thead_name=$(cat \"$apply_dir\"/head-name) &&\n-\t\tonto=$(cat \"$apply_dir\"/onto) &&\n-\t\torig_head=$(cat \"$apply_dir\"/orig-head) &&\n-\t\tGIT_QUIET=$(cat \"$apply_dir\"/quiet)\n \t\tgit am --resolved --3way --resolvemsg=\"$RESOLVEMSG\" &&\n \t\tmove_to_original_branch\n \t\texit\n@@ -245,15 +250,11 @@ do\n \t\t\tdie \"No rebase in progress?\"\n \n \t\tgit reset --hard HEAD || exit $?\n+\t\tread_state\n \t\tif test -d \"$merge_dir\"\n \t\tthen\n \t\t\tgit rerere clear\n-\t\t\tprev_head=$(cat \"$merge_dir/prev_head\")\n-\t\t\tend=$(cat \"$merge_dir/end\")\n-\t\t\tmsgnum=$(cat \"$merge_dir/msgnum\")\n \t\t\tmsgnum=$(($msgnum + 1))\n-\t\t\tonto=$(cat \"$merge_dir/onto\")\n-\t\t\tGIT_QUIET=$(cat \"$merge_dir/quiet\")\n \t\t\twhile test \"$msgnum\" -le \"$end\"\n \t\t\tdo\n \t\t\t\tcall_merge \"$msgnum\"\n@@ -262,10 +263,6 @@ do\n \t\t\tfinish_rb_merge\n \t\t\texit\n \t\tfi\n-\t\thead_name=$(cat \"$apply_dir\"/head-name) &&\n-\t\tonto=$(cat \"$apply_dir\"/onto) &&\n-\t\torig_head=$(cat \"$apply_dir\"/orig-head) &&\n-\t\tGIT_QUIET=$(cat \"$apply_dir\"/quiet)\n \t\tgit am -3 --skip --resolvemsg=\"$RESOLVEMSG\" &&\n \t\tmove_to_original_branch\n \t\texit\n@@ -275,17 +272,9 @@ do\n \t\t\tdie \"No rebase in progress?\"\n \n \t\tgit rerere clear\n-\t\tif test -d \"$merge_dir\"\n-\t\tthen\n-\t\t\tGIT_QUIET=$(cat \"$merge_dir/quiet\")\n-\t\t\tmove_to_original_branch\n-\t\telse\n-\t\t\tmerge_dir=\"$apply_dir\"\n-\t\t\tGIT_QUIET=$(cat \"$merge_dir/quiet\")\n-\t\t\tmove_to_original_branch\n-\t\tfi\n-\t\tgit reset --hard $(cat \"$merge_dir/orig-head\")\n-\t\trm -r \"$merge_dir\"\n+\t\tmove_to_original_branch\n+\t\tgit reset --hard $orig_head\n+\t\trm -r \"$state_dir\"\n \t\texit\n \t\t;;\n \t--onto)\n@@ -584,12 +573,12 @@ fi\n # this is rename-aware if the recursive (default) strategy is used\n \n mkdir -p \"$merge_dir\"\n-echo \"$onto\" > \"$merge_dir/onto\"\n echo \"$onto_name\" > \"$merge_dir/onto_name\"\n prev_head=$orig_head\n echo \"$prev_head\" > \"$merge_dir/prev_head\"\n-echo \"$orig_head\" > \"$merge_dir/orig-head\"\n echo \"$head_name\" > \"$merge_dir/head-name\"\n+echo \"$onto\" > \"$merge_dir/onto\"\n+echo \"$orig_head\" > \"$merge_dir/orig-head\"\n echo \"$GIT_QUIET\" > \"$merge_dir/quiet\"\n \n msgnum=0\n-- \n1.7.3.rc1.4.g5879b6\n"},{"id":"155132","messageId":"1288818580-7576-4-git-send-email-martin.von.zweigbergk@gmail.com","threadId":"25637","inReplyTo":"1288818580-7576-1-git-send-email-martin.von.zweigbergk@gmail.com","subject":"[PATCH 3/5] rebase: read state outside loop","fromName":"","fromEmail":"martin.von.zweigbergk@gmail.com","sentAt":"2010-11-03T21:09:38Z","receivedAt":"2010-11-03T21:09:38Z","isPatch":true,"sender":{"key":"martinvonz@gmail.com","avatar":"https://avatars.githubusercontent.com/u/891642?v=4"},"body":"From: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>\n\nThe 'onto_name' state is used in 'git rebase --merge' is currently read\nonce for each commit that need to be applied. It doesn't change between\neach iteration, however, so it should be moved out of the loop. This also\nmakes the code more readable. Also remove the unused variable 'end'.\n\nSigned-off-by: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>\n---\n git-rebase.sh |    4 ++--\n 1 files changed, 2 insertions(+), 2 deletions(-)\n\ndiff --git a/git-rebase.sh b/git-rebase.sh\nindex e0842e3..2c812b2 100755\n--- a/git-rebase.sh\n+++ b/git-rebase.sh\n@@ -61,6 +61,7 @@ read_state () {\n \tthen\n \t\tstate_dir=\"$merge_dir\"\n \t\tprev_head=$(cat \"$merge_dir\"/prev_head) &&\n+\t\tonto_name=$(cat \"$merge_dir\"/onto_name) &&\n \t\tend=$(cat \"$merge_dir\"/end) &&\n \t\tmsgnum=$(cat \"$merge_dir\"/msgnum)\n \telse\n@@ -122,9 +123,8 @@ call_merge () {\n \thd=$(git rev-parse --verify HEAD)\n \tcmt_name=$(git symbolic-ref HEAD 2> /dev/null || echo HEAD)\n \tmsgnum=$(cat \"$merge_dir/msgnum\")\n-\tend=$(cat \"$merge_dir/end\")\n \teval GITHEAD_$cmt='\"${cmt_name##refs/heads/}~$(($end - $msgnum))\"'\n-\teval GITHEAD_$hd='$(cat \"$merge_dir/onto_name\")'\n+\teval GITHEAD_$hd='$onto_name'\n \texport GITHEAD_$cmt GITHEAD_$hd\n \tif test -n \"$GIT_QUIET\"\n \tthen\n-- \n1.7.3.rc1.4.g5879b6\n"},{"id":"155130","messageId":"1288818580-7576-5-git-send-email-martin.von.zweigbergk@gmail.com","threadId":"25637","inReplyTo":"1288818580-7576-1-git-send-email-martin.von.zweigbergk@gmail.com","subject":"[PATCH 4/5] rebase: remove unused rebase state 'prev_head'","fromName":"","fromEmail":"martin.von.zweigbergk@gmail.com","sentAt":"2010-11-03T21:09:39Z","receivedAt":"2010-11-03T21:09:39Z","isPatch":true,"sender":{"key":"martinvonz@gmail.com","avatar":"https://avatars.githubusercontent.com/u/891642?v=4"},"body":"From: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>\n\nThe rebase state 'prev_head' is not used. Remove it.\n\nSigned-off-by: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>\n---\n git-rebase.sh |    8 --------\n 1 files changed, 0 insertions(+), 8 deletions(-)\n\ndiff --git a/git-rebase.sh b/git-rebase.sh\nindex 2c812b2..a7428ea 100755\n--- a/git-rebase.sh\n+++ b/git-rebase.sh\n@@ -60,7 +60,6 @@ read_state () {\n \tif test -d \"$merge_dir\"\n \tthen\n \t\tstate_dir=\"$merge_dir\"\n-\t\tprev_head=$(cat \"$merge_dir\"/prev_head) &&\n \t\tonto_name=$(cat \"$merge_dir\"/onto_name) &&\n \t\tend=$(cat \"$merge_dir\"/end) &&\n \t\tmsgnum=$(cat \"$merge_dir\"/msgnum)\n@@ -74,7 +73,6 @@ read_state () {\n }\n \n continue_merge () {\n-\ttest -n \"$prev_head\" || die \"prev_head must be defined\"\n \ttest -d \"$merge_dir\" || die \"$merge_dir directory does not exist\"\n \n \tunmerged=$(git ls-files -u)\n@@ -108,10 +106,6 @@ continue_merge () {\n \ttest -z \"$GIT_QUIET\" &&\n \tGIT_PAGER='' git log --format=%s -1 \"$cmt\"\n \n-\tprev_head=`git rev-parse HEAD^0`\n-\t# save the resulting commit so we can read-tree on it later\n-\techo \"$prev_head\" > \"$merge_dir/prev_head\"\n-\n \t# onto the next patch:\n \tmsgnum=$(($msgnum + 1))\n \techo \"$msgnum\" >\"$merge_dir/msgnum\"\n@@ -574,8 +568,6 @@ fi\n \n mkdir -p \"$merge_dir\"\n echo \"$onto_name\" > \"$merge_dir/onto_name\"\n-prev_head=$orig_head\n-echo \"$prev_head\" > \"$merge_dir/prev_head\"\n echo \"$head_name\" > \"$merge_dir/head-name\"\n echo \"$onto\" > \"$merge_dir/onto\"\n echo \"$orig_head\" > \"$merge_dir/orig-head\"\n-- \n1.7.3.rc1.4.g5879b6\n"},{"id":"155131","messageId":"1288818580-7576-6-git-send-email-martin.von.zweigbergk@gmail.com","threadId":"25637","inReplyTo":"1288818580-7576-1-git-send-email-martin.von.zweigbergk@gmail.com","subject":"[PATCH 5/5] rebase: read state explicitly in '--abort'","fromName":"","fromEmail":"martin.von.zweigbergk@gmail.com","sentAt":"2010-11-03T21:09:40Z","receivedAt":"2010-11-03T21:09:40Z","isPatch":true,"sender":{"key":"martinvonz@gmail.com","avatar":"https://avatars.githubusercontent.com/u/891642?v=4"},"body":"From: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>\n\nThe only place where the state was not already read when\nmove_to_original_branch was called was in the '--abort' case. Read the\nstate explicitly there and remove it from move_to_original_branch.\n\nSigned-off-by: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>\n---\n git-rebase.sh |    2 +-\n 1 files changed, 1 insertions(+), 1 deletions(-)\n\ndiff --git a/git-rebase.sh b/git-rebase.sh\nindex a7428ea..847555c 100755\n--- a/git-rebase.sh\n+++ b/git-rebase.sh\n@@ -147,7 +147,6 @@ call_merge () {\n }\n \n move_to_original_branch () {\n-\ttest -z \"$head_name\" && read_state\n \tcase \"$head_name\" in\n \trefs/*)\n \t\tmessage=\"rebase finished: $head_name onto $onto\"\n@@ -266,6 +265,7 @@ do\n \t\t\tdie \"No rebase in progress?\"\n \n \t\tgit rerere clear\n+\t\tread_state\n \t\tmove_to_original_branch\n \t\tgit reset --hard $orig_head\n \t\trm -r \"$state_dir\"\n-- \n1.7.3.rc1.4.g5879b6\n"}]}