Re: [PATCH 8/8] rebase: implement --[no-]autostash and rebase.autostash
- From
Eric Sunshine <sunshine@sunshineco.com>
- Date
- May 10, 2013, 14:41 UTC
- Message-ID
- <CAPig+cQuWTfDqoF4G_Sk5_9VWKffpqmGC2WxXeF9DCyDxLx16A@mail.gmail.com>
- In-Reply-To
- <1368196005-5354-9-git-send-email-artagnon@gmail.com>
On Fri, May 10, 2013 at 10:26 AM, Ramkumar Ramachandra <artagnon@gmail.com> wrote:
Show 29 quoted lines
> diff --git a/t/t3420-rebase-autostash.sh b/t/t3420-rebase-autostash.sh > new file mode 100755 > index 0000000..8386998 > --- /dev/null > +++ b/t/t3420-rebase-autostash.sh > @@ -0,0 +1,148 @@ > +#!/bin/sh > +# > +# Copyright (c) 2013 Ramkumar Ramachandra > +# > + > +test_description='git rebase --autostash tests' > +. ./test-lib.sh > + > +test_expect_success setup ' > + echo hello-world >file0 && > + git add . && > + test_tick && > + git commit -m "initial commit" && > + git checkout -b feature-branch && > + echo another-hello >file1 && > + echo goodbye >file2 && > + git add . && > + test_tick && > + git commit -m "second commit" && > + echo final-goodbye >file3 && > + git add . && > + test_tick && > + git commit -m "third commit"
Broken &&-chain.
Show 5 quoted lines
> + git checkout -b unrelated-onto-branch master && > + echo unrelated >file4 && > + git add . && > + test_tick && > + git commit -m "unrelated commit"
Broken &&-chain.
Show 28 quoted lines
> + git checkout -b related-onto-branch master &&
> + echo conflicting-change >file2 &&
> + git add . &&
> + test_tick &&
> + git commit -m "related commit"
> +'
> +
> +testrebase() {
> + type=$1
> + dotest=$2
> +
> + test_expect_success "rebase$type: dirty worktree, non-conflicting rebase" '
> + test_config rebase.autostash true &&
> + git reset --hard &&
> + git checkout -b rebased-feature-branch feature-branch &&
> + test_when_finished git branch -D rebased-feature-branch &&
> + echo dirty >>file3 &&
> + git rebase$type unrelated-onto-branch &&
> + grep unrelated file4 &&
> + grep dirty file3 &&
> + git checkout feature-branch
> + '
> +
> + test_expect_success "rebase$type: dirty index, non-conflicting rebase" '
> + test_config rebase.autostash true &&
> + git reset --hard &&
> + git checkout -b rebased-feature-branch feature-branch &&
> + test_when_finished git branch -D rebased-feature-branchBroken &&-chain.
Show 92 quoted lines
> + echo dirty >>file3 && > + git add file3 && > + git rebase$type unrelated-onto-branch && > + grep unrelated file4 && > + grep dirty file3 && > + git checkout feature-branch > + ' > + > + test_expect_success "rebase$type: conflicting rebase" ' > + test_config rebase.autostash true && > + git reset --hard && > + git checkout -b rebased-feature-branch feature-branch && > + test_when_finished git branch -D rebased-feature-branch && > + echo dirty >>file3 && > + test_must_fail git rebase$type related-onto-branch && > + test_path_is_file $dotest/autostash && > + ! grep dirty file3 && > + rm -rf $dotest && > + git reset --hard && > + git checkout feature-branch > + ' > + > + test_expect_success "rebase$type: --continue" ' > + test_config rebase.autostash true && > + git reset --hard && > + git checkout -b rebased-feature-branch feature-branch && > + test_when_finished git branch -D rebased-feature-branch && > + echo dirty >>file3 && > + test_must_fail git rebase$type related-onto-branch && > + test_path_is_file $dotest/autostash && > + ! grep dirty file3 && > + echo "conflicting-plus-goodbye" >file2 && > + git add file2 && > + git rebase --continue && > + test_path_is_missing $dotest/autostash && > + grep dirty file3 && > + git checkout feature-branch > + ' > + > + test_expect_success "rebase$type: --skip" ' > + test_config rebase.autostash true && > + git reset --hard && > + git checkout -b rebased-feature-branch feature-branch && > + test_when_finished git branch -D rebased-feature-branch && > + echo dirty >>file3 && > + test_must_fail git rebase$type related-onto-branch && > + test_path_is_file $dotest/autostash && > + ! grep dirty file3 && > + git rebase --skip && > + test_path_is_missing $dotest/autostash && > + grep dirty file3 && > + git checkout feature-branch > + ' > + > + test_expect_success "rebase$type: --abort" ' > + test_config rebase.autostash true && > + git reset --hard && > + git checkout -b rebased-feature-branch feature-branch && > + test_when_finished git branch -D rebased-feature-branch && > + echo dirty >>file3 && > + test_must_fail git rebase$type related-onto-branch && > + test_path_is_file $dotest/autostash && > + ! grep dirty file3 && > + git rebase --abort && > + test_path_is_missing $dotest/autostash && > + grep dirty file3 && > + git checkout feature-branch > + ' > + > + test_expect_success "rebase$type: non-conflicting rebase, conflicting stash" ' > + test_config rebase.autostash true && > + git reset --hard && > + git checkout -b rebased-feature-branch feature-branch && > + test_when_finished git branch -D rebased-feature-branch && > + echo dirty >file4 && > + git add file4 && > + git rebase$type unrelated-onto-branch && > + test_path_is_missing $dotest && > + git reset --hard && > + grep unrelated file4 && > + ! grep dirty file4 && > + git checkout feature-branch && > + git stash pop && > + grep dirty file4 > + ' > +} > + > +testrebase "" .git/rebase-apply > +testrebase " --merge" .git/rebase-merge > +testrebase " --interactive" .git/rebase-merge > + > +test_done