@@ -740,8 +740,20 @@ get_missing_commit_check_level () {
740
740
printf ' %s' " $check_level " | tr ' A-Z' ' a-z'
741
741
}
742
742
743
- git_rebase__interactive () {
744
- case " $action " in
743
+ # Initiate an action. If the cannot be any
744
+ # further action it may exec a command
745
+ # or exit and not return.
746
+ #
747
+ # TODO: Consider a cleaner return model so it
748
+ # never exits and always return 0 if process
749
+ # is complete.
750
+ #
751
+ # Parameter 1 is the action to initiate.
752
+ #
753
+ # Returns 0 if the action was able to complete
754
+ # and if 1 if further processing is required.
755
+ initiate_action () {
756
+ case " $1 " in
745
757
continue)
746
758
if test ! -d " $rewritten "
747
759
then
@@ -836,8 +848,13 @@ To continue rebase after editing, run:
836
848
show-current-patch)
837
849
exec git show REBASE_HEAD --
838
850
;;
851
+ * )
852
+ return 1 # continue
853
+ ;;
839
854
esac
855
+ }
840
856
857
+ setup_reflog_action () {
841
858
comment_for_reflog start
842
859
843
860
if test ! -z " $switch_to "
@@ -848,13 +865,102 @@ To continue rebase after editing, run:
848
865
849
866
comment_for_reflog start
850
867
fi
868
+ }
851
869
870
+ init_basic_state () {
852
871
orig_head=$( git rev-parse --verify HEAD) || die " $( gettext " No HEAD?" ) "
853
872
mkdir -p " $state_dir " || die " $( eval_gettext " Could not create temporary \$ state_dir" ) "
854
873
rm -f " $( git rev-parse --git-path REBASE_HEAD) "
855
874
856
875
: > " $state_dir " /interactive || die " $( gettext " Could not mark as interactive" ) "
857
876
write_basic_state
877
+ }
878
+
879
+ init_revisions_and_shortrevisions () {
880
+ shorthead=$( git rev-parse --short $orig_head )
881
+ shortonto=$( git rev-parse --short $onto )
882
+ if test -z " $rebase_root "
883
+ # this is now equivalent to ! -z "$upstream"
884
+ then
885
+ shortupstream=$( git rev-parse --short $upstream )
886
+ revisions=$upstream ...$orig_head
887
+ shortrevisions=$shortupstream ..$shorthead
888
+ else
889
+ revisions=$onto ...$orig_head
890
+ shortrevisions=$shorthead
891
+ fi
892
+ }
893
+
894
+ complete_action () {
895
+ test -s " $todo " || echo noop >> " $todo "
896
+ test -z " $autosquash " || git rebase--helper --rearrange-squash || exit
897
+ test -n " $cmd " && git rebase--helper --add-exec-commands " $cmd "
898
+
899
+ todocount=$( git stripspace --strip-comments < " $todo " | wc -l)
900
+ todocount=${todocount##* }
901
+
902
+ cat >> " $todo " << EOF
903
+
904
+ $comment_char $( eval_ngettext \
905
+ " Rebase \$ shortrevisions onto \$ shortonto (\$ todocount command)" \
906
+ " Rebase \$ shortrevisions onto \$ shortonto (\$ todocount commands)" \
907
+ " $todocount " )
908
+ EOF
909
+ append_todo_help
910
+ gettext "
911
+ However, if you remove everything, the rebase will be aborted.
912
+
913
+ " | git stripspace --comment-lines >> " $todo "
914
+
915
+ if test -z " $keep_empty "
916
+ then
917
+ printf ' %s\n' " $comment_char $( gettext " Note that empty commits are commented out" ) " >> " $todo "
918
+ fi
919
+
920
+
921
+ has_action " $todo " ||
922
+ return 2
923
+
924
+ cp " $todo " " $todo " .backup
925
+ collapse_todo_ids
926
+ git_sequence_editor " $todo " ||
927
+ die_abort " $( gettext " Could not execute editor" ) "
928
+
929
+ has_action " $todo " ||
930
+ return 2
931
+
932
+ git rebase--helper --check-todo-list || {
933
+ ret=$?
934
+ checkout_onto
935
+ exit $ret
936
+ }
937
+
938
+ expand_todo_ids
939
+
940
+ test -d " $rewritten " || test -n " $force_rebase " ||
941
+ onto=" $( git rebase--helper --skip-unnecessary-picks) " ||
942
+ die " Could not skip unnecessary pick commands"
943
+
944
+ checkout_onto
945
+ if test -z " $rebase_root " && test ! -d " $rewritten "
946
+ then
947
+ require_clean_work_tree " rebase"
948
+ exec git rebase--helper ${force_rebase: +--no-ff} $allow_empty_message \
949
+ --continue
950
+ fi
951
+ do_rest
952
+ }
953
+
954
+ git_rebase__interactive () {
955
+ initiate_action " $action "
956
+ ret=$?
957
+ if test $ret = 0; then
958
+ return 0
959
+ fi
960
+
961
+ setup_reflog_action
962
+ init_basic_state
963
+
858
964
if test t = " $preserve_merges "
859
965
then
860
966
if test -z " $rebase_root "
@@ -878,18 +984,8 @@ To continue rebase after editing, run:
878
984
merges_option=" --no-merges --cherry-pick"
879
985
fi
880
986
881
- shorthead=$( git rev-parse --short $orig_head )
882
- shortonto=$( git rev-parse --short $onto )
883
- if test -z " $rebase_root "
884
- # this is now equivalent to ! -z "$upstream"
885
- then
886
- shortupstream=$( git rev-parse --short $upstream )
887
- revisions=$upstream ...$orig_head
888
- shortrevisions=$shortupstream ..$shorthead
889
- else
890
- revisions=$onto ...$orig_head
891
- shortrevisions=$shorthead
892
- fi
987
+ init_revisions_and_shortrevisions
988
+
893
989
if test t ! = " $preserve_merges "
894
990
then
895
991
git rebase--helper --make-script ${keep_empty: +--keep-empty} \
@@ -960,61 +1056,5 @@ To continue rebase after editing, run:
960
1056
done
961
1057
fi
962
1058
963
- test -s " $todo " || echo noop >> " $todo "
964
- test -z " $autosquash " || git rebase--helper --rearrange-squash || exit
965
- test -n " $cmd " && git rebase--helper --add-exec-commands " $cmd "
966
-
967
- todocount=$( git stripspace --strip-comments < " $todo " | wc -l)
968
- todocount=${todocount##* }
969
-
970
- cat >> " $todo " << EOF
971
-
972
- $comment_char $( eval_ngettext \
973
- " Rebase \$ shortrevisions onto \$ shortonto (\$ todocount command)" \
974
- " Rebase \$ shortrevisions onto \$ shortonto (\$ todocount commands)" \
975
- " $todocount " )
976
- EOF
977
- append_todo_help
978
- gettext "
979
- However, if you remove everything, the rebase will be aborted.
980
-
981
- " | git stripspace --comment-lines >> " $todo "
982
-
983
- if test -z " $keep_empty "
984
- then
985
- printf ' %s\n' " $comment_char $( gettext " Note that empty commits are commented out" ) " >> " $todo "
986
- fi
987
-
988
-
989
- has_action " $todo " ||
990
- return 2
991
-
992
- cp " $todo " " $todo " .backup
993
- collapse_todo_ids
994
- git_sequence_editor " $todo " ||
995
- die_abort " $( gettext " Could not execute editor" ) "
996
-
997
- has_action " $todo " ||
998
- return 2
999
-
1000
- git rebase--helper --check-todo-list || {
1001
- ret=$?
1002
- checkout_onto
1003
- exit $ret
1004
- }
1005
-
1006
- expand_todo_ids
1007
-
1008
- test -d " $rewritten " || test -n " $force_rebase " ||
1009
- onto=" $( git rebase--helper --skip-unnecessary-picks) " ||
1010
- die " Could not skip unnecessary pick commands"
1011
-
1012
- checkout_onto
1013
- if test -z " $rebase_root " && test ! -d " $rewritten "
1014
- then
1015
- require_clean_work_tree " rebase"
1016
- exec git rebase--helper ${force_rebase: +--no-ff} $allow_empty_message \
1017
- --continue
1018
- fi
1019
- do_rest
1059
+ complete_action
1020
1060
}
0 commit comments