Merge branch 'tf/prompt-preserve-exit-status'
[git] / t / t5408-send-pack-stdin.sh
1 #!/bin/sh
2
3 test_description='send-pack --stdin tests'
4 . ./test-lib.sh
5
6 create_ref () {
7         tree=$(git write-tree) &&
8         test_tick &&
9         commit=$(echo "$1" | git commit-tree $tree) &&
10         git update-ref "$1" $commit
11 }
12
13 clear_remote () {
14         rm -rf remote.git &&
15         git init --bare remote.git
16 }
17
18 verify_push () {
19         git rev-parse "$1" >expect &&
20         git --git-dir=remote.git rev-parse "${2:-$1}" >actual &&
21         test_cmp expect actual
22 }
23
24 test_expect_success 'setup refs' '
25         cat >refs <<-\EOF &&
26         refs/heads/A
27         refs/heads/C
28         refs/tags/D
29         refs/heads/B
30         refs/tags/E
31         EOF
32         for i in $(cat refs); do
33                 create_ref $i || return 1
34         done
35 '
36
37 # sanity check our setup
38 test_expect_success 'refs on cmdline' '
39         clear_remote &&
40         git send-pack remote.git $(cat refs) &&
41         for i in $(cat refs); do
42                 verify_push $i || return 1
43         done
44 '
45
46 test_expect_success 'refs over stdin' '
47         clear_remote &&
48         git send-pack remote.git --stdin <refs &&
49         for i in $(cat refs); do
50                 verify_push $i || return 1
51         done
52 '
53
54 test_expect_success 'stdin lines are full refspecs' '
55         clear_remote &&
56         echo "A:other" >input &&
57         git send-pack remote.git --stdin <input &&
58         verify_push refs/heads/A refs/heads/other
59 '
60
61 test_expect_success 'stdin mixed with cmdline' '
62         clear_remote &&
63         echo A >input &&
64         git send-pack remote.git --stdin B <input &&
65         verify_push A &&
66         verify_push B
67 '
68
69 test_expect_success 'cmdline refs written in order' '
70         clear_remote &&
71         test_must_fail git send-pack remote.git A:foo B:foo &&
72         verify_push A foo
73 '
74
75 test_expect_success '--stdin refs come after cmdline' '
76         clear_remote &&
77         echo A:foo >input &&
78         test_must_fail git send-pack remote.git --stdin B:foo <input &&
79         verify_push B foo
80 '
81
82 test_expect_success 'refspecs and --mirror do not mix (cmdline)' '
83         clear_remote &&
84         test_must_fail git send-pack remote.git --mirror $(cat refs)
85 '
86
87 test_expect_success 'refspecs and --mirror do not mix (stdin)' '
88         clear_remote &&
89         test_must_fail git send-pack remote.git --mirror --stdin <refs
90 '
91
92 test_done