|  | #!/bin/sh | 
|  | # | 
|  | # Copyright (c) 2010 Christian Couder | 
|  | # | 
|  |  | 
|  | test_description='Tests to check that "reset" options follow a known table' | 
|  |  | 
|  | . ./test-lib.sh | 
|  |  | 
|  |  | 
|  | test_expect_success 'creating initial commits' ' | 
|  | test_commit E file1 && | 
|  | test_commit D file1 && | 
|  | test_commit C file1 | 
|  | ' | 
|  |  | 
|  | while read W1 I1 H1 T opt W2 I2 H2 | 
|  | do | 
|  | test_expect_success "check: $W1 $I1 $H1 $T --$opt $W2 $I2 $H2" ' | 
|  | git reset --hard C && | 
|  | if test "$I1" != "$H1" | 
|  | then | 
|  | echo "$I1" >file1 && | 
|  | git add file1 | 
|  | fi && | 
|  | if test "$W1" != "$I1" | 
|  | then | 
|  | echo "$W1" >file1 | 
|  | fi && | 
|  | if test "$W2" != "XXXXX" | 
|  | then | 
|  | git reset --$opt $T && | 
|  | test "$(cat file1)" = "$W2" && | 
|  | git checkout-index -f -- file1 && | 
|  | test "$(cat file1)" = "$I2" && | 
|  | git checkout -f HEAD -- file1 && | 
|  | test "$(cat file1)" = "$H2" | 
|  | else | 
|  | test_must_fail git reset --$opt $T | 
|  | fi | 
|  | ' | 
|  | done <<\EOF | 
|  | A B C D soft   A B D | 
|  | A B C D mixed  A D D | 
|  | A B C D hard   D D D | 
|  | A B C D merge  XXXXX | 
|  | A B C D keep   XXXXX | 
|  | A B C C soft   A B C | 
|  | A B C C mixed  A C C | 
|  | A B C C hard   C C C | 
|  | A B C C merge  XXXXX | 
|  | A B C C keep   A C C | 
|  | B B C D soft   B B D | 
|  | B B C D mixed  B D D | 
|  | B B C D hard   D D D | 
|  | B B C D merge  D D D | 
|  | B B C D keep   XXXXX | 
|  | B B C C soft   B B C | 
|  | B B C C mixed  B C C | 
|  | B B C C hard   C C C | 
|  | B B C C merge  C C C | 
|  | B B C C keep   B C C | 
|  | B C C D soft   B C D | 
|  | B C C D mixed  B D D | 
|  | B C C D hard   D D D | 
|  | B C C D merge  XXXXX | 
|  | B C C D keep   XXXXX | 
|  | B C C C soft   B C C | 
|  | B C C C mixed  B C C | 
|  | B C C C hard   C C C | 
|  | B C C C merge  B C C | 
|  | B C C C keep   B C C | 
|  | EOF | 
|  |  | 
|  | test_expect_success 'setting up branches to test with unmerged entries' ' | 
|  | git reset --hard C && | 
|  | git branch branch1 && | 
|  | git branch branch2 && | 
|  | git checkout branch1 && | 
|  | test_commit B1 file1 && | 
|  | git checkout branch2 && | 
|  | test_commit B file1 | 
|  | ' | 
|  |  | 
|  | while read W1 I1 H1 T opt W2 I2 H2 | 
|  | do | 
|  | test_expect_success "check: $W1 $I1 $H1 $T --$opt $W2 $I2 $H2" ' | 
|  | git reset --hard B && | 
|  | test_must_fail git merge branch1 && | 
|  | cat file1 >X_file1 && | 
|  | if test "$W2" != "XXXXX" | 
|  | then | 
|  | git reset --$opt $T && | 
|  | if test "$W2" = "X" | 
|  | then | 
|  | test_cmp file1 X_file1 | 
|  | else | 
|  | test "$(cat file1)" = "$W2" | 
|  | fi && | 
|  | git checkout-index -f -- file1 && | 
|  | test "$(cat file1)" = "$I2" && | 
|  | git checkout -f HEAD -- file1 && | 
|  | test "$(cat file1)" = "$H2" | 
|  | else | 
|  | test_must_fail git reset --$opt $T | 
|  | fi | 
|  | ' | 
|  | done <<\EOF | 
|  | X U B C soft   XXXXX | 
|  | X U B C mixed  X C C | 
|  | X U B C hard   C C C | 
|  | X U B C merge  C C C | 
|  | X U B C keep   XXXXX | 
|  | X U B B soft   XXXXX | 
|  | X U B B mixed  X B B | 
|  | X U B B hard   B B B | 
|  | X U B B merge  B B B | 
|  | X U B B keep   XXXXX | 
|  | EOF | 
|  |  | 
|  | test_done |