|  |  |  | @ -307,9 +307,7 @@ pick_one_preserving_merges () { | 
		
	
		
			
				|  |  |  |  | 	esac | 
		
	
		
			
				|  |  |  |  | 	sha1=$(git rev-parse $sha1) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	if test -f "$state_dir"/current-commit | 
		
	
		
			
				|  |  |  |  | 	then | 
		
	
		
			
				|  |  |  |  | 		if test "$fast_forward" = t | 
		
	
		
			
				|  |  |  |  | 	if test -f "$state_dir"/current-commit && test "$fast_forward" = t | 
		
	
		
			
				|  |  |  |  | 	then | 
		
	
		
			
				|  |  |  |  | 		while read current_commit | 
		
	
		
			
				|  |  |  |  | 		do | 
		
	
	
		
			
				
					
					|  |  |  | @ -318,7 +316,6 @@ pick_one_preserving_merges () { | 
		
	
		
			
				|  |  |  |  | 		rm "$state_dir"/current-commit || | 
		
	
		
			
				|  |  |  |  | 			die "$(gettext "Cannot write current commit's replacement sha1")" | 
		
	
		
			
				|  |  |  |  | 	fi | 
		
	
		
			
				|  |  |  |  | 	fi | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	echo $sha1 >> "$state_dir"/current-commit | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -743,19 +740,21 @@ get_missing_commit_check_level () { | 
		
	
		
			
				|  |  |  |  | 	printf '%s' "$check_level" | tr 'A-Z' 'a-z' | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | # 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. | 
		
	
		
			
				|  |  |  |  | # Initiate an action. If the cannot be any | 
		
	
		
			
				|  |  |  |  | # further action it  may exec a command | 
		
	
		
			
				|  |  |  |  | # or exit and not return. | 
		
	
		
			
				|  |  |  |  | # | 
		
	
		
			
				|  |  |  |  | # However, older (9.x) versions of FreeBSD /bin/sh misbehave on such a | 
		
	
		
			
				|  |  |  |  | # construct and continue 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_rebase__interactive () { | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | case "$action" in | 
		
	
		
			
				|  |  |  |  | continue) | 
		
	
		
			
				|  |  |  |  | # TODO: Consider a cleaner return model so it | 
		
	
		
			
				|  |  |  |  | # never exits and always return 0 if process | 
		
	
		
			
				|  |  |  |  | # is complete. | 
		
	
		
			
				|  |  |  |  | # | 
		
	
		
			
				|  |  |  |  | # Parameter 1 is the action to initiate. | 
		
	
		
			
				|  |  |  |  | # | 
		
	
		
			
				|  |  |  |  | # Returns 0 if the action was able to complete | 
		
	
		
			
				|  |  |  |  | # and if 1 if further processing is required. | 
		
	
		
			
				|  |  |  |  | initiate_action () { | 
		
	
		
			
				|  |  |  |  | 	case "$1" in | 
		
	
		
			
				|  |  |  |  | 	continue) | 
		
	
		
			
				|  |  |  |  | 		if test ! -d "$rewritten" | 
		
	
		
			
				|  |  |  |  | 		then | 
		
	
		
			
				|  |  |  |  | 			exec git rebase--helper ${force_rebase:+--no-ff} $allow_empty_message \ | 
		
	
	
		
			
				
					
					|  |  |  | @ -817,7 +816,7 @@ first and then run 'git rebase --continue' again.")" | 
		
	
		
			
				|  |  |  |  | 		do_rest | 
		
	
		
			
				|  |  |  |  | 		return 0 | 
		
	
		
			
				|  |  |  |  | 		;; | 
		
	
		
			
				|  |  |  |  | skip) | 
		
	
		
			
				|  |  |  |  | 	skip) | 
		
	
		
			
				|  |  |  |  | 		git rerere clear | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 		if test ! -d "$rewritten" | 
		
	
	
		
			
				
					
					|  |  |  | @ -828,7 +827,7 @@ skip) | 
		
	
		
			
				|  |  |  |  | 		do_rest | 
		
	
		
			
				|  |  |  |  | 		return 0 | 
		
	
		
			
				|  |  |  |  | 		;; | 
		
	
		
			
				|  |  |  |  | edit-todo) | 
		
	
		
			
				|  |  |  |  | 	edit-todo) | 
		
	
		
			
				|  |  |  |  | 		git stripspace --strip-comments <"$todo" >"$todo".new | 
		
	
		
			
				|  |  |  |  | 		mv -f "$todo".new "$todo" | 
		
	
		
			
				|  |  |  |  | 		collapse_todo_ids | 
		
	
	
		
			
				
					
					|  |  |  | @ -846,30 +845,141 @@ To continue rebase after editing, run: | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 		exit | 
		
	
		
			
				|  |  |  |  | 		;; | 
		
	
		
			
				|  |  |  |  | show-current-patch) | 
		
	
		
			
				|  |  |  |  | 	show-current-patch) | 
		
	
		
			
				|  |  |  |  | 		exec git show REBASE_HEAD -- | 
		
	
		
			
				|  |  |  |  | 		;; | 
		
	
		
			
				|  |  |  |  | esac | 
		
	
		
			
				|  |  |  |  | 	*) | 
		
	
		
			
				|  |  |  |  | 		return 1 # continue | 
		
	
		
			
				|  |  |  |  | 		;; | 
		
	
		
			
				|  |  |  |  | 	esac | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | comment_for_reflog start | 
		
	
		
			
				|  |  |  |  | setup_reflog_action () { | 
		
	
		
			
				|  |  |  |  | 	comment_for_reflog start | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | if test ! -z "$switch_to" | 
		
	
		
			
				|  |  |  |  | then | 
		
	
		
			
				|  |  |  |  | 	if test ! -z "$switch_to" | 
		
	
		
			
				|  |  |  |  | 	then | 
		
	
		
			
				|  |  |  |  | 		GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $switch_to" | 
		
	
		
			
				|  |  |  |  | 		output git checkout "$switch_to" -- || | 
		
	
		
			
				|  |  |  |  | 			die "$(eval_gettext "Could not checkout \$switch_to")" | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 		comment_for_reflog start | 
		
	
		
			
				|  |  |  |  | fi | 
		
	
		
			
				|  |  |  |  | 	fi | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | orig_head=$(git rev-parse --verify HEAD) || die "$(gettext "No HEAD?")" | 
		
	
		
			
				|  |  |  |  | mkdir -p "$state_dir" || die "$(eval_gettext "Could not create temporary \$state_dir")" | 
		
	
		
			
				|  |  |  |  | rm -f "$(git rev-parse --git-path REBASE_HEAD)" | 
		
	
		
			
				|  |  |  |  | init_basic_state () { | 
		
	
		
			
				|  |  |  |  | 	orig_head=$(git rev-parse --verify HEAD) || die "$(gettext "No HEAD?")" | 
		
	
		
			
				|  |  |  |  | 	mkdir -p "$state_dir" || die "$(eval_gettext "Could not create temporary \$state_dir")" | 
		
	
		
			
				|  |  |  |  | 	rm -f "$(git rev-parse --git-path REBASE_HEAD)" | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	: > "$state_dir"/interactive || die "$(gettext "Could not mark as interactive")" | 
		
	
		
			
				|  |  |  |  | 	write_basic_state | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | init_revisions_and_shortrevisions () { | 
		
	
		
			
				|  |  |  |  | 	shorthead=$(git rev-parse --short $orig_head) | 
		
	
		
			
				|  |  |  |  | 	shortonto=$(git rev-parse --short $onto) | 
		
	
		
			
				|  |  |  |  | 	if test -z "$rebase_root" | 
		
	
		
			
				|  |  |  |  | 		# this is now equivalent to ! -z "$upstream" | 
		
	
		
			
				|  |  |  |  | 	then | 
		
	
		
			
				|  |  |  |  | 		shortupstream=$(git rev-parse --short $upstream) | 
		
	
		
			
				|  |  |  |  | 		revisions=$upstream...$orig_head | 
		
	
		
			
				|  |  |  |  | 		shortrevisions=$shortupstream..$shorthead | 
		
	
		
			
				|  |  |  |  | 	else | 
		
	
		
			
				|  |  |  |  | 		revisions=$onto...$orig_head | 
		
	
		
			
				|  |  |  |  | 		shortrevisions=$shorthead | 
		
	
		
			
				|  |  |  |  | 	fi | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | complete_action() { | 
		
	
		
			
				|  |  |  |  | 	test -s "$todo" || echo noop >> "$todo" | 
		
	
		
			
				|  |  |  |  | 	test -z "$autosquash" || git rebase--helper --rearrange-squash || exit | 
		
	
		
			
				|  |  |  |  | 	test -n "$cmd" && git rebase--helper --add-exec-commands "$cmd" | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	todocount=$(git stripspace --strip-comments <"$todo" | wc -l) | 
		
	
		
			
				|  |  |  |  | 	todocount=${todocount##* } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | cat >>"$todo" <<EOF | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | $comment_char $(eval_ngettext \ | 
		
	
		
			
				|  |  |  |  | 	"Rebase \$shortrevisions onto \$shortonto (\$todocount command)" \ | 
		
	
		
			
				|  |  |  |  | 	"Rebase \$shortrevisions onto \$shortonto (\$todocount commands)" \ | 
		
	
		
			
				|  |  |  |  | 	"$todocount") | 
		
	
		
			
				|  |  |  |  | EOF | 
		
	
		
			
				|  |  |  |  | 	append_todo_help | 
		
	
		
			
				|  |  |  |  | 	gettext " | 
		
	
		
			
				|  |  |  |  | 	However, if you remove everything, the rebase will be aborted. | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	" | git stripspace --comment-lines >>"$todo" | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	if test -z "$keep_empty" | 
		
	
		
			
				|  |  |  |  | 	then | 
		
	
		
			
				|  |  |  |  | 		printf '%s\n' "$comment_char $(gettext "Note that empty commits are commented out")" >>"$todo" | 
		
	
		
			
				|  |  |  |  | 	fi | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	has_action "$todo" || | 
		
	
		
			
				|  |  |  |  | 		return 2 | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	cp "$todo" "$todo".backup | 
		
	
		
			
				|  |  |  |  | 	collapse_todo_ids | 
		
	
		
			
				|  |  |  |  | 	git_sequence_editor "$todo" || | 
		
	
		
			
				|  |  |  |  | 		die_abort "$(gettext "Could not execute editor")" | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	has_action "$todo" || | 
		
	
		
			
				|  |  |  |  | 		return 2 | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	git rebase--helper --check-todo-list || { | 
		
	
		
			
				|  |  |  |  | 		ret=$? | 
		
	
		
			
				|  |  |  |  | 		checkout_onto | 
		
	
		
			
				|  |  |  |  | 		exit $ret | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	expand_todo_ids | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	test -d "$rewritten" || test -n "$force_rebase" || | 
		
	
		
			
				|  |  |  |  | 	onto="$(git rebase--helper --skip-unnecessary-picks)" || | 
		
	
		
			
				|  |  |  |  | 	die "Could not skip unnecessary pick commands" | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	checkout_onto | 
		
	
		
			
				|  |  |  |  | 	if test -z "$rebase_root" && test ! -d "$rewritten" | 
		
	
		
			
				|  |  |  |  | 	then | 
		
	
		
			
				|  |  |  |  | 		require_clean_work_tree "rebase" | 
		
	
		
			
				|  |  |  |  | 		exec git rebase--helper ${force_rebase:+--no-ff} $allow_empty_message \ | 
		
	
		
			
				|  |  |  |  | 			--continue | 
		
	
		
			
				|  |  |  |  | 	fi | 
		
	
		
			
				|  |  |  |  | 	do_rest | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | git_rebase__interactive () { | 
		
	
		
			
				|  |  |  |  | 	initiate_action "$action" | 
		
	
		
			
				|  |  |  |  | 	ret=$? | 
		
	
		
			
				|  |  |  |  | 	if test $ret = 0; then | 
		
	
		
			
				|  |  |  |  | 		return 0 | 
		
	
		
			
				|  |  |  |  | 	fi | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	setup_reflog_action | 
		
	
		
			
				|  |  |  |  | 	init_basic_state | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	init_revisions_and_shortrevisions | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	git rebase--helper --make-script ${keep_empty:+--keep-empty} \ | 
		
	
		
			
				|  |  |  |  | 		$revisions ${restrict_revision+^$restrict_revision} >"$todo" || | 
		
	
		
			
				|  |  |  |  | 	die "$(gettext "Could not generate todo list")" | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	complete_action | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | git_rebase__interactive__preserve_merges () { | 
		
	
		
			
				|  |  |  |  | 	initiate_action "$action" | 
		
	
		
			
				|  |  |  |  | 	ret=$? | 
		
	
		
			
				|  |  |  |  | 	if test $ret = 0; then | 
		
	
		
			
				|  |  |  |  | 		return 0 | 
		
	
		
			
				|  |  |  |  | 	fi | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	setup_reflog_action | 
		
	
		
			
				|  |  |  |  | 	init_basic_state | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | : > "$state_dir"/interactive || die "$(gettext "Could not mark as interactive")" | 
		
	
		
			
				|  |  |  |  | write_basic_state | 
		
	
		
			
				|  |  |  |  | if test t = "$preserve_merges" | 
		
	
		
			
				|  |  |  |  | then | 
		
	
		
			
				|  |  |  |  | 	if test -z "$rebase_root" | 
		
	
		
			
				|  |  |  |  | 	then | 
		
	
		
			
				|  |  |  |  | 		mkdir "$rewritten" && | 
		
	
	
		
			
				
					
					|  |  |  | @ -883,41 +993,17 @@ then | 
		
	
		
			
				|  |  |  |  | 		echo $onto > "$rewritten"/root || | 
		
	
		
			
				|  |  |  |  | 			die "$(gettext "Could not init rewritten commits")" | 
		
	
		
			
				|  |  |  |  | 	fi | 
		
	
		
			
				|  |  |  |  | 	# No cherry-pick because our first pass is to determine | 
		
	
		
			
				|  |  |  |  | 	# parents to rewrite and skipping dropped commits would | 
		
	
		
			
				|  |  |  |  | 	# prematurely end our probe | 
		
	
		
			
				|  |  |  |  | 	merges_option= | 
		
	
		
			
				|  |  |  |  | else | 
		
	
		
			
				|  |  |  |  | 	merges_option="--no-merges --cherry-pick" | 
		
	
		
			
				|  |  |  |  | fi | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | shorthead=$(git rev-parse --short $orig_head) | 
		
	
		
			
				|  |  |  |  | shortonto=$(git rev-parse --short $onto) | 
		
	
		
			
				|  |  |  |  | if test -z "$rebase_root" | 
		
	
		
			
				|  |  |  |  | 	# this is now equivalent to ! -z "$upstream" | 
		
	
		
			
				|  |  |  |  | then | 
		
	
		
			
				|  |  |  |  | 	shortupstream=$(git rev-parse --short $upstream) | 
		
	
		
			
				|  |  |  |  | 	revisions=$upstream...$orig_head | 
		
	
		
			
				|  |  |  |  | 	shortrevisions=$shortupstream..$shorthead | 
		
	
		
			
				|  |  |  |  | else | 
		
	
		
			
				|  |  |  |  | 	revisions=$onto...$orig_head | 
		
	
		
			
				|  |  |  |  | 	shortrevisions=$shorthead | 
		
	
		
			
				|  |  |  |  | fi | 
		
	
		
			
				|  |  |  |  | if test t != "$preserve_merges" | 
		
	
		
			
				|  |  |  |  | then | 
		
	
		
			
				|  |  |  |  | 	git rebase--helper --make-script ${keep_empty:+--keep-empty} \ | 
		
	
		
			
				|  |  |  |  | 		$revisions ${restrict_revision+^$restrict_revision} >"$todo" || | 
		
	
		
			
				|  |  |  |  | 	die "$(gettext "Could not generate todo list")" | 
		
	
		
			
				|  |  |  |  | else | 
		
	
		
			
				|  |  |  |  | 	init_revisions_and_shortrevisions | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	format=$(git config --get rebase.instructionFormat) | 
		
	
		
			
				|  |  |  |  | 	# the 'rev-list .. | sed' requires %m to parse; the instruction requires %H to parse | 
		
	
		
			
				|  |  |  |  | 	git rev-list $merges_option --format="%m%H ${format:-%s}" \ | 
		
	
		
			
				|  |  |  |  | 	git rev-list --format="%m%H ${format:-%s}" \ | 
		
	
		
			
				|  |  |  |  | 		--reverse --left-right --topo-order \ | 
		
	
		
			
				|  |  |  |  | 		$revisions ${restrict_revision+^$restrict_revision} | \ | 
		
	
		
			
				|  |  |  |  | 		sed -n "s/^>//p" | | 
		
	
		
			
				|  |  |  |  | 	while read -r sha1 rest | 
		
	
		
			
				|  |  |  |  | 	do | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 		if test -z "$keep_empty" && is_empty_commit $sha1 && ! is_merge_commit $sha1 | 
		
	
		
			
				|  |  |  |  | 		then | 
		
	
		
			
				|  |  |  |  | 			comment_out="$comment_char " | 
		
	
	
		
			
				
					
					|  |  |  | @ -944,11 +1030,8 @@ else | 
		
	
		
			
				|  |  |  |  | 			printf '%s\n' "${comment_out}pick $sha1 $rest" >>"$todo" | 
		
	
		
			
				|  |  |  |  | 		fi | 
		
	
		
			
				|  |  |  |  | 	done | 
		
	
		
			
				|  |  |  |  | fi | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | # Watch for commits that been dropped by --cherry-pick | 
		
	
		
			
				|  |  |  |  | if test t = "$preserve_merges" | 
		
	
		
			
				|  |  |  |  | then | 
		
	
		
			
				|  |  |  |  | 	# Watch for commits that been dropped by --cherry-pick | 
		
	
		
			
				|  |  |  |  | 	mkdir "$dropped" | 
		
	
		
			
				|  |  |  |  | 	# Save all non-cherry-picked changes | 
		
	
		
			
				|  |  |  |  | 	git rev-list $revisions --left-right --cherry-pick | \ | 
		
	
	
		
			
				
					
					|  |  |  | @ -971,66 +1054,6 @@ then | 
		
	
		
			
				|  |  |  |  | 			rm "$rewritten"/$rev | 
		
	
		
			
				|  |  |  |  | 		fi | 
		
	
		
			
				|  |  |  |  | 	done | 
		
	
		
			
				|  |  |  |  | fi | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | test -s "$todo" || echo noop >> "$todo" | 
		
	
		
			
				|  |  |  |  | test -z "$autosquash" || git rebase--helper --rearrange-squash || exit | 
		
	
		
			
				|  |  |  |  | test -n "$cmd" && git rebase--helper --add-exec-commands "$cmd" | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | todocount=$(git stripspace --strip-comments <"$todo" | wc -l) | 
		
	
		
			
				|  |  |  |  | todocount=${todocount##* } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | cat >>"$todo" <<EOF | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | $comment_char $(eval_ngettext \ | 
		
	
		
			
				|  |  |  |  | 	"Rebase \$shortrevisions onto \$shortonto (\$todocount command)" \ | 
		
	
		
			
				|  |  |  |  | 	"Rebase \$shortrevisions onto \$shortonto (\$todocount commands)" \ | 
		
	
		
			
				|  |  |  |  | 	"$todocount") | 
		
	
		
			
				|  |  |  |  | EOF | 
		
	
		
			
				|  |  |  |  | append_todo_help | 
		
	
		
			
				|  |  |  |  | gettext " | 
		
	
		
			
				|  |  |  |  | However, if you remove everything, the rebase will be aborted. | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | " | git stripspace --comment-lines >>"$todo" | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | if test -z "$keep_empty" | 
		
	
		
			
				|  |  |  |  | then | 
		
	
		
			
				|  |  |  |  | 	printf '%s\n' "$comment_char $(gettext "Note that empty commits are commented out")" >>"$todo" | 
		
	
		
			
				|  |  |  |  | fi | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | has_action "$todo" || | 
		
	
		
			
				|  |  |  |  | 	return 2 | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | cp "$todo" "$todo".backup | 
		
	
		
			
				|  |  |  |  | collapse_todo_ids | 
		
	
		
			
				|  |  |  |  | git_sequence_editor "$todo" || | 
		
	
		
			
				|  |  |  |  | 	die_abort "$(gettext "Could not execute editor")" | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | has_action "$todo" || | 
		
	
		
			
				|  |  |  |  | 	return 2 | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | git rebase--helper --check-todo-list || { | 
		
	
		
			
				|  |  |  |  | 	ret=$? | 
		
	
		
			
				|  |  |  |  | 	checkout_onto | 
		
	
		
			
				|  |  |  |  | 	exit $ret | 
		
	
		
			
				|  |  |  |  | 	complete_action | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | expand_todo_ids | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | test -d "$rewritten" || test -n "$force_rebase" || | 
		
	
		
			
				|  |  |  |  | onto="$(git rebase--helper --skip-unnecessary-picks)" || | 
		
	
		
			
				|  |  |  |  | die "Could not skip unnecessary pick commands" | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | checkout_onto | 
		
	
		
			
				|  |  |  |  | if test -z "$rebase_root" && test ! -d "$rewritten" | 
		
	
		
			
				|  |  |  |  | then | 
		
	
		
			
				|  |  |  |  | 	require_clean_work_tree "rebase" | 
		
	
		
			
				|  |  |  |  | 	exec git rebase--helper ${force_rebase:+--no-ff} $allow_empty_message \ | 
		
	
		
			
				|  |  |  |  | 		--continue | 
		
	
		
			
				|  |  |  |  | fi | 
		
	
		
			
				|  |  |  |  | do_rest | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | # ... and then we call the whole thing. | 
		
	
		
			
				|  |  |  |  | git_rebase__interactive | 
		
	
	
		
			
				
					
					| 
							
							
							
						 |  |  | 
 |