From: Yann Dirson Date: Sun, 25 Feb 2007 22:11:33 GMT Subject: [PATCH] Add a testcase for the safety of pull-policy='pull'. Message-ID: <20070225220853.31361.7201.stgit@gandelf.nowhere.earth> This testcase demonstrates a long-standing problem with the handling of conflicts on a rewinding branch, when "stg pull" calls git-pull. Signed-off-by: Yann Dirson --- This is precisely the problem that made me believe using "git-pull" was a wrong idea to start with. Since it seems there are uses for the "git-pull" mode, this particular issue has to be addressed - I'm however not sure how. t/t2101-pull-policy-pull.sh | 60 ++++++++++++++++++++++++++++++++++ t/t2102-pull-policy-rebase.sh | 72 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 132 insertions(+), 0 deletions(-) diff --git a/t/t2101-pull-policy-pull.sh b/t/t2101-pull-policy-pull.sh new file mode 100755 index 0000000..368d7d4 --- /dev/null +++ b/t/t2101-pull-policy-pull.sh @@ -0,0 +1,60 @@ +#!/bin/sh +# +# Copyright (c) 2007 Yann Dirson +# + +test_description='Excercise pull-policy "fetch-rebase".' + +. ./test-lib.sh + +# don't need this repo, but better not drop it, see t1100 +#rm -rf .git + +# Need a repo to clone +test_create_repo upstream + +test_expect_success \ + 'Setup upstream repo, clone it, and add patches to the clone' \ + ' + (cd upstream && stg init) && + stg clone upstream clone && + (cd clone && + git repo-config branch.master.stgit.pull-policy pull && + git repo-config --list && + stg new c1 -m c1 && + echo a > file && stg add file && stg refresh + ) + ' + +test_expect_success \ + 'Add non-rewinding commit upstream and pull it from clone' \ + ' + (cd upstream && stg new u1 -m u1 && + echo a > file2 && stg add file2 && stg refresh) && + (cd clone && stg pull) && + test -e clone/file2 + ' + +# note: with pre-1.5 Git the clone is not automatically recorded +# as rewinding, and thus heads/origin is not moved, but the stack +# is still correctly rebased + +test_expect_failure \ + 'Rewind/rewrite upstream commit and pull it from clone, without --merged' \ + ' + (cd upstream && echo b >> file2 && stg refresh) && + (cd clone && stg pull) + ' + +test_expect_success \ + 'Undo the conflicted pull' \ + '(cd clone && stg push --undo)' + +test_expect_success \ + 'Pull the rewinded commit, with --merged' \ + ' + (cd clone && stg pull --merged) && + test `wc -l file && stg add file && stg refresh + ) + ' + +test_expect_success \ + 'Add non-rewinding commit upstream and pull it from clone' \ + ' + (cd upstream && stg new u1 -m u1 && + echo a > file2 && stg add file2 && stg refresh) && + (cd clone && stg pull) && + test -e clone/file2 + ' + +# note: with pre-1.5 Git the clone is not automatically recorded +# as rewinding, and thus heads/origin is not moved, but the stack +# is still correctly rebased +test_expect_success \ + 'Rewind/rewrite upstream commit and pull it from clone' \ + ' + (cd upstream && echo b >> file2 && stg refresh) && + (cd clone && stg pull) && + test `wc -l > file2 && stg refresh) && + (cd clone && git fetch && stg pull) && + test `wc -l file3 && stg add file3 && stg refresh) && + (cd clone && stg commit && stg new c2 -m c2 && + echo a >> file && stg refresh) + ' +test_expect_failure \ + 'Try to and commit a patch in clone' \ + '(cd clone && stg pull)' + +test_done