From dc8ca9123a5b8aa21d8e987875aa2112871f4afa Mon Sep 17 00:00:00 2001 From: Ramkumar Ramachandra Date: Thu, 13 Jun 2013 21:36:11 +0530 Subject: [PATCH 1/3] rebase: guard against missing files in read_basic_state() Signed-off-by: Ramkumar Ramachandra Signed-off-by: Junio C Hamano --- git-rebase.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/git-rebase.sh b/git-rebase.sh index d0c11a910a..2122fe030e 100755 --- a/git-rebase.sh +++ b/git-rebase.sh @@ -84,6 +84,8 @@ keep_empty= test "$(git config --bool rebase.autosquash)" = "true" && autosquash=t read_basic_state () { + test -f "$state_dir/head-name" && + test -f "$state_dir/onto" && head_name=$(cat "$state_dir"/head-name) && onto=$(cat "$state_dir"/onto) && # We always write to orig-head, but interactive rebase used to write to From af2f0ebcbdb164043d6ad72c81c6ce5cdadf63b5 Mon Sep 17 00:00:00 2001 From: Ramkumar Ramachandra Date: Thu, 13 Jun 2013 21:36:12 +0530 Subject: [PATCH 2/3] rebase: finish_rebase() in fast-forward rebase In the following case $ git rebase master Fast-forwarded autostash-fix to master. The autostash is not applied automatically, because this codepath forgets to call finish_rebase(). Fix this. Also add a test to guard against regressions. Signed-off-by: Ramkumar Ramachandra Signed-off-by: Junio C Hamano --- git-rebase.sh | 1 + t/t3420-rebase-autostash.sh | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/git-rebase.sh b/git-rebase.sh index 2122fe030e..154d4be0a4 100755 --- a/git-rebase.sh +++ b/git-rebase.sh @@ -579,6 +579,7 @@ if test "$mb" = "$orig_head" then say "$(eval_gettext "Fast-forwarded \$branch_name to \$onto_name.")" move_to_original_branch + finish_rebase exit 0 fi diff --git a/t/t3420-rebase-autostash.sh b/t/t3420-rebase-autostash.sh index 479cbb215f..1bde007160 100755 --- a/t/t3420-rebase-autostash.sh +++ b/t/t3420-rebase-autostash.sh @@ -141,6 +141,17 @@ testrebase() { ' } +test_expect_success "rebase: fast-forward rebase" ' + test_config rebase.autostash true && + git reset --hard && + git checkout -b behind-feature-branch feature-branch~1 && + test_when_finished git branch -D behind-feature-branch && + echo dirty >>file1 && + git rebase feature-branch && + grep dirty file1 && + git checkout feature-branch +' + testrebase "" .git/rebase-apply testrebase " --merge" .git/rebase-merge testrebase " --interactive" .git/rebase-merge From 96e2b99ed56c8433cc4aa03f32d2ef2a22748fc0 Mon Sep 17 00:00:00 2001 From: Ramkumar Ramachandra Date: Thu, 13 Jun 2013 21:36:13 +0530 Subject: [PATCH 3/3] rebase: finish_rebase() in noop rebase In the following case $ git rebase master Current branch autostash-fix is up to date. the autostash is not applied automatically, because this codepath forgets to call finish_rebase(). Fix this. Also add a test to guard against regressions. Signed-off-by: Ramkumar Ramachandra Signed-off-by: Junio C Hamano --- git-rebase.sh | 1 + t/t3420-rebase-autostash.sh | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/git-rebase.sh b/git-rebase.sh index 154d4be0a4..2d5c2bd0fc 100755 --- a/git-rebase.sh +++ b/git-rebase.sh @@ -547,6 +547,7 @@ then # Lazily switch to the target branch if needed... test -z "$switch_to" || git checkout "$switch_to" -- say "$(eval_gettext "Current branch \$branch_name is up to date.")" + finish_rebase exit 0 else say "$(eval_gettext "Current branch \$branch_name is up to date, rebase forced.")" diff --git a/t/t3420-rebase-autostash.sh b/t/t3420-rebase-autostash.sh index 1bde007160..90eb26493c 100755 --- a/t/t3420-rebase-autostash.sh +++ b/t/t3420-rebase-autostash.sh @@ -152,6 +152,17 @@ test_expect_success "rebase: fast-forward rebase" ' git checkout feature-branch ' +test_expect_success "rebase: noop rebase" ' + test_config rebase.autostash true && + git reset --hard && + git checkout -b same-feature-branch feature-branch && + test_when_finished git branch -D same-feature-branch && + echo dirty >>file1 && + git rebase feature-branch && + grep dirty file1 && + git checkout feature-branch +' + testrebase "" .git/rebase-apply testrebase " --merge" .git/rebase-merge testrebase " --interactive" .git/rebase-merge