#!/bin/sh test_description='rebase should reread the todo file if an exec modifies it' . ./test-lib.sh . "$TEST_DIRECTORY"/lib-rebase.sh test_expect_success 'setup' ' test_commit first file && test_commit second file && test_commit third file ' test_expect_success 'rebase exec modifies rebase-todo' ' todo=.git/rebase-merge/git-rebase-todo && git rebase HEAD~1 -x "echo exec touch F >>$todo" && test -e F ' test_expect_success 'rebase exec with an empty list does not exec anything' ' git rebase HEAD -x "true" 2>output && ! grep "Executing: true" output ' test_expect_success 'loose object cache vs re-reading todo list' ' GIT_REBASE_TODO=.git/rebase-merge/git-rebase-todo && export GIT_REBASE_TODO && write_script append-todo.sh <<-\EOS && # For values 5 and 6, this yields SHA-1s with the same first two digits echo "pick $(git rev-parse --short \ $(printf "%s\\n" \ "tree $EMPTY_TREE" \ "author A U Thor $1 +0000" \ "committer A U Thor $1 +0000" \ "" \ "$1" | git hash-object -t commit -w --stdin))" >>$GIT_REBASE_TODO shift test -z "$*" || echo "exec $0 $*" >>$GIT_REBASE_TODO EOS git rebase HEAD -x "./append-todo.sh 5 6" ' test_expect_success 'todo is re-read after reword and squash' ' write_script reword-editor.sh <<-\EOS && GIT_SEQUENCE_EDITOR="echo \"exec echo $(cat file) >>actual\" >>" \ git rebase --edit-todo EOS test_write_lines first third >expected && set_fake_editor && GIT_SEQUENCE_EDITOR="$EDITOR" FAKE_LINES="reword 1 squash 2 fixup 3" \ GIT_EDITOR=./reword-editor.sh git rebase -i --root third && test_cmp expected actual ' test_expect_success 're-reading todo doesnt interfere with revert --edit' ' git reset --hard third && git revert --edit third second && cat >expect <<-\EOF && Revert "second" Revert "third" third second first EOF git log --format="%s" >actual && test_cmp expect actual ' test_expect_success 're-reading todo doesnt interfere with cherry-pick --edit' ' git reset --hard first && git cherry-pick --edit second third && cat >expect <<-\EOF && third second first EOF git log --format="%s" >actual && test_cmp expect actual ' test_done