README_DOCS.rst: update tg prev and tg next usage summary
[topgit/pro.git] / t / t5020-update-remote.sh
blob858f4d6aeb9d440d58783b6fadd415e1d406bdca
1 #!/bin/sh
3 test_description='tg update remote branches'
5 TEST_NO_CREATE_REPO=1
7 . ./test-lib.sh
9 test_plan 7
11 tg_test_remote=uranus
13 uctmp="$(test_get_temp update-check)" || die
15 branch_is_up_to_date() {
16 needs_update_check "$@" >"$uctmp" &&
18 read -r uc_processed &&
19 read -r uc_behind &&
20 read -r uc_ahead &&
21 read -r uc_partial
22 } <"$uctmp" &&
23 test z"$uc_behind" = z":"
26 test_expect_success 'setup' '
27 test_create_repo pristine &&
28 cd pristine &&
29 git checkout --orphan release &&
30 git read-tree --empty &&
31 git reset --hard &&
32 test_commit "release~1" &&
33 tg_test_create_branches <<-EOT &&
34 t/patch1 [PATCH] alpha patch
35 release
37 t/patch2 [PATCH] beta patch
38 release
39 EOT
40 git checkout -f t/patch1 &&
41 test_commit "alpha~1" &&
42 git checkout -f t/patch2 &&
43 test_commit "beta~1" &&
44 tg_test_create_branch t/int -m "[INTERMEDIATE] extra level" t/patch2 &&
45 tg_test_create_branch stage -m "[STAGE] staging branch" release t/patch1 t/int &&
46 test_must_fail branch_is_up_to_date stage &&
47 git symbolic-ref HEAD "$(tg --top-bases)/stage" &&
48 git reset --hard &&
49 git rm --force --ignore-unmatch -- .topmsg .topdeps &&
50 git read-tree -m release t/patch1 t/int &&
51 git rm --force --ignore-unmatch -- .topmsg .topdeps &&
52 newtree="$(git write-tree)" && test -n "$newtree" &&
53 test_tick &&
54 newcommit="$(git commit-tree -p HEAD -p t/patch1 -p t/int -m "mighty octopus" "$newtree")" &&
55 test -n "$newcommit" && git update-ref HEAD "$newcommit" HEAD &&
56 git checkout -f stage &&
57 test_tick &&
58 git merge -m "bases up" "$(tg --top-bases)/stage" &&
59 git config remote.uranus.url "." &&
60 git config topgit.remote uranus &&
61 git for-each-ref --format="%(refname)" >refs &&
62 awk <refs >refs2 "
63 { orig = \$0 }
64 \$0 ~ /\/heads\// {
65 sub(/\/heads\//, \"/remotes/uranus/\")
66 print \$0, orig
67 next
69 \$0 ~ /\/top-bases\// {
70 sub(/\/top-bases\//, \"/remotes/uranus/top-bases/\")
71 print \$0, orig
72 next
74 \$0 ~ /\/heads\/\{top-bases\}\// {
75 sub(/\/heads\/\{top-bases\}\//, \"/remotes/uranus/{top-bases}/\")
76 print \$0, orig
77 next
79 " &&
80 while read -r newref oldref; do
81 echo "oldref = $oldref" &&
82 echo "newref = $newref" &&
83 git update-ref "$newref" "$oldref" ""
84 done <refs2 &&
85 rm -f refs refs2 &&
86 branch_is_up_to_date stage &&
87 git gc --aggressive --prune=now
90 test_expect_success 'remote level 1 dep' '
91 cp -pR pristine level1 &&
92 cd level1 &&
93 git symbolic-ref HEAD refs/remotes/uranus/t/patch1 &&
94 git reset --hard &&
95 git tag oldalpha &&
96 echo "amend alpha" >> "alpha~1.t" &&
97 git add -u &&
98 test_tick &&
99 git commit -m "amend alpha" &&
100 git tag newalpha &&
101 test_must_fail git diff --exit-code oldalpha:alpha~1.t newalpha:alpha~1.t &&
102 test_must_fail branch_is_up_to_date stage &&
103 tg update stage &&
104 branch_is_up_to_date stage &&
105 test_must_fail git diff --exit-code oldalpha:alpha~1.t stage:alpha~1.t &&
106 git diff --exit-code newalpha:alpha~1.t stage:alpha~1.t
109 test_expect_success 'remote level 2 dep' '
110 cp -pR pristine level2 &&
111 cd level2 &&
112 git symbolic-ref HEAD refs/remotes/uranus/t/patch2 &&
113 git reset --hard &&
114 git tag oldbeta &&
115 echo "amend beta" >> "beta~1.t" &&
116 git add -u &&
117 test_tick &&
118 git commit -m "amend beta" &&
119 git tag newbeta &&
120 test_must_fail git diff --exit-code oldbeta:beta~1.t newbeta:beta~1.t &&
121 test_must_fail branch_is_up_to_date stage &&
122 tg update stage &&
123 branch_is_up_to_date stage &&
124 test_must_fail git diff --exit-code oldbeta:beta~1.t stage:beta~1.t &&
125 git diff --exit-code newbeta:beta~1.t stage:beta~1.t
128 test_expect_success 'remote level 1 base' '
129 cp -pR pristine level1base &&
130 cd level1base &&
131 git symbolic-ref HEAD "$(tg --top-bases -r)/t/patch1" &&
132 git reset --hard &&
133 git tag oldrelease &&
134 echo "amend release" >> "release~1.t" &&
135 git add -u &&
136 test_tick &&
137 git commit -m "amend release on t/patch1 base" &&
138 git tag newrelease &&
139 test_must_fail git diff --exit-code oldrelease:release~1.t newrelease:release~1.t &&
140 test_must_fail branch_is_up_to_date stage &&
141 tg update stage &&
142 branch_is_up_to_date stage &&
143 test_must_fail git diff --exit-code oldrelease:release~1.t stage:release~1.t &&
144 git diff --exit-code newrelease:release~1.t stage:release~1.t
147 test_expect_success 'remote level 2 base' '
148 cp -pR pristine level2base &&
149 cd level2base &&
150 git symbolic-ref HEAD "$(tg --top-bases -r)/t/patch2" &&
151 git reset --hard &&
152 git tag oldrelease &&
153 echo "amend release" >> "release~1.t" &&
154 git add -u &&
155 test_tick &&
156 git commit -m "amend release on t/patch2 base" &&
157 git tag newrelease &&
158 test_must_fail git diff --exit-code oldrelease:release~1.t newrelease:release~1.t &&
159 test_must_fail branch_is_up_to_date stage &&
160 tg update stage &&
161 branch_is_up_to_date stage &&
162 test_must_fail git diff --exit-code oldrelease:release~1.t stage:release~1.t &&
163 git diff --exit-code newrelease:release~1.t stage:release~1.t
166 test_expect_success 'remote intermediate base' '
167 cp -pR pristine intbase &&
168 cd intbase &&
169 git symbolic-ref HEAD "$(tg --top-bases -r)/t/int" &&
170 git reset --hard &&
171 git tag oldbeta &&
172 echo "amend beta" >> "beta~1.t" &&
173 git add -u &&
174 test_tick &&
175 git commit -m "amend beta on t/int base" &&
176 git tag newbeta &&
177 test_must_fail git diff --exit-code oldbeta:beta~1.t newbeta:beta~1.t &&
178 test_must_fail branch_is_up_to_date stage &&
179 tg update stage &&
180 branch_is_up_to_date stage &&
181 test_must_fail git diff --exit-code oldbeta:beta~1.t stage:beta~1.t &&
182 git diff --exit-code newbeta:beta~1.t stage:beta~1.t
185 test_expect_success 'remote stage base' '
186 cp -pR pristine stagebase &&
187 cd stagebase &&
188 git symbolic-ref HEAD "$(tg --top-bases -r)/stage" &&
189 git reset --hard &&
190 git tag oldalpha &&
191 echo "amend alpha" >> "alpha~1.t" &&
192 git add -u &&
193 test_tick &&
194 git commit -m "amend alpha on stage base" &&
195 git tag newalpha &&
196 test_must_fail git diff --exit-code oldalpha:alpha~1.t newalpha:alpha~1.t &&
197 test_must_fail branch_is_up_to_date stage &&
198 tg update stage &&
199 branch_is_up_to_date stage &&
200 test_must_fail git diff --exit-code oldalpha:alpha~1.t stage:alpha~1.t &&
201 git diff --exit-code newalpha:alpha~1.t stage:alpha~1.t
204 test_done