summaryrefslogtreecommitdiffstats
path: root/t/t5523-push-upstream.sh
blob: 1f859ade16251d6e2c61dd84ebb14aa35bc41ca1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#!/bin/sh

test_description='push with --set-upstream'
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME

TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh
. "$TEST_DIRECTORY"/lib-terminal.sh

ensure_fresh_upstream() {
	rm -rf parent && git init --bare parent
}

test_expect_success 'setup bare parent' '
	ensure_fresh_upstream &&
	git remote add upstream parent
'

test_expect_success 'setup local commit' '
	echo content >file &&
	git add file &&
	git commit -m one
'

check_config() {
	(echo $2; echo $3) >expect.$1
	(git config branch.$1.remote
	 git config branch.$1.merge) >actual.$1
	test_cmp expect.$1 actual.$1
}

test_expect_success 'push -u main:main' '
	git push -u upstream main:main &&
	check_config main upstream refs/heads/main
'

test_expect_success 'push -u main:other' '
	git push -u upstream main:other &&
	check_config main upstream refs/heads/other
'

test_expect_success 'push -u --dry-run main:otherX' '
	git push -u --dry-run upstream main:otherX &&
	check_config main upstream refs/heads/other
'

test_expect_success 'push -u topic_2:topic_2' '
	git branch topic_2 &&
	git push -u upstream topic_2:topic_2 &&
	check_config topic_2 upstream refs/heads/topic_2
'

test_expect_success 'push -u topic_2:other2' '
	git push -u upstream topic_2:other2 &&
	check_config topic_2 upstream refs/heads/other2
'

test_expect_success 'push -u :topic_2' '
	git push -u upstream :topic_2 &&
	check_config topic_2 upstream refs/heads/other2
'

test_expect_success 'push -u --all(the same behavior with--branches)' '
	git branch all1 &&
	git branch all2 &&
	git push -u --all &&
	check_config all1 upstream refs/heads/all1 &&
	check_config all2 upstream refs/heads/all2 &&
	git config --get-regexp branch.all* > expect &&
	git config --remove-section branch.all1 &&
	git config --remove-section branch.all2 &&
	git push -u --branches &&
	check_config all1 upstream refs/heads/all1 &&
	check_config all2 upstream refs/heads/all2 &&
	git config --get-regexp branch.all* > actual &&
	test_cmp expect actual
'

test_expect_success 'push -u HEAD' '
	git checkout -b headbranch &&
	git push -u upstream HEAD &&
	check_config headbranch upstream refs/heads/headbranch
'

test_expect_success TTY 'progress messages go to tty' '
	ensure_fresh_upstream &&

	test_terminal git push -u upstream main >out 2>err &&
	test_grep "Writing objects" err
'

test_expect_success 'progress messages do not go to non-tty' '
	ensure_fresh_upstream &&

	# skip progress messages, since stderr is non-tty
	git push -u upstream main >out 2>err &&
	test_grep ! "Writing objects" err
'

test_expect_success 'progress messages go to non-tty (forced)' '
	ensure_fresh_upstream &&

	# force progress messages to stderr, even though it is non-tty
	git push -u --progress upstream main >out 2>err &&
	test_grep "Writing objects" err
'

test_expect_success TTY 'push -q suppresses progress' '
	ensure_fresh_upstream &&

	test_terminal git push -u -q upstream main >out 2>err &&
	test_grep ! "Writing objects" err
'

test_expect_success TTY 'push --no-progress suppresses progress' '
	ensure_fresh_upstream &&

	test_terminal git push -u --no-progress upstream main >out 2>err &&
	test_grep ! "Unpacking objects" err &&
	test_grep ! "Writing objects" err
'

test_expect_success TTY 'quiet push' '
	ensure_fresh_upstream &&

	test_terminal git push --quiet --no-progress upstream main 2>&1 | tee output &&
	test_must_be_empty output
'

test_expect_success TTY 'quiet push -u' '
	ensure_fresh_upstream &&

	test_terminal git push --quiet -u --no-progress upstream main 2>&1 | tee output &&
	test_must_be_empty output
'

test_done