Re: [PATCH v5 1/7] add simple tests of consistency across rebase types
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jun 3, 2013, 22:28 UTC
- Message-ID
- <7v1u8ide2b.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <1370292135-1236-2-git-send-email-martinvonz@gmail.com>
Martin von Zweigbergk <martinvonz@gmail.com> writes:
Show 20 quoted lines
> Helped-by: Johannes Sixt <j6t@kdbg.org>
> ---
> t/lib-rebase.sh | 15 ++++++++
> t/t3421-rebase-topology-linear.sh | 78 +++++++++++++++++++++++++++++++++++++++
> 2 files changed, 93 insertions(+)
> create mode 100755 t/t3421-rebase-topology-linear.sh
>
> diff --git a/t/lib-rebase.sh b/t/lib-rebase.sh
> index 6ccf797..62b3887 100644
> --- a/t/lib-rebase.sh
> +++ b/t/lib-rebase.sh
> @@ -65,3 +65,18 @@ EOF
> test_set_editor "$(pwd)/fake-editor.sh"
> chmod a+x fake-editor.sh
> }
> +
> +# checks that the revisions in "$2" represent a linear range with the
> +# subjects in "$1"
> +test_linear_range () {
> + ! { git log --format=%p "$2" | sane_grep " " ;} &&An interesting way to spell:
test $(git rev-list --merges "$2" | wc -l) = 0
I think I am fine with either, though.
> + expected=$1 > + set -- $(git log --reverse --format=%s "$2") > + test "$expected" = "$*"
OK.
> +}
> +
> +reset_rebase () {
> + git rebase --abort # may fail; ignore exit codetest_might_fail to catch unusual exit codes?
Show 62 quoted lines
> + git reset --hard &&
> + git clean -f
> +}
> diff --git a/t/t3421-rebase-topology-linear.sh b/t/t3421-rebase-topology-linear.sh
> new file mode 100755
> index 0000000..c4b32db
> --- /dev/null
> +++ b/t/t3421-rebase-topology-linear.sh
> @@ -0,0 +1,78 @@
> +#!/bin/sh
> +
> +test_description='basic rebase topology tests'
> +. ./test-lib.sh
> +. "$TEST_DIRECTORY"/lib-rebase.sh
> +
> +# a---b---c
> +# \
> +# d---e
> +test_expect_success 'setup' '
> + test_commit a &&
> + test_commit b &&
> + test_commit c &&
> + git checkout b &&
> + test_commit d &&
> + test_commit e
> +'
> +
> +test_run_rebase () {
> + result=$1
> + shift
> + test_expect_$result "simple rebase $*" "
> + reset_rebase &&
> + git rebase $* c e &&
> + test_cmp_rev c HEAD~2 &&
> + test_linear_range 'd e' c..
> + "
> +}
> +test_run_rebase success ''
> +test_run_rebase success -m
> +test_run_rebase success -i
> +test_run_rebase success -p
> +
> +test_run_rebase () {
> + result=$1
> + shift
> + test_expect_$result "rebase $* is no-op if upstream is an ancestor" "
> + reset_rebase &&
> + git rebase $* b e &&
> + test_cmp_rev e HEAD
> + "
> +}
> +test_run_rebase success ''
> +test_run_rebase success -m
> +test_run_rebase success -i
> +test_run_rebase success -p
> +
> +test_run_rebase () {
> + result=$1
> + shift
> + test_expect_$result "rebase $* -f rewrites even if upstream is an ancestor" "
> + reset_rebase &&
> + git rebase $* -f b e &&Asking to rebase the history leading to e from b on top of the merge base (which happens to be b) may be no-op or force-create a new history that is parallel. OK.
Show 14 quoted lines
> + ! test_cmp_rev e HEAD &&
> + test_cmp_rev b HEAD~2 &&
> + test_linear_range 'd e' b..
> + "
> +}
> +test_run_rebase success ''
> +test_run_rebase success -m
> +test_run_rebase success -i
> +test_run_rebase failure -p
> +
> +test_run_rebase () {
> + result=$1
> + shift
> + test_expect_$result "rebase $* fast-forwards if an ancestor of upstream" "The description is a non-sentence, and while I can tell what it wants to say, I do not have a good suggestion for rephrasing this.
This is asking to rebase the history leading to b on top of e, but e already includes everything in b, so it just turns into a no-op of not moving from e. So it is not even a fast-forward.
Show 11 quoted lines
> + reset_rebase && > + git rebase $* e b && > + test_cmp_rev e HEAD > + " > +} > +test_run_rebase success '' > +test_run_rebase success -m > +test_run_rebase success -i > +test_run_rebase success -p > + > +test_done